@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
package/README.md CHANGED
@@ -82,9 +82,39 @@ curl -X PUT http://localhost:3000/api/workflows/reviewContent/config \
82
82
 
83
83
  De-certifying removes the interceptor. The workflow continues as a standard durable workflow — same code, different guarantees.
84
84
 
85
- ## Register an MCP Server
85
+ ## Register MCP Servers
86
86
 
87
- Write an MCP server to expose your own tools. The `registerMcpTool` helper handles the SDK's type complexity.
87
+ Long Tail connects to any MCP server an npm package, a remote service, or one you write yourself. Registered tools become durable activities and are available to the Pipeline Designer.
88
+
89
+ **Use an existing package** — no code, just register:
90
+
91
+ ```bash
92
+ curl -X POST http://localhost:3000/api/mcp/servers \
93
+ -H 'Content-Type: application/json' \
94
+ -d '{
95
+ "name": "filesystem",
96
+ "transport_type": "stdio",
97
+ "transport_config": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"] },
98
+ "tags": ["files", "storage"],
99
+ "auto_connect": true
100
+ }'
101
+ ```
102
+
103
+ **Connect a remote server** — point at a URL:
104
+
105
+ ```bash
106
+ curl -X POST http://localhost:3000/api/mcp/servers \
107
+ -H 'Content-Type: application/json' \
108
+ -d '{
109
+ "name": "my-python-server",
110
+ "transport_type": "sse",
111
+ "transport_config": { "url": "http://python-service:8000/mcp" },
112
+ "tags": ["ml", "classification"],
113
+ "compile_hints": "Returns confidence scores. Use threshold 0.85 for auto-approve."
114
+ }'
115
+ ```
116
+
117
+ **Write your own** and register it in-process:
88
118
 
89
119
  ```typescript
90
120
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
@@ -106,8 +136,6 @@ export function createImageToolsServer(): McpServer {
106
136
  }
107
137
  ```
108
138
 
109
- Register it at startup and it appears in the dashboard:
110
-
111
139
  ```typescript
112
140
  const lt = await start({
113
141
  // ...
@@ -117,6 +145,8 @@ const lt = await start({
117
145
  });
118
146
  ```
119
147
 
148
+ All three paths produce the same outcome: tools callable as durable activities. Tags enable discovery. Compile hints guide the compiler when tools are compiled into deterministic pipelines. See the [MCP guide](docs/mcp.md) for the full registration lifecycle.
149
+
120
150
  ## Ask It Anything
121
151
 
122
152
  Once your tools are registered, the Pipeline Designer orchestrates them. Describe what you need in plain language:
@@ -147,34 +177,74 @@ const lt = await start({
147
177
  });
148
178
  ```
149
179
 
180
+ ## Use as a Package (No HTTP Server)
181
+
182
+ Long Tail can run as an embedded package inside your existing application — no Express server, no socket.io, no extra ports. The same API surface is available as direct function calls.
183
+
184
+ ```typescript
185
+ import { start, createClient } from '@hotmeshio/long-tail';
186
+
187
+ await start({
188
+ database: { connectionString: process.env.DATABASE_URL },
189
+ server: { enabled: false },
190
+ workers: [{ taskQueue: 'default', workflow: reviewContent.reviewContent }],
191
+ });
192
+
193
+ const lt = createClient({ auth: { userId: 'system' } });
194
+
195
+ // Same operations as the REST API — no HTTP overhead
196
+ const tasks = await lt.tasks.list({ status: 'completed', limit: 10 });
197
+ const result = await lt.escalations.claim({ id: 'esc_123', durationMinutes: 30 });
198
+ ```
199
+
200
+ Subscribe to events with callbacks instead of socket.io:
201
+
202
+ ```typescript
203
+ lt.events.on('task.completed', (event) => {
204
+ console.log('done:', event.workflowId);
205
+ });
206
+
207
+ lt.events.on('escalation.*', (event) => {
208
+ notifyTeam(event);
209
+ });
210
+ ```
211
+
212
+ Every SDK call returns an `LTApiResult` — same status codes, same validation, same RBAC. The transport is the only thing that changes. See the [SDK guide](docs/sdk.md) for the full API reference.
213
+
150
214
  ## Deployment
151
215
 
152
- Two container types from the same codebase:
216
+ Three modes from the same codebase:
153
217
 
154
218
  ```typescript
