@hotmeshio/long-tail 0.1.5 → 0.1.7

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 (431) hide show
  1. package/README.md +78 -8
  2. package/build/api/auth.d.ts +5 -0
  3. package/build/api/auth.js +42 -0
  4. package/build/api/bot-accounts.d.ts +50 -0
  5. package/build/api/bot-accounts.js +215 -0
  6. package/build/api/controlplane.d.ts +20 -0
  7. package/build/api/controlplane.js +110 -0
  8. package/build/api/dba.d.ts +15 -0
  9. package/build/api/dba.js +68 -0
  10. package/build/api/escalations.d.ts +70 -0
  11. package/build/api/escalations.js +656 -0
  12. package/build/api/exports.d.ts +32 -0
  13. package/build/api/exports.js +146 -0
  14. package/build/api/index.d.ts +18 -0
  15. package/build/api/index.js +54 -0
  16. package/build/api/insight.d.ts +29 -0
  17. package/build/api/insight.js +90 -0
  18. package/build/api/maintenance.d.ts +7 -0
  19. package/build/api/maintenance.js +28 -0
  20. package/build/api/mcp-runs.d.ts +16 -0
  21. package/build/api/mcp-runs.js +62 -0
  22. package/build/api/mcp.d.ts +52 -0
  23. package/build/api/mcp.js +212 -0
  24. package/build/api/namespaces.d.ts +7 -0
  25. package/build/{routes/escalations/helpers.js → api/namespaces.js} +24 -12
  26. package/build/api/roles.d.ts +25 -0
  27. package/build/api/roles.js +159 -0
  28. package/build/api/settings.d.ts +2 -0
  29. package/build/api/settings.js +35 -0
  30. package/build/api/tasks.d.ts +27 -0
  31. package/build/api/tasks.js +96 -0
  32. package/build/api/users.d.ts +44 -0
  33. package/build/api/users.js +162 -0
  34. package/build/api/workflow-sets.d.ts +26 -0
  35. package/build/api/workflow-sets.js +119 -0
  36. package/build/api/workflows.d.ts +48 -0
  37. package/build/api/workflows.js +298 -0
  38. package/build/api/yaml-workflows.d.ts +87 -0
  39. package/build/api/yaml-workflows.js +556 -0
  40. package/build/index.d.ts +4 -0
  41. package/build/index.js +6 -1
  42. package/build/lib/db/migrate.js +3 -6
  43. package/{lib → build/lib}/db/schemas/001_schema.sql +3 -0
  44. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  45. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  46. package/{lib → build/lib}/db/schemas/011_system_workflow_configs.sql +14 -0
  47. package/build/lib/db/schemas/016_streamable_http.sql +7 -0
  48. package/build/lib/events/callback.d.ts +41 -0
  49. package/build/lib/events/callback.js +98 -0
  50. package/build/modules/config.js +1 -1
  51. package/build/routes/auth.js +37 -36
  52. package/build/routes/bot-accounts.js +34 -164
  53. package/build/routes/controlplane.js +20 -60
  54. package/build/routes/dba.js +18 -28
  55. package/build/routes/docs.js +25 -7
  56. package/build/routes/escalations/bulk.js +17 -192
  57. package/build/routes/escalations/list.js +29 -75
  58. package/build/routes/escalations/resolve.js +3 -193
  59. package/build/routes/escalations/single.js +13 -122
  60. package/build/routes/exports.js +44 -95
  61. package/build/routes/index.js +2 -0
  62. package/build/routes/insight.js +61 -40
  63. package/build/routes/maintenance.js +41 -17
  64. package/build/routes/mcp-runs.js +52 -60
  65. package/build/routes/mcp.js +55 -161
  66. package/build/routes/namespaces.js +9 -20
  67. package/build/routes/roles.js +23 -97
  68. package/build/routes/settings.js +37 -25
  69. package/build/routes/tasks.js +28 -64
  70. package/build/routes/users.js +24 -113
  71. package/build/routes/workflow-sets.d.ts +2 -0
  72. package/build/routes/workflow-sets.js +98 -0
  73. package/build/routes/workflows/config.js +23 -57
  74. package/build/routes/workflows/discovery.js +11 -85
  75. package/build/routes/workflows/invocation.js +16 -84
  76. package/build/routes/yaml-workflows/cron.d.ts +2 -0
  77. package/build/routes/yaml-workflows/cron.js +68 -0
  78. package/build/routes/yaml-workflows/crud.js +38 -193
  79. package/build/routes/yaml-workflows/deployment.js +15 -140
  80. package/build/routes/yaml-workflows/index.js +4 -1
  81. package/build/routes/yaml-workflows/versions.js +20 -58
  82. package/build/sdk/index.d.ts +327 -0
  83. package/build/sdk/index.js +298 -0
  84. package/build/services/controlplane/index.d.ts +1 -2
  85. package/build/services/controlplane/index.js +3 -3
  86. package/build/services/controlplane/sql.d.ts +2 -2
  87. package/build/services/controlplane/sql.js +4 -5
  88. package/build/services/controlplane/types.d.ts +1 -0
  89. package/build/services/cron/index.d.ts +17 -0
  90. package/build/services/cron/index.js +94 -1
  91. package/build/services/export/index.js +6 -1
  92. package/build/services/hotmesh-utils.js +2 -4
  93. package/build/services/insight/index.d.ts +18 -0
  94. package/build/services/insight/index.js +60 -0
  95. package/build/services/mcp/client/connection.d.ts +9 -0
  96. package/build/services/mcp/client/connection.js +49 -1
  97. package/build/services/mcp/client/tools.js +13 -1
  98. package/build/services/mcp/db-server/schemas.d.ts +2 -2
  99. package/build/services/mcp/db.d.ts +1 -1
  100. package/build/services/mcp/db.js +10 -0
  101. package/build/services/mcp/playwright-server/schemas.d.ts +4 -4
  102. package/build/services/mcp/sql.d.ts +1 -1
  103. package/build/services/mcp/sql.js +2 -2
  104. package/build/services/mcp/types.d.ts +3 -1
  105. package/build/services/mcp-runs/sql.js +1 -1
  106. package/build/services/workflow-sets/db.d.ts +16 -0
  107. package/build/services/workflow-sets/db.js +78 -0
  108. package/build/services/workflow-sets/index.d.ts +1 -0
  109. package/build/services/workflow-sets/index.js +11 -0
  110. package/build/services/workflow-sets/sql.d.ts +6 -0
  111. package/build/services/workflow-sets/sql.js +24 -0
  112. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  113. package/build/services/yaml-workflow/db-utils.js +4 -0
  114. package/build/services/yaml-workflow/db.d.ts +8 -0
  115. package/build/services/yaml-workflow/db.js +41 -0
  116. package/build/services/yaml-workflow/invoke.d.ts +19 -0
  117. package/build/services/yaml-workflow/invoke.js +80 -0
  118. package/build/services/yaml-workflow/pipeline/build/dag.js +1 -1
  119. package/build/services/yaml-workflow/pipeline/build/wiring.d.ts +1 -1
  120. package/build/services/yaml-workflow/pipeline/build/wiring.js +102 -2
  121. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  122. package/build/services/yaml-workflow/pipeline/prompts.js +44 -1
  123. package/build/services/yaml-workflow/sql.d.ts +5 -1
  124. package/build/services/yaml-workflow/sql.js +23 -3
  125. package/build/services/yaml-workflow/types.d.ts +16 -1
  126. package/build/services/yaml-workflow/workers/callbacks.js +16 -2
  127. package/build/services/yaml-workflow/workers/register.js +36 -1
  128. package/build/start/adapters.js +4 -0
  129. package/build/system/index.js +12 -0
  130. package/build/system/mcp-servers/admin/schemas.d.ts +12 -12
  131. package/build/system/mcp-servers/db-query/schemas.d.ts +2 -2
  132. package/build/system/mcp-servers/knowledge.js +1 -1
  133. package/build/system/mcp-servers/playwright/schemas.d.ts +18 -18
  134. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +34 -34
  135. package/build/system/mcp-servers/playwright-cli/tools-capture.js +5 -1
  136. package/build/system/mcp-servers/vision.js +54 -17
  137. package/build/system/seed/server-definitions.d.ts +7 -0
  138. package/build/system/seed/server-definitions.js +6 -2
  139. package/build/system/seed/tool-manifests-workflows.d.ts +7 -0
  140. package/build/system/seed/tool-manifests-workflows.js +10 -3
  141. package/build/system/workflows/mcp-workflow-builder/activities/caches.d.ts +5 -0
  142. package/build/system/workflows/mcp-workflow-builder/activities/caches.js +8 -0
  143. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +2 -0
  144. package/build/system/workflows/mcp-workflow-builder/activities/index.js +8 -0
  145. package/build/system/workflows/mcp-workflow-builder/activities/llm.d.ts +2 -0
  146. package/build/system/workflows/mcp-workflow-builder/activities/llm.js +25 -0
  147. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +11 -0
  148. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +34 -0
  149. package/build/system/workflows/mcp-workflow-builder/index.d.ts +16 -0
  150. package/build/system/workflows/mcp-workflow-builder/index.js +253 -0
  151. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +8 -0
  152. package/build/system/workflows/mcp-workflow-builder/prompts.js +316 -0
  153. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  154. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  155. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  156. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  157. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  158. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  159. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  160. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  161. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  162. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  163. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  164. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  165. package/build/system/workflows/shared/tool-loader.js +3 -0
  166. package/build/tsconfig.tsbuildinfo +1 -1
  167. package/build/types/index.d.ts +1 -0
  168. package/build/types/mcp.d.ts +4 -3
  169. package/build/types/sdk.d.ts +27 -0
  170. package/build/types/sdk.js +2 -0
  171. package/build/types/workflow-set.d.ts +44 -0
  172. package/build/types/workflow-set.js +5 -0
  173. package/build/types/yaml-workflow.d.ts +6 -2
  174. package/dashboard/dist/assets/AdminDashboard-DRjkRSjJ.js +2 -0
  175. package/dashboard/dist/assets/{AdminDashboard-CTyAMUJR.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
  176. package/dashboard/dist/assets/AvailableEscalationsPage-CnivX4Tz.js +2 -0
  177. package/dashboard/dist/assets/AvailableEscalationsPage-CnivX4Tz.js.map +1 -0
  178. package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
  179. package/dashboard/dist/assets/{BotPicker-C51nKFEu.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
  180. package/dashboard/dist/assets/{CollapsibleSection-BSyfd8uL.js → CollapsibleSection-DQpaVA0M.js} +2 -2
  181. package/dashboard/dist/assets/{CollapsibleSection-BSyfd8uL.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
  182. package/dashboard/dist/assets/{ConfirmDeleteModal-CBdhia5T.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
  183. package/dashboard/dist/assets/{ConfirmDeleteModal-CBdhia5T.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
  184. package/dashboard/dist/assets/{CopyableId-dGlewBCS.js → CopyableId-AqoZayBG.js} +2 -2
  185. package/dashboard/dist/assets/{CopyableId-dGlewBCS.js.map → CopyableId-AqoZayBG.js.map} +1 -1
  186. package/dashboard/dist/assets/CredentialsPage-qGw1kQzi.js +2 -0
  187. package/dashboard/dist/assets/CredentialsPage-qGw1kQzi.js.map +1 -0
  188. package/dashboard/dist/assets/{CustomDurationPicker-BataWFj8.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
  189. package/dashboard/dist/assets/{CustomDurationPicker-BataWFj8.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
  190. package/dashboard/dist/assets/{DataTable-B3uf5CCo.js → DataTable-DKvSKoVG.js} +2 -2
  191. package/dashboard/dist/assets/{DataTable-B3uf5CCo.js.map → DataTable-DKvSKoVG.js.map} +1 -1
  192. package/dashboard/dist/assets/{ElapsedCell-G5oSwTpT.js → ElapsedCell-B0yrReGQ.js} +2 -2
  193. package/dashboard/dist/assets/{ElapsedCell-G5oSwTpT.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
  194. package/dashboard/dist/assets/{EmptyState-BChBJNGS.js → EmptyState-X0fIzYID.js} +2 -2
  195. package/dashboard/dist/assets/{EmptyState-BChBJNGS.js.map → EmptyState-X0fIzYID.js.map} +1 -1
  196. package/dashboard/dist/assets/{EscalationsOverview-CxUv8xjG.js → EscalationsOverview-BQAT9W7r.js} +2 -2
  197. package/dashboard/dist/assets/{EscalationsOverview-CxUv8xjG.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
  198. package/dashboard/dist/assets/{EventTable-CVt8B0BZ.js → EventTable-CX1KNLhZ.js} +2 -2
  199. package/dashboard/dist/assets/{EventTable-CVt8B0BZ.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
  200. package/dashboard/dist/assets/{FilterBar-CShf0oe7.js → FilterBar-DMTvuQy-.js} +2 -2
  201. package/dashboard/dist/assets/{FilterBar-CShf0oe7.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
  202. package/dashboard/dist/assets/ListToolbar-DTOSxoEy.js +2 -0
  203. package/dashboard/dist/assets/ListToolbar-DTOSxoEy.js.map +1 -0
  204. package/dashboard/dist/assets/{McpOverview-CbaZRnJl.js → McpOverview-BaKTIWrG.js} +2 -2
  205. package/dashboard/dist/assets/{McpOverview-CbaZRnJl.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
  206. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
  207. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
  208. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
  209. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
  210. package/dashboard/dist/assets/McpRunDetailPage-CKs1RWeV.js +2 -0
  211. package/dashboard/dist/assets/McpRunDetailPage-CKs1RWeV.js.map +1 -0
  212. package/dashboard/dist/assets/McpRunsPage-CcPD_tY1.js +2 -0
  213. package/dashboard/dist/assets/McpRunsPage-CcPD_tY1.js.map +1 -0
  214. package/dashboard/dist/assets/{Modal-CI5RBPOQ.js → Modal-_2AbWxJT.js} +2 -2
  215. package/dashboard/dist/assets/{Modal-CI5RBPOQ.js.map → Modal-_2AbWxJT.js.map} +1 -1
  216. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
  217. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js.map +1 -0
  218. package/dashboard/dist/assets/{PageHeader-SMD9qtOO.js → PageHeader-DVr5Qyzm.js} +2 -2
  219. package/dashboard/dist/assets/{PageHeader-SMD9qtOO.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
  220. package/dashboard/dist/assets/{PageHeaderWithStats-TikLQsTp.js → PageHeaderWithStats-D0KRASML.js} +2 -2
  221. package/dashboard/dist/assets/{PageHeaderWithStats-TikLQsTp.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
  222. package/dashboard/dist/assets/{PriorityBadge-CQ0EsLTA.js → PriorityBadge-Bx2559OU.js} +2 -2
  223. package/dashboard/dist/assets/{PriorityBadge-CQ0EsLTA.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
  224. package/dashboard/dist/assets/ProcessDetailPage-69I--sry.js +2 -0
  225. package/dashboard/dist/assets/ProcessDetailPage-69I--sry.js.map +1 -0
  226. package/dashboard/dist/assets/ProcessesListPage-BDpUbua2.js +2 -0
  227. package/dashboard/dist/assets/ProcessesListPage-BDpUbua2.js.map +1 -0
  228. package/dashboard/dist/assets/{RolePill-Crj4TH5p.js → RolePill-CcAqEaSt.js} +2 -2
  229. package/dashboard/dist/assets/{RolePill-Crj4TH5p.js.map → RolePill-CcAqEaSt.js.map} +1 -1
  230. package/dashboard/dist/assets/{RolesPage-C_RInUwS.js → RolesPage-Cl23Hjet.js} +2 -2
  231. package/dashboard/dist/assets/{RolesPage-C_RInUwS.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
  232. package/dashboard/dist/assets/{RowActions-Cp5HyK_w.js → RowActions-B4mqIt3Z.js} +2 -2
  233. package/dashboard/dist/assets/{RowActions-Cp5HyK_w.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
  234. package/dashboard/dist/assets/{StatCard-BKZLSgNV.js → StatCard-Cz_2OjAZ.js} +2 -2
  235. package/dashboard/dist/assets/{StatCard-BKZLSgNV.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
  236. package/dashboard/dist/assets/{StatusBadge-BYNGGZK5.js → StatusBadge-Wi2FJZsn.js} +2 -2
  237. package/dashboard/dist/assets/{StatusBadge-BYNGGZK5.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
  238. package/dashboard/dist/assets/StepIndicator-PW5NRDMb.js +2 -0
  239. package/dashboard/dist/assets/StepIndicator-PW5NRDMb.js.map +1 -0
  240. package/dashboard/dist/assets/{StickyPagination-CTosgiU2.js → StickyPagination-Bl2Uzz65.js} +2 -2
  241. package/dashboard/dist/assets/{StickyPagination-CTosgiU2.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
  242. package/dashboard/dist/assets/{SwimlaneTimeline-ylG5Ps1s.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
  243. package/dashboard/dist/assets/{SwimlaneTimeline-ylG5Ps1s.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
  244. package/dashboard/dist/assets/TagInput-BLtf86Ly.js +2 -0
  245. package/dashboard/dist/assets/TagInput-BLtf86Ly.js.map +1 -0
  246. package/dashboard/dist/assets/{TaskDetailPage-C9pDGdD2.js → TaskDetailPage-BXJFX74D.js} +2 -2
  247. package/dashboard/dist/assets/{TaskDetailPage-C9pDGdD2.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
  248. package/dashboard/dist/assets/{TaskQueuePill-BtJbZTT0.js → TaskQueuePill-CWYj3xKe.js} +2 -2
  249. package/dashboard/dist/assets/{TaskQueuePill-BtJbZTT0.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
  250. package/dashboard/dist/assets/{TasksListPage-DtFLUEhg.js → TasksListPage-C3cX94Mw.js} +2 -2
  251. package/dashboard/dist/assets/{TasksListPage-DtFLUEhg.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
  252. package/dashboard/dist/assets/{TimeAgo-WuM6xImZ.js → TimeAgo-B_5yDDHV.js} +2 -2
  253. package/dashboard/dist/assets/{TimeAgo-WuM6xImZ.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
  254. package/dashboard/dist/assets/{TimestampCell-IVL_-Upy.js → TimestampCell-DRX724uU.js} +2 -2
  255. package/dashboard/dist/assets/{TimestampCell-IVL_-Upy.js.map → TimestampCell-DRX724uU.js.map} +1 -1
  256. package/dashboard/dist/assets/{UserName-DU9qeg13.js → UserName-Ca8FA469.js} +2 -2
  257. package/dashboard/dist/assets/{UserName-DU9qeg13.js.map → UserName-Ca8FA469.js.map} +1 -1
  258. package/dashboard/dist/assets/WorkflowExecutionPage-BBYWEV2P.js +2 -0
  259. package/dashboard/dist/assets/WorkflowExecutionPage-BBYWEV2P.js.map +1 -0
  260. package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
  261. package/dashboard/dist/assets/{WorkflowPill-Diw8iWBP.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
  262. package/dashboard/dist/assets/WorkflowsDashboard-Drl3juz9.js +2 -0
  263. package/dashboard/dist/assets/WorkflowsDashboard-Drl3juz9.js.map +1 -0
  264. package/dashboard/dist/assets/{WorkflowsOverview-CPuvA4t3.js → WorkflowsOverview-03IRrDLg.js} +2 -2
  265. package/dashboard/dist/assets/{WorkflowsOverview-CPuvA4t3.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
  266. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
  267. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
  268. package/dashboard/dist/assets/{bots-BPiZXf2h.js → bots-DZEXcgiJ.js} +2 -2
  269. package/dashboard/dist/assets/{bots-BPiZXf2h.js.map → bots-DZEXcgiJ.js.map} +1 -1
  270. package/dashboard/dist/assets/{escalation-DTY_OKRh.js → escalation-Cw48lNaF.js} +2 -2
  271. package/dashboard/dist/assets/{escalation-DTY_OKRh.js.map → escalation-Cw48lNaF.js.map} +1 -1
  272. package/dashboard/dist/assets/{escalation-columns-C91fHSkp.js → escalation-columns-NINpo3qf.js} +2 -2
  273. package/dashboard/dist/assets/{escalation-columns-C91fHSkp.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
  274. package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
  275. package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
  276. package/dashboard/dist/assets/helpers-fk_qr729.js +2 -0
  277. package/dashboard/dist/assets/helpers-fk_qr729.js.map +1 -0
  278. package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
  279. package/dashboard/dist/assets/{index-CDWOfCmi.js.map → index-B98ipWxE.js.map} +1 -1
  280. package/dashboard/dist/assets/{index-D_qEAYrg.js → index-BIG3KooI.js} +2 -2
  281. package/dashboard/dist/assets/{index-D_qEAYrg.js.map → index-BIG3KooI.js.map} +1 -1
  282. package/dashboard/dist/assets/{index-DSzSoku1.js → index-BwN3KP_L.js} +91 -93
  283. package/dashboard/dist/assets/index-BwN3KP_L.js.map +1 -0
  284. package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
  285. package/dashboard/dist/assets/index-Bxe8h1x4.js.map +1 -0
  286. package/dashboard/dist/assets/index-CNI7k7oB.js +6 -0
  287. package/dashboard/dist/assets/index-CNI7k7oB.js.map +1 -0
  288. package/dashboard/dist/assets/index-CORHB0WC.js +2 -0
  289. package/dashboard/dist/assets/index-CORHB0WC.js.map +1 -0
  290. package/dashboard/dist/assets/index-DcIKW-cZ.css +1 -0
  291. package/dashboard/dist/assets/index-Dj-z-x8M.js +2 -0
  292. package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
  293. package/dashboard/dist/assets/index-DwRytW9O.js +5 -0
  294. package/dashboard/dist/assets/index-DwRytW9O.js.map +1 -0
  295. package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
  296. package/dashboard/dist/assets/index-aRvL-dXp.js.map +1 -0
  297. package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
  298. package/dashboard/dist/assets/{index-BtOwLI0K.js.map → index-b03HlbnH.js.map} +1 -1
  299. package/dashboard/dist/assets/mcp-BZoFryNc.js +2 -0
  300. package/dashboard/dist/assets/mcp-BZoFryNc.js.map +1 -0
  301. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
  302. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
  303. package/dashboard/dist/assets/{mcp-runs-DmXYJD19.js → mcp-runs-BaEKnf5v.js} +2 -2
  304. package/dashboard/dist/assets/{mcp-runs-DmXYJD19.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
  305. package/dashboard/dist/assets/{namespaces-DoGa7jc7.js → namespaces-BwnZI4_A.js} +2 -2
  306. package/dashboard/dist/assets/{namespaces-DoGa7jc7.js.map → namespaces-BwnZI4_A.js.map} +1 -1
  307. package/dashboard/dist/assets/{roles-wCdQ2Z7k.js → roles-Bgn1K8zU.js} +2 -2
  308. package/dashboard/dist/assets/{roles-wCdQ2Z7k.js.map → roles-Bgn1K8zU.js.map} +1 -1
  309. package/dashboard/dist/assets/{settings-DDe_L7JT.js → settings-CizYiutL.js} +2 -2
  310. package/dashboard/dist/assets/{settings-DDe_L7JT.js.map → settings-CizYiutL.js.map} +1 -1
  311. package/dashboard/dist/assets/{tasks-3Hih8Bt7.js → tasks-Bmte_hc4.js} +2 -2
  312. package/dashboard/dist/assets/{tasks-3Hih8Bt7.js.map → tasks-Bmte_hc4.js.map} +1 -1
  313. package/dashboard/dist/assets/useEventHooks-CUCxpiI2.js +2 -0
  314. package/dashboard/dist/assets/useEventHooks-CUCxpiI2.js.map +1 -0
  315. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js +2 -0
  316. package/dashboard/dist/assets/useExpandedRows-Cg9iq6Vy.js.map +1 -0
  317. package/dashboard/dist/assets/{useYamlActivityEvents-B5dHec6Y.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
  318. package/dashboard/dist/assets/useYamlActivityEvents-Cum02Ej9.js.map +1 -0
  319. package/dashboard/dist/assets/{users-BTagPmGW.js → users-NSDgTt-z.js} +2 -2
  320. package/dashboard/dist/assets/{users-BTagPmGW.js.map → users-NSDgTt-z.js.map} +1 -1
  321. package/dashboard/dist/assets/{vendor-icons-DCLlGYO9.js → vendor-icons-D1DdudfH.js} +141 -66
  322. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  323. package/dashboard/dist/assets/{workflows-B20dR3NE.js → workflows-k0XRdGXx.js} +2 -2
  324. package/dashboard/dist/assets/{workflows-B20dR3NE.js.map → workflows-k0XRdGXx.js.map} +1 -1
  325. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
  326. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
  327. package/dashboard/dist/index.html +3 -3
  328. package/docs/api/mcp-servers.md +60 -2
  329. package/docs/architecture.md +3 -3
  330. package/docs/dashboard.md +1 -1
  331. package/docs/epic-integration.md +224 -0
  332. package/docs/escalation-strategies.md +2 -3
  333. package/docs/events.md +28 -0
  334. package/docs/mcp.md +301 -31
  335. package/docs/sdk.md +177 -0
  336. package/docs/story.md +157 -0
  337. package/docs/workflow-builder.md +371 -0
  338. package/package.json +5 -4
  339. package/build/routes/escalations/helpers.d.ts +0 -5
  340. package/build/routes/resolve.d.ts +0 -9
  341. package/build/routes/resolve.js +0 -19
  342. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  343. package/build/routes/yaml-workflows/helpers.js +0 -8
  344. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +0 -2
  345. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +0 -2
  346. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +0 -1
  347. package/dashboard/dist/assets/BotPicker-C51nKFEu.js +0 -2
  348. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +0 -2
  349. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js.map +0 -1
  350. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +0 -5
  351. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +0 -1
  352. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +0 -2
  353. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +0 -1
  354. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +0 -2
  355. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +0 -1
  356. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +0 -2
  357. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +0 -1
  358. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +0 -2
  359. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +0 -1
  360. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +0 -2
  361. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +0 -1
  362. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +0 -2
  363. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +0 -1
  364. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +0 -2
  365. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +0 -1
  366. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +0 -2
  367. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +0 -1
  368. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +0 -2
  369. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +0 -1
  370. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +0 -2
  371. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +0 -2
  372. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +0 -1
  373. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +0 -2
  374. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +0 -1
  375. package/dashboard/dist/assets/helpers-DBUZ9pnG.js +0 -2
  376. package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +0 -1
  377. package/dashboard/dist/assets/index-BOeA-gfK.js +0 -17
  378. package/dashboard/dist/assets/index-BOeA-gfK.js.map +0 -1
  379. package/dashboard/dist/assets/index-BZ6K_kmL.js +0 -3
  380. package/dashboard/dist/assets/index-BZ6K_kmL.js.map +0 -1
  381. package/dashboard/dist/assets/index-Bpm0yeoi.js +0 -2
  382. package/dashboard/dist/assets/index-Bpm0yeoi.js.map +0 -1
  383. package/dashboard/dist/assets/index-BtOwLI0K.js +0 -2
  384. package/dashboard/dist/assets/index-CBF3ZvRZ.js +0 -6
  385. package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +0 -1
  386. package/dashboard/dist/assets/index-CDWOfCmi.js +0 -2
  387. package/dashboard/dist/assets/index-Ce6sL__n.js +0 -2
  388. package/dashboard/dist/assets/index-Ce6sL__n.js.map +0 -1
  389. package/dashboard/dist/assets/index-DSzSoku1.js.map +0 -1
  390. package/dashboard/dist/assets/index-gCy9XX3W.css +0 -1
  391. package/dashboard/dist/assets/mcp-BzVpaaKF.js +0 -2
  392. package/dashboard/dist/assets/mcp-BzVpaaKF.js.map +0 -1
  393. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +0 -2
  394. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +0 -1
  395. package/dashboard/dist/assets/useNatsEvents-DeGKHFTX.js +0 -2
  396. package/dashboard/dist/assets/useNatsEvents-DeGKHFTX.js.map +0 -1
  397. package/dashboard/dist/assets/useYamlActivityEvents-B5dHec6Y.js.map +0 -1
  398. package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +0 -1
  399. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +0 -2
  400. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +0 -1
  401. package/docs/img/01-login.png +0 -0
  402. package/docs/img/02-dashboard-home.png +0 -0
  403. package/docs/img/03-processes-list.png +0 -0
  404. package/docs/img/04-escalations-list.png +0 -0
  405. package/docs/img/05-mcp-servers.png +0 -0
  406. package/docs/img/06-mcp-pipelines.png +0 -0
  407. package/docs/img/07-workflows-list.png +0 -0
  408. package/docs/img/compilation/01-query-submit.png +0 -0
  409. package/docs/img/compilation/02-mcp-servers.png +0 -0
  410. package/docs/img/compilation/03-query-completed.png +0 -0
  411. package/docs/img/compilation/04-wizard-original.png +0 -0
  412. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  413. package/docs/img/compilation/06-wizard-profile.png +0 -0
  414. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  415. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  416. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  417. package/docs/img/compilation/10-wizard-verify.png +0 -0
  418. package/lib/db/README.md +0 -8
  419. /package/{lib → build/lib}/db/schemas/002_seed.sql +0 -0
  420. /package/{lib → build/lib}/db/schemas/003_workflow_discovery.sql +0 -0
  421. /package/{lib → build/lib}/db/schemas/004_query_router.sql +0 -0
  422. /package/{lib → build/lib}/db/schemas/005_triage_router.sql +0 -0
  423. /package/{lib → build/lib}/db/schemas/006_oauth.sql +0 -0
  424. /package/{lib → build/lib}/db/schemas/007_security.sql +0 -0
  425. /package/{lib → build/lib}/db/schemas/008_bot_accounts.sql +0 -0
  426. /package/{lib → build/lib}/db/schemas/009_audit_trail.sql +0 -0
  427. /package/{lib → build/lib}/db/schemas/010_credential_providers.sql +0 -0
  428. /package/{lib → build/lib}/db/schemas/012_drop_modality.sql +0 -0
  429. /package/{lib → build/lib}/db/schemas/013_execute_as.sql +0 -0
  430. /package/{lib → build/lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
  431. /package/{lib → build/lib}/db/schemas/015_knowledge.sql +0 -0
@@ -4,13 +4,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.VOLUME_BY_STREAM = exports.COUNT_PROCESSED_SINCE = exports.COUNT_PENDING = exports.LIST_APPS = void 0;
5
5
  /**
6
6
  * List all HotMesh applications from the global registry.
7
- * Keys follow the pattern `hmsh:a:{appId}`. Non-expired only.
7
+ * Active apps only.
8
8
  */
9
9
  exports.LIST_APPS = `
10
- SELECT DISTINCT key FROM hotmesh_applications
11
- WHERE key LIKE 'hmsh:a:%'
12
- AND (expiry IS NULL OR expiry > NOW())
13
- ORDER BY key`;
10
+ SELECT app_id, version FROM hmsh_applications
11
+ WHERE active = TRUE
12
+ ORDER BY app_id`;
14
13
  // ─── Stream statistics ──────────────────────────────────────────────────────
15
14
  //
16
15
  // HotMesh v0.11.0 split the single `streams` table into `engine_streams`
@@ -1,6 +1,7 @@
1
1
  /** Type definitions for the control plane service. */
2
2
  export interface ControlPlaneApp {
3
3
  appId: string;
4
+ version: string;
4
5
  }
5
6
  export interface StreamStats {
6
7
  pending: number;
@@ -1,4 +1,5 @@
1
1
  import type { LTWorkflowConfig } from '../../types';
2
+ import type { LTYamlWorkflowRecord } from '../../types/yaml-workflow';
2
3
  /**
3
4
  * Singleton registry for workflow cron schedules.
4
5
  *
@@ -30,6 +31,22 @@ declare class LTCronRegistry {
30
31
  * Stops the old cron (if any) and starts a new one if cron_schedule is set.
31
32
  */
32
33
  restartCron(config: LTWorkflowConfig): Promise<void>;
34
+ /**
35
+ * Load all YAML workflows with a cron_schedule and start Virtual.cron for each.
36
+ */
37
+ connectYamlCrons(): Promise<void>;
38
+ /**
39
+ * Start a single Virtual.cron for a YAML workflow.
40
+ */
41
+ startYamlCron(wf: LTYamlWorkflowRecord): Promise<void>;
42
+ /**
43
+ * Stop a single YAML workflow cron.
44
+ */
45
+ stopYamlCron(yamlWfId: string): Promise<void>;
46
+ /**
47
+ * Restart a YAML workflow cron after config change.
48
+ */
49
+ restartYamlCron(wf: LTYamlWorkflowRecord): Promise<void>;
33
50
  /**
34
51
  * Stop all active crons. Call during graceful shutdown.
35
52
  */
@@ -42,6 +42,8 @@ const configService = __importStar(require("../config"));
42
42
  const principal_1 = require("../iam/principal");
43
43
  const CRON_TOPIC_PREFIX = 'lt.cron';
44
44
  const CRON_ID_PREFIX = 'lt-cron';
45
+ const YAML_CRON_TOPIC_PREFIX = 'lt.cron.yaml';
46
+ const YAML_CRON_ID_PREFIX = 'lt-cron-yaml';
45
47
  /**
46
48
  * Singleton registry for workflow cron schedules.
47
49
  *
@@ -71,6 +73,8 @@ class LTCronRegistry {
71
73
  for (const config of cronConfigs) {
72
74
  await this.startCron(config);
73
75
  }
76
+ // Connect YAML workflow crons
77
+ await this.connectYamlCrons();
74
78
  this.connected = true;
75
79
  if (cronConfigs.length > 0) {
76
80
  logger_1.loggerRegistry.info(`[lt-cron] started ${cronConfigs.length} cron(s): ${cronConfigs.map((c) => c.workflow_type).join(', ')}`);
@@ -171,12 +175,101 @@ class LTCronRegistry {
171
175
  logger_1.loggerRegistry.info(`[lt-cron] restarted ${config.workflow_type} (${config.cron_schedule})`);
172
176
  }
173
177
  }
178
+ // ── YAML workflow crons ────────────────────────────────────────────────────
179
+ /**
180
+ * Load all YAML workflows with a cron_schedule and start Virtual.cron for each.
181
+ */
182
+ async connectYamlCrons() {
183
+ const { getCronScheduledWorkflows } = await Promise.resolve().then(() => __importStar(require('../yaml-workflow/db')));
184
+ const yamlWfs = await getCronScheduledWorkflows();
185
+ for (const wf of yamlWfs) {
186
+ await this.startYamlCron(wf);
187
+ }
188
+ if (yamlWfs.length > 0) {
189
+ logger_1.loggerRegistry.info(`[lt-cron] started ${yamlWfs.length} YAML cron(s): ${yamlWfs.map((w) => w.graph_topic).join(', ')}`);
190
+ }
191
+ }
192
+ /**
193
+ * Start a single Virtual.cron for a YAML workflow.
194
+ */
195
+ async startYamlCron(wf) {
196
+ if (!wf.cron_schedule)
197
+ return;
198
+ const connection = (0, db_1.getConnection)();
199
+ const topic = `${YAML_CRON_TOPIC_PREFIX}.${wf.id}`;
200
+ const cronId = `${YAML_CRON_ID_PREFIX}-${wf.id}`;
201
+ const cronEnvelope = wf.cron_envelope || {};
202
+ const wfId = wf.id;
203
+ const graphTopic = wf.graph_topic;
204
+ const appId = wf.app_id;
205
+ let cronCallCount = 0;
206
+ await hotmesh_1.Virtual.cron({
207
+ topic,
208
+ connection,
209
+ callback: async () => {
210
+ try {
211
+ cronCallCount++;
212
+ logger_1.loggerRegistry.info(`[lt-cron] tick #${cronCallCount} at ${new Date().toISOString()} — pub(${appId}/${graphTopic})`);
213
+ const { getEngine } = await Promise.resolve().then(() => __importStar(require('../yaml-workflow/deployer')));
214
+ const engine = await getEngine(appId);
215
+ await engine.pub(graphTopic, cronEnvelope, undefined, { entity: graphTopic });
216
+ logger_1.loggerRegistry.info(`[lt-cron] tick #${cronCallCount} published successfully`);
217
+ }
218
+ catch (err) {
219
+ logger_1.loggerRegistry.error(`[lt-cron] tick #${cronCallCount} failed: ${err?.message}`);
220
+ }
221
+ },
222
+ args: [],
223
+ options: {
224
+ id: cronId,
225
+ interval: wf.cron_schedule,
226
+ },
227
+ });
228
+ this.activeCrons.set(`yaml:${wf.id}`, cronId);
229
+ }
230
+ /**
231
+ * Stop a single YAML workflow cron.
232
+ */
233
+ async stopYamlCron(yamlWfId) {
234
+ const key = `yaml:${yamlWfId}`;
235
+ const cronId = this.activeCrons.get(key);
236
+ if (!cronId)
237
+ return;
238
+ const connection = (0, db_1.getConnection)();
239
+ const topic = `${YAML_CRON_TOPIC_PREFIX}.${yamlWfId}`;
240
+ try {
241
+ await hotmesh_1.Virtual.interrupt({
242
+ topic,
243
+ connection,
244
+ options: { id: cronId },
245
+ });
246
+ }
247
+ catch (err) {
248
+ logger_1.loggerRegistry.warn(`[lt-cron] interrupt failed for YAML workflow ${yamlWfId}: ${err?.message}`);
249
+ }
250
+ this.activeCrons.delete(key);
251
+ }
252
+ /**
253
+ * Restart a YAML workflow cron after config change.
254
+ */
255
+ async restartYamlCron(wf) {
256
+ await this.stopYamlCron(wf.id);
257
+ if (wf.cron_schedule && wf.status === 'active') {
258
+ await this.startYamlCron(wf);
259
+ logger_1.loggerRegistry.info(`[lt-cron] restarted YAML cron ${wf.graph_topic} (${wf.cron_schedule})`);
260
+ }
261
+ }
174
262
  /**
175
263
  * Stop all active crons. Call during graceful shutdown.
176
264
  */
177
265
  async disconnect() {
178
266
  for (const workflowType of [...this.activeCrons.keys()]) {
179
- await this.stopCron(workflowType);
267
+ if (workflowType.startsWith('yaml:')) {
268
+ await this.stopYamlCron(workflowType.replace('yaml:', ''));
269
+ }
270
+ else {
271
+ await this.stopCron(workflowType);
272
+ }
180
273
  }
181
274
  this.connected = false;
182
275
  }
@@ -148,12 +148,16 @@ async function listJobs(params) {
148
148
  CASE WHEN j.updated_at != j.created_at THEN j.updated_at
149
149
  WHEN ju.value IS NOT NULL THEN to_timestamp(ju.value, 'YYYYMMDDHH24MISS.MS')
150
150
  ELSE j.updated_at
151
- END as updated_at
151
+ END as updated_at,
152
+ ws.id as set_id
152
153
  FROM durable.jobs j
153
154
  LEFT JOIN durable.jobs_attributes ju
154
155
  ON ju.job_id = j.id
155
156
  AND ju.symbol IN (SELECT value FROM ju_symbols)
156
157
  AND (ju.dimension IS NULL OR ju.dimension = '')
158
+ LEFT JOIN lt_workflow_sets ws
159
+ ON ws.source_workflow_id = REPLACE(j.key, 'hmsh:durable:j:', '')
160
+ AND j.entity = 'mcpWorkflowPlanner'
157
161
  WHERE ${where}
158
162
  ORDER BY ${buildJobOrderBy(params.sort_by, params.order)}
159
163
  LIMIT $${idx++} OFFSET $${idx++}`, [...values, limit, offset]),
@@ -165,6 +169,7 @@ async function listJobs(params) {
165
169
  is_live: row.is_live,
166
170
  created_at: row.created_at,
167
171
  updated_at: row.updated_at,
172
+ ...(row.set_id ? { set_id: row.set_id } : {}),
168
173
  }));
169
174
  return { jobs, total: parseInt(countResult.rows[0].count, 10) };
170
175
  }
@@ -81,13 +81,11 @@ exports.LOAD_SYMBOL_MAP = LOAD_SYMBOL_MAP;
81
81
  */
82
82
  async function loadSymbolMap(schema, appId) {
83
83
  const pool = (0, db_1.getPool)();
84
- const symKeyPrefix = `hmsh:${appId}:sym:keys:`;
85
84
  try {
86
- const result = await pool.query((0, exports.LOAD_SYMBOL_MAP)(schema), [`${symKeyPrefix}%`]);
85
+ const result = await pool.query((0, exports.LOAD_SYMBOL_MAP)(schema), ['keys:%']);
87
86
  const reverseMap = {};
88
87
  for (const row of result.rows) {
89
- const symbolName = row.key.slice(symKeyPrefix.length);
90
- if (row.field && row.value && symbolName !== '') {
88
+ if (row.field && row.value) {
91
89
  reverseMap[row.value] = row.field;
92
90
  }
93
91
  }
@@ -28,4 +28,22 @@ export interface DescribeResult {
28
28
  tags: string[];
29
29
  }
30
30
  export declare function startMcpQuery(input: McpQueryInput): Promise<McpQueryResult>;
31
+ export interface WorkflowBuilderInput {
32
+ prompt: string;
33
+ tags?: string[];
34
+ wait?: boolean;
35
+ feedback?: string;
36
+ prior_yaml?: string;
37
+ answers?: string;
38
+ prior_questions?: string[];
39
+ userId?: string;
40
+ }
41
+ export declare function startWorkflowBuilder(input: WorkflowBuilderInput): Promise<McpQueryResult>;
42
+ export interface WorkflowPlannerInput {
43
+ specification: string;
44
+ setId: string;
45
+ wait?: boolean;
46
+ userId?: string;
47
+ }
48
+ export declare function startWorkflowPlanner(input: WorkflowPlannerInput): Promise<McpQueryResult>;
31
49
  export declare function describeWorkflow(input: DescribeInput): Promise<DescribeResult>;
@@ -5,6 +5,8 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.startMcpQuery = startMcpQuery;
8
+ exports.startWorkflowBuilder = startWorkflowBuilder;
9
+ exports.startWorkflowPlanner = startWorkflowPlanner;
8
10
  exports.describeWorkflow = describeWorkflow;
9
11
  const hotmesh_1 = require("@hotmeshio/hotmesh");
10
12
  const db_1 = require("../../lib/db");
@@ -44,6 +46,64 @@ async function startMcpQuery(input) {
44
46
  duration_ms: Date.now() - startTime,
45
47
  };
46
48
  }
49
+ async function startWorkflowBuilder(input) {
50
+ const { prompt, tags, wait = true, feedback, prior_yaml, answers, prior_questions, userId } = input;
51
+ const startTime = Date.now();
52
+ const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
53
+ const workflowId = `wf-builder-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
54
+ const handle = await client.workflow.start({
55
+ args: [{
56
+ data: { prompt, tags, feedback, prior_yaml, answers, prior_questions },
57
+ metadata: { source: 'dashboard' },
58
+ lt: { userId },
59
+ }],
60
+ taskQueue: 'long-tail-system',
61
+ workflowName: 'mcpWorkflowBuilder',
62
+ workflowId,
63
+ expire: defaults_1.JOB_EXPIRE_SECS,
64
+ entity: 'mcpWorkflowBuilder',
65
+ });
66
+ if (wait === false) {
67
+ return { workflow_id: workflowId, status: 'started', prompt };
68
+ }
69
+ const result = await handle.result({ state: true });
70
+ const data = result?.data || result;
71
+ return {
72
+ ...data,
73
+ prompt,
74
+ workflow_id: workflowId,
75
+ duration_ms: Date.now() - startTime,
76
+ };
77
+ }
78
+ async function startWorkflowPlanner(input) {
79
+ const { specification, setId, wait = true, userId } = input;
80
+ const startTime = Date.now();
81
+ const client = new hotmesh_1.Durable.Client({ connection: (0, db_1.getConnection)() });
82
+ const workflowId = `wf-planner-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
83
+ const handle = await client.workflow.start({
84
+ args: [{
85
+ data: { specification, setId },
86
+ metadata: { source: 'dashboard' },
87
+ lt: { userId },
88
+ }],
89
+ taskQueue: 'long-tail-system',
90
+ workflowName: 'mcpWorkflowPlanner',
91
+ workflowId,
92
+ expire: defaults_1.JOB_EXPIRE_SECS,
93
+ entity: 'mcpWorkflowPlanner',
94
+ });
95
+ if (wait === false) {
96
+ return { workflow_id: workflowId, status: 'started', prompt: specification.slice(0, 200) };
97
+ }
98
+ const result = await handle.result({ state: true });
99
+ const data = result?.data || result;
100
+ return {
101
+ ...data,
102
+ prompt: specification.slice(0, 200),
103
+ workflow_id: workflowId,
104
+ duration_ms: Date.now() - startTime,
105
+ };
106
+ }
47
107
  // ── Workflow description generation ──────────────────────────────────────────
48
108
  async function describeWorkflow(input) {
49
109
  const { prompt, result_title, result_summary } = input;
@@ -40,6 +40,15 @@ export declare function listServerTools(serverId: string): Promise<LTMcpToolMani
40
40
  * Check if a server is connected.
41
41
  */
42
42
  export declare function isConnected(serverId: string): boolean;
43
+ /**
44
+ * Test connectivity to an MCP server without persisting.
45
+ * Creates a temporary client, connects, lists tools, then disconnects.
46
+ */
47
+ export declare function testConnection(transportType: 'stdio' | 'sse' | 'streamable-http', transportConfig: Record<string, any>): Promise<{
48
+ success: boolean;
49
+ tools: LTMcpToolManifest[];
50
+ error?: string;
51
+ }>;
43
52
  /**
44
53
  * Clear all state. Used in tests.
45
54
  */
@@ -41,10 +41,12 @@ exports.connectAutoServers = connectAutoServers;
41
41
  exports.disconnectAll = disconnectAll;
42
42
  exports.listServerTools = listServerTools;
43
43
  exports.isConnected = isConnected;
44
+ exports.testConnection = testConnection;
44
45
  exports.clear = clear;
45
46
  const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
46
47
  const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
47
48
  const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js");
49
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
48
50
  const inMemory_js_1 = require("@modelcontextprotocol/sdk/inMemory.js");
49
51
  const logger_1 = require("../../../lib/logger");
50
52
  const mcpDbService = __importStar(require("../db"));
@@ -106,13 +108,17 @@ async function connectToServer(server) {
106
108
  }
107
109
  const client = new index_js_1.Client({ name: 'long-tail', version: '1.0.0' });
108
110
  let transport;
109
- if (server.transport_type === 'stdio') {
111
+ const ttype = server.transport_type;
112
+ if (ttype === 'stdio') {
110
113
  transport = new stdio_js_1.StdioClientTransport({
111
114
  command: server.transport_config.command,
112
115
  args: server.transport_config.args || [],
113
116
  env: server.transport_config.env,
114
117
  });
115
118
  }
119
+ else if (ttype === 'streamable-http') {
120
+ transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(server.transport_config.url));
121
+ }
116
122
  else {
117
123
  transport = new sse_js_1.SSEClientTransport(new URL(server.transport_config.url));
118
124
  }
@@ -272,6 +278,48 @@ async function listServerTools(serverId) {
272
278
  function isConnected(serverId) {
273
279
  return clients.has(serverId);
274
280
  }
281
+ /**
282
+ * Test connectivity to an MCP server without persisting.
283
+ * Creates a temporary client, connects, lists tools, then disconnects.
284
+ */
285
+ async function testConnection(transportType, transportConfig) {
286
+ const client = new index_js_1.Client({ name: 'long-tail-test', version: '1.0.0' });
287
+ const timeout = setTimeout(() => { throw new Error('Connection timed out (10s)'); }, 10_000);
288
+ try {
289
+ let transport;
290
+ if (transportType === 'stdio') {
291
+ transport = new stdio_js_1.StdioClientTransport({
292
+ command: transportConfig.command,
293
+ args: transportConfig.args || [],
294
+ env: transportConfig.env,
295
+ });
296
+ }
297
+ else if (transportType === 'streamable-http') {
298
+ transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(transportConfig.url));
299
+ }
300
+ else {
301
+ transport = new sse_js_1.SSEClientTransport(new URL(transportConfig.url));
302
+ }
303
+ await client.connect(transport);
304
+ const { tools } = await client.listTools();
305
+ const manifest = tools.map((t) => ({
306
+ name: t.name,
307
+ description: t.description || '',
308
+ inputSchema: t.inputSchema || {},
309
+ }));
310
+ return { success: true, tools: manifest };
311
+ }
312
+ catch (err) {
313
+ return { success: false, tools: [], error: err.message };
314
+ }
315
+ finally {
316
+ clearTimeout(timeout);
317
+ try {
318
+ await client.close();
319
+ }
320
+ catch { /* ignore close errors */ }
321
+ }
322
+ }
275
323
  /**
276
324
  * Clear all state. Used in tests.
277
325
  */
@@ -58,6 +58,7 @@ function deriveAuthFromToolContext() {
58
58
  * Resolves the server by ID or name, auto-connecting built-in servers.
59
59
  */
60
60
  async function callServerTool(serverId, toolName, args, authContext) {
61
+ logger_1.loggerRegistry.debug(`[lt-mcp:call] entering ${serverId}/${toolName} argKeys=[${Object.keys(args).join(',')}]`);
61
62
  const client = await (0, connection_1.resolveClient)(serverId);
62
63
  if (!client) {
63
64
  throw new Error(`MCP server ${serverId} is not connected`);
@@ -79,13 +80,24 @@ async function callServerTool(serverId, toolName, args, authContext) {
79
80
  const textContent = result.content.find((c) => c.type === 'text');
80
81
  if (textContent && 'text' in textContent) {
81
82
  try {
82
- return JSON.parse(textContent.text);
83
+ const parsed = JSON.parse(textContent.text);
84
+ const isError = result.isError || ('error' in parsed);
85
+ logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} ok=${!isError} resultKeys=[${Object.keys(parsed).join(',')}]`);
86
+ return parsed;
83
87
  }
84
88
  catch {
89
+ // Non-JSON text — wrap as error object when isError flag is set
90
+ // to prevent raw strings from being spread as character indices downstream.
91
+ if (result.isError) {
92
+ logger_1.loggerRegistry.warn(`[lt-mcp:call] leaving ${serverId}/${toolName} error: ${textContent.text.slice(0, 200)}`);
93
+ return { error: textContent.text };
94
+ }
95
+ logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} raw text (${textContent.text.length} chars)`);
85
96
  return textContent.text;
86
97
  }
87
98
  }
88
99
  }
100
+ logger_1.loggerRegistry.debug(`[lt-mcp:call] leaving ${serverId}/${toolName} non-text content (${Array.isArray(result.content) ? result.content.length : 0} blocks)`);
89
101
  return result.content;
90
102
  }
91
103
  /**
@@ -14,8 +14,8 @@ export declare const findTasksSchema: z.ZodObject<{
14
14
  }, {
15
15
  status?: "pending" | "in_progress" | "completed" | "needs_intervention" | "failed" | undefined;
16
16
  workflow_type?: string | undefined;
17
- limit?: number | undefined;
18
17
  workflow_id?: string | undefined;
18
+ limit?: number | undefined;
19
19
  origin_id?: string | undefined;
20
20
  }>;
21
21
  export declare const findEscalationsSchema: z.ZodObject<{
@@ -34,8 +34,8 @@ export declare const findEscalationsSchema: z.ZodObject<{
34
34
  role?: string | undefined;
35
35
  status?: "pending" | "resolved" | undefined;
36
36
  type?: string | undefined;
37
- priority?: number | undefined;
38
37
  limit?: number | undefined;
38
+ priority?: number | undefined;
39
39
  }>;
40
40
  export declare const getProcessSummarySchema: z.ZodObject<{
41
41
  workflow_type: z.ZodOptional<z.ZodString>;
@@ -3,7 +3,7 @@ import type { CreateMcpServerInput } from './types';
3
3
  export declare function createMcpServer(input: CreateMcpServerInput): Promise<LTMcpServerRecord>;
4
4
  export declare function getMcpServer(id: string): Promise<LTMcpServerRecord | null>;
5
5
  export declare function getMcpServerByName(name: string): Promise<LTMcpServerRecord | null>;
6
- export declare function updateMcpServer(id: string, updates: Partial<Pick<CreateMcpServerInput, 'name' | 'description' | 'transport_type' | 'transport_config' | 'auto_connect' | 'metadata' | 'tags'>>): Promise<LTMcpServerRecord | null>;
6
+ export declare function updateMcpServer(id: string, updates: Partial<Pick<CreateMcpServerInput, 'name' | 'description' | 'transport_type' | 'transport_config' | 'auto_connect' | 'metadata' | 'tags' | 'compile_hints' | 'credential_providers'>>): Promise<LTMcpServerRecord | null>;
7
7
  export declare function deleteMcpServer(id: string): Promise<boolean>;
8
8
  export declare function updateMcpServerStatus(id: string, status: LTMcpServerStatus, toolManifest?: LTMcpToolManifest[]): Promise<void>;
9
9
  export declare function listMcpServers(filters: {
@@ -21,6 +21,8 @@ async function createMcpServer(input) {
21
21
  input.auto_connect ?? false,
22
22
  input.metadata ? JSON.stringify(input.metadata) : null,
23
23
  input.tags || [],
24
+ input.compile_hints || null,
25
+ input.credential_providers || [],
24
26
  ]);
25
27
  return rows[0];
26
28
  }
@@ -67,6 +69,14 @@ async function updateMcpServer(id, updates) {
67
69
  sets.push(`tags = $${idx++}`);
68
70
  values.push(updates.tags);
69
71
  }
72
+ if (updates.compile_hints !== undefined) {
73
+ sets.push(`compile_hints = $${idx++}`);
74
+ values.push(updates.compile_hints || null);
75
+ }
76
+ if (updates.credential_providers !== undefined) {
77
+ sets.push(`credential_providers = $${idx++}`);
78
+ values.push(updates.credential_providers);
79
+ }
70
80
  if (sets.length === 0)
71
81
  return getMcpServer(id);
72
82
  values.push(id);
@@ -17,13 +17,13 @@ export declare const screenshotSchema: z.ZodObject<{
17
17
  }, "strip", z.ZodTypeAny, {
18
18
  path: string;
19
19
  page_id?: string | undefined;
20
- full_page?: boolean | undefined;
21
20
  selector?: string | undefined;
21
+ full_page?: boolean | undefined;
22
22
  }, {
23
23
  path: string;
24
24
  page_id?: string | undefined;
25
- full_page?: boolean | undefined;
26
25
  selector?: string | undefined;
26
+ full_page?: boolean | undefined;
27
27
  }>;
28
28
  export declare const clickSchema: z.ZodObject<{
29
29
  page_id: z.ZodOptional<z.ZodString>;
@@ -54,12 +54,12 @@ export declare const waitForSchema: z.ZodObject<{
54
54
  timeout: z.ZodOptional<z.ZodNumber>;
55
55
  }, "strip", z.ZodTypeAny, {
56
56
  selector: string;
57
- timeout?: number | undefined;
58
57
  page_id?: string | undefined;
58
+ timeout?: number | undefined;
59
59
  }, {
60
60
  selector: string;
61
- timeout?: number | undefined;
62
61
  page_id?: string | undefined;
62
+ timeout?: number | undefined;
63
63
  }>;
64
64
  export declare const evaluateSchema: z.ZodObject<{
65
65
  page_id: z.ZodOptional<z.ZodString>;
@@ -1,4 +1,4 @@
1
- export declare const CREATE_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, metadata, tags)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n RETURNING *";
1
+ export declare const CREATE_MCP_SERVER = "\n INSERT INTO lt_mcp_servers\n (name, description, transport_type, transport_config, auto_connect, metadata, tags, compile_hints, credential_providers)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n RETURNING *";
2
2
  export declare const GET_MCP_SERVER = "\n SELECT * FROM lt_mcp_servers WHERE id = $1";
3
3
  export declare const GET_MCP_SERVER_BY_NAME = "\n SELECT * FROM lt_mcp_servers WHERE name = $1";
4
4
  export declare const DELETE_MCP_SERVER = "\n DELETE FROM lt_mcp_servers WHERE id = $1";
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.SEED_MCP_SERVER = exports.DELETE_STALE_BUILTIN_SERVERS = exports.HEALTH_DURABLE_WORKFLOWS = exports.HEALTH_WORKFLOW_CONFIGS = exports.HEALTH_COMPILED_WORKFLOWS = exports.HEALTH_MCP_SERVER_LIST = exports.HEALTH_MCP_SERVERS = exports.HEALTH_RECENT_ACTIVITY = exports.HEALTH_ACTIVE_WORKFLOW_TYPES = exports.HEALTH_ESCALATION_COUNTS = exports.HEALTH_TASK_COUNTS = exports.GET_AUTO_CONNECT_SERVERS = exports.UPDATE_STATUS = exports.UPDATE_STATUS_CONNECTED = exports.DELETE_MCP_SERVER = exports.GET_MCP_SERVER_BY_NAME = exports.GET_MCP_SERVER = exports.CREATE_MCP_SERVER = void 0;
5
5
  exports.CREATE_MCP_SERVER = `
6
6
  INSERT INTO lt_mcp_servers
7
- (name, description, transport_type, transport_config, auto_connect, metadata, tags)
8
- VALUES ($1, $2, $3, $4, $5, $6, $7)
7
+ (name, description, transport_type, transport_config, auto_connect, metadata, tags, compile_hints, credential_providers)
8
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
9
9
  RETURNING *`;
10
10
  exports.GET_MCP_SERVER = `
11
11
  SELECT * FROM lt_mcp_servers WHERE id = $1`;
@@ -2,11 +2,13 @@
2
2
  export interface CreateMcpServerInput {
3
3
  name: string;
4
4
  description?: string;
5
- transport_type: 'stdio' | 'sse';
5
+ transport_type: 'stdio' | 'sse' | 'streamable-http';
6
6
  transport_config: Record<string, any>;
7
7
  auto_connect?: boolean;
8
8
  metadata?: Record<string, any>;
9
9
  tags?: string[];
10
+ compile_hints?: string;
11
+ credential_providers?: string[];
10
12
  }
11
13
  export interface BuiltInMcpAdapterOptions {
12
14
  server?: {
@@ -20,7 +20,7 @@ exports.GET_JOB_ATTRIBUTES = GET_JOB_ATTRIBUTES;
20
20
  // ─── Queries (queries.ts) ───────────────────────────────────────────────────
21
21
  const LIST_JOBS = (schema, appId, where, limitIdx, offsetIdx) => `WITH ju_symbols AS (
22
22
  SELECT value FROM ${schema}.symbols
23
- WHERE key LIKE 'hmsh:${appId}:sym:keys:%' AND field = 'metadata/ju'
23
+ WHERE key LIKE 'keys:%' AND field = 'metadata/ju'
24
24
  )
25
25
  SELECT j.key, j.entity, j.status, j.is_live, j.created_at,
26
26
  CASE WHEN j.updated_at != j.created_at THEN j.updated_at
@@ -0,0 +1,16 @@
1
+ import type { LTWorkflowSetRecord, LTWorkflowSetStatus, CreateWorkflowSetInput, PlanItem } from '../../types/workflow-set';
2
+ export declare function createWorkflowSet(input: CreateWorkflowSetInput): Promise<LTWorkflowSetRecord>;
3
+ export declare function getWorkflowSet(id: string): Promise<LTWorkflowSetRecord | null>;
4
+ export declare function updateWorkflowSetPlan(id: string, plan: PlanItem[], namespaces: string[]): Promise<LTWorkflowSetRecord | null>;
5
+ export declare function updateWorkflowSetStatus(id: string, status: LTWorkflowSetStatus): Promise<LTWorkflowSetRecord | null>;
6
+ export declare function updateWorkflowSetSourceWorkflow(id: string, sourceWorkflowId: string): Promise<void>;
7
+ export declare function deleteWorkflowSet(id: string): Promise<boolean>;
8
+ export declare function listWorkflowSets(filters: {
9
+ status?: LTWorkflowSetStatus;
10
+ search?: string;
11
+ limit?: number;
12
+ offset?: number;
13
+ }): Promise<{
14
+ sets: LTWorkflowSetRecord[];
15
+ total: number;
16
+ }>;