@hotmeshio/long-tail 0.1.3 → 0.1.5

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 (615) hide show
  1. package/README.md +118 -173
  2. package/build/examples/seed.js +1 -1
  3. package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
  4. package/build/examples/workflows/basic-echo/activities.js +7 -7
  5. package/build/examples/workflows/basic-echo/index.js +1 -1
  6. package/build/examples/workflows/kitchen-sink/index.js +2 -2
  7. package/build/index.d.ts +12 -10
  8. package/build/index.js +15 -12
  9. package/build/lib/db/index.d.ts +18 -0
  10. package/build/{services → lib}/db/index.js +9 -0
  11. package/build/{services → lib}/db/migrate.js +3 -3
  12. package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
  13. package/build/{services → lib}/telemetry/honeycomb.js +2 -2
  14. package/build/modules/defaults.d.ts +2 -0
  15. package/build/modules/defaults.js +3 -1
  16. package/build/routes/controlplane.js +1 -1
  17. package/build/routes/dba.js +4 -0
  18. package/build/routes/docs.d.ts +2 -0
  19. package/build/routes/docs.js +87 -0
  20. package/build/routes/escalations/bulk.js +120 -202
  21. package/build/routes/escalations/resolve.js +1 -1
  22. package/build/routes/escalations/single.js +1 -1
  23. package/build/routes/files.js +1 -1
  24. package/build/routes/index.js +2 -0
  25. package/build/routes/insight.js +2 -1
  26. package/build/routes/mcp.js +3 -2
  27. package/build/routes/oauth.js +1 -1
  28. package/build/routes/settings.js +4 -4
  29. package/build/routes/workflows/discovery.js +3 -3
  30. package/build/routes/workflows/invocation.js +1 -1
  31. package/build/routes/yaml-workflows/crud.js +1 -1
  32. package/build/routes/yaml-workflows/deployment.js +25 -0
  33. package/build/services/auth/bot-api-key.js +1 -1
  34. package/build/services/auth/index.d.ts +4 -0
  35. package/build/services/auth/index.js +17 -0
  36. package/build/services/auth/service-token.js +1 -1
  37. package/build/services/config/provider.js +1 -1
  38. package/build/services/config/read.js +1 -1
  39. package/build/services/config/write.js +1 -1
  40. package/build/services/controlplane/index.js +3 -4
  41. package/build/services/controlplane/quorum-bridge.js +2 -2
  42. package/build/services/cron/index.js +4 -5
  43. package/build/services/dba.d.ts +4 -0
  44. package/build/services/dba.js +3 -6
  45. package/build/services/escalation/bulk.js +1 -1
  46. package/build/services/escalation/crud.js +1 -1
  47. package/build/services/escalation/queries.js +1 -1
  48. package/build/services/export/client.js +2 -5
  49. package/build/services/export/index.js +14 -2
  50. package/build/services/hotmesh-utils.js +1 -1
  51. package/build/services/iam/bots.js +6 -12
  52. package/build/services/iam/context.d.ts +1 -1
  53. package/build/services/iam/context.js +5 -5
  54. package/build/services/iam/credentials.js +1 -1
  55. package/build/services/iam/ephemeral.js +8 -15
  56. package/build/services/iam/principal.js +3 -10
  57. package/build/services/iam/resolve.js +1 -1
  58. package/build/services/iam/sql.d.ts +10 -0
  59. package/build/services/iam/sql.js +42 -0
  60. package/build/services/insight/index.d.ts +1 -0
  61. package/build/services/insight/index.js +4 -6
  62. package/build/services/interceptor/activities/escalation.js +1 -1
  63. package/build/services/interceptor/activities/task.js +9 -6
  64. package/build/services/interceptor/activities/workflow.js +4 -5
  65. package/build/services/interceptor/activity-interceptor.d.ts +1 -1
  66. package/build/services/interceptor/activity-interceptor.js +5 -5
  67. package/build/services/interceptor/completion.js +1 -1
  68. package/build/services/interceptor/escalation.js +1 -1
  69. package/build/services/interceptor/index.js +4 -4
  70. package/build/services/interceptor/lifecycle.js +1 -1
  71. package/build/services/maintenance/index.js +4 -5
  72. package/build/services/mcp/adapter.js +1 -16
  73. package/build/services/mcp/client/connection.d.ts +1 -1
  74. package/build/services/mcp/client/connection.js +2 -2
  75. package/build/services/mcp/client/tools.js +1 -1
  76. package/build/services/mcp/db-server/index.js +1 -1
  77. package/build/services/mcp/db-server/tools.js +17 -4
  78. package/build/services/mcp/db.js +1 -1
  79. package/build/services/mcp/playwright-server/index.js +1 -1
  80. package/build/services/mcp/playwright-server/lifecycle.js +1 -1
  81. package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
  82. package/build/services/mcp/playwright-server/tools.js +1 -1
  83. package/build/services/mcp/register-tool.d.ts +11 -0
  84. package/build/services/mcp/register-tool.js +15 -0
  85. package/build/services/mcp/server.js +1 -1
  86. package/build/services/mcp/sql.d.ts +6 -0
  87. package/build/services/mcp/sql.js +34 -1
  88. package/build/services/mcp/workflow-compiler-server.js +1 -1
  89. package/build/services/mcp/workflow-server.js +1 -1
  90. package/build/services/mcp-runs/execution-builder.js +8 -6
  91. package/build/services/mcp-runs/queries.js +2 -2
  92. package/build/services/mcp-runs/sql.d.ts +4 -1
  93. package/build/services/mcp-runs/sql.js +23 -2
  94. package/build/services/namespace/index.js +1 -1
  95. package/build/services/oauth/db.js +9 -37
  96. package/build/services/oauth/index.js +1 -1
  97. package/build/services/oauth/providers/registry.js +1 -1
  98. package/build/services/oauth/sql.d.ts +7 -0
  99. package/build/services/oauth/sql.js +32 -0
  100. package/build/services/orchestrator/index.js +3 -3
  101. package/build/services/role/index.js +1 -1
  102. package/build/services/task/crud.js +1 -1
  103. package/build/services/task/process.js +1 -1
  104. package/build/services/task/resolve.js +1 -1
  105. package/build/services/user/auth.js +1 -1
  106. package/build/services/user/crud.js +1 -1
  107. package/build/services/user/rbac.js +1 -1
  108. package/build/services/user/roles.js +1 -1
  109. package/build/services/user/sql.d.ts +2 -0
  110. package/build/services/user/sql.js +3 -1
  111. package/build/services/yaml-workflow/db-utils.js +1 -1
  112. package/build/services/yaml-workflow/db.js +1 -1
  113. package/build/services/yaml-workflow/deployer-helpers.js +1 -1
  114. package/build/services/yaml-workflow/deployer.js +4 -4
  115. package/build/services/yaml-workflow/generator.js +1 -1
  116. package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
  117. package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
  118. package/build/services/yaml-workflow/input-analyzer.js +16 -3
  119. package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
  120. package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
  121. package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
  122. package/build/services/yaml-workflow/pipeline/extract.js +5 -3
  123. package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
  124. package/build/services/yaml-workflow/pipeline/index.js +22 -0
  125. package/build/services/yaml-workflow/pipeline/validate.js +2 -2
  126. package/build/services/yaml-workflow/workers/callbacks.js +1 -1
  127. package/build/services/yaml-workflow/workers/events.js +2 -2
  128. package/build/services/yaml-workflow/workers/register.js +8 -8
  129. package/build/start/adapters.js +7 -7
  130. package/build/start/index.js +4 -4
  131. package/build/start/server.js +1 -1
  132. package/build/start/workers.d.ts +1 -2
  133. package/build/start/workers.js +8 -7
  134. package/build/system/activities/claude-code.js +1 -1
  135. package/build/system/activities/file-storage.js +1 -1
  136. package/build/system/activities/knowledge.d.ts +58 -0
  137. package/build/system/activities/knowledge.js +128 -0
  138. package/build/system/activities/sql.d.ts +9 -0
  139. package/build/system/activities/sql.js +41 -0
  140. package/build/system/activities/triage/context.js +1 -1
  141. package/build/system/activities/triage/discovery.d.ts +2 -14
  142. package/build/system/activities/triage/discovery.js +5 -161
  143. package/build/system/activities/triage/llm.d.ts +1 -8
  144. package/build/system/activities/triage/llm.js +2 -28
  145. package/build/system/activities/triage/tools.d.ts +1 -17
  146. package/build/system/activities/triage/tools.js +8 -167
  147. package/build/system/index.js +5 -4
  148. package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
  149. package/build/system/mcp-servers/admin/escalations.js +149 -0
  150. package/build/system/mcp-servers/admin/index.d.ts +31 -0
  151. package/build/system/mcp-servers/admin/index.js +80 -0
  152. package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
  153. package/build/system/mcp-servers/admin/maintenance.js +58 -0
  154. package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
  155. package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
  156. package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
  157. package/build/system/mcp-servers/admin/schemas.js +177 -0
  158. package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
  159. package/build/system/mcp-servers/admin/tasks.js +112 -0
  160. package/build/system/mcp-servers/admin/users.d.ts +5 -0
  161. package/build/system/mcp-servers/admin/users.js +167 -0
  162. package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
  163. package/build/system/mcp-servers/admin/workflow-config.js +118 -0
  164. package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
  165. package/build/system/mcp-servers/admin/workflows.js +138 -0
  166. package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
  167. package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
  168. package/build/system/mcp-servers/claude-code.js +1 -1
  169. package/build/system/mcp-servers/db-query/index.js +1 -1
  170. package/build/system/mcp-servers/db-query/tools.js +17 -4
  171. package/build/system/mcp-servers/docs.d.ts +5 -0
  172. package/build/system/mcp-servers/docs.js +147 -0
  173. package/build/system/mcp-servers/file-storage.js +1 -1
  174. package/build/system/mcp-servers/http-fetch.js +1 -1
  175. package/build/system/mcp-servers/human-queue.js +1 -1
  176. package/build/system/mcp-servers/knowledge.d.ts +4 -0
  177. package/build/system/mcp-servers/knowledge.js +137 -0
  178. package/build/system/mcp-servers/oauth.js +1 -1
  179. package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
  180. package/build/system/mcp-servers/playwright/index.js +1 -1
  181. package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
  182. package/build/system/mcp-servers/playwright/schemas.js +3 -0
  183. package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
  184. package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
  185. package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
  186. package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
  187. package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
  188. package/build/system/mcp-servers/playwright-cli/index.js +1 -1
  189. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
  190. package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
  191. package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
  192. package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
  193. package/build/system/mcp-servers/translation.d.ts +14 -0
  194. package/build/system/mcp-servers/translation.js +130 -0
  195. package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
  196. package/build/system/mcp-servers/vision-prompts.js +9 -0
  197. package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
  198. package/build/system/mcp-servers/vision.js +221 -0
  199. package/build/system/mcp-servers/workflow-compiler.js +1 -1
  200. package/build/system/mcp-servers/workflow.js +1 -1
  201. package/build/system/seed/index.js +13 -2
  202. package/build/system/seed/server-definitions.d.ts +1954 -322
  203. package/build/system/seed/server-definitions.js +65 -34
  204. package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
  205. package/build/system/seed/tool-manifests-admin.js +45 -0
  206. package/build/system/seed/tool-manifests-browser.d.ts +1 -1
  207. package/build/system/seed/tool-manifests-browser.js +3 -3
  208. package/build/system/seed/tool-manifests-data.d.ts +62 -21
  209. package/build/system/seed/tool-manifests-data.js +55 -17
  210. package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
  211. package/build/system/seed/tool-manifests-knowledge.js +94 -0
  212. package/build/system/workflows/mcp-deterministic/index.js +1 -1
  213. package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
  214. package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
  215. package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
  216. package/build/system/workflows/mcp-query/activities/llm.js +2 -27
  217. package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
  218. package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
  219. package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
  220. package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
  221. package/build/system/workflows/mcp-query/index.js +55 -5
  222. package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
  223. package/build/system/workflows/mcp-query/prompts.js +5 -32
  224. package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
  225. package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
  226. package/build/system/workflows/mcp-query/types.d.ts +2 -10
  227. package/build/system/workflows/mcp-query/types.js +0 -1
  228. package/build/system/workflows/mcp-query-router/index.js +1 -1
  229. package/build/system/workflows/mcp-triage/index.d.ts +2 -2
  230. package/build/system/workflows/mcp-triage/index.js +39 -7
  231. package/build/system/workflows/mcp-triage/prompts.js +7 -14
  232. package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
  233. package/build/system/workflows/mcp-triage-router/index.js +1 -1
  234. package/build/system/workflows/shared/discovery.d.ts +35 -0
  235. package/build/system/workflows/shared/discovery.js +175 -0
  236. package/build/system/workflows/shared/index.d.ts +7 -0
  237. package/build/system/workflows/shared/index.js +18 -0
  238. package/build/system/workflows/shared/llm-caller.d.ts +8 -0
  239. package/build/system/workflows/shared/llm-caller.js +31 -0
  240. package/build/system/workflows/shared/prompts.d.ts +2 -0
  241. package/build/system/workflows/shared/prompts.js +32 -0
  242. package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
  243. package/build/system/workflows/shared/strategy-advisors.js +109 -0
  244. package/build/system/workflows/shared/tool-executor.d.ts +11 -0
  245. package/build/system/workflows/shared/tool-executor.js +111 -0
  246. package/build/system/workflows/shared/tool-loader.d.ts +19 -0
  247. package/build/system/workflows/shared/tool-loader.js +94 -0
  248. package/build/system/workflows/shared/types.d.ts +9 -0
  249. package/build/system/workflows/shared/types.js +2 -0
  250. package/build/system/workflows/tool-result-guard.d.ts +14 -0
  251. package/build/system/workflows/tool-result-guard.js +78 -0
  252. package/build/tsconfig.tsbuildinfo +1 -1
  253. package/build/types/user.d.ts +2 -0
  254. package/build/vitest.config.d.ts +1 -1
  255. package/build/vitest.integration.config.d.ts +1 -1
  256. package/build/workers/index.js +2 -8
  257. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
  258. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
  259. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
  260. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
  261. package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
  262. package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
  263. package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
  264. package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
  265. package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
  266. package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
  267. package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
  268. package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
  269. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
  270. package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
  271. package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
  272. package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
  273. package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
  274. package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
  275. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
  276. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
  277. package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
  278. package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
  279. package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
  280. package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
  281. package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
  282. package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
  283. package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
  284. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
  285. package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
  286. package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
  287. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
  288. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
  289. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
  290. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
  291. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
  292. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
  293. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
  294. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
  295. package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
  296. package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
  297. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
  298. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
  299. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
  300. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
  301. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
  302. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
  303. package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
  304. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
  305. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
  306. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
  307. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
  308. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
  309. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
  310. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
  311. package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
  312. package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
  313. package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
  314. package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
  315. package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
  316. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
  317. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
  318. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
  319. package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
  320. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
  321. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
  322. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
  323. package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
  324. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
  325. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
  326. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
  327. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
  328. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
  329. package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
  330. package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
  331. package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
  332. package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
  333. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
  334. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
  335. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
  336. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
  337. package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
  338. package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
  339. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
  340. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
  341. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
  342. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
  343. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
  344. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
  345. package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
  346. package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
  347. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
  348. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
  349. package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
  350. package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
  351. package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
  352. package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
  353. package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
  354. package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
  355. package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
  356. package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
  357. package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
  358. package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
  359. package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
  360. package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
  361. package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
  362. package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
  363. package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
  364. package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
  365. package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
  366. package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
  367. package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
  368. package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
  369. package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
  370. package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
  371. package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
  372. package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
  373. package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
  374. package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
  375. package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
  376. package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
  377. package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
  378. package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
  379. package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
  380. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
  381. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
  382. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
  383. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
  384. package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
  385. package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
  386. package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
  387. package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
  388. package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
  389. package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
  390. package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
  391. package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
  392. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
  393. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
  394. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
  395. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
  396. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
  397. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
  398. package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
  399. package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
  400. package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
  401. package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
  402. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  403. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  404. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  405. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  406. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
  407. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
  408. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
  409. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
  410. package/dashboard/dist/index.html +5 -5
  411. package/docs/api/dba.md +81 -0
  412. package/docs/api/escalations.md +575 -0
  413. package/docs/api/exports.md +170 -0
  414. package/docs/api/maintenance.md +93 -0
  415. package/docs/api/mcp-runs.md +128 -0
  416. package/docs/api/mcp-servers.md +195 -0
  417. package/docs/api/namespaces.md +48 -0
  418. package/docs/api/roles.md +390 -0
  419. package/docs/api/service-accounts.md +188 -0
  420. package/docs/api/settings.md +33 -0
  421. package/docs/api/tasks.md +167 -0
  422. package/docs/api/users.md +180 -0
  423. package/docs/api/workflows.md +616 -0
  424. package/docs/api/yaml-workflows.md +312 -0
  425. package/docs/architecture.md +221 -0
  426. package/docs/auth.md +181 -0
  427. package/docs/cloud.md +272 -0
  428. package/docs/compilation.md +136 -0
  429. package/docs/contributing.md +56 -0
  430. package/docs/dashboard.md +145 -0
  431. package/docs/data.md +478 -0
  432. package/docs/escalation-strategies.md +264 -0
  433. package/docs/events.md +251 -0
  434. package/docs/iam.md +222 -0
  435. package/docs/img/01-login.png +0 -0
  436. package/docs/img/02-dashboard-home.png +0 -0
  437. package/docs/img/03-processes-list.png +0 -0
  438. package/docs/img/04-escalations-list.png +0 -0
  439. package/docs/img/05-mcp-servers.png +0 -0
  440. package/docs/img/06-mcp-pipelines.png +0 -0
  441. package/docs/img/07-workflows-list.png +0 -0
  442. package/docs/img/compilation/01-query-submit.png +0 -0
  443. package/docs/img/compilation/02-mcp-servers.png +0 -0
  444. package/docs/img/compilation/03-query-completed.png +0 -0
  445. package/docs/img/compilation/04-wizard-original.png +0 -0
  446. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  447. package/docs/img/compilation/06-wizard-profile.png +0 -0
  448. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  449. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  450. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  451. package/docs/img/compilation/10-wizard-verify.png +0 -0
  452. package/docs/logging.md +110 -0
  453. package/docs/maintenance.md +221 -0
  454. package/docs/mcp.md +715 -0
  455. package/docs/oauth-and-delegation.md +469 -0
  456. package/docs/telemetry.md +144 -0
  457. package/docs/workflows.md +695 -0
  458. package/lib/db/schemas/015_knowledge.sql +23 -0
  459. package/package.json +8 -9
  460. package/build/services/db/index.d.ts +0 -3
  461. package/build/services/mcp/vision-server.d.ts +0 -15
  462. package/build/services/mcp/vision-server.js +0 -214
  463. package/build/system/mcp-servers/document-vision.js +0 -228
  464. package/build/system/mcp-servers/prompts.d.ts +0 -4
  465. package/build/system/mcp-servers/prompts.js +0 -10
  466. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
  467. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
  468. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
  469. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
  470. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
  471. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
  472. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
  473. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
  474. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
  475. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
  476. package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
  477. package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
  478. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
  479. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
  480. package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
  481. package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
  482. package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
  483. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  484. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
  485. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
  486. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
  487. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
  488. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
  489. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
  490. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
  491. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
  492. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
  493. package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
  494. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
  495. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
  496. package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
  497. package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
  498. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  499. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
  500. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
  501. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
  502. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
  503. package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
  504. package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
  505. package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
  506. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  507. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
  508. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
  509. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  510. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
  511. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
  512. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  513. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
  514. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
  515. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
  516. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
  517. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
  518. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
  519. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
  520. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
  521. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
  522. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
  523. package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
  524. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
  525. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
  526. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
  527. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
  528. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
  529. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
  530. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
  531. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
  532. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
  533. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
  534. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
  535. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
  536. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
  537. package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
  538. package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
  539. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
  540. package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
  541. package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
  542. package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
  543. package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
  544. package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
  545. package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
  546. package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
  547. package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
  548. package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
  549. package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
  550. package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
  551. package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
  552. package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
  553. package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
  554. package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
  555. package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
  556. package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
  557. package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
  558. package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
  559. package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
  560. package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
  561. package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
  562. package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
  563. package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
  564. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
  565. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
  566. package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
  567. package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
  568. package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
  569. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
  570. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  571. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  572. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
  573. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
  574. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
  575. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
  576. /package/build/{services → lib}/db/migrate.d.ts +0 -0
  577. /package/build/{services → lib}/events/index.d.ts +0 -0
  578. /package/build/{services → lib}/events/index.js +0 -0
  579. /package/build/{services → lib}/events/memory.d.ts +0 -0
  580. /package/build/{services → lib}/events/memory.js +0 -0
  581. /package/build/{services → lib}/events/nats.d.ts +0 -0
  582. /package/build/{services → lib}/events/nats.js +0 -0
  583. /package/build/{services → lib}/events/publish.d.ts +0 -0
  584. /package/build/{services → lib}/events/publish.js +0 -0
  585. /package/build/{services → lib}/events/socketio.d.ts +0 -0
  586. /package/build/{services → lib}/events/socketio.js +0 -0
  587. /package/build/{services → lib}/logger/index.d.ts +0 -0
  588. /package/build/{services → lib}/logger/index.js +0 -0
  589. /package/build/{services → lib}/logger/pino.d.ts +0 -0
  590. /package/build/{services → lib}/logger/pino.js +0 -0
  591. /package/build/{services → lib}/storage/index.d.ts +0 -0
  592. /package/build/{services → lib}/storage/index.js +0 -0
  593. /package/build/{services → lib}/storage/local.d.ts +0 -0
  594. /package/build/{services → lib}/storage/local.js +0 -0
  595. /package/build/{services → lib}/storage/s3.d.ts +0 -0
  596. /package/build/{services → lib}/storage/s3.js +0 -0
  597. /package/build/{services → lib}/storage/types.d.ts +0 -0
  598. /package/build/{services → lib}/storage/types.js +0 -0
  599. /package/build/{services → lib}/telemetry/index.d.ts +0 -0
  600. /package/build/{services → lib}/telemetry/index.js +0 -0
  601. /package/{services → lib}/db/README.md +0 -0
  602. /package/{services → lib}/db/schemas/001_schema.sql +0 -0
  603. /package/{services → lib}/db/schemas/002_seed.sql +0 -0
  604. /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
  605. /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
  606. /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
  607. /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
  608. /package/{services → lib}/db/schemas/007_security.sql +0 -0
  609. /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
  610. /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
  611. /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
  612. /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
  613. /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
  614. /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
  615. /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPool = getPool;
