@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
@@ -1,172 +1,14 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractWorkflowInputs = void 0;
36
4
  exports.findCompiledWorkflows = findCompiledWorkflows;
37
5
  exports.evaluateWorkflowMatch = evaluateWorkflowMatch;
38
- exports.extractWorkflowInputs = extractWorkflowInputs;
39
- const llm_1 = require("../../../../services/llm");
40
- const defaults_1 = require("../../../../modules/defaults");
41
- const logger_1 = require("../../../../services/logger");
42
- const yamlDb = __importStar(require("../../../../services/yaml-workflow/db"));
43
- const prompts_1 = require("../prompts");
6
+ const discovery_1 = require("../../shared/discovery");
7
+ Object.defineProperty(exports, "extractWorkflowInputs", { enumerable: true, get: function () { return discovery_1.extractWorkflowInputs; } });
44
8
  const caches_1 = require("./caches");
45
- /**
46
- * Phase 1: Ranked discovery of compiled YAML workflows.
47
- *
48
- * Uses PostgreSQL full-text search (tsvector) + tag overlap for
49
- * multi-signal ranked matching. Returns candidates for the LLM judge.
50
- */
51
9
  async function findCompiledWorkflows(prompt) {
52
- // Extract keywords for tag-overlap signal
53
- const keywords = prompt
54
- .toLowerCase()
55
- .replace(/[^a-z0-9\s-]/g, ' ')
56
- .split(/\s+/)
57
- .filter((w) => w.length > 2 && !defaults_1.STOP_WORDS.has(w));
58
- // Ranked discovery: FTS + tag overlap
59
- logger_1.loggerRegistry.debug(`[mcpQuery:findCompiledWorkflows] keywords: [${keywords.join(',')}]`);
60
- const workflows = await yamlDb.discoverWorkflows(prompt, keywords, undefined, 5);
61
- logger_1.loggerRegistry.info(`[mcpQuery:findCompiledWorkflows] ${workflows.length} candidate(s) found`);
62
- if (workflows.length === 0) {
63
- return { inventory: '', toolIds: [], candidates: [] };
64
- }
65
- const toolIds = [];
66
- const inventoryLines = [];
67
- const candidates = [];
68
- for (const wf of workflows) {
69
- const qualifiedName = `yaml__${wf.name.replace(/[^a-zA-Z0-9]/g, '_')}`;
70
- caches_1.yamlWorkflowMap.set(qualifiedName, wf.name);
71
- caches_1.toolDefCache.set(qualifiedName, {
72
- type: 'function',
73
- function: {
74
- name: qualifiedName,
75
- description: `[COMPILED WORKFLOW] ${wf.description || wf.name} — deterministic, no LLM needed. ` +
76
- `Tags: ${wf.tags.join(', ')}`,
77
- parameters: (wf.input_schema || { type: 'object', properties: {} }),
78
- },
79
- });
80
- toolIds.push(qualifiedName);
81
- const activityCount = wf.activity_manifest.filter((a) => a.type === 'worker').length;
82
- inventoryLines.push(`★ ${wf.name} [compiled, ${activityCount} steps, tags: ${wf.tags.join(', ')}]: ${wf.description || 'deterministic workflow'}`);
83
- candidates.push({
84
- name: wf.name,
85
- description: wf.description,
86
- original_prompt: wf.original_prompt,
87
- category: wf.category,
88
- tags: wf.tags,
89
- input_schema: wf.input_schema,
90
- tool_names: wf.activity_manifest
91
- .filter((a) => a.type === 'worker' && a.mcp_tool_name)
92
- .map((a) => a.mcp_tool_name),
93
- fts_rank: wf.fts_rank || 0,
94
- });
95
- }
96
- return { inventory: inventoryLines.join('\n'), toolIds, candidates };
10
+ return (0, discovery_1.findCompiledWorkflows)(prompt, { yamlWorkflowMap: caches_1.yamlWorkflowMap, toolDefCache: caches_1.toolDefCache }, 'mcpQuery');
97
11
  }
