@hotmeshio/long-tail 0.4.2 → 0.4.4

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 (252) hide show
  1. package/build/api/settings.js +4 -0
  2. package/build/lib/db/index.d.ts +1 -7
  3. package/build/lib/db/schemas/008_capability_reaction.sql +12 -0
  4. package/build/lib/db/schemas/009_file_topic_category.sql +10 -0
  5. package/build/lib/events/index.d.ts +9 -0
  6. package/build/lib/events/index.js +15 -0
  7. package/build/lib/events/nats.d.ts +15 -1
  8. package/build/lib/events/nats.js +44 -2
  9. package/build/lib/events/publish.d.ts +10 -0
  10. package/build/lib/events/publish.js +28 -0
  11. package/build/modules/config.d.ts +1 -7
  12. package/build/services/agent/subscription-sql.d.ts +3 -3
  13. package/build/services/agent/subscription-sql.js +7 -5
  14. package/build/services/agent/subscriptions.d.ts +3 -1
  15. package/build/services/agent/subscriptions.js +6 -0
  16. package/build/services/agent/trigger-registry.js +18 -0
  17. package/build/services/export/index.js +36 -2
  18. package/build/services/topics/system-topics.js +29 -0
  19. package/build/services/yaml-workflow/deployer.d.ts +1 -1
  20. package/build/services/yaml-workflow/deployer.js +2 -2
  21. package/build/services/yaml-workflow/invoke.d.ts +2 -0
  22. package/build/services/yaml-workflow/invoke.js +5 -1
  23. package/build/start/adapters.js +11 -9
  24. package/build/start/config.js +4 -0
  25. package/build/start/workers.js +12 -3
  26. package/build/system/index.js +16 -0
  27. package/build/system/mcp-servers/file-storage.js +18 -0
  28. package/build/system/workflows/capability-invoke/activities.d.ts +12 -0
  29. package/build/system/workflows/capability-invoke/activities.js +14 -0
  30. package/build/system/workflows/capability-invoke/index.d.ts +14 -0
  31. package/build/system/workflows/capability-invoke/index.js +74 -0
  32. package/build/tsconfig.tsbuildinfo +1 -1
  33. package/build/types/events.d.ts +13 -1
  34. package/build/types/startup.d.ts +7 -0
  35. package/dashboard/dist/assets/{AdminDashboard-C0_qN2h3.js → AdminDashboard-DISq0Tz8.js} +2 -2
  36. package/dashboard/dist/assets/{AdminDashboard-C0_qN2h3.js.map → AdminDashboard-DISq0Tz8.js.map} +1 -1
  37. package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js +16 -0
  38. package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js.map +1 -0
  39. package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js +4 -0
  40. package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js.map +1 -0
  41. package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js +2 -0
  42. package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js.map +1 -0
  43. package/dashboard/dist/assets/AvailableEscalationsPage-hOcjAAIj.js +2 -0
  44. package/dashboard/dist/assets/{AvailableEscalationsPage-DrarbHov.js.map → AvailableEscalationsPage-hOcjAAIj.js.map} +1 -1
  45. package/dashboard/dist/assets/{BotPicker-CvXQwE5Z.js → BotPicker-DuAZgHbJ.js} +2 -2
  46. package/dashboard/dist/assets/{BotPicker-CvXQwE5Z.js.map → BotPicker-DuAZgHbJ.js.map} +1 -1
  47. package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js +2 -0
  48. package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js.map +1 -0
  49. package/dashboard/dist/assets/{CollapsibleSection-D9F01Tny.js → CollapsibleSection-DnoUFQVf.js} +2 -2
  50. package/dashboard/dist/assets/{CollapsibleSection-D9F01Tny.js.map → CollapsibleSection-DnoUFQVf.js.map} +1 -1
  51. package/dashboard/dist/assets/CopyableId-D0SQ39nR.js +2 -0
  52. package/dashboard/dist/assets/CopyableId-D0SQ39nR.js.map +1 -0
  53. package/dashboard/dist/assets/{CredentialsPage-C-rjAIK3.js → CredentialsPage-CqedUU7b.js} +2 -2
  54. package/dashboard/dist/assets/{CredentialsPage-C-rjAIK3.js.map → CredentialsPage-CqedUU7b.js.map} +1 -1
  55. package/dashboard/dist/assets/{CronLabel-DnZF8_vw.js → CronLabel-CPEjE-mH.js} +2 -2
  56. package/dashboard/dist/assets/CronLabel-CPEjE-mH.js.map +1 -0
  57. package/dashboard/dist/assets/CustomDurationPicker-BIQWzbv0.js +2 -0
  58. package/dashboard/dist/assets/{CustomDurationPicker-BYDrcsYT.js.map → CustomDurationPicker-BIQWzbv0.js.map} +1 -1
  59. package/dashboard/dist/assets/{DropZone-BEW3jBzf.js → DropZone-e5EOL5gC.js} +2 -2
  60. package/dashboard/dist/assets/{DropZone-BEW3jBzf.js.map → DropZone-e5EOL5gC.js.map} +1 -1
  61. package/dashboard/dist/assets/ElapsedCell-CzVjr74Y.js +2 -0
  62. package/dashboard/dist/assets/{ElapsedCell-BkiVdGaJ.js.map → ElapsedCell-CzVjr74Y.js.map} +1 -1
  63. package/dashboard/dist/assets/{EscalationsOverview-Cg2SN0WK.js → EscalationsOverview-Bcrb44xJ.js} +2 -2
  64. package/dashboard/dist/assets/{EscalationsOverview-Cg2SN0WK.js.map → EscalationsOverview-Bcrb44xJ.js.map} +1 -1
  65. package/dashboard/dist/assets/EventTable-CGfJU7e1.js +2 -0
  66. package/dashboard/dist/assets/EventTable-CGfJU7e1.js.map +1 -0
  67. package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js → EventTopicPill-xJJnxvlP.js} +2 -2
  68. package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js.map → EventTopicPill-xJJnxvlP.js.map} +1 -1
  69. package/dashboard/dist/assets/{HomePage-74mCQ5nB.js → HomePage-BIzUcGW9.js} +2 -2
  70. package/dashboard/dist/assets/{HomePage-74mCQ5nB.js.map → HomePage-BIzUcGW9.js.map} +1 -1
  71. package/dashboard/dist/assets/{ListToolbar-DL1wEuvL.js → ListToolbar-DNAGFe14.js} +2 -2
  72. package/dashboard/dist/assets/{ListToolbar-DL1wEuvL.js.map → ListToolbar-DNAGFe14.js.map} +1 -1
  73. package/dashboard/dist/assets/{McpOverview-D34bLMuP.js → McpOverview-BpYk21es.js} +2 -2
  74. package/dashboard/dist/assets/{McpOverview-D34bLMuP.js.map → McpOverview-BpYk21es.js.map} +1 -1
  75. package/dashboard/dist/assets/{McpQueryDetailPage-gLGTGX6g.js → McpQueryDetailPage-DlrZiSuL.js} +2 -2
  76. package/dashboard/dist/assets/{McpQueryDetailPage-gLGTGX6g.js.map → McpQueryDetailPage-DlrZiSuL.js.map} +1 -1
  77. package/dashboard/dist/assets/{McpQueryPage-wPHJkhEp.js → McpQueryPage-COfPssO7.js} +2 -2
  78. package/dashboard/dist/assets/{McpQueryPage-wPHJkhEp.js.map → McpQueryPage-COfPssO7.js.map} +1 -1
  79. package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js +2 -0
  80. package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js.map +1 -0
  81. package/dashboard/dist/assets/{McpRunsPage-BUSxdydO.js → McpRunsPage-BlgcGN3k.js} +2 -2
  82. package/dashboard/dist/assets/{McpRunsPage-BUSxdydO.js.map → McpRunsPage-BlgcGN3k.js.map} +1 -1
  83. package/dashboard/dist/assets/{OperatorDashboard-CYCl2our.js → OperatorDashboard-BbO6cWzb.js} +2 -2
  84. package/dashboard/dist/assets/{OperatorDashboard-CYCl2our.js.map → OperatorDashboard-BbO6cWzb.js.map} +1 -1
  85. package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js → PageHeader-B_gV_jKk.js} +2 -2
  86. package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js.map → PageHeader-B_gV_jKk.js.map} +1 -1
  87. package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js → PageHeaderWithStats-D0I0nrnx.js} +2 -2
  88. package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js.map → PageHeaderWithStats-D0I0nrnx.js.map} +1 -1
  89. package/dashboard/dist/assets/ProcessDetailPage-s_iV8ICg.js +2 -0
  90. package/dashboard/dist/assets/{ProcessDetailPage-DzGacZpO.js.map → ProcessDetailPage-s_iV8ICg.js.map} +1 -1
  91. package/dashboard/dist/assets/{ProcessesListPage-Bmn33g_l.js → ProcessesListPage-MnLMnxAa.js} +2 -2
  92. package/dashboard/dist/assets/{ProcessesListPage-Bmn33g_l.js.map → ProcessesListPage-MnLMnxAa.js.map} +1 -1
  93. package/dashboard/dist/assets/{RolePill-BDzPFQUv.js → RolePill-BOBytzrP.js} +2 -2
  94. package/dashboard/dist/assets/{RolePill-BDzPFQUv.js.map → RolePill-BOBytzrP.js.map} +1 -1
  95. package/dashboard/dist/assets/{RolesPage-BTtaabkS.js → RolesPage-BH7KASM7.js} +2 -2
  96. package/dashboard/dist/assets/{RolesPage-BTtaabkS.js.map → RolesPage-BH7KASM7.js.map} +1 -1
  97. package/dashboard/dist/assets/{RunAsSelector-B1R8nJvE.js → RunAsSelector-_QbJKhlo.js} +2 -2
  98. package/dashboard/dist/assets/{RunAsSelector-B1R8nJvE.js.map → RunAsSelector-_QbJKhlo.js.map} +1 -1
  99. package/dashboard/dist/assets/{ServerName-CEOFF7UG.js → ServerName-uqa4eBqm.js} +2 -2
  100. package/dashboard/dist/assets/{ServerName-CEOFF7UG.js.map → ServerName-uqa4eBqm.js.map} +1 -1
  101. package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js +2 -0
  102. package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js.map +1 -0
  103. package/dashboard/dist/assets/{TagInput-VBY0xIwb.js → TagInput-D3f11sbM.js} +2 -2
  104. package/dashboard/dist/assets/{TagInput-VBY0xIwb.js.map → TagInput-D3f11sbM.js.map} +1 -1
  105. package/dashboard/dist/assets/{TaskDetailPage-CZw_F8y4.js → TaskDetailPage-DPV4ySd9.js} +2 -2
  106. package/dashboard/dist/assets/{TaskDetailPage-CZw_F8y4.js.map → TaskDetailPage-DPV4ySd9.js.map} +1 -1
  107. package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js → TaskQueuePill-Bc45J7X1.js} +2 -2
  108. package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js.map → TaskQueuePill-Bc45J7X1.js.map} +1 -1
  109. package/dashboard/dist/assets/{TasksListPage-D-vHndyV.js → TasksListPage-BYj3OqUi.js} +2 -2
  110. package/dashboard/dist/assets/{TasksListPage-D-vHndyV.js.map → TasksListPage-BYj3OqUi.js.map} +1 -1
  111. package/dashboard/dist/assets/TimeAgo-W7TdJpV-.js +2 -0
  112. package/dashboard/dist/assets/{TimeAgo-B6Gz4RAU.js.map → TimeAgo-W7TdJpV-.js.map} +1 -1
  113. package/dashboard/dist/assets/{TimestampCell-DZu9PtN2.js → TimestampCell-Bi2nc9Q_.js} +2 -2
  114. package/dashboard/dist/assets/{TimestampCell-DZu9PtN2.js.map → TimestampCell-Bi2nc9Q_.js.map} +1 -1
  115. package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js → ToolPill-CuoXcmhv.js} +2 -2
  116. package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js.map → ToolPill-CuoXcmhv.js.map} +1 -1
  117. package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js +2 -0
  118. package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js.map +1 -0
  119. package/dashboard/dist/assets/{TopicDetailPage-C5ZUZpU5.js → TopicDetailPage-CjaZn4WP.js} +2 -2
  120. package/dashboard/dist/assets/{TopicDetailPage-C5ZUZpU5.js.map → TopicDetailPage-CjaZn4WP.js.map} +1 -1
  121. package/dashboard/dist/assets/{TopicsPage-Cbc0nVj9.js → TopicsPage-BfsJEC1p.js} +2 -2
  122. package/dashboard/dist/assets/{TopicsPage-Cbc0nVj9.js.map → TopicsPage-BfsJEC1p.js.map} +1 -1
  123. package/dashboard/dist/assets/{UserName-YUoNrFAq.js → UserName-b4baWHM_.js} +2 -2
  124. package/dashboard/dist/assets/{UserName-YUoNrFAq.js.map → UserName-b4baWHM_.js.map} +1 -1
  125. package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js +2 -0
  126. package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js.map +1 -0
  127. package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js +2 -0
  128. package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js.map +1 -0
  129. package/dashboard/dist/assets/{WorkflowsDashboard-BFzCyvgv.js → WorkflowsDashboard-BzH7jMRu.js} +2 -2
  130. package/dashboard/dist/assets/{WorkflowsDashboard-BFzCyvgv.js.map → WorkflowsDashboard-BzH7jMRu.js.map} +1 -1
  131. package/dashboard/dist/assets/{WorkflowsOverview-C_y7JCg2.js → WorkflowsOverview-BcUgBvjD.js} +2 -2
  132. package/dashboard/dist/assets/{WorkflowsOverview-C_y7JCg2.js.map → WorkflowsOverview-BcUgBvjD.js.map} +1 -1
  133. package/dashboard/dist/assets/{YamlWorkflowsPage-CYQjp3JI.js → YamlWorkflowsPage-OhpCQJ0l.js} +2 -2
  134. package/dashboard/dist/assets/{YamlWorkflowsPage-CYQjp3JI.js.map → YamlWorkflowsPage-OhpCQJ0l.js.map} +1 -1
  135. package/dashboard/dist/assets/{agents-2pDPv2Ww.js → agents-Ce3HmPz4.js} +2 -2
  136. package/dashboard/dist/assets/{agents-2pDPv2Ww.js.map → agents-Ce3HmPz4.js.map} +1 -1
  137. package/dashboard/dist/assets/{bots-2uGZ2l7A.js → bots-B0BomNnf.js} +2 -2
  138. package/dashboard/dist/assets/{bots-2uGZ2l7A.js.map → bots-B0BomNnf.js.map} +1 -1
  139. package/dashboard/dist/assets/capabilities-t-w5N9K9.js +2 -0
  140. package/dashboard/dist/assets/capabilities-t-w5N9K9.js.map +1 -0
  141. package/dashboard/dist/assets/{controlplane-CQ29M7lK.js → controlplane-BrtAZnJM.js} +2 -2
  142. package/dashboard/dist/assets/{controlplane-CQ29M7lK.js.map → controlplane-BrtAZnJM.js.map} +1 -1
  143. package/dashboard/dist/assets/{escalation-DWOUjrgL.js → escalation-DilnDxw2.js} +2 -2
  144. package/dashboard/dist/assets/{escalation-DWOUjrgL.js.map → escalation-DilnDxw2.js.map} +1 -1
  145. package/dashboard/dist/assets/{escalation-columns-WrgLIl-W.js → escalation-columns-C0slywOY.js} +2 -2
  146. package/dashboard/dist/assets/{escalation-columns-WrgLIl-W.js.map → escalation-columns-C0slywOY.js.map} +1 -1
  147. package/dashboard/dist/assets/{helpers-LN5b1KBx.js → helpers-BMvPqQr8.js} +2 -2
  148. package/dashboard/dist/assets/{helpers-LN5b1KBx.js.map → helpers-BMvPqQr8.js.map} +1 -1
  149. package/dashboard/dist/assets/{index-ugekH3E2.js → index-30-pN97P.js} +2 -2
  150. package/dashboard/dist/assets/{index-ugekH3E2.js.map → index-30-pN97P.js.map} +1 -1
  151. package/dashboard/dist/assets/index-BPxglOYm.css +1 -0
  152. package/dashboard/dist/assets/{index-CFJc47B8.js → index-Bl9wzQ8Q.js} +2 -2
  153. package/dashboard/dist/assets/{index-CFJc47B8.js.map → index-Bl9wzQ8Q.js.map} +1 -1
  154. package/dashboard/dist/assets/{index-C_A76Dl1.js → index-BxOuF0hm.js} +2 -2
  155. package/dashboard/dist/assets/{index-C_A76Dl1.js.map → index-BxOuF0hm.js.map} +1 -1
  156. package/dashboard/dist/assets/{index-DqFfgd-7.js → index-Ck2QdJXT.js} +2 -2
  157. package/dashboard/dist/assets/{index-DqFfgd-7.js.map → index-Ck2QdJXT.js.map} +1 -1
  158. package/dashboard/dist/assets/{index-CvzfRxnj.js → index-DNmlrCAp.js} +2 -2
  159. package/dashboard/dist/assets/{index-CvzfRxnj.js.map → index-DNmlrCAp.js.map} +1 -1
  160. package/dashboard/dist/assets/index-DPW_i3fH.js +6 -0
  161. package/dashboard/dist/assets/index-DPW_i3fH.js.map +1 -0
  162. package/dashboard/dist/assets/{index-CBS8FBcp.js → index-DZX-E_3q.js} +24 -24
  163. package/dashboard/dist/assets/index-DZX-E_3q.js.map +1 -0
  164. package/dashboard/dist/assets/{index-CovZsMow.js → index-D_wqdvG_.js} +2 -2
  165. package/dashboard/dist/assets/{index-CovZsMow.js.map → index-D_wqdvG_.js.map} +1 -1
  166. package/dashboard/dist/assets/{index-CdNXBj7w.js → index-DnsVYMMg.js} +2 -2
  167. package/dashboard/dist/assets/{index-CdNXBj7w.js.map → index-DnsVYMMg.js.map} +1 -1
  168. package/dashboard/dist/assets/{index-BMo7wCw8.js → index-H5TlloTk.js} +2 -2
  169. package/dashboard/dist/assets/{index-BMo7wCw8.js.map → index-H5TlloTk.js.map} +1 -1
  170. package/dashboard/dist/assets/{index-dzxsXeMO.js → index-f-0Duls3.js} +2 -2
  171. package/dashboard/dist/assets/{index-dzxsXeMO.js.map → index-f-0Duls3.js.map} +1 -1
  172. package/dashboard/dist/assets/index-pIMl0mYp.js +2 -0
  173. package/dashboard/dist/assets/{index-CryoNbg0.js.map → index-pIMl0mYp.js.map} +1 -1
  174. package/dashboard/dist/assets/{index-J0dMfAmE.js → index-qNuxC8kX.js} +2 -2
  175. package/dashboard/dist/assets/{index-J0dMfAmE.js.map → index-qNuxC8kX.js.map} +1 -1
  176. package/dashboard/dist/assets/{knowledge-BhZk3Wy9.js → knowledge-D01NdF5h.js} +2 -2
  177. package/dashboard/dist/assets/{knowledge-BhZk3Wy9.js.map → knowledge-D01NdF5h.js.map} +1 -1
  178. package/dashboard/dist/assets/{mcp-FOHNY7Zj.js → mcp-CjXjDZI0.js} +2 -2
  179. package/dashboard/dist/assets/{mcp-FOHNY7Zj.js.map → mcp-CjXjDZI0.js.map} +1 -1
  180. package/dashboard/dist/assets/{mcp-query-BoNH5uCn.js → mcp-query-LlKQcWLJ.js} +2 -2
  181. package/dashboard/dist/assets/{mcp-query-BoNH5uCn.js.map → mcp-query-LlKQcWLJ.js.map} +1 -1
  182. package/dashboard/dist/assets/{mcp-runs-BhkGaw2y.js → mcp-runs-C0C54hU6.js} +2 -2
  183. package/dashboard/dist/assets/{mcp-runs-BhkGaw2y.js.map → mcp-runs-C0C54hU6.js.map} +1 -1
  184. package/dashboard/dist/assets/{namespaces-duQCQRHq.js → namespaces-6qWDXXJV.js} +2 -2
  185. package/dashboard/dist/assets/{namespaces-duQCQRHq.js.map → namespaces-6qWDXXJV.js.map} +1 -1
  186. package/dashboard/dist/assets/{roles-DW6lI_g5.js → roles-Dtj0uabn.js} +2 -2
  187. package/dashboard/dist/assets/{roles-DW6lI_g5.js.map → roles-Dtj0uabn.js.map} +1 -1
  188. package/dashboard/dist/assets/{tasks-C-QX245z.js → tasks-BevFBjZq.js} +2 -2
  189. package/dashboard/dist/assets/{tasks-C-QX245z.js.map → tasks-BevFBjZq.js.map} +1 -1
  190. package/dashboard/dist/assets/{topics-CAnsyo3w.js → topics-BMG5tx2g.js} +2 -2
  191. package/dashboard/dist/assets/{topics-CAnsyo3w.js.map → topics-BMG5tx2g.js.map} +1 -1
  192. package/dashboard/dist/assets/useCollapsedSections-BU5HULGs.js +2 -0
  193. package/dashboard/dist/assets/useCollapsedSections-BU5HULGs.js.map +1 -0
  194. package/dashboard/dist/assets/useEventHooks-CPyvFlVR.js +2 -0
  195. package/dashboard/dist/assets/useEventHooks-CPyvFlVR.js.map +1 -0
  196. package/dashboard/dist/assets/{useYamlActivityEvents-BTHFGIsD.js → useYamlActivityEvents-Bll8NPNQ.js} +2 -2
  197. package/dashboard/dist/assets/{useYamlActivityEvents-BTHFGIsD.js.map → useYamlActivityEvents-Bll8NPNQ.js.map} +1 -1
  198. package/dashboard/dist/assets/{users--D3LoFOD.js → users-XZ349b0r.js} +2 -2
  199. package/dashboard/dist/assets/{users--D3LoFOD.js.map → users-XZ349b0r.js.map} +1 -1
  200. package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js → vendor-icons-B_Yla7iD.js} +2 -2
  201. package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js.map → vendor-icons-B_Yla7iD.js.map} +1 -1
  202. package/dashboard/dist/assets/{workflows-MpNdzreD.js → workflows-Do-Eiv8f.js} +2 -2
  203. package/dashboard/dist/assets/{workflows-MpNdzreD.js.map → workflows-Do-Eiv8f.js.map} +1 -1
  204. package/dashboard/dist/assets/{yaml-workflows-CFhnJzQy.js → yaml-workflows-DolGRQ5f.js} +2 -2
  205. package/dashboard/dist/assets/{yaml-workflows-CFhnJzQy.js.map → yaml-workflows-DolGRQ5f.js.map} +1 -1
  206. package/dashboard/dist/index.html +3 -3
  207. package/docs/agents.md +38 -10
  208. package/docs/api/http/agents.md +12 -10
  209. package/docs/api/http/settings.md +4 -0
  210. package/docs/api/sdk/agents.md +4 -2
  211. package/docs/api/sdk/settings.md +2 -1
  212. package/docs/dashboard.md +1 -1
  213. package/docs/events.md +7 -0
  214. package/docs/hitl-guide.md +560 -0
  215. package/package.json +2 -2
  216. package/dashboard/dist/assets/AgentConfigPage-DG1zOIiz.js +0 -13
  217. package/dashboard/dist/assets/AgentConfigPage-DG1zOIiz.js.map +0 -1
  218. package/dashboard/dist/assets/AgentDetailPage-B5kaAJDM.js +0 -4
  219. package/dashboard/dist/assets/AgentDetailPage-B5kaAJDM.js.map +0 -1
  220. package/dashboard/dist/assets/AgentsPage-DJWSuoJA.js +0 -2
  221. package/dashboard/dist/assets/AgentsPage-DJWSuoJA.js.map +0 -1
  222. package/dashboard/dist/assets/AvailableEscalationsPage-DrarbHov.js +0 -2
  223. package/dashboard/dist/assets/CapabilitiesPage-BiL9QUxI.js +0 -2
  224. package/dashboard/dist/assets/CapabilitiesPage-BiL9QUxI.js.map +0 -1
  225. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
  226. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js.map +0 -1
  227. package/dashboard/dist/assets/CronLabel-DnZF8_vw.js.map +0 -1
  228. package/dashboard/dist/assets/CustomDurationPicker-BYDrcsYT.js +0 -2
  229. package/dashboard/dist/assets/ElapsedCell-BkiVdGaJ.js +0 -2
  230. package/dashboard/dist/assets/EventTable-B9wYf13g.js +0 -2
  231. package/dashboard/dist/assets/EventTable-B9wYf13g.js.map +0 -1
  232. package/dashboard/dist/assets/McpRunDetailPage-SoXudCbq.js +0 -2
  233. package/dashboard/dist/assets/McpRunDetailPage-SoXudCbq.js.map +0 -1
  234. package/dashboard/dist/assets/ProcessDetailPage-DzGacZpO.js +0 -2
  235. package/dashboard/dist/assets/SwimlaneTimeline-CU2ZD9cC.js +0 -2
  236. package/dashboard/dist/assets/SwimlaneTimeline-CU2ZD9cC.js.map +0 -1
  237. package/dashboard/dist/assets/TimeAgo-B6Gz4RAU.js +0 -2
  238. package/dashboard/dist/assets/ToolTestPanel-D4cgYW2p.js +0 -2
  239. package/dashboard/dist/assets/ToolTestPanel-D4cgYW2p.js.map +0 -1
  240. package/dashboard/dist/assets/WorkflowExecutionPage-CVGztAdK.js +0 -2
  241. package/dashboard/dist/assets/WorkflowExecutionPage-CVGztAdK.js.map +0 -1
  242. package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js +0 -2
  243. package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js.map +0 -1
  244. package/dashboard/dist/assets/index-CBS8FBcp.js.map +0 -1
  245. package/dashboard/dist/assets/index-ChGBlYKj.css +0 -1
  246. package/dashboard/dist/assets/index-CryoNbg0.js +0 -2
  247. package/dashboard/dist/assets/index-DDxZOINn.js +0 -5
  248. package/dashboard/dist/assets/index-DDxZOINn.js.map +0 -1
  249. package/dashboard/dist/assets/settings-wTRbazzw.js +0 -2
  250. package/dashboard/dist/assets/settings-wTRbazzw.js.map +0 -1
  251. package/dashboard/dist/assets/useEventHooks-C689a4F7.js +0 -2
  252. package/dashboard/dist/assets/useEventHooks-C689a4F7.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{u as a}from"./vendor-query-B2UbickB.js";import{b as t}from"./index-CBS8FBcp.js";function y(e){const s=new URLSearchParams;return e.status&&s.set("status",e.status),e.lt_type&&s.set("lt_type",e.lt_type),e.workflow_type&&s.set("workflow_type",e.workflow_type),e.origin_id&&s.set("origin_id",e.origin_id),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),a({queryKey:["tasks",e],queryFn:()=>t(`/tasks?${s}`)})}function c(e){return a({queryKey:["tasks",e],queryFn:()=>t(`/tasks/${e}`),enabled:!!e})}function k(e){return a({queryKey:["tasks","children",e],queryFn:()=>t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=50`),enabled:!!e})}function r(e){return a({queryKey:["tasks","byWorkflow",e],queryFn:async()=>{const s=await t(`/tasks?workflow_id=${encodeURIComponent(e)}&limit=1`);return s.tasks.length>0?s.tasks[0]:(await t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=1`)).tasks[0]??null},enabled:!!e})}function p(e){const s=new URLSearchParams;return e!=null&&e.limit&&s.set("limit",String(e.limit)),(e==null?void 0:e.offset)!==void 0&&s.set("offset",String(e.offset)),e!=null&&e.workflow_type&&s.set("workflow_type",e.workflow_type),e!=null&&e.status&&s.set("status",e.status),e!=null&&e.search&&s.set("search",e.search),a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes?${s}`)})}function m(e){return a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes/${encodeURIComponent(e)}`),enabled:!!e,retry:3,retryDelay:1e3})}export{m as a,r as b,y as c,c as d,k as e,p as u};
