@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
@@ -0,0 +1,87 @@
1
+ import type { LTApiResult, LTApiAuth } from '../types/sdk';
2
+ export declare function listYamlWorkflows(input: {
3
+ status?: string;
4
+ graph_topic?: string;
5
+ app_id?: string;
6
+ search?: string;
7
+ source_workflow_id?: string;
8
+ set_id?: string;
9
+ limit?: number;
10
+ offset?: number;
11
+ }): Promise<LTApiResult>;
12
+ export declare function createYamlWorkflow(input: {
13
+ workflow_id: string;
14
+ task_queue: string;
15
+ workflow_name: string;
16
+ name: string;
17
+ description?: string;
18
+ app_id?: string;
19
+ subscribes?: string;
20
+ tags?: string[];
21
+ compilation_feedback?: string;
22
+ }): Promise<LTApiResult>;
23
+ export declare function createYamlWorkflowDirect(input: {
24
+ name: string;
25
+ description?: string;
26
+ yaml_content: string;
27
+ input_schema?: any;
28
+ activity_manifest?: any[];
29
+ tags?: string[];
30
+ app_id?: string;
31
+ graph_topic?: string;
32
+ }): Promise<LTApiResult>;
33
+ export declare function getAppIds(): Promise<LTApiResult>;
34
+ export declare function getYamlWorkflow(input: {
35
+ id: string;
36
+ }): Promise<LTApiResult>;
37
+ export declare function updateYamlWorkflow(input: {
38
+ id: string;
39
+ [key: string]: any;
40
+ }): Promise<LTApiResult>;
41
+ export declare function regenerateYamlWorkflow(input: {
42
+ id: string;
43
+ task_queue?: string;
44
+ compilation_feedback?: string;
45
+ }): Promise<LTApiResult>;
46
+ export declare function deleteYamlWorkflow(input: {
47
+ id: string;
48
+ }): Promise<LTApiResult>;
49
+ export declare function deployYamlWorkflow(input: {
50
+ id: string;
51
+ }): Promise<LTApiResult>;
52
+ export declare function activateYamlWorkflow(input: {
53
+ id: string;
54
+ }): Promise<LTApiResult>;
55
+ export declare function invokeYamlWorkflow(input: {
56
+ id: string;
57
+ data?: any;
58
+ sync?: boolean;
59
+ timeout?: number;
60
+ execute_as?: string;
61
+ }, auth?: LTApiAuth): Promise<LTApiResult>;
62
+ export declare function archiveYamlWorkflow(input: {
63
+ id: string;
64
+ }): Promise<LTApiResult>;
65
+ export declare function getVersionHistory(input: {
66
+ id: string;
67
+ limit?: number;
68
+ offset?: number;
69
+ }): Promise<LTApiResult>;
70
+ export declare function getVersionSnapshot(input: {
71
+ id: string;
72
+ version: number;
73
+ }): Promise<LTApiResult>;
74
+ export declare function getYamlContent(input: {
75
+ id: string;
76
+ version?: number;
77
+ }): Promise<LTApiResult<string>>;
78
+ export declare function setCronSchedule(input: {
79
+ id: string;
80
+ cron_schedule: string;
81
+ cron_envelope?: any;
82
+ execute_as?: string;
83
+ }): Promise<LTApiResult>;
84
+ export declare function clearCronSchedule(input: {
85
+ id: string;
86
+ }): Promise<LTApiResult>;
87
+ export declare function getCronStatus(): Promise<LTApiResult>;
@@ -0,0 +1,556 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.listYamlWorkflows = listYamlWorkflows;
37
+ exports.createYamlWorkflow = createYamlWorkflow;
38
+ exports.createYamlWorkflowDirect = createYamlWorkflowDirect;
39
+ exports.getAppIds = getAppIds;
40
+ exports.getYamlWorkflow = getYamlWorkflow;
41
+ exports.updateYamlWorkflow = updateYamlWorkflow;
42
+ exports.regenerateYamlWorkflow = regenerateYamlWorkflow;
43
+ exports.deleteYamlWorkflow = deleteYamlWorkflow;
44
+ exports.deployYamlWorkflow = deployYamlWorkflow;
45
+ exports.activateYamlWorkflow = activateYamlWorkflow;
46
+ exports.invokeYamlWorkflow = invokeYamlWorkflow;
47
+ exports.archiveYamlWorkflow = archiveYamlWorkflow;
48
+ exports.getVersionHistory = getVersionHistory;
49
+ exports.getVersionSnapshot = getVersionSnapshot;
50
+ exports.getYamlContent = getYamlContent;
51
+ exports.setCronSchedule = setCronSchedule;
52
+ exports.clearCronSchedule = clearCronSchedule;
53
+ exports.getCronStatus = getCronStatus;
54
+ const yamlDb = __importStar(require("../services/yaml-workflow/db"));
55
+ const yamlGenerator = __importStar(require("../services/yaml-workflow/generator"));
56
+ const yamlDeployer = __importStar(require("../services/yaml-workflow/deployer"));
57
+ const yamlWorkers = __importStar(require("../services/yaml-workflow/workers"));
58
+ const invoke_1 = require("../services/yaml-workflow/invoke");
59
+ const task_1 = require("../services/task");
60
+ const cron_1 = require("../services/cron");
61
+ /** Return true if a Postgres error indicates an invalid/missing ID */
62
+ function isNotFoundError(err) {
63
+ const msg = err?.message ?? '';
64
+ return msg.includes('invalid input syntax for type uuid') || msg.includes('not found');
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // CRUD
68
+ // ---------------------------------------------------------------------------
69
+ async function listYamlWorkflows(input) {
70
+ try {
71
+ const result = await yamlDb.listYamlWorkflows({
72
+ status: input.status,
73
+ graph_topic: input.graph_topic,
74
+ app_id: input.app_id,
75
+ search: input.search,
76
+ source_workflow_id: input.source_workflow_id,
77
+ set_id: input.set_id,
78
+ limit: input.limit,
79
+ offset: input.offset,
80
+ });
81
+ return { status: 200, data: result };
82
+ }
83
+ catch (err) {
84
+ if (isNotFoundError(err)) {
85
+ return { status: 404, error: 'YAML workflow not found' };
86
+ }
87
+ return { status: 500, error: err.message };
88
+ }
89
+ }
90
+ async function createYamlWorkflow(input) {
91
+ try {
92
+ const { workflow_id, task_queue, workflow_name, name, description, app_id, subscribes, tags: userTags, compilation_feedback } = input;
93
+ if (!workflow_id || !task_queue || !workflow_name || !name) {
94
+ return { status: 400, error: 'workflow_id, task_queue, workflow_name, and name are required' };
95
+ }
96
+ if (/-/.test(name)) {
97
+ return { status: 400, error: 'Name must not contain dashes. Use underscores or camelCase (e.g. "screenshot_analyze_store").' };
98
+ }
99
+ // Reject compilation of executions that exhausted their tool rounds
100
+ const task = await (0, task_1.getTaskByWorkflowId)(workflow_id);
101
+ if (task) {
102
+ const milestones = task.milestones ?? [];
103
+ const roundsExhausted = milestones.some((m) => m.name === 'rounds_exhausted');
104
+ if (roundsExhausted) {
105
+ return {
106
+ status: 422,
107
+ error: 'Cannot compile: the source execution exhausted its tool rounds without completing the task. Resolve the escalation and resubmit.',
108
+ };
109
+ }
110
+ }
111
+ // Check for topic collision in the target namespace
112
+ const compileAppId = app_id || 'longtail';
113
+ const compileTopic = subscribes || name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
114
+ const conflicting = await yamlDb.checkTopicConflict(compileAppId, compileTopic);
115
+ if (conflicting) {
116
+ return {
117
+ status: 409,
118
+ error: `Topic "${compileTopic}" is already used by workflow "${conflicting}" in namespace "${compileAppId}". Use a different tool name or namespace.`,
119
+ };
120
+ }
121
+ // Generate YAML from execution
122
+ const result = await yamlGenerator.generateYamlFromExecution({
123
+ workflowId: workflow_id,
124
+ taskQueue: task_queue,
125
+ workflowName: workflow_name,
126
+ name,
127
+ description,
128
+ appId: app_id,
129
+ subscribes,
130
+ compilationFeedback: compilation_feedback,
131
+ });
132
+ // Merge auto-derived tags with user-provided tags
133
+ const mergedTags = [...new Set([...(result.tags || []), ...(Array.isArray(userTags) ? userTags : [])])];
134
+ // Store in DB
135
+ const record = await yamlDb.createYamlWorkflow({
136
+ name,
137
+ description,
138
+ app_id: result.appId,
139
+ yaml_content: result.yaml,
140
+ graph_topic: result.graphTopic,
141
+ input_schema: result.inputSchema,
142
+ output_schema: result.outputSchema,
143
+ activity_manifest: result.activityManifest,
144
+ tags: mergedTags,
145
+ source_workflow_id: workflow_id,
146
+ source_workflow_type: workflow_name,
147
+ original_prompt: result.originalPrompt || undefined,
148
+ category: result.category || undefined,
149
+ metadata: {
150
+ input_field_meta: result.inputFieldMeta,
151
+ ...(result.validationIssues?.length ? { validation_warnings: result.validationIssues } : {}),
152
+ },
153
+ });
154
+ return { status: 201, data: record };
155
+ }
156
+ catch (err) {
157
+ if (err.message?.includes('duplicate key') || err.code === '23505') {
158
+ const msg = err.constraint?.includes('app_topic')
159
+ ? 'A tool with that topic already exists in this namespace'
160
+ : 'A tool with that name already exists';
161
+ return { status: 409, error: msg };
162
+ }
163
+ return { status: 500, error: err.message };
164
+ }
165
+ }
166
+ async function createYamlWorkflowDirect(input) {
167
+ try {
168
+ const { name, description, yaml_content, input_schema, activity_manifest, tags, app_id, graph_topic } = input;
169
+ if (!name || !yaml_content) {
170
+ return { status: 400, error: 'name and yaml_content are required' };
171
+ }
172
+ // Sanitize name (tool name): lowercase alphanumeric, periods, dashes, underscores
173
+ const sanitizedName = name.toLowerCase().replace(/[^a-z0-9._-]/g, '');
174
+ // Sanitize app_id (MCP server name): force lowercase alphanumeric only
175
+ const targetAppId = (app_id || 'longtail').toLowerCase().replace(/[^a-z0-9]/g, '');
176
+ // Sanitize graph topic: lowercase alphanumeric, periods, dashes, underscores
177
+ let graphTopic = (graph_topic || sanitizedName).toLowerCase().replace(/[^a-z0-9._-]/g, '');
178
+ const subscribesMatch = yaml_content.match(/subscribes:\s*(.+)/);
179
+ if (subscribesMatch) {
180
+ graphTopic = subscribesMatch[1].trim().replace(/^['"]|['"]$/g, '').toLowerCase().replace(/[^a-z0-9._-]/g, '');
181
+ }
182
+ // Rewrite the subscribes line in the YAML to match the sanitized topic
183
+ let finalYaml = yaml_content;
184
+ const subscribesRewrite = finalYaml.match(/^(\s*subscribes:\s*)(.+)$/m);
185
+ if (subscribesRewrite) {
186
+ finalYaml = finalYaml.replace(subscribesRewrite[0], `${subscribesRewrite[1]}${graphTopic}`);
187
+ }
188
+ // Also rewrite the app id line to match the sanitized app_id
189
+ const appIdRewrite = finalYaml.match(/^(\s*id:\s*)(.+)$/m);
190
+ if (appIdRewrite) {
191
+ finalYaml = finalYaml.replace(appIdRewrite[0], `${appIdRewrite[1]}${targetAppId}`);
192
+ }
193
+ // Rewrite worker topic fields to match the sanitized topic
194
+ finalYaml = finalYaml.replace(/^(\s*topic:\s*)(.+)$/gm, `$1${graphTopic}`);
195
+ // Check for topic collision in the target namespace
196
+ const conflicting = await yamlDb.checkTopicConflict(targetAppId, graphTopic);
197
+ if (conflicting) {
198
+ return {
199
+ status: 409,
200
+ error: `Topic "${graphTopic}" is already used by workflow "${conflicting}" in namespace "${targetAppId}". Use a different tool name or namespace.`,
201
+ };
202
+ }
203
+ const wf = await yamlDb.createYamlWorkflow({
204
+ name: sanitizedName,
205
+ description,
206
+ app_id: targetAppId,
207
+ yaml_content: finalYaml,
208
+ graph_topic: graphTopic,
209
+ input_schema: input_schema || {},
210
+ output_schema: {},
211
+ activity_manifest: activity_manifest || [],
212
+ tags: tags || [],
213
+ original_prompt: description,
214
+ category: 'builder',
215
+ });
216
+ return { status: 200, data: wf };
217
+ }
218
+ catch (err) {
219
+ return { status: 500, error: err.message };
220
+ }
221
+ }
222
+ async function getAppIds() {
223
+ try {
224
+ const appIds = await yamlDb.getDistinctAppIds();
225
+ return { status: 200, data: { app_ids: appIds } };
226
+ }
227
+ catch (err) {
228
+ return { status: 500, error: err.message };
229
+ }
230
+ }
231
+ async function getYamlWorkflow(input) {
232
+ try {
233
+ const wf = await yamlDb.getYamlWorkflow(input.id);
234
+ if (!wf) {
235
+ return { status: 404, error: 'YAML workflow not found' };
236
+ }
237
+ return { status: 200, data: wf };
238
+ }
239
+ catch (err) {
240
+ if (isNotFoundError(err)) {
241
+ return { status: 404, error: 'YAML workflow not found' };
242
+ }
243
+ return { status: 500, error: err.message };
244
+ }
245
+ }
246
+ async function updateYamlWorkflow(input) {
247
+ try {
248
+ const { id, ...fields } = input;
249
+ const wf = await yamlDb.updateYamlWorkflow(id, fields);
250
+ if (!wf) {
251
+ return { status: 404, error: 'YAML workflow not found' };
252
+ }
253
+ return { status: 200, data: wf };
254
+ }
255
+ catch (err) {
256
+ if (isNotFoundError(err)) {
257
+ return { status: 404, error: 'YAML workflow not found' };
258
+ }
259
+ return { status: 500, error: err.message };
260
+ }
261
+ }
262
+ async function regenerateYamlWorkflow(input) {
263
+ try {
264
+ const wf = await yamlDb.getYamlWorkflow(input.id);
265
+ if (!wf) {
266
+ return { status: 404, error: 'YAML workflow not found' };
267
+ }
268
+ if (wf.status === 'archived') {
269
+ return { status: 400, error: 'Archived workflows cannot be regenerated' };
270
+ }
271
+ if (!wf.source_workflow_id || !wf.source_workflow_type) {
272
+ return { status: 400, error: 'Missing source workflow reference — cannot regenerate' };
273
+ }
274
+ // Look up task queue from the source task record, or use input override
275
+ let taskQueue = input.task_queue;
276
+ if (!taskQueue) {
277
+ const sourceTask = await (0, task_1.getTaskByWorkflowId)(wf.source_workflow_id);
278
+ taskQueue = sourceTask?.task_queue || 'v1';
279
+ }
280
+ const feedback = input.compilation_feedback;
281
+ const result = await yamlGenerator.generateYamlFromExecution({
282
+ workflowId: wf.source_workflow_id,
283
+ taskQueue,
284
+ workflowName: wf.source_workflow_type,
285
+ name: wf.name,
286
+ description: wf.description || undefined,
287
+ appId: wf.app_id,
288
+ compilationFeedback: feedback || undefined,
289
+ priorFailedYaml: feedback ? wf.yaml_content : undefined,
290
+ });
291
+ const updated = await yamlDb.updateYamlWorkflow(wf.id, {
292
+ app_id: result.appId,
293
+ graph_topic: result.graphTopic,
294
+ yaml_content: result.yaml,
295
+ input_schema: result.inputSchema,
296
+ output_schema: result.outputSchema,
297
+ activity_manifest: result.activityManifest,
298
+ tags: result.tags,
299
+ metadata: { input_field_meta: result.inputFieldMeta },
300
+ });
301
+ return { status: 200, data: updated };
302
+ }
303
+ catch (err) {
304
+ if (isNotFoundError(err)) {
305
+ return { status: 404, error: 'YAML workflow not found' };
306
+ }
307
+ return { status: 500, error: err.message };
308
+ }
309
+ }
310
+ async function deleteYamlWorkflow(input) {
311
+ try {
312
+ const wf = await yamlDb.getYamlWorkflow(input.id);
313
+ if (!wf) {
314
+ return { status: 404, error: 'YAML workflow not found' };
315
+ }
316
+ if (wf.status === 'active' || wf.status === 'deployed') {
317
+ return { status: 400, error: 'Cannot delete an active or deployed workflow. Archive it first.' };
318
+ }
319
+ await yamlDb.deleteYamlWorkflow(input.id);
320
+ return { status: 200, data: { deleted: true } };
321
+ }
322
+ catch (err) {
323
+ if (isNotFoundError(err)) {
324
+ return { status: 404, error: 'YAML workflow not found' };
325
+ }
326
+ return { status: 500, error: err.message };
327
+ }
328
+ }
329
+ // ---------------------------------------------------------------------------
330
+ // Deployment
331
+ // ---------------------------------------------------------------------------
332
+ async function deployYamlWorkflow(input) {
333
+ try {
334
+ const wf = await yamlDb.getYamlWorkflow(input.id);
335
+ if (!wf) {
336
+ return { status: 404, error: 'YAML workflow not found' };
337
+ }
338
+ // Use the version declared in the YAML (like package.json)
339
+ const deployVersion = wf.app_version || '1';
340
+ // Deploy + activate merged YAML for the full app_id
341
+ const siblings = await yamlDb.listYamlWorkflowsByAppId(wf.app_id);
342
+ await yamlDeployer.deployAppId(wf.app_id, deployVersion);
343
+ // Register workers and mark all non-archived siblings as active
344
+ for (const sibling of siblings) {
345
+ await yamlDb.updateYamlWorkflowVersion(sibling.id, deployVersion);
346
+ await yamlWorkers.registerWorkersForWorkflow(sibling);
347
+ if (sibling.status === 'draft' || sibling.status === 'deployed') {
348
+ await yamlDb.updateYamlWorkflowStatus(sibling.id, 'active');
349
+ }
350
+ }
351
+ // Mark content as deployed for the entire app_id
352
+ await yamlDb.markAppIdContentDeployed(wf.app_id);
353
+ const updated = await yamlDb.getYamlWorkflow(input.id);
354
+ return { status: 200, data: updated };
355
+ }
356
+ catch (err) {
357
+ if (isNotFoundError(err)) {
358
+ return { status: 404, error: 'YAML workflow not found' };
359
+ }
360
+ return {
361
+ status: 500,
362
+ error: err.message,
363
+ };
364
+ }
365
+ }
366
+ async function activateYamlWorkflow(input) {
367
+ try {
368
+ const wf = await yamlDb.getYamlWorkflow(input.id);
369
+ if (!wf) {
370
+ return { status: 404, error: 'YAML workflow not found' };
371
+ }
372
+ if (wf.status !== 'deployed' && wf.status !== 'active') {
373
+ return { status: 400, error: 'Workflow must be deployed before activation' };
374
+ }
375
+ await yamlDeployer.activateYamlWorkflow(wf.app_id, wf.app_version);
376
+ // Register workers for ALL workflows sharing this app_id
377
+ const siblings = await yamlDb.listYamlWorkflowsByAppId(wf.app_id);
378
+ for (const sibling of siblings) {
379
+ await yamlWorkers.registerWorkersForWorkflow(sibling);
380
+ if (sibling.status === 'deployed') {
381
+ await yamlDb.updateYamlWorkflowStatus(sibling.id, 'active');
382
+ }
383
+ }
384
+ const updated = await yamlDb.getYamlWorkflow(input.id);
385
+ return { status: 200, data: updated };
386
+ }
387
+ catch (err) {
388
+ if (isNotFoundError(err)) {
389
+ return { status: 404, error: 'YAML workflow not found' };
390
+ }
391
+ return { status: 500, error: err.message };
392
+ }
393
+ }
394
+ async function invokeYamlWorkflow(input, auth) {
395
+ try {
396
+ const wf = await yamlDb.getYamlWorkflow(input.id);
397
+ if (!wf) {
398
+ return { status: 404, error: 'YAML workflow not found' };
399
+ }
400
+ if (wf.status !== 'active') {
401
+ return { status: 400, error: 'Workflow must be active to invoke' };
402
+ }
403
+ const result = await (0, invoke_1.invokeYamlWorkflow)(wf, {
404
+ data: input.data,
405
+ sync: input.sync,
406
+ timeout: input.timeout,
407
+ execute_as: input.execute_as,
408
+ userId: auth?.userId,
409
+ });
410
+ return { status: 200, data: result };
411
+ }
412
+ catch (err) {
413
+ if (isNotFoundError(err)) {
414
+ return { status: 404, error: 'YAML workflow not found' };
415
+ }
416
+ return { status: 500, error: err.message };
417
+ }
418
+ }
419
+ async function archiveYamlWorkflow(input) {
420
+ try {
421
+ const wf = await yamlDb.getYamlWorkflow(input.id);
422
+ if (!wf) {
423
+ return { status: 404, error: 'YAML workflow not found' };
424
+ }
425
+ if (wf.status === 'active') {
426
+ await yamlDeployer.stopEngine(wf.app_id);
427
+ }
428
+ const updated = await yamlDb.updateYamlWorkflowStatus(wf.id, 'archived');
429
+ return { status: 200, data: updated };
430
+ }
431
+ catch (err) {
432
+ if (isNotFoundError(err)) {
433
+ return { status: 404, error: 'YAML workflow not found' };
434
+ }
435
+ return { status: 500, error: err.message };
436
+ }
437
+ }
438
+ // ---------------------------------------------------------------------------
439
+ // Versions
440
+ // ---------------------------------------------------------------------------
441
+ async function getVersionHistory(input) {
442
+ try {
443
+ const limit = input.limit ?? 20;
444
+ const offset = input.offset ?? 0;
445
+ const result = await yamlDb.getVersionHistory(input.id, limit, offset);
446
+ return { status: 200, data: result };
447
+ }
448
+ catch (err) {
449
+ if (isNotFoundError(err)) {
450
+ return { status: 404, error: 'YAML workflow not found' };
451
+ }
452
+ return { status: 500, error: err.message };
453
+ }
454
+ }
455
+ async function getVersionSnapshot(input) {
456
+ try {
457
+ const version = input.version;
458
+ if (isNaN(version) || version < 1) {
459
+ return { status: 400, error: 'Invalid version number' };
460
+ }
461
+ const snapshot = await yamlDb.getVersionSnapshot(input.id, version);
462
+ if (!snapshot) {
463
+ return { status: 404, error: `Version ${version} not found` };
464
+ }
465
+ return { status: 200, data: snapshot };
466
+ }
467
+ catch (err) {
468
+ if (isNotFoundError(err)) {
469
+ return { status: 404, error: 'YAML workflow not found' };
470
+ }
471
+ return { status: 500, error: err.message };
472
+ }
473
+ }
474
+ async function getYamlContent(input) {
475
+ try {
476
+ if (input.version) {
477
+ const snapshot = await yamlDb.getVersionSnapshot(input.id, input.version);
478
+ if (!snapshot) {
479
+ return { status: 404, error: `Version ${input.version} not found` };
480
+ }
481
+ return { status: 200, data: snapshot.yaml_content };
482
+ }
483
+ const wf = await yamlDb.getYamlWorkflow(input.id);
484
+ if (!wf) {
485
+ return { status: 404, error: 'YAML workflow not found' };
486
+ }
487
+ return { status: 200, data: wf.yaml_content };
488
+ }
489
+ catch (err) {
490
+ if (isNotFoundError(err)) {
491
+ return { status: 404, error: 'YAML workflow not found' };
492
+ }
493
+ return { status: 500, error: err.message };
494
+ }
495
+ }
496
+ // ---------------------------------------------------------------------------
497
+ // Cron
498
+ // ---------------------------------------------------------------------------
499
+ async function setCronSchedule(input) {
500
+ try {
501
+ const wf = await yamlDb.getYamlWorkflow(input.id);
502
+ if (!wf) {
503
+ return { status: 404, error: 'YAML workflow not found' };
504
+ }
505
+ if (!input.cron_schedule || typeof input.cron_schedule !== 'string') {
506
+ return { status: 400, error: 'cron_schedule is required' };
507
+ }
508
+ const updated = await yamlDb.updateCronSchedule(wf.id, input.cron_schedule.trim(), input.cron_envelope ?? null, input.execute_as ?? null);
509
+ if (updated) {
510
+ await cron_1.cronRegistry.restartYamlCron(updated);
511
+ }
512
+ return { status: 200, data: updated };
513
+ }
514
+ catch (err) {
515
+ if (isNotFoundError(err)) {
516
+ return { status: 404, error: 'YAML workflow not found' };
517
+ }
518
+ return { status: 500, error: err.message };
519
+ }
520
+ }
521
+ async function clearCronSchedule(input) {
522
+ try {
523
+ const wf = await yamlDb.getYamlWorkflow(input.id);
524
+ if (!wf) {
525
+ return { status: 404, error: 'YAML workflow not found' };
526
+ }
527
+ await cron_1.cronRegistry.stopYamlCron(wf.id);
528
+ const updated = await yamlDb.clearCronSchedule(wf.id);
529
+ return { status: 200, data: updated };
530
+ }
531
+ catch (err) {
532
+ if (isNotFoundError(err)) {
533
+ return { status: 404, error: 'YAML workflow not found' };
534
+ }
535
+ return { status: 500, error: err.message };
536
+ }
537
+ }
538
+ async function getCronStatus() {
539
+ try {
540
+ const workflows = await yamlDb.getCronScheduledWorkflows();
541
+ const activeTypes = cron_1.cronRegistry.activeWorkflowTypes;
542
+ const schedules = workflows.map((wf) => ({
543
+ id: wf.id,
544
+ name: wf.name,
545
+ graph_topic: wf.graph_topic,
546
+ app_id: wf.app_id,
547
+ cron_schedule: wf.cron_schedule,
548
+ execute_as: wf.execute_as,
549
+ active: activeTypes.includes(`yaml:${wf.id}`),
550
+ }));
551
+ return { status: 200, data: { schedules } };
552
+ }
553
+ catch (err) {
554
+ return { status: 500, error: err.message };
555
+ }
556
+ }
package/build/index.d.ts CHANGED
@@ -37,3 +37,7 @@ export { getToolContext } from './services/iam/context';
37
37
  export { registerMcpTool } from './services/mcp/register-tool';
38
38
  export { getSystemWorkers, builtinMcpServerFactories } from './system';
39
39
  export { seedSystemMcpServers } from './system/seed';
40
+ export { CallbackEventAdapter } from './lib/events/callback';
41
+ export { createClient } from './sdk';
42
+ export type { LTClient, LTClientOptions } from './sdk';
43
+ export * as api from './api';
package/build/index.js CHANGED
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
39
+ exports.api = exports.createClient = exports.CallbackEventAdapter = exports.seedSystemMcpServers = exports.builtinMcpServerFactories = exports.getSystemWorkers = exports.registerMcpTool = exports.getToolContext = exports.getActivityIdentity = exports.seedExamples = exports.exampleWorkers = exports.McpEscalationStrategy = exports.DefaultEscalationStrategy = exports.escalationStrategyRegistry = exports.McpVisionServer = exports.McpTranslationServer = exports.McpServer = exports.McpClient = exports.McpService = exports.BuiltInMcpAdapter = exports.mcpRegistry = exports.defaultMaintenanceConfig = exports.maintenanceRegistry = exports.PinoLoggerAdapter = exports.loggerRegistry = exports.HoneycombTelemetryAdapter = exports.telemetryRegistry = exports.publishWorkflowEvent = exports.publishEscalationEvent = exports.publishTaskEvent = exports.publishMilestoneEvent = exports.SocketIOEventAdapter = exports.InMemoryEventAdapter = exports.NatsEventAdapter = exports.eventRegistry = exports.ltConfig = exports.UserService = exports.ConfigService = exports.EscalationService = exports.TaskService = exports.signToken = exports.requireAdmin = exports.requireAuth = exports.createAuthMiddleware = exports.JwtAuthAdapter = exports.executeLT = exports.createLTActivityInterceptor = exports.createLTInterceptor = exports.registerLT = exports.start = void 0;
40
40
  const config_1 = require("./modules/config");
41
41
  const logger_1 = require("./lib/logger");
42
42
  const start_1 = require("./start");
@@ -117,6 +117,11 @@ Object.defineProperty(exports, "getSystemWorkers", { enumerable: true, get: func
117
117
  Object.defineProperty(exports, "builtinMcpServerFactories", { enumerable: true, get: function () { return system_1.builtinMcpServerFactories; } });
118
118
  var seed_1 = require("./system/seed");
119
119
  Object.defineProperty(exports, "seedSystemMcpServers", { enumerable: true, get: function () { return seed_1.seedSystemMcpServers; } });
120
+ var callback_1 = require("./lib/events/callback");
121
+ Object.defineProperty(exports, "CallbackEventAdapter", { enumerable: true, get: function () { return callback_1.CallbackEventAdapter; } });
122
+ var sdk_1 = require("./sdk");
123
+ Object.defineProperty(exports, "createClient", { enumerable: true, get: function () { return sdk_1.createClient; } });
124
+ exports.api = __importStar(require("./api"));
120
125
  // ─── Server ──────────────────────────────────────────────────────────────────
121
126
  async function main() {
122
127
  const honeycombKey = process.env.HONEYCOMB_API_KEY;