98
- /**
99
- * Phase 2: LLM-as-judge evaluates whether any discovered workflow
100
- * matches the user's intent. One cheap call (mini model, ~200 tokens)
101
- * to potentially skip the entire agentic loop.
102
- */
103
12
  async function evaluateWorkflowMatch(prompt, candidates) {
104
- logger_1.loggerRegistry.debug(`[mcpQuery:evaluateWorkflowMatch] ${candidates.length} candidate(s)`);
105
- if (candidates.length === 0) {
106
- return { matched: false, workflowName: null, confidence: 0 };
107
- }
108
- const candidateText = candidates.map((c, i) => `${i + 1}. **${c.name}** (category: ${c.category || 'general'})\n` +
109
- ` Description: ${c.description || 'N/A'}\n` +
110
- ` Original prompt: "${c.original_prompt || 'N/A'}"\n` +
111
- ` Tools: ${c.tool_names.join(', ')}\n` +
112
- ` Input: ${JSON.stringify(c.input_schema).slice(0, 300)}`).join('\n\n');
113
- try {
114
- const response = await (0, llm_1.callLLM)({
115
- model: defaults_1.LLM_MODEL_SECONDARY,
116
- max_tokens: 200,
117
- temperature: 0,
118
- messages: [
119
- { role: 'system', content: prompts_1.WORKFLOW_MATCH_PROMPT },
120
- { role: 'user', content: `## User Request\n${prompt}\n\n## Candidate Workflows\n${candidateText}` },
121
- ],
122
- });
123
- const raw = response.content || '{}';
124
- const cleaned = raw.replace(/^```(?:json)?\s*/m, '').replace(/\s*```$/m, '').trim();
125
- const result = JSON.parse(cleaned);
126
- if (result.match && result.confidence >= 0.7) {
127
- logger_1.loggerRegistry.info(`[mcpQuery:evaluateWorkflowMatch] MATCHED: ${result.workflow_name} (confidence: ${result.confidence})`);
128
- return { matched: true, workflowName: result.workflow_name, confidence: result.confidence };
129
- }
130
- logger_1.loggerRegistry.info(`[mcpQuery:evaluateWorkflowMatch] no match (confidence: ${result.confidence || 0})`);
131
- return { matched: false, workflowName: null, confidence: result.confidence || 0 };
132
- }
133
- catch (err) {
134
- logger_1.loggerRegistry.warn(`[mcpQuery:evaluateWorkflowMatch] error: ${err.message}`);
135
- return { matched: false, workflowName: null, confidence: 0 };
136
- }
137
- }
138
- /**
139
- * Phase 2b: Extract structured inputs from the user's prompt using the
140
- * matched workflow's input_schema. Acts as a second confirmation gate —
141
- * if the LLM can't map the prompt to the schema, the match is rejected.
142
- */
143
- async function extractWorkflowInputs(prompt, inputSchema, workflowName) {
144
- try {
145
- const response = await (0, llm_1.callLLM)({
146
- model: defaults_1.LLM_MODEL_SECONDARY,
147
- max_tokens: 500,
148
- temperature: 0,
149
- messages: [
150
- { role: 'system', content: prompts_1.EXTRACT_INPUTS_PROMPT },
151
- {
152
- role: 'user',
153
- content: `## User Request\n${prompt}\n\n` +
154
- `## Workflow: ${workflowName}\n` +
155
- `## Input Schema\n${JSON.stringify(inputSchema, null, 2)}`,
156
- },
157
- ],
158
- });
159
- const raw = response.content || '{}';
160
- const cleaned = raw.replace(/^```(?:json)?\s*/m, '').replace(/\s*```$/m, '').trim();
161
- const result = JSON.parse(cleaned);
162
- if (result._extraction_failed) {
163
- return { inputs: null, extracted: false };
164
- }
165
- // Remove the meta field before passing to the workflow
166
- delete result._extraction_failed;
167
- return { inputs: result, extracted: true };
168
- }
169
- catch {
170
- return { inputs: null, extracted: false };
171
- }
13
+ return (0, discovery_1.evaluateWorkflowMatch)(prompt, candidates, 'mcpQuery');
172
14
  }
@@ -1,8 +1,2 @@
1
- import { type LLMResponse } from '../../../../services/llm';
2
- /**
3
- * Call the LLM with messages and optional tool IDs.
4
- *
5
- * Tool IDs are resolved from the module-level toolDefCache so that only
6
- * lightweight string arrays flow through the durable pipe.
7
- */
1
+ import type { LLMResponse } from '../../../../services/llm';
8
2
  export declare function callQueryLLM(messages: any[], toolIds?: string[]): Promise<LLMResponse>;
@@ -1,33 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.callQueryLLM = callQueryLLM;
4
- const llm_1 = require("../../../../services/llm");
5
- const defaults_1 = require("../../../../modules/defaults");
6
- const logger_1 = require("../../../../services/logger");
4
+ const llm_caller_1 = require("../../shared/llm-caller");
7
5
  const caches_1 = require("./caches");
