@hotmeshio/long-tail 0.3.2 → 0.4.0

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 (337) hide show
  1. package/build/api/agents.d.ts +1 -1
  2. package/build/api/agents.js +1 -1
  3. package/build/api/controlplane.d.ts +33 -0
  4. package/build/api/controlplane.js +46 -0
  5. package/build/bin/ltc.js +16 -0
  6. package/build/lib/cli/commands/streams.d.ts +20 -0
  7. package/build/lib/cli/commands/streams.js +134 -0
  8. package/build/lib/db/schemas/003_agents.sql +1 -2
  9. package/build/lib/db/schemas/004_agent_subscriptions.sql +1 -1
  10. package/build/routes/agents.js +3 -3
  11. package/build/routes/controlplane.js +28 -0
  12. package/build/sdk/index.d.ts +1 -0
  13. package/build/sdk/index.js +1 -0
  14. package/build/services/agent/index.d.ts +2 -3
  15. package/build/services/agent/index.js +5 -12
  16. package/build/services/agent/sql.d.ts +3 -4
  17. package/build/services/agent/sql.js +16 -20
  18. package/build/services/agent/subscription-sql.d.ts +1 -1
  19. package/build/services/agent/subscription-sql.js +1 -1
  20. package/build/services/agent/trigger-registry.js +1 -1
  21. package/build/services/controlplane/index.d.ts +9 -1
  22. package/build/services/controlplane/index.js +39 -0
  23. package/build/services/controlplane/stream-messages-sql.d.ts +21 -0
  24. package/build/services/controlplane/stream-messages-sql.js +108 -0
  25. package/build/services/controlplane/types.d.ts +44 -0
  26. package/build/services/cron/index.js +5 -5
  27. package/build/services/export/post-process.js +14 -6
  28. package/build/services/mcp-runs/execution-builder.js +9 -4
  29. package/build/services/topics/index.js +1 -4
  30. package/build/services/topics/sql.d.ts +2 -2
  31. package/build/services/topics/sql.js +9 -2
  32. package/build/services/topics/system-topics.js +2 -3
  33. package/build/start/workers.js +11 -14
  34. package/build/tsconfig.tsbuildinfo +1 -1
  35. package/build/types/agent.d.ts +1 -1
  36. package/dashboard/dist/assets/AdminDashboard-CR0FtTE6.js +2 -0
  37. package/dashboard/dist/assets/{AdminDashboard-CbeSejVX.js.map → AdminDashboard-CR0FtTE6.js.map} +1 -1
  38. package/dashboard/dist/assets/AgentConfigPage-BVypgq9m.js +13 -0
  39. package/dashboard/dist/assets/AgentConfigPage-BVypgq9m.js.map +1 -0
  40. package/dashboard/dist/assets/AgentDetailPage-D64ath8c.js +4 -0
  41. package/dashboard/dist/assets/AgentDetailPage-D64ath8c.js.map +1 -0
  42. package/dashboard/dist/assets/AgentsPage-j-zblMNR.js +2 -0
  43. package/dashboard/dist/assets/AgentsPage-j-zblMNR.js.map +1 -0
  44. package/dashboard/dist/assets/AvailableEscalationsPage-DmUid1h0.js +2 -0
  45. package/dashboard/dist/assets/{AvailableEscalationsPage-DdrzePy4.js.map → AvailableEscalationsPage-DmUid1h0.js.map} +1 -1
  46. package/dashboard/dist/assets/BotPicker-DCScT8BN.js +2 -0
  47. package/dashboard/dist/assets/{BotPicker-kKBifD1w.js.map → BotPicker-DCScT8BN.js.map} +1 -1
  48. package/dashboard/dist/assets/CapabilitiesPage-g5iUvHRL.js +2 -0
  49. package/dashboard/dist/assets/{CapabilitiesPage-Ch5qY0I7.js.map → CapabilitiesPage-g5iUvHRL.js.map} +1 -1
  50. package/dashboard/dist/assets/CollapsibleSection-Dj1YOsVG.js +2 -0
  51. package/dashboard/dist/assets/{CollapsibleSection-kYTBL7dT.js.map → CollapsibleSection-Dj1YOsVG.js.map} +1 -1
  52. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
  53. package/dashboard/dist/assets/{ConfirmDeleteModal-CcaAapMl.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
  54. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
  55. package/dashboard/dist/assets/{CopyableId-B4CL12pv.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
  56. package/dashboard/dist/assets/CredentialsPage-Dvb4QelY.js +2 -0
  57. package/dashboard/dist/assets/{CredentialsPage-D1VAlwid.js.map → CredentialsPage-Dvb4QelY.js.map} +1 -1
  58. package/dashboard/dist/assets/CronLabel-sk1BkcJd.js +2 -0
  59. package/dashboard/dist/assets/{CronLabel-DRmO5rH0.js.map → CronLabel-sk1BkcJd.js.map} +1 -1
  60. package/dashboard/dist/assets/CustomDurationPicker-C0MV2Q06.js +2 -0
  61. package/dashboard/dist/assets/{CustomDurationPicker-C06QDDir.js.map → CustomDurationPicker-C0MV2Q06.js.map} +1 -1
  62. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +2 -0
  63. package/dashboard/dist/assets/{DataTable-J5R6mepB.js.map → DataTable-D9yuBv0w.js.map} +1 -1
  64. package/dashboard/dist/assets/DropZone-DN8uwUtf.js +2 -0
  65. package/dashboard/dist/assets/{DropZone-DwNj3GiG.js.map → DropZone-DN8uwUtf.js.map} +1 -1
  66. package/dashboard/dist/assets/ElapsedCell-CFXhhKKc.js +2 -0
  67. package/dashboard/dist/assets/{ElapsedCell-ChyMzl9n.js.map → ElapsedCell-CFXhhKKc.js.map} +1 -1
  68. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
  69. package/dashboard/dist/assets/{EmptyState-BXGvOADa.js.map → EmptyState-BcsfPq9T.js.map} +1 -1
  70. package/dashboard/dist/assets/EscalationsOverview-BEuUFGwC.js +2 -0
  71. package/dashboard/dist/assets/{EscalationsOverview-DM6zmE4g.js.map → EscalationsOverview-BEuUFGwC.js.map} +1 -1
  72. package/dashboard/dist/assets/EventTable-DcwVWOKb.js +2 -0
  73. package/dashboard/dist/assets/{EventTable-CvJ98E8s.js.map → EventTable-DcwVWOKb.js.map} +1 -1
  74. package/dashboard/dist/assets/EventTopicPill-CWCP1v1O.js +2 -0
  75. package/dashboard/dist/assets/{EventTopicPill-CB_rIGlL.js.map → EventTopicPill-CWCP1v1O.js.map} +1 -1
  76. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
  77. package/dashboard/dist/assets/{FilterBar-Bdssa-Xn.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
  78. package/dashboard/dist/assets/HomePage-BH-F5ws9.js +2 -0
  79. package/dashboard/dist/assets/HomePage-BH-F5ws9.js.map +1 -0
  80. package/dashboard/dist/assets/ListToolbar-CUxJlz__.js +2 -0
  81. package/dashboard/dist/assets/{ListToolbar-jy8NL6ll.js.map → ListToolbar-CUxJlz__.js.map} +1 -1
  82. package/dashboard/dist/assets/McpOverview-O8XrOzy0.js +2 -0
  83. package/dashboard/dist/assets/{McpOverview-xkaKuHbX.js.map → McpOverview-O8XrOzy0.js.map} +1 -1
  84. package/dashboard/dist/assets/McpQueryDetailPage-DhiR0Xrx.js +5 -0
  85. package/dashboard/dist/assets/{McpQueryDetailPage-D5ICn6cR.js.map → McpQueryDetailPage-DhiR0Xrx.js.map} +1 -1
  86. package/dashboard/dist/assets/McpQueryPage-Czot0nfl.js +2 -0
  87. package/dashboard/dist/assets/{McpQueryPage-C46fzfm5.js.map → McpQueryPage-Czot0nfl.js.map} +1 -1
  88. package/dashboard/dist/assets/McpRunDetailPage-B1kNnD_t.js +2 -0
  89. package/dashboard/dist/assets/{McpRunDetailPage-Znsl4Yc-.js.map → McpRunDetailPage-B1kNnD_t.js.map} +1 -1
  90. package/dashboard/dist/assets/McpRunsPage-QUY3pWp9.js +2 -0
  91. package/dashboard/dist/assets/McpRunsPage-QUY3pWp9.js.map +1 -0
  92. package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
  93. package/dashboard/dist/assets/{Modal-C6k6_5KB.js.map → Modal-DEODGeqx.js.map} +1 -1
  94. package/dashboard/dist/assets/OperatorDashboard-BG1Q9qZk.js +2 -0
  95. package/dashboard/dist/assets/{OperatorDashboard-e5N3_dVl.js.map → OperatorDashboard-BG1Q9qZk.js.map} +1 -1
  96. package/dashboard/dist/assets/PageHeader-DlzOOM4Y.js +2 -0
  97. package/dashboard/dist/assets/{PageHeader-COcgWWf-.js.map → PageHeader-DlzOOM4Y.js.map} +1 -1
  98. package/dashboard/dist/assets/PageHeaderWithStats-C5cZ3IOO.js +2 -0
  99. package/dashboard/dist/assets/{PageHeaderWithStats-C0PCY3aJ.js.map → PageHeaderWithStats-C5cZ3IOO.js.map} +1 -1
  100. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
  101. package/dashboard/dist/assets/{PriorityBadge-BQCsYMpM.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
  102. package/dashboard/dist/assets/ProcessDetailPage-DS1AwTso.js +2 -0
  103. package/dashboard/dist/assets/{ProcessDetailPage-C03LOgI0.js.map → ProcessDetailPage-DS1AwTso.js.map} +1 -1
  104. package/dashboard/dist/assets/ProcessesListPage-CAmVcn1P.js +2 -0
  105. package/dashboard/dist/assets/{ProcessesListPage-iyPsmlhm.js.map → ProcessesListPage-CAmVcn1P.js.map} +1 -1
  106. package/dashboard/dist/assets/RolePill-BZaUpkHg.js +2 -0
  107. package/dashboard/dist/assets/{RolePill-CHwys1f9.js.map → RolePill-BZaUpkHg.js.map} +1 -1
  108. package/dashboard/dist/assets/RolesPage-CFdIXfmv.js +2 -0
  109. package/dashboard/dist/assets/{RolesPage-Bmc3XaUk.js.map → RolesPage-CFdIXfmv.js.map} +1 -1
  110. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
  111. package/dashboard/dist/assets/{RowActions-Bs4PF-Gd.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
  112. package/dashboard/dist/assets/RunAsSelector-BGww9lta.js +2 -0
  113. package/dashboard/dist/assets/{RunAsSelector-DXzAr2WW.js.map → RunAsSelector-BGww9lta.js.map} +1 -1
  114. package/dashboard/dist/assets/ServerName-DfS3pfon.js +2 -0
  115. package/dashboard/dist/assets/{ServerName-BIdLC1Ay.js.map → ServerName-DfS3pfon.js.map} +1 -1
  116. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
  117. package/dashboard/dist/assets/{StatCard-OKzRSSx4.js.map → StatCard-DlgF0CJC.js.map} +1 -1
  118. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
  119. package/dashboard/dist/assets/{StatusBadge-CQlF46RR.js.map → StatusBadge-XQlNFwmH.js.map} +1 -1
  120. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
  121. package/dashboard/dist/assets/{StepIndicator-CP7eycjI.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
  122. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
  123. package/dashboard/dist/assets/{StickyPagination-CGk8VAKt.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
  124. package/dashboard/dist/assets/SwimlaneTimeline-C2hGjy0V.js +2 -0
  125. package/dashboard/dist/assets/{SwimlaneTimeline-MEUPc3yJ.js.map → SwimlaneTimeline-C2hGjy0V.js.map} +1 -1
  126. package/dashboard/dist/assets/TagInput-D21mrQx6.js +2 -0
  127. package/dashboard/dist/assets/{TagInput-BGxXKiWD.js.map → TagInput-D21mrQx6.js.map} +1 -1
  128. package/dashboard/dist/assets/TaskDetailPage-B49WQj8W.js +2 -0
  129. package/dashboard/dist/assets/TaskDetailPage-B49WQj8W.js.map +1 -0
  130. package/dashboard/dist/assets/TaskQueuePill-D8UMH1rd.js +2 -0
  131. package/dashboard/dist/assets/{TaskQueuePill-bw8ieKsf.js.map → TaskQueuePill-D8UMH1rd.js.map} +1 -1
  132. package/dashboard/dist/assets/TasksListPage-CJB-EvKX.js +2 -0
  133. package/dashboard/dist/assets/{TasksListPage-D1INzcrA.js.map → TasksListPage-CJB-EvKX.js.map} +1 -1
  134. package/dashboard/dist/assets/TimeAgo-CnjY3XDt.js +2 -0
  135. package/dashboard/dist/assets/{TimeAgo-CywLVIBA.js.map → TimeAgo-CnjY3XDt.js.map} +1 -1
  136. package/dashboard/dist/assets/TimestampCell-u1YA8eA3.js +2 -0
  137. package/dashboard/dist/assets/{TimestampCell-B4Pc6f3A.js.map → TimestampCell-u1YA8eA3.js.map} +1 -1
  138. package/dashboard/dist/assets/ToolPill-Dmcwmqh2.js +2 -0
  139. package/dashboard/dist/assets/{ToolPill-DdLN3JOT.js.map → ToolPill-Dmcwmqh2.js.map} +1 -1
  140. package/dashboard/dist/assets/ToolTestPanel-B1T4Hk0t.js +2 -0
  141. package/dashboard/dist/assets/{ToolTestPanel-DusbUka5.js.map → ToolTestPanel-B1T4Hk0t.js.map} +1 -1
  142. package/dashboard/dist/assets/TopicDetailPage-ClibbST4.js +9 -0
  143. package/dashboard/dist/assets/TopicDetailPage-ClibbST4.js.map +1 -0
  144. package/dashboard/dist/assets/TopicsPage-KjODhitc.js +2 -0
  145. package/dashboard/dist/assets/{TopicsPage-DbtrnQON.js.map → TopicsPage-KjODhitc.js.map} +1 -1
  146. package/dashboard/dist/assets/UserName-DVqimwsO.js +2 -0
  147. package/dashboard/dist/assets/{UserName-CLbusknU.js.map → UserName-DVqimwsO.js.map} +1 -1
  148. package/dashboard/dist/assets/WorkflowExecutionPage-DYNPy7Gk.js +2 -0
  149. package/dashboard/dist/assets/{WorkflowExecutionPage-C61R-3Gg.js.map → WorkflowExecutionPage-DYNPy7Gk.js.map} +1 -1
  150. package/dashboard/dist/assets/WorkflowPill-h43nlUmM.js +2 -0
  151. package/dashboard/dist/assets/{WorkflowPill-7vt2F6wR.js.map → WorkflowPill-h43nlUmM.js.map} +1 -1
  152. package/dashboard/dist/assets/WorkflowsDashboard-DdJm6X7x.js +2 -0
  153. package/dashboard/dist/assets/{WorkflowsDashboard-BWiUNvyl.js.map → WorkflowsDashboard-DdJm6X7x.js.map} +1 -1
  154. package/dashboard/dist/assets/WorkflowsOverview-CBOYkfpD.js +2 -0
  155. package/dashboard/dist/assets/{WorkflowsOverview-DA2ZOs7D.js.map → WorkflowsOverview-CBOYkfpD.js.map} +1 -1
  156. package/dashboard/dist/assets/YamlWorkflowsPage-BZnD_hMw.js +2 -0
  157. package/dashboard/dist/assets/{YamlWorkflowsPage-CLebf2eL.js.map → YamlWorkflowsPage-BZnD_hMw.js.map} +1 -1
  158. package/dashboard/dist/assets/{agents-Dga6NU7U.js → agents-oHMkS1GD.js} +2 -2
  159. package/dashboard/dist/assets/agents-oHMkS1GD.js.map +1 -0
  160. package/dashboard/dist/assets/{bots-CtU4i4OQ.js → bots-BispbsY3.js} +2 -2
  161. package/dashboard/dist/assets/{bots-CtU4i4OQ.js.map → bots-BispbsY3.js.map} +1 -1
  162. package/dashboard/dist/assets/{controlplane-BVoALhbL.js → controlplane-CIbrx5rX.js} +2 -2
  163. package/dashboard/dist/assets/{controlplane-BVoALhbL.js.map → controlplane-CIbrx5rX.js.map} +1 -1
  164. package/dashboard/dist/assets/escalation-columns-Dh_0iVTH.js +2 -0
  165. package/dashboard/dist/assets/{escalation-columns-CoTmTpHp.js.map → escalation-columns-Dh_0iVTH.js.map} +1 -1
  166. package/dashboard/dist/assets/escalation-qhj4TxA3.js +2 -0
  167. package/dashboard/dist/assets/{escalation-_N5GfuIi.js.map → escalation-qhj4TxA3.js.map} +1 -1
  168. package/dashboard/dist/assets/helpers-BYw1qqKV.js +2 -0
  169. package/dashboard/dist/assets/{helpers-Dz2U3Ctb.js.map → helpers-BYw1qqKV.js.map} +1 -1
  170. package/dashboard/dist/assets/index-B9t_vpam.js +2 -0
  171. package/dashboard/dist/assets/{index-Dpjguclc.js.map → index-B9t_vpam.js.map} +1 -1
  172. package/dashboard/dist/assets/index-Bh9g-EOF.js +2 -0
  173. package/dashboard/dist/assets/{index-CS61sh5q.js.map → index-Bh9g-EOF.js.map} +1 -1
  174. package/dashboard/dist/assets/index-BhhWCADo.js +63 -0
  175. package/dashboard/dist/assets/index-BhhWCADo.js.map +1 -0
  176. package/dashboard/dist/assets/index-Bn-VSH41.js +2 -0
  177. package/dashboard/dist/assets/index-Bn-VSH41.js.map +1 -0
  178. package/dashboard/dist/assets/index-C2yJWps6.js +6 -0
  179. package/dashboard/dist/assets/{index-B9ealjkt.js.map → index-C2yJWps6.js.map} +1 -1
  180. package/dashboard/dist/assets/index-C4W1_Rfk.js +5 -0
  181. package/dashboard/dist/assets/{index-CtbG3UN-.js.map → index-C4W1_Rfk.js.map} +1 -1
  182. package/dashboard/dist/assets/index-CEF3Idec.js +2 -0
  183. package/dashboard/dist/assets/{index-6Kd78p_v.js.map → index-CEF3Idec.js.map} +1 -1
  184. package/dashboard/dist/assets/index-CHxvfc97.css +1 -0
  185. package/dashboard/dist/assets/index-CVRVw3g_.js +2 -0
  186. package/dashboard/dist/assets/{index-dM-OgCY3.js.map → index-CVRVw3g_.js.map} +1 -1
  187. package/dashboard/dist/assets/index-CY3EhrEA.js +2 -0
  188. package/dashboard/dist/assets/{index-QicYdUsl.js.map → index-CY3EhrEA.js.map} +1 -1
  189. package/dashboard/dist/assets/index-D-q2lzup.js +2 -0
  190. package/dashboard/dist/assets/{index-DWUunWxh.js.map → index-D-q2lzup.js.map} +1 -1
  191. package/dashboard/dist/assets/index-D6YjH5uG.js +15 -0
  192. package/dashboard/dist/assets/{index-BYwPVJv0.js.map → index-D6YjH5uG.js.map} +1 -1
  193. package/dashboard/dist/assets/index-ht5r_7jQ.js +2 -0
  194. package/dashboard/dist/assets/index-ht5r_7jQ.js.map +1 -0
  195. package/dashboard/dist/assets/index-zHicKKh9.js +2 -0
  196. package/dashboard/dist/assets/{index-D_H_Prht.js.map → index-zHicKKh9.js.map} +1 -1
  197. package/dashboard/dist/assets/{knowledge-DJlebU82.js → knowledge-B23TU6JN.js} +2 -2
  198. package/dashboard/dist/assets/{knowledge-DJlebU82.js.map → knowledge-B23TU6JN.js.map} +1 -1
  199. package/dashboard/dist/assets/{mcp-CsLJ5SRm.js → mcp-Cew_Sb-Q.js} +2 -2
  200. package/dashboard/dist/assets/{mcp-CsLJ5SRm.js.map → mcp-Cew_Sb-Q.js.map} +1 -1
  201. package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js → mcp-query-So0Oz5Lx.js} +2 -2
  202. package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js.map → mcp-query-So0Oz5Lx.js.map} +1 -1
  203. package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js → mcp-runs-4176y3SA.js} +2 -2
  204. package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js.map → mcp-runs-4176y3SA.js.map} +1 -1
  205. package/dashboard/dist/assets/namespaces-CqBbWsJx.js +2 -0
  206. package/dashboard/dist/assets/{namespaces-iRejH3_A.js.map → namespaces-CqBbWsJx.js.map} +1 -1
  207. package/dashboard/dist/assets/{roles-3Jm5KtKc.js → roles-BTxMgLE6.js} +2 -2
  208. package/dashboard/dist/assets/{roles-3Jm5KtKc.js.map → roles-BTxMgLE6.js.map} +1 -1
  209. package/dashboard/dist/assets/settings-CtQNxacL.js +2 -0
  210. package/dashboard/dist/assets/{settings-DmN2I-c6.js.map → settings-CtQNxacL.js.map} +1 -1
  211. package/dashboard/dist/assets/{tasks-Cc-QoITQ.js → tasks-CIRlUTbo.js} +2 -2
  212. package/dashboard/dist/assets/{tasks-Cc-QoITQ.js.map → tasks-CIRlUTbo.js.map} +1 -1
  213. package/dashboard/dist/assets/{topics-p8anbgi0.js → topics-C8YmK_j2.js} +2 -2
  214. package/dashboard/dist/assets/topics-C8YmK_j2.js.map +1 -0
  215. package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js → useEventHooks-BvMUy36X.js} +2 -2
  216. package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js.map → useEventHooks-BvMUy36X.js.map} +1 -1
  217. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
  218. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
  219. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
  220. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
  221. package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js → useYamlActivityEvents-DLEzqv-z.js} +2 -2
  222. package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js.map → useYamlActivityEvents-DLEzqv-z.js.map} +1 -1
  223. package/dashboard/dist/assets/{users-oXOlnold.js → users-C_bD6mzW.js} +2 -2
  224. package/dashboard/dist/assets/{users-oXOlnold.js.map → users-C_bD6mzW.js.map} +1 -1
  225. package/dashboard/dist/assets/{vendor-icons-CBOM6Es0.js → vendor-icons-DY1ctJgc.js} +111 -101
  226. package/dashboard/dist/assets/vendor-icons-DY1ctJgc.js.map +1 -0
  227. package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
  228. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
  229. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
  230. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
  231. package/dashboard/dist/assets/{workflows-Yq7cK-vR.js → workflows-DFR0-hI3.js} +2 -2
  232. package/dashboard/dist/assets/{workflows-Yq7cK-vR.js.map → workflows-DFR0-hI3.js.map} +1 -1
  233. package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js → yaml-workflows-wXURdyjP.js} +2 -2
  234. package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js.map → yaml-workflows-wXURdyjP.js.map} +1 -1
  235. package/dashboard/dist/index.html +5 -5
  236. package/docs/agents.md +1 -1
  237. package/docs/api/http/agents.md +5 -7
  238. package/docs/api/http/controlplane.md +193 -0
  239. package/docs/api/sdk/agents.md +5 -5
  240. package/docs/api/sdk/controlplane.md +36 -0
  241. package/docs/dashboard.md +13 -0
  242. package/package.json +2 -2
  243. package/dashboard/dist/assets/AdminDashboard-CbeSejVX.js +0 -2
  244. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js +0 -13
  245. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +0 -1
  246. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +0 -4
  247. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js.map +0 -1
  248. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js +0 -2
  249. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js.map +0 -1
  250. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +0 -2
  251. package/dashboard/dist/assets/BotPicker-kKBifD1w.js +0 -2
  252. package/dashboard/dist/assets/CapabilitiesPage-Ch5qY0I7.js +0 -2
  253. package/dashboard/dist/assets/CollapsibleSection-kYTBL7dT.js +0 -2
  254. package/dashboard/dist/assets/ConfirmDeleteModal-CcaAapMl.js +0 -2
  255. package/dashboard/dist/assets/CopyableId-B4CL12pv.js +0 -2
  256. package/dashboard/dist/assets/CredentialsPage-D1VAlwid.js +0 -2
  257. package/dashboard/dist/assets/CronLabel-DRmO5rH0.js +0 -2
  258. package/dashboard/dist/assets/CustomDurationPicker-C06QDDir.js +0 -2
  259. package/dashboard/dist/assets/DataTable-J5R6mepB.js +0 -2
  260. package/dashboard/dist/assets/DropZone-DwNj3GiG.js +0 -2
  261. package/dashboard/dist/assets/ElapsedCell-ChyMzl9n.js +0 -2
  262. package/dashboard/dist/assets/EmptyState-BXGvOADa.js +0 -2
  263. package/dashboard/dist/assets/EscalationsOverview-DM6zmE4g.js +0 -2
  264. package/dashboard/dist/assets/EventTable-CvJ98E8s.js +0 -2
  265. package/dashboard/dist/assets/EventTopicPill-CB_rIGlL.js +0 -2
  266. package/dashboard/dist/assets/FilterBar-Bdssa-Xn.js +0 -2
  267. package/dashboard/dist/assets/HomePage-BuZkdXZt.js +0 -2
  268. package/dashboard/dist/assets/HomePage-BuZkdXZt.js.map +0 -1
  269. package/dashboard/dist/assets/ListToolbar-jy8NL6ll.js +0 -2
  270. package/dashboard/dist/assets/McpOverview-xkaKuHbX.js +0 -2
  271. package/dashboard/dist/assets/McpQueryDetailPage-D5ICn6cR.js +0 -5
  272. package/dashboard/dist/assets/McpQueryPage-C46fzfm5.js +0 -2
  273. package/dashboard/dist/assets/McpRunDetailPage-Znsl4Yc-.js +0 -2
  274. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js +0 -2
  275. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js.map +0 -1
  276. package/dashboard/dist/assets/Modal-C6k6_5KB.js +0 -2
  277. package/dashboard/dist/assets/OperatorDashboard-e5N3_dVl.js +0 -2
  278. package/dashboard/dist/assets/PageHeader-COcgWWf-.js +0 -2
  279. package/dashboard/dist/assets/PageHeaderWithStats-C0PCY3aJ.js +0 -2
  280. package/dashboard/dist/assets/PriorityBadge-BQCsYMpM.js +0 -2
  281. package/dashboard/dist/assets/ProcessDetailPage-C03LOgI0.js +0 -2
  282. package/dashboard/dist/assets/ProcessesListPage-iyPsmlhm.js +0 -2
  283. package/dashboard/dist/assets/RolePill-CHwys1f9.js +0 -2
  284. package/dashboard/dist/assets/RolesPage-Bmc3XaUk.js +0 -2
  285. package/dashboard/dist/assets/RowActions-Bs4PF-Gd.js +0 -2
  286. package/dashboard/dist/assets/RunAsSelector-DXzAr2WW.js +0 -2
  287. package/dashboard/dist/assets/ServerName-BIdLC1Ay.js +0 -2
  288. package/dashboard/dist/assets/StatCard-OKzRSSx4.js +0 -2
  289. package/dashboard/dist/assets/StatusBadge-CQlF46RR.js +0 -2
  290. package/dashboard/dist/assets/StepIndicator-CP7eycjI.js +0 -2
  291. package/dashboard/dist/assets/StickyPagination-CGk8VAKt.js +0 -2
  292. package/dashboard/dist/assets/SwimlaneTimeline-MEUPc3yJ.js +0 -2
  293. package/dashboard/dist/assets/TagInput-BGxXKiWD.js +0 -2
  294. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js +0 -2
  295. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js.map +0 -1
  296. package/dashboard/dist/assets/TaskQueuePill-bw8ieKsf.js +0 -2
  297. package/dashboard/dist/assets/TasksListPage-D1INzcrA.js +0 -2
  298. package/dashboard/dist/assets/TimeAgo-CywLVIBA.js +0 -2
  299. package/dashboard/dist/assets/TimestampCell-B4Pc6f3A.js +0 -2
  300. package/dashboard/dist/assets/ToolPill-DdLN3JOT.js +0 -2
  301. package/dashboard/dist/assets/ToolTestPanel-DusbUka5.js +0 -2
  302. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +0 -9
  303. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +0 -1
  304. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js +0 -2
  305. package/dashboard/dist/assets/UserName-CLbusknU.js +0 -2
  306. package/dashboard/dist/assets/WorkflowExecutionPage-C61R-3Gg.js +0 -2
  307. package/dashboard/dist/assets/WorkflowPill-7vt2F6wR.js +0 -2
  308. package/dashboard/dist/assets/WorkflowsDashboard-BWiUNvyl.js +0 -2
  309. package/dashboard/dist/assets/WorkflowsOverview-DA2ZOs7D.js +0 -2
  310. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +0 -2
  311. package/dashboard/dist/assets/agents-Dga6NU7U.js.map +0 -1
  312. package/dashboard/dist/assets/escalation-_N5GfuIi.js +0 -2
  313. package/dashboard/dist/assets/escalation-columns-CoTmTpHp.js +0 -2
  314. package/dashboard/dist/assets/helpers-Dz2U3Ctb.js +0 -2
  315. package/dashboard/dist/assets/index-6Kd78p_v.js +0 -2
  316. package/dashboard/dist/assets/index-B9ealjkt.js +0 -6
  317. package/dashboard/dist/assets/index-BIUHY2Jz.css +0 -1
  318. package/dashboard/dist/assets/index-BWHDW_CF.js +0 -2
  319. package/dashboard/dist/assets/index-BWHDW_CF.js.map +0 -1
  320. package/dashboard/dist/assets/index-BYwPVJv0.js +0 -15
  321. package/dashboard/dist/assets/index-CCOSf1PY.js +0 -281
  322. package/dashboard/dist/assets/index-CCOSf1PY.js.map +0 -1
  323. package/dashboard/dist/assets/index-CS61sh5q.js +0 -2
  324. package/dashboard/dist/assets/index-CtbG3UN-.js +0 -5
  325. package/dashboard/dist/assets/index-DWUunWxh.js +0 -2
  326. package/dashboard/dist/assets/index-D_H_Prht.js +0 -2
  327. package/dashboard/dist/assets/index-Dpjguclc.js +0 -2
  328. package/dashboard/dist/assets/index-QicYdUsl.js +0 -2
  329. package/dashboard/dist/assets/index-dM-OgCY3.js +0 -2
  330. package/dashboard/dist/assets/namespaces-iRejH3_A.js +0 -2
  331. package/dashboard/dist/assets/settings-DmN2I-c6.js +0 -2
  332. package/dashboard/dist/assets/topics-p8anbgi0.js.map +0 -1
  333. package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +0 -1
  334. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
  335. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
  336. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
  337. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{u as n,b as s,c as u}from"./vendor-query-DLp59M9_.js";import{b as r}from"./index-CCOSf1PY.js";function f(){return n({queryKey:["activeWorkers"],queryFn:async()=>(await r("/workflows/workers")).workers})}function w(){return n({queryKey:["discoveredWorkflows"],queryFn:async()=>(await r("/workflows/discovered")).workflows})}function l(){return n({queryKey:["workflowConfigs"],queryFn:async()=>(await r("/workflows/config")).workflows})}function d(){return n({queryKey:["cronStatus"],queryFn:async()=>(await r("/workflows/cron/status")).schedules})}function k(e){return n({queryKey:["workflowExecution",e],queryFn:()=>r(`/workflow-states/${e}/execution`),enabled:!!e})}function m(e){const o=new URLSearchParams;return e.limit&&o.set("limit",String(e.limit)),e.offset!==void 0&&o.set("offset",String(e.offset)),e.entity&&o.set("entity",e.entity),e.search&&o.set("search",e.search),e.status&&o.set("status",e.status),e.sort_by&&o.set("sort_by",e.sort_by),e.order&&o.set("order",e.order),e.registered&&o.set("registered",e.registered),e.namespace&&o.set("namespace",e.namespace),n({queryKey:["jobs",e],queryFn:()=>r(`/workflow-states/jobs?${o}`)})}function q(){const e=s();return u({mutationFn:o=>r(`/workflows/${o}/terminate`,{method:"POST"}),onSuccess:(o,t)=>{e.invalidateQueries({queryKey:["workflowExecution",t],refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function h(){const e=s();return u({mutationFn:({workflow_type:o,...t})=>r(`/workflows/${encodeURIComponent(o)}/config`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"})}})}function p(){const e=s();return u({mutationFn:o=>r(`/workflows/${encodeURIComponent(o)}/config`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"})}})}function g(){const e=s();return u({mutationFn:({config:o,cron_schedule:t,envelope_schema:i})=>r(`/workflows/${encodeURIComponent(o.workflow_type)}/config`,{method:"PUT",body:JSON.stringify({...o,cron_schedule:t,...i!==void 0?{envelope_schema:i}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"}),e.invalidateQueries({queryKey:["cronStatus"],refetchType:"all"})}})}function C(){const e=s();return u({mutationFn:({workflowType:o,data:t,metadata:i,execute_as:a})=>r(`/workflows/${o}/invoke`,{method:"POST",body:JSON.stringify({data:t,metadata:i,...a?{execute_as:a}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["tasks"],refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}export{k as a,m as b,C as c,g as d,w as e,d as f,q as g,f as h,p as i,h as j,l as u};
2
- //# sourceMappingURL=workflows-Yq7cK-vR.js.map
1
+ import{u as n,b as s,c as u}from"./vendor-query-B2UbickB.js";import{b as r}from"./index-BhhWCADo.js";function f(){return n({queryKey:["activeWorkers"],queryFn:async()=>(await r("/workflows/workers")).workers})}function w(){return n({queryKey:["discoveredWorkflows"],queryFn:async()=>(await r("/workflows/discovered")).workflows})}function l(){return n({queryKey:["workflowConfigs"],queryFn:async()=>(await r("/workflows/config")).workflows})}function d(){return n({queryKey:["cronStatus"],queryFn:async()=>(await r("/workflows/cron/status")).schedules})}function k(e){return n({queryKey:["workflowExecution",e],queryFn:()=>r(`/workflow-states/${e}/execution`),enabled:!!e})}function m(e){const o=new URLSearchParams;return e.limit&&o.set("limit",String(e.limit)),e.offset!==void 0&&o.set("offset",String(e.offset)),e.entity&&o.set("entity",e.entity),e.search&&o.set("search",e.search),e.status&&o.set("status",e.status),e.sort_by&&o.set("sort_by",e.sort_by),e.order&&o.set("order",e.order),e.registered&&o.set("registered",e.registered),e.namespace&&o.set("namespace",e.namespace),n({queryKey:["jobs",e],queryFn:()=>r(`/workflow-states/jobs?${o}`)})}function q(){const e=s();return u({mutationFn:o=>r(`/workflows/${o}/terminate`,{method:"POST"}),onSuccess:(o,t)=>{e.invalidateQueries({queryKey:["workflowExecution",t],refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}function h(){const e=s();return u({mutationFn:({workflow_type:o,...t})=>r(`/workflows/${encodeURIComponent(o)}/config`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"})}})}function p(){const e=s();return u({mutationFn:o=>r(`/workflows/${encodeURIComponent(o)}/config`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"})}})}function g(){const e=s();return u({mutationFn:({config:o,cron_schedule:t,envelope_schema:i})=>r(`/workflows/${encodeURIComponent(o.workflow_type)}/config`,{method:"PUT",body:JSON.stringify({...o,cron_schedule:t,...i!==void 0?{envelope_schema:i}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["workflowConfigs"],refetchType:"all"}),e.invalidateQueries({queryKey:["cronStatus"],refetchType:"all"})}})}function C(){const e=s();return u({mutationFn:({workflowType:o,data:t,metadata:i,execute_as:a})=>r(`/workflows/${o}/invoke`,{method:"POST",body:JSON.stringify({data:t,metadata:i,...a?{execute_as:a}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["tasks"],refetchType:"all"}),e.invalidateQueries({queryKey:["jobs"],refetchType:"all"})}})}export{k as a,m as b,C as c,g as d,w as e,d as f,q as g,f as h,p as i,h as j,l as u};
2
+ //# sourceMappingURL=workflows-DFR0-hI3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflows-Yq7cK-vR.js","sources":["../../src/api/workflows.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { ActiveWorker, CronScheduleEntry, DiscoveredWorkflow, LTJob, LTWorkflowConfig, WorkflowExecution } from './types';\n\nexport function useActiveWorkers() {\n return useQuery<ActiveWorker[]>({\n queryKey: ['activeWorkers'],\n queryFn: async () => {\n const res = await apiFetch<{ workers: ActiveWorker[] }>('/workflows/workers');\n return res.workers;\n },\n });\n}\n\nexport function useDiscoveredWorkflows() {\n return useQuery<DiscoveredWorkflow[]>({\n queryKey: ['discoveredWorkflows'],\n queryFn: async () => {\n const res = await apiFetch<{ workflows: DiscoveredWorkflow[] }>('/workflows/discovered');\n return res.workflows;\n },\n });\n}\n\nexport function useWorkflowConfigs() {\n return useQuery<LTWorkflowConfig[]>({\n queryKey: ['workflowConfigs'],\n queryFn: async () => {\n const res = await apiFetch<{ workflows: LTWorkflowConfig[] }>('/workflows/config');\n return res.workflows;\n },\n });\n}\n\nexport function useCronStatus() {\n return useQuery<CronScheduleEntry[]>({\n queryKey: ['cronStatus'],\n queryFn: async () => {\n const res = await apiFetch<{ schedules: CronScheduleEntry[] }>('/workflows/cron/status');\n return res.schedules;\n },\n });\n}\n\nexport function useWorkflowExecution(workflowId: string) {\n return useQuery<WorkflowExecution>({\n queryKey: ['workflowExecution', workflowId],\n queryFn: () =>\n apiFetch(`/workflow-states/${workflowId}/execution`),\n enabled: !!workflowId,\n });\n}\n\nexport function useWorkflowState(workflowId: string) {\n return useQuery<{ workflow_id: string; state: Record<string, unknown> }>({\n queryKey: ['workflowState', workflowId],\n queryFn: () => apiFetch(`/workflow-states/${workflowId}/state`),\n enabled: !!workflowId,\n });\n}\n\nexport function useJobs(filters: {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n sort_by?: string;\n order?: string;\n registered?: string;\n namespace?: string;\n}) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n if (filters.registered) params.set('registered', filters.registered);\n if (filters.namespace) params.set('namespace', filters.namespace);\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['jobs', filters],\n queryFn: () => apiFetch(`/workflow-states/jobs?${params}`),\n });\n}\n\nexport function useTerminateWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (workflowId: string) =>\n apiFetch(`/workflows/${workflowId}/terminate`, { method: 'POST' }),\n onSuccess: (_data, workflowId) => {\n queryClient.invalidateQueries({ queryKey: ['workflowExecution', workflowId], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useUpsertWorkflowConfig() {\n const queryClient = useQueryClient();\n return useMutation<\n LTWorkflowConfig,\n Error,\n {\n workflow_type: string;\n description?: string | null;\n\n invocable?: boolean;\n task_queue?: string | null;\n default_role?: string;\n roles?: string[];\n invocation_roles?: string[];\n consumes?: string[];\n envelope_schema?: Record<string, unknown> | null;\n resolver_schema?: Record<string, unknown> | null;\n cron_schedule?: string | null;\n execute_as?: string | null;\n }\n >({\n mutationFn: ({ workflow_type, ...body }) =>\n apiFetch(`/workflows/${encodeURIComponent(workflow_type)}/config`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeleteWorkflowConfig() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean; workflow_type: string }, Error, string>({\n mutationFn: (workflowType) =>\n apiFetch(`/workflows/${encodeURIComponent(workflowType)}/config`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useSetCronSchedule() {\n const queryClient = useQueryClient();\n return useMutation<\n LTWorkflowConfig,\n Error,\n { config: LTWorkflowConfig; cron_schedule: string | null; envelope_schema?: Record<string, unknown> | null }\n >({\n mutationFn: ({ config, cron_schedule, envelope_schema }) =>\n apiFetch(`/workflows/${encodeURIComponent(config.workflow_type)}/config`, {\n method: 'PUT',\n body: JSON.stringify({\n ...config,\n cron_schedule,\n ...(envelope_schema !== undefined ? { envelope_schema } : {}),\n }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['cronStatus'], refetchType: 'all' });\n },\n });\n}\n\nexport function useInvokeWorkflow() {\n const queryClient = useQueryClient();\n return useMutation<\n { workflowId: string; message: string },\n Error,\n { workflowType: string; data: Record<string, unknown>; metadata?: Record<string, unknown>; execute_as?: string }\n >({\n mutationFn: ({ workflowType, data, metadata, execute_as }) =>\n apiFetch(`/workflows/${workflowType}/invoke`, {\n method: 'POST',\n body: JSON.stringify({ data, metadata, ...(execute_as ? { execute_as } : {}) }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['tasks'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n"],"names":["useActiveWorkers","useQuery","apiFetch","useDiscoveredWorkflows","useWorkflowConfigs","useCronStatus","useWorkflowExecution","workflowId","useJobs","filters","params","useTerminateWorkflow","queryClient","useQueryClient","useMutation","_data","useUpsertWorkflowConfig","workflow_type","body","useDeleteWorkflowConfig","workflowType","useSetCronSchedule","config","cron_schedule","envelope_schema","useInvokeWorkflow","data","metadata","execute_as"],"mappings":"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"}
1
+ {"version":3,"file":"workflows-DFR0-hI3.js","sources":["../../src/api/workflows.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { ActiveWorker, CronScheduleEntry, DiscoveredWorkflow, LTJob, LTWorkflowConfig, WorkflowExecution } from './types';\n\nexport function useActiveWorkers() {\n return useQuery<ActiveWorker[]>({\n queryKey: ['activeWorkers'],\n queryFn: async () => {\n const res = await apiFetch<{ workers: ActiveWorker[] }>('/workflows/workers');\n return res.workers;\n },\n });\n}\n\nexport function useDiscoveredWorkflows() {\n return useQuery<DiscoveredWorkflow[]>({\n queryKey: ['discoveredWorkflows'],\n queryFn: async () => {\n const res = await apiFetch<{ workflows: DiscoveredWorkflow[] }>('/workflows/discovered');\n return res.workflows;\n },\n });\n}\n\nexport function useWorkflowConfigs() {\n return useQuery<LTWorkflowConfig[]>({\n queryKey: ['workflowConfigs'],\n queryFn: async () => {\n const res = await apiFetch<{ workflows: LTWorkflowConfig[] }>('/workflows/config');\n return res.workflows;\n },\n });\n}\n\nexport function useCronStatus() {\n return useQuery<CronScheduleEntry[]>({\n queryKey: ['cronStatus'],\n queryFn: async () => {\n const res = await apiFetch<{ schedules: CronScheduleEntry[] }>('/workflows/cron/status');\n return res.schedules;\n },\n });\n}\n\nexport function useWorkflowExecution(workflowId: string) {\n return useQuery<WorkflowExecution>({\n queryKey: ['workflowExecution', workflowId],\n queryFn: () =>\n apiFetch(`/workflow-states/${workflowId}/execution`),\n enabled: !!workflowId,\n });\n}\n\nexport function useWorkflowState(workflowId: string) {\n return useQuery<{ workflow_id: string; state: Record<string, unknown> }>({\n queryKey: ['workflowState', workflowId],\n queryFn: () => apiFetch(`/workflow-states/${workflowId}/state`),\n enabled: !!workflowId,\n });\n}\n\nexport function useJobs(filters: {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n sort_by?: string;\n order?: string;\n registered?: string;\n namespace?: string;\n}) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n if (filters.registered) params.set('registered', filters.registered);\n if (filters.namespace) params.set('namespace', filters.namespace);\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['jobs', filters],\n queryFn: () => apiFetch(`/workflow-states/jobs?${params}`),\n });\n}\n\nexport function useTerminateWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (workflowId: string) =>\n apiFetch(`/workflows/${workflowId}/terminate`, { method: 'POST' }),\n onSuccess: (_data, workflowId) => {\n queryClient.invalidateQueries({ queryKey: ['workflowExecution', workflowId], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useUpsertWorkflowConfig() {\n const queryClient = useQueryClient();\n return useMutation<\n LTWorkflowConfig,\n Error,\n {\n workflow_type: string;\n description?: string | null;\n\n invocable?: boolean;\n task_queue?: string | null;\n default_role?: string;\n roles?: string[];\n invocation_roles?: string[];\n consumes?: string[];\n envelope_schema?: Record<string, unknown> | null;\n resolver_schema?: Record<string, unknown> | null;\n cron_schedule?: string | null;\n execute_as?: string | null;\n }\n >({\n mutationFn: ({ workflow_type, ...body }) =>\n apiFetch(`/workflows/${encodeURIComponent(workflow_type)}/config`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeleteWorkflowConfig() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean; workflow_type: string }, Error, string>({\n mutationFn: (workflowType) =>\n apiFetch(`/workflows/${encodeURIComponent(workflowType)}/config`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n },\n });\n}\n\nexport function useSetCronSchedule() {\n const queryClient = useQueryClient();\n return useMutation<\n LTWorkflowConfig,\n Error,\n { config: LTWorkflowConfig; cron_schedule: string | null; envelope_schema?: Record<string, unknown> | null }\n >({\n mutationFn: ({ config, cron_schedule, envelope_schema }) =>\n apiFetch(`/workflows/${encodeURIComponent(config.workflow_type)}/config`, {\n method: 'PUT',\n body: JSON.stringify({\n ...config,\n cron_schedule,\n ...(envelope_schema !== undefined ? { envelope_schema } : {}),\n }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['workflowConfigs'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['cronStatus'], refetchType: 'all' });\n },\n });\n}\n\nexport function useInvokeWorkflow() {\n const queryClient = useQueryClient();\n return useMutation<\n { workflowId: string; message: string },\n Error,\n { workflowType: string; data: Record<string, unknown>; metadata?: Record<string, unknown>; execute_as?: string }\n >({\n mutationFn: ({ workflowType, data, metadata, execute_as }) =>\n apiFetch(`/workflows/${workflowType}/invoke`, {\n method: 'POST',\n body: JSON.stringify({ data, metadata, ...(execute_as ? { execute_as } : {}) }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['tasks'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['jobs'], refetchType: 'all' });\n },\n });\n}\n"],"names":["useActiveWorkers","useQuery","apiFetch","useDiscoveredWorkflows","useWorkflowConfigs","useCronStatus","useWorkflowExecution","workflowId","useJobs","filters","params","useTerminateWorkflow","queryClient","useQueryClient","useMutation","_data","useUpsertWorkflowConfig","workflow_type","body","useDeleteWorkflowConfig","workflowType","useSetCronSchedule","config","cron_schedule","envelope_schema","useInvokeWorkflow","data","metadata","execute_as"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as l,b as a,c as n}from"./vendor-query-DLp59M9_.js";import{b as r}from"./index-CCOSf1PY.js";function f(e={}){const o=new URLSearchParams;return e.status&&o.set("status",e.status),e.graph_topic&&o.set("graph_topic",e.graph_topic),e.app_id&&o.set("app_id",e.app_id),e.search&&o.set("search",e.search),e.set_id&&o.set("set_id",e.set_id),e.limit&&o.set("limit",String(e.limit)),e.offset!==void 0&&o.set("offset",String(e.offset)),l({queryKey:["yamlWorkflows",e],queryFn:()=>r(`/yaml-workflows?${o}`)})}function m(){return l({queryKey:["yamlWorkflowAppIds"],queryFn:()=>r("/yaml-workflows/app-ids")})}function c(e){return l({queryKey:["yamlWorkflows",e],queryFn:()=>r(`/yaml-workflows/${e}`),enabled:!!e})}function w(){const e=a();return n({mutationFn:o=>r("/yaml-workflows",{method:"POST",body:JSON.stringify(o)}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function k(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/deploy`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function d(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/activate`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function p(){const e=a();return n({mutationFn:({id:o,data:t,sync:s,execute_as:u})=>r(`/yaml-workflows/${o}/invoke`,{method:"POST",body:JSON.stringify({data:t,sync:s,...u?{execute_as:u}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function h(){const e=a();return n({mutationFn:({id:o,task_queue:t,compilation_feedback:s})=>r(`/yaml-workflows/${o}/regenerate`,{method:"POST",body:JSON.stringify({task_queue:t,compilation_feedback:s})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function q(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/archive`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function W(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/restore`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"}),e.invalidateQueries({queryKey:["yamlWorkflow"],refetchType:"all"})}})}function S(){const e=a();return n({mutationFn:({id:o,...t})=>r(`/yaml-workflows/${o}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function T(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function v(){const e=a();return n({mutationFn:({id:o,cron_schedule:t,cron_envelope:s,execute_as:u})=>r(`/yaml-workflows/${o}/cron`,{method:"PUT",body:JSON.stringify({cron_schedule:t,cron_envelope:s,execute_as:u})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function F(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/cron`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function K(e){return l({queryKey:["yamlWorkflows",e,"versions"],queryFn:()=>r(`/yaml-workflows/${e}/versions`),enabled:!!e})}function C(e,o){return l({queryKey:["yamlWorkflows",e,"versions",o],queryFn:()=>r(`/yaml-workflows/${e}/versions/${o}`),enabled:!!e&&o!==null})}export{m as a,S as b,c,K as d,k as e,d as f,q as g,W as h,T as i,h as j,C as k,p as l,w as m,v as n,F as o,f as u};
2
- //# sourceMappingURL=yaml-workflows-Ch53yD43.js.map
1
+ import{u as l,b as a,c as n}from"./vendor-query-B2UbickB.js";import{b as r}from"./index-BhhWCADo.js";function f(e={}){const o=new URLSearchParams;return e.status&&o.set("status",e.status),e.graph_topic&&o.set("graph_topic",e.graph_topic),e.app_id&&o.set("app_id",e.app_id),e.search&&o.set("search",e.search),e.set_id&&o.set("set_id",e.set_id),e.limit&&o.set("limit",String(e.limit)),e.offset!==void 0&&o.set("offset",String(e.offset)),l({queryKey:["yamlWorkflows",e],queryFn:()=>r(`/yaml-workflows?${o}`)})}function m(){return l({queryKey:["yamlWorkflowAppIds"],queryFn:()=>r("/yaml-workflows/app-ids")})}function c(e){return l({queryKey:["yamlWorkflows",e],queryFn:()=>r(`/yaml-workflows/${e}`),enabled:!!e})}function w(){const e=a();return n({mutationFn:o=>r("/yaml-workflows",{method:"POST",body:JSON.stringify(o)}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function k(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/deploy`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function d(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/activate`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function p(){const e=a();return n({mutationFn:({id:o,data:t,sync:s,execute_as:u})=>r(`/yaml-workflows/${o}/invoke`,{method:"POST",body:JSON.stringify({data:t,sync:s,...u?{execute_as:u}:{}})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function h(){const e=a();return n({mutationFn:({id:o,task_queue:t,compilation_feedback:s})=>r(`/yaml-workflows/${o}/regenerate`,{method:"POST",body:JSON.stringify({task_queue:t,compilation_feedback:s})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function q(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/archive`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function W(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/restore`,{method:"POST"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"}),e.invalidateQueries({queryKey:["yamlWorkflow"],refetchType:"all"})}})}function S(){const e=a();return n({mutationFn:({id:o,...t})=>r(`/yaml-workflows/${o}`,{method:"PUT",body:JSON.stringify(t)}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function T(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function v(){const e=a();return n({mutationFn:({id:o,cron_schedule:t,cron_envelope:s,execute_as:u})=>r(`/yaml-workflows/${o}/cron`,{method:"PUT",body:JSON.stringify({cron_schedule:t,cron_envelope:s,execute_as:u})}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function F(){const e=a();return n({mutationFn:o=>r(`/yaml-workflows/${o}/cron`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function K(e){return l({queryKey:["yamlWorkflows",e,"versions"],queryFn:()=>r(`/yaml-workflows/${e}/versions`),enabled:!!e})}function C(e,o){return l({queryKey:["yamlWorkflows",e,"versions",o],queryFn:()=>r(`/yaml-workflows/${e}/versions/${o}`),enabled:!!e&&o!==null})}export{m as a,S as b,c,K as d,k as e,d as f,q as g,W as h,T as i,h as j,C as k,p as l,w as m,v as n,F as o,f as u};
2
+ //# sourceMappingURL=yaml-workflows-wXURdyjP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-workflows-Ch53yD43.js","sources":["../../src/api/yaml-workflows.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTYamlWorkflowRecord, LTYamlWorkflowStatus, LTYamlWorkflowVersion } from './types';\n\ninterface YamlWorkflowListResponse {\n workflows: LTYamlWorkflowRecord[];\n total: number;\n}\n\ninterface YamlWorkflowFilters {\n status?: LTYamlWorkflowStatus;\n graph_topic?: string;\n app_id?: string;\n search?: string;\n set_id?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useYamlWorkflows(filters: YamlWorkflowFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.graph_topic) params.set('graph_topic', filters.graph_topic);\n if (filters.app_id) params.set('app_id', filters.app_id);\n if (filters.search) params.set('search', filters.search);\n if (filters.set_id) params.set('set_id', filters.set_id);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<YamlWorkflowListResponse>({\n queryKey: ['yamlWorkflows', filters],\n queryFn: () => apiFetch(`/yaml-workflows?${params}`),\n });\n}\n\nexport function useYamlWorkflowAppIds() {\n return useQuery<{ app_ids: string[] }>({\n queryKey: ['yamlWorkflowAppIds'],\n queryFn: () => apiFetch('/yaml-workflows/app-ids'),\n });\n}\n\nexport function useYamlWorkflowByTopic(graphTopic: string | undefined, appId?: string) {\n return useQuery<YamlWorkflowListResponse>({\n queryKey: ['yamlWorkflows', 'byTopic', graphTopic, appId],\n queryFn: () => {\n const params = new URLSearchParams({ graph_topic: graphTopic!, limit: '1' });\n if (appId) params.set('app_id', appId);\n return apiFetch(`/yaml-workflows?${params}`);\n },\n enabled: !!graphTopic,\n });\n}\n\nexport function useYamlWorkflow(id: string) {\n return useQuery<LTYamlWorkflowRecord>({\n queryKey: ['yamlWorkflows', id],\n queryFn: () => apiFetch(`/yaml-workflows/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: {\n workflow_id: string;\n task_queue: string;\n workflow_name: string;\n name: string;\n description?: string;\n app_id?: string;\n subscribes?: string;\n tags?: string[];\n compilation_feedback?: string;\n }) =>\n apiFetch<LTYamlWorkflowRecord>('/yaml-workflows', {\n method: 'POST',\n body: JSON.stringify(input),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeployYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/deploy`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useActivateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/activate`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useInvokeYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, data, sync, execute_as }: { id: string; data: Record<string, unknown>; sync?: boolean; execute_as?: string }) =>\n apiFetch<{ result?: unknown; job_id?: string }>(`/yaml-workflows/${id}/invoke`, {\n method: 'POST',\n body: JSON.stringify({ data, sync, ...(execute_as ? { execute_as } : {}) }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useRegenerateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, task_queue, compilation_feedback }: { id: string; task_queue?: string; compilation_feedback?: string }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/regenerate`, {\n method: 'POST',\n body: JSON.stringify({ task_queue, compilation_feedback }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useArchiveYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/archive`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useRestoreYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/restore`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflow'], refetchType: 'all' });\n },\n });\n}\n\nexport function useUpdateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, ...updates }: { id: string; yaml_content?: string; name?: string; description?: string; input_schema?: Record<string, unknown>; output_schema?: Record<string, unknown>; tags?: string[]; app_id?: string; graph_topic?: string }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}`, {\n method: 'PUT',\n body: JSON.stringify(updates),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeleteYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<{ deleted: boolean }>(`/yaml-workflows/${id}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n// ── Cron scheduling ─────────────────────────────────────────────\n\nexport function useSetYamlCron() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, cron_schedule, cron_envelope, execute_as }: {\n id: string;\n cron_schedule: string;\n cron_envelope?: Record<string, unknown> | null;\n execute_as?: string | null;\n }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/cron`, {\n method: 'PUT',\n body: JSON.stringify({ cron_schedule, cron_envelope, execute_as }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useClearYamlCron() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/cron`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n// ── Version history ─────────────────────────────────────────────\n\nexport function useYamlWorkflowVersions(id: string) {\n return useQuery<{ versions: LTYamlWorkflowVersion[]; total: number }>({\n queryKey: ['yamlWorkflows', id, 'versions'],\n queryFn: () => apiFetch(`/yaml-workflows/${id}/versions`),\n enabled: !!id,\n });\n}\n\nexport function useYamlWorkflowVersion(id: string, version: number | null) {\n return useQuery<LTYamlWorkflowVersion>({\n queryKey: ['yamlWorkflows', id, 'versions', version],\n queryFn: () => apiFetch(`/yaml-workflows/${id}/versions/${version}`),\n enabled: !!id && version !== null,\n });\n}\n"],"names":["useYamlWorkflows","filters","params","useQuery","apiFetch","useYamlWorkflowAppIds","useYamlWorkflow","id","useCreateYamlWorkflow","queryClient","useQueryClient","useMutation","input","useDeployYamlWorkflow","useActivateYamlWorkflow","useInvokeYamlWorkflow","data","sync","execute_as","useRegenerateYamlWorkflow","task_queue","compilation_feedback","useArchiveYamlWorkflow","useRestoreYamlWorkflow","useUpdateYamlWorkflow","updates","useDeleteYamlWorkflow","useSetYamlCron","cron_schedule","cron_envelope","useClearYamlCron","useYamlWorkflowVersions","useYamlWorkflowVersion","version"],"mappings":"qGAmBO,SAASA,EAAiBC,EAA+B,GAAI,CAClE,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,aAAaC,EAAO,IAAI,cAAeD,EAAQ,WAAW,EAClEA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAAmC,CACxC,SAAU,CAAC,gBAAiBF,CAAO,EACnC,QAAS,IAAMG,EAAS,mBAAmBF,CAAM,EAAE,CAAA,CACpD,CACH,CAEO,SAASG,GAAwB,CACtC,OAAOF,EAAgC,CACrC,SAAU,CAAC,oBAAoB,EAC/B,QAAS,IAAMC,EAAS,yBAAyB,CAAA,CAClD,CACH,CAcO,SAASE,EAAgBC,EAAY,CAC1C,OAAOJ,EAA+B,CACpC,SAAU,CAAC,gBAAiBI,CAAE,EAC9B,QAAS,IAAMH,EAAS,mBAAmBG,CAAE,EAAE,EAC/C,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAwB,CACtC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAWXR,EAA+B,kBAAmB,CAChD,OAAQ,OACR,KAAM,KAAK,UAAUQ,CAAK,CAAA,CAC3B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASI,GAAwB,CACtC,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,UAAW,CAC7D,OAAQ,MAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASK,GAA0B,CACxC,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,YAAa,CAC/D,OAAQ,MAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASM,GAAwB,CACtC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,GAAAJ,EAAI,KAAAS,EAAM,KAAAC,EAAM,WAAAC,KAC7Bd,EAAgD,mBAAmBG,CAAE,UAAW,CAC9E,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAS,EAAM,KAAAC,EAAM,GAAIC,EAAa,CAAE,WAAAA,CAAA,EAAe,GAAK,CAAA,CAC3E,EACH,UAAW,IAAM,CACfT,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASU,GAA4B,CAC1C,MAAMV,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,GAAAJ,EAAI,WAAAa,EAAY,qBAAAC,KAC7BjB,EAA+B,mBAAmBG,CAAE,cAAe,CACjE,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,WAAAa,EAAY,qBAAAC,EAAsB,CAAA,CAC1D,EACH,UAAW,IAAM,CACfZ,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASa,GAAyB,CACvC,MAAMb,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,WAAY,CAC9D,OAAQ,MAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASc,GAAyB,CACvC,MAAMd,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,WAAY,CAC9D,OAAQ,MAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,EACjFA,EAAY,kBAAkB,CAAE,SAAU,CAAC,cAAc,EAAG,YAAa,MAAO,CAClF,CAAA,CACD,CACH,CAEO,SAASe,GAAwB,CACtC,MAAMf,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,GAAAJ,EAAI,GAAGkB,KACpBrB,EAA+B,mBAAmBG,CAAE,GAAI,CACtD,OAAQ,MACR,KAAM,KAAK,UAAUkB,CAAO,CAAA,CAC7B,EACH,UAAW,IAAM,CACfhB,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASiB,GAAwB,CACtC,MAAMjB,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,GAAI,CACtD,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAIO,SAASkB,GAAiB,CAC/B,MAAMlB,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,GAAAJ,EAAI,cAAAqB,EAAe,cAAAC,EAAe,WAAAX,KAM/Cd,EAA+B,mBAAmBG,CAAE,QAAS,CAC3D,OAAQ,MACR,KAAM,KAAK,UAAU,CAAE,cAAAqB,EAAe,cAAAC,EAAe,WAAAX,EAAY,CAAA,CAClE,EACH,UAAW,IAAM,CACfT,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAEO,SAASqB,GAAmB,CACjC,MAAMrB,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXH,EAA+B,mBAAmBG,CAAE,QAAS,CAC3D,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,eAAe,EAAG,YAAa,MAAO,CACnF,CAAA,CACD,CACH,CAIO,SAASsB,EAAwBxB,EAAY,CAClD,OAAOJ,EAA+D,CACpE,SAAU,CAAC,gBAAiBI,EAAI,UAAU,EAC1C,QAAS,IAAMH,EAAS,mBAAmBG,CAAE,WAAW,EACxD,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASyB,EAAuBzB,EAAY0B,EAAwB,CACzE,OAAO9B,EAAgC,CACrC,SAAU,CAAC,gBAAiBI,EAAI,WAAY0B,CAAO,EACnD,QAAS,IAAM7B,EAAS,mBAAmBG,CAAE,aAAa0B,CAAO,EAAE,EACnE,QAAS,CAAC,CAAC1B,GAAM0B,IAAY,IAAA,CAC9B,CACH"}
1
+ {"version":3,"file":"yaml-workflows-wXURdyjP.js","sources":["../../src/api/yaml-workflows.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTYamlWorkflowRecord, LTYamlWorkflowStatus, LTYamlWorkflowVersion } from './types';\n\ninterface YamlWorkflowListResponse {\n workflows: LTYamlWorkflowRecord[];\n total: number;\n}\n\ninterface YamlWorkflowFilters {\n status?: LTYamlWorkflowStatus;\n graph_topic?: string;\n app_id?: string;\n search?: string;\n set_id?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useYamlWorkflows(filters: YamlWorkflowFilters = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.graph_topic) params.set('graph_topic', filters.graph_topic);\n if (filters.app_id) params.set('app_id', filters.app_id);\n if (filters.search) params.set('search', filters.search);\n if (filters.set_id) params.set('set_id', filters.set_id);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<YamlWorkflowListResponse>({\n queryKey: ['yamlWorkflows', filters],\n queryFn: () => apiFetch(`/yaml-workflows?${params}`),\n });\n}\n\nexport function useYamlWorkflowAppIds() {\n return useQuery<{ app_ids: string[] }>({\n queryKey: ['yamlWorkflowAppIds'],\n queryFn: () => apiFetch('/yaml-workflows/app-ids'),\n });\n}\n\nexport function useYamlWorkflowByTopic(graphTopic: string | undefined, appId?: string) {\n return useQuery<YamlWorkflowListResponse>({\n queryKey: ['yamlWorkflows', 'byTopic', graphTopic, appId],\n queryFn: () => {\n const params = new URLSearchParams({ graph_topic: graphTopic!, limit: '1' });\n if (appId) params.set('app_id', appId);\n return apiFetch(`/yaml-workflows?${params}`);\n },\n enabled: !!graphTopic,\n });\n}\n\nexport function useYamlWorkflow(id: string) {\n return useQuery<LTYamlWorkflowRecord>({\n queryKey: ['yamlWorkflows', id],\n queryFn: () => apiFetch(`/yaml-workflows/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (input: {\n workflow_id: string;\n task_queue: string;\n workflow_name: string;\n name: string;\n description?: string;\n app_id?: string;\n subscribes?: string;\n tags?: string[];\n compilation_feedback?: string;\n }) =>\n apiFetch<LTYamlWorkflowRecord>('/yaml-workflows', {\n method: 'POST',\n body: JSON.stringify(input),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeployYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/deploy`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useActivateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/activate`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useInvokeYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, data, sync, execute_as }: { id: string; data: Record<string, unknown>; sync?: boolean; execute_as?: string }) =>\n apiFetch<{ result?: unknown; job_id?: string }>(`/yaml-workflows/${id}/invoke`, {\n method: 'POST',\n body: JSON.stringify({ data, sync, ...(execute_as ? { execute_as } : {}) }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useRegenerateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, task_queue, compilation_feedback }: { id: string; task_queue?: string; compilation_feedback?: string }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/regenerate`, {\n method: 'POST',\n body: JSON.stringify({ task_queue, compilation_feedback }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useArchiveYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/archive`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useRestoreYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/restore`, {\n method: 'POST',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflow'], refetchType: 'all' });\n },\n });\n}\n\nexport function useUpdateYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, ...updates }: { id: string; yaml_content?: string; name?: string; description?: string; input_schema?: Record<string, unknown>; output_schema?: Record<string, unknown>; tags?: string[]; app_id?: string; graph_topic?: string }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}`, {\n method: 'PUT',\n body: JSON.stringify(updates),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useDeleteYamlWorkflow() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<{ deleted: boolean }>(`/yaml-workflows/${id}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n// ── Cron scheduling ─────────────────────────────────────────────\n\nexport function useSetYamlCron() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ id, cron_schedule, cron_envelope, execute_as }: {\n id: string;\n cron_schedule: string;\n cron_envelope?: Record<string, unknown> | null;\n execute_as?: string | null;\n }) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/cron`, {\n method: 'PUT',\n body: JSON.stringify({ cron_schedule, cron_envelope, execute_as }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\nexport function useClearYamlCron() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch<LTYamlWorkflowRecord>(`/yaml-workflows/${id}/cron`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n// ── Version history ─────────────────────────────────────────────\n\nexport function useYamlWorkflowVersions(id: string) {\n return useQuery<{ versions: LTYamlWorkflowVersion[]; total: number }>({\n queryKey: ['yamlWorkflows', id, 'versions'],\n queryFn: () => apiFetch(`/yaml-workflows/${id}/versions`),\n enabled: !!id,\n });\n}\n\nexport function useYamlWorkflowVersion(id: string, version: number | null) {\n return useQuery<LTYamlWorkflowVersion>({\n queryKey: ['yamlWorkflows', id, 'versions', version],\n queryFn: () => apiFetch(`/yaml-workflows/${id}/versions/${version}`),\n enabled: !!id && version !== null,\n });\n}\n"],"names":["useYamlWorkflows","filters","params","useQuery","apiFetch","useYamlWorkflowAppIds","useYamlWorkflow","id","useCreateYamlWorkflow","queryClient","useQueryClient","useMutation","input","useDeployYamlWorkflow","useActivateYamlWorkflow","useInvokeYamlWorkflow","data","sync","execute_as","useRegenerateYamlWorkflow","task_queue","compilation_feedback","useArchiveYamlWorkflow","useRestoreYamlWorkflow","useUpdateYamlWorkflow","updates","useDeleteYamlWorkflow","useSetYamlCron","cron_schedule","cron_envelope","useClearYamlCron","useYamlWorkflowVersions","useYamlWorkflowVersion","version"],"mappings":"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"}
@@ -8,11 +8,11 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index-CCOSf1PY.js"></script>
12
- <link rel="modulepreload" crossorigin href="/assets/vendor-query-DLp59M9_.js">
13
- <link rel="modulepreload" crossorigin href="/assets/vendor-react-Co3Y8ikm.js">
14
- <link rel="modulepreload" crossorigin href="/assets/vendor-icons-CBOM6Es0.js">
15
- <link rel="stylesheet" crossorigin href="/assets/index-BIUHY2Jz.css">
11
+ <script type="module" crossorigin src="/assets/index-BhhWCADo.js"></script>
12
+ <link rel="modulepreload" crossorigin href="/assets/vendor-query-B2UbickB.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/vendor-react-CX88sFS5.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/vendor-icons-DY1ctJgc.js">
15
+ <link rel="stylesheet" crossorigin href="/assets/index-CHxvfc97.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="root"></div>
package/docs/agents.md CHANGED
@@ -36,7 +36,7 @@ An agent without motivation is pure automation. An agent with motivation has jud
36
36
 
37
37
  ## knowledge
38
38
 
39
- Assign a knowledge domain — the agent's memory. It stores context here over time, learning from every interaction.
39
+ Assign a knowledge domain — the agent's memory. It stores context here over time.
40
40
 
41
41
  Knowledge domains are shared — multiple agents can read from the same domain. But typically one agent owns a domain and accumulates into it, while others read from it.
42
42
 
@@ -25,8 +25,7 @@ Returns agents with subscription counts and topic lists (via JOIN).
25
25
  {
26
26
  "agents": [
27
27
  {
28
- "id": "uuid",
29
- "name": "health-monitor",
28
+ "id": "health-monitor",
30
29
  "description": "Watches for workflow failures",
31
30
  "status": "active",
32
31
  "knowledge_domain": "system-health",
@@ -53,8 +52,7 @@ Returns an agent with aggregated stats (knowledge entry count, escalation count)
53
52
 
54
53
  ```json
55
54
  {
56
- "id": "uuid",
57
- "name": "health-monitor",
55
+ "id": "health-monitor",
58
56
  "stats": { "knowledge_count": 3, "escalation_count": 0 },
59
57
  ...
60
58
  }
@@ -70,7 +68,7 @@ POST /api/agents
70
68
 
71
69
  ```json
72
70
  {
73
- "name": "health-monitor",
71
+ "id": "health-monitor",
74
72
  "description": "Watches for workflow failures and schema drift",
75
73
  "goals": "Detect failures early, capture diagnostics",
76
74
  "rules": "Never auto-restart failed workflows",
@@ -86,7 +84,7 @@ POST /api/agents
86
84
 
87
85
  | Field | Type | Required | Description |
88
86
  |-------|------|----------|-------------|
89
- | `name` | `string` | Yes | Unique kebab-case identifier |
87
+ | `id` | `string` | Yes | Unique kebab-case identifier (e.g. `health-monitor`). Serves as primary key. |
90
88
  | `description` | `string` | No | One-sentence summary |
91
89
  | `goals` | `string` | No | Agent's primary motivation |
92
90
  | `rules` | `string` | No | Guardrails and constraints |
@@ -136,7 +134,7 @@ GET /api/agents/:agentId/subscriptions
136
134
  "subscriptions": [
137
135
  {
138
136
  "id": "uuid",
139
- "agent_id": "uuid",
137
+ "agent_id": "health-monitor",
140
138
  "topic": "workflow.failed",
141
139
  "filter": { "status": 422 },
142
140
  "reaction_type": "durable",
@@ -0,0 +1,193 @@
1
+ # Control Plane API
2
+
3
+ Admin-only endpoints for application discovery, worker health, throttling, stream statistics, and stream message browsing.
4
+
5
+ All endpoints require admin or superadmin role.
6
+
7
+ ---
8
+
9
+ ## List applications
10
+
11
+ ```
12
+ GET /api/controlplane/apps
13
+ ```
14
+
15
+ List all registered HotMesh application namespaces.
16
+
17
+ **Response 200:**
18
+
19
+ ```json
20
+ { "apps": [{ "appId": "durable", "version": "1.0.0" }] }
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Roll call
26
+
27
+ ```
28
+ GET /api/controlplane/rollcall?app_id=durable&delay=2000
29
+ ```
30
+
31
+ Discover all running engines and workers for an application by broadcasting a ping.
32
+
33
+ **Query parameters:**
34
+
35
+ | Parameter | Type | Required | Description |
36
+ |-----------|------|----------|-------------|
37
+ | `app_id` | `string` | No | Application namespace (default: `durable`) |
38
+ | `delay` | `number` | No | Milliseconds to wait for responses |
39
+
40
+ **Response 200:**
41
+
42
+ ```json
43
+ { "profiles": [{ "engine_id": "...", "worker_topic": "...", "throttle": 0 }] }
44
+ ```
45
+
46
+ ---
47
+
48
+ ## Throttle
49
+
50
+ ```
51
+ POST /api/controlplane/throttle
52
+ ```
53
+
54
+ Apply a throttle rate to workflow execution across the mesh.
55
+
56
+ **Request body:**
57
+
58
+ | Field | Type | Required | Description |
59
+ |-------|------|----------|-------------|
60
+ | `appId` | `string` | No | Application namespace (default: `durable`) |
61
+ | `throttle` | `number` | Yes | Delay in ms per message (`-1` = pause, `0` = resume) |
62
+ | `topic` | `string` | No | Scope throttle to a specific worker topic |
63
+ | `guid` | `string` | No | Scope throttle to a specific engine/worker GUID |
64
+
65
+ **Response 200:**
66
+
67
+ ```json
68
+ { "success": true }
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Stream statistics
74
+
75
+ ```
76
+ GET /api/controlplane/streams?app_id=durable&duration=1h&stream=hmsh:durable:w:
77
+ ```
78
+
79
+ Throughput and backlog metrics for engine and worker streams.
80
+
81
+ **Query parameters:**
82
+
83
+ | Parameter | Type | Required | Description |
84
+ |-----------|------|----------|-------------|
85
+ | `app_id` | `string` | No | Application namespace (default: `durable`) |
86
+ | `duration` | `string` | No | Time window: `15m`, `30m`, `1h`, `1d`, `7d` (default: `1h`) |
87
+ | `stream` | `string` | No | Filter to a specific stream name |
88
+
89
+ **Response 200:**
90
+
91
+ ```json
92
+ {
93
+ "pending": 12,
94
+ "processed": 340,
95
+ "byStream": [
96
+ { "stream_type": "engine", "stream_name": "hmsh:durable:x:", "count": 88 },
97
+ { "stream_type": "worker", "stream_name": "hmsh:durable:w:default", "count": 16 }
98
+ ]
99
+ }
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Browse stream messages
105
+
106
+ ```
107
+ GET /api/controlplane/stream-messages?namespace=durable&source=worker
108
+ &limit=25&offset=0&sort_by=created_at&order=desc
109
+ &status=pending&stream_name=hmsh:durable:w:&msg_type=WORKER
110
+ ```
111
+
112
+ Browse messages from a single stream table. Engine and worker streams are separate tables with different schemas and must never be commingled in a single query. Both `namespace` and `source` are required.
113
+
114
+ **Query parameters:**
115
+
116
+ | Parameter | Type | Required | Description |
117
+ |-----------|------|----------|-------------|
118
+ | `namespace` | `string` | **Yes** | Postgres schema / application namespace |
119
+ | `source` | `string` | **Yes** | Stream type: `engine` or `worker` |
120
+ | `limit` | `number` | No | Page size, 1–100 (default: `25`) |
121
+ | `offset` | `number` | No | Pagination offset (default: `0`) |
122
+ | `sort_by` | `string` | No | Sort column: `created_at`, `stream_name`, `priority`, `id` (default: `created_at`) |
123
+ | `order` | `string` | No | Sort direction: `asc` or `desc` (default: `desc`) |
124
+ | `status` | `string` | No | Filter: `pending`, `claimed`, `processed`, `dead_lettered` |
125
+ | `stream_name` | `string` | No | Partial match on stream name (ILIKE) |
126
+ | `msg_type` | `string` | No | Filter by message type (worker streams only) |
127
+
128
+ **Status derivation:**
129
+
130
+ Messages have no explicit status column. Status is derived from timestamps:
131
+
132
+ | Status | Condition |
133
+ |--------|-----------|
134
+ | `dead_lettered` | `dead_lettered_at IS NOT NULL` |
135
+ | `processed` | `expired_at IS NOT NULL` |
136
+ | `claimed` | `reserved_at IS NOT NULL` |
137
+ | `pending` | All timestamps NULL |
138
+
139
+ **Response 200:**
140
+
141
+ ```json
142
+ {
143
+ "messages": [
144
+ {
145
+ "id": "42",
146
+ "source": "worker",
147
+ "stream_name": "hmsh:durable:w:default",
148
+ "message": "{\"type\":\"WORKER\",\"metadata\":{...}}",
149
+ "status": "processed",
150
+ "created_at": "2026-05-23T14:30:00.000Z",
151
+ "reserved_at": "2026-05-23T14:30:01.000Z",
152
+ "reserved_by": "worker-abc",
153
+ "expired_at": "2026-05-23T14:30:02.000Z",
154
+ "dead_lettered_at": null,
155
+ "priority": 0,
156
+ "visible_at": "2026-05-23T14:30:00.000Z",
157
+ "retry_attempt": 0,
158
+ "max_retry_attempts": 3,
159
+ "workflow_name": "my-workflow",
160
+ "jid": "job-123",
161
+ "aid": "greet",
162
+ "dad": "",
163
+ "msg_type": "WORKER",
164
+ "topic": "default"
165
+ }
166
+ ],
167
+ "total": 1247
168
+ }
169
+ ```
170
+
171
+ Engine messages have `null` for worker-only fields (`workflow_name`, `jid`, `aid`, `dad`, `msg_type`, `topic`).
172
+
173
+ ---
174
+
175
+ ## Subscribe to mesh events
176
+
177
+ ```
178
+ POST /api/controlplane/subscribe
179
+ ```
180
+
181
+ Start the quorum-to-NATS bridge for an application so mesh events are forwarded to the dashboard.
182
+
183
+ **Request body:**
184
+
185
+ | Field | Type | Required | Description |
186
+ |-------|------|----------|-------------|
187
+ | `appId` | `string` | No | Application namespace (default: `durable`) |
188
+
189
+ **Response 200:**
190
+
191
+ ```json
192
+ { "subscribed": true, "appId": "durable" }
193
+ ```
@@ -26,18 +26,18 @@ Each agent includes `subscription_count` and `sub_topics[]` from a JOIN on `lt_a
26
26
  Get a single agent with stats.
27
27
 
28
28
  ```typescript
29
- const result = await lt.agents.get({ id: 'uuid' });
29
+ const result = await lt.agents.get({ id: 'health-monitor' });
30
30
  ```
31
31
 
32
32
  **Returns:** `LTApiResult<LTAgent & { stats: LTAgentStats }>`
33
33
 
34
34
  ## create
35
35
 
36
- Create an agent.
36
+ Create an agent. The `id` is the agent's human-readable name (kebab-case, URL-safe) and serves as the primary key.
37
37
 
38
38
  ```typescript
39
39
  const result = await lt.agents.create({
40
- name: 'health-monitor',
40
+ id: 'health-monitor',
41
41
  description: 'Watches for workflow failures',
42
42
  goals: 'Detect failures early',
43
43
  rules: 'Never auto-restart',
@@ -58,7 +58,7 @@ const result = await lt.agents.create({
58
58
  Partial update. Changing `status` or `behaviors` automatically restarts event subscriptions and cron schedules.
59
59
 
60
60
  ```typescript
61
- await lt.agents.update({ id: 'uuid', status: 'paused' });
61
+ await lt.agents.update({ id: 'health-monitor', status: 'paused' });
62
62
  ```
63
63
 
64
64
  **Returns:** `LTApiResult<LTAgent>`
@@ -68,7 +68,7 @@ await lt.agents.update({ id: 'uuid', status: 'paused' });
68
68
  Delete an agent. Stops subscriptions and schedules. Knowledge and workflow history preserved.
69
69
 
70
70
  ```typescript
71
- await lt.agents.delete({ id: 'uuid' });
71
+ await lt.agents.delete({ id: 'health-monitor' });
72
72
  ```
73
73
 
74
74
  **Returns:** `LTApiResult<{ deleted: true }>`
@@ -84,6 +84,42 @@ const result = await lt.controlplane.getStreamStats({ app_id: 'durable', duratio
84
84
 
85
85
  ---
86
86
 
87
+ ## listStreamMessages
88
+
89
+ Browse messages from a single stream table. Engine and worker streams are separate tables with different schemas — both `namespace` and `source` are required.
90
+
91
+ ```typescript
92
+ const result = await lt.controlplane.listStreamMessages({
93
+ namespace: 'durable',
94
+ source: 'worker',
95
+ limit: 25,
96
+ offset: 0,
97
+ sort_by: 'created_at',
98
+ order: 'desc',
99
+ status: 'pending',
100
+ });
101
+ ```
102
+
103
+ **Parameters:**
104
+
105
+ | Field | Type | Required | Description |
106
+ |-------|------|----------|-------------|
107
+ | `namespace` | `string` | **Yes** | Postgres schema / application namespace |
108
+ | `source` | `string` | **Yes** | Stream type: `engine` or `worker` |
109
+ | `limit` | `number` | No | Page size, 1–100 (default `25`) |
110
+ | `offset` | `number` | No | Pagination offset (default `0`) |
111
+ | `sort_by` | `string` | No | Sort column: `created_at`, `stream_name`, `priority`, `id` |
112
+ | `order` | `string` | No | Sort direction: `asc` or `desc` (default `desc`) |
113
+ | `status` | `string` | No | Filter: `pending`, `claimed`, `processed`, `dead_lettered` |
114
+ | `stream_name` | `string` | No | Partial match on stream name |
115
+ | `msg_type` | `string` | No | Filter by message type (worker streams only) |
116
+
117
+ **Returns:** `LTApiResult<{ messages: StreamMessage[], total: number }>`
118
+
119
+ **Auth:** Not required
120
+
121
+ ---
122
+
87
123
  ## subscribe
88
124
 
89
125
  Subscribe to mesh events for an application so they are captured and forwarded.
package/docs/dashboard.md CHANGED
@@ -226,6 +226,19 @@ This page is useful for verifying that workers started correctly after deploymen
226
226
 
227
227
  **API:** `GET /api/workers` lists active workers. `GET /api/workers/queues` lists queue statistics.
228
228
 
229
+ ### Messages
230
+
231
+ Browse individual stream messages from the Postgres engine and worker stream tables. Messages are schema-isolated by namespace and separated by source (engine or worker).
232
+
233
+ - **Namespace & Source** — required filters. Engine streams carry internal orchestration messages; worker streams carry task messages with workflow metadata (job ID, activity, message type).
234
+ - **Filters** — narrow by status (pending, claimed, processed, dead-lettered) and stream name (partial match).
235
+ - **Message detail** — click any row to open the inspector panel. Shows timestamps, retry info, worker metadata, and the full JSON payload with expandable tree view.
236
+ - **Pagination & sorting** — standard controls. Sort by created time, stream name, or priority.
237
+
238
+ Messages are read-only. Status is derived from timestamps: pending (no timestamps set), claimed (reserved), processed (expired), or dead-lettered.
239
+
240
+ **API:** `GET /api/controlplane/stream-messages?namespace=durable&source=worker` with optional `status`, `stream_name`, `sort_by`, `order`, `limit`, `offset` parameters.
241
+
229
242
  ### All Escalations
230
243
 
231
244
  The central queue for all escalation activity across every workflow.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Long Tail Workflows — Durable AI workflows with human-in-the-loop escalation. Powered by PostgreSQL.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -70,7 +70,7 @@
70
70
  "@anthropic-ai/sdk": "^0.92.0",
71
71
  "@aws-sdk/client-s3": "^3.1017.0",
72
72
  "@aws-sdk/s3-request-presigner": "^3.1045.0",
73
- "@hotmeshio/hotmesh": "^0.17.2",
73
+ "@hotmeshio/hotmesh": "^0.18.1",
74
74
  "@modelcontextprotocol/sdk": "^1.27.1",
75
75
  "@opentelemetry/exporter-trace-otlp-proto": "^0.215.0",
76
76
  "@opentelemetry/resources": "^2.5.1",
@@ -1,2 +0,0 @@
1
- import{r as n,j as o}from"./index-CCOSf1PY.js";import{c as m}from"./tasks-Cc-QoITQ.js";import{f as d}from"./useEventHooks-VaJ52jMm.js";import{u}from"./mcp-CsLJ5SRm.js";import{P as c}from"./PageHeaderWithStats-C0PCY3aJ.js";import"./vendor-query-DLp59M9_.js";import"./vendor-react-Co3Y8ikm.js";import"./vendor-icons-CBOM6Es0.js";function N(){var e;d();const{data:a}=m({limit:1}),{data:t}=n({status:"pending",limit:1}),{data:s}=u(),r=((e=s==null?void 0:s.servers)==null?void 0:e.filter(l=>l.status==="connected").length)??0,i=s?`${r}/${s.total}`:"—";return o.jsxDEV("div",{children:o.jsxDEV(c,{title:"Admin",stats:[{label:"Tasks",value:(a==null?void 0:a.total)??"—"},{label:"Pending Escalations",value:(t==null?void 0:t.total)??"—",dotClass:"bg-status-pending"},{label:"MCP Servers",value:i},{label:"System",value:"Healthy",dotClass:"bg-status-success"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/AdminDashboard.tsx",lineNumber:19,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/AdminDashboard.tsx",lineNumber:18,columnNumber:5},this)}export{N as AdminDashboard};
2
- //# sourceMappingURL=AdminDashboard-CbeSejVX.js.map