155
- // api.ts — dashboard + REST API
219
+ // 1. Standalone — dashboard + REST API + workers
156
220
  await start({ database: { connectionString: process.env.DATABASE_URL } });
157
221
 
158
- // worker.ts — workflow execution, no HTTP server
222
+ // 2. Worker-only — workflow execution, no HTTP server
159
223
  await start({
160
224
  database: { connectionString: process.env.DATABASE_URL },
161
225
  server: { enabled: false },
162
226
  workers: [{ taskQueue: 'default', workflow: reviewContent.reviewContent }],
163
227
  });
228
+
229
+ // 3. Embedded — inside your NestJS/Next.js/Express app, SDK calls only
230
+ await start({ database: { connectionString: process.env.DATABASE_URL }, server: { enabled: false } });
231
+ const lt = createClient({ auth: { userId: 'service' } });
164
232
  ```
165
233
 
166
- Both share PostgreSQL and scale independently. See [Cloud Deployment](docs/cloud.md).
234
+ All modes share PostgreSQL and scale independently. See [Cloud Deployment](docs/cloud.md).
167
235
 
168
236
  ## Docs
169
237
 
170
238
  | Guide | What it covers |
171
239
  |-------|---------------|
240
+ | [The Long Tail Story](docs/story.md) | Why this exists, what accumulates over time, what you own |
172
241
  | [Workflows](docs/workflows.md) | Activities, interceptor, escalation lifecycle, composition |
173
242
  | [IAM](docs/iam.md) | Identity propagation, service accounts, credential exchange |
174
243
  | [Dashboard](docs/dashboard.md) | Navigation, key pages, event feed |
175
244
  | [MCP](docs/mcp.md) | Server registration, tool calls, human queue |
176
245
  | [Compilation](docs/compilation.md) | Dynamic → deterministic pipeline wizard |
177
246
  | [Escalation Strategies](docs/escalation-strategies.md) | Default, MCP triage, custom handlers |
247
+ | [SDK](docs/sdk.md) | Embedded usage, `createClient`, event subscriptions |
178
248
  | [Architecture](docs/architecture.md) | Project structure, conventions, discovery |
179
249
  | [Cloud](docs/cloud.md) | AWS ECS, GCP Cloud Run, Docker |
180
250
  | [Data Model](docs/data.md) | Database schema |
@@ -0,0 +1,5 @@
1
+ import type { LTApiResult } from '../types/sdk';
2
+ export declare function login(input: {
3
+ username: string;
4
+ password: string;
5
+ }): Promise<LTApiResult>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.login = login;
4
+ const user_1 = require("../services/user");
5
+ const auth_1 = require("../modules/auth");
6
+ async function login(input) {
7
+ try {
8
+ const { username, password } = input;
9
+ if (!username || !password) {
10
+ return { status: 400, error: 'username and password are required' };
11
+ }
12
+ const user = await (0, user_1.verifyPassword)(username, password);
13
+ if (!user) {
14
+ return { status: 401, error: 'Invalid credentials' };
15
+ }
16
+ const highestType = user.roles.some((r) => r.type === 'superadmin')
17
+ ? 'superadmin'
18
+ : user.roles.some((r) => r.type === 'admin')
19
+ ? 'admin'
20
+ : 'member';
21
+ const token = (0, auth_1.signToken)({
22
+ userId: user.id,
23
+ role: highestType,
24
+ roles: user.roles.map((r) => ({ role: r.role, type: r.type })),
25
+ }, '24h');
26
+ return {
27
+ status: 200,
28
+ data: {
29
+ token,
30
+ user: {
31
+ id: user.id,
32
+ external_id: user.external_id,
33
+ display_name: user.display_name,
34
+ roles: user.roles,
35
+ },
36
+ },
37
+ };
38
+ }
39
+ catch (err) {
40
+ return { status: 500, error: err.message };
41
+ }
42
+ }
@@ -0,0 +1,50 @@
1
+ import type { LTApiResult, LTApiAuth } from '../types/sdk';
2
+ export declare function listBots(input: {
3
+ limit?: number;
4
+ offset?: number;
5
+ }): Promise<LTApiResult>;
6
+ export declare function getBot(input: {
7
+ id: string;
8
+ }): Promise<LTApiResult>;
9
+ export declare function createBot(input: {
10
+ name: string;
11
+ description?: string;
12
+ display_name?: string;
13
+ roles?: {
14
+ role: string;
15
+ type: string;
16
+ }[];
17
+ }, auth?: LTApiAuth): Promise<LTApiResult>;
18
+ export declare function updateBot(input: {
19
+ id: string;
20
+ display_name?: string;
21
+ description?: string;
22
+ status?: string;
23
+ }): Promise<LTApiResult>;
24
+ export declare function deleteBot(input: {
25
+ id: string;
26
+ }): Promise<LTApiResult>;
27
+ export declare function getBotRoles(input: {
28
+ id: string;
29
+ }): Promise<LTApiResult>;
30
+ export declare function addBotRole(input: {
31
+ id: string;
32
+ role: string;
33
+ type: string;
34
+ }): Promise<LTApiResult>;
35
+ export declare function removeBotRole(input: {
36
+ id: string;
37
+ role: string;
38
+ }): Promise<LTApiResult>;
39
+ export declare function listBotKeys(input: {
40
+ id: string;
41
+ }): Promise<LTApiResult>;
42
+ export declare function createBotKey(input: {
43
+ id: string;
44
+ name: string;
45
+ scopes?: string[];
46
+ expires_at?: string;
47
+ }): Promise<LTApiResult>;
48
+ export declare function revokeBotKey(input: {
49
+ keyId: string;
50
+ }): Promise<LTApiResult>;
@@ -0,0 +1,215 @@
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.listBots = listBots;
37
+ exports.getBot = getBot;
38
+ exports.createBot = createBot;
39
+ exports.updateBot = updateBot;
40
+ exports.deleteBot = deleteBot;
41
+ exports.getBotRoles = getBotRoles;
42
+ exports.addBotRole = addBotRole;
43
+ exports.removeBotRole = removeBotRole;
44
+ exports.listBotKeys = listBotKeys;
45
+ exports.createBotKey = createBotKey;
46
+ exports.revokeBotKey = revokeBotKey;
47
+ const iam = __importStar(require("../services/iam"));
48
+ const user_1 = require("../services/user");
49
+ async function listBots(input) {
50
+ try {
51
+ const limit = input.limit ?? 50;
52
+ const offset = input.offset ?? 0;
53
+ const result = await iam.listBots(limit, offset);
54
+ return { status: 200, data: result };
55
+ }
56
+ catch (err) {
57
+ return { status: 500, error: err.message };
58
+ }
59
+ }
60
+ async function getBot(input) {
61
+ try {
62
+ const bot = await iam.getBot(input.id);
63
+ if (!bot) {
64
+ return { status: 404, error: 'Bot not found' };
65
+ }
66
+ return { status: 200, data: bot };
67
+ }
68
+ catch (err) {
69
+ return { status: 500, error: err.message };
70
+ }
71
+ }
72
+ async function createBot(input, auth) {
73
+ try {
74
+ if (!input.name) {
75
+ return { status: 400, error: 'name is required' };
76
+ }
77
+ if (input.roles) {
78
+ for (const r of input.roles) {
79
+ if (!r.role || !r.type || !(0, user_1.isValidRoleType)(r.type)) {
80
+ return {
81
+ status: 400,
82
+ error: 'Each role must have a role name and type (superadmin, admin, member)',
83
+ };
84
+ }
85
+ }
86
+ }
87
+ const bot = await iam.createBot({
88
+ name: input.name,
89
+ description: input.description,
90
+ display_name: input.display_name,
91
+ roles: input.roles,
92
+ created_by: auth?.userId,
93
+ });
94
+ return { status: 201, data: bot };
95
+ }
96
+ catch (err) {
97
+ if (err.code === '23505') {
98
+ return { status: 409, error: 'Bot with this name already exists' };
99
+ }
100
+ return { status: 500, error: err.message };
101
+ }
102
+ }
103
+ async function updateBot(input) {
104
+ try {
105
+ const { id, ...fields } = input;
106
+ const bot = await iam.updateBot(id, fields);
107
+ if (!bot) {
108
+ return { status: 404, error: 'Bot not found' };
109
+ }
110
+ return { status: 200, data: bot };
111
+ }
112
+ catch (err) {
113
+ return { status: 500, error: err.message };
114
+ }
115
+ }
116
+ async function deleteBot(input) {
117
+ try {
118
+ const deleted = await iam.deleteBot(input.id);
119
+ if (!deleted) {
120
+ return { status: 404, error: 'Bot not found' };
121
+ }
122
+ return { status: 200, data: { deleted: true } };
123
+ }
124
+ catch (err) {
125
+ return { status: 500, error: err.message };
126
+ }
127
+ }
128
+ async function getBotRoles(input) {
129
+ try {
130
+ const bot = await iam.getBot(input.id);
131
+ if (!bot) {
132
+ return { status: 404, error: 'Bot not found' };
133
+ }
134
+ const roles = await iam.getBotRoles(input.id);
135
+ return { status: 200, data: { roles } };
136
+ }
137
+ catch (err) {
138
+ return { status: 500, error: err.message };
139
+ }
140
+ }
141
+ async function addBotRole(input) {
142
+ try {
143
+ if (!input.role || !input.type) {
144
+ return { status: 400, error: 'role and type are required' };
145
+ }
146
+ if (!(0, user_1.isValidRoleType)(input.type)) {
147
+ return { status: 400, error: 'type must be superadmin, admin, or member' };
148
+ }
149
+ const bot = await iam.getBot(input.id);
150
+ if (!bot) {
151
+ return { status: 404, error: 'Bot not found' };
152
+ }
153
+ const result = await iam.addBotRole(input.id, input.role, input.type);
154
+ return { status: 201, data: result };
155
+ }
156
+ catch (err) {
157
+ return { status: 500, error: err.message };
158
+ }
159
+ }
160
+ async function removeBotRole(input) {
161
+ try {
162
+ const removed = await iam.removeBotRole(input.id, input.role);
163
+ if (!removed) {
164
+ return { status: 404, error: 'Role not found' };
165
+ }
166
+ return { status: 200, data: { removed: true } };
167
+ }
168
+ catch (err) {
169
+ return { status: 500, error: err.message };
170
+ }
171
+ }
172
+ async function listBotKeys(input) {
173
+ try {
174
+ const bot = await iam.getBot(input.id);
175
+ if (!bot) {
176
+ return { status: 404, error: 'Bot not found' };
177
+ }
178
+ const keys = await iam.listBotKeys(input.id);
179
+ return { status: 200, data: { keys } };
180
+ }
181
+ catch (err) {
182
+ return { status: 500, error: err.message };
183
+ }
184
+ }
185
+ async function createBotKey(input) {
186
+ try {
187
+ if (!input.name) {
188
+ return { status: 400, error: 'name is required' };
189
+ }
190
+ const expiresAt = input.expires_at ? new Date(input.expires_at) : undefined;
191
+ const result = await iam.createBotKey(input.id, input.name, input.scopes || [], expiresAt);
192
+ return { status: 201, data: result };
193
+ }
194
+ catch (err) {
195
+ if (err.message === 'Bot not found') {
196
+ return { status: 404, error: err.message };
197
+ }
198
+ if (err.code === '23505') {
199
+ return { status: 409, error: 'API key with this name already exists for this bot' };
200
+ }
201
+ return { status: 500, error: err.message };
202
+ }
203
+ }
204
+ async function revokeBotKey(input) {
205
+ try {
206
+ const revoked = await iam.revokeBotKey(input.keyId);
207
+ if (!revoked) {
208
+ return { status: 404, error: 'API key not found' };
209
+ }
210
+ return { status: 200, data: { revoked: true } };
211
+ }
212
+ catch (err) {
213
+ return { status: 500, error: err.message };
214
+ }
215
+ }
@@ -0,0 +1,20 @@
1
+ import type { LTApiResult } from '../types/sdk';
2
+ export declare function listApps(): Promise<LTApiResult>;
3
+ export declare function rollCall(input: {
4
+ appId?: string;
5
+ delay?: number;
6
+ }): Promise<LTApiResult>;
7
+ export declare function applyThrottle(input: {
8
+ appId?: string;
9
+ throttle: number;
10
+ topic?: string;
11
+ guid?: string;
12
+ }): Promise<LTApiResult>;
13
+ export declare function getStreamStats(input: {
14
+ app_id?: string;
15
+ duration?: string;
16
+ stream?: string;
17
+ }): Promise<LTApiResult>;
18
+ export declare function subscribeMesh(input: {
19
+ appId?: string;
20
+ }): Promise<LTApiResult>;
@@ -0,0 +1,110 @@
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.listApps = listApps;
37
+ exports.rollCall = rollCall;
38
+ exports.applyThrottle = applyThrottle;
39
+ exports.getStreamStats = getStreamStats;
40
+ exports.subscribeMesh = subscribeMesh;
41
+ const controlplane = __importStar(require("../services/controlplane"));
42
+ const events_1 = require("../lib/events");
43
+ async function listApps() {
44
+ try {
45
+ const apps = await controlplane.listApps();
46
+ return { status: 200, data: { apps } };
47
+ }
48
+ catch (err) {
49
+ return { status: 500, error: err.message };
50
+ }
51
+ }
52
+ async function rollCall(input) {
53
+ try {
54
+ const appId = input.appId || 'durable';
55
+ const profiles = await controlplane.rollCall(appId, input.delay);
56
+ return { status: 200, data: { profiles } };
57
+ }
58
+ catch (err) {
59
+ return { status: 500, error: err.message };
60
+ }
61
+ }
62
+ async function applyThrottle(input) {
63
+ try {
64
+ const appId = input.appId || 'durable';
65
+ if (typeof input.throttle !== 'number') {
66
+ return { status: 400, error: 'throttle (number) is required' };
67
+ }
68
+ const result = await controlplane.applyThrottle(appId, {
69
+ throttle: input.throttle,
70
+ topic: input.topic,
71
+ guid: input.guid,
72
+ });
73
+ // Publish a synthetic event so the dashboard event stream sees it
74
+ const throttleEvent = {
75
+ type: 'mesh.throttle',
76
+ source: 'controlplane',
77
+ workflowId: input.guid || '',
78
+ workflowName: '',
79
+ taskQueue: appId,
80
+ data: { throttle: input.throttle, topic: input.topic, guid: input.guid, appId },
81
+ timestamp: new Date().toISOString(),
82
+ };
83
+ events_1.eventRegistry.publish(throttleEvent).catch(() => { });
84
+ return { status: 200, data: { success: result } };
85
+ }
86
+ catch (err) {
87
+ return { status: 500, error: err.message };
88
+ }
89
+ }
90
+ async function getStreamStats(input) {
91
+ try {
92
+ const schema = input.app_id || 'durable';
93
+ const duration = input.duration || '1h';
94
+ const stats = await controlplane.getStreamStats(schema, duration, input.stream);
95
+ return { status: 200, data: stats };
96
+ }
97
+ catch (err) {
98
+ return { status: 500, error: err.message };
99
+ }
100
+ }
101
+ async function subscribeMesh(input) {
102
+ try {
103
+ const appId = input.appId || 'durable';
104
+ await controlplane.subscribeMesh(appId);
105
+ return { status: 200, data: { subscribed: true, appId } };
106
+ }
107
+ catch (err) {
108
+ return { status: 500, error: err.message };
109
+ }
110
+ }
@@ -0,0 +1,15 @@
1
+ import type { LTApiResult } from '../types/sdk';
2
+ export declare function prune(input: {
3
+ expire?: string;
4
+ jobs?: boolean;
5
+ streams?: boolean;
6
+ engineStreams?: boolean;
7
+ engineStreamsExpire?: string;
8
+ workerStreams?: boolean;
9
+ workerStreamsExpire?: string;
10
+ attributes?: boolean;
11
+ entities?: string[];
12
+ pruneTransient?: boolean;
13
+ keepHmark?: boolean;
14
+ }): Promise<LTApiResult>;
15
+ export declare function deploy(): Promise<LTApiResult>;
@@ -0,0 +1,68 @@
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.prune = prune;
37
+ exports.deploy = deploy;
38
+ const dbaService = __importStar(require("../services/dba"));
39
+ async function prune(input) {
40
+ try {
41
+ const result = await dbaService.prune({
42
+ expire: input.expire,
43
+ jobs: input.jobs,
44
+ streams: input.streams,
45
+ engineStreams: input.engineStreams,
46
+ engineStreamsExpire: input.engineStreamsExpire,
47
+ workerStreams: input.workerStreams,
48
+ workerStreamsExpire: input.workerStreamsExpire,
49
+ attributes: input.attributes,
50
+ entities: input.entities,
51
+ pruneTransient: input.pruneTransient,
52
+ keepHmark: input.keepHmark,
53
+ });
54
+ return { status: 200, data: result };
55
+ }
56
+ catch (err) {
57
+ return { status: 500, error: err.message };
58
+ }
59
+ }
60
+ async function deploy() {
61
+ try {
62
+ await dbaService.deploy();
63
+ return { status: 200, data: { ok: true } };
64
+ }
65
+ catch (err) {
66
+ return { status: 500, error: err.message };
67
+ }
68
+ }