2
- //# sourceMappingURL=tasks-C-QX245z.js.map
1
+ import{u as a}from"./vendor-query-B2UbickB.js";import{b as t}from"./index-DZX-E_3q.js";function y(e){const s=new URLSearchParams;return e.status&&s.set("status",e.status),e.lt_type&&s.set("lt_type",e.lt_type),e.workflow_type&&s.set("workflow_type",e.workflow_type),e.origin_id&&s.set("origin_id",e.origin_id),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),a({queryKey:["tasks",e],queryFn:()=>t(`/tasks?${s}`)})}function c(e){return a({queryKey:["tasks",e],queryFn:()=>t(`/tasks/${e}`),enabled:!!e})}function k(e){return a({queryKey:["tasks","children",e],queryFn:()=>t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=50`),enabled:!!e})}function r(e){return a({queryKey:["tasks","byWorkflow",e],queryFn:async()=>{const s=await t(`/tasks?workflow_id=${encodeURIComponent(e)}&limit=1`);return s.tasks.length>0?s.tasks[0]:(await t(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=1`)).tasks[0]??null},enabled:!!e})}function p(e){const s=new URLSearchParams;return e!=null&&e.limit&&s.set("limit",String(e.limit)),(e==null?void 0:e.offset)!==void 0&&s.set("offset",String(e.offset)),e!=null&&e.workflow_type&&s.set("workflow_type",e.workflow_type),e!=null&&e.status&&s.set("status",e.status),e!=null&&e.search&&s.set("search",e.search),a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes?${s}`)})}function m(e){return a({queryKey:["processes",e],queryFn:()=>t(`/tasks/processes/${encodeURIComponent(e)}`),enabled:!!e,retry:3,retryDelay:1e3})}export{m as a,r as b,y as c,c as d,k as e,p as u};
2
+ //# sourceMappingURL=tasks-BevFBjZq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks-C-QX245z.js","sources":["../../src/api/tasks.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTTaskRecord, LTEscalationRecord } from './types';\n\ninterface TaskListResponse {\n tasks: LTTaskRecord[];\n total: number;\n}\n\ninterface TaskFilters {\n status?: string;\n lt_type?: string;\n workflow_type?: string;\n origin_id?: string;\n limit?: number;\n offset?: number;\n}\n\n// ── Process types ─────────────────────────────────────────────────\n\nexport interface ProcessSummary {\n origin_id: string;\n task_count: number;\n completed: number;\n escalated: number;\n workflow_types: string[];\n started_at: string;\n last_activity: string;\n}\n\ninterface ProcessListResponse {\n processes: ProcessSummary[];\n total: number;\n}\n\nexport interface ProcessDetail {\n origin_id: string;\n tasks: LTTaskRecord[];\n escalations: LTEscalationRecord[];\n}\n\nexport function useTasks(filters: TaskFilters) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.lt_type) params.set('lt_type', filters.lt_type);\n if (filters.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters.origin_id) params.set('origin_id', filters.origin_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<TaskListResponse>({\n queryKey: ['tasks', filters],\n queryFn: () => apiFetch(`/tasks?${params}`),\n });\n}\n\nexport function useTask(id: string) {\n return useQuery<LTTaskRecord>({\n queryKey: ['tasks', id],\n queryFn: () => apiFetch(`/tasks/${id}`),\n enabled: !!id,\n });\n}\n\n/**\n * Find the task record for a workflow.\n * Tries workflow_id first (leaf workflows), then falls back to\n * parent_workflow_id (orchestrators whose child task carries the envelope).\n */\nexport function useChildTasks(parentWorkflowId: string) {\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', 'children', parentWorkflowId],\n queryFn: () =>\n apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(parentWorkflowId)}&limit=50`,\n ),\n enabled: !!parentWorkflowId,\n });\n}\n\nexport function useTaskByWorkflowId(workflowId: string) {\n return useQuery<LTTaskRecord | null>({\n queryKey: ['tasks', 'byWorkflow', workflowId],\n queryFn: async () => {\n // 1. Direct match — leaf workflows have their own task record\n const direct = await apiFetch<TaskListResponse>(\n `/tasks?workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n if (direct.tasks.length > 0) return direct.tasks[0];\n\n // 2. Orchestrator fallback — child task has parent_workflow_id = this workflow\n const child = await apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n return child.tasks[0] ?? null;\n },\n enabled: !!workflowId,\n });\n}\n\n// ── Process stats ────────────────────────────────────────────────\n\nexport interface ProcessStats {\n total: number;\n active: number;\n completed: number;\n escalated: number;\n by_workflow_type: {\n workflow_type: string;\n total: number;\n active: number;\n completed: number;\n escalated: number;\n }[];\n}\n\nexport function useProcessStats(period?: string) {\n const params = period ? `?period=${period}` : '';\n return useQuery<ProcessStats>({\n queryKey: ['processStats', period],\n queryFn: () => apiFetch(`/tasks/processes/stats${params}`),\n });\n}\n\n// ── Process hooks ─────────────────────────────────────────────────\n\nexport function useProcesses(filters?: {\n limit?: number;\n offset?: number;\n workflow_type?: string;\n status?: string;\n search?: 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?.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters?.status) params.set('status', filters.status);\n if (filters?.search) params.set('search', filters.search);\n\n return useQuery<ProcessListResponse>({\n queryKey: ['processes', filters],\n queryFn: () => apiFetch(`/tasks/processes?${params}`),\n });\n}\n\nexport function useProcessDetail(originId: string) {\n return useQuery<ProcessDetail>({\n queryKey: ['processes', originId],\n queryFn: () => apiFetch(`/tasks/processes/${encodeURIComponent(originId)}`),\n enabled: !!originId,\n retry: 3,\n retryDelay: 1000,\n });\n}\n"],"names":["useTasks","filters","params","useQuery","apiFetch","useTask","id","useChildTasks","parentWorkflowId","useTaskByWorkflowId","workflowId","direct","useProcesses","useProcessDetail","originId"],"mappings":"uFAyCO,SAASA,EAASC,EAAsB,CAC7C,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACxEA,EAAQ,WAAWC,EAAO,IAAI,YAAaD,EAAQ,SAAS,EAC5DA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAOO,SAASC,EAAcC,EAA0B,CACtD,OAAOL,EAA2B,CAChC,SAAU,CAAC,QAAS,WAAYK,CAAgB,EAChD,QAAS,IACPJ,EACE,6BAA6B,mBAAmBI,CAAgB,CAAC,WAAA,EAErE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,EAAoBC,EAAoB,CACtD,OAAOP,EAA8B,CACnC,SAAU,CAAC,QAAS,aAAcO,CAAU,EAC5C,QAAS,SAAY,CAEnB,MAAMC,EAAS,MAAMP,EACnB,sBAAsB,mBAAmBM,CAAU,CAAC,UAAA,EAEtD,OAAIC,EAAO,MAAM,OAAS,EAAUA,EAAO,MAAM,CAAC,GAGpC,MAAMP,EAClB,6BAA6B,mBAAmBM,CAAU,CAAC,UAAA,GAEhD,MAAM,CAAC,GAAK,IAC3B,EACA,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CA4BO,SAASE,EAAaX,EAM1B,CACD,MAAMC,EAAS,IAAI,gBACnB,OAAID,GAAA,MAAAA,EAAS,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,GACzDA,GAAA,YAAAA,EAAS,UAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAC1EA,GAAA,MAAAA,EAAS,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACzEA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACpDA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EAEjDE,EAA8B,CACnC,SAAU,CAAC,YAAaF,CAAO,EAC/B,QAAS,IAAMG,EAAS,oBAAoBF,CAAM,EAAE,CAAA,CACrD,CACH,CAEO,SAASW,EAAiBC,EAAkB,CACjD,OAAOX,EAAwB,CAC7B,SAAU,CAAC,YAAaW,CAAQ,EAChC,QAAS,IAAMV,EAAS,oBAAoB,mBAAmBU,CAAQ,CAAC,EAAE,EAC1E,QAAS,CAAC,CAACA,EACX,MAAO,EACP,WAAY,GAAA,CACb,CACH"}
1
+ {"version":3,"file":"tasks-BevFBjZq.js","sources":["../../src/api/tasks.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTTaskRecord, LTEscalationRecord } from './types';\n\ninterface TaskListResponse {\n tasks: LTTaskRecord[];\n total: number;\n}\n\ninterface TaskFilters {\n status?: string;\n lt_type?: string;\n workflow_type?: string;\n origin_id?: string;\n limit?: number;\n offset?: number;\n}\n\n// ── Process types ─────────────────────────────────────────────────\n\nexport interface ProcessSummary {\n origin_id: string;\n task_count: number;\n completed: number;\n escalated: number;\n workflow_types: string[];\n started_at: string;\n last_activity: string;\n}\n\ninterface ProcessListResponse {\n processes: ProcessSummary[];\n total: number;\n}\n\nexport interface ProcessDetail {\n origin_id: string;\n tasks: LTTaskRecord[];\n escalations: LTEscalationRecord[];\n}\n\nexport function useTasks(filters: TaskFilters) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.lt_type) params.set('lt_type', filters.lt_type);\n if (filters.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters.origin_id) params.set('origin_id', filters.origin_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<TaskListResponse>({\n queryKey: ['tasks', filters],\n queryFn: () => apiFetch(`/tasks?${params}`),\n });\n}\n\nexport function useTask(id: string) {\n return useQuery<LTTaskRecord>({\n queryKey: ['tasks', id],\n queryFn: () => apiFetch(`/tasks/${id}`),\n enabled: !!id,\n });\n}\n\n/**\n * Find the task record for a workflow.\n * Tries workflow_id first (leaf workflows), then falls back to\n * parent_workflow_id (orchestrators whose child task carries the envelope).\n */\nexport function useChildTasks(parentWorkflowId: string) {\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', 'children', parentWorkflowId],\n queryFn: () =>\n apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(parentWorkflowId)}&limit=50`,\n ),\n enabled: !!parentWorkflowId,\n });\n}\n\nexport function useTaskByWorkflowId(workflowId: string) {\n return useQuery<LTTaskRecord | null>({\n queryKey: ['tasks', 'byWorkflow', workflowId],\n queryFn: async () => {\n // 1. Direct match — leaf workflows have their own task record\n const direct = await apiFetch<TaskListResponse>(\n `/tasks?workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n if (direct.tasks.length > 0) return direct.tasks[0];\n\n // 2. Orchestrator fallback — child task has parent_workflow_id = this workflow\n const child = await apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n return child.tasks[0] ?? null;\n },\n enabled: !!workflowId,\n });\n}\n\n// ── Process stats ────────────────────────────────────────────────\n\nexport interface ProcessStats {\n total: number;\n active: number;\n completed: number;\n escalated: number;\n by_workflow_type: {\n workflow_type: string;\n total: number;\n active: number;\n completed: number;\n escalated: number;\n }[];\n}\n\nexport function useProcessStats(period?: string) {\n const params = period ? `?period=${period}` : '';\n return useQuery<ProcessStats>({\n queryKey: ['processStats', period],\n queryFn: () => apiFetch(`/tasks/processes/stats${params}`),\n });\n}\n\n// ── Process hooks ─────────────────────────────────────────────────\n\nexport function useProcesses(filters?: {\n limit?: number;\n offset?: number;\n workflow_type?: string;\n status?: string;\n search?: 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?.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters?.status) params.set('status', filters.status);\n if (filters?.search) params.set('search', filters.search);\n\n return useQuery<ProcessListResponse>({\n queryKey: ['processes', filters],\n queryFn: () => apiFetch(`/tasks/processes?${params}`),\n });\n}\n\nexport function useProcessDetail(originId: string) {\n return useQuery<ProcessDetail>({\n queryKey: ['processes', originId],\n queryFn: () => apiFetch(`/tasks/processes/${encodeURIComponent(originId)}`),\n enabled: !!originId,\n retry: 3,\n retryDelay: 1000,\n });\n}\n"],"names":["useTasks","filters","params","useQuery","apiFetch","useTask","id","useChildTasks","parentWorkflowId","useTaskByWorkflowId","workflowId","direct","useProcesses","useProcessDetail","originId"],"mappings":"uFAyCO,SAASA,EAASC,EAAsB,CAC7C,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACxEA,EAAQ,WAAWC,EAAO,IAAI,YAAaD,EAAQ,SAAS,EAC5DA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAOO,SAASC,EAAcC,EAA0B,CACtD,OAAOL,EAA2B,CAChC,SAAU,CAAC,QAAS,WAAYK,CAAgB,EAChD,QAAS,IACPJ,EACE,6BAA6B,mBAAmBI,CAAgB,CAAC,WAAA,EAErE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,EAAoBC,EAAoB,CACtD,OAAOP,EAA8B,CACnC,SAAU,CAAC,QAAS,aAAcO,CAAU,EAC5C,QAAS,SAAY,CAEnB,MAAMC,EAAS,MAAMP,EACnB,sBAAsB,mBAAmBM,CAAU,CAAC,UAAA,EAEtD,OAAIC,EAAO,MAAM,OAAS,EAAUA,EAAO,MAAM,CAAC,GAGpC,MAAMP,EAClB,6BAA6B,mBAAmBM,CAAU,CAAC,UAAA,GAEhD,MAAM,CAAC,GAAK,IAC3B,EACA,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CA4BO,SAASE,EAAaX,EAM1B,CACD,MAAMC,EAAS,IAAI,gBACnB,OAAID,GAAA,MAAAA,EAAS,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,GACzDA,GAAA,YAAAA,EAAS,UAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAC1EA,GAAA,MAAAA,EAAS,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACzEA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACpDA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EAEjDE,EAA8B,CACnC,SAAU,CAAC,YAAaF,CAAO,EAC/B,QAAS,IAAMG,EAAS,oBAAoBF,CAAM,EAAE,CAAA,CACrD,CACH,CAEO,SAASW,EAAiBC,EAAkB,CACjD,OAAOX,EAAwB,CAC7B,SAAU,CAAC,YAAaW,CAAQ,EAChC,QAAS,IAAMV,EAAS,oBAAoB,mBAAmBU,CAAQ,CAAC,EAAE,EAC1E,QAAS,CAAC,CAACA,EACX,MAAO,EACP,WAAY,GAAA,CACb,CACH"}
@@ -1,2 +1,2 @@
1
- import{u as s,b as i,c as u}from"./vendor-query-B2UbickB.js";import{b as o}from"./index-CBS8FBcp.js";function r(e={}){const t=new URLSearchParams;e.category&&t.set("category",e.category),e.search&&t.set("search",e.search),e.limit!=null&&t.set("limit",String(e.limit)),e.offset!=null&&t.set("offset",String(e.offset));const n=t.toString();return s({queryKey:["topics",e],queryFn:()=>o(`/topics${n?`?${n}`:""}`)})}function y(e){return s({queryKey:["topics","detail",e],queryFn:()=>o(`/topics/by-name/${encodeURIComponent(e)}`),enabled:!!e})}function m(){const e=i();return u({mutationFn:({topic:t,...n})=>o(`/topics/by-name/${encodeURIComponent(t)}`,{method:"PUT",body:JSON.stringify(n)}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}function p(){const e=i();return u({mutationFn:t=>o(`/topics/by-name/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}export{y as a,m as b,p as c,r as u};
2
- //# sourceMappingURL=topics-CAnsyo3w.js.map
1
+ import{u as s,b as i,c as u}from"./vendor-query-B2UbickB.js";import{b as o}from"./index-DZX-E_3q.js";function r(e={}){const t=new URLSearchParams;e.category&&t.set("category",e.category),e.search&&t.set("search",e.search),e.limit!=null&&t.set("limit",String(e.limit)),e.offset!=null&&t.set("offset",String(e.offset));const n=t.toString();return s({queryKey:["topics",e],queryFn:()=>o(`/topics${n?`?${n}`:""}`)})}function y(e){return s({queryKey:["topics","detail",e],queryFn:()=>o(`/topics/by-name/${encodeURIComponent(e)}`),enabled:!!e})}function m(){const e=i();return u({mutationFn:({topic:t,...n})=>o(`/topics/by-name/${encodeURIComponent(t)}`,{method:"PUT",body:JSON.stringify(n)}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}function p(){const e=i();return u({mutationFn:t=>o(`/topics/by-name/${encodeURIComponent(t)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}export{y as a,m as b,p as c,r as u};
2
+ //# sourceMappingURL=topics-BMG5tx2g.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"topics-CAnsyo3w.js","sources":["../../src/api/topics.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface TopicCatalogEntry {\n topic: string;\n description?: string;\n category: string;\n payload_schema?: Record<string, any>;\n example_payload?: Record<string, any>;\n source: string;\n tags: string[];\n managed: boolean;\n subscriber_count?: number;\n last_seen_at?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface TopicSubscriber {\n id: string;\n agent_id: string;\n agent_name: string;\n topic: string;\n reaction_type: string;\n}\n\nexport interface TopicDetail extends TopicCatalogEntry {\n subscribers: TopicSubscriber[];\n}\n\ninterface TopicListResponse {\n topics: TopicCatalogEntry[];\n total: number;\n}\n\ninterface TopicFilters {\n category?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useTopics(filters: TopicFilters = {}) {\n const params = new URLSearchParams();\n if (filters.category) params.set('category', filters.category);\n if (filters.search) params.set('search', filters.search);\n if (filters.limit != null) params.set('limit', String(filters.limit));\n if (filters.offset != null) params.set('offset', String(filters.offset));\n const qs = params.toString();\n\n return useQuery<TopicListResponse>({\n queryKey: ['topics', filters],\n queryFn: () => apiFetch(`/topics${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useTopic(topic: string | null) {\n return useQuery<TopicDetail>({\n queryKey: ['topics', 'detail', topic],\n queryFn: () => apiFetch(`/topics/by-name/${encodeURIComponent(topic!)}`),\n enabled: !!topic,\n });\n}\n\nexport function useCreateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, Partial<TopicCatalogEntry> & { topic: string; category: string }>({\n mutationFn: (body) =>\n apiFetch('/topics', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useUpdateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, { topic: string } & Partial<TopicCatalogEntry>>({\n mutationFn: ({ topic, ...body }) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useDeleteTopic() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean }, Error, string>({\n mutationFn: (topic) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n"],"names":["useTopics","filters","params","qs","useQuery","apiFetch","useTopic","topic","useUpdateTopic","queryClient","useQueryClient","useMutation","body","useDeleteTopic"],"mappings":"qGA0CO,SAASA,EAAUC,EAAwB,GAAI,CACpD,MAAMC,EAAS,IAAI,gBACfD,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAS,MAAMC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EAChEA,EAAQ,QAAU,MAAMC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACvE,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAA4B,CACjC,SAAU,CAAC,SAAUH,CAAO,EAC5B,QAAS,IAAMI,EAAS,UAAUF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CACvD,CACH,CAEO,SAASG,EAASC,EAAsB,CAC7C,OAAOH,EAAsB,CAC3B,SAAU,CAAC,SAAU,SAAUG,CAAK,EACpC,QAAS,IAAMF,EAAS,mBAAmB,mBAAmBE,CAAM,CAAC,EAAE,EACvE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAgBO,SAASC,GAAiB,CAC/B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAsF,CAC3F,WAAY,CAAC,CAAE,MAAAJ,EAAO,GAAGK,CAAA,IACvBP,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CACvD,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CAEO,SAASI,GAAiB,CAC/B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAiD,CACtD,WAAaJ,GACXF,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CAAE,OAAQ,QAAA,CAAU,EAC/E,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH"}
1
+ {"version":3,"file":"topics-BMG5tx2g.js","sources":["../../src/api/topics.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface TopicCatalogEntry {\n topic: string;\n description?: string;\n category: string;\n payload_schema?: Record<string, any>;\n example_payload?: Record<string, any>;\n source: string;\n tags: string[];\n managed: boolean;\n subscriber_count?: number;\n last_seen_at?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface TopicSubscriber {\n id: string;\n agent_id: string;\n agent_name: string;\n topic: string;\n reaction_type: string;\n}\n\nexport interface TopicDetail extends TopicCatalogEntry {\n subscribers: TopicSubscriber[];\n}\n\ninterface TopicListResponse {\n topics: TopicCatalogEntry[];\n total: number;\n}\n\ninterface TopicFilters {\n category?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useTopics(filters: TopicFilters = {}) {\n const params = new URLSearchParams();\n if (filters.category) params.set('category', filters.category);\n if (filters.search) params.set('search', filters.search);\n if (filters.limit != null) params.set('limit', String(filters.limit));\n if (filters.offset != null) params.set('offset', String(filters.offset));\n const qs = params.toString();\n\n return useQuery<TopicListResponse>({\n queryKey: ['topics', filters],\n queryFn: () => apiFetch(`/topics${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useTopic(topic: string | null) {\n return useQuery<TopicDetail>({\n queryKey: ['topics', 'detail', topic],\n queryFn: () => apiFetch(`/topics/by-name/${encodeURIComponent(topic!)}`),\n enabled: !!topic,\n });\n}\n\nexport function useCreateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, Partial<TopicCatalogEntry> & { topic: string; category: string }>({\n mutationFn: (body) =>\n apiFetch('/topics', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useUpdateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, { topic: string } & Partial<TopicCatalogEntry>>({\n mutationFn: ({ topic, ...body }) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useDeleteTopic() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean }, Error, string>({\n mutationFn: (topic) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n"],"names":["useTopics","filters","params","qs","useQuery","apiFetch","useTopic","topic","useUpdateTopic","queryClient","useQueryClient","useMutation","body","useDeleteTopic"],"mappings":"qGA0CO,SAASA,EAAUC,EAAwB,GAAI,CACpD,MAAMC,EAAS,IAAI,gBACfD,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAS,MAAMC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EAChEA,EAAQ,QAAU,MAAMC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACvE,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAA4B,CACjC,SAAU,CAAC,SAAUH,CAAO,EAC5B,QAAS,IAAMI,EAAS,UAAUF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CACvD,CACH,CAEO,SAASG,EAASC,EAAsB,CAC7C,OAAOH,EAAsB,CAC3B,SAAU,CAAC,SAAU,SAAUG,CAAK,EACpC,QAAS,IAAMF,EAAS,mBAAmB,mBAAmBE,CAAM,CAAC,EAAE,EACvE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAgBO,SAASC,GAAiB,CAC/B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAsF,CAC3F,WAAY,CAAC,CAAE,MAAAJ,EAAO,GAAGK,CAAA,IACvBP,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CACvD,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CAEO,SAASI,GAAiB,CAC/B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAiD,CACtD,WAAaJ,GACXF,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CAAE,OAAQ,QAAA,CAAU,EAC/E,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH"}
@@ -0,0 +1,2 @@
1
+ import{a}from"./vendor-query-B2UbickB.js";const c="lt-collapsed-sections";function i(e){try{const l=localStorage.getItem(`${c}:${e}`);return l?new Set(JSON.parse(l)):new Set}catch{return new Set}}function r(e,l){localStorage.setItem(`${c}:${e}`,JSON.stringify([...l]))}function C(e){const[l,o]=a.useState(()=>i(e)),u=a.useCallback(s=>l.has(s),[l]),d=a.useCallback(s=>{o(n=>{const t=new Set(n);return t.has(s)?t.delete(s):t.add(s),r(e,t),t})},[e]),S=a.useCallback(s=>{o(n=>{if(n.has(s))return n;const t=new Set(n);return t.add(s),r(e,t),t})},[e]),f=a.useCallback(s=>{o(n=>{if(!n.has(s))return n;const t=new Set(n);return t.delete(s),r(e,t),t})},[e]);return{isCollapsed:u,toggle:d,collapse:S,expand:f}}export{C as u};
2
+ //# sourceMappingURL=useCollapsedSections-BU5HULGs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCollapsedSections-BU5HULGs.js","sources":["../../src/hooks/useCollapsedSections.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nconst STORAGE_KEY = 'lt-collapsed-sections';\n\nfunction load(pageKey: string): Set<string> {\n try {\n const raw = localStorage.getItem(`${STORAGE_KEY}:${pageKey}`);\n if (!raw) return new Set();\n return new Set(JSON.parse(raw));\n } catch {\n return new Set();\n }\n}\n\nfunction save(pageKey: string, set: Set<string>) {\n localStorage.setItem(`${STORAGE_KEY}:${pageKey}`, JSON.stringify([...set]));\n}\n\nexport function useCollapsedSections(pageKey: string) {\n const [collapsed, setCollapsed] = useState<Set<string>>(() => load(pageKey));\n\n const isCollapsed = useCallback(\n (section: string) => collapsed.has(section),\n [collapsed],\n );\n\n const toggle = useCallback(\n (section: string) => {\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (next.has(section)) {\n next.delete(section);\n } else {\n next.add(section);\n }\n save(pageKey, next);\n return next;\n });\n },\n [pageKey],\n );\n\n const collapse = useCallback(\n (section: string) => {\n setCollapsed((prev) => {\n if (prev.has(section)) return prev;\n const next = new Set(prev);\n next.add(section);\n save(pageKey, next);\n return next;\n });\n },\n [pageKey],\n );\n\n const expand = useCallback(\n (section: string) => {\n setCollapsed((prev) => {\n if (!prev.has(section)) return prev;\n const next = new Set(prev);\n next.delete(section);\n save(pageKey, next);\n return next;\n });\n },\n [pageKey],\n );\n\n return { isCollapsed, toggle, collapse, expand };\n}\n"],"names":["STORAGE_KEY","load","pageKey","raw","save","set","useCollapsedSections","collapsed","setCollapsed","useState","isCollapsed","useCallback","section","toggle","prev","next","collapse","expand"],"mappings":"0CAEA,MAAMA,EAAc,wBAEpB,SAASC,EAAKC,EAA8B,CAC1C,GAAI,CACF,MAAMC,EAAM,aAAa,QAAQ,GAAGH,CAAW,IAAIE,CAAO,EAAE,EAC5D,OAAKC,EACE,IAAI,IAAI,KAAK,MAAMA,CAAG,CAAC,EADb,IAAI,GAEvB,MAAQ,CACN,WAAW,GACb,CACF,CAEA,SAASC,EAAKF,EAAiBG,EAAkB,CAC/C,aAAa,QAAQ,GAAGL,CAAW,IAAIE,CAAO,GAAI,KAAK,UAAU,CAAC,GAAGG,CAAG,CAAC,CAAC,CAC5E,CAEO,SAASC,EAAqBJ,EAAiB,CACpD,KAAM,CAACK,EAAWC,CAAY,EAAIC,EAAAA,SAAsB,IAAMR,EAAKC,CAAO,CAAC,EAErEQ,EAAcC,EAAAA,YACjBC,GAAoBL,EAAU,IAAIK,CAAO,EAC1C,CAACL,CAAS,CAAA,EAGNM,EAASF,EAAAA,YACZC,GAAoB,CACnBJ,EAAcM,GAAS,CACrB,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAIC,EAAK,IAAIH,CAAO,EAClBG,EAAK,OAAOH,CAAO,EAEnBG,EAAK,IAAIH,CAAO,EAElBR,EAAKF,EAASa,CAAI,EACXA,CACT,CAAC,CACH,EACA,CAACb,CAAO,CAAA,EAGJc,EAAWL,EAAAA,YACdC,GAAoB,CACnBJ,EAAcM,GAAS,CACrB,GAAIA,EAAK,IAAIF,CAAO,EAAG,OAAOE,EAC9B,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,IAAIH,CAAO,EAChBR,EAAKF,EAASa,CAAI,EACXA,CACT,CAAC,CACH,EACA,CAACb,CAAO,CAAA,EAGJe,EAASN,EAAAA,YACZC,GAAoB,CACnBJ,EAAcM,GAAS,CACrB,GAAI,CAACA,EAAK,IAAIF,CAAO,EAAG,OAAOE,EAC/B,MAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,OAAOH,CAAO,EACnBR,EAAKF,EAASa,CAAI,EACXA,CACT,CAAC,CACH,EACA,CAACb,CAAO,CAAA,EAGV,MAAO,CAAE,YAAAQ,EAAa,OAAAG,EAAQ,SAAAG,EAAU,OAAAC,CAAA,CAC1C"}
@@ -0,0 +1,2 @@
1
+ import{a as l,b as w}from"./vendor-query-B2UbickB.js";import{c as a,N as e}from"./index-DZX-E_3q.js";function f(s){const o=[];switch(s.type.split(".")[0]){case"task":o.push(["tasks"]),o.push(["jobs"]),o.push(["processes"]),s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["workflowState",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId])),s.originId&&o.push(["processes",s.originId]);break;case"escalation":o.push(["escalations"]),o.push(["escalationStats"]),s.workflowId&&o.push(["workflowExecution",s.workflowId]);break;case"workflow":o.push(["jobs"]),o.push(["tasks"]),o.push(["processes"]),s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["workflowState",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId]),o.push(["mcpQueryResult",s.workflowId]),o.push(["builderResult",s.workflowId]));break;case"activity":s.workflowId&&o.push(["mcpRunExecution",s.workflowId]),o.push(["mcpRuns"]);break;case"milestone":s.workflowId&&(o.push(["workflowExecution",s.workflowId]),o.push(["mcpQueryExecution",s.workflowId])),o.push(["tasks"]);break;case"knowledge":o.push(["knowledge"]);break;case"file":o.push(["files"]);break;case"agent":o.push(["agents"]);break;default:o.push(["jobs"]),o.push(["tasks"]);break}return o}function r(s=500){const o=w(),t=l.useRef(new Set),c=l.useRef(null);return l.useCallback(n=>{for(const i of n)t.current.add(JSON.stringify(i));c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{for(const i of t.current)o.invalidateQueries({queryKey:JSON.parse(i)});t.current.clear(),c.current=null},s)},[o,s])}function d(){const s=r(300);a(`${e}.task.>`,()=>{s([["jobs"]])}),a(`${e}.workflow.>`,()=>{s([["jobs"]])})}function h(s){const o=r(400);a(`${e}.>`,t=>{var u;if(!s||!(t.workflowId===s||((u=t.workflowId)==null?void 0:u.includes(s))))return;const n=t.type.split(".")[0],i=f(t);n==="escalation"&&i.push(["escalations","by-workflow",s]),o(i)})}function y(s){const o=r(400);a(`${e}.>`,t=>{var u;if(!s||!(t.workflowId===s||((u=t.workflowId)==null?void 0:u.includes(s))))return;const n=t.type.split(".")[0],i=f(t);n==="escalation"&&i.push(["escalations","by-workflow",s]),o(i)})}function E(s){const o=r(400);a(`${e}.>`,t=>{var i;if(!s||!(t.workflowId===s||((i=t.workflowId)==null?void 0:i.includes(s))))return;const n=f(t);n.push(["workflowSets"]),n.push(["yamlWorkflows"]),o(n)})}function b(s){const o=r(300),t=l.useCallback(c=>{s&&(c.originId!==s&&c.workflowId!==s||o([["processes",s]]))},[s,o]);a(`${e}.task.>`,t),a(`${e}.workflow.>`,t),a(`${e}.escalation.>`,t)}function I(){const s=r(300);a(`${e}.escalation.>`,()=>{s([["escalationStats"]])})}function m(){const s=r(300);a(`${e}.escalation.>`,()=>{s([["escalations"]])})}function g(s){const o=r(300);a(`${e}.escalation.>`,t=>{s&&t.escalationId===s&&o([["escalations",s],["escalations"],["escalationStats"]])})}function $(){const s=r(300);a(`${e}.agent.>`,()=>{s([["agents"]])})}function R(){const s=r(300);a(`${e}.task.>`,()=>{s([["processes"]])}),a(`${e}.workflow.>`,()=>{s([["processes"]])})}export{b as a,d as b,y as c,E as d,I as e,m as f,g,h,$ as i,R as u};
2
+ //# sourceMappingURL=useEventHooks-CPyvFlVR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEventHooks-CPyvFlVR.js","sources":["../../src/lib/events/invalidation.ts","../../src/hooks/useEventHooks.ts"],"sourcesContent":["import type { NatsLTEvent } from '../nats/types';\n\n/**\n * Map an event to the React Query keys that should be invalidated.\n *\n * Returns an array of query key prefixes. React Query's `invalidateQueries`\n * will match all queries whose key starts with any returned prefix.\n *\n * This is pure logic with no React or transport dependency — easily testable.\n * Works identically regardless of event transport (Socket.IO, NATS, etc.).\n */\nexport function getInvalidationKeys(event: NatsLTEvent): string[][] {\n const keys: string[][] = [];\n const category = event.type.split('.')[0];\n\n switch (category) {\n case 'task':\n keys.push(['tasks']);\n keys.push(['jobs']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n if (event.originId) {\n keys.push(['processes', event.originId]);\n }\n break;\n\n case 'escalation':\n keys.push(['escalations']);\n keys.push(['escalationStats']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n }\n break;\n\n case 'workflow':\n keys.push(['jobs']);\n keys.push(['tasks']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n keys.push(['mcpQueryResult', event.workflowId]);\n keys.push(['builderResult', event.workflowId]);\n }\n break;\n\n case 'activity':\n if (event.workflowId) {\n keys.push(['mcpRunExecution', event.workflowId]);\n }\n keys.push(['mcpRuns']);\n break;\n\n case 'milestone':\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n keys.push(['tasks']);\n break;\n\n case 'knowledge':\n keys.push(['knowledge']);\n break;\n\n case 'file':\n keys.push(['files']);\n break;\n\n case 'agent':\n keys.push(['agents']);\n break;\n\n default:\n keys.push(['jobs']);\n keys.push(['tasks']);\n break;\n }\n\n return keys;\n}\n","import { useRef, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEventSubscription } from './useEventContext';\nimport { getInvalidationKeys } from '../lib/events/invalidation';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\n/**\n * Debounced query invalidation. Collects query keys over a window\n * and fires a single batch invalidation, preventing rapid re-renders\n * when multiple events arrive in quick succession.\n */\nfunction useDebouncedInvalidation(delayMs = 500) {\n const qc = useQueryClient();\n const pendingKeys = useRef<Set<string>>(new Set());\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n return useCallback((keys: string[][]) => {\n for (const key of keys) {\n pendingKeys.current.add(JSON.stringify(key));\n }\n\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n for (const raw of pendingKeys.current) {\n qc.invalidateQueries({ queryKey: JSON.parse(raw) });\n }\n pendingKeys.current.clear();\n timer.current = null;\n }, delayMs);\n }, [qc, delayMs]);\n}\n\n/**\n * Invalidate workflow list queries (WorkflowsDashboard) on task/workflow events.\n */\nexport function useWorkflowListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['jobs']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['jobs']]);\n });\n}\n\n/**\n * Invalidate queries for a specific workflow execution page (durable workflows).\n *\n * Uses the centralized `getInvalidationKeys` mapping plus escalation-specific\n * keys for the detail view. Events are debounced to prevent flurries of re-renders.\n */\nexport function useWorkflowDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate queries for mcpQuery/builder detail pages.\n *\n * Covers: mcpQueryExecution, mcpQueryResult, builderResult, workflowExecution,\n * workflowState, and escalation keys. Replaces polling on these pages.\n */\nexport function useMcpQueryDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const category = event.type.split('.')[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate workflow set and YAML workflow queries when plan-related events fire.\n * Covers the planner workflow and all child builder workflows.\n */\nexport function usePlanDetailEvents(plannerWorkflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!plannerWorkflowId) return;\n\n const isRelated = event.workflowId === plannerWorkflowId\n || event.workflowId?.includes(plannerWorkflowId);\n if (!isRelated) return;\n\n const keys = getInvalidationKeys(event);\n keys.push(['workflowSets']);\n keys.push(['yamlWorkflows']);\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate process detail queries on task/workflow events for a specific origin.\n */\nexport function useProcessDetailEvents(originId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n const handler = useCallback((event: any) => {\n if (!originId) return;\n if (event.originId !== originId && event.workflowId !== originId) return;\n invalidate([['processes', originId]]);\n }, [originId, invalidate]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, handler);\n}\n\n/**\n * Invalidate escalation stats (EscalationsOverview) on escalation events.\n */\nexport function useEscalationStatsEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalationStats']]);\n });\n}\n\n/**\n * Invalidate escalation list queries on escalation events.\n */\nexport function useEscalationListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, () => {\n invalidate([['escalations']]);\n });\n}\n\n/**\n * Invalidate a single escalation detail on escalation events for that ID.\n */\nexport function useEscalationDetailEvents(escalationId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.escalation.>`, (event) => {\n if (!escalationId) return;\n if (event.escalationId === escalationId) {\n invalidate([['escalations', escalationId], ['escalations'], ['escalationStats']]);\n }\n });\n}\n\n/**\n * Invalidate agent queries on agent lifecycle events.\n */\nexport function useAgentEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.agent.>`, () => {\n invalidate([['agents']]);\n });\n}\n\n/**\n * Invalidate knowledge queries on knowledge events.\n */\nexport function useKnowledgeEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.knowledge.>`, () => {\n invalidate([['knowledge']]);\n });\n}\n\n/**\n * Invalidate process list (ProcessesListPage) on task/workflow events.\n */\nexport function useProcessListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.task.>`, () => {\n invalidate([['processes']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.workflow.>`, () => {\n invalidate([['processes']]);\n });\n}\n"],"names":["getInvalidationKeys","event","keys","useDebouncedInvalidation","delayMs","qc","useQueryClient","pendingKeys","useRef","timer","useCallback","key","raw","useWorkflowListEvents","invalidate","useEventSubscription","NATS_SUBJECT_PREFIX","useWorkflowDetailEvents","workflowId","_a","category","useMcpQueryDetailEvents","usePlanDetailEvents","plannerWorkflowId","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useAgentEvents","useProcessListEvents"],"mappings":"qGAWO,SAASA,EAAoBC,EAAgC,CAClE,MAAMC,EAAmB,CAAA,EAGzB,OAFiBD,EAAM,KAAK,MAAM,GAAG,EAAE,CAAC,EAEhC,CACN,IAAK,OACHC,EAAK,KAAK,CAAC,OAAO,CAAC,EACnBA,EAAK,KAAK,CAAC,MAAM,CAAC,EAClBA,EAAK,KAAK,CAAC,WAAW,CAAC,EACnBD,EAAM,aACRC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,EACjDC,EAAK,KAAK,CAAC,gBAAiBD,EAAM,UAAU,CAAC,EAC7CC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,GAE/CA,EAAM,UACRC,EAAK,KAAK,CAAC,YAAaD,EAAM,QAAQ,CAAC,EAEzC,MAEF,IAAK,aACHC,EAAK,KAAK,CAAC,aAAa,CAAC,EACzBA,EAAK,KAAK,CAAC,iBAAiB,CAAC,EACzBD,EAAM,YACRC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,EAEnD,MAEF,IAAK,WACHC,EAAK,KAAK,CAAC,MAAM,CAAC,EAClBA,EAAK,KAAK,CAAC,OAAO,CAAC,EACnBA,EAAK,KAAK,CAAC,WAAW,CAAC,EACnBD,EAAM,aACRC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,EACjDC,EAAK,KAAK,CAAC,gBAAiBD,EAAM,UAAU,CAAC,EAC7CC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,EACjDC,EAAK,KAAK,CAAC,iBAAkBD,EAAM,UAAU,CAAC,EAC9CC,EAAK,KAAK,CAAC,gBAAiBD,EAAM,UAAU,CAAC,GAE/C,MAEF,IAAK,WACCA,EAAM,YACRC,EAAK,KAAK,CAAC,kBAAmBD,EAAM,UAAU,CAAC,EAEjDC,EAAK,KAAK,CAAC,SAAS,CAAC,EACrB,MAEF,IAAK,YACCD,EAAM,aACRC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,EACjDC,EAAK,KAAK,CAAC,oBAAqBD,EAAM,UAAU,CAAC,GAEnDC,EAAK,KAAK,CAAC,OAAO,CAAC,EACnB,MAEF,IAAK,YACHA,EAAK,KAAK,CAAC,WAAW,CAAC,EACvB,MAEF,IAAK,OACHA,EAAK,KAAK,CAAC,OAAO,CAAC,EACnB,MAEF,IAAK,QACHA,EAAK,KAAK,CAAC,QAAQ,CAAC,EACpB,MAEF,QACEA,EAAK,KAAK,CAAC,MAAM,CAAC,EAClBA,EAAK,KAAK,CAAC,OAAO,CAAC,EACnB,KAAA,CAGJ,OAAOA,CACT,CC1EA,SAASC,EAAyBC,EAAU,IAAK,CAC/C,MAAMC,EAAKC,EAAA,EACLC,EAAcC,EAAAA,OAAoB,IAAI,GAAK,EAC3CC,EAAQD,EAAAA,OAA6C,IAAI,EAE/D,OAAOE,EAAAA,YAAaR,GAAqB,CACvC,UAAWS,KAAOT,EAChBK,EAAY,QAAQ,IAAI,KAAK,UAAUI,CAAG,CAAC,EAGzCF,EAAM,SAAS,aAAaA,EAAM,OAAO,EAC7CA,EAAM,QAAU,WAAW,IAAM,CAC/B,UAAWG,KAAOL,EAAY,QAC5BF,EAAG,kBAAkB,CAAE,SAAU,KAAK,MAAMO,CAAG,EAAG,EAEpDL,EAAY,QAAQ,MAAA,EACpBE,EAAM,QAAU,IAClB,EAAGL,CAAO,CACZ,EAAG,CAACC,EAAID,CAAO,CAAC,CAClB,CAKO,SAASS,GAA8B,CAC5C,MAAMC,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,UAAW,IAAM,CAC1DF,EAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CACvB,CAAC,EAEDC,EAAqB,GAAGC,CAAmB,cAAe,IAAM,CAC9DF,EAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CACvB,CAAC,CACH,CAQO,SAASG,EAAwBC,EAAsC,CAC5E,MAAMJ,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,KAAOf,GAAU,OAK1D,GAJI,CAACiB,GAID,EAFcjB,EAAM,aAAeiB,KAClCC,EAAAlB,EAAM,aAAN,YAAAkB,EAAkB,SAASD,KAChB,OAEhB,MAAME,EAAWnB,EAAM,KAAK,MAAM,GAAG,EAAE,CAAC,EAClCC,EAAOF,EAAoBC,CAAK,EAElCmB,IAAa,cACflB,EAAK,KAAK,CAAC,cAAe,cAAegB,CAAU,CAAC,EAGtDJ,EAAWZ,CAAI,CACjB,CAAC,CACH,CAQO,SAASmB,EAAwBH,EAAsC,CAC5E,MAAMJ,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,KAAOf,GAAU,OAK1D,GAJI,CAACiB,GAID,EAFcjB,EAAM,aAAeiB,KAClCC,EAAAlB,EAAM,aAAN,YAAAkB,EAAkB,SAASD,KAChB,OAEhB,MAAME,EAAWnB,EAAM,KAAK,MAAM,GAAG,EAAE,CAAC,EAClCC,EAAOF,EAAoBC,CAAK,EAElCmB,IAAa,cACflB,EAAK,KAAK,CAAC,cAAe,cAAegB,CAAU,CAAC,EAGtDJ,EAAWZ,CAAI,CACjB,CAAC,CACH,CAMO,SAASoB,EAAoBC,EAA6C,CAC/E,MAAMT,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,KAAOf,GAAU,OAK1D,GAJI,CAACsB,GAID,EAFctB,EAAM,aAAesB,KAClCJ,EAAAlB,EAAM,aAAN,YAAAkB,EAAkB,SAASI,KAChB,OAEhB,MAAMrB,EAAOF,EAAoBC,CAAK,EACtCC,EAAK,KAAK,CAAC,cAAc,CAAC,EAC1BA,EAAK,KAAK,CAAC,eAAe,CAAC,EAC3BY,EAAWZ,CAAI,CACjB,CAAC,CACH,CAKO,SAASsB,EAAuBC,EAAoC,CACzE,MAAMX,EAAaX,EAAyB,GAAG,EAEzCuB,EAAUhB,cAAaT,GAAe,CACrCwB,IACDxB,EAAM,WAAawB,GAAYxB,EAAM,aAAewB,GACxDX,EAAW,CAAC,CAAC,YAAaW,CAAQ,CAAC,CAAC,EACtC,EAAG,CAACA,EAAUX,CAAU,CAAC,EAEzBC,EAAqB,GAAGC,CAAmB,UAAWU,CAAO,EAC7DX,EAAqB,GAAGC,CAAmB,cAAeU,CAAO,EACjEX,EAAqB,GAAGC,CAAmB,gBAAiBU,CAAO,CACrE,CAKO,SAASC,GAAiC,CAC/C,MAAMb,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,gBAAiB,IAAM,CAChEF,EAAW,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAClC,CAAC,CACH,CAKO,SAASc,GAAgC,CAC9C,MAAMd,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,gBAAiB,IAAM,CAChEF,EAAW,CAAC,CAAC,aAAa,CAAC,CAAC,CAC9B,CAAC,CACH,CAKO,SAASe,EAA0BC,EAAwC,CAChF,MAAMhB,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,gBAAkBf,GAAU,CAChE6B,GACD7B,EAAM,eAAiB6B,GACzBhB,EAAW,CAAC,CAAC,cAAegB,CAAY,EAAG,CAAC,aAAa,EAAG,CAAC,iBAAiB,CAAC,CAAC,CAEpF,CAAC,CACH,CAKO,SAASC,GAAuB,CACrC,MAAMjB,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,WAAY,IAAM,CAC3DF,EAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CACzB,CAAC,CACH,CAgBO,SAASkB,GAA6B,CAC3C,MAAMlB,EAAaX,EAAyB,GAAG,EAE/CY,EAAqB,GAAGC,CAAmB,UAAW,IAAM,CAC1DF,EAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAC5B,CAAC,EAEDC,EAAqB,GAAGC,CAAmB,cAAe,IAAM,CAC9DF,EAAW,CAAC,CAAC,WAAW,CAAC,CAAC,CAC5B,CAAC,CACH"}
@@ -1,2 +1,2 @@
1
- import{u as S,b as p,c as d,a as m}from"./vendor-query-B2UbickB.js";import{b as u,u as g,N as v}from"./index-CBS8FBcp.js";const a=["workflowSets"];function C(t={}){const s=new URLSearchParams;return t.status&&s.set("status",t.status),t.search&&s.set("search",t.search),t.limit&&s.set("limit",String(t.limit)),t.offset!==void 0&&s.set("offset",String(t.offset)),S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets?${s}`)})}function E(t){return S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets/${t}`),enabled:!!t})}function K(){const t=p();return d({mutationFn:s=>u("/workflow-sets",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"})}})}function N(){const t=p();return d({mutationFn:({id:s,...c})=>u(`/workflow-sets/${s}/add`,{method:"POST",body:JSON.stringify(c)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"}),t.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function W(t){const[s,c]=m.useState([]),w=m.useCallback(i=>{var f;if(!t||i.workflowId!==t||((f=i.type)==null?void 0:f.split(".")[0])!=="activity")return;const n=i.activityName,e=i.data,l=i.type;c(r=>{const y=r.find(o=>o.activityId===n);return l==="activity.started"?y?r.map(o=>o.activityId===n?{...o,status:"running"}:o):[...r,{activityId:n,title:(e==null?void 0:e.title)||n,toolName:e==null?void 0:e.toolName,toolSource:e==null?void 0:e.toolSource,stepIndex:(e==null?void 0:e.stepIndex)??r.length,totalSteps:(e==null?void 0:e.totalSteps)??0,status:"running"}]:l==="activity.completed"&&y?r.map(o=>o.activityId===n?{...o,status:"completed"}:o):l==="activity.failed"&&y?r.map(o=>o.activityId===n?{...o,status:"failed",error:e==null?void 0:e.error}:o):r})},[t]);g(t?`${v}.activity.>`:"",w);const h=s.length>0&&s.every(i=>i.status==="completed"||i.status==="failed"),k=s.some(i=>i.status==="failed");return{steps:s,isComplete:h,isFailed:k}}export{W as a,E as b,N as c,C as d,K as u};
2
- //# sourceMappingURL=useYamlActivityEvents-BTHFGIsD.js.map
1
+ import{u as S,b as p,c as d,a as m}from"./vendor-query-B2UbickB.js";import{b as u,c as g,N as v}from"./index-DZX-E_3q.js";const a=["workflowSets"];function C(t={}){const s=new URLSearchParams;return t.status&&s.set("status",t.status),t.search&&s.set("search",t.search),t.limit&&s.set("limit",String(t.limit)),t.offset!==void 0&&s.set("offset",String(t.offset)),S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets?${s}`)})}function E(t){return S({queryKey:[...a,t],queryFn:()=>u(`/workflow-sets/${t}`),enabled:!!t})}function K(){const t=p();return d({mutationFn:s=>u("/workflow-sets",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"})}})}function N(){const t=p();return d({mutationFn:({id:s,...c})=>u(`/workflow-sets/${s}/add`,{method:"POST",body:JSON.stringify(c)}),onSuccess:()=>{t.invalidateQueries({queryKey:a,refetchType:"all"}),t.invalidateQueries({queryKey:["yamlWorkflows"],refetchType:"all"})}})}function W(t){const[s,c]=m.useState([]),w=m.useCallback(i=>{var f;if(!t||i.workflowId!==t||((f=i.type)==null?void 0:f.split(".")[0])!=="activity")return;const n=i.activityName,e=i.data,l=i.type;c(r=>{const y=r.find(o=>o.activityId===n);return l==="activity.started"?y?r.map(o=>o.activityId===n?{...o,status:"running"}:o):[...r,{activityId:n,title:(e==null?void 0:e.title)||n,toolName:e==null?void 0:e.toolName,toolSource:e==null?void 0:e.toolSource,stepIndex:(e==null?void 0:e.stepIndex)??r.length,totalSteps:(e==null?void 0:e.totalSteps)??0,status:"running"}]:l==="activity.completed"&&y?r.map(o=>o.activityId===n?{...o,status:"completed"}:o):l==="activity.failed"&&y?r.map(o=>o.activityId===n?{...o,status:"failed",error:e==null?void 0:e.error}:o):r})},[t]);g(t?`${v}.activity.>`:"",w);const h=s.length>0&&s.every(i=>i.status==="completed"||i.status==="failed"),k=s.some(i=>i.status==="failed");return{steps:s,isComplete:h,isFailed:k}}export{W as a,E as b,N as c,C as d,K as u};
2
+ //# sourceMappingURL=useYamlActivityEvents-Bll8NPNQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useYamlActivityEvents-BTHFGIsD.js","sources":["../../src/api/workflow-sets.ts","../../src/hooks/useYamlActivityEvents.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { WorkflowSetRecord, PlanItem } from './types';\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const WORKFLOW_SETS_KEY = ['workflowSets'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/** List workflow sets with optional filters. */\nexport function useWorkflowSets(filters: {\n status?: string;\n search?: string;\n limit?: number;\n offset?: number;\n} = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\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<{ sets: WorkflowSetRecord[]; total: number }>({\n queryKey: [...WORKFLOW_SETS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-sets?${params}`),\n });\n}\n\n/** Get a single workflow set by ID. Updates via push events, not polling. */\nexport function useWorkflowSet(id: string | undefined) {\n return useQuery<WorkflowSetRecord>({\n queryKey: [...WORKFLOW_SETS_KEY, id],\n queryFn: () => apiFetch(`/workflow-sets/${id}`),\n enabled: !!id,\n });\n}\n\n/** Create a new workflow set from a specification. */\nexport function useCreateWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n name: string;\n description?: string;\n specification: string;\n }>({\n mutationFn: (params) =>\n apiFetch('/workflow-sets', {\n method: 'POST',\n body: JSON.stringify(params),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Update a workflow set's plan (engineer adjustments). */\nexport function useUpdateWorkflowSetPlan() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord, Error, {\n id: string;\n plan: PlanItem[];\n namespaces?: string[];\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/plan`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Add additional workflows to an existing set. */\nexport function useAddToWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n id: string;\n specification: string;\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/add`, {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n/** Trigger build phase for a workflow set. */\nexport function useBuildWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/build`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Deploy all namespaces in a workflow set. */\nexport function useDeployWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/deploy`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n","import { useState, useCallback } from 'react';\nimport { useEventSubscription } from './useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\nexport interface ActivityStep {\n activityId: string;\n title: string;\n toolName?: string;\n toolSource?: string;\n stepIndex: number;\n totalSteps: number;\n status: 'pending' | 'running' | 'completed' | 'failed';\n error?: string;\n}\n\n/**\n * Subscribe to activity events for a specific YAML workflow job.\n * Returns live step progress as events arrive.\n */\nexport function useYamlActivityEvents(jobId: string | null): {\n steps: ActivityStep[];\n isComplete: boolean;\n isFailed: boolean;\n} {\n const [steps, setSteps] = useState<ActivityStep[]>([]);\n\n const handler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n const category = event.type?.split('.')[0];\n if (category !== 'activity') return;\n\n const activityId = event.activityName as string;\n const data = event.data as Record<string, any> | undefined;\n const eventType = event.type as string;\n\n setSteps((prev) => {\n const existing = prev.find((s) => s.activityId === activityId);\n\n if (eventType === 'activity.started') {\n if (existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'running' as const } : s);\n }\n return [...prev, {\n activityId,\n title: data?.title || activityId,\n toolName: data?.toolName,\n toolSource: data?.toolSource,\n stepIndex: data?.stepIndex ?? prev.length,\n totalSteps: data?.totalSteps ?? 0,\n status: 'running' as const,\n }];\n }\n\n if (eventType === 'activity.completed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'completed' as const } : s);\n }\n\n if (eventType === 'activity.failed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'failed' as const, error: data?.error } : s);\n }\n\n return prev;\n });\n }, [jobId]);\n\n useEventSubscription(\n jobId ? `${NATS_SUBJECT_PREFIX}.activity.>` : '',\n handler,\n );\n\n const isComplete = steps.length > 0 && steps.every((s) => s.status === 'completed' || s.status === 'failed');\n const isFailed = steps.some((s) => s.status === 'failed');\n\n return { steps, isComplete, isFailed };\n}\n"],"names":["WORKFLOW_SETS_KEY","useWorkflowSets","filters","params","useQuery","apiFetch","useWorkflowSet","id","useCreateWorkflowSet","queryClient","useQueryClient","useMutation","useAddToWorkflowSet","body","useYamlActivityEvents","jobId","steps","setSteps","useState","handler","useCallback","event","_a","activityId","data","eventType","prev","existing","s","useEventSubscription","NATS_SUBJECT_PREFIX","isComplete","isFailed"],"mappings":"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"}
1
+ {"version":3,"file":"useYamlActivityEvents-Bll8NPNQ.js","sources":["../../src/api/workflow-sets.ts","../../src/hooks/useYamlActivityEvents.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { WorkflowSetRecord, PlanItem } from './types';\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const WORKFLOW_SETS_KEY = ['workflowSets'] as const;\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/** List workflow sets with optional filters. */\nexport function useWorkflowSets(filters: {\n status?: string;\n search?: string;\n limit?: number;\n offset?: number;\n} = {}) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\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<{ sets: WorkflowSetRecord[]; total: number }>({\n queryKey: [...WORKFLOW_SETS_KEY, filters],\n queryFn: () => apiFetch(`/workflow-sets?${params}`),\n });\n}\n\n/** Get a single workflow set by ID. Updates via push events, not polling. */\nexport function useWorkflowSet(id: string | undefined) {\n return useQuery<WorkflowSetRecord>({\n queryKey: [...WORKFLOW_SETS_KEY, id],\n queryFn: () => apiFetch(`/workflow-sets/${id}`),\n enabled: !!id,\n });\n}\n\n/** Create a new workflow set from a specification. */\nexport function useCreateWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n name: string;\n description?: string;\n specification: string;\n }>({\n mutationFn: (params) =>\n apiFetch('/workflow-sets', {\n method: 'POST',\n body: JSON.stringify(params),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Update a workflow set's plan (engineer adjustments). */\nexport function useUpdateWorkflowSetPlan() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord, Error, {\n id: string;\n plan: PlanItem[];\n namespaces?: string[];\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/plan`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Add additional workflows to an existing set. */\nexport function useAddToWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<WorkflowSetRecord & { planner_workflow_id: string }, Error, {\n id: string;\n specification: string;\n }>({\n mutationFn: ({ id, ...body }) =>\n apiFetch(`/workflow-sets/${id}/add`, {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n\n/** Trigger build phase for a workflow set. */\nexport function useBuildWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/build`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n },\n });\n}\n\n/** Deploy all namespaces in a workflow set. */\nexport function useDeployWorkflowSet() {\n const queryClient = useQueryClient();\n return useMutation<{ status: string; id: string }, Error, string>({\n mutationFn: (id) =>\n apiFetch(`/workflow-sets/${id}/deploy`, { method: 'POST' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: WORKFLOW_SETS_KEY, refetchType: 'all' });\n queryClient.invalidateQueries({ queryKey: ['yamlWorkflows'], refetchType: 'all' });\n },\n });\n}\n","import { useState, useCallback } from 'react';\nimport { useEventSubscription } from './useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\nexport interface ActivityStep {\n activityId: string;\n title: string;\n toolName?: string;\n toolSource?: string;\n stepIndex: number;\n totalSteps: number;\n status: 'pending' | 'running' | 'completed' | 'failed';\n error?: string;\n}\n\n/**\n * Subscribe to activity events for a specific YAML workflow job.\n * Returns live step progress as events arrive.\n */\nexport function useYamlActivityEvents(jobId: string | null): {\n steps: ActivityStep[];\n isComplete: boolean;\n isFailed: boolean;\n} {\n const [steps, setSteps] = useState<ActivityStep[]>([]);\n\n const handler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n const category = event.type?.split('.')[0];\n if (category !== 'activity') return;\n\n const activityId = event.activityName as string;\n const data = event.data as Record<string, any> | undefined;\n const eventType = event.type as string;\n\n setSteps((prev) => {\n const existing = prev.find((s) => s.activityId === activityId);\n\n if (eventType === 'activity.started') {\n if (existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'running' as const } : s);\n }\n return [...prev, {\n activityId,\n title: data?.title || activityId,\n toolName: data?.toolName,\n toolSource: data?.toolSource,\n stepIndex: data?.stepIndex ?? prev.length,\n totalSteps: data?.totalSteps ?? 0,\n status: 'running' as const,\n }];\n }\n\n if (eventType === 'activity.completed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'completed' as const } : s);\n }\n\n if (eventType === 'activity.failed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'failed' as const, error: data?.error } : s);\n }\n\n return prev;\n });\n }, [jobId]);\n\n useEventSubscription(\n jobId ? `${NATS_SUBJECT_PREFIX}.activity.>` : '',\n handler,\n );\n\n const isComplete = steps.length > 0 && steps.every((s) => s.status === 'completed' || s.status === 'failed');\n const isFailed = steps.some((s) => s.status === 'failed');\n\n return { steps, isComplete, isFailed };\n}\n"],"names":["WORKFLOW_SETS_KEY","useWorkflowSets","filters","params","useQuery","apiFetch","useWorkflowSet","id","useCreateWorkflowSet","queryClient","useQueryClient","useMutation","useAddToWorkflowSet","body","useYamlActivityEvents","jobId","steps","setSteps","useState","handler","useCallback","event","_a","activityId","data","eventType","prev","existing","s","useEventSubscription","NATS_SUBJECT_PREFIX","isComplete","isFailed"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-CBS8FBcp.js";function c(e={}){const s=new URLSearchParams;return e.role&&s.set("role",e.role),e.roleType&&s.set("roleType",e.roleType),e.status&&s.set("status",e.status),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),o({queryKey:["users",e],queryFn:()=>u(`/users?${s}`)})}function m(e){return o({queryKey:["users",e],queryFn:()=>u(`/users/${e}`),enabled:!!e})}function d(){const e=t();return n({mutationFn:s=>u("/users",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function l(){const e=t();return n({mutationFn:({id:s,...r})=>u(`/users/${s}`,{method:"PUT",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function f(){const e=t();return n({mutationFn:s=>u(`/users/${s}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function q(){const e=t();return n({mutationFn:({userId:s,role:r,type:i})=>u(`/users/${s}/roles`,{method:"POST",body:JSON.stringify({role:r,type:i})}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function S(){const e=t();return n({mutationFn:({userId:s,role:r})=>u(`/users/${s}/roles/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}export{m as a,d as b,l as c,q as d,S as e,f,c as u};
2
- //# sourceMappingURL=users--D3LoFOD.js.map
1
+ import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-DZX-E_3q.js";function c(e={}){const s=new URLSearchParams;return e.role&&s.set("role",e.role),e.roleType&&s.set("roleType",e.roleType),e.status&&s.set("status",e.status),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),o({queryKey:["users",e],queryFn:()=>u(`/users?${s}`)})}function m(e){return o({queryKey:["users",e],queryFn:()=>u(`/users/${e}`),enabled:!!e})}function d(){const e=t();return n({mutationFn:s=>u("/users",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function l(){const e=t();return n({mutationFn:({id:s,...r})=>u(`/users/${s}`,{method:"PUT",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function f(){const e=t();return n({mutationFn:s=>u(`/users/${s}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function q(){const e=t();return n({mutationFn:({userId:s,role:r,type:i})=>u(`/users/${s}/roles`,{method:"POST",body:JSON.stringify({role:r,type:i})}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function S(){const e=t();return n({mutationFn:({userId:s,role:r})=>u(`/users/${s}/roles/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}export{m as a,d as b,l as c,q as d,S as e,f,c as u};
2
+ //# sourceMappingURL=users-XZ349b0r.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"users--D3LoFOD.js","sources":["../../src/api/users.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTUserRecord, LTRoleType } from './types';\n\ninterface UserListResponse {\n users: LTUserRecord[];\n total: number;\n}\n\ninterface UserFilters {\n role?: string;\n roleType?: string;\n status?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useUsers(filters: UserFilters = {}) {\n const params = new URLSearchParams();\n if (filters.role) params.set('role', filters.role);\n if (filters.roleType) params.set('roleType', filters.roleType);\n if (filters.status) params.set('status', filters.status);\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<UserListResponse>({\n queryKey: ['users', filters],\n queryFn: () => apiFetch(`/users?${params}`),\n });\n}\n\nexport function useUser(id: string) {\n return useQuery<LTUserRecord>({\n queryKey: ['users', id],\n queryFn: () => apiFetch(`/users/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n external_id: string;\n email?: string;\n display_name?: string;\n password?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/users', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUpdateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n email?: string;\n display_name?: string;\n status?: string;\n }) =>\n apiFetch(`/users/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useDeleteUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/users/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useAddUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n userId,\n role,\n type,\n }: {\n userId: string;\n role: string;\n type: LTRoleType;\n }) =>\n apiFetch(`/users/${userId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useRemoveUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, role }: { userId: string; role: string }) =>\n apiFetch(`/users/${userId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n"],"names":["useUsers","filters","params","useQuery","apiFetch","useUser","id","useCreateUser","queryClient","useQueryClient","useMutation","data","useUpdateUser","useDeleteUser","useAddUserRole","userId","role","type","useRemoveUserRole"],"mappings":"qGAiBO,SAASA,EAASC,EAAuB,GAAI,CAClD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EAC7CA,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,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,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAgB,CAC9B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAOXP,EAAS,SAAU,CACjB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASI,GAAgB,CAC9B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAOHP,EAAS,UAAUE,CAAE,GAAI,CACvB,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASK,GAAgB,CAC9B,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,UAAUE,CAAE,GAAI,CAAE,OAAQ,SAAU,EAC/C,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASM,GAAiB,CAC/B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,OAAAK,EACA,KAAAC,EACA,KAAAC,CAAA,IAMAb,EAAS,UAAUW,CAAM,SAAU,CACjC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAC,EAAM,KAAAC,EAAM,CAAA,CACpC,EACH,UAAW,IAAM,CACfT,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASU,GAAoB,CAClC,MAAMV,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,OAAAK,EAAQ,KAAAC,CAAA,IACrBZ,EAAS,UAAUW,CAAM,UAAU,mBAAmBC,CAAI,CAAC,GAAI,CAC7D,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfR,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH"}
1
+ {"version":3,"file":"users-XZ349b0r.js","sources":["../../src/api/users.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTUserRecord, LTRoleType } from './types';\n\ninterface UserListResponse {\n users: LTUserRecord[];\n total: number;\n}\n\ninterface UserFilters {\n role?: string;\n roleType?: string;\n status?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useUsers(filters: UserFilters = {}) {\n const params = new URLSearchParams();\n if (filters.role) params.set('role', filters.role);\n if (filters.roleType) params.set('roleType', filters.roleType);\n if (filters.status) params.set('status', filters.status);\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<UserListResponse>({\n queryKey: ['users', filters],\n queryFn: () => apiFetch(`/users?${params}`),\n });\n}\n\nexport function useUser(id: string) {\n return useQuery<LTUserRecord>({\n queryKey: ['users', id],\n queryFn: () => apiFetch(`/users/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n external_id: string;\n email?: string;\n display_name?: string;\n password?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/users', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUpdateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n email?: string;\n display_name?: string;\n status?: string;\n }) =>\n apiFetch(`/users/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useDeleteUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/users/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useAddUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n userId,\n role,\n type,\n }: {\n userId: string;\n role: string;\n type: LTRoleType;\n }) =>\n apiFetch(`/users/${userId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useRemoveUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, role }: { userId: string; role: string }) =>\n apiFetch(`/users/${userId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n"],"names":["useUsers","filters","params","useQuery","apiFetch","useUser","id","useCreateUser","queryClient","useQueryClient","useMutation","data","useUpdateUser","useDeleteUser","useAddUserRole","userId","role","type","useRemoveUserRole"],"mappings":"qGAiBO,SAASA,EAASC,EAAuB,GAAI,CAClD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EAC7CA,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,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,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAgB,CAC9B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAOXP,EAAS,SAAU,CACjB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASI,GAAgB,CAC9B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAOHP,EAAS,UAAUE,CAAE,GAAI,CACvB,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASK,GAAgB,CAC9B,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,UAAUE,CAAE,GAAI,CAAE,OAAQ,SAAU,EAC/C,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASM,GAAiB,CAC/B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,OAAAK,EACA,KAAAC,EACA,KAAAC,CAAA,IAMAb,EAAS,UAAUW,CAAM,SAAU,CACjC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAC,EAAM,KAAAC,EAAM,CAAA,CACpC,EACH,UAAW,IAAM,CACfT,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASU,GAAoB,CAClC,MAAMV,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,OAAAK,EAAQ,KAAAC,CAAA,IACrBZ,EAAS,UAAUW,CAAM,UAAU,mBAAmBC,CAAI,CAAC,GAAI,CAC7D,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfR,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH"}
@@ -548,5 +548,5 @@ import{a as s}from"./vendor-query-B2UbickB.js";/**
548
548
  *
549
549
  * This source code is licensed under the ISC license.
550
550
  * See the LICENSE file in the root directory of this source tree.
551
- */const r2=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],ne=e("zap",r2);export{b0 as $,_2 as A,v2 as B,b2 as C,Z2 as D,T2 as E,a0 as F,s0 as G,v0 as H,n0 as I,j0 as J,$2 as K,m0 as L,u0 as M,z0 as N,I2 as O,V0 as P,$0 as Q,P0 as R,O0 as S,X0 as T,te as U,w0 as V,oe as W,de as X,H0 as Y,ne as Z,B0 as _,x2 as a,X2 as a0,g0 as a1,x0 as a2,W2 as a3,S2 as a4,m2 as a5,P2 as a6,k0 as a7,L2 as a8,G0 as a9,B2 as aA,K0 as aB,_0 as aC,J0 as aD,A0 as aE,E2 as aF,M2 as aG,r0 as aH,F2 as aI,R2 as aJ,R0 as aK,U0 as aL,F0 as aa,se as ab,D2 as ac,ae as ad,W0 as ae,T0 as af,Y0 as ag,L0 as ah,q2 as ai,H2 as aj,i0 as ak,Z0 as al,y0 as am,A2 as an,j2 as ao,o0 as ap,U2 as aq,S0 as ar,d0 as as,K2 as at,Q2 as au,Y2 as av,e0 as aw,G2 as ax,M0 as ay,ee as az,I0 as b,he as c,u2 as d,ce as e,D0 as f,g2 as g,f0 as h,N2 as i,z2 as j,t0 as k,f2 as l,w2 as m,Q0 as n,E0 as o,q0 as p,C0 as q,c0 as r,h0 as s,p0 as t,N0 as u,l0 as v,V2 as w,O2 as x,J2 as y,C2 as z};
552
- //# sourceMappingURL=vendor-icons-BNtvBbnj.js.map
551
+ */const r2=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],ne=e("zap",r2);export{b0 as $,_2 as A,v2 as B,b2 as C,Z2 as D,T2 as E,a0 as F,s0 as G,v0 as H,n0 as I,j0 as J,$2 as K,m0 as L,u0 as M,z0 as N,I2 as O,V0 as P,$0 as Q,P0 as R,O0 as S,X0 as T,te as U,w0 as V,oe as W,de as X,H0 as Y,ne as Z,B0 as _,x2 as a,X2 as a0,g0 as a1,x0 as a2,W2 as a3,S2 as a4,m2 as a5,P2 as a6,y0 as a7,k0 as a8,L2 as a9,B2 as aA,K0 as aB,_0 as aC,J0 as aD,A0 as aE,E2 as aF,M2 as aG,r0 as aH,F2 as aI,R2 as aJ,R0 as aK,U0 as aL,G0 as aa,F0 as ab,se as ac,D2 as ad,ae,W0 as af,T0 as ag,Y0 as ah,L0 as ai,q2 as aj,H2 as ak,i0 as al,Z0 as am,A2 as an,j2 as ao,o0 as ap,U2 as aq,S0 as ar,d0 as as,K2 as at,Q2 as au,Y2 as av,e0 as aw,G2 as ax,M0 as ay,ee as az,I0 as b,he as c,u2 as d,ce as e,D0 as f,g2 as g,f0 as h,N2 as i,z2 as j,t0 as k,f2 as l,w2 as m,Q0 as n,E0 as o,q0 as p,C0 as q,c0 as r,h0 as s,p0 as t,N0 as u,l0 as v,V2 as w,O2 as x,J2 as y,C2 as z};
552
+ //# sourceMappingURL=vendor-icons-B_Yla7iD.js.map