8
- /**
9
- * Call the LLM with messages and optional tool IDs.
10
- *
11
- * Tool IDs are resolved from the module-level toolDefCache so that only
12
- * lightweight string arrays flow through the durable pipe.
13
- */
14
6
  async function callQueryLLM(messages, toolIds) {
15
- // Resolve full tool definitions from module-level cache
16
- let tools;
17
- if (toolIds?.length) {
18
- tools = toolIds
19
- .map((id) => caches_1.toolDefCache.get(id))
20
- .filter((t) => !!t);
21
- }
22
- const t0 = Date.now();
23
- const response = await (0, llm_1.callLLM)({
24
- model: defaults_1.LLM_MODEL_PRIMARY,
25
- messages,
26
- temperature: 0,
27
- ...(tools?.length ? { tools } : {}),
28
- ...(!tools?.length ? { max_tokens: defaults_1.LLM_MAX_TOKENS_DEFAULT } : {}),
29
- });
30
- const usage = response.usage;
31
- logger_1.loggerRegistry.info(`[mcpQuery:callLLM] ${Date.now() - t0}ms | in=${usage?.prompt_tokens} out=${usage?.completion_tokens} total=${usage?.total_tokens}`);
32
- return response;
7
+ return (0, llm_caller_1.callWorkflowLLM)(messages, toolIds, caches_1.toolDefCache, 'mcpQuery');
33
8
  }
@@ -1,5 +1 @@
1
- /**
2
- * Call any tool by its qualified name — handles both YAML workflows
3
- * (yaml__* prefix) and raw MCP tools (server_slug__tool_name).
4
- */
5
1
  export declare function callMcpTool(qualifiedName: string, args: Record<string, any>): Promise<any>;
@@ -1,112 +1,8 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.callMcpTool = callMcpTool;
37
- const context_1 = require("../../../../services/iam/context");
38
- const ephemeral_1 = require("../../../../services/iam/ephemeral");
39
- const mcpClient = __importStar(require("../../../../services/mcp/client"));
40
- const mcpDbService = __importStar(require("../../../../services/mcp/db"));
41
- const yamlDb = __importStar(require("../../../../services/yaml-workflow/db"));
42
- const yamlDeployer = __importStar(require("../../../../services/yaml-workflow/deployer"));
4
+ const tool_executor_1 = require("../../shared/tool-executor");
43
5
  const caches_1 = require("./caches");
44
- /**
45
- * Call any tool by its qualified name — handles both YAML workflows
46
- * (yaml__* prefix) and raw MCP tools (server_slug__tool_name).
47
- */
48
6
  async function callMcpTool(qualifiedName, args) {
49
- // Check if this is a compiled YAML workflow
50
- const yamlWorkflowName = caches_1.yamlWorkflowMap.get(qualifiedName);
51
- if (yamlWorkflowName) {
52
- try {
53
- const wf = await yamlDb.getYamlWorkflowByName(yamlWorkflowName);
54
- if (!wf || wf.status !== 'active') {
55
- return { error: `Compiled workflow "${yamlWorkflowName}" is not active` };
56
- }
57
- // Inject _scope from the current ToolContext so YAML workers get IAM
58
- const toolCtx = (0, context_1.getToolContext)();
59
- const scopedArgs = toolCtx?.principal.id
60
- ? {
61
- ...args,
62
- _scope: {
63
- principal: toolCtx.principal,
64
- ...(toolCtx.initiatingPrincipal ? { initiatingPrincipal: toolCtx.initiatingPrincipal } : {}),
65
- scopes: toolCtx.credentials.scopes,
66
- },
67
- }
68
- : args;
69
- const { job_id, result } = await yamlDeployer.invokeYamlWorkflowSync(wf.app_id, wf.graph_topic, scopedArgs, undefined, wf.graph_topic);
70
- return { job_id, workflow: yamlWorkflowName, status: 'completed', result };
71
- }
72
- catch (err) {
73
- return { error: err.message, tool: qualifiedName, args };
74
- }
75
- }
76
- // Exchange ephemeral credential tokens (eph:v1:...) right before the MCP call.
77
- // This is the latest possible moment — the LLM only ever sees opaque tokens.
78
- args = await (0, ephemeral_1.exchangeTokensInArgs)(args);
79
- // Standard MCP tool routing
80
- const serverName = caches_1.toolServerMap.get(qualifiedName);
81
- const separatorIdx = qualifiedName.indexOf('__');
82
- const toolName = separatorIdx >= 0
83
- ? qualifiedName.slice(separatorIdx + 2)
84
- : qualifiedName;
85
- // Build auth context from ToolContext (set by interceptor via IAM service)
86
- const toolCtx = (0, context_1.getToolContext)();
87
- const authContext = toolCtx?.principal.id
88
- ? { userId: toolCtx.principal.id, delegationToken: toolCtx.credentials.delegationToken }
89
- : undefined;
90
- if (serverName) {
91
- try {
92
- return await mcpClient.callServerTool(serverName, toolName, args, authContext);
93
- }
94
- catch (err) {
95
- return { error: err.message, tool: qualifiedName, args };
96
- }
97
- }
98
- // Fallback: try the tool name directly against all connected servers
99
- const { servers } = await mcpDbService.listMcpServers({ limit: 100 });
100
- for (const server of servers) {
101
- const manifest = server.tool_manifest || [];
102
- if (manifest.some((t) => t.name === toolName)) {
103
- try {
104
- return await mcpClient.callServerTool(server.name, toolName, args, authContext);
105
- }
106
- catch (err) {
107
- return { error: err.message, tool: qualifiedName, args };
108
- }
109
- }
110
- }
111
- return { error: `Unknown tool: ${qualifiedName} (no server found)`, tool: qualifiedName };
7
+ return (0, tool_executor_1.callTool)(qualifiedName, args, { toolServerMap: caches_1.toolServerMap, yamlWorkflowMap: caches_1.yamlWorkflowMap });
112
8
  }