4
4
  exports.closePool = closePool;
5
+ exports.getConnection = getConnection;
5
6
  const pg_1 = require("pg");
6
7
  const config_1 = require("../../modules/config");
7
8
  let pool = null;
@@ -17,3 +18,11 @@ async function closePool() {
17
18
  pool = null;
18
19
  }
19
20
  }
21
+ /**
22
+ * HotMesh connection descriptor: `{ class: Client, options: postgres_options }`.
23
+ * Use this everywhere HotMesh / Durable APIs need a connection config
24
+ * instead of importing `pg` and `postgres_options` directly.
25
+ */
26
+ function getConnection() {
27
+ return { class: pg_1.Client, options: config_1.postgres_options };
28
+ }
@@ -38,8 +38,8 @@ const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
39
  const index_1 = require("./index");
40
40
  const logger_1 = require("../logger");
41
- // In dev: __dirname = services/db → schemas is ./schemas
42
- // In built/published: __dirname = build/services/db → schemas is ../../../services/db/schemas
41
+ // In dev: __dirname = lib/db → schemas is ./schemas
42
+ // In built/published: __dirname = build/lib/db → schemas is ../../../lib/db/schemas
43
43
  const devPath = path.join(__dirname, 'schemas');
44
44
  const SCHEMAS_DIR = fs.existsSync(devPath)
