@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
@@ -0,0 +1,145 @@
1
+ # Dashboard Guide
2
+
3
+ The Long Tail dashboard is a React single-page application for managing durable workflows, MCP pipelines, escalations, and system administration. It connects to the Long Tail backend over REST and receives real-time updates via NATS subscriptions.
4
+
5
+ ## Sidebar Navigation
6
+
7
+ The sidebar organizes pages into three groups.
8
+
9
+ ### Durable Workflows
10
+
11
+ | Page | Purpose |
12
+ |------|---------|
13
+ | **Workflow Registry** | Lists all discovered workflows. Each row shows a Certified (ShieldCheck icon, accent blue), Pipeline (Wand2 icon, purple), or Durable badge. Certify or de-certify workflows from this page. |
14
+ | **Invoke Workflow** | Unified launch page for all durable workflows. Start a workflow immediately or schedule it on a cron. Certified and durable workflows appear together with visual distinction. |
15
+ | **All Escalations** | Queue of pending, claimed, and resolved escalations. Claim an escalation to lock it, then resolve with a payload that triggers a workflow re-run. |
16
+ | **Durable Executions** | All workflow runs. Filter by tier: All, Certified, or Durable. Each row shows duration and links to execution details, task records, and escalation history. |
17
+
18
+ ### MCP Workflows
19
+
20
+ | Page | Purpose |
21
+ |------|---------|
22
+ | **MCP Server Tools** | Browse all registered MCP servers and their exposed tools. View tool schemas, tags, and compile hints. |
23
+ | **MCP Pipeline Tools** | Tools available within MCP pipelines. Shows which tools the pipeline orchestrator can discover and invoke. |
24
+ | **Pipeline Designer** | Six-step compilation wizard. Submit a query, review the dynamic execution, compile to a deterministic pipeline, deploy, test, and verify end-to-end routing. Detailed below. |
25
+ | **Pipeline Executions** | Execution history for MCP pipelines. Shows both dynamic (agentic) and compiled (deterministic) runs, with duration for each. |
26
+
27
+ ### Admin
28
+
29
+ | Page | Purpose |
30
+ |------|---------|
31
+ | **Accounts** | Unified management for User Accounts and Service Accounts, toggled by tab. Create, edit, and assign roles. Service accounts get API keys for programmatic access. |
32
+ | **Roles & Permissions** | Define roles and assign them to users. Roles control which escalations a user can see and claim. |
33
+ | **DB Maintenance** | Database housekeeping. Vacuum, reindex, and view table statistics. |
34
+ | **Task Queues** | View active task queues, connected workers, and queue depth. |
35
+
36
+ ### Header
37
+
38
+ The top navigation bar contains:
39
+
40
+ - **Home logo** — links to the home page (`/`), which shows all business processes.
41
+ - **Quick Query** — a search/prompt field for launching MCP queries directly from the header.
42
+ - **Documentation** (BookOpen icon) — toggles an in-app documentation drawer.
43
+ - **Inbox** (Inbox icon) — links to `/escalations/queue` (My Escalations). Shows a badge count of pending escalations for the current user's roles.
44
+ - **NATS status indicator** — shows connection health.
45
+ - **User menu** (User icon) — dropdown with Credentials and Sign Out options.
46
+
47
+ ## Key Pages
48
+
49
+ ### Workflow Registry
50
+
51
+ Shows every workflow the system has discovered across all registered workers. Each workflow displays one of three badges:
52
+
53
+ - **Certified** (ShieldCheck icon, accent blue) -- has an `lt_config_workflows` entry. Full interceptor tracking, escalation chains, and invocation controls.
54
+ - **Pipeline** (Wand2 icon, purple) -- a compiled deterministic workflow deployed from a successful MCP execution.
55
+ - **Durable** (Workflow icon, muted) -- registered as a HotMesh worker but not certified. Checkpointed execution and retries, but no interceptor wrapping.
56
+
57
+ Click a workflow to view its config. Certify a durable workflow by creating a config entry; de-certify by removing it. The workflow itself does not change -- only the infrastructure wrapping it.
58
+
59
+ ### Invoke Workflow
60
+
61
+ A single page for starting any durable workflow. Select the workflow, provide input data as JSON, and choose:
62
+
63
+ - **Start Now** -- immediate execution.
64
+ - **Schedule** -- provide a cron expression for recurring execution.
65
+
66
+ Certified and durable workflows both appear in the list. Certified workflows show the shield icon so operators can distinguish which runs will have full tracking and escalation support.
67
+
68
+ ### Pipeline Designer
69
+
70
+ The Pipeline Designer page lists previous MCP query runs and provides a prompt to start new ones. Click into a completed run to open the six-step **Compilation Wizard**:
71
+
72
+ 1. **Describe** -- View the original dynamic execution: input envelope and structured output side by side.
73
+ 2. **Discover** -- Swimlane timeline of tool calls, grouped by MCP server, positioned on a time axis.
74
+ 3. **Compile** -- Define the deterministic workflow: namespace, tool name, description, tags. Triggers the five-stage compilation pipeline.
75
+ 4. **Deploy** -- Review the compiled YAML DAG, input/output schemas, and version history. Deploy and activate.
76
+ 5. **Test** -- Run the compiled workflow and compare results side-by-side against the original dynamic execution.
77
+ 6. **Verify** -- End-to-end routing verification. Submit the original prompt through `mcpQueryRouter` to confirm the deterministic path is discovered and used.
78
+
79
+ Steps unlock sequentially. Compiled pipelines appear in **Pipeline Executions** as deterministic runs, which are faster and cheaper than their dynamic counterparts. See the [Compilation Pipeline](compilation.md) guide for the full walkthrough.
80
+
81
+ ### Durable Executions
82
+
83
+ Lists all workflow runs across the system. The tier filter at the top switches between:
84
+
85
+ - **All** -- every execution.
86
+ - **Certified** -- only workflows with `lt_config_workflows` entries.
87
+ - **Durable** -- only uncertified durable workflows.
88
+
89
+ Each row shows workflow name, status, start time, and duration (computed from start to completion). Click through to see the full task record, activity checkpoints, milestones, and any associated escalations.
90
+
91
+ ### Accounts
92
+
93
+ User Accounts and Service Accounts live on the same page, separated by a tab toggle.
94
+
95
+ - **User Accounts** -- human operators. Assign roles, set display names, manage access.
96
+ - **Service Accounts** -- programmatic callers (bots, CI pipelines, external systems). Each service account has an API key for authentication. Assign roles to control which workflows a service account can invoke and which escalations it can interact with.
97
+
98
+ Both account types participate in the same role system. A service account with the `reviewer` role can claim and resolve escalations just like a human user.
99
+
100
+ ### Escalation Detail
101
+
102
+ Click any escalation to open a full-page detail view. The page has a hero section summarizing the escalation, an action bar (Claim, Resolve, Escalate, Triage options), a resolver form when claimed, a timeline of events, and the full context data. Triage options are available when the MCP escalation strategy is configured.
103
+
104
+ ### Escalations Overview
105
+
106
+ Accessible at `/escalations`, the overview page shows summary statistics across configurable time windows (1h, 24h, 7d, 30d): open, claimed, created, and resolved counts. A breakdown table groups escalations by role.
107
+
108
+ ### Workflows Overview
109
+
110
+ Accessible at `/workflows`, the overview page shows workflow statistics across time windows (1h, 24h, 7d, 30d): total, running, completed, failed counts, and average duration grouped by workflow type.
111
+
112
+ ### MCP Overview
113
+
114
+ Accessible at `/mcp`, the overview page shows MCP server and tool statistics alongside pipeline execution history across time windows.
115
+
116
+ ### Process Detail
117
+
118
+ Click any process on the home page (`/`) to open a detail view at `/processes/detail/:originId`. This shows a swimlane timeline of all tasks and escalations sharing the same origin, giving a unified view of a multi-step workflow's progress.
119
+
120
+ ### Credentials
121
+
122
+ Accessible via the user menu in the header (or at `/credentials`), this page lets users manage their OAuth provider connections and API keys. Status, credential type, and expiry are visible. Users connect or revoke providers here.
123
+
124
+ ## Global Features
125
+
126
+ ### Inbox
127
+
128
+ The Inbox icon in the header shows a badge count when the current user has pending escalations assigned to their roles. The count updates live via a NATS subscription — no polling or page refresh needed.
129
+
130
+ Click the icon to jump to **My Escalations** (`/escalations/queue`) — the operator dashboard showing claimed escalations with time-remaining columns, filter bar, and release actions.
131
+
132
+ ### Event Feed
133
+
134
+ The bottom bar contains a collapsible live event stream. Click the radio icon to toggle it open or closed. When open, it displays a real-time feed of:
135
+
136
+ - Workflow start and completion events
137
+ - Task state transitions
138
+ - Escalation creation, claim, and resolution
139
+ - Activity checkpoint events
140
+
141
+ Events stream in via NATS subscription. The feed is useful during development and debugging to watch workflow execution unfold in real time.
142
+
143
+ ### Page Transitions
144
+
145
+ Navigation between pages uses a smooth fade transition. This keeps the UI responsive during client-side routing and prevents visual jarring when switching contexts.
package/docs/data.md ADDED
@@ -0,0 +1,478 @@
1
+ # Data Model
2
+
3
+ Long Tail stores all state in PostgreSQL. The tables handle workflow tracking, escalation management, user identity, configuration, MCP server registration, compiled workflows, OAuth tokens, service tokens, ephemeral credentials, and namespace isolation. A single migration file (`services/db/schemas/001_initial.sql`) creates the full schema; the migration runner (`services/db/migrate.ts`) tracks applied files in `lt_migrations` so migrations are idempotent.
4
+
5
+ ## Tables
6
+
7
+ ### lt_roles
8
+
9
+ Canonical role registry. Roles referenced by other tables are seeded here.
10
+
11
+ | Column | Type | Default | Description |
12
+ |--------|------|---------|-------------|
13
+ | `role` | `TEXT` | — | Primary key |
14
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
15
+
16
+ **Seeds:** `reviewer`, `engineer`, `admin`, `superadmin`.
17
+
18
+ ### lt_tasks
19
+
20
+ Tracks every workflow execution. Created by the LT interceptor when a workflow starts; updated when it completes or fails.
21
+
22
+ | Column | Type | Default | Description |
23
+ |--------|------|---------|-------------|
24
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
25
+ | `workflow_id` | `TEXT NOT NULL` | — | HotMesh workflow ID (unique per execution) |
26
+ | `workflow_type` | `TEXT NOT NULL` | — | Registered workflow name (e.g., `reviewContent`) |
27
+ | `lt_type` | `TEXT NOT NULL` | — | Classification set by the interceptor |
28
+ | `task_queue` | `TEXT` | — | Task queue the workflow ran on |
29
+ | `modality` | `TEXT` | — | Modality from workflow config |
30
+ | `status` | `TEXT NOT NULL` | `'pending'` | `pending` or `completed` |
31
+ | `priority` | `INTEGER NOT NULL` | `2` | Numeric priority (lower = higher priority) |
32
+ | `signal_id` | `TEXT NOT NULL` | — | HotMesh signal ID for resume/replay |
33
+ | `parent_workflow_id` | `TEXT NOT NULL` | — | ID of the orchestrator that started this workflow |
34
+ | `origin_id` | `TEXT` | — | Correlation ID shared by sibling workflows under the same orchestrator |
35
+ | `parent_id` | `TEXT` | — | Direct parent workflow ID |
36
+ | `trace_id` | `TEXT` | — | Distributed tracing trace ID |
37
+ | `span_id` | `TEXT` | — | Distributed tracing span ID |
38
+ | `initiated_by` | `UUID` | — | FK to `lt_users(id)` — user or bot that started this task |
39
+ | `principal_type` | `TEXT` | `'user'` | `user` or `bot` (for audit filtering) |
40
+ | `started_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | When the workflow began |
41
+ | `completed_at` | `TIMESTAMPTZ` | — | When the workflow finished (null while pending) |
42
+ | `envelope` | `TEXT NOT NULL` | — | JSON-serialized input envelope |
43
+ | `metadata` | `JSONB` | — | Arbitrary metadata attached at workflow start |
44
+ | `error` | `TEXT` | — | Error message if the workflow failed |
45
+ | `milestones` | `JSONB NOT NULL` | `'[]'` | Array of milestone objects emitted during execution |
46
+ | `data` | `TEXT` | — | JSON-serialized workflow return data |
47
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
48
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification (auto-updated by trigger) |
49
+
50
+ **Indexes:**
51
+
52
+ | Index | Columns | Purpose |
53
+ |-------|---------|---------|
54
+ | `idx_lt_tasks_status_type` | `(status, workflow_type, created_at DESC)` | Filter tasks by status and type |
55
+ | `idx_lt_tasks_parent` | `(parent_workflow_id, created_at DESC)` | Find all tasks under an orchestrator |
56
+ | `idx_lt_tasks_lt_type` | `(lt_type, status, created_at DESC)` | Filter by interceptor classification |
57
+ | `idx_lt_tasks_completed` | `(completed_at, status)` | Maintenance queries for old completed tasks |
58
+ | `idx_lt_tasks_signal` | `(signal_id)` | Look up task by HotMesh signal |
59
+ | `idx_lt_tasks_origin` | `(origin_id, created_at DESC)` | Consumer/provider data injection — find sibling tasks sharing an origin |
60
+ | `idx_lt_tasks_workflow_id` | `(workflow_id)` | Resolve workflow handle by workflow ID |
61
+ | `idx_lt_tasks_origin_id` | `(origin_id)` | Look up tasks by origin ID |
62
+ | `idx_lt_tasks_trace` | `(trace_id)` | Look up tasks by trace ID |
63
+
64
+ ### lt_escalations
65
+
66
+ Records human intervention requests. Created when a workflow returns `type: 'escalation'`. Updated when claimed or resolved.
67
+
68
+ | Column | Type | Default | Description |
69
+ |--------|------|---------|-------------|
70
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
71
+ | `type` | `TEXT NOT NULL` | — | Escalation category (e.g., `review`, `verification`) |
72
+ | `subtype` | `TEXT NOT NULL` | — | Subcategory for finer routing |
73
+ | `modality` | `TEXT NOT NULL` | — | Modality from workflow config |
74
+ | `description` | `TEXT` | — | Human-readable reason for the escalation |
75
+ | `status` | `TEXT NOT NULL` | `'pending'` | `pending` or `resolved` |
76
+ | `priority` | `INTEGER NOT NULL` | `2` | Numeric priority |
77
+ | `task_id` | `UUID` | — | FK to `lt_tasks(id)` — the task that triggered this escalation |
78
+ | `origin_id` | `TEXT` | — | Correlation ID from the parent orchestrator |
79
+ | `parent_id` | `TEXT` | — | Direct parent workflow ID |
80
+ | `workflow_id` | `TEXT` | — | HotMesh workflow ID of the escalated workflow |
81
+ | `task_queue` | `TEXT` | — | Task queue the workflow runs on (needed for resolution re-run) |
82
+ | `workflow_type` | `TEXT` | — | Workflow name (needed for resolution re-run) |
83
+ | `role` | `TEXT NOT NULL` | — | Target role — users with this role see the escalation |
84
+ | `assigned_to` | `TEXT` | — | User ID of the claimer |
85
+ | `assigned_until` | `TIMESTAMPTZ` | — | Claim expiry — after this time the escalation returns to the queue |
86
+ | `resolved_at` | `TIMESTAMPTZ` | — | When the escalation was resolved |
87
+ | `claimed_at` | `TIMESTAMPTZ` | — | When the escalation was claimed |
88
+ | `envelope` | `TEXT NOT NULL` | — | JSON-serialized original workflow envelope |
89
+ | `metadata` | `JSONB` | — | Arbitrary metadata |
90
+ | `escalation_payload` | `TEXT` | — | JSON-serialized data the workflow attached to the escalation |
91
+ | `resolver_payload` | `TEXT` | — | JSON-serialized decision from the human reviewer |
92
+ | `trace_id` | `TEXT` | — | Distributed tracing trace ID |
93
+ | `span_id` | `TEXT` | — | Distributed tracing span ID |
94
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
95
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
96
+
97
+ **Claiming is implicit.** There is no separate status for "claimed". An escalation is considered claimed when `assigned_to IS NOT NULL` and `assigned_until > NOW()`. When the claim expires, the escalation is available again without any status change. The `/available` endpoint uses this logic:
98
+
99
+ ```sql
100
+ WHERE status = 'pending'
101
+ AND (assigned_to IS NULL OR assigned_until <= NOW())
102
+ ```
103
+
104
+ **Indexes:**
105
+
106
+ | Index | Columns | Purpose |
107
+ |-------|---------|---------|
108
+ | `idx_lt_escalations_available` | `(status, role, assigned_until, created_at DESC)` | Available escalation query |
109
+ | `idx_lt_escalations_available_v2` | `(role, priority, created_at DESC) WHERE status = 'pending'` | Partial index for priority-ordered available queries |
110
+ | `idx_lt_escalations_assigned` | `(assigned_to, assigned_until, created_at DESC)` | Find escalations claimed by a specific user |
111
+ | `idx_lt_escalations_expiry` | `(assigned_until, assigned_to)` | Expire stale claims |
112
+ | `idx_lt_escalations_role_type` | `(role, status, type, created_at DESC)` | Filter by role + type |
113
+ | `idx_lt_escalations_role_subtype` | `(role, status, type, subtype, created_at DESC)` | Filter by role + type + subtype |
114
+ | `idx_lt_escalations_status` | `(status, created_at DESC)` | General status queries |
115
+ | `idx_lt_escalations_task` | `(task_id)` | Join escalations to their parent task |
116
+ | `idx_lt_escalations_origin` | `(origin_id, created_at DESC)` | Find escalations sharing an origin |
117
+ | `idx_lt_escalations_workflow` | `(workflow_id)` | Look up escalation by workflow ID |
118
+ | `idx_lt_escalations_type` | `(type)` | Filter by escalation type |
119
+ | `idx_lt_escalations_pending_sort` | `(status, priority, created_at DESC)` | Sort pending escalations by priority |
120
+ | `idx_lt_escalations_origin_id` | `(origin_id)` | Look up escalations by origin ID |
121
+ | `idx_lt_escalations_trace` | `(trace_id)` | Look up escalations by trace ID |
122
+ | `idx_lt_escalations_created_desc` | `(created_at DESC)` | Sort by creation time descending |
123
+ | `idx_lt_escalations_updated_desc` | `(updated_at DESC)` | Sort by update time descending |
124
+ | `idx_lt_escalations_priority_desc` | `(priority DESC)` | Sort by priority descending |
125
+
126
+ ### lt_users
127
+
128
+ User and bot identity records. Users are created via the API and assigned roles that determine which escalations they can claim. Bot accounts (`account_type = 'bot'`) are service identities that authenticate with API keys.
129
+
130
+ | Column | Type | Default | Description |
131
+ |--------|------|---------|-------------|
132
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
133
+ | `external_id` | `TEXT UNIQUE NOT NULL` | — | Your application's user identifier |
134
+ | `email` | `TEXT` | — | Email address (optional) |
135
+ | `display_name` | `TEXT` | — | Display name (optional) |
136
+ | `password_hash` | `TEXT` | — | Hashed password for authentication |
137
+ | `account_type` | `TEXT NOT NULL` | `'user'` | `user` or `bot` |
138
+ | `status` | `TEXT NOT NULL` | `'active'` | `active`, `inactive`, or `suspended` |
139
+ | `metadata` | `JSONB` | — | Arbitrary user metadata |
140
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
141
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
142
+
143
+ Status is enforced by a CHECK constraint: `status IN ('active', 'inactive', 'suspended')`. Account type is enforced by: `account_type IN ('user', 'bot')`.
144
+
145
+ **Indexes:**
146
+
147
+ | Index | Columns | Purpose |
148
+ |-------|---------|---------|
149
+ | `idx_lt_users_status` | `(status)` | Filter users by status |
150
+
151
+ ### lt_user_roles
152
+
153
+ Maps users to roles. Each user can hold multiple roles with different permission types.
154
+
155
+ | Column | Type | Default | Description |
156
+ |--------|------|---------|-------------|
157
+ | `user_id` | `UUID NOT NULL` | — | FK to `lt_users(id)`, CASCADE on delete |
158
+ | `role` | `TEXT NOT NULL` | — | Role name (e.g., `reviewer`, `senior-reviewer`) |
159
+ | `type` | `TEXT NOT NULL` | `'member'` | `superadmin`, `admin`, or `member` |
160
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | When the role was assigned |
161
+
162
+ Primary key: `(user_id, role)` — a user can hold each role at most once.
163
+
164
+ Type is enforced by a CHECK constraint: `type IN ('superadmin', 'admin', 'member')`.
165
+
166
+ ### lt_bot_api_keys
167
+
168
+ API keys for bot accounts. Each key is bcrypt-hashed — the raw key is returned once at creation and never stored.
169
+
170
+ | Column | Type | Default | Description |
171
+ |--------|------|---------|-------------|
172
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
173
+ | `name` | `TEXT NOT NULL` | — | Human-readable key name |
174
+ | `user_id` | `UUID NOT NULL` | — | FK to `lt_users(id)`, CASCADE on delete |
175
+ | `key_hash` | `TEXT NOT NULL` | — | bcrypt hash of the raw API key |
176
+ | `scopes` | `TEXT[] NOT NULL` | `'{}'` | Allowed scopes (e.g., `mcp:tool:call`) |
177
+ | `expires_at` | `TIMESTAMPTZ` | — | Optional expiry (null = no expiry) |
178
+ | `last_used_at` | `TIMESTAMPTZ` | — | Updated on each successful validation |
179
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
180
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
181
+
182
+ Unique constraint: `(user_id, name)` — each bot can have at most one key per name.
183
+
184
+ ### lt_config_workflows
185
+
186
+ Workflow registration. Every workflow that uses the LT interceptor must have a row here (or be registered at runtime via the API).
187
+
188
+ | Column | Type | Default | Description |
189
+ |--------|------|---------|-------------|
190
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
191
+ | `workflow_type` | `TEXT UNIQUE NOT NULL` | — | Workflow function name |
192
+ | `invocable` | `BOOLEAN NOT NULL` | `false` | Allow invocation via `POST /api/workflows/:type/invoke` |
193
+ | `task_queue` | `TEXT` | — | Default task queue name |
194
+ | `default_role` | `TEXT NOT NULL` | `'reviewer'` | Role assigned to escalations when the workflow doesn't specify one |
195
+ | `default_modality` | `TEXT NOT NULL` | `'portal'` | Default modality |
196
+ | `description` | `TEXT` | — | Human-readable description |
197
+ | `consumes` | `TEXT[] NOT NULL` | `'{}'` | Array of workflow types whose completed data this workflow receives via `envelope.lt.providers` |
198
+ | `tool_tags` | `TEXT[]` | `'{}'` | Tags for MCP tool discovery |
199
+ | `envelope_schema` | `JSONB` | — | JSON Schema for the workflow input envelope |
200
+ | `resolver_schema` | `JSONB` | — | JSON Schema for the escalation resolver payload |
201
+ | `cron_schedule` | `TEXT` | — | Cron expression for scheduled execution |
202
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
203
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
204
+
205
+ **Indexes:**
206
+
207
+ | Index | Columns | Purpose |
208
+ |-------|---------|---------|
209
+ | `idx_config_workflows_tool_tags` | `(tool_tags)` GIN | Tag-based workflow discovery |
210
+
211
+ ### lt_config_roles
212
+
213
+ Allowed roles per workflow type. A workflow can have multiple roles; any user holding one of these roles can claim its escalations.
214
+
215
+ | Column | Type | Default | Description |
216
+ |--------|------|---------|-------------|
217
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
218
+ | `workflow_type` | `TEXT NOT NULL` | — | FK to `lt_config_workflows(workflow_type)`, CASCADE on delete |
219
+ | `role` | `TEXT NOT NULL` | — | Role name |
220
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
221
+
222
+ Unique constraint: `(workflow_type, role)`.
223
+
224
+ ### lt_config_invocation_roles
225
+
226
+ Roles allowed to invoke a workflow via the API. When a workflow has `invocable: true` and this table has entries for it, only users holding one of these roles (or superadmins) can invoke.
227
+
228
+ | Column | Type | Default | Description |
229
+ |--------|------|---------|-------------|
230
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
231
+ | `workflow_type` | `TEXT NOT NULL` | — | FK to `lt_config_workflows(workflow_type)`, CASCADE on delete |
232
+ | `role` | `TEXT NOT NULL` | — | Role name |
233
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | When the role was assigned |
234
+
235
+ Unique constraint: `(workflow_type, role)`.
236
+
237
+ ### lt_mcp_servers
238
+
239
+ MCP server registration. Stores connection details, cached tool manifests, and compilation hints.
240
+
241
+ | Column | Type | Default | Description |
242
+ |--------|------|---------|-------------|
243
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
244
+ | `name` | `TEXT UNIQUE NOT NULL` | — | Server name |
245
+ | `description` | `TEXT` | — | Human-readable description |
246
+ | `transport_type` | `TEXT NOT NULL` | — | `stdio` or `sse` |
247
+ | `transport_config` | `JSONB` | `'{}'` | Connection configuration |
248
+ | `auto_connect` | `BOOLEAN` | `false` | Connect automatically on startup |
249
+ | `tool_manifest` | `JSONB` | — | Cached tool manifest from the server |
250
+ | `status` | `TEXT` | `'registered'` | `registered`, `connected`, `error`, or `disconnected` |
251
+ | `last_connected_at` | `TIMESTAMPTZ` | — | Last successful connection time |
252
+ | `metadata` | `JSONB` | — | Arbitrary metadata |
253
+ | `tags` | `TEXT[]` | `'{}'` | Tags for server discovery |
254
+ | `compile_hints` | `TEXT` | — | Hints for the workflow compiler |
255
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
256
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
257
+
258
+ **Indexes:**
259
+
260
+ | Index | Columns | Purpose |
261
+ |-------|---------|---------|
262
+ | `idx_lt_mcp_servers_name` | `(name)` | Look up server by name |
263
+ | `idx_lt_mcp_servers_status` | `(status)` | Filter by connection status |
264
+ | `idx_lt_mcp_servers_auto_connect` | `(auto_connect) WHERE auto_connect = true` | Find servers that auto-connect |
265
+ | `idx_lt_mcp_servers_tags` | `(tags)` GIN | Tag-based server discovery |
266
+
267
+ ### lt_config_role_escalations
268
+
269
+ Escalation routing between roles. Defines which roles can escalate to which other roles.
270
+
271
+ | Column | Type | Default | Description |
272
+ |--------|------|---------|-------------|
273
+ | `source_role` | `TEXT NOT NULL` | — | FK to `lt_roles(role)` — the originating role |
274
+ | `target_role` | `TEXT NOT NULL` | — | FK to `lt_roles(role)` — the destination role |
275
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
276
+
277
+ Primary key: `(source_role, target_role)`.
278
+
279
+ **Indexes:**
280
+
281
+ | Index | Columns | Purpose |
282
+ |-------|---------|---------|
283
+ | `idx_config_role_escalations_source` | `(source_role)` | Find escalation targets for a role |
284
+
285
+ ### lt_yaml_workflows
286
+
287
+ Compiled deterministic workflows. Stores DAG definitions, activity manifests, and deployment state.
288
+
289
+ | Column | Type | Default | Description |
290
+ |--------|------|---------|-------------|
291
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
292
+ | `name` | `TEXT UNIQUE NOT NULL` | — | Workflow name |
293
+ | `description` | `TEXT` | — | Human-readable description |
294
+ | `app_id` | `TEXT NOT NULL` | — | HotMesh application ID |
295
+ | `app_version` | `TEXT` | `'1'` | Application version |
296
+ | `source_workflow_id` | `TEXT` | — | ID of the workflow this was compiled from |
297
+ | `source_workflow_type` | `TEXT` | — | Type of the workflow this was compiled from |
298
+ | `yaml_content` | `TEXT NOT NULL` | — | YAML DAG definition |
299
+ | `graph_topic` | `TEXT NOT NULL` | — | HotMesh graph subscription topic |
300
+ | `input_schema` | `JSONB` | `'{}'` | JSON Schema for workflow input |
301
+ | `output_schema` | `JSONB` | `'{}'` | JSON Schema for workflow output |
302
+ | `activity_manifest` | `JSONB` | `'[]'` | Array of activity definitions used by this workflow |
303
+ | `status` | `TEXT` | `'draft'` | `draft`, `deployed`, `active`, or `archived` |
304
+ | `deployed_at` | `TIMESTAMPTZ` | — | When the workflow was deployed |
305
+ | `activated_at` | `TIMESTAMPTZ` | — | When the workflow was activated |
306
+ | `content_version` | `INTEGER` | `1` | Current content version number |
307
+ | `deployed_content_version` | `INTEGER` | — | Content version that is currently deployed |
308
+ | `tags` | `TEXT[]` | `'{}'` | Tags for workflow discovery |
309
+ | `input_field_meta` | `JSONB` | `'[]'` | Metadata about input fields |
310
+ | `metadata` | `JSONB` | — | Arbitrary metadata |
311
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
312
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
313
+
314
+ **Indexes:**
315
+
316
+ | Index | Columns | Purpose |
317
+ |-------|---------|---------|
318
+ | `idx_lt_yaml_workflows_status` | `(status)` | Filter by deployment status |
319
+ | `idx_lt_yaml_workflows_app_id` | `(app_id)` | Look up workflows by application |
320
+ | `idx_lt_yaml_workflows_tags` | `(tags)` GIN | Tag-based workflow discovery |
321
+
322
+ ### lt_yaml_workflow_versions
323
+
324
+ Version history for compiled workflows. Created on each edit.
325
+
326
+ | Column | Type | Default | Description |
327
+ |--------|------|---------|-------------|
328
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
329
+ | `workflow_id` | `UUID NOT NULL` | — | FK to `lt_yaml_workflows(id)`, CASCADE on delete |
330
+ | `version` | `INTEGER NOT NULL` | — | Version number |
331
+ | `yaml_content` | `TEXT NOT NULL` | — | YAML DAG definition for this version |
332
+ | `activity_manifest` | `JSONB` | `'[]'` | Activity definitions for this version |
333
+ | `input_schema` | `JSONB` | `'{}'` | Input schema for this version |
334
+ | `output_schema` | `JSONB` | `'{}'` | Output schema for this version |
335
+ | `input_field_meta` | `JSONB` | `'[]'` | Input field metadata for this version |
336
+ | `change_summary` | `TEXT` | — | Description of what changed |
337
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
338
+
339
+ Unique constraint: `(workflow_id, version)`.
340
+
341
+ **Indexes:**
342
+
343
+ | Index | Columns | Purpose |
344
+ |-------|---------|---------|
345
+ | `idx_lt_yaml_workflow_versions_wf` | `(workflow_id, version DESC)` | Look up latest version for a workflow |
346
+
347
+ ### lt_oauth_tokens
348
+
349
+ Encrypted per-user, per-provider OAuth tokens. Supports multiple credentials per provider via the `label` column.
350
+
351
+ | Column | Type | Default | Description |
352
+ |--------|------|---------|-------------|
353
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
354
+ | `user_id` | `UUID NOT NULL` | — | FK to `lt_users(id)`, CASCADE on delete |
355
+ | `provider` | `TEXT NOT NULL` | — | OAuth provider name (e.g., `google`, `github`) |
356
+ | `label` | `TEXT NOT NULL` | `'default'` | Label for multiple credentials per provider per user |
357
+ | `access_token_enc` | `TEXT NOT NULL` | — | AES-encrypted access token |
358
+ | `refresh_token_enc` | `TEXT` | — | AES-encrypted refresh token |
359
+ | `token_type` | `TEXT NOT NULL` | `'bearer'` | Token type |
360
+ | `scopes` | `TEXT[] NOT NULL` | `'{}'` | Granted scopes |
361
+ | `expires_at` | `TIMESTAMPTZ` | — | Token expiry |
362
+ | `provider_user_id` | `TEXT NOT NULL` | — | User ID at the provider |
363
+ | `provider_email` | `TEXT` | — | Email at the provider |
364
+ | `metadata` | `JSONB` | — | Arbitrary metadata |
365
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
366
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
367
+
368
+ Unique constraint: `(user_id, provider, label)`.
369
+
370
+ ### lt_service_tokens
371
+
372
+ Service tokens for external MCP servers. Each token is hashed — the raw token is returned once at creation.
373
+
374
+ | Column | Type | Default | Description |
375
+ |--------|------|---------|-------------|
376
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
377
+ | `name` | `TEXT UNIQUE NOT NULL` | — | Human-readable token name |
378
+ | `token_hash` | `TEXT NOT NULL` | — | Hashed token value |
379
+ | `server_id` | `UUID` | — | FK to `lt_mcp_servers(id)`, CASCADE on delete |
380
+ | `scopes` | `TEXT[] NOT NULL` | `'{}'` | Allowed scopes |
381
+ | `expires_at` | `TIMESTAMPTZ` | — | Optional expiry |
382
+ | `last_used_at` | `TIMESTAMPTZ` | — | Updated on each use |
383
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
384
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
385
+
386
+ ### lt_ephemeral_credentials
387
+
388
+ Short-lived credential store for sensitive fields in waitFor signal payloads. Supports use-count limits and TTL-based expiry.
389
+
390
+ | Column | Type | Default | Description |
391
+ |--------|------|---------|-------------|
392
+ | `token` | `UUID` | `gen_random_uuid()` | Primary key |
393
+ | `value` | `BYTEA NOT NULL` | — | Encrypted credential value |
394
+ | `label` | `TEXT` | — | Human-readable label |
395
+ | `max_uses` | `INTEGER NOT NULL` | `0` | Maximum retrievals (0 = unlimited) |
396
+ | `use_count` | `INTEGER NOT NULL` | `0` | Current retrieval count |
397
+ | `expires_at` | `TIMESTAMPTZ` | — | TTL-based expiry |
398
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
399
+
400
+ ### lt_namespaces
401
+
402
+ Multi-tenant namespace registry.
403
+
404
+ | Column | Type | Default | Description |
405
+ |--------|------|---------|-------------|
406
+ | `id` | `UUID` | `gen_random_uuid()` | Primary key |
407
+ | `name` | `TEXT UNIQUE NOT NULL` | — | Namespace name |
408
+ | `description` | `TEXT` | — | Human-readable description |
409
+ | `schema_name` | `TEXT NOT NULL` | — | PostgreSQL schema name for this namespace |
410
+ | `is_default` | `BOOLEAN` | `false` | Whether this is the default namespace |
411
+ | `metadata` | `JSONB` | — | Arbitrary metadata |
412
+ | `created_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Row creation time |
413
+ | `updated_at` | `TIMESTAMPTZ NOT NULL` | `NOW()` | Last modification |
414
+
415
+ **Seeds:** `longtail` namespace with `is_default = true`.
416
+
417
+ ## Entity-Relationship Diagram
418
+
419
+ ```
420
+ lt_roles
421
+ ├──< lt_config_role_escalations (source_role → role)
422
+ └──< lt_config_role_escalations (target_role → role)
423
+
424
+ lt_config_workflows
425
+ ├──< lt_config_roles (workflow_type → workflow_type, CASCADE)
426
+ └──< lt_config_invocation_roles (workflow_type → workflow_type, CASCADE)
427
+
428
+ lt_users
429
+ ├──< lt_user_roles (user_id → id, CASCADE)
430
+ ├──< lt_bot_api_keys (user_id → id, CASCADE)
431
+ ├──< lt_oauth_tokens (user_id → id, CASCADE)
432
+ └──< lt_tasks.initiated_by (initiated_by → id, SET NULL)
433
+
434
+ lt_tasks
435
+ └──< lt_escalations (task_id → id)
436
+
437
+ lt_yaml_workflows
438
+ └──< lt_yaml_workflow_versions (workflow_id → id, CASCADE)
439
+
440
+ lt_mcp_servers (standalone — MCP server registry)
441
+ lt_namespaces (standalone — namespace registry)
442
+ lt_migrations (standalone — tracks applied schema files)
443
+ lt_oauth_tokens (user_id → lt_users.id, CASCADE)
444
+ lt_service_tokens (standalone — service token registry)
445
+ lt_ephemeral_credentials (standalone — short-lived credential store)
446
+ ```
447
+
448
+ Arrows point from child to parent. `CASCADE` means deleting the parent deletes the children.
449
+
450
+ ## Trigger
451
+
452
+ All tables with `updated_at` use a shared trigger function:
453
+
454
+ ```sql
455
+ CREATE OR REPLACE FUNCTION lt_set_updated_at()
456
+ RETURNS TRIGGER AS $$
457
+ BEGIN
458
+ NEW.updated_at = NOW();
459
+ RETURN NEW;
460
+ END;
461
+ $$ LANGUAGE plpgsql;
462
+ ```
463
+
464
+ This fires `BEFORE UPDATE` on `lt_tasks`, `lt_escalations`, `lt_users`, `lt_config_workflows`, `lt_mcp_servers`, `lt_yaml_workflows`, and `lt_namespaces`.
465
+
466
+ ## Migrations
467
+
468
+ The migration runner (`services/db/migrate.ts`) reads `.sql` files from `services/db/schemas/`, sorted alphabetically. Each file runs at most once, tracked in `lt_migrations`:
469
+
470
+ ```sql
471
+ CREATE TABLE IF NOT EXISTS lt_migrations (
472
+ id SERIAL PRIMARY KEY,
473
+ name TEXT NOT NULL UNIQUE,
474
+ applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
475
+ );
476
+ ```
477
+
478
+ Migrations are safe to run from multiple containers simultaneously — the `UNIQUE` constraint on `name` prevents double-application. Both API and worker containers can call `migrate()` at startup.