@hotmeshio/long-tail 0.23.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. package/build/adapters/express.d.ts +9 -1
  2. package/build/adapters/express.js +32 -41
  3. package/build/api/auth-sso.d.ts +1 -1
  4. package/build/api/bot-accounts.d.ts +2 -0
  5. package/build/api/bot-accounts.js +4 -0
  6. package/build/api/capabilities.d.ts +7 -2
  7. package/build/api/capabilities.js +13 -2
  8. package/build/api/escalations/analytics.js +5 -0
  9. package/build/api/escalations/bulk.d.ts +2 -0
  10. package/build/api/escalations/bulk.js +9 -4
  11. package/build/api/escalations/helpers.d.ts +5 -0
  12. package/build/api/escalations/helpers.js +7 -0
  13. package/build/api/escalations/index.d.ts +1 -0
  14. package/build/api/escalations/index.js +4 -1
  15. package/build/api/escalations/list.d.ts +5 -0
  16. package/build/api/escalations/list.js +19 -5
  17. package/build/api/escalations/metadata.js +3 -0
  18. package/build/api/escalations/related.d.ts +18 -0
  19. package/build/api/escalations/related.js +205 -0
  20. package/build/api/escalations/single.d.ts +3 -2
  21. package/build/api/escalations/single.js +8 -3
  22. package/build/api/mcp/tools.d.ts +12 -0
  23. package/build/api/mcp/tools.js +113 -9
  24. package/build/api/roles.js +4 -0
  25. package/build/api/scan-codes/choice.js +31 -7
  26. package/build/api/scan-codes/present.js +5 -1
  27. package/build/api/settings.d.ts +1 -1
  28. package/build/api/settings.js +12 -1
  29. package/build/api/tasks.d.ts +3 -3
  30. package/build/api/tasks.js +30 -7
  31. package/build/api/workflows/input-lookups.js +1 -1
  32. package/build/api/workflows/invocable.js +2 -2
  33. package/build/api/workflows/invocation.js +1 -1
  34. package/build/api/yaml-workflows/deploy.d.ts +10 -2
  35. package/build/api/yaml-workflows/deploy.js +42 -2
  36. package/build/lib/db/schemas/038_oauth_server.sql +46 -0
  37. package/build/lib/events/browser-view.d.ts +15 -0
  38. package/build/lib/events/browser-view.js +101 -0
  39. package/build/lib/events/nats-ws-filter.d.ts +29 -0
  40. package/build/lib/events/nats-ws-filter.js +94 -0
  41. package/build/lib/events/nats-ws-proxy.d.ts +2 -0
  42. package/build/lib/events/nats-ws-proxy.js +39 -5
  43. package/build/lib/events/nats-ws-server-filter.d.ts +16 -0
  44. package/build/lib/events/nats-ws-server-filter.js +56 -0
  45. package/build/lib/events/nats-ws-ticket.d.ts +10 -0
  46. package/build/lib/events/nats-ws-ticket.js +42 -0
  47. package/build/lib/events/socketio.d.ts +10 -1
  48. package/build/lib/events/socketio.js +10 -3
  49. package/build/lib/http/index.d.ts +27 -0
  50. package/build/lib/http/index.js +55 -0
  51. package/build/modules/auth.d.ts +15 -24
  52. package/build/modules/auth.js +43 -126
  53. package/build/modules/capabilities.d.ts +62 -0
  54. package/build/modules/capabilities.js +188 -0
  55. package/build/modules/config.d.ts +14 -0
  56. package/build/modules/config.js +20 -0
  57. package/build/modules/defaults.d.ts +10 -0
  58. package/build/modules/defaults.js +12 -1
  59. package/build/modules/display.d.ts +15 -0
  60. package/build/modules/display.js +27 -0
  61. package/build/modules/mcp-auth.d.ts +11 -0
  62. package/build/modules/mcp-auth.js +56 -0
  63. package/build/modules/oauth-server.d.ts +18 -0
  64. package/build/modules/oauth-server.js +40 -0
  65. package/build/routes/agents.js +46 -14
  66. package/build/routes/announcements.js +2 -2
  67. package/build/routes/auth-sso.js +2 -2
  68. package/build/routes/auth.js +2 -2
  69. package/build/routes/bot-accounts.js +26 -3
  70. package/build/routes/capabilities.js +4 -4
  71. package/build/routes/controlplane.js +2 -2
  72. package/build/routes/dba.js +2 -2
  73. package/build/routes/delegation.js +2 -2
  74. package/build/routes/diagnostics.js +2 -2
  75. package/build/routes/docs.js +2 -2
  76. package/build/routes/domain.js +2 -2
  77. package/build/routes/escalations/accumulate.d.ts +1 -1
  78. package/build/routes/escalations/acting.d.ts +1 -1
  79. package/build/routes/escalations/analytics.d.ts +1 -1
  80. package/build/routes/escalations/bulk.d.ts +1 -1
  81. package/build/routes/escalations/facets.d.ts +1 -1
  82. package/build/routes/escalations/index.js +5 -2
  83. package/build/routes/escalations/list.d.ts +1 -1
  84. package/build/routes/escalations/list.js +2 -0
  85. package/build/routes/escalations/metadata.d.ts +1 -1
  86. package/build/routes/escalations/related.d.ts +7 -0
  87. package/build/routes/escalations/related.js +60 -0
  88. package/build/routes/escalations/resolve.d.ts +1 -1
  89. package/build/routes/escalations/single.d.ts +1 -1
  90. package/build/routes/escalations/single.js +1 -1
  91. package/build/routes/exports.js +14 -13
  92. package/build/routes/file-browser.js +9 -8
  93. package/build/routes/files.js +2 -2
  94. package/build/routes/index.js +4 -2
  95. package/build/routes/insight.js +5 -4
  96. package/build/routes/knowledge.js +2 -2
  97. package/build/routes/maintenance.js +2 -2
  98. package/build/routes/mcp-endpoint.d.ts +3 -1
  99. package/build/routes/mcp-endpoint.js +18 -8
  100. package/build/routes/mcp.js +35 -15
  101. package/build/routes/me.js +2 -2
  102. package/build/routes/namespaces.js +4 -3
  103. package/build/routes/nats-credentials.js +27 -3
  104. package/build/routes/oauth-server/authorize.d.ts +2 -0
  105. package/build/routes/oauth-server/authorize.js +108 -0
  106. package/build/routes/oauth-server/grants.d.ts +2 -0
  107. package/build/routes/oauth-server/grants.js +35 -0
  108. package/build/routes/oauth-server/index.d.ts +8 -0
  109. package/build/routes/oauth-server/index.js +52 -0
  110. package/build/routes/oauth-server/registration.d.ts +2 -0
  111. package/build/routes/oauth-server/registration.js +38 -0
  112. package/build/routes/oauth-server/token.d.ts +2 -0
  113. package/build/routes/oauth-server/token.js +100 -0
  114. package/build/routes/oauth-well-known.d.ts +8 -0
  115. package/build/routes/oauth-well-known.js +31 -0
  116. package/build/routes/oauth.js +2 -2
  117. package/build/routes/overview.js +2 -2
  118. package/build/routes/personas.js +2 -2
  119. package/build/routes/pipelines.js +6 -5
  120. package/build/routes/roles.js +2 -2
  121. package/build/routes/scan-codes.js +2 -2
  122. package/build/routes/settings.js +2 -2
  123. package/build/routes/tasks.js +5 -5
  124. package/build/routes/topics.js +21 -9
  125. package/build/routes/users.js +25 -22
  126. package/build/routes/workflow-sets.js +13 -12
  127. package/build/routes/workflows/config.js +15 -2
  128. package/build/routes/workflows/discovery.js +2 -2
  129. package/build/routes/workflows/index.js +2 -2
  130. package/build/routes/workflows/invocation.js +11 -10
  131. package/build/routes/yaml-workflows/cron.js +19 -6
  132. package/build/routes/yaml-workflows/crud.js +13 -12
  133. package/build/routes/yaml-workflows/deployment.js +11 -10
  134. package/build/routes/yaml-workflows/index.js +2 -2
  135. package/build/routes/yaml-workflows/versions.js +2 -2
  136. package/build/scripts/consolidation-sim.d.ts +25 -0
  137. package/build/scripts/consolidation-sim.js +141 -0
  138. package/build/sdk/index.d.ts +12 -0
  139. package/build/sdk/index.js +2 -0
  140. package/build/services/agent/authority.d.ts +14 -0
  141. package/build/services/agent/authority.js +53 -0
  142. package/build/services/auth/bot-api-key.d.ts +2 -0
  143. package/build/services/auth/bot-api-key.js +10 -0
  144. package/build/services/auth/oauth-server/access-token.d.ts +36 -0
  145. package/build/services/auth/oauth-server/access-token.js +80 -0
  146. package/build/services/auth/oauth-server/authorization.d.ts +47 -0
  147. package/build/services/auth/oauth-server/authorization.js +54 -0
  148. package/build/services/auth/oauth-server/constants.d.ts +11 -0
  149. package/build/services/auth/oauth-server/constants.js +16 -0
  150. package/build/services/auth/oauth-server/index.d.ts +3 -0
  151. package/build/services/auth/oauth-server/index.js +26 -0
  152. package/build/services/auth/oauth-server/metadata.d.ts +21 -0
  153. package/build/services/auth/oauth-server/metadata.js +53 -0
  154. package/build/services/auth/oauth-server/registration.d.ts +42 -0
  155. package/build/services/auth/oauth-server/registration.js +134 -0
  156. package/build/services/auth/oauth-server/sql.d.ts +34 -0
  157. package/build/services/auth/oauth-server/sql.js +123 -0
  158. package/build/services/auth/oauth-server/store.d.ts +74 -0
  159. package/build/services/auth/oauth-server/store.js +151 -0
  160. package/build/services/auth/sql.d.ts +1 -0
  161. package/build/services/auth/sql.js +3 -1
  162. package/build/services/escalation/grouped-list.d.ts +19 -0
  163. package/build/services/escalation/grouped-list.js +54 -0
  164. package/build/services/escalation/index.d.ts +4 -0
  165. package/build/services/escalation/index.js +9 -1
  166. package/build/services/escalation/queries.d.ts +17 -13
  167. package/build/services/escalation/queries.js +38 -42
  168. package/build/services/escalation/read-scope-sql.d.ts +13 -0
  169. package/build/services/escalation/read-scope-sql.js +19 -0
  170. package/build/services/escalation/related.d.ts +58 -0
  171. package/build/services/escalation/related.js +196 -0
  172. package/build/services/export/index.d.ts +10 -0
  173. package/build/services/export/index.js +27 -0
  174. package/build/services/invocation-access.d.ts +25 -4
  175. package/build/services/invocation-access.js +39 -7
  176. package/build/services/mcp/client/connection-dispatch.d.ts +6 -1
  177. package/build/services/mcp/client/connection-dispatch.js +3 -2
  178. package/build/services/mcp/client/connection-lifecycle.d.ts +10 -2
  179. package/build/services/mcp/client/connection-lifecycle.js +45 -7
  180. package/build/services/mcp/client/connection-test.js +2 -6
  181. package/build/services/mcp/client/connection.d.ts +1 -1
  182. package/build/services/mcp/client/connection.js +3 -1
  183. package/build/services/mcp/client/index.d.ts +2 -2
  184. package/build/services/mcp/client/index.js +4 -1
  185. package/build/services/mcp/client/network-transport.d.ts +12 -0
  186. package/build/services/mcp/client/network-transport.js +20 -0
  187. package/build/services/mcp/client/tools.d.ts +13 -0
  188. package/build/services/mcp/client/tools.js +18 -0
  189. package/build/services/mcp/db-server/index.js +2 -1
  190. package/build/services/mcp/external-server.d.ts +9 -4
  191. package/build/services/mcp/external-server.js +34 -11
  192. package/build/services/mcp/playwright-server/index.js +2 -1
  193. package/build/services/mcp/registered-tools.d.ts +3 -0
  194. package/build/services/mcp/registered-tools.js +7 -0
  195. package/build/services/mcp/server-lifecycle.js +2 -1
  196. package/build/services/role/index.js +6 -0
  197. package/build/services/role/seed.js +4 -0
  198. package/build/services/scan-code/validate-facts.d.ts +1 -1
  199. package/build/services/scan-code/validate-facts.js +12 -1
  200. package/build/services/workflow-invocation.d.ts +16 -3
  201. package/build/services/workflow-invocation.js +42 -10
  202. package/build/services/yaml-workflow/deployer.d.ts +10 -2
  203. package/build/services/yaml-workflow/deployer.js +17 -5
  204. package/build/services/yaml-workflow/invoke.js +27 -26
  205. package/build/shared/form-validation/x-lt-scan.d.ts +8 -0
  206. package/build/shared/form-validation/x-lt-scan.js +20 -1
  207. package/build/shared/list-schema/index.d.ts +3 -0
  208. package/build/shared/list-schema/index.js +27 -0
  209. package/build/shared/list-schema/template.d.ts +14 -0
  210. package/build/shared/list-schema/template.js +85 -0
  211. package/build/shared/list-schema/types.d.ts +154 -0
  212. package/build/shared/list-schema/types.js +55 -0
  213. package/build/shared/list-schema/validate.d.ts +12 -0
  214. package/build/shared/list-schema/validate.js +204 -0
  215. package/build/shared/roles/segment.d.ts +22 -0
  216. package/build/shared/roles/segment.js +42 -0
  217. package/build/start/adapters.js +2 -0
  218. package/build/start/config.js +7 -0
  219. package/build/start/index.js +4 -22
  220. package/build/start/server.d.ts +6 -4
  221. package/build/start/server.js +11 -35
  222. package/build/start/socket-auth.js +2 -1
  223. package/build/start/workers.js +1 -1
  224. package/build/system/mcp-servers/admin/agent-subscriptions.js +24 -1
  225. package/build/system/mcp-servers/admin/agents.js +25 -2
  226. package/build/system/mcp-servers/admin/announcements.js +3 -2
  227. package/build/system/mcp-servers/admin/bot-accounts.js +37 -5
  228. package/build/system/mcp-servers/admin/escalations.d.ts +3 -5
  229. package/build/system/mcp-servers/admin/escalations.js +74 -70
  230. package/build/system/mcp-servers/admin/exports.js +7 -1
  231. package/build/system/mcp-servers/admin/index.js +24 -25
  232. package/build/system/mcp-servers/admin/overview.d.ts +2 -2
  233. package/build/system/mcp-servers/admin/run-read.d.ts +2 -0
  234. package/build/system/mcp-servers/admin/run-read.js +5 -0
  235. package/build/system/mcp-servers/admin/scan-codes.d.ts +2 -2
  236. package/build/system/mcp-servers/admin/scan-codes.js +5 -11
  237. package/build/system/mcp-servers/admin/schemas.d.ts +20 -20
  238. package/build/system/mcp-servers/admin/tasks.js +7 -2
  239. package/build/system/mcp-servers/admin/users.js +39 -4
  240. package/build/system/mcp-servers/admin/workflow-config.js +12 -1
  241. package/build/system/mcp-servers/admin/workflows.js +27 -5
  242. package/build/system/mcp-servers/admin/yaml-workflows.js +7 -1
  243. package/build/system/mcp-servers/caller-auth.d.ts +18 -0
  244. package/build/system/mcp-servers/caller-auth.js +29 -0
  245. package/build/system/mcp-servers/claude-code.js +2 -1
  246. package/build/system/mcp-servers/db-query/index.js +2 -1
  247. package/build/system/mcp-servers/file-storage.js +2 -1
  248. package/build/system/mcp-servers/http-fetch.js +2 -1
  249. package/build/system/mcp-servers/human-queue.js +7 -3
  250. package/build/system/mcp-servers/oauth.js +31 -4
  251. package/build/system/mcp-servers/schema-exchange.js +2 -1
  252. package/build/system/mcp-servers/vision.d.ts +1 -0
  253. package/build/system/mcp-servers/vision.js +17 -7
  254. package/build/system/seed/tool-manifests-admin.d.ts +2 -17985
  255. package/build/system/seed/tool-manifests-admin.js +121 -121
  256. package/build/system/seed/tool-manifests-data.d.ts +8 -374
  257. package/build/system/seed/tool-manifests-data.js +22 -4
  258. package/build/system/seed/tool-manifests-escalation.d.ts +2 -352
  259. package/build/system/seed/tool-manifests-escalation.js +11 -1
  260. package/build/system/seed/tool-manifests-events.d.ts +2 -116
  261. package/build/system/seed/tool-manifests-events.js +6 -2
  262. package/build/system/seed/tool-manifests-knowledge.d.ts +2 -221
  263. package/build/system/seed/tool-manifests-knowledge.js +41 -1
  264. package/build/system/seed/tool-manifests-workflows.d.ts +2 -71
  265. package/build/system/seed/tool-manifests-workflows.js +3 -1
  266. package/build/system/workflows/shared/principal-tools.d.ts +20 -0
  267. package/build/system/workflows/shared/principal-tools.js +64 -0
  268. package/build/system/workflows/shared/tool-executor.js +21 -11
  269. package/build/system/workflows/shared/tool-loader.js +8 -1
  270. package/build/tsconfig.tsbuildinfo +1 -1
  271. package/build/types/auth.d.ts +1 -1
  272. package/build/types/capability.d.ts +14 -0
  273. package/build/types/capability.js +2 -0
  274. package/build/types/events.d.ts +1 -1
  275. package/build/types/index.d.ts +5 -3
  276. package/build/types/index.js +2 -1
  277. package/build/types/mcp.d.ts +3 -1
  278. package/build/types/oauth-server.d.ts +52 -0
  279. package/build/types/oauth-server.js +2 -0
  280. package/build/types/scan-code/constants.d.ts +7 -0
  281. package/build/types/scan-code/constants.js +7 -1
  282. package/build/types/scan-code/response.d.ts +3 -2
  283. package/build/types/scan-code/rule.d.ts +6 -1
  284. package/build/types/startup.d.ts +23 -7
  285. package/build/vitest.config.js +2 -1
  286. package/build/vitest.fast.config.d.ts +2 -0
  287. package/build/vitest.fast.config.js +20 -0
  288. package/build/vitest.llm.config.d.ts +2 -0
  289. package/build/vitest.llm.config.js +16 -0
  290. package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js → AdminDashboard-B3mkMIOT.js} +2 -2
  291. package/dashboard/dist/assets/{AdminDashboard-DKrqLGjn.js.map → AdminDashboard-B3mkMIOT.js.map} +1 -1
  292. package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js → AgentConfigPage-CQj2B678.js} +2 -2
  293. package/dashboard/dist/assets/{AgentConfigPage-BoQhRW6U.js.map → AgentConfigPage-CQj2B678.js.map} +1 -1
  294. package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js → AgentDetailPage-CzrD8JJI.js} +3 -3
  295. package/dashboard/dist/assets/{AgentDetailPage-DZhzuZmO.js.map → AgentDetailPage-CzrD8JJI.js.map} +1 -1
  296. package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js → AgentsPage-jg2OFwyW.js} +2 -2
  297. package/dashboard/dist/assets/{AgentsPage-5MynmbWX.js.map → AgentsPage-jg2OFwyW.js.map} +1 -1
  298. package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js +2 -0
  299. package/dashboard/dist/assets/AvailableEscalationsPage-IS28XBRe.js.map +1 -0
  300. package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js → BotPicker-DvEJFpwS.js} +2 -2
  301. package/dashboard/dist/assets/{BotPicker-C3LR6Sqy.js.map → BotPicker-DvEJFpwS.js.map} +1 -1
  302. package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js → BulkAssignModal-BoQCi-YC.js} +2 -2
  303. package/dashboard/dist/assets/{BulkAssignModal-COjoOIIH.js.map → BulkAssignModal-BoQCi-YC.js.map} +1 -1
  304. package/dashboard/dist/assets/CapabilitiesPage-kwlrcb_t.js +2 -0
  305. package/dashboard/dist/assets/{CapabilitiesPage-DKxLvOfB.js.map → CapabilitiesPage-kwlrcb_t.js.map} +1 -1
  306. package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js → CollapsibleSection-UMIV4KIj.js} +2 -2
  307. package/dashboard/dist/assets/{CollapsibleSection-Cz5sRx-r.js.map → CollapsibleSection-UMIV4KIj.js.map} +1 -1
  308. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js +2 -0
  309. package/dashboard/dist/assets/ConfirmDeleteModal-C5puwMg7.js.map +1 -0
  310. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js +2 -0
  311. package/dashboard/dist/assets/ConnectedAppsPage-drZa65kP.js.map +1 -0
  312. package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js +2 -0
  313. package/dashboard/dist/assets/CountdownTimer-LG03dVgR.js.map +1 -0
  314. package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js → CredentialsPage-CaFQ6vLb.js} +2 -2
  315. package/dashboard/dist/assets/{CredentialsPage-DhiHiPsG.js.map → CredentialsPage-CaFQ6vLb.js.map} +1 -1
  316. package/dashboard/dist/assets/{CronLabel-C9SkawB-.js → CronLabel-Co5j7tzW.js} +2 -2
  317. package/dashboard/dist/assets/{CronLabel-C9SkawB-.js.map → CronLabel-Co5j7tzW.js.map} +1 -1
  318. package/dashboard/dist/assets/DataTable-FjFhx0SE.js +2 -0
  319. package/dashboard/dist/assets/DataTable-FjFhx0SE.js.map +1 -0
  320. package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js → ElapsedCell-WJyE9G0T.js} +2 -2
  321. package/dashboard/dist/assets/{ElapsedCell-BeK1SUDK.js.map → ElapsedCell-WJyE9G0T.js.map} +1 -1
  322. package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js → EntityTimelinePanel-CDFFfX9d.js} +2 -2
  323. package/dashboard/dist/assets/{EntityTimelinePanel-BThdefKj.js.map → EntityTimelinePanel-CDFFfX9d.js.map} +1 -1
  324. package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js → EscalationListSchemaPage-CMrUlaKI.js} +3 -3
  325. package/dashboard/dist/assets/{EscalationListSchemaPage-DlDIYb-p.js.map → EscalationListSchemaPage-CMrUlaKI.js.map} +1 -1
  326. package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js → EscalationSchemaPage-Dx2Lyfrz.js} +3 -3
  327. package/dashboard/dist/assets/{EscalationSchemaPage-CQt-Embr.js.map → EscalationSchemaPage-Dx2Lyfrz.js.map} +1 -1
  328. package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js +2 -0
  329. package/dashboard/dist/assets/EscalationTimeline-d3nvshOk.js.map +1 -0
  330. package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js → EscalationTitleSelect-DWQieOM9.js} +2 -2
  331. package/dashboard/dist/assets/{EscalationTitleSelect-Dewrv8wX.js.map → EscalationTitleSelect-DWQieOM9.js.map} +1 -1
  332. package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js → EscalationsOverview-BX8Cpi0X.js} +2 -2
  333. package/dashboard/dist/assets/{EscalationsOverview-BzH-Y-5x.js.map → EscalationsOverview-BX8Cpi0X.js.map} +1 -1
  334. package/dashboard/dist/assets/{EventTable-C97m6IZv.js → EventTable-D1-ITVXS.js} +2 -2
  335. package/dashboard/dist/assets/{EventTable-C97m6IZv.js.map → EventTable-D1-ITVXS.js.map} +1 -1
  336. package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js → FilterBar-ABC9ctin.js} +2 -2
  337. package/dashboard/dist/assets/{FilterBar-D-6xVHIw.js.map → FilterBar-ABC9ctin.js.map} +1 -1
  338. package/dashboard/dist/assets/FormattedValue-k27T4bG7.js +2 -0
  339. package/dashboard/dist/assets/FormattedValue-k27T4bG7.js.map +1 -0
  340. package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js → GraphInvokePage-DKUErxWc.js} +2 -2
  341. package/dashboard/dist/assets/{GraphInvokePage-Bwi8EF9Y.js.map → GraphInvokePage-DKUErxWc.js.map} +1 -1
  342. package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js → HomePage-C6u9dIpR.js} +2 -2
  343. package/dashboard/dist/assets/{HomePage-Z_Q03C0z.js.map → HomePage-C6u9dIpR.js.map} +1 -1
  344. package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js → ListToolbar-gA5rFzkz.js} +2 -2
  345. package/dashboard/dist/assets/{ListToolbar-_jWTw5no.js.map → ListToolbar-gA5rFzkz.js.map} +1 -1
  346. package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js → McpOverview-BOPo3J_i.js} +2 -2
  347. package/dashboard/dist/assets/{McpOverview-CjqTuP0N.js.map → McpOverview-BOPo3J_i.js.map} +1 -1
  348. package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js → McpQueryDetailPage-BRVVi0Zh.js} +2 -2
  349. package/dashboard/dist/assets/{McpQueryDetailPage-leCsje1U.js.map → McpQueryDetailPage-BRVVi0Zh.js.map} +1 -1
  350. package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js → McpQueryPage-Dmbb6SAc.js} +2 -2
  351. package/dashboard/dist/assets/{McpQueryPage-C-PyXYX4.js.map → McpQueryPage-Dmbb6SAc.js.map} +1 -1
  352. package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js → McpRunDetailPage-bMXNO-6V.js} +2 -2
  353. package/dashboard/dist/assets/{McpRunDetailPage-JDrr3uUQ.js.map → McpRunDetailPage-bMXNO-6V.js.map} +1 -1
  354. package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js → McpRunsPage-Bi9AMWja.js} +2 -2
  355. package/dashboard/dist/assets/{McpRunsPage-DERXQLgZ.js.map → McpRunsPage-Bi9AMWja.js.map} +1 -1
  356. package/dashboard/dist/assets/{OperationsPage-B2DA7n9m.js → OperationsPage-CvR74ZUJ.js} +3 -3
  357. package/dashboard/dist/assets/OperationsPage-CvR74ZUJ.js.map +1 -0
  358. package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js +2 -0
  359. package/dashboard/dist/assets/OperatorDashboard-DctmZw10.js.map +1 -0
  360. package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js → PersonaDetailPage-Ubqm2rQH.js} +2 -2
  361. package/dashboard/dist/assets/{PersonaDetailPage-ChXwJ6u5.js.map → PersonaDetailPage-Ubqm2rQH.js.map} +1 -1
  362. package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js → PersonasPage-BpFL2rpo.js} +2 -2
  363. package/dashboard/dist/assets/{PersonasPage-BFFxncSE.js.map → PersonasPage-BpFL2rpo.js.map} +1 -1
  364. package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js +2 -0
  365. package/dashboard/dist/assets/PortalPage-Dfc_Q02R.js.map +1 -0
  366. package/dashboard/dist/assets/ProcessDetailPage-liJspvQh.js +2 -0
  367. package/dashboard/dist/assets/{ProcessDetailPage-D7EYwW-j.js.map → ProcessDetailPage-liJspvQh.js.map} +1 -1
  368. package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js → ProcessesListPage-C3OM5ZUy.js} +2 -2
  369. package/dashboard/dist/assets/{ProcessesListPage-CakYRtnE.js.map → ProcessesListPage-C3OM5ZUy.js.map} +1 -1
  370. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js +8 -0
  371. package/dashboard/dist/assets/ResolverForm-B1_x8Blv.js.map +1 -0
  372. package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js → RoleDetailPage-CrlYCh-R.js} +2 -2
  373. package/dashboard/dist/assets/{RoleDetailPage-CKbGwezP.js.map → RoleDetailPage-CrlYCh-R.js.map} +1 -1
  374. package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js → RolesPage-BaazL_pt.js} +2 -2
  375. package/dashboard/dist/assets/{RolesPage-Czu7Zku4.js.map → RolesPage-BaazL_pt.js.map} +1 -1
  376. package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js → RunAsSelector-DxuV0fa1.js} +2 -2
  377. package/dashboard/dist/assets/{RunAsSelector-6BLScYTX.js.map → RunAsSelector-DxuV0fa1.js.map} +1 -1
  378. package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js → ScanCodesPage-C0mvmYTq.js} +2 -2
  379. package/dashboard/dist/assets/{ScanCodesPage-Cv9q8Bvt.js.map → ScanCodesPage-C0mvmYTq.js.map} +1 -1
  380. package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js → ScanSchemeDetailPage-CiJgt5dZ.js} +2 -2
  381. package/dashboard/dist/assets/{ScanSchemeDetailPage-BxazXYIc.js.map → ScanSchemeDetailPage-CiJgt5dZ.js.map} +1 -1
  382. package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js +2 -0
  383. package/dashboard/dist/assets/ScanStationPage-DzGaXc40.js.map +1 -0
  384. package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js → StickyPagination-CqbjVY6T.js} +2 -2
  385. package/dashboard/dist/assets/{StickyPagination-DsdtYoXR.js.map → StickyPagination-CqbjVY6T.js.map} +1 -1
  386. package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js → StreamMessageDetail-wX3i0aqs.js} +2 -2
  387. package/dashboard/dist/assets/{StreamMessageDetail-CT3FQoT3.js.map → StreamMessageDetail-wX3i0aqs.js.map} +1 -1
  388. package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js → SwimlaneTimeline-C50PsFoV.js} +2 -2
  389. package/dashboard/dist/assets/{SwimlaneTimeline-C8TjkJ10.js.map → SwimlaneTimeline-C50PsFoV.js.map} +1 -1
  390. package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js → TaskDetailPage-bbNSv4Ae.js} +2 -2
  391. package/dashboard/dist/assets/{TaskDetailPage-DGUzdBFN.js.map → TaskDetailPage-bbNSv4Ae.js.map} +1 -1
  392. package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js → TasksListPage-CDWnm_d9.js} +2 -2
  393. package/dashboard/dist/assets/{TasksListPage-BVIP6-EZ.js.map → TasksListPage-CDWnm_d9.js.map} +1 -1
  394. package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js → TimeAgo-BLjqlfoX.js} +2 -2
  395. package/dashboard/dist/assets/{TimeAgo-C-rd9F9g.js.map → TimeAgo-BLjqlfoX.js.map} +1 -1
  396. package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js → TimestampCell-CnW0ENb5.js} +2 -2
  397. package/dashboard/dist/assets/{TimestampCell-DPbchDOI.js.map → TimestampCell-CnW0ENb5.js.map} +1 -1
  398. package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js → ToolTestPanel-DkMgCB-k.js} +2 -2
  399. package/dashboard/dist/assets/{ToolTestPanel-DAUC8DHK.js.map → ToolTestPanel-DkMgCB-k.js.map} +1 -1
  400. package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js → TopicDetailPage-g3pljKKX.js} +2 -2
  401. package/dashboard/dist/assets/{TopicDetailPage-70mMKBzG.js.map → TopicDetailPage-g3pljKKX.js.map} +1 -1
  402. package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js → TopicsPage-CVcCYdy-.js} +2 -2
  403. package/dashboard/dist/assets/{TopicsPage-CE3hBthn.js.map → TopicsPage-CVcCYdy-.js.map} +1 -1
  404. package/dashboard/dist/assets/{UserName-BDBDA-LR.js → UserName-D6zGIK2i.js} +2 -2
  405. package/dashboard/dist/assets/{UserName-BDBDA-LR.js.map → UserName-D6zGIK2i.js.map} +1 -1
  406. package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js → WorkflowExecutionPage-B8g81FCJ.js} +2 -2
  407. package/dashboard/dist/assets/{WorkflowExecutionPage-BbkLZ1co.js.map → WorkflowExecutionPage-B8g81FCJ.js.map} +1 -1
  408. package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js → WorkflowsDashboard-nxT3bv6W.js} +2 -2
  409. package/dashboard/dist/assets/{WorkflowsDashboard-Bp1L7Ggz.js.map → WorkflowsDashboard-nxT3bv6W.js.map} +1 -1
  410. package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js → WorkflowsOverview-grI-KAI2.js} +2 -2
  411. package/dashboard/dist/assets/{WorkflowsOverview-IeTKHAi4.js.map → WorkflowsOverview-grI-KAI2.js.map} +1 -1
  412. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js → YamlWorkflowDetailPage-BoZ-hfBE.js} +2 -2
  413. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DtKCXnKt.js.map → YamlWorkflowDetailPage-BoZ-hfBE.js.map} +1 -1
  414. package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js → YamlWorkflowsPage-Bf04rwRv.js} +2 -2
  415. package/dashboard/dist/assets/{YamlWorkflowsPage-CEcZBV_3.js.map → YamlWorkflowsPage-Bf04rwRv.js.map} +1 -1
  416. package/dashboard/dist/assets/{agents-BT-sEk81.js → agents-Dphpdi8l.js} +2 -2
  417. package/dashboard/dist/assets/{agents-BT-sEk81.js.map → agents-Dphpdi8l.js.map} +1 -1
  418. package/dashboard/dist/assets/{bots-DRoAdLek.js → bots-DIFE298x.js} +2 -2
  419. package/dashboard/dist/assets/{bots-DRoAdLek.js.map → bots-DIFE298x.js.map} +1 -1
  420. package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js → capabilities-D7Y7LClY.js} +2 -2
  421. package/dashboard/dist/assets/{capabilities-Bc-nJk6y.js.map → capabilities-D7Y7LClY.js.map} +1 -1
  422. package/dashboard/dist/assets/{controlplane-aXceSIRf.js → controlplane-D1TGcYsS.js} +2 -2
  423. package/dashboard/dist/assets/{controlplane-aXceSIRf.js.map → controlplane-D1TGcYsS.js.map} +1 -1
  424. package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js +2 -0
  425. package/dashboard/dist/assets/escalation-columns-cwZE6xyo.js.map +1 -0
  426. package/dashboard/dist/assets/{index-CuBGGwXf.js → index-BzYcUPdD.js} +2 -2
  427. package/dashboard/dist/assets/{index-CuBGGwXf.js.map → index-BzYcUPdD.js.map} +1 -1
  428. package/dashboard/dist/assets/index-CeCtqujG.js +67 -0
  429. package/dashboard/dist/assets/index-CeCtqujG.js.map +1 -0
  430. package/dashboard/dist/assets/{index-h2gX31B2.js → index-ChV7pBjM.js} +2 -2
  431. package/dashboard/dist/assets/{index-h2gX31B2.js.map → index-ChV7pBjM.js.map} +1 -1
  432. package/dashboard/dist/assets/index-CniRa65p.js +3 -0
  433. package/dashboard/dist/assets/index-CniRa65p.js.map +1 -0
  434. package/dashboard/dist/assets/index-CxdjT1Yk.js +2 -0
  435. package/dashboard/dist/assets/{index-BCFEQEMC.js.map → index-CxdjT1Yk.js.map} +1 -1
  436. package/dashboard/dist/assets/{index-CZyO9hRb.js → index-DAvi5_2T.js} +2 -2
  437. package/dashboard/dist/assets/{index-CZyO9hRb.js.map → index-DAvi5_2T.js.map} +1 -1
  438. package/dashboard/dist/assets/{index-Djsoi8DI.js → index-DN-kX7hL.js} +2 -2
  439. package/dashboard/dist/assets/{index-Djsoi8DI.js.map → index-DN-kX7hL.js.map} +1 -1
  440. package/dashboard/dist/assets/index-Dl_8hbYI.js +2 -0
  441. package/dashboard/dist/assets/index-Dl_8hbYI.js.map +1 -0
  442. package/dashboard/dist/assets/{index-DBxpyIw5.js → index-DpKOr311.js} +2 -2
  443. package/dashboard/dist/assets/{index-DBxpyIw5.js.map → index-DpKOr311.js.map} +1 -1
  444. package/dashboard/dist/assets/{index-Ba-s5Yb5.js → index-Dy1wWu2e.js} +2 -2
  445. package/dashboard/dist/assets/{index-Ba-s5Yb5.js.map → index-Dy1wWu2e.js.map} +1 -1
  446. package/dashboard/dist/assets/{index-DH03y-UT.js → index-HLu98Sqh.js} +2 -2
  447. package/dashboard/dist/assets/{index-DH03y-UT.js.map → index-HLu98Sqh.js.map} +1 -1
  448. package/dashboard/dist/assets/{index-C3VTJcrp.js → index-ag2pCAPu.js} +2 -2
  449. package/dashboard/dist/assets/{index-C3VTJcrp.js.map → index-ag2pCAPu.js.map} +1 -1
  450. package/dashboard/dist/assets/index-gkxPN7Vx.js +13 -0
  451. package/dashboard/dist/assets/{index-BEPKAjna.js.map → index-gkxPN7Vx.js.map} +1 -1
  452. package/dashboard/dist/assets/index-m9A3UYst.css +1 -0
  453. package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js → knowledge-DnMs-SOJ.js} +2 -2
  454. package/dashboard/dist/assets/{knowledge-BhW8V-Hq.js.map → knowledge-DnMs-SOJ.js.map} +1 -1
  455. package/dashboard/dist/assets/{mcp-BYfSMQzh.js → mcp-CwW-K3r4.js} +2 -2
  456. package/dashboard/dist/assets/{mcp-BYfSMQzh.js.map → mcp-CwW-K3r4.js.map} +1 -1
  457. package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js → mcp-query-BZt5e8_Q.js} +2 -2
  458. package/dashboard/dist/assets/{mcp-query-DUJoOk_q.js.map → mcp-query-BZt5e8_Q.js.map} +1 -1
  459. package/dashboard/dist/assets/{personas-jT1O_SB4.js → personas-UA-Xn60f.js} +2 -2
  460. package/dashboard/dist/assets/{personas-jT1O_SB4.js.map → personas-UA-Xn60f.js.map} +1 -1
  461. package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js → pipelines-Cu3PARum.js} +2 -2
  462. package/dashboard/dist/assets/{pipelines-Bp-wIaz2.js.map → pipelines-Cu3PARum.js.map} +1 -1
  463. package/dashboard/dist/assets/{tasks-CCrvnXbz.js → tasks-BO6h8GJE.js} +2 -2
  464. package/dashboard/dist/assets/{tasks-CCrvnXbz.js.map → tasks-BO6h8GJE.js.map} +1 -1
  465. package/dashboard/dist/assets/{topics-Blft0I1L.js → topics-CWjCR-17.js} +2 -2
  466. package/dashboard/dist/assets/{topics-Blft0I1L.js.map → topics-CWjCR-17.js.map} +1 -1
  467. package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js → useDebouncedValue-6t0jx1RB.js} +2 -2
  468. package/dashboard/dist/assets/{useDebouncedValue-BYqbcism.js.map → useDebouncedValue-6t0jx1RB.js.map} +1 -1
  469. package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js → useNamespace-CqpoQx6D.js} +2 -2
  470. package/dashboard/dist/assets/{useNamespace-BfxJAUgG.js.map → useNamespace-CqpoQx6D.js.map} +1 -1
  471. package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js → useYamlActivityEvents-hmCQQwzB.js} +2 -2
  472. package/dashboard/dist/assets/{useYamlActivityEvents-BukJuWpb.js.map → useYamlActivityEvents-hmCQQwzB.js.map} +1 -1
  473. package/dashboard/dist/assets/validate-BIRn4a6d.js +2 -0
  474. package/dashboard/dist/assets/validate-BIRn4a6d.js.map +1 -0
  475. package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js → yaml-workflows-ziUdZhKY.js} +2 -2
  476. package/dashboard/dist/assets/{yaml-workflows-DeRWqMGk.js.map → yaml-workflows-ziUdZhKY.js.map} +1 -1
  477. package/dashboard/dist/index.html +2 -2
  478. package/docs/agents.md +3 -1
  479. package/docs/api/http/agents.md +15 -1
  480. package/docs/api/http/escalations.md +49 -3
  481. package/docs/api/http/exports.md +3 -1
  482. package/docs/api/http/file-browser.md +3 -1
  483. package/docs/api/http/mcp-endpoint.md +5 -2
  484. package/docs/api/http/mcp-servers.md +34 -4
  485. package/docs/api/http/namespaces.md +2 -0
  486. package/docs/api/http/pipelines.md +2 -0
  487. package/docs/api/http/roles.md +11 -8
  488. package/docs/api/http/service-accounts.md +8 -2
  489. package/docs/api/http/settings.md +29 -2
  490. package/docs/api/http/tasks.md +3 -1
  491. package/docs/api/http/topics.md +7 -1
  492. package/docs/api/http/users.md +8 -2
  493. package/docs/api/http/workflows.md +25 -10
  494. package/docs/api/http/yaml-workflows.md +21 -0
  495. package/docs/api/mcp/admin.md +409 -49
  496. package/docs/api/mcp/file-storage.md +4 -0
  497. package/docs/api/mcp/http-fetch.md +6 -2
  498. package/docs/api/mcp/human-queue.md +53 -0
  499. package/docs/api/mcp/index.md +13 -10
  500. package/docs/api/mcp/knowledge.md +34 -0
  501. package/docs/api/mcp/oauth.md +1 -1
  502. package/docs/api/mcp/ortho.md +113 -0
  503. package/docs/api/mcp/vision.md +1 -1
  504. package/docs/api/sdk/bot-accounts.md +1 -0
  505. package/docs/api/sdk/escalations.md +18 -2
  506. package/docs/api/sdk/mcp.md +2 -2
  507. package/docs/api/sdk/settings.md +1 -1
  508. package/docs/api/sdk/tasks.md +2 -2
  509. package/docs/api/sdk/workflows.md +2 -2
  510. package/docs/api/sdk/yaml-workflows.md +1 -1
  511. package/docs/architecture.md +3 -1
  512. package/docs/auth.md +3 -2
  513. package/docs/cloud.md +7 -2
  514. package/docs/code-owned-configuration.md +12 -0
  515. package/docs/dashboard.md +16 -7
  516. package/docs/data.md +1 -1
  517. package/docs/escalation-strategies.md +9 -20
  518. package/docs/events.md +6 -0
  519. package/docs/hitl/portal.md +2 -0
  520. package/docs/hitl/x-lt-list-schema.md +88 -1
  521. package/docs/hitl/x-lt-scan.md +4 -1
  522. package/docs/iam.md +7 -5
  523. package/docs/mcp.md +159 -210
  524. package/docs/oauth-and-delegation.md +32 -21
  525. package/docs/scan-codes.md +7 -1
  526. package/docs/topics.md +2 -0
  527. package/docs/workflows.md +14 -112
  528. package/package.json +6 -3
  529. package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js +0 -2
  530. package/dashboard/dist/assets/AvailableEscalationsPage-CWMyy3IL.js.map +0 -1
  531. package/dashboard/dist/assets/CapabilitiesPage-DKxLvOfB.js +0 -2
  532. package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js +0 -2
  533. package/dashboard/dist/assets/ConfirmDeleteModal-Beq1vQtY.js.map +0 -1
  534. package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js +0 -2
  535. package/dashboard/dist/assets/CountdownTimer-BUBl_4mP.js.map +0 -1
  536. package/dashboard/dist/assets/DataTable-spX1dFyb.js +0 -2
  537. package/dashboard/dist/assets/DataTable-spX1dFyb.js.map +0 -1
  538. package/dashboard/dist/assets/EscalationListView-DTIVuym4.js +0 -2
  539. package/dashboard/dist/assets/EscalationListView-DTIVuym4.js.map +0 -1
  540. package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js +0 -2
  541. package/dashboard/dist/assets/EscalationTimeline-DNKNp6pL.js.map +0 -1
  542. package/dashboard/dist/assets/OperationsPage-B2DA7n9m.js.map +0 -1
  543. package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js +0 -2
  544. package/dashboard/dist/assets/OperatorDashboard-C8RtPv8P.js.map +0 -1
  545. package/dashboard/dist/assets/PortalPage-Xk1zVneM.js +0 -2
  546. package/dashboard/dist/assets/PortalPage-Xk1zVneM.js.map +0 -1
  547. package/dashboard/dist/assets/ProcessDetailPage-D7EYwW-j.js +0 -2
  548. package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js +0 -8
  549. package/dashboard/dist/assets/ResolverForm-BwVOJUpJ.js.map +0 -1
  550. package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js +0 -2
  551. package/dashboard/dist/assets/ScanStationPage-Cg8LCFR7.js.map +0 -1
  552. package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js +0 -2
  553. package/dashboard/dist/assets/escalation-columns-Bf09Q89t.js.map +0 -1
  554. package/dashboard/dist/assets/index-BCFEQEMC.js +0 -2
  555. package/dashboard/dist/assets/index-BEPKAjna.js +0 -13
  556. package/dashboard/dist/assets/index-BUYokcrl.js +0 -67
  557. package/dashboard/dist/assets/index-BUYokcrl.js.map +0 -1
  558. package/dashboard/dist/assets/index-CcgmR-7-.js +0 -2
  559. package/dashboard/dist/assets/index-CcgmR-7-.js.map +0 -1
  560. package/dashboard/dist/assets/index-D1mKf_qz.js +0 -3
  561. package/dashboard/dist/assets/index-D1mKf_qz.js.map +0 -1
  562. package/dashboard/dist/assets/index-DcppjzP5.css +0 -1
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // Related sets for list views: a host row's items (each read through its
4
+ // payload or its reciprocal row) and rows in other roles that share facets
5
+ // with it. Every statement serves a whole page of hosts and composes the
6
+ // caller's read scope, so the cost is bounded by the declaration, never by
7
+ // the page size or the item count.
8
+ // ---------------------------------------------------------------------------
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.aggregateRelatedItems = aggregateRelatedItems;
11
+ exports.listRelatedItems = listRelatedItems;
12
+ exports.aggregateRelatedQuery = aggregateRelatedQuery;
13
+ exports.listRelatedQueryRows = listRelatedQueryRows;
14
+ exports.readRelatedHosts = readRelatedHosts;
15
+ const db_1 = require("../../lib/db");
16
+ const uuid_1 = require("../../lib/uuid");
17
+ const escalation_1 = require("../../types/escalation");
18
+ const list_schema_1 = require("../../shared/list-schema");
19
+ const client_1 = require("./client");
20
+ const map_1 = require("./map");
21
+ const read_scope_sql_1 = require("./read-scope-sql");
22
+ const UUID_PATTERN = uuid_1.UUID_RE.source;
23
+ function foldAggregateRows(rows, hostIds, split) {
24
+ const out = {};
25
+ for (const id of hostIds)
26
+ out[id] = split ? { count: 0, splits: {} } : { count: 0 };
27
+ for (const row of rows) {
28
+ const agg = out[row.host_id];
29
+ if (!agg)
30
+ continue;
31
+ agg.count += row.n;
32
+ if (row.hidden) {
33
+ agg.hidden = (agg.hidden ?? 0) + row.n;
34
+ }
35
+ else if (split) {
36
+ const key = row.split ?? '';
37
+ agg.splits[key] = (agg.splits[key] ?? 0) + row.n;
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ /** The hosts and their item entries, read under the caller's scope. */
43
+ function itemEntriesCte(params, scope, hostIds) {
44
+ const hi = params.push(hostIds);
45
+ const hostScope = (0, read_scope_sql_1.buildReadScopeClause)(scope, params, 'h');
46
+ return `hosts AS (
47
+ SELECT h.id, h.envelope,
48
+ (h.envelope ? '${escalation_1.ESCALATION_ACCUMULATE_KEYS.ITEMS}') AS acc,
49
+ COALESCE(h.envelope->'${escalation_1.ESCALATION_ACCUMULATE_KEYS.ITEMS}', h.envelope->'${escalation_1.ESCALATION_BATCH_KEYS.ITEMS}') AS items
50
+ FROM public.lt_escalations h
51
+ WHERE h.id = ANY($${hi}::uuid[])${hostScope ? ` AND ${hostScope}` : ''}
52
+ ), entries AS (
53
+ SELECT hosts.id AS host_id, hosts.acc, hosts.envelope, e.key AS item_key, e.value AS entry,
54
+ CASE WHEN hosts.acc AND (e.value->>'reciprocalId') ~* '${UUID_PATTERN}'
55
+ THEN (e.value->>'reciprocalId')::uuid END AS rid
56
+ FROM hosts, jsonb_each(CASE WHEN jsonb_typeof(hosts.items) = 'object' THEN hosts.items ELSE '{}'::jsonb END) e
57
+ )`;
58
+ }
59
+ /**
60
+ * Count each host's items, optionally split by `payload.<path>` or
61
+ * `reciprocal.metadata.<key>`. A reciprocal split counts only reciprocal rows
62
+ * the caller can read; the rest are reported as `hidden`. `roles` names the
63
+ * roles of the readable reciprocal rows, so a list can follow their changes.
64
+ */
65
+ async function aggregateRelatedItems(opts) {
66
+ if (!opts.hostIds.length)
67
+ return { aggregates: {}, roles: [] };
68
+ await (0, client_1.ensureEscalationCompatView)();
69
+ const params = [];
70
+ const cte = itemEntriesCte(params, opts.scope, opts.hostIds);
71
+ const splitBy = opts.splitBy ?? '';
72
+ let splitExpr = 'NULL::text';
73
+ let join = '';
74
+ let hiddenExpr = 'false';
75
+ let rolesExpr = 'NULL::text[]';
76
+ if (splitBy.startsWith(list_schema_1.SPLIT_PATHS.PAYLOAD)) {
77
+ const pi = params.push(splitBy.slice(list_schema_1.SPLIT_PATHS.PAYLOAD.length).split('.'));
78
+ splitExpr = `(CASE WHEN en.acc THEN en.entry->'payload' ELSE en.entry END) #>> $${pi}::text[]`;
79
+ }
80
+ else if (splitBy.startsWith(list_schema_1.SPLIT_PATHS.RECIPROCAL_METADATA)) {
81
+ const ki = params.push(splitBy.slice(list_schema_1.SPLIT_PATHS.RECIPROCAL_METADATA.length));
82
+ const rScope = (0, read_scope_sql_1.buildReadScopeClause)(opts.scope, params, 'r');
83
+ join = `LEFT JOIN public.lt_escalations r ON r.id = en.rid${rScope ? ` AND ${rScope}` : ''}`;
84
+ splitExpr = `r.metadata->>$${ki}`;
85
+ hiddenExpr = '(en.rid IS NOT NULL AND r.id IS NULL)';
86
+ rolesExpr = 'array_agg(DISTINCT r.role) FILTER (WHERE r.id IS NOT NULL)';
87
+ }
88
+ const { rows } = await (0, db_1.getPool)().query(`WITH ${cte}
89
+ SELECT en.host_id::text AS host_id, ${splitExpr} AS split, ${hiddenExpr} AS hidden, count(*)::int AS n,
90
+ ${rolesExpr} AS roles
91
+ FROM entries en ${join}
92
+ GROUP BY 1, 2, 3`, params);
93
+ const roles = new Set(rows.flatMap((row) => row.roles ?? []));
94
+ return { aggregates: foldAggregateRows(rows, opts.hostIds, !!splitBy), roles: [...roles].sort() };
95
+ }
96
+ /** One host's items in fill order, each with its reciprocal row when readable. */
97
+ async function listRelatedItems(opts) {
98
+ await (0, client_1.ensureEscalationCompatView)();
99
+ const params = [];
100
+ const cte = itemEntriesCte(params, opts.scope, [opts.hostId]);
101
+ const rScope = (0, read_scope_sql_1.buildReadScopeClause)(opts.scope, params, 'r');
102
+ const li = params.push(opts.limit);
103
+ const { rows } = await (0, db_1.getPool)().query(`WITH ${cte}
104
+ SELECT en.item_key, en.entry, en.acc,
105
+ en.envelope->'${escalation_1.ESCALATION_BATCH_KEYS.FILLED_AT}'->>en.item_key AS batch_at,
106
+ en.envelope->'${escalation_1.ESCALATION_BATCH_KEYS.FILLED_BY}'->>en.item_key AS batch_actor,
107
+ (en.rid IS NOT NULL AND r.id IS NULL) AS hidden,
108
+ CASE WHEN r.id IS NULL THEN NULL ELSE to_jsonb(r) END AS reciprocal,
109
+ count(*) OVER ()::int AS total
110
+ FROM entries en
111
+ LEFT JOIN public.lt_escalations r ON r.id = en.rid${rScope ? ` AND ${rScope}` : ''}
112
+ ORDER BY COALESCE(CASE WHEN en.acc THEN en.entry->>'at' END,
113
+ en.envelope->'${escalation_1.ESCALATION_BATCH_KEYS.FILLED_AT}'->>en.item_key) NULLS LAST, en.item_key
114
+ LIMIT $${li}`, params);
115
+ return {
116
+ total: rows[0]?.total ?? 0,
117
+ rows: rows.map((row) => {
118
+ const entry = row.entry ?? {};
119
+ const item = row.acc
120
+ ? {
121
+ itemKey: row.item_key,
122
+ payload: entry.payload,
123
+ at: entry.at,
124
+ ...(entry.actor ? { actor: entry.actor } : {}),
125
+ ...(entry.reciprocalId ? { reciprocalId: entry.reciprocalId } : {}),
126
+ }
127
+ : {
128
+ itemKey: row.item_key,
129
+ payload: entry,
130
+ ...(row.batch_at ? { at: row.batch_at } : {}),
131
+ ...(row.batch_actor ? { actor: row.batch_actor } : {}),
132
+ };
133
+ return { item, escalation: row.reciprocal ? (0, map_1.toEscalationRecord)(row.reciprocal) : null };
134
+ }),
135
+ };
136
+ }
137
+ /** The shared FROM/WHERE of a query set: hosts unnested beside their matches. */
138
+ function querySetFrom(params, input) {
139
+ const hi = params.push(input.hosts.map((h) => h.hostId));
140
+ const mi = params.push(input.hosts.map((h) => JSON.stringify(h.match)));
141
+ const ri = params.push(input.roles);
142
+ const si = params.push(input.status);
143
+ const scope = (0, read_scope_sql_1.buildReadScopeClause)(input.scope, params, 'e');
144
+ return `FROM unnest($${hi}::text[], $${mi}::jsonb[]) AS h(host_id, match)
145
+ JOIN public.lt_escalations e ON e.metadata @> h.match
146
+ WHERE e.role = ANY($${ri}::text[]) AND e.status = $${si}
147
+ AND e.id::text <> h.host_id${scope ? ` AND ${scope}` : ''}`;
148
+ }
149
+ /**
150
+ * Count the rows that share each host's facets, grouped by role and an
151
+ * optional `metadata.<key>` split. The GIN index serves each host's match.
152
+ */
153
+ async function aggregateRelatedQuery(input) {
154
+ const hostIds = input.hosts.map((h) => h.hostId);
155
+ if (!hostIds.length || !input.roles.length)
156
+ return foldAggregateRows([], hostIds, !!input.splitBy);
157
+ await (0, client_1.ensureEscalationCompatView)();
158
+ const params = [];
159
+ const from = querySetFrom(params, input);
160
+ let splitExpr = 'NULL::text';
161
+ if (input.splitBy === list_schema_1.SPLIT_PATHS.ROLE) {
162
+ splitExpr = 'e.role';
163
+ }
164
+ else if (input.splitBy?.startsWith(list_schema_1.SPLIT_PATHS.METADATA)) {
165
+ splitExpr = `e.metadata->>$${params.push(input.splitBy.slice(list_schema_1.SPLIT_PATHS.METADATA.length))}`;
166
+ }
167
+ const { rows } = await (0, db_1.getPool)().query(`SELECT h.host_id, ${splitExpr} AS split, count(*)::int AS n ${from} GROUP BY 1, 2`, params);
168
+ return foldAggregateRows(rows, hostIds, !!input.splitBy);
169
+ }
170
+ /** One host's related rows, in role order then age. */
171
+ async function listRelatedQueryRows(input) {
172
+ if (!input.hosts.length || !input.roles.length)
173
+ return { rows: [], total: 0 };
174
+ await (0, client_1.ensureEscalationCompatView)();
175
+ const params = [];
176
+ const from = querySetFrom(params, input);
177
+ const oi = params.push(input.roles);
178
+ const li = params.push(input.limit);
179
+ const { rows } = await (0, db_1.getPool)().query(`SELECT to_jsonb(e) AS row, count(*) OVER ()::int AS total ${from}
180
+ ORDER BY array_position($${oi}::text[], e.role), e.created_at
181
+ LIMIT $${li}`, params);
182
+ return {
183
+ total: rows[0]?.total ?? 0,
184
+ rows: rows.map((r) => ({ escalation: (0, map_1.toEscalationRecord)(r.row) })),
185
+ };
186
+ }
187
+ /** Host rows of one role, read under the caller's scope. */
188
+ async function readRelatedHosts(opts) {
189
+ if (!opts.ids.length)
190
+ return [];
191
+ await (0, client_1.ensureEscalationCompatView)();
192
+ const params = [opts.ids, opts.role];
193
+ const scope = (0, read_scope_sql_1.buildReadScopeClause)(opts.scope, params);
194
+ const { rows } = await (0, db_1.getPool)().query(`SELECT * FROM public.lt_escalations WHERE id = ANY($1::uuid[]) AND role = $2${scope ? ` AND ${scope}` : ''}`, params);
195
+ return rows.map((row) => (0, map_1.toEscalationRecord)(row));
196
+ }
@@ -48,6 +48,16 @@ export interface WorkflowEnvelopes {
48
48
  * so, making this the natural polling body.
49
49
  */
50
50
  export declare function getWorkflowEnvelopes(workflowId: string, taskQueue: string, workflowName: string): Promise<WorkflowEnvelopes>;
51
+ /**
52
+ * The identity a run was started with: its start envelope's `lt` block
53
+ * (`userId` is who it runs as; `initiatedBy` is the person who started it
54
+ * under `execute_as`). Read from the run's own input, so it holds for every
55
+ * registered or durable run. Null when the run cannot be found.
56
+ */
57
+ export declare function getWorkflowStartIdentity(workflowId: string): Promise<{
58
+ userId?: string;
59
+ initiatedBy?: string;
60
+ } | null>;
51
61
  /**
52
62
  * Return the current job state of a workflow.
53
63
  * If the workflow is complete this is also the output.
@@ -4,11 +4,13 @@ exports.exportWorkflow = exportWorkflow;
4
4
  exports.getWorkflowStatus = getWorkflowStatus;
5
5
  exports.exportWorkflowExecution = exportWorkflowExecution;
6
6
  exports.getWorkflowEnvelopes = getWorkflowEnvelopes;
7
+ exports.getWorkflowStartIdentity = getWorkflowStartIdentity;
7
8
  exports.getWorkflowState = getWorkflowState;
8
9
  exports.listJobs = listJobs;
9
10
  const db_1 = require("../../lib/db");
10
11
  const hotmesh_utils_1 = require("../hotmesh-utils");
11
12
  const client_1 = require("./client");
13
+ const resolve_1 = require("../task/resolve");
12
14
  const post_process_1 = require("./post-process");
13
15
  const workflow_state_1 = require("../workflow-state");
14
16
  /** Error thrown when a workflow job is not found (expired or never existed). */
@@ -123,6 +125,31 @@ async function getWorkflowEnvelopes(workflowId, taskQueue, workflowName) {
123
125
  const output = await handle.output().catch(() => null);
124
126
  return { workflow_id: workflowId, status: reading.state, input, output: output ?? null };
125
127
  }
128
+ /**
129
+ * The identity a run was started with: its start envelope's `lt` block
130
+ * (`userId` is who it runs as; `initiatedBy` is the person who started it
131
+ * under `execute_as`). Read from the run's own input, so it holds for every
132
+ * registered or durable run. Null when the run cannot be found.
133
+ */
134
+ async function getWorkflowStartIdentity(workflowId) {
135
+ let resolved;
136
+ try {
137
+ resolved = await (0, resolve_1.resolveWorkflowHandle)(workflowId);
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ const handle = await (0, client_1.getHandle)(resolved.taskQueue, resolved.workflowName, workflowId);
143
+ const args = await handle.input().catch(() => undefined);
144
+ const envelope = Array.isArray(args) && args.length >= 1 ? args[0] : null;
145
+ const lt = (envelope && typeof envelope === 'object' ? envelope.lt : null) ?? null;
146
+ if (!lt)
147
+ return {};
148
+ return {
149
+ ...(typeof lt.userId === 'string' ? { userId: lt.userId } : {}),
150
+ ...(typeof lt.initiatedBy === 'string' ? { initiatedBy: lt.initiatedBy } : {}),
151
+ };
152
+ }
126
153
  /**
127
154
  * Return the current job state of a workflow.
128
155
  * If the workflow is complete this is also the output.
@@ -8,11 +8,32 @@ export declare const INVOCATION_ROLE_TYPES: {
8
8
  readonly ADMIN: "admin";
9
9
  };
10
10
  export declare const ADMIN_ROLE = "admin";
11
- /** Superadmin anywhere, or the named admin role held as admin type, invokes every workflow. */
12
- export declare function hasGlobalInvocationAccess(roles: readonly InvocationRoleGrant[], authRole?: string): boolean;
11
+ /** The workflow that calls a named MCP tool with lt-system authority. */
12
+ export declare const CAPABILITY_INVOKE_WORKFLOW = "capabilityInvoke";
13
+ /**
14
+ * Workflows whose activities act with lt-system authority. Started from
15
+ * outside the process, they would lend that authority to the caller, so only
16
+ * a superadmin may start one. Internal starts (agent triggers) are unaffected.
17
+ */
18
+ export declare const SYSTEM_AUTHORITY_WORKFLOWS: ReadonlySet<string>;
19
+ /**
20
+ * Whether a caller may run a workflow as another principal. A superadmin may
21
+ * act as anyone. Otherwise the caller needs an admin-type grant, the target
22
+ * holds no superadmin grant, and every grant the target holds the caller
23
+ * holds at the same or a higher type: an override never exceeds the caller.
24
+ */
25
+ export declare function mayActAs(caller: readonly InvocationRoleGrant[], target: readonly InvocationRoleGrant[]): boolean;
26
+ /**
27
+ * Superadmin anywhere, or the named admin role held as admin type, invokes
28
+ * every workflow. Decided from grants only, never a token's role claim.
29
+ */
30
+ export declare function hasGlobalInvocationAccess(roles: readonly InvocationRoleGrant[]): boolean;
13
31
  /**
14
32
  * The one invocation predicate, shared by the invoke gate and the per-caller
15
33
  * list so the two can never disagree. An empty invocation_roles list opens
16
- * the workflow to every authenticated caller.
34
+ * the workflow to every authenticated caller. A system-authority workflow
35
+ * needs a superadmin grant, whatever its stored roles say.
17
36
  */
18
- export declare function canInvokeWorkflow(config: Pick<LTWorkflowConfig, 'invocable' | 'invocation_roles'>, roles: readonly InvocationRoleGrant[], authRole?: string): boolean;
37
+ export declare function canInvokeWorkflow(config: Pick<LTWorkflowConfig, 'invocable' | 'invocation_roles'> & {
38
+ workflow_type?: string;
39
+ }, roles: readonly InvocationRoleGrant[]): boolean;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ADMIN_ROLE = exports.INVOCATION_ROLE_TYPES = void 0;
3
+ exports.SYSTEM_AUTHORITY_WORKFLOWS = exports.CAPABILITY_INVOKE_WORKFLOW = exports.ADMIN_ROLE = exports.INVOCATION_ROLE_TYPES = void 0;
4
+ exports.mayActAs = mayActAs;
4
5
  exports.hasGlobalInvocationAccess = hasGlobalInvocationAccess;
5
6
  exports.canInvokeWorkflow = canInvokeWorkflow;
6
7
  exports.INVOCATION_ROLE_TYPES = {
@@ -8,24 +9,55 @@ exports.INVOCATION_ROLE_TYPES = {
8
9
  ADMIN: 'admin',
9
10
  };
10
11
  exports.ADMIN_ROLE = 'admin';
11
- /** Superadmin anywhere, or the named admin role held as admin type, invokes every workflow. */
12
- function hasGlobalInvocationAccess(roles, authRole) {
13
- if (authRole === exports.INVOCATION_ROLE_TYPES.SUPERADMIN)
12
+ /** The workflow that calls a named MCP tool with lt-system authority. */
13
+ exports.CAPABILITY_INVOKE_WORKFLOW = 'capabilityInvoke';
14
+ /**
15
+ * Workflows whose activities act with lt-system authority. Started from
16
+ * outside the process, they would lend that authority to the caller, so only
17
+ * a superadmin may start one. Internal starts (agent triggers) are unaffected.
18
+ */
19
+ exports.SYSTEM_AUTHORITY_WORKFLOWS = new Set([exports.CAPABILITY_INVOKE_WORKFLOW]);
20
+ const ROLE_TYPE_RANK = { member: 1, admin: 2, superadmin: 3 };
21
+ function holdsSuperadmin(roles) {
22
+ return roles.some((r) => r.type === exports.INVOCATION_ROLE_TYPES.SUPERADMIN);
23
+ }
24
+ /**
25
+ * Whether a caller may run a workflow as another principal. A superadmin may
26
+ * act as anyone. Otherwise the caller needs an admin-type grant, the target
27
+ * holds no superadmin grant, and every grant the target holds the caller
28
+ * holds at the same or a higher type: an override never exceeds the caller.
29
+ */
30
+ function mayActAs(caller, target) {
31
+ if (holdsSuperadmin(caller))
14
32
  return true;
33
+ if (!caller.some((r) => r.type === exports.INVOCATION_ROLE_TYPES.ADMIN))
34
+ return false;
35
+ if (holdsSuperadmin(target))
36
+ return false;
37
+ return target.every((t) => caller.some((c) => c.role === t.role && (ROLE_TYPE_RANK[c.type] ?? 0) >= (ROLE_TYPE_RANK[t.type] ?? 0)));
38
+ }
39
+ /**
40
+ * Superadmin anywhere, or the named admin role held as admin type, invokes
41
+ * every workflow. Decided from grants only, never a token's role claim.
42
+ */
43
+ function hasGlobalInvocationAccess(roles) {
15
44
  return roles.some((r) => r.type === exports.INVOCATION_ROLE_TYPES.SUPERADMIN)
16
45
  || roles.some((r) => r.role === exports.ADMIN_ROLE && r.type === exports.INVOCATION_ROLE_TYPES.ADMIN);
17
46
  }
18
47
  /**
19
48
  * The one invocation predicate, shared by the invoke gate and the per-caller
20
49
  * list so the two can never disagree. An empty invocation_roles list opens
21
- * the workflow to every authenticated caller.
50
+ * the workflow to every authenticated caller. A system-authority workflow
51
+ * needs a superadmin grant, whatever its stored roles say.
22
52
  */
23
- function canInvokeWorkflow(config, roles, authRole) {
53
+ function canInvokeWorkflow(config, roles) {
24
54
  if (!config.invocable)
25
55
  return false;
56
+ if (config.workflow_type && exports.SYSTEM_AUTHORITY_WORKFLOWS.has(config.workflow_type))
57
+ return holdsSuperadmin(roles);
26
58
  if (config.invocation_roles.length === 0)
27
59
  return true;
28
- if (hasGlobalInvocationAccess(roles, authRole))
60
+ if (hasGlobalInvocationAccess(roles))
29
61
  return true;
30
62
  const held = new Set(roles.map((r) => r.role));
31
63
  return config.invocation_roles.some((r) => held.has(r));
@@ -8,7 +8,12 @@ import type { LTMcpToolManifest } from '../../../types';
8
8
  * are called via server._registeredTools[toolName].handler(args). This
9
9
  * eliminates the InMemoryTransport bottleneck under concurrent load.
10
10
  */
11
- export declare function dispatchBuiltinTool(serverId: string, toolName: string, args: Record<string, any>): Promise<{
11
+ export declare function dispatchBuiltinTool(serverId: string, toolName: string, args: Record<string, any>, extra?: {
12
+ authInfo?: {
13
+ userId: string;
14
+ role?: string;
15
+ };
16
+ }): Promise<{
12
17
  dispatched: true;
13
18
  result: any;
14
19
  } | null>;
@@ -13,7 +13,7 @@ const connection_lifecycle_1 = require("./connection-lifecycle");
13
13
  * are called via server._registeredTools[toolName].handler(args). This
14
14
  * eliminates the InMemoryTransport bottleneck under concurrent load.
15
15
  */
16
- async function dispatchBuiltinTool(serverId, toolName, args) {
16
+ async function dispatchBuiltinTool(serverId, toolName, args, extra) {
17
17
  const builtinFactories = (0, connection_lifecycle_1.getBuiltinFactories)();
18
18
  const builtinServers = (0, connection_lifecycle_1.getBuiltinServers)();
19
19
  // Normalize and match against builtin factories
@@ -43,7 +43,8 @@ async function dispatchBuiltinTool(serverId, toolName, args) {
43
43
  // Call the handler directly — no transport, no JSON-RPC.
44
44
  // Tool handlers return MCP-shaped responses: { content: [{ type: 'text', text: '...' }] }
45
45
  // Parse the text content the same way callServerTool does.
46
- const mcpResponse = await tool.handler(args);
46
+ // With `extra`, the handler sees an external caller and acts as them.
47
+ const mcpResponse = extra ? await tool.handler(args, extra) : await tool.handler(args);
47
48
  let parsed = mcpResponse;
48
49
  if (mcpResponse && Array.isArray(mcpResponse.content)) {
49
50
  const textContent = mcpResponse.content.find((c) => c.type === 'text');
@@ -1,5 +1,5 @@
1
1
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
- import type { LTMcpServerRecord } from '../../../types';
2
+ import type { LTMcpServerRecord, LTToolManifestEntry } from '../../../types';
3
3
  /** Read-only access to the clients map for sibling modules. */
4
4
  export declare function getClients(): Map<string, Client>;
5
5
  /** Read-only access to the builtin factories map for sibling modules. */
@@ -10,7 +10,9 @@ export declare function getBuiltinServers(): Map<string, any>;
10
10
  * Register a built-in server factory so it can be auto-connected
11
11
  * when callServerTool is invoked with its name.
12
12
  */
13
- export declare function registerBuiltinServer(name: string, factory: () => Promise<any>): void;
13
+ export declare function registerBuiltinServer(name: string, factory: () => Promise<any>, toolManifest?: LTToolManifestEntry[]): void;
14
+ /** The tool manifest a built-in server was registered with, if any. */
15
+ export declare function getBuiltinToolManifest(name: string): LTToolManifestEntry[] | undefined;
14
16
  /**
15
17
  * Connect to a registered MCP server.
16
18
  * Creates the appropriate transport based on transport_type,
@@ -29,6 +31,12 @@ export declare function disconnectFromServer(serverId: string): Promise<void>;
29
31
  * Alias lookups (e.g. 'translation' matching 'long-tail-translation') reuse
30
32
  * the same client instance to avoid double-connecting the singleton server.
31
33
  */
34
+ /**
35
+ * The built-in server a server id or name resolves to, by the same rules
36
+ * resolveClient follows: an exact or fuzzy factory name, else a registered
37
+ * server whose name matches a factory. Null for an external server.
38
+ */
39
+ export declare function resolveBuiltinServerName(serverId: string): Promise<string | null>;
32
40
  export declare function resolveClient(serverId: string): Promise<Client | null>;
33
41
  /**
34
42
  * Connect to all auto-connect servers.
@@ -37,8 +37,10 @@ exports.getClients = getClients;
37
37
  exports.getBuiltinFactories = getBuiltinFactories;
38
38
  exports.getBuiltinServers = getBuiltinServers;
39
39
  exports.registerBuiltinServer = registerBuiltinServer;
40
+ exports.getBuiltinToolManifest = getBuiltinToolManifest;
40
41
  exports.connectToServer = connectToServer;
41
42
  exports.disconnectFromServer = disconnectFromServer;
43
+ exports.resolveBuiltinServerName = resolveBuiltinServerName;
42
44
  exports.resolveClient = resolveClient;
43
45
  exports.connectAutoServers = connectAutoServers;
44
46
  exports.disconnectAll = disconnectAll;
@@ -46,10 +48,9 @@ exports.isConnected = isConnected;
46
48
  exports.clear = clear;
47
49
  const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
48
50
  const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
49
- const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
50
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
51
51
  const inMemory_js_1 = require("@modelcontextprotocol/sdk/inMemory.js");
52
52
  const logger_1 = require("../../../lib/logger");
53
+ const network_transport_1 = require("./network-transport");
53
54
  const mcpDbService = __importStar(require("../db"));
54
55
  /** In-memory map of server ID/name to active MCP client */
55
56
  const clients = new Map();
@@ -59,6 +60,8 @@ const clients = new Map();
59
60
  * rather than external stdio/SSE connections.
60
61
  */
61
62
  const builtinFactories = new Map();
63
+ /** Tool manifests declared with a built-in factory (Long Tail's or the host's), keyed by server name. */
64
+ const builtinManifests = new Map();
62
65
  /**
63
66
  * Cached built-in McpServer instances -- keyed by canonical server name.
64
67
  * Used by dispatchBuiltinTool() to call tool handlers directly without
@@ -81,8 +84,16 @@ function getBuiltinServers() {
81
84
  * Register a built-in server factory so it can be auto-connected
82
85
  * when callServerTool is invoked with its name.
83
86
  */
84
- function registerBuiltinServer(name, factory) {
87
+ function registerBuiltinServer(name, factory, toolManifest) {
85
88
  builtinFactories.set(name, factory);
89
+ if (toolManifest)
90
+ builtinManifests.set(name, toolManifest);
91
+ else
92
+ builtinManifests.delete(name);
93
+ }
94
+ /** The tool manifest a built-in server was registered with, if any. */
95
+ function getBuiltinToolManifest(name) {
96
+ return builtinManifests.get(name);
86
97
  }
87
98
  /**
88
99
  * Connect to a registered MCP server.
@@ -135,11 +146,8 @@ async function connectToServer(server) {
135
146
  env: server.transport_config.env,
136
147
  });
137
148
  }
138
- else if (ttype === 'streamable-http') {
139
- transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(server.transport_config.url));
140
- }
141
149
  else {
142
- transport = new sse_js_1.SSEClientTransport(new URL(server.transport_config.url));
150
+ transport = (0, network_transport_1.createNetworkTransport)(ttype === 'streamable-http' ? 'streamable-http' : 'sse', server.transport_config);
143
151
  }
144
152
  await client.connect(transport);
145
153
  clients.set(server.id, client);
@@ -174,6 +182,36 @@ async function disconnectFromServer(serverId) {
174
182
  * Alias lookups (e.g. 'translation' matching 'long-tail-translation') reuse
175
183
  * the same client instance to avoid double-connecting the singleton server.
176
184
  */
185
+ /**
186
+ * The built-in server a server id or name resolves to, by the same rules
187
+ * resolveClient follows: an exact or fuzzy factory name, else a registered
188
+ * server whose name matches a factory. Null for an external server.
189
+ */
190
+ async function resolveBuiltinServerName(serverId) {
191
+ if (builtinFactories.has(serverId))
192
+ return serverId;
193
+ const norm = (s) => s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
194
+ const normId = norm(serverId);
195
+ for (const [name] of builtinFactories) {
196
+ const normName = norm(name);
197
+ if (normName.includes(normId) || normId.includes(normName))
198
+ return name;
199
+ }
200
+ try {
201
+ const dbServer = (await mcpDbService.getMcpServer(serverId)) ||
202
+ (await mcpDbService.getMcpServerByName(serverId));
203
+ if (!dbServer)
204
+ return null;
205
+ for (const [name] of builtinFactories) {
206
+ if (dbServer.name === name || name.includes(dbServer.name) || dbServer.name.includes(name))
207
+ return name;
208
+ }
209
+ }
210
+ catch {
211
+ // DB lookup failed: treated as external
212
+ }
213
+ return null;
214
+ }
177
215
  async function resolveClient(serverId) {
178
216
  // 1. Direct lookup (by UUID or name)
179
217
  if (clients.has(serverId))
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.testConnection = testConnection;
4
4
  const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
5
5
  const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
6
- const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
7
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
6
+ const network_transport_1 = require("./network-transport");
8
7
  /**
9
8
  * Test connectivity to an MCP server without persisting.
10
9
  * Creates a temporary client, connects, lists tools, then disconnects.
@@ -21,11 +20,8 @@ async function testConnection(transportType, transportConfig) {
21
20
  env: transportConfig.env,
22
21
  });
23
22
  }
24
- else if (transportType === 'streamable-http') {
25
- transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(transportConfig.url));
26
- }
27
23
  else {
28
- transport = new sse_js_1.SSEClientTransport(new URL(transportConfig.url));
24
+ transport = (0, network_transport_1.createNetworkTransport)(transportType, transportConfig);
29
25
  }
30
26
  await client.connect(transport);
31
27
  const { tools } = await client.listTools();
@@ -1,3 +1,3 @@
1
- export { registerBuiltinServer, connectToServer, disconnectFromServer, resolveClient, connectAutoServers, disconnectAll, isConnected, clear, } from './connection-lifecycle';
1
+ export { registerBuiltinServer, getBuiltinToolManifest, connectToServer, disconnectFromServer, resolveClient, resolveBuiltinServerName, connectAutoServers, disconnectAll, isConnected, clear, } from './connection-lifecycle';
2
2
  export { testConnection } from './connection-test';
3
3
  export { dispatchBuiltinTool, listServerTools, } from './connection-dispatch';
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listServerTools = exports.dispatchBuiltinTool = exports.testConnection = exports.clear = exports.isConnected = exports.disconnectAll = exports.connectAutoServers = exports.resolveClient = exports.disconnectFromServer = exports.connectToServer = exports.registerBuiltinServer = void 0;
3
+ exports.listServerTools = exports.dispatchBuiltinTool = exports.testConnection = exports.clear = exports.isConnected = exports.disconnectAll = exports.connectAutoServers = exports.resolveBuiltinServerName = exports.resolveClient = exports.disconnectFromServer = exports.connectToServer = exports.getBuiltinToolManifest = exports.registerBuiltinServer = void 0;
4
4
  var connection_lifecycle_1 = require("./connection-lifecycle");
5
5
  Object.defineProperty(exports, "registerBuiltinServer", { enumerable: true, get: function () { return connection_lifecycle_1.registerBuiltinServer; } });
6
+ Object.defineProperty(exports, "getBuiltinToolManifest", { enumerable: true, get: function () { return connection_lifecycle_1.getBuiltinToolManifest; } });
6
7
  Object.defineProperty(exports, "connectToServer", { enumerable: true, get: function () { return connection_lifecycle_1.connectToServer; } });
7
8
  Object.defineProperty(exports, "disconnectFromServer", { enumerable: true, get: function () { return connection_lifecycle_1.disconnectFromServer; } });
8
9
  Object.defineProperty(exports, "resolveClient", { enumerable: true, get: function () { return connection_lifecycle_1.resolveClient; } });
10
+ Object.defineProperty(exports, "resolveBuiltinServerName", { enumerable: true, get: function () { return connection_lifecycle_1.resolveBuiltinServerName; } });
9
11
  Object.defineProperty(exports, "connectAutoServers", { enumerable: true, get: function () { return connection_lifecycle_1.connectAutoServers; } });
10
12
  Object.defineProperty(exports, "disconnectAll", { enumerable: true, get: function () { return connection_lifecycle_1.disconnectAll; } });
11
13
  Object.defineProperty(exports, "isConnected", { enumerable: true, get: function () { return connection_lifecycle_1.isConnected; } });
@@ -1,2 +1,2 @@
1
- export { registerBuiltinServer, connectToServer, disconnectFromServer, listServerTools, resolveClient, connectAutoServers, disconnectAll, isConnected, clear, } from './connection';
2
- export { callServerTool, toolActivities, } from './tools';
1
+ export { registerBuiltinServer, getBuiltinToolManifest, connectToServer, disconnectFromServer, listServerTools, resolveClient, resolveBuiltinServerName, connectAutoServers, disconnectAll, isConnected, clear, } from './connection';
2
+ export { callServerTool, callBuiltinToolAs, toolActivities, } from './tools';
@@ -1,16 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toolActivities = exports.callServerTool = exports.clear = exports.isConnected = exports.disconnectAll = exports.connectAutoServers = exports.resolveClient = exports.listServerTools = exports.disconnectFromServer = exports.connectToServer = exports.registerBuiltinServer = void 0;
3
+ exports.toolActivities = exports.callBuiltinToolAs = exports.callServerTool = exports.clear = exports.isConnected = exports.disconnectAll = exports.connectAutoServers = exports.resolveBuiltinServerName = exports.resolveClient = exports.listServerTools = exports.disconnectFromServer = exports.connectToServer = exports.getBuiltinToolManifest = exports.registerBuiltinServer = void 0;
4
4
  var connection_1 = require("./connection");
5
5
  Object.defineProperty(exports, "registerBuiltinServer", { enumerable: true, get: function () { return connection_1.registerBuiltinServer; } });
6
+ Object.defineProperty(exports, "getBuiltinToolManifest", { enumerable: true, get: function () { return connection_1.getBuiltinToolManifest; } });
6
7
  Object.defineProperty(exports, "connectToServer", { enumerable: true, get: function () { return connection_1.connectToServer; } });
7
8
  Object.defineProperty(exports, "disconnectFromServer", { enumerable: true, get: function () { return connection_1.disconnectFromServer; } });
8
9
  Object.defineProperty(exports, "listServerTools", { enumerable: true, get: function () { return connection_1.listServerTools; } });
9
10
  Object.defineProperty(exports, "resolveClient", { enumerable: true, get: function () { return connection_1.resolveClient; } });
11
+ Object.defineProperty(exports, "resolveBuiltinServerName", { enumerable: true, get: function () { return connection_1.resolveBuiltinServerName; } });
10
12
  Object.defineProperty(exports, "connectAutoServers", { enumerable: true, get: function () { return connection_1.connectAutoServers; } });
11
13
  Object.defineProperty(exports, "disconnectAll", { enumerable: true, get: function () { return connection_1.disconnectAll; } });
12
14
  Object.defineProperty(exports, "isConnected", { enumerable: true, get: function () { return connection_1.isConnected; } });
13
15
  Object.defineProperty(exports, "clear", { enumerable: true, get: function () { return connection_1.clear; } });
14
16
  var tools_1 = require("./tools");
15
17
  Object.defineProperty(exports, "callServerTool", { enumerable: true, get: function () { return tools_1.callServerTool; } });
18
+ Object.defineProperty(exports, "callBuiltinToolAs", { enumerable: true, get: function () { return tools_1.callBuiltinToolAs; } });
16
19
  Object.defineProperty(exports, "toolActivities", { enumerable: true, get: function () { return tools_1.toolActivities; } });
@@ -0,0 +1,12 @@
1
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
2
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
+ /**
4
+ * The client transport for a network MCP server. `headers` ride every
5
+ * request (the SSE stream and its POSTs alike), which is how a server that
6
+ * authenticates its callers, such as another Long Tail's /mcp with a
7
+ * service-account key, is reached.
8
+ */
9
+ export declare function createNetworkTransport(transportType: 'sse' | 'streamable-http', config: {
10
+ url?: string;
11
+ headers?: Record<string, string>;
12
+ }): SSEClientTransport | StreamableHTTPClientTransport;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNetworkTransport = createNetworkTransport;
4
+ const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
5
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
6
+ /**
7
+ * The client transport for a network MCP server. `headers` ride every
8
+ * request (the SSE stream and its POSTs alike), which is how a server that
9
+ * authenticates its callers, such as another Long Tail's /mcp with a
10
+ * service-account key, is reached.
11
+ */
12
+ function createNetworkTransport(transportType, config) {
13
+ if (!config.url)
14
+ throw new Error('A network MCP server needs a url');
15
+ const url = new URL(config.url);
16
+ const requestInit = config.headers && Object.keys(config.headers).length ? { headers: config.headers } : undefined;
17
+ return transportType === 'streamable-http'
18
+ ? new streamableHttp_js_1.StreamableHTTPClientTransport(url, { requestInit })
19
+ : new sse_js_1.SSEClientTransport(url, { requestInit });
20
+ }