45
45
  ? devPath
@@ -68,7 +68,7 @@ async function migrate() {
68
68
  }
69
69
  }
70
70
  }
71
- // run directly: npx ts-node services/db/migrate.ts
71
+ // run directly: npx ts-node lib/db/migrate.ts
72
72
  if (require.main === module) {
73
73
  require('dotenv').config();
74
74
  migrate()
@@ -26,8 +26,8 @@ export interface HoneycombOptions {
26
26
  *
27
27
  * Usage:
28
28
  * ```typescript
29
- * import { telemetryRegistry } from './services/telemetry';
30
- * import { HoneycombTelemetryAdapter } from './services/telemetry/honeycomb';
29
+ * import { telemetryRegistry } from './lib/telemetry';
30
+ * import { HoneycombTelemetryAdapter } from './lib/telemetry/honeycomb';
31
31
  *
32
32
  * telemetryRegistry.register(new HoneycombTelemetryAdapter({
33
33
  * apiKey: process.env.HONEYCOMB_API_KEY,
@@ -19,8 +19,8 @@ const logger_1 = require("../logger");
19
19
  *
20
20
  * Usage:
21
21
  * ```typescript
22
- * import { telemetryRegistry } from './services/telemetry';
23
- * import { HoneycombTelemetryAdapter } from './services/telemetry/honeycomb';
22
+ * import { telemetryRegistry } from './lib/telemetry';
23
+ * import { HoneycombTelemetryAdapter } from './lib/telemetry/honeycomb';
24
24
  *
25
25
  * telemetryRegistry.register(new HoneycombTelemetryAdapter({
26
26
  * apiKey: process.env.HONEYCOMB_API_KEY,
@@ -23,6 +23,8 @@ export declare const LLM_MAX_TOKENS_VISION: number;
23
23
  export declare const LLM_MAX_ARRAY_ITEMS: number;
24
24
  /** Hard character cap on serialized input payloads sent to the LLM. */
25
25
  export declare const LLM_MAX_INPUT_CHARS: number;
26
+ /** Max characters for a single tool result before truncation in the agentic loop. */
27
+ export declare const TOOL_RESULT_MAX_CHARS: number;
26
28
  /** Max agentic loop iterations for MCP triage workflows. */
27
29
  export declare const TOOL_ROUNDS_TRIAGE: number;
28
30
  /** Max agentic loop iterations for mcpQuery (higher — includes recall + discover + persist phases). */
@@ -9,7 +9,7 @@
9
9
  * Grouped by domain so related knobs live together.
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.YAML_LINE_WIDTH = exports.STOP_WORDS = exports.CLAIM_DURATION_OPTIONS = exports.YAML_VERSION_LIMIT = exports.YAML_LIST_LIMIT = exports.QUERY_LIMIT_MAX = exports.QUERY_LIMIT_DEFAULT = exports.CONFIG_CACHE_TTL_MS = exports.MCP_TOOL_TIMEOUT_MS = exports.WORKFLOW_SYNC_TIMEOUT_MS = exports.JOB_EXPIRE_SECS = exports.WORKFLOW_EXPIRE_SECS = exports.TOOL_ARG_LIMIT_CAP = exports.TOOL_ROUNDS_MCP_QUERY = exports.TOOL_ROUNDS_TRIAGE = exports.LLM_MAX_INPUT_CHARS = exports.LLM_MAX_ARRAY_ITEMS = exports.LLM_MAX_TOKENS_VISION = exports.LLM_MAX_TOKENS_JSON = exports.LLM_MAX_TOKENS_DEFAULT = exports.LLM_BASE_URL = exports.LLM_MODEL_SECONDARY = exports.LLM_MODEL_PRIMARY = void 0;
12
+ exports.YAML_LINE_WIDTH = exports.STOP_WORDS = exports.CLAIM_DURATION_OPTIONS = exports.YAML_VERSION_LIMIT = exports.YAML_LIST_LIMIT = exports.QUERY_LIMIT_MAX = exports.QUERY_LIMIT_DEFAULT = exports.CONFIG_CACHE_TTL_MS = exports.MCP_TOOL_TIMEOUT_MS = exports.WORKFLOW_SYNC_TIMEOUT_MS = exports.JOB_EXPIRE_SECS = exports.WORKFLOW_EXPIRE_SECS = exports.TOOL_ARG_LIMIT_CAP = exports.TOOL_ROUNDS_MCP_QUERY = exports.TOOL_ROUNDS_TRIAGE = exports.TOOL_RESULT_MAX_CHARS = exports.LLM_MAX_INPUT_CHARS = exports.LLM_MAX_ARRAY_ITEMS = exports.LLM_MAX_TOKENS_VISION = exports.LLM_MAX_TOKENS_JSON = exports.LLM_MAX_TOKENS_DEFAULT = exports.LLM_BASE_URL = exports.LLM_MODEL_SECONDARY = exports.LLM_MODEL_PRIMARY = void 0;
13
13
  function envInt(key, fallback) {
14
14
  const v = process.env[key];
15
15
  if (v === undefined || v === '')
@@ -37,6 +37,8 @@ exports.LLM_MAX_TOKENS_VISION = envInt('LT_LLM_MAX_TOKENS_VISION', 2000);
37
37
  exports.LLM_MAX_ARRAY_ITEMS = envInt('LT_LLM_MAX_ARRAY_ITEMS', 25);
38
38
  /** Hard character cap on serialized input payloads sent to the LLM. */
39
39
  exports.LLM_MAX_INPUT_CHARS = envInt('LT_LLM_MAX_INPUT_CHARS', 12_000);
40
+ /** Max characters for a single tool result before truncation in the agentic loop. */
41
+ exports.TOOL_RESULT_MAX_CHARS = envInt('LT_TOOL_RESULT_MAX_CHARS', 50_000);
40
42
  // ── Tool execution ───────────────────────────────────────────────────
41
43
  /** Max agentic loop iterations for MCP triage workflows. */
42
44
  exports.TOOL_ROUNDS_TRIAGE = envInt('LT_TOOL_ROUNDS_TRIAGE', 10);
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const express_1 = require("express");
37
37
  const auth_1 = require("../modules/auth");
38
38
  const controlplane = __importStar(require("../services/controlplane"));
39
- const events_1 = require("../services/events");
39
+ const events_1 = require("../lib/events");
40
40
  const router = (0, express_1.Router)();
41
41
  /**
42
42
  * GET /api/controlplane/apps
@@ -58,6 +58,10 @@ router.post('/prune', auth_1.requireAdmin, async (req, res) => {
58
58
  expire: req.body.expire,
59
59
  jobs: req.body.jobs,
60
60
  streams: req.body.streams,
61
+ engineStreams: req.body.engineStreams,
62
+ engineStreamsExpire: req.body.engineStreamsExpire,
63
+ workerStreams: req.body.workerStreams,
64
+ workerStreamsExpire: req.body.workerStreamsExpire,
61
65
  attributes: req.body.attributes,
62
66
  entities: req.body.entities,
63
67
  pruneTransient: req.body.pruneTransient,
@@ -0,0 +1,2 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const express_1 = require("express");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const router = (0, express_1.Router)();
40
+ function docsDir() {
41
+ const candidates = [
42
+ path.join(__dirname, '..', 'docs'),
43
+ path.join(__dirname, '..', '..', 'docs'),
44
+ ];
45
+ for (const dir of candidates) {
46
+ if (fs.existsSync(dir))
47
+ return dir;
48
+ }
49
+ return candidates[0];
50
+ }
51
+ function listDocs(dir, prefix = '') {
52
+ if (!fs.existsSync(dir))
53
+ return [];
54
+ const results = [];
55
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
56
+ const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
57
+ if (entry.isDirectory()) {
58
+ results.push(...listDocs(path.join(dir, entry.name), rel));
59
+ }
60
+ else if (entry.name.endsWith('.md')) {
61
+ const content = fs.readFileSync(path.join(dir, entry.name), 'utf-8');
62
+ const firstLine = content.split('\n').find(l => l.startsWith('# '));
63
+ const title = firstLine ? firstLine.replace(/^#\s+/, '') : entry.name;
64
+ results.push({ path: rel, title });
65
+ }
66
+ }
67
+ return results;
68
+ }
69
+ router.get('/', (_req, res) => {
70
+ res.json({ docs: listDocs(docsDir()) });
71
+ });
72
+ // Use query param for doc path to avoid Express wildcard issues
73
+ router.get('/read', (req, res) => {
74
+ const docPath = req.query.path;
75
+ if (!docPath || docPath.includes('..')) {
76
+ res.status(400).json({ error: 'Invalid path' });
77
+ return;
78
+ }
79
+ const filePath = path.join(docsDir(), docPath);
80
+ if (!fs.existsSync(filePath)) {
81
+ res.status(404).json({ error: 'Document not found' });
82
+ return;
83
+ }
84
+ const content = fs.readFileSync(filePath, 'utf-8');
85
+ res.json({ path: docPath, content });
86
+ });
87
+ exports.default = router;
@@ -39,12 +39,41 @@ const taskService = __importStar(require("../../services/task"));
39
39
  const userService = __importStar(require("../../services/user"));
40
40
  const workers_1 = require("../../workers");
41
41
  const defaults_1 = require("../../modules/defaults");
42
- const publish_1 = require("../../services/events/publish");
42
+ const publish_1 = require("../../lib/events/publish");
43
+ // ── Shared helpers ──────────────────────────────────────────────────────────
44
+ function validateIds(ids) {
45
+ return Array.isArray(ids) && ids.length > 0;
46
+ }
47
+ async function requireBulkPermission(userId, ids, res) {
48
+ const isSuperAdminUser = await userService.isSuperAdmin(userId);
49
+ if (isSuperAdminUser)
50
+ return true;
51
+ const roles = await escalationService.getEscalationRoles(ids);
52
+ for (const role of roles) {
53
+ const canManage = await userService.isGroupAdmin(userId, role);
54
+ if (!canManage) {
55
+ res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
56
+ return false;
57
+ }
58
+ }
59
+ return true;
60
+ }
61
+ function publishBulkClaimEvents(ids, assignedTo) {
62
+ for (const id of ids) {
63
+ (0, publish_1.publishEscalationEvent)({
64
+ type: 'escalation.claimed',
65
+ source: 'api',
66
+ workflowId: '',
67
+ workflowName: '',
68
+ taskQueue: '',
69
+ escalationId: id,
70
+ status: 'claimed',
71
+ data: { assigned_to: assignedTo, bulk: true },
72
+ });
73
+ }
74
+ }
75
+ // ── Routes ──────────────────────────────────────────────────────────────────
43
76
  function registerBulkRoutes(router) {
44
- /**
45
- * POST /api/escalations/release-expired
46
- * Optional cleanup of stale assignment data.
47
- */
48
77
  router.post('/release-expired', async (_req, res) => {
49
78
  try {
50
79
  const released = await escalationService.releaseExpiredClaims();
@@ -54,38 +83,15 @@ function registerBulkRoutes(router) {
54
83
  res.status(500).json({ error: err.message });
55
84
  }
56
85
  });
57
- /**
58
- * PATCH /api/escalations/priority
59
- * Bulk update priority for selected escalations.
60
- * Body: { ids: string[], priority: 1|2|3|4 }
61
- * Requires admin/superadmin permission for the escalation roles.
62
- */
63
86
  router.patch('/priority', async (req, res) => {
64
87
  try {
65
- const userId = req.auth.userId;
66
88
  const { ids, priority } = req.body || {};
67
- if (!Array.isArray(ids) || ids.length === 0) {
68
- res.status(400).json({ error: 'ids must be a non-empty array' });
69
- return;
70
- }
71
- if (![1, 2, 3, 4].includes(priority)) {
72
- res.status(400).json({ error: 'priority must be 1, 2, 3, or 4' });
89
+ if (!validateIds(ids))
90
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
91
+ if (![1, 2, 3, 4].includes(priority))
92
+ return res.status(400).json({ error: 'priority must be 1, 2, 3, or 4' });
93
+ if (!await requireBulkPermission(req.auth.userId, ids, res))
73
94
  return;
74
- }
75
- // Permission check: superadmin can update any; admin only for their roles
76
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
77
- if (!isSuperAdminUser) {
78
- const roles = await escalationService.getEscalationRoles(ids);
79
- for (const role of roles) {
80
- const canManage = await userService.isGroupAdmin(userId, role);
81
- if (!canManage) {
82
- res.status(403).json({
83
- error: `Insufficient permissions for role "${role}"`,
84
- });
85
- return;
86
- }
87
- }
88
- }
89
95
  const updated = await escalationService.updateEscalationsPriority(ids, priority);
90
96
  res.json({ updated });
91
97
  }
@@ -93,138 +99,62 @@ function registerBulkRoutes(router) {
93
99
  res.status(500).json({ error: err.message });
94
100
  }
95
101
  });
96
- /**
97
- * POST /api/escalations/bulk-claim
98
- * Bulk claim selected escalations for the authenticated user.
99
- * Body: { ids: string[], durationMinutes?: number }
100
- */
101
102
  router.post('/bulk-claim', async (req, res) => {
102
103
  try {
103
104
  const userId = req.auth.userId;
104
105
  const { ids, durationMinutes } = req.body || {};
105
- if (!Array.isArray(ids) || ids.length === 0) {
106
- res.status(400).json({ error: 'ids must be a non-empty array' });
106
+ if (!validateIds(ids))
107
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
108
+ if (!await requireBulkPermission(userId, ids, res))
107
109
  return;
108
- }
109
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
110
- if (!isSuperAdminUser) {
111
- const roles = await escalationService.getEscalationRoles(ids);
112
- for (const role of roles) {
113
- const canManage = await userService.isGroupAdmin(userId, role);
114
- if (!canManage) {
115
- res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
116
- return;
117
- }
118
- }
119
- }
120
110
  const result = await escalationService.bulkClaimEscalations(ids, userId, durationMinutes ?? 30);
121
111
  res.json(result);
122
- if (result.claimed > 0) {
123
- for (const id of ids) {
124
- (0, publish_1.publishEscalationEvent)({
125
- type: 'escalation.claimed',
126
- source: 'api',
127
- workflowId: '',
128
- workflowName: '',
129
- taskQueue: '',
130
- escalationId: id,
131
- status: 'claimed',
132
- data: { assigned_to: userId, bulk: true },
133
- });
134
- }
135
- }
112
+ if (result.claimed > 0)
113
+ publishBulkClaimEvents(ids, userId);
136
114
  }
137
115
  catch (err) {
138
116
  res.status(500).json({ error: err.message });
139
117
  }
140
118
  });
141
- /**
142
- * POST /api/escalations/bulk-assign
143
- * Bulk assign selected escalations to a specific user.
144
- * Body: { ids: string[], targetUserId: string, durationMinutes?: number }
145
- * Superadmin: can assign anyone. Admin: target must hold escalation role.
146
- */
147
119
  router.post('/bulk-assign', async (req, res) => {
148
120
  try {
149
121
  const userId = req.auth.userId;
150
122
  const { ids, targetUserId, durationMinutes } = req.body || {};
151
- if (!Array.isArray(ids) || ids.length === 0) {
152
- res.status(400).json({ error: 'ids must be a non-empty array' });
123
+ if (!validateIds(ids))
124
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
125
+ if (!targetUserId || typeof targetUserId !== 'string')
126
+ return res.status(400).json({ error: 'targetUserId is required' });
127
+ if (!await requireBulkPermission(userId, ids, res))
153
128
  return;
154
- }
155
- if (!targetUserId || typeof targetUserId !== 'string') {
156
- res.status(400).json({ error: 'targetUserId is required' });
157
- return;
158
- }
129
+ // Non-superadmin: target user must hold each escalation's role
159
130
  const isSuperAdminUser = await userService.isSuperAdmin(userId);
160
- const roles = await escalationService.getEscalationRoles(ids);
161
131
  if (!isSuperAdminUser) {
162
- // Caller must be group admin for each escalation's role
163
- for (const role of roles) {
164
- const canManage = await userService.isGroupAdmin(userId, role);
165
- if (!canManage) {
166
- res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
167
- return;
168
- }
169
- }
170
- // Target user must hold each escalation's role
132
+ const roles = await escalationService.getEscalationRoles(ids);
171
133
  for (const role of roles) {
172
134
  const targetHasRole = await userService.hasRole(targetUserId, role);
173
135
  if (!targetHasRole) {
174
- res.status(400).json({ error: `Target user does not hold the "${role}" role` });
175
- return;
136
+ return res.status(400).json({ error: `Target user does not hold the "${role}" role` });
176
137
  }
177
138
  }
178
139
  }
179
140
  const result = await escalationService.bulkAssignEscalations(ids, targetUserId, durationMinutes ?? 30);
180
141
  res.json(result);
181
- if (result.assigned > 0) {
182
- for (const id of ids) {
183
- (0, publish_1.publishEscalationEvent)({
184
- type: 'escalation.claimed',
185
- source: 'api',
186
- workflowId: '',
187
- workflowName: '',
188
- taskQueue: '',
189
- escalationId: id,
190
- status: 'claimed',
191
- data: { assigned_to: targetUserId, bulk: true },
192
- });
193
- }
194
- }
142
+ if (result.assigned > 0)
143
+ publishBulkClaimEvents(ids, targetUserId);
195
144
  }
196
145
  catch (err) {
197
146
  res.status(500).json({ error: err.message });
198
147
  }
199
148
  });
200
- /**
201
- * PATCH /api/escalations/bulk-escalate
202
- * Bulk reassign selected escalations to a different role.
203
- * Body: { ids: string[], targetRole: string }
204
- */
205
149
  router.patch('/bulk-escalate', async (req, res) => {
206
150
  try {
207
- const userId = req.auth.userId;
208
151
  const { ids, targetRole } = req.body || {};
209
- if (!Array.isArray(ids) || ids.length === 0) {
210
- res.status(400).json({ error: 'ids must be a non-empty array' });
152
+ if (!validateIds(ids))
153
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
154
+ if (!targetRole || typeof targetRole !== 'string')
155
+ return res.status(400).json({ error: 'targetRole is required' });
156
+ if (!await requireBulkPermission(req.auth.userId, ids, res))
211
157
  return;
212
- }
213
- if (!targetRole || typeof targetRole !== 'string') {
214
- res.status(400).json({ error: 'targetRole is required' });
215
- return;
216
- }
217
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
218
- if (!isSuperAdminUser) {
219
- const roles = await escalationService.getEscalationRoles(ids);
220
- for (const role of roles) {
221
- const canManage = await userService.isGroupAdmin(userId, role);
222
- if (!canManage) {
223
- res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
224
- return;
225
- }
226
- }
227
- }
228
158
  const updated = await escalationService.bulkEscalateToRole(ids, targetRole);
229
159
  res.json({ updated });
230
160
  }
@@ -232,87 +162,18 @@ function registerBulkRoutes(router) {
232
162
  res.status(500).json({ error: err.message });
233
163
  }
234
164
  });
235
- /**
236
- * POST /api/escalations/bulk-triage
237
- * Bulk resolve selected escalations and start AI triage workflows.
238
- * Body: { ids: string[], hint?: string }
239
- */
240
165
  router.post('/bulk-triage', async (req, res) => {
241
166
  try {
242
- const userId = req.auth.userId;
243
167
  const { ids, hint } = req.body || {};
244
- if (!Array.isArray(ids) || ids.length === 0) {
245
- res.status(400).json({ error: 'ids must be a non-empty array' });
168
+ if (!validateIds(ids))
169
+ return res.status(400).json({ error: 'ids must be a non-empty array' });
170
+ if (!await requireBulkPermission(req.auth.userId, ids, res))
246
171
  return;
247
- }
248
- const isSuperAdminUser = await userService.isSuperAdmin(userId);
249
- if (!isSuperAdminUser) {
250
- const roles = await escalationService.getEscalationRoles(ids);
251
- for (const role of roles) {
252
- const canManage = await userService.isGroupAdmin(userId, role);
253
- if (!canManage) {
254
- res.status(403).json({ error: `Insufficient permissions for role "${role}"` });
255
- return;
256
- }
257
- }
258
- }
259
172
  const resolved = await escalationService.bulkResolveForTriage(ids, hint);
260
173
  const client = (0, workers_1.createClient)();
261
174
  const workflowIds = [];
262
175
  for (const escalation of resolved) {
263
- let escalationPayload = {};
264
- if (escalation.escalation_payload) {
265
- try {
266
- escalationPayload = JSON.parse(escalation.escalation_payload);
267
- }
268
- catch { }
269
- }
270
- let envelope = {};
271
- if (escalation.envelope) {
272
- try {
273
- envelope = JSON.parse(escalation.envelope);
274
- }
275
- catch { }
276
- }
277
- const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
278
- const triageEnvelope = {
279
- data: {
280
- escalationId: escalation.id,
281
- originId: escalation.origin_id ?? undefined,
282
- originalWorkflowType: escalation.workflow_type,
283
- originalTaskQueue: escalation.task_queue,
284
- originalTaskId: escalation.task_id,
285
- escalationPayload,
286
- resolverPayload: {
287
- _lt: { needsTriage: true, ...(hint ? { hint } : {}) },
288
- },
289
- },
290
- metadata: envelope.metadata || {},
291
- lt: { ...(envelope.lt || {}), userId: req.auth?.userId },
292
- };
293
- const routing = escalation.task_id
294
- ? (await taskService.getTask(escalation.task_id))?.metadata
295
- : null;
296
- await taskService.createTask({
297
- workflow_id: triageWorkflowId,
298
- workflow_type: 'mcpTriage',
299
- lt_type: 'mcpTriage',
300
- task_queue: 'long-tail-system',
301
- signal_id: `lt-triage-${triageWorkflowId}`,
302
- parent_workflow_id: routing?.parentWorkflowId || triageWorkflowId,
303
- origin_id: escalation.origin_id || triageWorkflowId,
304
- parent_id: escalation.parent_id ?? undefined,
305
- envelope: JSON.stringify(triageEnvelope),
306
- metadata: routing || undefined,
307
- });
308
- await client.workflow.start({
309
- workflowName: 'mcpTriage',
310
- args: [triageEnvelope],
311
- taskQueue: 'long-tail-system',
312
- workflowId: triageWorkflowId,
313
- expire: defaults_1.JOB_EXPIRE_SECS,
314
- entity: 'mcpTriage',
315
- });
176
+ const triageWorkflowId = await startTriageWorkflow(escalation, hint, req.auth?.userId, client);
316
177
  workflowIds.push(triageWorkflowId);
317
178
  }
318
179
  res.json({ triaged: resolved.length, workflows: workflowIds });
@@ -322,3 +183,60 @@ function registerBulkRoutes(router) {
322
183
  }
323
184
  });
324
185
  }
186
+ // ── Triage workflow launcher ────────────────────────────────────────────────
187
+ async function startTriageWorkflow(escalation, hint, userId, client) {
188
+ let escalationPayload = {};
189
+ if (escalation.escalation_payload) {
190
+ try {
191
+ escalationPayload = JSON.parse(escalation.escalation_payload);
192
+ }
193
+ catch { }
194
+ }
195
+ let envelope = {};
196
+ if (escalation.envelope) {
197
+ try {
198
+ envelope = JSON.parse(escalation.envelope);
199
+ }
200
+ catch { }
201
+ }
202
+ const triageWorkflowId = `triage-${escalation.id}-${Date.now()}`;
203
+ const triageEnvelope = {
204
+ data: {
205
+ escalationId: escalation.id,
206
+ originId: escalation.origin_id ?? undefined,
207
+ originalWorkflowType: escalation.workflow_type,
208
+ originalTaskQueue: escalation.task_queue,
209
+ originalTaskId: escalation.task_id,
210
+ escalationPayload,
211
+ resolverPayload: {
212
+ _lt: { needsTriage: true, ...(hint ? { hint } : {}) },
213
+ },
214
+ },
215
+ metadata: envelope.metadata || {},
216
+ lt: { ...(envelope.lt || {}), userId },
217
+ };
218
+ const routing = escalation.task_id
219
+ ? (await taskService.getTask(escalation.task_id))?.metadata
220
+ : null;
221
+ await taskService.createTask({
222
+ workflow_id: triageWorkflowId,
223
+ workflow_type: 'mcpTriage',
224
+ lt_type: 'mcpTriage',
225
+ task_queue: 'long-tail-system',
226
+ signal_id: `lt-triage-${triageWorkflowId}`,
227
+ parent_workflow_id: routing?.parentWorkflowId || triageWorkflowId,
228
+ origin_id: escalation.origin_id || triageWorkflowId,
229
+ parent_id: escalation.parent_id ?? undefined,
230
+ envelope: JSON.stringify(triageEnvelope),
231
+ metadata: routing || undefined,
232
+ });
233
+ await client.workflow.start({
234
+ workflowName: 'mcpTriage',
235
+ args: [triageEnvelope],
236
+ taskQueue: 'long-tail-system',
237
+ workflowId: triageWorkflowId,
238
+ expire: defaults_1.JOB_EXPIRE_SECS,
239
+ entity: 'mcpTriage',
240
+ });
241
+ return triageWorkflowId;
242
+ }
@@ -37,7 +37,7 @@ exports.registerResolveRoutes = registerResolveRoutes;
37
37
  const escalationService = __importStar(require("../../services/escalation"));
38
38
  const taskService = __importStar(require("../../services/task"));
39
39
  const escalation_strategy_1 = require("../../services/escalation-strategy");
40
- const publish_1 = require("../../services/events/publish");
40
+ const publish_1 = require("../../lib/events/publish");
41
41
  const ephemeral_1 = require("../../services/iam/ephemeral");
42
42
  const deployer_1 = require("../../services/yaml-workflow/deployer");
43
43
  const workers_1 = require("../../workers");
@@ -37,7 +37,7 @@ exports.registerSingleRoutes = registerSingleRoutes;
37
37
  const escalationService = __importStar(require("../../services/escalation"));
38
38
  const userService = __importStar(require("../../services/user"));
39
39
  const roleService = __importStar(require("../../services/role"));
40
- const publish_1 = require("../../services/events/publish");
40
+ const publish_1 = require("../../lib/events/publish");
41
41
  function registerSingleRoutes(router) {
42
42
  /**
43
43
  * PATCH /api/escalations/:id/escalate
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const express_1 = require("express");
7
7
  const path_1 = __importDefault(require("path"));
8
- const storage_1 = require("../services/storage");
8
+ const storage_1 = require("../lib/storage");
9
9
  const router = (0, express_1.Router)();
10
10
  const MIME_TYPES = {
11
11
  '.png': 'image/png',
@@ -25,6 +25,7 @@ const namespaces_1 = __importDefault(require("./namespaces"));
25
25
  const files_1 = __importDefault(require("./files"));
26
26
  const controlplane_1 = __importDefault(require("./controlplane"));
27
27
  const bot_accounts_1 = __importDefault(require("./bot-accounts"));
28
+ const docs_1 = __importDefault(require("./docs"));
28
29
  const router = (0, express_1.Router)();
29
30
  // Public routes (no auth required — they handle their own auth)
30
31
  router.use('/auth', auth_2.default);
@@ -49,4 +50,5 @@ router.use('/mcp-runs', mcp_runs_1.default);
49
50
  router.use('/namespaces', namespaces_1.default);
50
51
  router.use('/controlplane', controlplane_1.default);
51
52
  router.use('/bot-accounts', bot_accounts_1.default);
53
+ router.use('/docs', docs_1.default);
52
54
  exports.default = router;