@hotmeshio/long-tail 0.1.21 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/build/api/agent-subscriptions.d.ts +15 -0
  2. package/build/api/agent-subscriptions.js +82 -0
  3. package/build/api/agents.d.ts +21 -0
  4. package/build/api/agents.js +100 -0
  5. package/build/api/capabilities.d.ts +2 -0
  6. package/build/api/capabilities.js +76 -0
  7. package/build/index.d.ts +2 -2
  8. package/build/index.js +5 -2
  9. package/build/lib/db/schemas/003_agents.sql +46 -0
  10. package/build/lib/db/schemas/004_agent_subscriptions.sql +38 -0
  11. package/build/lib/db/schemas/005_server_category.sql +6 -0
  12. package/build/lib/db/schemas/006_agent_sub_unique.sql +9 -0
  13. package/build/lib/events/callback.d.ts +4 -18
  14. package/build/lib/events/callback.js +8 -45
  15. package/build/lib/events/matching.d.ts +13 -0
  16. package/build/lib/events/matching.js +31 -0
  17. package/build/lib/events/publish.d.ts +20 -0
  18. package/build/lib/events/publish.js +33 -0
  19. package/build/routes/agents.d.ts +2 -0
  20. package/build/routes/agents.js +130 -0
  21. package/build/routes/capabilities.d.ts +2 -0
  22. package/build/routes/capabilities.js +47 -0
  23. package/build/routes/index.js +4 -0
  24. package/build/sdk/index.d.ts +13 -0
  25. package/build/sdk/index.js +14 -0
  26. package/build/services/agent/index.d.ts +32 -0
  27. package/build/services/agent/index.js +195 -0
  28. package/build/services/agent/input-mapper.d.ts +18 -0
  29. package/build/services/agent/input-mapper.js +51 -0
  30. package/build/services/agent/sql.d.ts +10 -0
  31. package/build/services/agent/sql.js +70 -0
  32. package/build/services/agent/subscription-sql.d.ts +7 -0
  33. package/build/services/agent/subscription-sql.js +49 -0
  34. package/build/services/agent/subscriptions.d.ts +30 -0
  35. package/build/services/agent/subscriptions.js +82 -0
  36. package/build/services/agent/trigger-registry.d.ts +45 -0
  37. package/build/services/agent/trigger-registry.js +232 -0
  38. package/build/services/cron/index.d.ts +17 -1
  39. package/build/services/cron/index.js +152 -4
  40. package/build/services/insight/index.js +11 -6
  41. package/build/services/mcp/db.d.ts +1 -0
  42. package/build/services/mcp/db.js +1 -0
  43. package/build/services/mcp/sql.d.ts +1 -1
  44. package/build/services/mcp/sql.js +2 -2
  45. package/build/start/workers.js +67 -0
  46. package/build/system/activities/knowledge.js +9 -2
  47. package/build/system/index.d.ts +2 -1
  48. package/build/system/index.js +93 -1
  49. package/build/system/mcp-servers/events.d.ts +5 -0
  50. package/build/system/mcp-servers/events.js +104 -0
  51. package/build/system/mcp-servers/playwright/schemas.d.ts +6 -6
  52. package/build/system/seed/tool-manifests-events.d.ts +37 -0
  53. package/build/system/seed/tool-manifests-events.js +30 -0
  54. package/build/tsconfig.tsbuildinfo +1 -1
  55. package/build/types/agent.d.ts +72 -0
  56. package/build/types/agent.js +6 -0
  57. package/build/types/events.d.ts +7 -1
  58. package/build/types/index.d.ts +2 -1
  59. package/build/types/mcp.d.ts +2 -0
  60. package/build/types/startup.d.ts +37 -0
  61. package/dashboard/dist/assets/{AdminDashboard-CsTOErp1.js → AdminDashboard-DThDjhN5.js} +2 -2
  62. package/dashboard/dist/assets/{AdminDashboard-CsTOErp1.js.map → AdminDashboard-DThDjhN5.js.map} +1 -1
  63. package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js +13 -0
  64. package/dashboard/dist/assets/AgentConfigPage-NgxblxBW.js.map +1 -0
  65. package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js +4 -0
  66. package/dashboard/dist/assets/AgentDetailPage-DMS46nYY.js.map +1 -0
  67. package/dashboard/dist/assets/AgentsPage-pKfjHe4u.js +2 -0
  68. package/dashboard/dist/assets/AgentsPage-pKfjHe4u.js.map +1 -0
  69. package/dashboard/dist/assets/{AvailableEscalationsPage-BqQA3IJp.js → AvailableEscalationsPage-BFzHVnPh.js} +2 -2
  70. package/dashboard/dist/assets/{AvailableEscalationsPage-BqQA3IJp.js.map → AvailableEscalationsPage-BFzHVnPh.js.map} +1 -1
  71. package/dashboard/dist/assets/BotPicker-Zxf7Npew.js +2 -0
  72. package/dashboard/dist/assets/BotPicker-Zxf7Npew.js.map +1 -0
  73. package/dashboard/dist/assets/CapabilitiesPage-6zOJ12cB.js +2 -0
  74. package/dashboard/dist/assets/CapabilitiesPage-6zOJ12cB.js.map +1 -0
  75. package/dashboard/dist/assets/{CollapsibleSection-CRtHQsAv.js → CollapsibleSection-DvBx4tmw.js} +2 -2
  76. package/dashboard/dist/assets/{CollapsibleSection-CRtHQsAv.js.map → CollapsibleSection-DvBx4tmw.js.map} +1 -1
  77. package/dashboard/dist/assets/{CredentialsPage-C7XT1bnO.js → CredentialsPage-C5f-Bg-o.js} +2 -2
  78. package/dashboard/dist/assets/{CredentialsPage-C7XT1bnO.js.map → CredentialsPage-C5f-Bg-o.js.map} +1 -1
  79. package/dashboard/dist/assets/CronLabel-CAVTt5AG.js +2 -0
  80. package/dashboard/dist/assets/CronLabel-CAVTt5AG.js.map +1 -0
  81. package/dashboard/dist/assets/{CustomDurationPicker-BABUv1V2.js → CustomDurationPicker-Bk7D38y7.js} +2 -2
  82. package/dashboard/dist/assets/{CustomDurationPicker-BABUv1V2.js.map → CustomDurationPicker-Bk7D38y7.js.map} +1 -1
  83. package/dashboard/dist/assets/{DataTable-D3-wSEf0.js → DataTable-D9yuBv0w.js} +2 -2
  84. package/dashboard/dist/assets/{DataTable-D3-wSEf0.js.map → DataTable-D9yuBv0w.js.map} +1 -1
  85. package/dashboard/dist/assets/{DropZone-DHKmMqRA.js → DropZone-2mGyDo1P.js} +2 -2
  86. package/dashboard/dist/assets/{DropZone-DHKmMqRA.js.map → DropZone-2mGyDo1P.js.map} +1 -1
  87. package/dashboard/dist/assets/{ElapsedCell-DrJif03B.js → ElapsedCell-BpJjG1s-.js} +2 -2
  88. package/dashboard/dist/assets/{ElapsedCell-DrJif03B.js.map → ElapsedCell-BpJjG1s-.js.map} +1 -1
  89. package/dashboard/dist/assets/{EscalationsOverview-H6CwfeR-.js → EscalationsOverview-DPNd1vjF.js} +2 -2
  90. package/dashboard/dist/assets/{EscalationsOverview-H6CwfeR-.js.map → EscalationsOverview-DPNd1vjF.js.map} +1 -1
  91. package/dashboard/dist/assets/{EventTable-Dh3_9DAY.js → EventTable-BoP8KC3M.js} +2 -2
  92. package/dashboard/dist/assets/{EventTable-Dh3_9DAY.js.map → EventTable-BoP8KC3M.js.map} +1 -1
  93. package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +2 -0
  94. package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js.map +1 -0
  95. package/dashboard/dist/assets/HomePage-h8I5ZolJ.js +2 -0
  96. package/dashboard/dist/assets/HomePage-h8I5ZolJ.js.map +1 -0
  97. package/dashboard/dist/assets/ListToolbar-BaYIIsAt.js +2 -0
  98. package/dashboard/dist/assets/ListToolbar-BaYIIsAt.js.map +1 -0
  99. package/dashboard/dist/assets/{McpOverview-ChLa6Gl7.js → McpOverview-BhZ3lSO6.js} +2 -2
  100. package/dashboard/dist/assets/{McpOverview-ChLa6Gl7.js.map → McpOverview-BhZ3lSO6.js.map} +1 -1
  101. package/dashboard/dist/assets/McpQueryDetailPage-DVgcKa61.js +5 -0
  102. package/dashboard/dist/assets/McpQueryDetailPage-DVgcKa61.js.map +1 -0
  103. package/dashboard/dist/assets/{McpQueryPage-D2DmDFPu.js → McpQueryPage-CTWOBqKT.js} +2 -2
  104. package/dashboard/dist/assets/{McpQueryPage-D2DmDFPu.js.map → McpQueryPage-CTWOBqKT.js.map} +1 -1
  105. package/dashboard/dist/assets/{McpRunDetailPage-ERVuNEEK.js → McpRunDetailPage-CIpZJWRB.js} +2 -2
  106. package/dashboard/dist/assets/{McpRunDetailPage-ERVuNEEK.js.map → McpRunDetailPage-CIpZJWRB.js.map} +1 -1
  107. package/dashboard/dist/assets/McpRunsPage-B3zpzPBf.js +2 -0
  108. package/dashboard/dist/assets/McpRunsPage-B3zpzPBf.js.map +1 -0
  109. package/dashboard/dist/assets/{OperatorDashboard-CJm_BTPU.js → OperatorDashboard-l2hVlIF3.js} +2 -2
  110. package/dashboard/dist/assets/{OperatorDashboard-CJm_BTPU.js.map → OperatorDashboard-l2hVlIF3.js.map} +1 -1
  111. package/dashboard/dist/assets/{PageHeader-B-SN5GZ2.js → PageHeader-DLjHNYHX.js} +2 -2
  112. package/dashboard/dist/assets/{PageHeader-B-SN5GZ2.js.map → PageHeader-DLjHNYHX.js.map} +1 -1
  113. package/dashboard/dist/assets/{PageHeaderWithStats-BZ3AGT5s.js → PageHeaderWithStats-Oljg3n4j.js} +2 -2
  114. package/dashboard/dist/assets/{PageHeaderWithStats-BZ3AGT5s.js.map → PageHeaderWithStats-Oljg3n4j.js.map} +1 -1
  115. package/dashboard/dist/assets/{ProcessDetailPage-vfnCDyQK.js → ProcessDetailPage-BJ1rhK9_.js} +2 -2
  116. package/dashboard/dist/assets/{ProcessDetailPage-vfnCDyQK.js.map → ProcessDetailPage-BJ1rhK9_.js.map} +1 -1
  117. package/dashboard/dist/assets/{ProcessesListPage-DcAN6AJK.js → ProcessesListPage-IQKk_qkn.js} +2 -2
  118. package/dashboard/dist/assets/{ProcessesListPage-DcAN6AJK.js.map → ProcessesListPage-IQKk_qkn.js.map} +1 -1
  119. package/dashboard/dist/assets/RolePill-Bp10-WfX.js +2 -0
  120. package/dashboard/dist/assets/RolePill-Bp10-WfX.js.map +1 -0
  121. package/dashboard/dist/assets/{RolesPage-DYSt2aAr.js → RolesPage-Dwcirtze.js} +2 -2
  122. package/dashboard/dist/assets/{RolesPage-DYSt2aAr.js.map → RolesPage-Dwcirtze.js.map} +1 -1
  123. package/dashboard/dist/assets/RunAsSelector-D4Fu8LVG.js +2 -0
  124. package/dashboard/dist/assets/RunAsSelector-D4Fu8LVG.js.map +1 -0
  125. package/dashboard/dist/assets/ServerName-C9lUCFYb.js +2 -0
  126. package/dashboard/dist/assets/ServerName-C9lUCFYb.js.map +1 -0
  127. package/dashboard/dist/assets/SwimlaneTimeline-DQqgvwmC.js +2 -0
  128. package/dashboard/dist/assets/SwimlaneTimeline-DQqgvwmC.js.map +1 -0
  129. package/dashboard/dist/assets/{TagInput-DftaRHDV.js → TagInput-Dkljw_WI.js} +2 -2
  130. package/dashboard/dist/assets/{TagInput-DftaRHDV.js.map → TagInput-Dkljw_WI.js.map} +1 -1
  131. package/dashboard/dist/assets/{TaskDetailPage-BoA-cfwW.js → TaskDetailPage-AHBMSHAA.js} +2 -2
  132. package/dashboard/dist/assets/{TaskDetailPage-BoA-cfwW.js.map → TaskDetailPage-AHBMSHAA.js.map} +1 -1
  133. package/dashboard/dist/assets/{TaskQueuePill-Ce8KlXtR.js → TaskQueuePill-DPwm25Cc.js} +2 -2
  134. package/dashboard/dist/assets/{TaskQueuePill-Ce8KlXtR.js.map → TaskQueuePill-DPwm25Cc.js.map} +1 -1
  135. package/dashboard/dist/assets/{TasksListPage-g6XIbhju.js → TasksListPage-CnJdTsoX.js} +2 -2
  136. package/dashboard/dist/assets/{TasksListPage-g6XIbhju.js.map → TasksListPage-CnJdTsoX.js.map} +1 -1
  137. package/dashboard/dist/assets/{TimeAgo-BihIwEbB.js → TimeAgo-C3A1r1Cv.js} +2 -2
  138. package/dashboard/dist/assets/{TimeAgo-BihIwEbB.js.map → TimeAgo-C3A1r1Cv.js.map} +1 -1
  139. package/dashboard/dist/assets/{TimestampCell-GOFcvE-i.js → TimestampCell-DPfLR6bZ.js} +2 -2
  140. package/dashboard/dist/assets/{TimestampCell-GOFcvE-i.js.map → TimestampCell-DPfLR6bZ.js.map} +1 -1
  141. package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +2 -0
  142. package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js.map +1 -0
  143. package/dashboard/dist/assets/ToolTestPanel-CwZ9zkD-.js +2 -0
  144. package/dashboard/dist/assets/ToolTestPanel-CwZ9zkD-.js.map +1 -0
  145. package/dashboard/dist/assets/{UserName-CmMVt4vS.js → UserName-ClO0a6Ar.js} +2 -2
  146. package/dashboard/dist/assets/{UserName-CmMVt4vS.js.map → UserName-ClO0a6Ar.js.map} +1 -1
  147. package/dashboard/dist/assets/{WorkflowExecutionPage-soRFz_30.js → WorkflowExecutionPage-B-2aHAHK.js} +2 -2
  148. package/dashboard/dist/assets/{WorkflowExecutionPage-soRFz_30.js.map → WorkflowExecutionPage-B-2aHAHK.js.map} +1 -1
  149. package/dashboard/dist/assets/{WorkflowPill-DUDDyBsj.js → WorkflowPill-BbgVTGgI.js} +2 -2
  150. package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js.map +1 -0
  151. package/dashboard/dist/assets/WorkflowsDashboard-NtiQKl_i.js +2 -0
  152. package/dashboard/dist/assets/WorkflowsDashboard-NtiQKl_i.js.map +1 -0
  153. package/dashboard/dist/assets/{WorkflowsOverview-z3Ztiz1y.js → WorkflowsOverview-BQip_pvL.js} +2 -2
  154. package/dashboard/dist/assets/{WorkflowsOverview-z3Ztiz1y.js.map → WorkflowsOverview-BQip_pvL.js.map} +1 -1
  155. package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js +2 -0
  156. package/dashboard/dist/assets/YamlWorkflowsPage-BWFCVQ8b.js.map +1 -0
  157. package/dashboard/dist/assets/agents-5APoyRH8.js +2 -0
  158. package/dashboard/dist/assets/agents-5APoyRH8.js.map +1 -0
  159. package/dashboard/dist/assets/{bots-BZPXDh_y.js → bots-BoDH-pS7.js} +2 -2
  160. package/dashboard/dist/assets/{bots-BZPXDh_y.js.map → bots-BoDH-pS7.js.map} +1 -1
  161. package/dashboard/dist/assets/controlplane-D4NhQux3.js +2 -0
  162. package/dashboard/dist/assets/controlplane-D4NhQux3.js.map +1 -0
  163. package/dashboard/dist/assets/{escalation-DBUIq1Z4.js → escalation-BD2wtAt2.js} +2 -2
  164. package/dashboard/dist/assets/{escalation-DBUIq1Z4.js.map → escalation-BD2wtAt2.js.map} +1 -1
  165. package/dashboard/dist/assets/escalation-columns-DjHcNgjo.js +2 -0
  166. package/dashboard/dist/assets/{escalation-columns-DL4zsR8Y.js.map → escalation-columns-DjHcNgjo.js.map} +1 -1
  167. package/dashboard/dist/assets/{helpers-D50KFFkI.js → helpers-D1ZPA4kI.js} +2 -2
  168. package/dashboard/dist/assets/{helpers-D50KFFkI.js.map → helpers-D1ZPA4kI.js.map} +1 -1
  169. package/dashboard/dist/assets/index-B-Z9TisY.js +2 -0
  170. package/dashboard/dist/assets/index-B-Z9TisY.js.map +1 -0
  171. package/dashboard/dist/assets/index-B6vQeWwf.js +6 -0
  172. package/dashboard/dist/assets/index-B6vQeWwf.js.map +1 -0
  173. package/dashboard/dist/assets/{index-D9_hZmsW.js → index-BD2vW8MG.js} +3 -3
  174. package/dashboard/dist/assets/{index-D9_hZmsW.js.map → index-BD2vW8MG.js.map} +1 -1
  175. package/dashboard/dist/assets/index-BciXgS35.css +1 -0
  176. package/dashboard/dist/assets/index-BgJR7kwH.js +2 -0
  177. package/dashboard/dist/assets/index-BgJR7kwH.js.map +1 -0
  178. package/dashboard/dist/assets/index-D9qswqDQ.js +2 -0
  179. package/dashboard/dist/assets/{index-BpoHVMV7.js.map → index-D9qswqDQ.js.map} +1 -1
  180. package/dashboard/dist/assets/index-DC7f6rWu.js +2 -0
  181. package/dashboard/dist/assets/{index-CEnDYJOO.js.map → index-DC7f6rWu.js.map} +1 -1
  182. package/dashboard/dist/assets/{index-B-jzKfuv.js → index-Zn5XforP.js} +2 -2
  183. package/dashboard/dist/assets/{index-B-jzKfuv.js.map → index-Zn5XforP.js.map} +1 -1
  184. package/dashboard/dist/assets/index-_5qNyf9o.js +2 -0
  185. package/dashboard/dist/assets/index-_5qNyf9o.js.map +1 -0
  186. package/dashboard/dist/assets/index-_dKxJhey.js +2 -0
  187. package/dashboard/dist/assets/{index-DzICLMI7.js.map → index-_dKxJhey.js.map} +1 -1
  188. package/dashboard/dist/assets/index-jp94-YlF.js +2 -0
  189. package/dashboard/dist/assets/index-jp94-YlF.js.map +1 -0
  190. package/dashboard/dist/assets/{index-BUjxYyxc.js → index-oGYUhkFa.js} +27 -27
  191. package/dashboard/dist/assets/index-oGYUhkFa.js.map +1 -0
  192. package/dashboard/dist/assets/index-qdYsS9h2.js +15 -0
  193. package/dashboard/dist/assets/index-qdYsS9h2.js.map +1 -0
  194. package/dashboard/dist/assets/knowledge-DsAU_TGL.js +2 -0
  195. package/dashboard/dist/assets/knowledge-DsAU_TGL.js.map +1 -0
  196. package/dashboard/dist/assets/{mcp-D0GrHRFe.js → mcp-CA3OeIyH.js} +2 -2
  197. package/dashboard/dist/assets/{mcp-D0GrHRFe.js.map → mcp-CA3OeIyH.js.map} +1 -1
  198. package/dashboard/dist/assets/{mcp-query-DC5woQn5.js → mcp-query-BgmTDc7h.js} +2 -2
  199. package/dashboard/dist/assets/{mcp-query-DC5woQn5.js.map → mcp-query-BgmTDc7h.js.map} +1 -1
  200. package/dashboard/dist/assets/{mcp-runs-CsoVQoPB.js → mcp-runs-C-FK2SyD.js} +2 -2
  201. package/dashboard/dist/assets/{mcp-runs-CsoVQoPB.js.map → mcp-runs-C-FK2SyD.js.map} +1 -1
  202. package/dashboard/dist/assets/{namespaces-unpIb4gX.js → namespaces-B8KNk0Jb.js} +2 -2
  203. package/dashboard/dist/assets/{namespaces-unpIb4gX.js.map → namespaces-B8KNk0Jb.js.map} +1 -1
  204. package/dashboard/dist/assets/{roles--kBaFljg.js → roles-BAPy1LU_.js} +2 -2
  205. package/dashboard/dist/assets/{roles--kBaFljg.js.map → roles-BAPy1LU_.js.map} +1 -1
  206. package/dashboard/dist/assets/{settings-B96YkawY.js → settings-Da0QSQDH.js} +2 -2
  207. package/dashboard/dist/assets/{settings-B96YkawY.js.map → settings-Da0QSQDH.js.map} +1 -1
  208. package/dashboard/dist/assets/{tasks-D_1NCfOZ.js → tasks-BHlTusW0.js} +2 -2
  209. package/dashboard/dist/assets/{tasks-D_1NCfOZ.js.map → tasks-BHlTusW0.js.map} +1 -1
  210. package/dashboard/dist/assets/useEventHooks-DBMdj9vw.js +2 -0
  211. package/dashboard/dist/assets/useEventHooks-DBMdj9vw.js.map +1 -0
  212. package/dashboard/dist/assets/{useYamlActivityEvents-D3RQjfzo.js → useYamlActivityEvents-BH_ynR_L.js} +2 -2
  213. package/dashboard/dist/assets/{useYamlActivityEvents-D3RQjfzo.js.map → useYamlActivityEvents-BH_ynR_L.js.map} +1 -1
  214. package/dashboard/dist/assets/{users-e2oatvoj.js → users-C9K2cMyb.js} +2 -2
  215. package/dashboard/dist/assets/{users-e2oatvoj.js.map → users-C9K2cMyb.js.map} +1 -1
  216. package/dashboard/dist/assets/{vendor-icons-BkK55L-1.js → vendor-icons-E6836lXZ.js} +140 -95
  217. package/dashboard/dist/assets/vendor-icons-E6836lXZ.js.map +1 -0
  218. package/dashboard/dist/assets/workflows-B2rsLjoh.js +2 -0
  219. package/dashboard/dist/assets/workflows-B2rsLjoh.js.map +1 -0
  220. package/dashboard/dist/assets/{yaml-workflows-CAKU7LUu.js → yaml-workflows-BLiTvQM2.js} +2 -2
  221. package/dashboard/dist/assets/{yaml-workflows-CAKU7LUu.js.map → yaml-workflows-BLiTvQM2.js.map} +1 -1
  222. package/dashboard/dist/index.html +3 -3
  223. package/docs/agents.md +160 -0
  224. package/docs/api/http/agents.md +201 -0
  225. package/docs/api/sdk/agents.md +138 -0
  226. package/docs/story.md +101 -78
  227. package/package.json +3 -3
  228. package/dashboard/dist/assets/BotPicker-C2xR1xay.js +0 -2
  229. package/dashboard/dist/assets/BotPicker-C2xR1xay.js.map +0 -1
  230. package/dashboard/dist/assets/ListToolbar-CyEkulVR.js +0 -2
  231. package/dashboard/dist/assets/ListToolbar-CyEkulVR.js.map +0 -1
  232. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js +0 -5
  233. package/dashboard/dist/assets/McpQueryDetailPage-5Dsj6PlL.js.map +0 -1
  234. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js +0 -2
  235. package/dashboard/dist/assets/McpRunsPage-BKba-3Wl.js.map +0 -1
  236. package/dashboard/dist/assets/RolePill-BhVC0cc3.js +0 -2
  237. package/dashboard/dist/assets/RolePill-BhVC0cc3.js.map +0 -1
  238. package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js +0 -2
  239. package/dashboard/dist/assets/RunAsSelector-CD7_Dmb0.js.map +0 -1
  240. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js +0 -2
  241. package/dashboard/dist/assets/SwimlaneTimeline-CUl5RdXU.js.map +0 -1
  242. package/dashboard/dist/assets/WorkflowPill-DUDDyBsj.js.map +0 -1
  243. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js +0 -2
  244. package/dashboard/dist/assets/WorkflowsDashboard-Be1A1zAT.js.map +0 -1
  245. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js +0 -2
  246. package/dashboard/dist/assets/YamlWorkflowsPage-C6qzcQcJ.js.map +0 -1
  247. package/dashboard/dist/assets/escalation-columns-DL4zsR8Y.js +0 -2
  248. package/dashboard/dist/assets/index-B-ioA6yv.js +0 -2
  249. package/dashboard/dist/assets/index-B-ioA6yv.js.map +0 -1
  250. package/dashboard/dist/assets/index-BMpoMc4A.js +0 -2
  251. package/dashboard/dist/assets/index-BMpoMc4A.js.map +0 -1
  252. package/dashboard/dist/assets/index-BU04qgJt.js +0 -15
  253. package/dashboard/dist/assets/index-BU04qgJt.js.map +0 -1
  254. package/dashboard/dist/assets/index-BUjxYyxc.js.map +0 -1
  255. package/dashboard/dist/assets/index-BpoHVMV7.js +0 -2
  256. package/dashboard/dist/assets/index-CEnDYJOO.js +0 -2
  257. package/dashboard/dist/assets/index-CbuH92vk.js +0 -6
  258. package/dashboard/dist/assets/index-CbuH92vk.js.map +0 -1
  259. package/dashboard/dist/assets/index-DrouIN-M.js +0 -2
  260. package/dashboard/dist/assets/index-DrouIN-M.js.map +0 -1
  261. package/dashboard/dist/assets/index-DzICLMI7.js +0 -2
  262. package/dashboard/dist/assets/index-efS5gKpv.css +0 -1
  263. package/dashboard/dist/assets/index-qT78AZDq.js +0 -2
  264. package/dashboard/dist/assets/index-qT78AZDq.js.map +0 -1
  265. package/dashboard/dist/assets/useEventHooks-BPjEkCpD.js +0 -2
  266. package/dashboard/dist/assets/useEventHooks-BPjEkCpD.js.map +0 -1
  267. package/dashboard/dist/assets/vendor-icons-BkK55L-1.js.map +0 -1
  268. package/dashboard/dist/assets/workflows-D6diL54s.js +0 -2
  269. package/dashboard/dist/assets/workflows-D6diL54s.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEventHooks-DBMdj9vw.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 '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":"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"}
@@ -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-BUjxYyxc.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-D3RQjfzo.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,u as g,N as v}from"./index-oGYUhkFa.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-BH_ynR_L.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useYamlActivityEvents-D3RQjfzo.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-BH_ynR_L.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-BUjxYyxc.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-e2oatvoj.js.map
1
+ import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{b as u}from"./index-oGYUhkFa.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-C9K2cMyb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"users-e2oatvoj.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-C9K2cMyb.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"}