@hotmeshio/long-tail 0.1.4 → 0.1.6

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 (663) hide show
  1. package/README.md +35 -5
  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 +11 -10
  8. package/build/index.js +13 -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 +4 -7
  12. package/{services → build/lib}/db/schemas/001_schema.sql +3 -0
  13. package/{services → build/lib}/db/schemas/011_system_workflow_configs.sql +7 -0
  14. package/build/lib/db/schemas/015_knowledge.sql +23 -0
  15. package/build/lib/db/schemas/016_streamable_http.sql +7 -0
  16. package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
  17. package/build/{services → lib}/telemetry/honeycomb.js +2 -2
  18. package/build/modules/defaults.d.ts +2 -0
  19. package/build/modules/defaults.js +3 -1
  20. package/build/routes/controlplane.js +1 -1
  21. package/build/routes/dba.js +4 -0
  22. package/build/routes/docs.d.ts +2 -0
  23. package/build/routes/docs.js +105 -0
  24. package/build/routes/escalations/bulk.js +120 -202
  25. package/build/routes/escalations/resolve.js +1 -1
  26. package/build/routes/escalations/single.js +1 -1
  27. package/build/routes/files.js +1 -1
  28. package/build/routes/index.js +2 -0
  29. package/build/routes/insight.js +65 -1
  30. package/build/routes/mcp.js +26 -3
  31. package/build/routes/oauth.js +1 -1
  32. package/build/routes/settings.js +4 -4
  33. package/build/routes/workflows/discovery.js +3 -3
  34. package/build/routes/workflows/invocation.js +1 -1
  35. package/build/routes/yaml-workflows/cron.d.ts +2 -0
  36. package/build/routes/yaml-workflows/cron.js +117 -0
  37. package/build/routes/yaml-workflows/crud.js +39 -1
  38. package/build/routes/yaml-workflows/deployment.js +9 -9
  39. package/build/routes/yaml-workflows/index.js +4 -1
  40. package/build/services/auth/bot-api-key.js +1 -1
  41. package/build/services/auth/index.d.ts +4 -0
  42. package/build/services/auth/index.js +17 -0
  43. package/build/services/auth/service-token.js +1 -1
  44. package/build/services/config/provider.js +1 -1
  45. package/build/services/config/read.js +1 -1
  46. package/build/services/config/write.js +1 -1
  47. package/build/services/controlplane/index.js +3 -4
  48. package/build/services/controlplane/quorum-bridge.js +2 -2
  49. package/build/services/cron/index.d.ts +17 -0
  50. package/build/services/cron/index.js +98 -6
  51. package/build/services/dba.d.ts +4 -0
  52. package/build/services/dba.js +3 -6
  53. package/build/services/escalation/bulk.js +1 -1
  54. package/build/services/escalation/crud.js +1 -1
  55. package/build/services/escalation/queries.js +1 -1
  56. package/build/services/export/client.js +2 -5
  57. package/build/services/export/index.js +14 -2
  58. package/build/services/hotmesh-utils.js +1 -1
  59. package/build/services/iam/bots.js +6 -12
  60. package/build/services/iam/context.d.ts +1 -1
  61. package/build/services/iam/context.js +5 -5
  62. package/build/services/iam/credentials.js +1 -1
  63. package/build/services/iam/ephemeral.js +8 -15
  64. package/build/services/iam/principal.js +3 -10
  65. package/build/services/iam/resolve.js +1 -1
  66. package/build/services/iam/sql.d.ts +10 -0
  67. package/build/services/iam/sql.js +42 -0
  68. package/build/services/insight/index.d.ts +12 -0
  69. package/build/services/insight/index.js +34 -6
  70. package/build/services/interceptor/activities/escalation.js +1 -1
  71. package/build/services/interceptor/activities/task.js +9 -6
  72. package/build/services/interceptor/activities/workflow.js +4 -5
  73. package/build/services/interceptor/activity-interceptor.d.ts +1 -1
  74. package/build/services/interceptor/activity-interceptor.js +5 -5
  75. package/build/services/interceptor/completion.js +1 -1
  76. package/build/services/interceptor/escalation.js +1 -1
  77. package/build/services/interceptor/index.js +4 -4
  78. package/build/services/interceptor/lifecycle.js +1 -1
  79. package/build/services/maintenance/index.js +4 -5
  80. package/build/services/mcp/adapter.js +1 -16
  81. package/build/services/mcp/client/connection.d.ts +10 -1
  82. package/build/services/mcp/client/connection.js +51 -3
  83. package/build/services/mcp/client/tools.js +1 -1
  84. package/build/services/mcp/db-server/index.js +1 -1
  85. package/build/services/mcp/db-server/schemas.d.ts +2 -2
  86. package/build/services/mcp/db-server/tools.js +17 -4
  87. package/build/services/mcp/db.d.ts +1 -1
  88. package/build/services/mcp/db.js +11 -1
  89. package/build/services/mcp/playwright-server/index.js +1 -1
  90. package/build/services/mcp/playwright-server/lifecycle.js +1 -1
  91. package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
  92. package/build/services/mcp/playwright-server/tools.js +1 -1
  93. package/build/services/mcp/server.js +1 -1
  94. package/build/services/mcp/sql.d.ts +7 -1
  95. package/build/services/mcp/sql.js +36 -3
  96. package/build/services/mcp/types.d.ts +3 -1
  97. package/build/services/mcp/workflow-compiler-server.js +1 -1
  98. package/build/services/mcp/workflow-server.js +1 -1
  99. package/build/services/mcp-runs/execution-builder.js +8 -6
  100. package/build/services/mcp-runs/queries.js +2 -2
  101. package/build/services/mcp-runs/sql.d.ts +4 -1
  102. package/build/services/mcp-runs/sql.js +23 -2
  103. package/build/services/namespace/index.js +1 -1
  104. package/build/services/oauth/db.js +9 -37
  105. package/build/services/oauth/index.js +1 -1
  106. package/build/services/oauth/providers/registry.js +1 -1
  107. package/build/services/oauth/sql.d.ts +7 -0
  108. package/build/services/oauth/sql.js +32 -0
  109. package/build/services/orchestrator/index.js +3 -3
  110. package/build/services/role/index.js +1 -1
  111. package/build/services/task/crud.js +1 -1
  112. package/build/services/task/process.js +1 -1
  113. package/build/services/task/resolve.js +1 -1
  114. package/build/services/user/auth.js +1 -1
  115. package/build/services/user/crud.js +1 -1
  116. package/build/services/user/rbac.js +1 -1
  117. package/build/services/user/roles.js +1 -1
  118. package/build/services/user/sql.d.ts +2 -0
  119. package/build/services/user/sql.js +3 -1
  120. package/build/services/yaml-workflow/db-utils.js +1 -1
  121. package/build/services/yaml-workflow/db.d.ts +3 -0
  122. package/build/services/yaml-workflow/db.js +25 -1
  123. package/build/services/yaml-workflow/deployer-helpers.js +1 -1
  124. package/build/services/yaml-workflow/deployer.js +4 -4
  125. package/build/services/yaml-workflow/generator.js +1 -1
  126. package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
  127. package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
  128. package/build/services/yaml-workflow/input-analyzer.js +16 -3
  129. package/build/services/yaml-workflow/invoke.d.ts +19 -0
  130. package/build/services/yaml-workflow/invoke.js +80 -0
  131. package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
  132. package/build/services/yaml-workflow/pipeline/build/dag.js +11 -6
  133. package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +1 -1
  134. package/build/services/yaml-workflow/pipeline/build/wiring.js +89 -2
  135. package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
  136. package/build/services/yaml-workflow/pipeline/extract.js +5 -3
  137. package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
  138. package/build/services/yaml-workflow/pipeline/index.js +22 -0
  139. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  140. package/build/services/yaml-workflow/pipeline/prompts.js +44 -1
  141. package/build/services/yaml-workflow/pipeline/validate.js +2 -2
  142. package/build/services/yaml-workflow/sql.d.ts +3 -0
  143. package/build/services/yaml-workflow/sql.js +16 -1
  144. package/build/services/yaml-workflow/types.d.ts +13 -1
  145. package/build/services/yaml-workflow/workers/callbacks.js +10 -2
  146. package/build/services/yaml-workflow/workers/events.js +2 -2
  147. package/build/services/yaml-workflow/workers/register.js +37 -9
  148. package/build/start/adapters.js +7 -7
  149. package/build/start/index.js +4 -4
  150. package/build/start/server.js +1 -1
  151. package/build/start/workers.d.ts +1 -2
  152. package/build/start/workers.js +8 -7
  153. package/build/system/activities/claude-code.js +1 -1
  154. package/build/system/activities/file-storage.js +1 -1
  155. package/build/system/activities/knowledge.d.ts +58 -0
  156. package/build/system/activities/knowledge.js +128 -0
  157. package/build/system/activities/sql.d.ts +9 -0
  158. package/build/system/activities/sql.js +41 -0
  159. package/build/system/activities/triage/context.js +1 -1
  160. package/build/system/activities/triage/discovery.d.ts +2 -14
  161. package/build/system/activities/triage/discovery.js +5 -161
  162. package/build/system/activities/triage/llm.d.ts +1 -8
  163. package/build/system/activities/triage/llm.js +2 -28
  164. package/build/system/activities/triage/tools.d.ts +1 -17
  165. package/build/system/activities/triage/tools.js +8 -167
  166. package/build/system/index.js +11 -4
  167. package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
  168. package/build/system/mcp-servers/admin/escalations.js +149 -0
  169. package/build/system/mcp-servers/admin/index.d.ts +31 -0
  170. package/build/system/mcp-servers/admin/index.js +80 -0
  171. package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
  172. package/build/system/mcp-servers/admin/maintenance.js +58 -0
  173. package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
  174. package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
  175. package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
  176. package/build/system/mcp-servers/admin/schemas.js +177 -0
  177. package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
  178. package/build/system/mcp-servers/admin/tasks.js +112 -0
  179. package/build/system/mcp-servers/admin/users.d.ts +5 -0
  180. package/build/system/mcp-servers/admin/users.js +167 -0
  181. package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
  182. package/build/system/mcp-servers/admin/workflow-config.js +118 -0
  183. package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
  184. package/build/system/mcp-servers/admin/workflows.js +138 -0
  185. package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
  186. package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
  187. package/build/system/mcp-servers/claude-code.js +1 -1
  188. package/build/system/mcp-servers/db-query/index.js +1 -1
  189. package/build/system/mcp-servers/db-query/schemas.d.ts +2 -2
  190. package/build/system/mcp-servers/db-query/tools.js +17 -4
  191. package/build/system/mcp-servers/docs.d.ts +5 -0
  192. package/build/system/mcp-servers/docs.js +147 -0
  193. package/build/system/mcp-servers/file-storage.js +1 -1
  194. package/build/system/mcp-servers/http-fetch.js +1 -1
  195. package/build/system/mcp-servers/human-queue.js +1 -1
  196. package/build/system/mcp-servers/knowledge.d.ts +4 -0
  197. package/build/system/mcp-servers/knowledge.js +137 -0
  198. package/build/system/mcp-servers/oauth.js +1 -1
  199. package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
  200. package/build/system/mcp-servers/playwright/index.js +1 -1
  201. package/build/system/mcp-servers/playwright/schemas.d.ts +21 -10
  202. package/build/system/mcp-servers/playwright/schemas.js +3 -0
  203. package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
  204. package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
  205. package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
  206. package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
  207. package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
  208. package/build/system/mcp-servers/playwright-cli/index.js +1 -1
  209. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +10 -10
  210. package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
  211. package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
  212. package/build/system/mcp-servers/playwright-cli/tools-capture.js +9 -3
  213. package/build/system/mcp-servers/translation.d.ts +14 -0
  214. package/build/system/mcp-servers/translation.js +130 -0
  215. package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
  216. package/build/system/mcp-servers/vision-prompts.js +9 -0
  217. package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
  218. package/build/system/mcp-servers/vision.js +258 -0
  219. package/build/system/mcp-servers/workflow-compiler.js +1 -1
  220. package/build/system/mcp-servers/workflow.js +1 -1
  221. package/build/system/seed/index.js +13 -2
  222. package/build/system/seed/server-definitions.d.ts +1961 -322
  223. package/build/system/seed/server-definitions.js +68 -34
  224. package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
  225. package/build/system/seed/tool-manifests-admin.js +45 -0
  226. package/build/system/seed/tool-manifests-browser.d.ts +1 -1
  227. package/build/system/seed/tool-manifests-browser.js +3 -3
  228. package/build/system/seed/tool-manifests-data.d.ts +62 -21
  229. package/build/system/seed/tool-manifests-data.js +55 -17
  230. package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
  231. package/build/system/seed/tool-manifests-knowledge.js +94 -0
  232. package/build/system/seed/tool-manifests-workflows.d.ts +7 -0
  233. package/build/system/seed/tool-manifests-workflows.js +10 -3
  234. package/build/system/workflows/mcp-deterministic/index.js +1 -1
  235. package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
  236. package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
  237. package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
  238. package/build/system/workflows/mcp-query/activities/llm.js +2 -27
  239. package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
  240. package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
  241. package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
  242. package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
  243. package/build/system/workflows/mcp-query/index.js +55 -5
  244. package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
  245. package/build/system/workflows/mcp-query/prompts.js +5 -32
  246. package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
  247. package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
  248. package/build/system/workflows/mcp-query/types.d.ts +2 -10
  249. package/build/system/workflows/mcp-query/types.js +0 -1
  250. package/build/system/workflows/mcp-query-router/index.js +1 -1
  251. package/build/system/workflows/mcp-triage/index.d.ts +2 -2
  252. package/build/system/workflows/mcp-triage/index.js +39 -7
  253. package/build/system/workflows/mcp-triage/prompts.js +7 -14
  254. package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
  255. package/build/system/workflows/mcp-triage-router/index.js +1 -1
  256. package/build/system/workflows/mcp-workflow-builder/activities/caches.d.ts +5 -0
  257. package/build/system/workflows/mcp-workflow-builder/activities/caches.js +8 -0
  258. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +2 -0
  259. package/build/system/workflows/mcp-workflow-builder/activities/index.js +7 -0
  260. package/build/system/workflows/mcp-workflow-builder/activities/llm.d.ts +2 -0
  261. package/build/system/workflows/mcp-workflow-builder/activities/llm.js +25 -0
  262. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +5 -0
  263. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +8 -0
  264. package/build/system/workflows/mcp-workflow-builder/index.d.ts +16 -0
  265. package/build/system/workflows/mcp-workflow-builder/index.js +229 -0
  266. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +8 -0
  267. package/build/system/workflows/mcp-workflow-builder/prompts.js +247 -0
  268. package/build/system/workflows/shared/discovery.d.ts +35 -0
  269. package/build/system/workflows/shared/discovery.js +175 -0
  270. package/build/system/workflows/shared/index.d.ts +7 -0
  271. package/build/system/workflows/shared/index.js +18 -0
  272. package/build/system/workflows/shared/llm-caller.d.ts +8 -0
  273. package/build/system/workflows/shared/llm-caller.js +31 -0
  274. package/build/system/workflows/shared/prompts.d.ts +2 -0
  275. package/build/system/workflows/shared/prompts.js +32 -0
  276. package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
  277. package/build/system/workflows/shared/strategy-advisors.js +109 -0
  278. package/build/system/workflows/shared/tool-executor.d.ts +11 -0
  279. package/build/system/workflows/shared/tool-executor.js +111 -0
  280. package/build/system/workflows/shared/tool-loader.d.ts +19 -0
  281. package/build/system/workflows/shared/tool-loader.js +97 -0
  282. package/build/system/workflows/shared/types.d.ts +9 -0
  283. package/build/system/workflows/shared/types.js +2 -0
  284. package/build/system/workflows/tool-result-guard.d.ts +14 -0
  285. package/build/system/workflows/tool-result-guard.js +78 -0
  286. package/build/tsconfig.tsbuildinfo +1 -1
  287. package/build/types/mcp.d.ts +4 -3
  288. package/build/types/user.d.ts +2 -0
  289. package/build/types/yaml-workflow.d.ts +6 -2
  290. package/build/vitest.config.d.ts +1 -1
  291. package/build/vitest.integration.config.d.ts +1 -1
  292. package/build/workers/index.js +2 -8
  293. package/dashboard/dist/assets/AdminDashboard-BXkKGkb5.js +2 -0
  294. package/dashboard/dist/assets/AdminDashboard-BXkKGkb5.js.map +1 -0
  295. package/dashboard/dist/assets/AvailableEscalationsPage-DcH592mc.js +2 -0
  296. package/dashboard/dist/assets/AvailableEscalationsPage-DcH592mc.js.map +1 -0
  297. package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +2 -0
  298. package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-A6LtzyuO.js.map} +1 -1
  299. package/dashboard/dist/assets/CollapsibleSection-C7nL2_mv.js +2 -0
  300. package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-C7nL2_mv.js.map} +1 -1
  301. package/dashboard/dist/assets/ConfirmDeleteModal-CWFwJrSl.js +2 -0
  302. package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CWFwJrSl.js.map} +1 -1
  303. package/dashboard/dist/assets/CopyableId-DbZ5c3jh.js +2 -0
  304. package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-DbZ5c3jh.js.map} +1 -1
  305. package/dashboard/dist/assets/CredentialsPage-ClWkmLPu.js +2 -0
  306. package/dashboard/dist/assets/CredentialsPage-ClWkmLPu.js.map +1 -0
  307. package/dashboard/dist/assets/CustomDurationPicker-CtH2hReF.js +2 -0
  308. package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-CtH2hReF.js.map} +1 -1
  309. package/dashboard/dist/assets/DataTable-CM5ZcpPi.js +2 -0
  310. package/dashboard/dist/assets/DataTable-CM5ZcpPi.js.map +1 -0
  311. package/dashboard/dist/assets/ElapsedCell-CwqavyeC.js +2 -0
  312. package/dashboard/dist/assets/ElapsedCell-CwqavyeC.js.map +1 -0
  313. package/dashboard/dist/assets/EmptyState-BBn78pmm.js +2 -0
  314. package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BBn78pmm.js.map} +1 -1
  315. package/dashboard/dist/assets/EscalationsOverview-BcJ2E3X7.js +2 -0
  316. package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-BcJ2E3X7.js.map} +1 -1
  317. package/dashboard/dist/assets/EventTable-C1en_KZ0.js +2 -0
  318. package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-C1en_KZ0.js.map} +1 -1
  319. package/dashboard/dist/assets/FilterBar-CZTlrLQT.js +2 -0
  320. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CZTlrLQT.js.map} +1 -1
  321. package/dashboard/dist/assets/ListToolbar-Cdbsapig.js +2 -0
  322. package/dashboard/dist/assets/ListToolbar-Cdbsapig.js.map +1 -0
  323. package/dashboard/dist/assets/McpOverview-CSpEJxKa.js +2 -0
  324. package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CSpEJxKa.js.map} +1 -1
  325. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +5 -0
  326. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +1 -0
  327. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +2 -0
  328. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +1 -0
  329. package/dashboard/dist/assets/McpRunDetailPage-9xdxgG4d.js +2 -0
  330. package/dashboard/dist/assets/McpRunDetailPage-9xdxgG4d.js.map +1 -0
  331. package/dashboard/dist/assets/McpRunsPage-wWLqHsd4.js +2 -0
  332. package/dashboard/dist/assets/McpRunsPage-wWLqHsd4.js.map +1 -0
  333. package/dashboard/dist/assets/Modal-kB_P7ZOr.js +2 -0
  334. package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-kB_P7ZOr.js.map} +1 -1
  335. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +2 -0
  336. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js.map +1 -0
  337. package/dashboard/dist/assets/PageHeader-NkOeBR05.js +2 -0
  338. package/dashboard/dist/assets/PageHeader-NkOeBR05.js.map +1 -0
  339. package/dashboard/dist/assets/PageHeaderWithStats-ywNhrmFK.js +2 -0
  340. package/dashboard/dist/assets/PageHeaderWithStats-ywNhrmFK.js.map +1 -0
  341. package/dashboard/dist/assets/PriorityBadge-B2MQbSxy.js +2 -0
  342. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-B2MQbSxy.js.map} +1 -1
  343. package/dashboard/dist/assets/ProcessDetailPage-B7z7IdqE.js +2 -0
  344. package/dashboard/dist/assets/ProcessDetailPage-B7z7IdqE.js.map +1 -0
  345. package/dashboard/dist/assets/ProcessesListPage-C-uHadO6.js +2 -0
  346. package/dashboard/dist/assets/ProcessesListPage-C-uHadO6.js.map +1 -0
  347. package/dashboard/dist/assets/RolePill-C1dgC-fK.js +2 -0
  348. package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-C1dgC-fK.js.map} +1 -1
  349. package/dashboard/dist/assets/RolesPage-BSxrD1vm.js +2 -0
  350. package/dashboard/dist/assets/RolesPage-BSxrD1vm.js.map +1 -0
  351. package/dashboard/dist/assets/RowActions-lYaHGI-v.js +2 -0
  352. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-lYaHGI-v.js.map} +1 -1
  353. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +2 -0
  354. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +1 -0
  355. package/dashboard/dist/assets/StatCard-v2TiITVr.js +2 -0
  356. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-v2TiITVr.js.map} +1 -1
  357. package/dashboard/dist/assets/StatusBadge-DWlxevgG.js +2 -0
  358. package/dashboard/dist/assets/StatusBadge-DWlxevgG.js.map +1 -0
  359. package/dashboard/dist/assets/StepIndicator-CRM4ft28.js +2 -0
  360. package/dashboard/dist/assets/StepIndicator-CRM4ft28.js.map +1 -0
  361. package/dashboard/dist/assets/StickyPagination-CF0EToEU.js +2 -0
  362. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CF0EToEU.js.map} +1 -1
  363. package/dashboard/dist/assets/SwimlaneTimeline-CNlj7fgg.js +2 -0
  364. package/dashboard/dist/assets/SwimlaneTimeline-CNlj7fgg.js.map +1 -0
  365. package/dashboard/dist/assets/TagInput-CH8qMGhC.js +2 -0
  366. package/dashboard/dist/assets/TagInput-CH8qMGhC.js.map +1 -0
  367. package/dashboard/dist/assets/TaskDetailPage-CdWo-6mu.js +2 -0
  368. package/dashboard/dist/assets/TaskDetailPage-CdWo-6mu.js.map +1 -0
  369. package/dashboard/dist/assets/TaskQueuePill-BPj4ogVG.js +2 -0
  370. package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BPj4ogVG.js.map} +1 -1
  371. package/dashboard/dist/assets/TasksListPage-CtRkMpKU.js +2 -0
  372. package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-CtRkMpKU.js.map} +1 -1
  373. package/dashboard/dist/assets/TimeAgo-Di1a3X5P.js +2 -0
  374. package/dashboard/dist/assets/TimeAgo-Di1a3X5P.js.map +1 -0
  375. package/dashboard/dist/assets/TimestampCell-CqrXql-S.js +2 -0
  376. package/dashboard/dist/assets/TimestampCell-CqrXql-S.js.map +1 -0
  377. package/dashboard/dist/assets/UserName-BUFYCnRa.js +2 -0
  378. package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-BUFYCnRa.js.map} +1 -1
  379. package/dashboard/dist/assets/WorkflowExecutionPage-25iusMml.js +2 -0
  380. package/dashboard/dist/assets/WorkflowExecutionPage-25iusMml.js.map +1 -0
  381. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +2 -0
  382. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js.map +1 -0
  383. package/dashboard/dist/assets/WorkflowsDashboard-BgxslssH.js +2 -0
  384. package/dashboard/dist/assets/WorkflowsDashboard-BgxslssH.js.map +1 -0
  385. package/dashboard/dist/assets/WorkflowsOverview-Doe5L-Re.js +2 -0
  386. package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-Doe5L-Re.js.map} +1 -1
  387. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +2 -0
  388. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +1 -0
  389. package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-Bi2_O1Ts.js} +2 -2
  390. package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-Bi2_O1Ts.js.map} +1 -1
  391. package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
  392. package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
  393. package/dashboard/dist/assets/escalation-Ck1KlLkT.js +2 -0
  394. package/dashboard/dist/assets/escalation-Ck1KlLkT.js.map +1 -0
  395. package/dashboard/dist/assets/escalation-columns-ohDsj2eJ.js +2 -0
  396. package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-ohDsj2eJ.js.map} +1 -1
  397. package/dashboard/dist/assets/helpers-BoD2SgUY.js +2 -0
  398. package/dashboard/dist/assets/helpers-BoD2SgUY.js.map +1 -0
  399. package/dashboard/dist/assets/index-BEtLIsML.js +2 -0
  400. package/dashboard/dist/assets/index-BEtLIsML.js.map +1 -0
  401. package/dashboard/dist/assets/index-Bn2xHDr8.js +5 -0
  402. package/dashboard/dist/assets/index-Bn2xHDr8.js.map +1 -0
  403. package/dashboard/dist/assets/index-BpT-6WgJ.js +2 -0
  404. package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BpT-6WgJ.js.map} +1 -1
  405. package/dashboard/dist/assets/index-CZrJ09p-.js +2 -0
  406. package/dashboard/dist/assets/index-CZrJ09p-.js.map +1 -0
  407. package/dashboard/dist/assets/index-D3NyVADW.js +2 -0
  408. package/dashboard/dist/assets/index-D3NyVADW.js.map +1 -0
  409. package/dashboard/dist/assets/index-D7zYZOnH.js +2 -0
  410. package/dashboard/dist/assets/index-D7zYZOnH.js.map +1 -0
  411. package/dashboard/dist/assets/index-DOkHXmyf.js +17 -0
  412. package/dashboard/dist/assets/index-DOkHXmyf.js.map +1 -0
  413. package/dashboard/dist/assets/index-DYyLF-Qb.js +281 -0
  414. package/dashboard/dist/assets/index-DYyLF-Qb.js.map +1 -0
  415. package/dashboard/dist/assets/index-Dk2Q51o0.js +2 -0
  416. package/dashboard/dist/assets/index-Dk2Q51o0.js.map +1 -0
  417. package/dashboard/dist/assets/index-FuohTtaM.js +6 -0
  418. package/dashboard/dist/assets/index-FuohTtaM.js.map +1 -0
  419. package/dashboard/dist/assets/index-PyCTS05D.css +1 -0
  420. package/dashboard/dist/assets/mcp-CJtYjA7A.js +2 -0
  421. package/dashboard/dist/assets/mcp-CJtYjA7A.js.map +1 -0
  422. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +2 -0
  423. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +1 -0
  424. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DUWm9Z4V.js} +2 -2
  425. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DUWm9Z4V.js.map} +1 -1
  426. package/dashboard/dist/assets/namespaces-BM5P2qmL.js +2 -0
  427. package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-BM5P2qmL.js.map} +1 -1
  428. package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-lv0shpjJ.js} +2 -2
  429. package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-lv0shpjJ.js.map} +1 -1
  430. package/dashboard/dist/assets/settings-Wlq92mRo.js +2 -0
  431. package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-Wlq92mRo.js.map} +1 -1
  432. package/dashboard/dist/assets/tasks-BFGm4PuE.js +2 -0
  433. package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-BFGm4PuE.js.map} +1 -1
  434. package/dashboard/dist/assets/useEventHooks-DIE6ue4x.js +2 -0
  435. package/dashboard/dist/assets/useEventHooks-DIE6ue4x.js.map +1 -0
  436. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js +2 -0
  437. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js.map +1 -0
  438. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
  439. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
  440. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-DCwSO73t.js} +2 -2
  441. package/dashboard/dist/assets/useYamlActivityEvents-DCwSO73t.js.map +1 -0
  442. package/dashboard/dist/assets/{users-tMvNyOo8.js → users-tA5-K0wA.js} +2 -2
  443. package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-tA5-K0wA.js.map} +1 -1
  444. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js +402 -0
  445. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +1 -0
  446. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  447. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  448. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  449. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  450. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-CfLc15Wr.js} +2 -2
  451. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-CfLc15Wr.js.map} +1 -1
  452. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +2 -0
  453. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +1 -0
  454. package/dashboard/dist/index.html +5 -5
  455. package/docs/api/dba.md +81 -0
  456. package/docs/api/escalations.md +575 -0
  457. package/docs/api/exports.md +170 -0
  458. package/docs/api/maintenance.md +93 -0
  459. package/docs/api/mcp-runs.md +128 -0
  460. package/docs/api/mcp-servers.md +253 -0
  461. package/docs/api/namespaces.md +48 -0
  462. package/docs/api/roles.md +390 -0
  463. package/docs/api/service-accounts.md +188 -0
  464. package/docs/api/settings.md +33 -0
  465. package/docs/api/tasks.md +167 -0
  466. package/docs/api/users.md +180 -0
  467. package/docs/api/workflows.md +616 -0
  468. package/docs/api/yaml-workflows.md +312 -0
  469. package/docs/architecture.md +221 -0
  470. package/docs/auth.md +181 -0
  471. package/docs/cloud.md +272 -0
  472. package/docs/compilation.md +136 -0
  473. package/docs/contributing.md +56 -0
  474. package/docs/dashboard.md +145 -0
  475. package/docs/data.md +478 -0
  476. package/docs/escalation-strategies.md +263 -0
  477. package/docs/events.md +251 -0
  478. package/docs/iam.md +222 -0
  479. package/docs/img/01-login.png +0 -0
  480. package/docs/img/02-dashboard-home.png +0 -0
  481. package/docs/img/03-processes-list.png +0 -0
  482. package/docs/img/04-escalations-list.png +0 -0
  483. package/docs/img/05-mcp-servers.png +0 -0
  484. package/docs/img/06-mcp-pipelines.png +0 -0
  485. package/docs/img/07-workflows-list.png +0 -0
  486. package/docs/img/compilation/01-query-submit.png +0 -0
  487. package/docs/img/compilation/02-mcp-servers.png +0 -0
  488. package/docs/img/compilation/03-query-completed.png +0 -0
  489. package/docs/img/compilation/04-wizard-original.png +0 -0
  490. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  491. package/docs/img/compilation/06-wizard-profile.png +0 -0
  492. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  493. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  494. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  495. package/docs/img/compilation/10-wizard-verify.png +0 -0
  496. package/docs/logging.md +110 -0
  497. package/docs/maintenance.md +221 -0
  498. package/docs/mcp.md +985 -0
  499. package/docs/oauth-and-delegation.md +469 -0
  500. package/docs/telemetry.md +144 -0
  501. package/docs/workflows.md +695 -0
  502. package/package.json +8 -9
  503. package/build/services/db/index.d.ts +0 -3
  504. package/build/services/mcp/vision-server.d.ts +0 -15
  505. package/build/services/mcp/vision-server.js +0 -214
  506. package/build/system/mcp-servers/document-vision.js +0 -228
  507. package/build/system/mcp-servers/prompts.d.ts +0 -4
  508. package/build/system/mcp-servers/prompts.js +0 -10
  509. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
  510. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
  511. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
  512. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
  513. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
  514. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
  515. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
  516. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
  517. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
  518. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js.map +0 -1
  519. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
  520. package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
  521. package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
  522. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
  523. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
  524. package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
  525. package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
  526. package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
  527. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  528. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
  529. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
  530. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
  531. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
  532. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
  533. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
  534. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
  535. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
  536. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
  537. package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
  538. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
  539. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
  540. package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
  541. package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
  542. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  543. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
  544. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
  545. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
  546. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
  547. package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
  548. package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
  549. package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
  550. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  551. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
  552. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
  553. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  554. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
  555. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
  556. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  557. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
  558. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
  559. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
  560. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
  561. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
  562. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
  563. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
  564. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
  565. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
  566. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
  567. package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
  568. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
  569. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
  570. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
  571. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
  572. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
  573. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
  574. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
  575. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
  576. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
  577. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
  578. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
  579. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
  580. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
  581. package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
  582. package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
  583. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
  584. package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
  585. package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
  586. package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
  587. package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
  588. package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
  589. package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
  590. package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
  591. package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
  592. package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
  593. package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
  594. package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
  595. package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
  596. package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
  597. package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
  598. package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
  599. package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
  600. package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
  601. package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
  602. package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
  603. package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
  604. package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
  605. package/dashboard/dist/assets/index-X85K5bHC.js.map +0 -1
  606. package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
  607. package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
  608. package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
  609. package/dashboard/dist/assets/mcp-blCW6IL7.js.map +0 -1
  610. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
  611. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
  612. package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
  613. package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
  614. package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
  615. package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js +0 -2
  616. package/dashboard/dist/assets/useNatsEvents-Xr43X1fG.js.map +0 -1
  617. package/dashboard/dist/assets/useYamlActivityEvents-BO51u8tm.js.map +0 -1
  618. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js +0 -292
  619. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
  620. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  621. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  622. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
  623. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
  624. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
  625. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
  626. package/services/db/README.md +0 -8
  627. /package/build/{services → lib}/db/migrate.d.ts +0 -0
  628. /package/{services → build/lib}/db/schemas/002_seed.sql +0 -0
  629. /package/{services → build/lib}/db/schemas/003_workflow_discovery.sql +0 -0
  630. /package/{services → build/lib}/db/schemas/004_query_router.sql +0 -0
  631. /package/{services → build/lib}/db/schemas/005_triage_router.sql +0 -0
  632. /package/{services → build/lib}/db/schemas/006_oauth.sql +0 -0
  633. /package/{services → build/lib}/db/schemas/007_security.sql +0 -0
  634. /package/{services → build/lib}/db/schemas/008_bot_accounts.sql +0 -0
  635. /package/{services → build/lib}/db/schemas/009_audit_trail.sql +0 -0
  636. /package/{services → build/lib}/db/schemas/010_credential_providers.sql +0 -0
  637. /package/{services → build/lib}/db/schemas/012_drop_modality.sql +0 -0
  638. /package/{services → build/lib}/db/schemas/013_execute_as.sql +0 -0
  639. /package/{services → build/lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
  640. /package/build/{services → lib}/events/index.d.ts +0 -0
  641. /package/build/{services → lib}/events/index.js +0 -0
  642. /package/build/{services → lib}/events/memory.d.ts +0 -0
  643. /package/build/{services → lib}/events/memory.js +0 -0
  644. /package/build/{services → lib}/events/nats.d.ts +0 -0
  645. /package/build/{services → lib}/events/nats.js +0 -0
  646. /package/build/{services → lib}/events/publish.d.ts +0 -0
  647. /package/build/{services → lib}/events/publish.js +0 -0
  648. /package/build/{services → lib}/events/socketio.d.ts +0 -0
  649. /package/build/{services → lib}/events/socketio.js +0 -0
  650. /package/build/{services → lib}/logger/index.d.ts +0 -0
  651. /package/build/{services → lib}/logger/index.js +0 -0
  652. /package/build/{services → lib}/logger/pino.d.ts +0 -0
  653. /package/build/{services → lib}/logger/pino.js +0 -0
  654. /package/build/{services → lib}/storage/index.d.ts +0 -0
  655. /package/build/{services → lib}/storage/index.js +0 -0
  656. /package/build/{services → lib}/storage/local.d.ts +0 -0
  657. /package/build/{services → lib}/storage/local.js +0 -0
  658. /package/build/{services → lib}/storage/s3.d.ts +0 -0
  659. /package/build/{services → lib}/storage/s3.js +0 -0
  660. /package/build/{services → lib}/storage/types.d.ts +0 -0
  661. /package/build/{services → lib}/storage/types.js +0 -0
  662. /package/build/{services → lib}/telemetry/index.d.ts +0 -0
  663. /package/build/{services → lib}/telemetry/index.js +0 -0
package/docs/auth.md ADDED
@@ -0,0 +1,181 @@
1
+ # Authentication
2
+
3
+ Every API request in Long Tail passes through an authentication adapter before reaching route handlers. The adapter inspects the incoming request, verifies the caller's identity, and returns a structured `AuthPayload`. If verification fails, the adapter returns `null` and the middleware responds with `401 Unauthorized`.
4
+
5
+ This design decouples identity verification from the rest of the application. The built-in adapter handles JWTs. Teams that rely on OAuth providers, API keys, or session cookies can swap in a custom adapter without modifying any route logic.
6
+
7
+ ## Interface
8
+
9
+ Two types define the contract between Long Tail and any authentication strategy:
10
+
11
+ ```typescript
12
+ interface LTAuthAdapter {
13
+ authenticate(req: any): Promise<AuthPayload | null>;
14
+ }
15
+
16
+ interface AuthPayload {
17
+ userId: string;
18
+ email?: string;
19
+ role?: string;
20
+ [key: string]: any;
21
+ }
22
+ ```
23
+
24
+ `LTAuthAdapter` requires a single method. It receives the raw request object and returns either a valid `AuthPayload` or `null`. The index signature on `AuthPayload` allows adapters to attach arbitrary claims (tenant ID, permissions bitmask, etc.) without altering the interface.
25
+
26
+ ## Configuration via start()
27
+
28
+ The simplest way to configure auth is through the `start()` config:
29
+
30
+ ```typescript
31
+ import { start } from '@hotmeshio/long-tail';
32
+
33
+ // Use the built-in JWT adapter with an explicit secret
34
+ await start({
35
+ database: { connectionString: process.env.DATABASE_URL },
36
+ auth: { secret: process.env.JWT_SECRET },
37
+ workers: [ ... ],
38
+ });
39
+
40
+ // Or plug in a custom adapter
41
+ await start({
42
+ database: { connectionString: process.env.DATABASE_URL },
43
+ auth: { adapter: new GoogleOAuthAdapter() },
44
+ workers: [ ... ],
45
+ });
46
+ ```
47
+
48
+ When `auth.secret` is provided, Long Tail uses the built-in `JwtAuthAdapter` with that secret. When `auth.adapter` is provided, the custom adapter replaces the JWT adapter entirely. If neither is set, the built-in JWT adapter reads from the `JWT_SECRET` environment variable.
49
+
50
+ ## Built-in JWT Adapter
51
+
52
+ `JwtAuthAdapter` is the default adapter. It extracts a Bearer token from the `Authorization` header and verifies it against the `JWT_SECRET` environment variable.
53
+
54
+ A companion utility, `signToken`, generates tokens for use in tests or login endpoints:
55
+
56
+ ```typescript
57
+ import { signToken } from '@hotmeshio/long-tail';
58
+
59
+ const token = signToken({ userId: '42', email: 'ops@example.com' }, '8h');
60
+ ```
61
+
62
+ The first argument is the payload. The second, optional argument is the expiration duration (defaults vary by configuration). The function uses `JWT_SECRET` internally.
63
+
64
+ ## Middleware
65
+
66
+ Long Tail's embedded server automatically applies auth middleware to all API routes. The following middleware functions are also exported for advanced use cases.
67
+
68
+ ### createAuthMiddleware
69
+
70
+ `createAuthMiddleware` accepts any `LTAuthAdapter` and returns Express-compatible middleware. On each request, it calls the adapter's `authenticate` method and attaches the result to `req.auth`. If the adapter returns `null`, the middleware halts the request with a `401` response.
71
+
72
+ ### requireAuth
73
+
74
+ `requireAuth` is the default auth middleware used by Long Tail's embedded server. It delegates to whatever adapter was configured via `start()`, or falls back to the built-in `JwtAuthAdapter`.
75
+
76
+ ### requireAdmin
77
+
78
+ `requireAdmin` is a separate middleware that runs after authentication. It checks whether the authenticated user holds superadmin status, either through a database lookup (`isSuperAdmin()`) or by verifying that the JWT `role` claim equals `'admin'`. Requests that fail this check receive a `403 Forbidden` response.
79
+
80
+ ## Custom Adapter Example
81
+
82
+ The following adapter authenticates requests using Google OAuth ID tokens. It verifies the token with Google's servers, extracts the user's subject identifier and email, and returns them as an `AuthPayload`.
83
+
84
+ ```typescript
85
+ import type { LTAuthAdapter, AuthPayload } from '@hotmeshio/long-tail';
86
+ import { OAuth2Client } from 'google-auth-library';
87
+
88
+ const google = new OAuth2Client(process.env.GOOGLE_CLIENT_ID);
89
+
90
+ class GoogleOAuthAdapter implements LTAuthAdapter {
91
+ async authenticate(req): Promise<AuthPayload | null> {
92
+ const header = req.headers.authorization;
93
+ if (!header?.startsWith('Bearer ')) return null;
94
+ try {
95
+ const ticket = await google.verifyIdToken({
96
+ idToken: header.slice(7),
97
+ audience: process.env.GOOGLE_CLIENT_ID,
98
+ });
99
+ const { sub, email } = ticket.getPayload()!;
100
+ return { userId: sub, email, role: 'member' };
101
+ } catch {
102
+ return null;
103
+ }
104
+ }
105
+ }
106
+
107
+ // Pass to start()
108
+ await start({
109
+ database: { connectionString: process.env.DATABASE_URL },
110
+ auth: { adapter: new GoogleOAuthAdapter() },
111
+ workers: [ ... ],
112
+ });
113
+ ```
114
+
115
+ The same pattern applies to any identity provider: extract credentials from the request, verify them against the provider, and return an `AuthPayload` or `null`.
116
+
117
+ ## Development Shortcut
118
+
119
+ During local development, a no-op adapter that returns a hardcoded payload removes the need for a running identity provider:
120
+
121
+ ```typescript
122
+ import type { LTAuthAdapter, AuthPayload } from '@hotmeshio/long-tail';
123
+
124
+ class DevAdapter implements LTAuthAdapter {
125
+ async authenticate(): Promise<AuthPayload> {
126
+ return { userId: 'dev-user', email: 'dev@localhost', role: 'admin' };
127
+ }
128
+ }
129
+
130
+ await start({
131
+ database: { connectionString: process.env.DATABASE_URL },
132
+ auth: { adapter: new DevAdapter() },
133
+ workers: [ ... ],
134
+ });
135
+ ```
136
+
137
+ This adapter grants admin access to every request. Restrict its use to local environments.
138
+
139
+ ## Service Account Authentication
140
+
141
+ Service accounts are named identities that authenticate with API keys instead of passwords or OAuth. They share the same RBAC system as human users — same roles, same delegation tokens, same credential storage.
142
+
143
+ ### How It Works
144
+
145
+ Service account API keys are prefixed with `lt_bot_` and validated via bcrypt comparison, following the same pattern as service tokens. The built-in `JwtAuthAdapter` detects the prefix automatically:
146
+
147
+ ```
148
+ Authorization: Bearer lt_bot_a1b2c3d4e5f6...
149
+ ```
150
+
151
+ When a service account API key is validated, the adapter returns an `AuthPayload` with the account's `userId` (from the `lt_users` table). From that point forward, the request is indistinguishable from a human user's — the same middleware, RBAC checks, and identity propagation apply.
152
+
153
+ ### Creating a Service Account
154
+
155
+ Service accounts are managed via the `/api/bot-accounts` endpoints (admin-only). See the [Service Accounts API](api/service-accounts.md) for full documentation.
156
+
157
+ ```bash
158
+ # Create a service account
159
+ curl -X POST http://localhost:3000/api/bot-accounts \
160
+ -H "Authorization: Bearer $ADMIN_TOKEN" \
161
+ -H 'Content-Type: application/json' \
162
+ -d '{"name": "ci-bot", "description": "Runs scheduled workflows"}'
163
+
164
+ # Generate an API key (shown once)
165
+ curl -X POST http://localhost:3000/api/bot-accounts/$BOT_ID/api-keys \
166
+ -H "Authorization: Bearer $ADMIN_TOKEN" \
167
+ -H 'Content-Type: application/json' \
168
+ -d '{"name": "production", "scopes": ["mcp:tool:call"]}'
169
+ ```
170
+
171
+ ### Identity in Workflows
172
+
173
+ When a service account starts a workflow, its `userId` flows through the same envelope and `ToolContext` path as a human user. Activities that call `getToolContext()` receive a `ToolPrincipal` with `type: 'bot'`, and the task record's `initiated_by` column stores the account's user ID for audit.
174
+
175
+ ## Environment Variables
176
+
177
+ | Variable | Required | Description |
178
+ |--------------|----------|--------------------------------------------------|
179
+ | `JWT_SECRET` | Yes | Signing and verification key for the JWT adapter. |
180
+
181
+ `JWT_SECRET` must be set when using `JwtAuthAdapter` or `signToken`. Omitting it will cause token verification to fail at runtime. Use a cryptographically random string of at least 32 characters in production.
package/docs/cloud.md ADDED
@@ -0,0 +1,272 @@
1
+ # Cloud Deployment
2
+
3
+ Long Tail embeds its own server. Your application calls `start()` with a config object — that's the entire entry point. In production you typically run two container types that share the same PostgreSQL database: one serves HTTP requests, the other executes workflows. This separation lets each tier scale independently.
4
+
5
+ ## Why Separate
6
+
7
+ | Concern | API container | Worker container |
8
+ |---------|--------------|-----------------|
9
+ | Purpose | Serve REST endpoints, authenticate requests, start workflows, query tasks and escalations | Execute workflow code, run activities, manage interceptors |
10
+ | Scaling trigger | Request volume | Workflow queue depth |
11
+ | Resource profile | I/O-bound (Postgres reads, HTTP) | Potentially CPU-bound (AI calls, document processing) |
12
+ | Network exposure | Public (behind load balancer) | Private (no inbound traffic) |
13
+ | Deploy cadence | Change routes or auth without touching workers | Update workflow logic without restarting the API |
14
+
15
+ Both containers install the same packages (`@hotmeshio/long-tail`, `@hotmeshio/hotmesh`) and share the same PostgreSQL connection string. They differ only in what they configure at boot.
16
+
17
+ ## API Container
18
+
19
+ The API container runs the embedded server and serves REST endpoints. It does not start workers — no workflow execution happens here.
20
+
21
+ ```typescript
22
+ // api.ts — API container entry point
23
+ import { start } from '@hotmeshio/long-tail';
24
+
25
+ await start({
26
+ database: { connectionString: process.env.DATABASE_URL },
27
+ server: { port: Number(process.env.PORT) || 3000 },
28
+ auth: { secret: process.env.JWT_SECRET },
29
+ });
30
+ ```
31
+
32
+ That's it. Migrations run, the server starts, routes are mounted, auth is configured. The API container needs network ingress (load balancer, domain). It reads and writes Postgres but never processes workflow task queues.
33
+
34
+ ## Worker Container
35
+
36
+ The worker container registers the LT interceptor, starts workflow workers, and optionally connects telemetry, event, and maintenance adapters. It runs no HTTP server.
37
+
38
+ ```typescript
39
+ // worker.ts — Worker container entry point
40
+ import { start } from '@hotmeshio/long-tail';
41
+ import * as reviewContent from './workflows/review-content';
42
+ import * as verifyDocument from './workflows/verify-document';
43
+
44
+ await start({
45
+ database: { connectionString: process.env.DATABASE_URL },
46
+ server: { enabled: false },
47
+ workers: [
48
+ { taskQueue: 'long-tail', workflow: reviewContent.reviewContent },
49
+ { taskQueue: 'long-tail-verify', workflow: verifyDocument.verifyDocument },
50
+ ],
51
+ telemetry: process.env.HONEYCOMB_API_KEY
52
+ ? { honeycomb: { apiKey: process.env.HONEYCOMB_API_KEY } }
53
+ : undefined,
54
+ events: process.env.NATS_URL
55
+ ? { nats: { url: process.env.NATS_URL } }
56
+ : undefined,
57
+ logging: { pino: { level: 'info' } },
58
+ });
59
+ ```
60
+
61
+ The worker container needs no inbound network access. It connects outbound to PostgreSQL (and optionally NATS, Honeycomb, etc.) and polls task queues via the HotMesh engine.
62
+
63
+ ## Architecture Diagram
64
+
65
+ ```
66
+ ┌──────────────────────────────────┐
67
+ │ Load Balancer │
68
+ └───────────────┬──────────────────┘
69
+
70
+ ┌───────────────▼───────────────────┐
71
+ │ API Containers (N) │
72
+ │ │
73
+ │ start({ server, database }) │
74
+ │ Embedded Express + Auth + Routes │
75
+ │ No workers, no interceptors │
76
+ └───────────────┬───────────────────┘
77
+
78
+ ┌───────────────▼──────────────────┐
79
+ │ PostgreSQL │
80
+ │ │
81
+ │ Workflow state (HotMesh) │
82
+ │ lt_tasks, lt_escalations │
83
+ │ lt_users, lt_config_* │
84
+ └───────────────▲──────────────────┘
85
+
86
+ ┌───────────────┴──────────────────┐
87
+ │ Worker Containers (M) │
88
+ │ │
89
+ │ start({ workers, telemetry }) │
90
+ │ Workflow execution + activities │
91
+ │ Telemetry, events, maintenance │
92
+ │ No HTTP, no public ingress │
93
+ └──────────────────────────────────┘
94
+ ```
95
+
96
+ API containers and worker containers scale independently. N and M need not be equal.
97
+
98
+ ## AWS ECS
99
+
100
+ Two ECS services in one cluster, both in the same VPC with access to the same RDS PostgreSQL instance.
101
+
102
+ ### API service
103
+
104
+ - Fargate or EC2 launch type
105
+ - Attached to an Application Load Balancer (ALB) target group
106
+ - Health check: `GET /health`
107
+ - Auto-scaling policy: target tracking on `RequestCountPerTarget`
108
+ - Security group: allow inbound 443 from ALB, outbound 5432 to RDS
109
+
110
+ ### Worker service
111
+
112
+ - Fargate or EC2 launch type
113
+ - **No target group** — no inbound traffic
114
+ - Auto-scaling policy: step scaling on a custom CloudWatch metric for queue depth, or target tracking on CPU utilization
115
+ - Security group: outbound 5432 to RDS, outbound 443 to Honeycomb/NATS as needed, no inbound rules
116
+
117
+ ### Task definitions
118
+
119
+ Both task definitions use the same Docker image. The difference is the `command` override:
120
+
121
+ ```json
122
+ // API task definition
123
+ {
124
+ "containerDefinitions": [{
125
+ "command": ["node", "dist/api.js"],
126
+ "portMappings": [{ "containerPort": 3000 }]
127
+ }]
128
+ }
129
+
130
+ // Worker task definition
131
+ {
132
+ "containerDefinitions": [{
133
+ "command": ["node", "dist/worker.js"]
134
+ }]
135
+ }
136
+ ```
137
+
138
+ ### RDS
139
+
140
+ - PostgreSQL 15+ (gen_random_uuid requires pgcrypto or Postgres 13+)
141
+ - Multi-AZ for production
142
+ - Both services connect via the same `DATABASE_URL` endpoint
143
+
144
+ ## GCP Cloud Run
145
+
146
+ ### API service
147
+
148
+ ```bash
149
+ gcloud run deploy long-tail-api \
150
+ --image gcr.io/PROJECT/long-tail:latest \
151
+ --command node,dist/api.js \
152
+ --port 3000 \
153
+ --allow-unauthenticated \
154
+ --add-cloudsql-instances PROJECT:REGION:INSTANCE \
155
+ --set-env-vars DATABASE_URL=...,JWT_SECRET=...
156
+ ```
157
+
158
+ ### Worker service
159
+
160
+ ```bash
161
+ gcloud run deploy long-tail-workers \
162
+ --image gcr.io/PROJECT/long-tail:latest \
163
+ --command node,dist/worker.js \
164
+ --no-allow-unauthenticated \
165
+ --min-instances 1 \
166
+ --add-cloudsql-instances PROJECT:REGION:INSTANCE \
167
+ --set-env-vars DATABASE_URL=...,HONEYCOMB_API_KEY=...
168
+ ```
169
+
170
+ Workers need `--min-instances 1` (or higher) because they must stay warm to poll task queues. Cloud Run scales to zero by default, which would stop all workflow processing.
171
+
172
+ ### GKE alternative
173
+
174
+ For more control over scaling, use two Kubernetes Deployments in the same cluster:
175
+
176
+ ```yaml
177
+ # api-deployment.yaml
178
+ apiVersion: apps/v1
179
+ kind: Deployment
180
+ metadata:
181
+ name: long-tail-api
182
+ spec:
183
+ replicas: 2
184
+ template:
185
+ spec:
186
+ containers:
187
+ - name: api
188
+ image: gcr.io/PROJECT/long-tail:latest
189
+ command: ["node", "dist/api.js"]
190
+ ports:
191
+ - containerPort: 3000
192
+ ---
193
+ # worker-deployment.yaml
194
+ apiVersion: apps/v1
195
+ kind: Deployment
196
+ metadata:
197
+ name: long-tail-workers
198
+ spec:
199
+ replicas: 3
200
+ template:
201
+ spec:
202
+ containers:
203
+ - name: worker
204
+ image: gcr.io/PROJECT/long-tail:latest
205
+ command: ["node", "dist/worker.js"]
206
+ ```
207
+
208
+ The API Deployment sits behind a Service + Ingress. The worker Deployment has no Service — it only makes outbound connections.
209
+
210
+ ## Environment Variables
211
+
212
+ | Variable | API | Worker | Description |
213
+ |----------|:---:|:------:|-------------|
214
+ | `DATABASE_URL` | yes | yes | PostgreSQL connection string |
215
+ | `PORT` | yes | — | HTTP listen port (default: 3000) |
216
+ | `JWT_SECRET` | yes | — | Secret for verifying and signing JWTs |
217
+ | `HONEYCOMB_API_KEY` | — | yes | Honeycomb telemetry (optional) |
218
+ | `HMSH_TELEMETRY` | — | yes | Span verbosity: `info` or `debug` |
219
+ | `NATS_URL` | — | yes | NATS server for milestone events (optional) |
220
+ | `OPENAI_API_KEY` | — | yes | For workflows that call OpenAI (optional) |
221
+
222
+ Environment variables serve as fallbacks. When using `start()`, prefer passing config directly — it's explicit and type-checked. The API container does not need telemetry, event, or AI keys — it never executes workflow code. The worker container does not need `JWT_SECRET` or `PORT` — it never serves HTTP.
223
+
224
+ ## Docker
225
+
226
+ A single Dockerfile with different `CMD` targets:
227
+
228
+ ```dockerfile
229
+ FROM node:20-slim AS build
230
+ WORKDIR /app
231
+ COPY package*.json ./
232
+ RUN npm ci
233
+ COPY . .
234
+ RUN npm run build
235
+
236
+ FROM node:20-slim
237
+ WORKDIR /app
238
+ COPY --from=build /app/dist ./dist
239
+ COPY --from=build /app/node_modules ./node_modules
240
+ COPY --from=build /app/package.json ./
241
+
242
+ # Override CMD at deploy time:
243
+ # API: ["node", "dist/api.js"]
244
+ # Worker: ["node", "dist/worker.js"]
245
+ CMD ["node", "dist/api.js"]
246
+ ```
247
+
248
+ For local development, docker-compose runs both roles in a single container:
249
+
250
+ ```yaml
251
+ services:
252
+ postgres:
253
+ image: postgres:16
254
+ environment:
255
+ POSTGRES_DB: longtail
256
+ POSTGRES_PASSWORD: password
257
+ ports:
258
+ - "${LT_PG_PORT:-5432}:5432"
259
+
260
+ app:
261
+ build: .
262
+ command: node dist/index.js # combined API + workers
263
+ environment:
264
+ DATABASE_URL: postgres://postgres:password@postgres:5432/longtail
265
+ JWT_SECRET: dev-secret
266
+ ports:
267
+ - "${LT_PORT:-3000}:3000"
268
+ depends_on:
269
+ - postgres
270
+ ```
271
+
272
+ The combined `index.js` entry point (used in development and the demo) calls `start()` with both server and workers enabled. In production, split them into `api.js` and `worker.js` with different `start()` configs.
@@ -0,0 +1,136 @@
1
+ # The Compilation Pipeline
2
+
3
+ Every AI-driven execution carries cost. An LLM reasons through each step, selects tools, interprets results, and decides what to do next. It works, but it is slow, non-deterministic, and consumes tokens on every run.
4
+
5
+ Long Tail records what the LLM did, extracts the pattern, and compiles it into a deterministic workflow. The next time the same problem appears, it runs without an LLM — no reasoning, no token cost, same result.
6
+
7
+ This guide follows a single query through the full lifecycle: dynamic execution, compilation, deterministic replay, and automatic routing. All steps take place in the dashboard's **Pipeline Designer** page (sidebar: **MCP Workflows → Pipeline Designer**).
8
+
9
+ ---
10
+
11
+ ## The Dynamic Execution
12
+
13
+ Open **Pipeline Designer** from the sidebar. The page lists previous MCP query runs and provides a prompt field to start a new one. Describe what you need in natural language — for example, "Log into the dashboard, discover all navigation pages, and screenshot each one." Optionally constrain which MCP tool tags to search.
14
+
15
+ When the query is submitted, the `mcpQuery` workflow starts. It discovers available tools by tag (GIN-indexed full-text search), then enters an agentic loop: the LLM selects a tool, calls it, reads the result, and decides the next step. Every tool call is checkpointed by the workflow engine. If the process crashes mid-execution, it resumes from the last checkpoint — no work is lost, no step runs twice.
16
+
17
+ The run appears in the **Pipeline Designer** list once it completes. Click into it to open the **Compilation Wizard**.
18
+
19
+ ---
20
+
21
+ ## The Compilation Wizard
22
+
23
+ The wizard has six steps, shown as numbered circles in a sticky bar at the top of the page. Each step represents one stage of converting the dynamic execution into a deployable deterministic workflow:
24
+
25
+ 1. **Describe**
26
+ 2. **Discover**
27
+ 3. **Compile**
28
+ 4. **Deploy**
29
+ 5. **Test**
30
+ 6. **Verify**
31
+
32
+ Steps unlock sequentially — you must complete each before advancing.
33
+
34
+ ### 1. Describe
35
+
36
+ **Subtitle:** *Dynamic LLM-orchestrated execution — the discovery run*
37
+
38
+ The first panel displays what the LLM produced: the input envelope on the left and the structured output on the right. Duration is shown. This is the reference point — whatever the compiled workflow produces will be compared against it.
39
+
40
+ ### 2. Discover
41
+
42
+ **Subtitle:** *Activity swimlane showing tool calls and their durations*
43
+
44
+ A swimlane visualization of the execution. Each row is an MCP server, each block is a tool call, positioned on a time axis. The pattern is visible at a glance: the LLM logged in, extracted navigation links, then looped through each page to capture a screenshot.
45
+
46
+ ### 3. Compile
47
+
48
+ **Subtitle:** *Define the deterministic workflow tool from this execution*
49
+
50
+ The workflow needs an identity. This panel presents a form with:
51
+
52
+ - **Namespace** — a required alphanumeric identifier for the workflow's application scope.
53
+ - **Tool Name** — the workflow's MCP tool name for discovery. This is how other agents and workflows will find and invoke it.
54
+ - **Description** — auto-generated from the execution trace. Editable.
55
+ - **Tags** — suggested from the execution trace. Add or remove tags to control discoverability.
56
+
57
+ An optional **Refine compilation** toggle reveals a feedback textarea where you can provide additional instructions to the compiler.
58
+
59
+ Clicking **Compile Pipeline** triggers the five-stage compilation pipeline:
60
+
61
+ 1. **Extract** — parse the execution trace into an ordered step sequence
62
+ 2. **Analyze** — detect iteration patterns (the screenshot loop), classify inputs as dynamic (user-provided) or fixed (implementation detail)
63
+ 3. **Compile** — an LLM produces a blueprint with data-flow edges and session threading, guided by per-server **compile hints** stored in the database (e.g., which output fields to use as transform sources, how to thread browser session handles)
64
+ 4. **Build** — generate a deterministic YAML DAG with activity wiring
65
+ 5. **Validate** — check for missing wiring, lost session handles, broken iteration boundaries
66
+
67
+ Once compilation succeeds, the panel switches to a read-only view showing the workflow name, status badge, namespace, topic, description, activity pipeline chain, and tags.
68
+
69
+ ### 4. Deploy
70
+
71
+ **Subtitle:** *Review configuration, input/output schemas, and YAML definition*
72
+
73
+ The deploy panel displays the compiled YAML definition, input schema, and output schema. The YAML encodes the DAG: each step names an MCP tool, declares its inputs (either from the user's request or from a prior step's output), and specifies data-flow edges.
74
+
75
+ Two toggle buttons are available:
76
+
77
+ - **Recompile with Feedback** — provide notes to the compiler and regenerate the YAML.
78
+ - **Manual Edit** — directly edit the YAML, schemas, or activity manifest.
79
+
80
+ A version history panel on the right tracks all edits. The step label changes from "Deploy" to "Redeploy" when the workflow is already active.
81
+
82
+ Clicking **Deploy & Activate** registers the workflow as a live MCP tool — tagged for discovery, versioned, invocable by any agent, workflow, or API call.
83
+
84
+ ### 5. Test
85
+
86
+ **Header:** *Compare Runs*
87
+
88
+ The test panel runs the compiled workflow and compares it against the original dynamic execution. Two columns show:
89
+
90
+ - **Left — Original MCP Query**: the dynamic LLM-orchestrated run with its input, output, and duration.
91
+ - **Right — Compiled Pipeline Run**: the deterministic run with its input, output, and duration. A dropdown allows selecting from multiple test runs.
92
+
93
+ Click **Run Test** to invoke the compiled workflow with the original input. An invocation modal appears with the pre-populated input schema.
94
+
95
+ The difference is structural:
96
+
97
+ | | Dynamic (LLM) | Deterministic |
98
+ |---|---|---|
99
+ | **Tool calls** | N (LLM selects each) | 1 pipeline (pre-wired DAG) |
100
+ | **LLM usage** | Every step | Route + input extraction only |
101
+ | **Determinism** | Varies per run | Identical every time |
102
+
103
+ The deterministic path is faster because the LLM is used only at the edges — routing the request and extracting structured inputs from the prompt. The DAG itself executes tool calls directly with pre-wired data flow. No per-step reasoning, no tool selection, no interpretation.
104
+
105
+ ### 6. Verify
106
+
107
+ **Header:** *End-to-End Verification*
108
+
109
+ The final panel confirms end-to-end routing. The original prompt is pre-filled in an editable textarea on the left. Click **Submit** to send it through the `mcpQueryRouter` — the same entry point any future request would use. A **Reset to original** button restores the prompt if you modify it.
110
+
111
+ The right column shows the result: a status badge, confidence percentage (when the deterministic path is used), and the full output in a JSON viewer. A **RouterProgressTracker** displays real-time routing progress during execution.
112
+
113
+ The router performs full-text search and tag matching to find candidate workflows, then uses an LLM judge to confirm scope. When confidence exceeds the threshold, the request goes straight to the compiled workflow.
114
+
115
+ ```
116
+ User prompt → Router → Discovery (FTS + tags) → LLM Judge
117
+ │ │
118
+ │ confidence ≥ 0.7 │ no match
119
+ ▼ ▼
120
+ Deterministic Dynamic
121
+ (compiled DAG, no LLM) (agentic loop)
122
+ ```
123
+
124
+ ---
125
+
126
+ ## How It Accumulates
127
+
128
+ The first time a problem appears, the dynamic path runs. An LLM reasons through it — slow and expensive, but it works.
129
+
130
+ The wizard compiles the solution into a deterministic pipeline. A human reviews the DAG, adjusts if needed, and deploys.
131
+
132
+ Every subsequent occurrence is routed automatically. A single LLM call extracts structured inputs from the prompt, then the DAG executes without further reasoning.
133
+
134
+ Each compiled workflow is itself a discoverable MCP tool. Other workflows and agents can invoke it. Solutions compose. The inventory of deterministic pathways grows with every problem the system solves, and the fraction of requests that require LLM reasoning shrinks.
135
+
136
+ The dynamic path remains for genuinely new problems. But the long tail gets shorter.
@@ -0,0 +1,56 @@
1
+ # Contributing
2
+
3
+ ## Running the Demo
4
+
5
+ The repository includes a working server with example workflows (`reviewContent`, `kitchenSink`, `basicEcho`, and more), Postgres, NATS, and a React dashboard.
6
+
7
+ ### Prerequisites
8
+
9
+ - [Docker](https://docs.docker.com/get-docker/)
10
+
11
+ ### Run
12
+
13
+ ```bash
14
+ git clone https://github.com/hotmeshio/long-tail.git
15
+ cd long-tail
16
+ docker compose up
17
+ ```
18
+
19
+ Postgres, NATS, the API server, and the dashboard start together. The dashboard is built during the Docker image build and served as static assets. Migrations run automatically.
20
+
21
+ Default ports are `3000` (API), `5432` (Postgres), `4222`/`8222` (NATS). Override any of them:
22
+
23
+ ```bash
24
+ LT_PORT=3001 LT_PG_PORT=5433 LT_NATS_PORT=4223 docker compose up
25
+ ```
26
+
27
+ ## Testing
28
+
29
+ ```bash
30
+ # Start Postgres and NATS
31
+ docker compose up -d postgres nats
32
+
33
+ # Run all tests
34
+ npm test
35
+
36
+ # Run workflow tests
37
+ npm run test:workflows
38
+ ```
39
+
40
+ ## Development Setup
41
+
42
+ 1. Fork the repository and clone your fork
43
+ 2. Install dependencies: `npm install`
44
+ 3. Start infrastructure: `docker compose up -d postgres nats`
45
+ 4. Run tests to verify your setup: `npm test`
46
+
47
+ ## Pull Requests
48
+
49
+ - Create a feature branch from `main`
50
+ - Keep changes focused — one concern per PR
51
+ - Add or update tests for any new behavior
52
+ - Run `npm test` before submitting
53
+
54
+ ## Issues
55
+
56
+ Report bugs and request features at [github.com/hotmeshio/long-tail/issues](https://github.com/hotmeshio/long-tail/issues).