@@ -1,12 +1,3 @@
1
- /**
2
- * Single activity that discovers, caches, and returns lightweight tool data.
3
- *
4
- * Full ChatCompletionTool definitions are cached in module-level toolDefCache
5
- * so they never flow through the durable pipe. Only tool IDs (qualified name
6
- * strings) and a compact inventory string are returned.
7
- *
8
- * @param tags - MCP server tags to scope by. Pass undefined to load all servers.
9
- */
10
1
  export declare function loadTools(tags?: string[]): Promise<{
11
2
  toolIds: string[];
12
3
  inventory: string;
@@ -1,93 +1,8 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.loadTools = loadTools;
37
- const mcpDbService = __importStar(require("../../../../services/mcp/db"));
38
- const strategy_advisors_1 = require("../strategy-advisors");
4
+ const tool_loader_1 = require("../../shared/tool-loader");
39
5
  const caches_1 = require("./caches");
40
- /**
41
- * Single activity that discovers, caches, and returns lightweight tool data.
42
- *
43
- * Full ChatCompletionTool definitions are cached in module-level toolDefCache
44
- * so they never flow through the durable pipe. Only tool IDs (qualified name
45
- * strings) and a compact inventory string are returned.
46
- *
47
- * @param tags - MCP server tags to scope by. Pass undefined to load all servers.
48
- */
49
6
  async function loadTools(tags) {
50
- let servers;
51
- if (tags?.length) {
52
- servers = await mcpDbService.findServersByTags(tags, 'any');
53
- }
54
- else {
55
- const result = await mcpDbService.listMcpServers({ limit: 100 });
56
- servers = result.servers;
57
- }
58
- const toolIds = [];
59
- const inventoryLines = [];
60
- const serverInfos = [];
61
- for (const server of servers) {
62
- const manifest = server.tool_manifest || [];
63
- const slug = server.name.replace(/[^a-zA-Z0-9]/g, '_');
64
- const serverTags = server.tags?.length ? server.tags.join(', ') : 'general';
65
- const toolNames = [];
66
- for (const t of manifest) {
67
- const qualifiedName = `${slug}__${t.name}`;
68
- caches_1.toolServerMap.set(qualifiedName, server.name);
69
- caches_1.toolDefCache.set(qualifiedName, {
70
- type: 'function',
71
- function: {
72
- name: qualifiedName,
73
- description: `[${server.name}] ${t.description || ''}`,
74
- parameters: (t.inputSchema || { type: 'object', properties: {} }),
75
- },
76
- });
77
- toolIds.push(qualifiedName);
78
- toolNames.push(t.name);
79
- }
80
- inventoryLines.push(`• ${server.name} [${serverTags}] (${manifest.length} tools): ${toolNames.join(', ')}`);
81
- serverInfos.push({
82
- name: server.name,
83
- description: server.description || null,
84
- tags: server.tags || [],
85
- metadata: server.metadata || null,
86
- toolNames,
87
- toolCount: manifest.length,
88
- slug,
89
- });
90
- }
91
- const strategy = (0, strategy_advisors_1.generateStrategySection)(serverInfos);
92
- return { toolIds, inventory: inventoryLines.join('\n'), strategy };
7
+ return (0, tool_loader_1.loadToolsFromServers)(tags, { toolServerMap: caches_1.toolServerMap, toolDefCache: caches_1.toolDefCache }, { logPrefix: 'mcpQuery' });
93
8
  }
@@ -39,9 +39,10 @@ const defaults_1 = require("../../../modules/defaults");
39
39
  const activities = __importStar(require("./activities"));
40
40
  const interceptorActivities = __importStar(require("../../../services/interceptor/activities"));
41
41
  const prompts_1 = require("./prompts");
42
+ const tool_result_guard_1 = require("../tool-result-guard");
42
43
  const { loadTools, callMcpTool, callQueryLLM, } = hotmesh_1.Durable.workflow.proxyActivities({
43
44
  activities,
44
- retryPolicy: {
45
+ retry: {
45
46
  maximumAttempts: 3,
46
47
  backoffCoefficient: 2,
47
48
  maximumInterval: '10 seconds',
@@ -50,7 +51,7 @@ const { loadTools, callMcpTool, callQueryLLM, } = hotmesh_1.Durable.workflow.pro
50
51
  const { ltEnrichEscalationRouting, } = hotmesh_1.Durable.workflow.proxyActivities({
51
52
  activities: interceptorActivities,
52
53
  taskQueue: 'lt-interceptor',
53
- retryPolicy: { maximumAttempts: 3 },
54
+ retry: { maximumAttempts: 3 },
54
55
  });
55
56
  const MAX_TOOL_ROUNDS = defaults_1.TOOL_ROUNDS_MCP_QUERY;
56
57
  /**
@@ -106,8 +107,30 @@ async function mcpQuery(envelope) {
106
107
  messages.push({ role: 'user', content: triageHints });
107
108
  messages.push({ role: 'assistant', content: 'Understood. I will use these learnings to take a more targeted approach this time.' });
108
109
  }
110
+ // If invoked from the help assistant, inject dashboard context
111
+ const dashContext = envelope.data?.context;
112
+ if (dashContext) {
113
+ const lines = [
114
+ `[Dashboard Context]`,
115
+ `Page: ${dashContext.page || 'unknown'}`,
116
+ dashContext.entities?.workflowId ? `Workflow: ${dashContext.entities.workflowId}` : '',
117
+ dashContext.entities?.workflowStatus ? `Status: ${dashContext.entities.workflowStatus}` : '',
118
+ dashContext.entities?.yamlContent ? `YAML:\n${dashContext.entities.yamlContent}` : '',
119
+ dashContext.entities?.prompt ? `Original query: ${dashContext.entities.prompt}` : '',
120
+ ``,
121
+ `IMPORTANT: This is a help assistant conversation. Always include the actual data, content, and results from tool calls in your response. Do not just confirm an action was taken — show the user what was retrieved, stored, or produced.`,
122
+ `[End Context]`,
123
+ ].filter(Boolean).join('\n');
124
+ messages.push({ role: 'user', content: lines });
125
+ messages.push({ role: 'assistant', content: 'I have the dashboard context. I will always show actual data and results, not just confirmations.' });
126
+ }
109
127
  messages.push({ role: 'user', content: prompt });
110
128
  let toolCallCount = 0;
129
+ // Repeated-error circuit breaker: if the same tool returns the same
130
+ // error twice in a row, the LLM is stuck — break out immediately.
131
+ const MAX_REPEATED_ERRORS = 2;
132
+ let lastErrorKey = '';
133
+ let repeatedErrorCount = 0;
111
134
  // Agentic loop: LLM decides → execute tools → feed back → repeat
112
135
  const BUDGET_WARNING_THRESHOLD = 3;
113
136
  for (let round = 0; round < MAX_TOOL_ROUNDS; round++) {
@@ -129,6 +152,7 @@ async function mcpQuery(envelope) {
129
152
  content: response.content,
130
153
  tool_calls: fnCalls,
131
154
  });
155
+ let roundHadError = false;
132
156
  for (const toolCall of fnCalls) {
133
157
  toolCallCount++;
134
158
  let args = {};
@@ -141,7 +165,7 @@ async function mcpQuery(envelope) {
141
165
  const result = await callMcpTool(toolCall.function.name, args);
142
166
  // Durable waitFor: if the tool returns a signal, pause until human responds
143
167
  if (result?.type === 'waitFor' && result?.signalId) {
144
- const ctx = hotmesh_1.Durable.workflow.getContext();
168
+ const ctx = hotmesh_1.Durable.workflow.workflowInfo();
145
169
  const workflowType = ctx.workflowTopic.replace(`${ctx.taskQueue}-`, '');
146
170
  await ltEnrichEscalationRouting({
147
171
  escalationId: result.escalationId,
@@ -153,7 +177,7 @@ async function mcpQuery(envelope) {
153
177
  },
154
178
  claimForUserId: envelope.lt?.userId,
155
179
  });
156
- const signalData = await hotmesh_1.Durable.workflow.waitFor(result.signalId);
180
+ const signalData = await hotmesh_1.Durable.workflow.condition(result.signalId);
157
181
  messages.push({
158
182
  role: 'tool',
159
183
  tool_call_id: toolCall.id,
@@ -161,11 +185,37 @@ async function mcpQuery(envelope) {
161
185
  });
162
186
  continue;
163
187
  }
188
+ const resultStr = (0, tool_result_guard_1.sanitizeToolResult)(result);
164
189
  messages.push({
165
190
  role: 'tool',
166
191
  tool_call_id: toolCall.id,
167
- content: JSON.stringify(result),
192
+ content: resultStr,
168
193
  });
194
+ // Track repeated errors: same tool + same error = stuck
195
+ const isError = resultStr.includes('MCP error') || resultStr.includes('"error"');
196
+ if (isError) {
197
+ roundHadError = true;
198
+ const errorKey = `${toolCall.function.name}::${resultStr.slice(0, 200)}`;
199
+ if (errorKey === lastErrorKey) {
200
+ repeatedErrorCount++;
201
+ }
202
+ else {
203
+ lastErrorKey = errorKey;
204
+ repeatedErrorCount = 1;
205
+ }
206
+ if (repeatedErrorCount >= MAX_REPEATED_ERRORS) {
207
+ messages.push({
208
+ role: 'user',
209
+ content: `[CIRCUIT BREAKER] The tool "${toolCall.function.name}" has returned the same error ${repeatedErrorCount} times. Stop retrying this tool. Summarize what you accomplished and what failed.`,
210
+ });
211
+ const bailResponse = await callQueryLLM(messages, undefined);
212
+ return buildQueryReturn(bailResponse.content || 'Workflow stopped: repeated tool errors.', toolCallCount, [{ name: 'circuit_breaker', value: toolCall.function.name }]);
213
+ }
214
+ }
215
+ }
216
+ if (!roundHadError) {
217
+ lastErrorKey = '';
218
+ repeatedErrorCount = 0;
169
219
  }
170
220
  }
171
221
  // Exhausted rounds — ask LLM for diagnostic summary
@@ -1,4 +1,3 @@
1
1
  export declare const MCP_QUERY_SYSTEM_PROMPT = "You are a general-purpose AI assistant for Long Tail \u2014 a durable workflow system with MCP tool integration.\n\nYou have access to **MCP tools** from registered servers. Your job is to fulfill the user's request using these tools.\n\n## Tool Selection \u2014 CRITICAL, READ CAREFULLY:\n- A \"Tool Selection Strategy\" section appears before the tool inventory. It tells you EXACTLY which tools to use and which to NEVER use. **Follow it strictly \u2014 violations cause failures.**\n- **Minimize total tool calls.** Before making a call, ask: \"Is there a single tool that does all of this?\" If yes, use it. If you find yourself chaining 3+ calls to accomplish what one composite tool could do, stop and switch.\n- **For multi-item tasks, look for batch tools.** If you need to perform the same operation on many items, check if a tool accepts a list/array input. One batch call is always better than N individual calls.\n\n**Principles for dynamic execution:**\n- **Chain tools logically.** If a task requires multiple steps, chain tool calls in the natural order. Pass outputs from one step as inputs to the next.\n- **Handle sessions and handles.** Some tools return session identifiers (page_id, _handle, session_id). Pass these to ALL subsequent calls that need to operate within that session. Session handles maintain authentication and state \u2014 losing them means starting over. NEVER open a new session when you already have one.\n- **Discover before acting.** When you need to understand structure, content, or available options, use discovery/extraction tools first. Then pass discovered values to subsequent tools. NEVER guess input values.\n- **Iterate when needed.** If you need to perform the same action on multiple items and no batch tool exists, call the tool for each item. The system will detect this pattern when compiling the workflow later.\n- **Use credentials from the prompt.** The user provides credentials in their request. NEVER persist credentials to the filesystem.\n- **Trust tool defaults.** Tools define default values for optional parameters. Only override defaults when the user provides a specific value or you've discovered the correct one via a prior tool call.\n- **When a tool call fails, adapt.** Use discovery tools to learn the correct structure, then retry with discovered values. Don't retry with the same wrong parameters.\n- **Fulfill the complete request.** If the user asks to process N items, process all N items. Don't stop early or summarize partway through.\n- **Budget your tool rounds.** You have a limited number of tool rounds. A budget indicator (e.g., \"[Rounds: 3 remaining]\") may appear in the conversation. When you see 3 or fewer rounds remaining, wrap up: consolidate partial results, write any pending output, and return your final response. Prefer batch/composite tools to conserve rounds.\n\n### 3. Mark for Compilation\nIf you completed a multi-step task that seems reusable, set `compilation_candidate: true` in your response. The execution trace can then be compiled into a deterministic YAML workflow \u2014 turning this dynamic run into a fast, repeatable tool for next time.\n\n## Escalation\n\nEscalate only when truly stuck \u2014 retry with alternatives first.\n\n- **For input you need before continuing** (credentials, approvals, missing data):\n Use escalate_and_wait. Specify a form_schema describing what fields you need. The workflow pauses until the human responds \u2014 no polling needed.\n- **For fire-and-forget notifications** (advisory, FYI):\n Use escalate_to_human.\n- **Escalate to 'engineer' role** \u2014 when you need human judgment or infrastructure help\n- **Escalate to 'mcp' role** \u2014 when you need tool capabilities not in the current inventory\n\nWhen escalating, provide specific context: what you tried, what failed, what you need.\n\n## Credential Tokens\nValues formatted as `eph:v1:<label>:<id>` are opaque credential tokens provided by human operators.\nNEVER modify, decode, split, or log these values. Pass them exactly as received into tool arguments.\nThey are automatically resolved at execution time.\n\n## Response Format\n\nReturn ONLY a JSON object (no markdown fences):\n{\n \"title\": \"Short headline (under 60 chars)\",\n \"summary\": \"1-3 sentence overview of what was accomplished\",\n \"result\": { ... },\n \"compilation_candidate\": false,\n \"tool_calls_made\": 0\n}";
2
- export declare const WORKFLOW_MATCH_PROMPT = "You are a strict workflow matching evaluator. Given a user request and a list of compiled workflows, determine if any workflow is a PRECISE match for the request.\n\nA workflow matches ONLY if:\n1. **Scope alignment**: The workflow does approximately what the user asked \u2014 not significantly more, not significantly less.\n2. **Intent alignment**: The workflow's purpose (description, original prompt) closely matches the user's goal \u2014 not just the same topic or domain.\n3. **Input compatibility**: The user's request provides enough information to populate the workflow's required inputs.\n\nBe CONSERVATIVE. If the user's request is a subset or superset of what the workflow does, it is NOT a match. When in doubt, return match: false \u2014 the system will fall back to a dynamic execution that handles the exact request.\n\nRespond with ONLY a JSON object:\n{\n \"match\": true or false,\n \"workflow_name\": \"name-of-best-match\" or null,\n \"confidence\": 0.0 to 1.0,\n \"reasoning\": \"Brief explanation of why this is or isn't a scope match\"\n}";
3
- export declare const EXTRACT_INPUTS_PROMPT = "You are an input extraction engine. Given a user's natural-language request and a workflow's input schema, extract the structured inputs the workflow needs.\n\nRules:\n- Extract ONLY values explicitly stated or clearly implied in the user's request.\n- Match each extracted value to the correct field in the input schema, paying attention to the field's **description** \u2014 not just its name.\n- Use the field descriptions to understand what each input represents and extract the semantically correct value from the request.\n- If a required field cannot be populated from the request, set \"_extraction_failed\" to true.\n- Do NOT invent, guess, or use default values for fields the user didn't mention.\n- Return ONLY a JSON object whose keys match the input schema's property names.\n- Include \"_extraction_failed\": true if any required field is missing, or \"_extraction_failed\": false if all required fields are satisfied.";
2
+ export { WORKFLOW_MATCH_PROMPT, EXTRACT_INPUTS_PROMPT } from '../shared/prompts';
4
3
  export declare const ROUNDS_EXHAUSTED_DIAGNOSTIC_PROMPT = "You have run out of allowed tool rounds. Summarize:\n(1) what you accomplished,\n(2) what you were unable to complete, and\n(3) what steps remain.\n\nReturn a JSON object with keys:\n- title: short title for the execution\n- summary: brief narrative of what happened\n- result: partial data collected (if any), or null\n- diagnosis: string explaining what went wrong and what remains to be done";
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  // ── MCP Query prompts ───────────────────────────────────────────────────────
3
- // All LLM prompt text for the mcp-query workflow lives here.
4
- // Keep prompts generic — never reference specific tool names or selectors.
3
+ // Query-specific prompts live here. Shared discovery prompts re-exported below.
5
4
  Object.defineProperty(exports, "__esModule", { value: true });
6
5
  exports.ROUNDS_EXHAUSTED_DIAGNOSTIC_PROMPT = exports.EXTRACT_INPUTS_PROMPT = exports.WORKFLOW_MATCH_PROMPT = exports.MCP_QUERY_SYSTEM_PROMPT = void 0;
7
6
  // ── Agentic loop system prompt ──────────────────────────────────────────────
@@ -57,36 +56,10 @@ Return ONLY a JSON object (no markdown fences):
57
56
  "compilation_candidate": false,
58
57
  "tool_calls_made": 0
59
58
  }`;
60
- // ── Workflow matching prompt (Phase 2) ──────────────────────────────────────
61
- exports.WORKFLOW_MATCH_PROMPT = `\
62
- You are a strict workflow matching evaluator. Given a user request and a list of compiled workflows, determine if any workflow is a PRECISE match for the request.
63
-
64
- A workflow matches ONLY if:
65
- 1. **Scope alignment**: The workflow does approximately what the user asked — not significantly more, not significantly less.
66
- 2. **Intent alignment**: The workflow's purpose (description, original prompt) closely matches the user's goal — not just the same topic or domain.
67
- 3. **Input compatibility**: The user's request provides enough information to populate the workflow's required inputs.
68
-
69
- Be CONSERVATIVE. If the user's request is a subset or superset of what the workflow does, it is NOT a match. When in doubt, return match: false — the system will fall back to a dynamic execution that handles the exact request.
70
-
71
- Respond with ONLY a JSON object:
72
- {
73
- "match": true or false,
74
- "workflow_name": "name-of-best-match" or null,
75
- "confidence": 0.0 to 1.0,
76
- "reasoning": "Brief explanation of why this is or isn't a scope match"
77
- }`;
78
- // ── Input extraction prompt (Phase 2b) ──────────────────────────────────────
79
- exports.EXTRACT_INPUTS_PROMPT = `\
80
- You are an input extraction engine. Given a user's natural-language request and a workflow's input schema, extract the structured inputs the workflow needs.
81
-
82
- Rules:
83
- - Extract ONLY values explicitly stated or clearly implied in the user's request.
84
- - Match each extracted value to the correct field in the input schema, paying attention to the field's **description** — not just its name.
85
- - Use the field descriptions to understand what each input represents and extract the semantically correct value from the request.
86
- - If a required field cannot be populated from the request, set "_extraction_failed" to true.
87
- - Do NOT invent, guess, or use default values for fields the user didn't mention.
88
- - Return ONLY a JSON object whose keys match the input schema's property names.
89
- - Include "_extraction_failed": true if any required field is missing, or "_extraction_failed": false if all required fields are satisfied.`;
59
+ // ── Shared discovery prompts (re-exported for backward compatibility) ────────
60
+ var prompts_1 = require("../shared/prompts");
61
+ Object.defineProperty(exports, "WORKFLOW_MATCH_PROMPT", { enumerable: true, get: function () { return prompts_1.WORKFLOW_MATCH_PROMPT; } });
62
+ Object.defineProperty(exports, "EXTRACT_INPUTS_PROMPT", { enumerable: true, get: function () { return prompts_1.EXTRACT_INPUTS_PROMPT; } });
90
63
  // ── Rounds-exhausted diagnostic prompt ──────────────────────────────────────
91
64
  exports.ROUNDS_EXHAUSTED_DIAGNOSTIC_PROMPT = `\
92
65
  You have run out of allowed tool rounds. Summarize: