@hotmeshio/long-tail 0.4.21 → 0.4.23

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 (231) hide show
  1. package/build/api/dba.d.ts +2 -1
  2. package/build/api/dba.js +3 -2
  3. package/build/api/escalations/claim.d.ts +2 -0
  4. package/build/api/escalations/claim.js +10 -6
  5. package/build/api/escalations/helpers.d.ts +24 -1
  6. package/build/api/escalations/helpers.js +48 -3
  7. package/build/api/escalations/metadata.d.ts +10 -2
  8. package/build/api/escalations/metadata.js +29 -6
  9. package/build/api/exports.d.ts +1 -0
  10. package/build/api/exports.js +1 -1
  11. package/build/api/maintenance.d.ts +1 -0
  12. package/build/api/maintenance.js +3 -3
  13. package/build/api/workflows/discovery.js +5 -2
  14. package/build/modules/auth.d.ts +1 -1
  15. package/build/modules/auth.js +3 -3
  16. package/build/modules/maintenance.js +1 -0
  17. package/build/routes/controlplane.js +40 -29
  18. package/build/routes/dba.js +13 -2
  19. package/build/routes/escalations/metadata.js +2 -1
  20. package/build/routes/escalations/single.js +1 -1
  21. package/build/routes/exports.js +6 -0
  22. package/build/routes/maintenance.js +1 -0
  23. package/build/sdk/index.d.ts +2 -0
  24. package/build/services/auth/bot-api-key.js +6 -24
  25. package/build/services/auth/service-token.js +6 -18
  26. package/build/services/auth/sql.d.ts +11 -0
  27. package/build/services/auth/sql.js +37 -0
  28. package/build/services/controlplane/index.js +7 -5
  29. package/build/services/dba.d.ts +3 -1
  30. package/build/services/dba.js +5 -4
  31. package/build/services/escalation/crud.d.ts +19 -3
  32. package/build/services/escalation/crud.js +32 -15
  33. package/build/services/escalation/sql.d.ts +9 -2
  34. package/build/services/escalation/sql.js +36 -14
  35. package/build/services/export/index.d.ts +2 -2
  36. package/build/services/export/index.js +16 -10
  37. package/build/services/maintenance/index.js +7 -4
  38. package/build/services/pipelines/queries.js +5 -2
  39. package/build/services/pipelines/sql.d.ts +0 -1
  40. package/build/services/pipelines/sql.js +1 -3
  41. package/build/system/mcp-servers/admin/controlplane.js +1 -1
  42. package/build/system/mcp-servers/admin/maintenance.js +1 -0
  43. package/build/system/mcp-servers/admin/pipelines.js +4 -4
  44. package/build/system/mcp-servers/admin/schemas.d.ts +31 -25
  45. package/build/system/mcp-servers/admin/schemas.js +9 -7
  46. package/build/system/seed/tool-manifests-admin.d.ts +59 -0
  47. package/build/system/seed/tool-manifests-admin.js +2 -2
  48. package/build/tsconfig.tsbuildinfo +1 -1
  49. package/build/types/maintenance.d.ts +2 -0
  50. package/dashboard/dist/assets/{AdminDashboard-BwUGcCxQ.js → AdminDashboard-CgJC8ZZF.js} +2 -2
  51. package/dashboard/dist/assets/{AdminDashboard-BwUGcCxQ.js.map → AdminDashboard-CgJC8ZZF.js.map} +1 -1
  52. package/dashboard/dist/assets/{AgentConfigPage-DgrYzLwq.js → AgentConfigPage-Bjl2Lsvo.js} +2 -2
  53. package/dashboard/dist/assets/{AgentConfigPage-DgrYzLwq.js.map → AgentConfigPage-Bjl2Lsvo.js.map} +1 -1
  54. package/dashboard/dist/assets/{AgentDetailPage-XJpl7wfJ.js → AgentDetailPage-D5dHrfaM.js} +2 -2
  55. package/dashboard/dist/assets/{AgentDetailPage-XJpl7wfJ.js.map → AgentDetailPage-D5dHrfaM.js.map} +1 -1
  56. package/dashboard/dist/assets/{AgentsPage-CGpVG6r8.js → AgentsPage-Mom3N1Av.js} +2 -2
  57. package/dashboard/dist/assets/{AgentsPage-CGpVG6r8.js.map → AgentsPage-Mom3N1Av.js.map} +1 -1
  58. package/dashboard/dist/assets/{AvailableEscalationsPage-DR1e0TQZ.js → AvailableEscalationsPage-B2ZAb41C.js} +2 -2
  59. package/dashboard/dist/assets/{AvailableEscalationsPage-DR1e0TQZ.js.map → AvailableEscalationsPage-B2ZAb41C.js.map} +1 -1
  60. package/dashboard/dist/assets/{BotPicker-BKtjl6IL.js → BotPicker-dCvnjynP.js} +2 -2
  61. package/dashboard/dist/assets/{BotPicker-BKtjl6IL.js.map → BotPicker-dCvnjynP.js.map} +1 -1
  62. package/dashboard/dist/assets/{CapabilitiesPage-kCB8fyOj.js → CapabilitiesPage-CK2fJ9Sy.js} +2 -2
  63. package/dashboard/dist/assets/{CapabilitiesPage-kCB8fyOj.js.map → CapabilitiesPage-CK2fJ9Sy.js.map} +1 -1
  64. package/dashboard/dist/assets/{CollapsibleSection-C3tU61hB.js → CollapsibleSection-bW0UZN9b.js} +2 -2
  65. package/dashboard/dist/assets/{CollapsibleSection-C3tU61hB.js.map → CollapsibleSection-bW0UZN9b.js.map} +1 -1
  66. package/dashboard/dist/assets/{CredentialsPage-Dt4nJs_B.js → CredentialsPage-DVOK3aaR.js} +2 -2
  67. package/dashboard/dist/assets/{CredentialsPage-Dt4nJs_B.js.map → CredentialsPage-DVOK3aaR.js.map} +1 -1
  68. package/dashboard/dist/assets/{CronLabel-BdE6mHyA.js → CronLabel-Cv5em7OP.js} +2 -2
  69. package/dashboard/dist/assets/{CronLabel-BdE6mHyA.js.map → CronLabel-Cv5em7OP.js.map} +1 -1
  70. package/dashboard/dist/assets/{CustomDurationPicker-B_Yxfb-u.js → CustomDurationPicker-Dy4NBqhZ.js} +2 -2
  71. package/dashboard/dist/assets/{CustomDurationPicker-B_Yxfb-u.js.map → CustomDurationPicker-Dy4NBqhZ.js.map} +1 -1
  72. package/dashboard/dist/assets/{ElapsedCell-tcGx5PFI.js → ElapsedCell-TQqWaVRq.js} +2 -2
  73. package/dashboard/dist/assets/{ElapsedCell-tcGx5PFI.js.map → ElapsedCell-TQqWaVRq.js.map} +1 -1
  74. package/dashboard/dist/assets/{EscalationsOverview-1KO5dXzk.js → EscalationsOverview-Cv5UvuHI.js} +2 -2
  75. package/dashboard/dist/assets/{EscalationsOverview-1KO5dXzk.js.map → EscalationsOverview-Cv5UvuHI.js.map} +1 -1
  76. package/dashboard/dist/assets/{EventTable-DnpsQ6Ew.js → EventTable-Doky6fCO.js} +2 -2
  77. package/dashboard/dist/assets/{EventTable-DnpsQ6Ew.js.map → EventTable-Doky6fCO.js.map} +1 -1
  78. package/dashboard/dist/assets/HomePage-CzvVyTq4.js +2 -0
  79. package/dashboard/dist/assets/HomePage-CzvVyTq4.js.map +1 -0
  80. package/dashboard/dist/assets/{ListToolbar-jrVba7QN.js → ListToolbar-Cfec9gz_.js} +2 -2
  81. package/dashboard/dist/assets/{ListToolbar-jrVba7QN.js.map → ListToolbar-Cfec9gz_.js.map} +1 -1
  82. package/dashboard/dist/assets/McpOverview-BN4GsBGI.js +2 -0
  83. package/dashboard/dist/assets/McpOverview-BN4GsBGI.js.map +1 -0
  84. package/dashboard/dist/assets/McpQueryDetailPage-lCW668WQ.js +5 -0
  85. package/dashboard/dist/assets/McpQueryDetailPage-lCW668WQ.js.map +1 -0
  86. package/dashboard/dist/assets/{McpQueryPage-WZfTY43_.js → McpQueryPage-BK5L2PqJ.js} +2 -2
  87. package/dashboard/dist/assets/{McpQueryPage-WZfTY43_.js.map → McpQueryPage-BK5L2PqJ.js.map} +1 -1
  88. package/dashboard/dist/assets/McpRunDetailPage-CQOeYqxa.js +2 -0
  89. package/dashboard/dist/assets/McpRunDetailPage-CQOeYqxa.js.map +1 -0
  90. package/dashboard/dist/assets/McpRunsPage-QsXid9Xe.js +2 -0
  91. package/dashboard/dist/assets/McpRunsPage-QsXid9Xe.js.map +1 -0
  92. package/dashboard/dist/assets/{OperatorDashboard-Cy7ySMXj.js → OperatorDashboard-CZQSINho.js} +2 -2
  93. package/dashboard/dist/assets/{OperatorDashboard-Cy7ySMXj.js.map → OperatorDashboard-CZQSINho.js.map} +1 -1
  94. package/dashboard/dist/assets/{ProcessDetailPage-DYIfvWyc.js → ProcessDetailPage-DUCOOvOK.js} +2 -2
  95. package/dashboard/dist/assets/{ProcessDetailPage-DYIfvWyc.js.map → ProcessDetailPage-DUCOOvOK.js.map} +1 -1
  96. package/dashboard/dist/assets/{ProcessesListPage-DR1RGaMl.js → ProcessesListPage-CXvSLTIM.js} +2 -2
  97. package/dashboard/dist/assets/{ProcessesListPage-DR1RGaMl.js.map → ProcessesListPage-CXvSLTIM.js.map} +1 -1
  98. package/dashboard/dist/assets/RolesPage-DlQR0Iz_.js +2 -0
  99. package/dashboard/dist/assets/RolesPage-DlQR0Iz_.js.map +1 -0
  100. package/dashboard/dist/assets/{RunAsSelector-B-ksMoEj.js → RunAsSelector-DP-jxsv6.js} +2 -2
  101. package/dashboard/dist/assets/{RunAsSelector-B-ksMoEj.js.map → RunAsSelector-DP-jxsv6.js.map} +1 -1
  102. package/dashboard/dist/assets/{SwimlaneTimeline-Cr_K5qpu.js → SwimlaneTimeline-BmASA0nN.js} +2 -2
  103. package/dashboard/dist/assets/{SwimlaneTimeline-Cr_K5qpu.js.map → SwimlaneTimeline-BmASA0nN.js.map} +1 -1
  104. package/dashboard/dist/assets/{TaskDetailPage-BO5p7AEe.js → TaskDetailPage-CRowpkeZ.js} +2 -2
  105. package/dashboard/dist/assets/{TaskDetailPage-BO5p7AEe.js.map → TaskDetailPage-CRowpkeZ.js.map} +1 -1
  106. package/dashboard/dist/assets/{TasksListPage-BRg-uFtF.js → TasksListPage-uJ6z37J-.js} +2 -2
  107. package/dashboard/dist/assets/{TasksListPage-BRg-uFtF.js.map → TasksListPage-uJ6z37J-.js.map} +1 -1
  108. package/dashboard/dist/assets/TimeAgo-BxwngK1D.js +2 -0
  109. package/dashboard/dist/assets/{TimeAgo-BSzN6rAH.js.map → TimeAgo-BxwngK1D.js.map} +1 -1
  110. package/dashboard/dist/assets/{TimestampCell-DL6zMNEQ.js → TimestampCell-CDmichOM.js} +2 -2
  111. package/dashboard/dist/assets/{TimestampCell-DL6zMNEQ.js.map → TimestampCell-CDmichOM.js.map} +1 -1
  112. package/dashboard/dist/assets/ToolTestPanel-xjTn8sU8.js +2 -0
  113. package/dashboard/dist/assets/ToolTestPanel-xjTn8sU8.js.map +1 -0
  114. package/dashboard/dist/assets/{TopicDetailPage-D7gCsPKB.js → TopicDetailPage-Dm0hDlS8.js} +2 -2
  115. package/dashboard/dist/assets/{TopicDetailPage-D7gCsPKB.js.map → TopicDetailPage-Dm0hDlS8.js.map} +1 -1
  116. package/dashboard/dist/assets/{TopicsPage-B3Aa8Haz.js → TopicsPage-letISGGD.js} +2 -2
  117. package/dashboard/dist/assets/{TopicsPage-B3Aa8Haz.js.map → TopicsPage-letISGGD.js.map} +1 -1
  118. package/dashboard/dist/assets/{UserName-BjHIJWgh.js → UserName-W6_Iz2Qb.js} +2 -2
  119. package/dashboard/dist/assets/{UserName-BjHIJWgh.js.map → UserName-W6_Iz2Qb.js.map} +1 -1
  120. package/dashboard/dist/assets/{WorkflowExecutionPage-BQ7AYlQA.js → WorkflowExecutionPage-Cfx-xlRT.js} +2 -2
  121. package/dashboard/dist/assets/{WorkflowExecutionPage-BQ7AYlQA.js.map → WorkflowExecutionPage-Cfx-xlRT.js.map} +1 -1
  122. package/dashboard/dist/assets/WorkflowsDashboard-DC4XHMWt.js +2 -0
  123. package/dashboard/dist/assets/WorkflowsDashboard-DC4XHMWt.js.map +1 -0
  124. package/dashboard/dist/assets/{WorkflowsOverview-B4DUcVxs.js → WorkflowsOverview-GefO_yn0.js} +2 -2
  125. package/dashboard/dist/assets/{WorkflowsOverview-B4DUcVxs.js.map → WorkflowsOverview-GefO_yn0.js.map} +1 -1
  126. package/dashboard/dist/assets/YamlWorkflowsPage-CMsrFooO.js +2 -0
  127. package/dashboard/dist/assets/YamlWorkflowsPage-CMsrFooO.js.map +1 -0
  128. package/dashboard/dist/assets/{agents-CkvQDr9b.js → agents-BI5OeN84.js} +2 -2
  129. package/dashboard/dist/assets/{agents-CkvQDr9b.js.map → agents-BI5OeN84.js.map} +1 -1
  130. package/dashboard/dist/assets/{bots-CzuMCVgU.js → bots-1UzUCsrR.js} +2 -2
  131. package/dashboard/dist/assets/{bots-CzuMCVgU.js.map → bots-1UzUCsrR.js.map} +1 -1
  132. package/dashboard/dist/assets/capabilities-BUbl-ojp.js +2 -0
  133. package/dashboard/dist/assets/{capabilities-CbGmS0ty.js.map → capabilities-BUbl-ojp.js.map} +1 -1
  134. package/dashboard/dist/assets/{controlplane-DGvwkuYx.js → controlplane-DTFrH_vN.js} +2 -2
  135. package/dashboard/dist/assets/{controlplane-DGvwkuYx.js.map → controlplane-DTFrH_vN.js.map} +1 -1
  136. package/dashboard/dist/assets/{escalation-B7ysVToF.js → escalation-BQhCt4W0.js} +2 -2
  137. package/dashboard/dist/assets/{escalation-B7ysVToF.js.map → escalation-BQhCt4W0.js.map} +1 -1
  138. package/dashboard/dist/assets/{escalation-columns-CHQEJU1j.js → escalation-columns-J20k5CcY.js} +2 -2
  139. package/dashboard/dist/assets/{escalation-columns-CHQEJU1j.js.map → escalation-columns-J20k5CcY.js.map} +1 -1
  140. package/dashboard/dist/assets/{helpers-BFOjXa4r.js → helpers-ge6Eu90Y.js} +2 -2
  141. package/dashboard/dist/assets/{helpers-BFOjXa4r.js.map → helpers-ge6Eu90Y.js.map} +1 -1
  142. package/dashboard/dist/assets/index-C-mbURj-.js +2 -0
  143. package/dashboard/dist/assets/index-C-mbURj-.js.map +1 -0
  144. package/dashboard/dist/assets/{index-BduDiGcw.js → index-C45DvtAZ.js} +2 -2
  145. package/dashboard/dist/assets/{index-BduDiGcw.js.map → index-C45DvtAZ.js.map} +1 -1
  146. package/dashboard/dist/assets/{index-B9_1AZaG.js → index-C9ClHiiW.js} +2 -2
  147. package/dashboard/dist/assets/{index-B9_1AZaG.js.map → index-C9ClHiiW.js.map} +1 -1
  148. package/dashboard/dist/assets/index-CLUYzdwz.js +2 -0
  149. package/dashboard/dist/assets/{index-DQHmfTPo.js.map → index-CLUYzdwz.js.map} +1 -1
  150. package/dashboard/dist/assets/{index-l_8R6U4r.js → index-CVGgSoda.js} +2 -2
  151. package/dashboard/dist/assets/{index-l_8R6U4r.js.map → index-CVGgSoda.js.map} +1 -1
  152. package/dashboard/dist/assets/{index-_BRA9uFL.js → index-CWEOhAiK.js} +3 -3
  153. package/dashboard/dist/assets/{index-_BRA9uFL.js.map → index-CWEOhAiK.js.map} +1 -1
  154. package/dashboard/dist/assets/{index-BFaDxPxA.js → index-CWlP6vHG.js} +2 -2
  155. package/dashboard/dist/assets/{index-BFaDxPxA.js.map → index-CWlP6vHG.js.map} +1 -1
  156. package/dashboard/dist/assets/index-DasoTRjT.js +2 -0
  157. package/dashboard/dist/assets/{index-BeLphL59.js.map → index-DasoTRjT.js.map} +1 -1
  158. package/dashboard/dist/assets/{index-CvOGgvzP.js → index-FhasoOjO.js} +2 -2
  159. package/dashboard/dist/assets/{index-CvOGgvzP.js.map → index-FhasoOjO.js.map} +1 -1
  160. package/dashboard/dist/assets/{index-a98qWLB-.js → index-WQQJ_cp7.js} +2 -2
  161. package/dashboard/dist/assets/{index-a98qWLB-.js.map → index-WQQJ_cp7.js.map} +1 -1
  162. package/dashboard/dist/assets/{index-CbrMW-gM.js → index-hAZiac0C.js} +2 -2
  163. package/dashboard/dist/assets/{index-CbrMW-gM.js.map → index-hAZiac0C.js.map} +1 -1
  164. package/dashboard/dist/assets/{index-v0OQpgXS.js → index-si70YcIP.js} +2 -2
  165. package/dashboard/dist/assets/{index-v0OQpgXS.js.map → index-si70YcIP.js.map} +1 -1
  166. package/dashboard/dist/assets/{index-CRiBkHPb.js → index-vgxjge70.js} +2 -2
  167. package/dashboard/dist/assets/{index-CRiBkHPb.js.map → index-vgxjge70.js.map} +1 -1
  168. package/dashboard/dist/assets/{knowledge-BlF8UMrk.js → knowledge-D9Tuh-o-.js} +2 -2
  169. package/dashboard/dist/assets/{knowledge-BlF8UMrk.js.map → knowledge-D9Tuh-o-.js.map} +1 -1
  170. package/dashboard/dist/assets/{mcp-MtXuky8q.js → mcp-BO8QnWyk.js} +2 -2
  171. package/dashboard/dist/assets/{mcp-MtXuky8q.js.map → mcp-BO8QnWyk.js.map} +1 -1
  172. package/dashboard/dist/assets/{mcp-query-DQ-J1Q0K.js → mcp-query-WLtQtr51.js} +2 -2
  173. package/dashboard/dist/assets/{mcp-query-DQ-J1Q0K.js.map → mcp-query-WLtQtr51.js.map} +1 -1
  174. package/dashboard/dist/assets/pipelines-BAVf9xud.js +2 -0
  175. package/dashboard/dist/assets/pipelines-BAVf9xud.js.map +1 -0
  176. package/dashboard/dist/assets/{roles-D-LhJ82d.js → roles-mGO2-2hA.js} +2 -2
  177. package/dashboard/dist/assets/{roles-D-LhJ82d.js.map → roles-mGO2-2hA.js.map} +1 -1
  178. package/dashboard/dist/assets/{tasks-BrP_8uEN.js → tasks-JVRVCx0f.js} +2 -2
  179. package/dashboard/dist/assets/{tasks-BrP_8uEN.js.map → tasks-JVRVCx0f.js.map} +1 -1
  180. package/dashboard/dist/assets/{topics-DUk-zX5D.js → topics-BLVnahd7.js} +2 -2
  181. package/dashboard/dist/assets/{topics-DUk-zX5D.js.map → topics-BLVnahd7.js.map} +1 -1
  182. package/dashboard/dist/assets/{useEventHooks-XNNzwADV.js → useEventHooks-BwjAi0Qq.js} +2 -2
  183. package/dashboard/dist/assets/{useEventHooks-XNNzwADV.js.map → useEventHooks-BwjAi0Qq.js.map} +1 -1
  184. package/dashboard/dist/assets/useNamespace-DkHmXddZ.js +2 -0
  185. package/dashboard/dist/assets/useNamespace-DkHmXddZ.js.map +1 -0
  186. package/dashboard/dist/assets/{useYamlActivityEvents-DANQ5jIY.js → useYamlActivityEvents-CsaR5dWj.js} +2 -2
  187. package/dashboard/dist/assets/{useYamlActivityEvents-DANQ5jIY.js.map → useYamlActivityEvents-CsaR5dWj.js.map} +1 -1
  188. package/dashboard/dist/assets/{users-vj0JgOkA.js → users-BvizpAkV.js} +2 -2
  189. package/dashboard/dist/assets/{users-vj0JgOkA.js.map → users-BvizpAkV.js.map} +1 -1
  190. package/dashboard/dist/assets/{workflows-CmqgGPzI.js → workflows-CyEYa01a.js} +2 -2
  191. package/dashboard/dist/assets/{workflows-CmqgGPzI.js.map → workflows-CyEYa01a.js.map} +1 -1
  192. package/dashboard/dist/assets/{yaml-workflows-DNFyjBXH.js → yaml-workflows-i3GzrEme.js} +2 -2
  193. package/dashboard/dist/assets/{yaml-workflows-DNFyjBXH.js.map → yaml-workflows-i3GzrEme.js.map} +1 -1
  194. package/dashboard/dist/index.html +1 -1
  195. package/docs/api/http/controlplane.md +6 -4
  196. package/docs/api/http/dba.md +1 -0
  197. package/docs/api/http/escalations.md +38 -2
  198. package/docs/api/http/exports.md +26 -0
  199. package/docs/api/http/maintenance.md +1 -0
  200. package/docs/api/mcp/admin.md +7 -7
  201. package/docs/api/sdk/controlplane.md +4 -4
  202. package/docs/api/sdk/escalations.md +25 -5
  203. package/package.json +1 -1
  204. package/dashboard/dist/assets/HomePage-B2Jgo1J1.js +0 -2
  205. package/dashboard/dist/assets/HomePage-B2Jgo1J1.js.map +0 -1
  206. package/dashboard/dist/assets/McpOverview-BzyxJyc9.js +0 -2
  207. package/dashboard/dist/assets/McpOverview-BzyxJyc9.js.map +0 -1
  208. package/dashboard/dist/assets/McpQueryDetailPage-DXNseeKl.js +0 -5
  209. package/dashboard/dist/assets/McpQueryDetailPage-DXNseeKl.js.map +0 -1
  210. package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js +0 -2
  211. package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js.map +0 -1
  212. package/dashboard/dist/assets/McpRunsPage-SXyiwc0d.js +0 -2
  213. package/dashboard/dist/assets/McpRunsPage-SXyiwc0d.js.map +0 -1
  214. package/dashboard/dist/assets/RolesPage-pMERxj15.js +0 -2
  215. package/dashboard/dist/assets/RolesPage-pMERxj15.js.map +0 -1
  216. package/dashboard/dist/assets/TimeAgo-BSzN6rAH.js +0 -2
  217. package/dashboard/dist/assets/ToolTestPanel-fLzNp79U.js +0 -2
  218. package/dashboard/dist/assets/ToolTestPanel-fLzNp79U.js.map +0 -1
  219. package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js +0 -2
  220. package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js.map +0 -1
  221. package/dashboard/dist/assets/YamlWorkflowsPage-CnTNOku0.js +0 -2
  222. package/dashboard/dist/assets/YamlWorkflowsPage-CnTNOku0.js.map +0 -1
  223. package/dashboard/dist/assets/capabilities-CbGmS0ty.js +0 -2
  224. package/dashboard/dist/assets/index-BeLphL59.js +0 -2
  225. package/dashboard/dist/assets/index-DDlrQeTj.js +0 -2
  226. package/dashboard/dist/assets/index-DDlrQeTj.js.map +0 -1
  227. package/dashboard/dist/assets/index-DQHmfTPo.js +0 -2
  228. package/dashboard/dist/assets/namespaces-DtsT_GoV.js +0 -2
  229. package/dashboard/dist/assets/namespaces-DtsT_GoV.js.map +0 -1
  230. package/dashboard/dist/assets/pipelines-BjlCm9VH.js +0 -2
  231. package/dashboard/dist/assets/pipelines-BjlCm9VH.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{a as i,j as e}from"./vendor-query-B2UbickB.js";import{P as Ne}from"./PageHeaderWithStats-yD_PTbOl.js";import{F as ve,b as Ce}from"./FilterBar-Ck4K4rzu.js";import{u as $e}from"./useFilterParams-x-Dg0Vgz.js";import{u as te,a as se,b as Se,c as _e,d as Te}from"./controlplane-DGvwkuYx.js";import{M as Ee}from"./Modal-CSrxpXeM.js";import{Y as Z,at as H,P as Re,au as Y,av as J,q as ne,I as Me,A as Pe,aa as Ae,R as Le,H as We,aw as Qe,E as Fe,Z as Oe,ax as Ie}from"./vendor-icons-Doy0g69_.js";import{C as z}from"./CollapsibleSection-C3tU61hB.js";import{T as Be}from"./TaskQueuePill-BCQrS2oK.js";import{D as ze}from"./DataTable-D9yuBv0w.js";import{C as W,c as Je,J as De}from"./index-_BRA9uFL.js";import{R as He,a as X}from"./RowActions-Dg-Fsm5O.js";import{f as Ue}from"./vendor-react-CXumBFUA.js";import"./EmptyState-BcsfPq9T.js";const Ve=[{label:"15m",value:"15m"},{label:"30m",value:"30m"},{label:"1h",value:"1h"},{label:"1d",value:"1d"},{label:"7d",value:"7d"}],re={pong:"text-status-success",ping:"text-accent",throttle:"text-status-warning",job:"text-purple-400",work:"text-text-secondary",activate:"text-status-error",cron:"text-text-tertiary",user:"text-text-secondary"},qe={pong:"roll call",ping:"ping",throttle:"throttle",job:"job",work:"work",activate:"activate",cron:"cron",user:"user"},Ge=250;function A(t){return!!t.worker_topic}function L(t){return typeof t.throttle=="number"&&t.throttle!==0}function U(t){return t===void 0||t===0?"Normal":t===-1?"Paused":t>=864e5?`${(t/864e5).toFixed(0)}d`:t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${(t/1e3).toFixed(1)}s`:`${t}ms`}function Ke(t){if(!t)return null;const s=t.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d+)$/);if(s){const[,r,n,a,u,l,g,c]=s;return new Date(`${r}-${n}-${a}T${u}:${l}:${g}.${c}Z`)}const o=new Date(t);return isNaN(o.getTime())?null:o}function Ze(t){const s=Ke(t);if(!s)return"--";const o=Date.now()-s.getTime();if(o<0||isNaN(o))return"--";const r=Math.floor(o/1e3);if(r<60)return`${r}s`;const n=Math.floor(r/60);if(n<60)return`${n}m`;const a=Math.floor(n/60);return a<24?`${a}h ${n%60}m`:`${Math.floor(a/24)}d ${a%24}h`}function ae(t){return t.replace(/^hmsh:[^:]+:x:/,"")||"(engine)"}function F(t){const s=t.match(/^([^:]+)::(.+?)-[A-Za-z0-9_]{10,}$/);return s?s[2]:t.length>20?t.slice(0,20)+"...":t}function Ye(t){const s=t.match(/^([^:]+)::/);return(s==null?void 0:s[1])||""}const oe=[{key:"pong",label:"Roll Call",description:"Node health check responses"},{key:"ping",label:"Ping",description:"Health check broadcasts"},{key:"throttle",label:"Throttle",description:"Throttle commands"},{key:"job",label:"Job",description:"Job lifecycle events"},{key:"work",label:"Work",description:"Worker dispatch events"},{key:"activate",label:"Activate",description:"Worker activation"},{key:"cron",label:"Cron",description:"Cron schedule triggers"},{key:"user",label:"User",description:"User-defined messages"}];function O(t){return`${t.engine_id}-${t.worker_topic||"engine"}`}function Xe(t){const s=new Map;for(const o of t){if(!o.worker_topic)continue;const r=o.worker_topic;s.has(r)||s.set(r,[]),s.get(r).push(o)}return s}function R(t){let s=0,o=0,r=0;for(const n of t)if(n.counts)for(const[a,u]of Object.entries(n.counts))s+=u,a==="200"?o+=u:a==="500"&&(r+=u);return{total:s,success:o,errors:r}}function et(t){let s=0;for(const o of t)typeof o.stream_depth=="number"&&(s+=o.stream_depth);return s}function tt(t){if(t.length===0)return"healthy";if(t.every(r=>r.throttle===-1))return"paused";const{errors:o}=R(t);return o>0||t.some(L)?"degraded":"healthy"}function st({activeAppId:t,allProfiles:s,profiles:o}){const r=te(),[n,a]=i.useState(new Set),[u,l]=i.useState(!1),[g,c]=i.useState([]);i.useEffect(()=>{a(new Set)},[t]);const w=i.useCallback(p=>{a($=>{const b=new Set($),S=O(p);return b.has(S)?b.delete(S):b.add(S),b})},[]),f=i.useCallback(()=>{n.size===o.length?a(new Set):a(new Set(o.map(O)))},[o,n.size]),y=i.useMemo(()=>{const p=o.filter(N=>n.has(O(N)));if(p.length===0)return[];if(p.length===s.length)return[{label:"Entire Mesh"}];const $=p.filter(N=>!A(N)),b=p.filter(A),S=[];for(const N of $)S.push({label:`Engine ${N.engine_id}`,guid:N.engine_id,scope:"engines"});const M=new Map;for(const N of b){const T=N.worker_topic;M.has(T)||M.set(T,[]),M.get(T).push(N)}for(const[N,T]of M){const I=s.filter(P=>P.worker_topic===N);if(T.length===I.length)S.push({label:N,topic:N});else for(const P of T)S.push({label:`${N} ${P.engine_id}`,guid:P.engine_id})}return S},[o,s,n]);return{selectedIds:n,setSelectedIds:a,toggleCheckbox:w,toggleAll:f,throttleModalOpen:u,throttleTargets:g,selectedThrottleTargets:y,throttleMutation:r,handleBulkThrottle:p=>{const $=g.length>0?g:y;for(const b of $)r.mutate({appId:t,throttle:p,...b.topic?{topic:b.topic}:{},...b.guid?{guid:b.guid}:{},...b.scope?{scope:b.scope}:{}});l(!1),c([])},handleRowClick:(p,$)=>{const b=A(p)?`${p.worker_topic} ${p.engine_id}`:`Engine ${p.engine_id}`;c([{label:b,guid:p.engine_id,scope:$||(A(p)?"workers":"engines")}]),l(!0)},handleBulkThrottleOpen:()=>{c(y),l(!0)},handleResumeThrottle:(p,$)=>{const b=$||(A(p)?"workers":"engines");r.mutate({appId:t,throttle:0,guid:p.engine_id,scope:b})},handleResumeQueue:p=>{r.mutate({appId:t,throttle:0,topic:p})},handleQueueThrottle:p=>{c([{label:p,topic:p}]),l(!0)},closeThrottleModal:()=>{l(!1),c([])}}}const nt=[{label:"Resume",ms:0},{label:"0.5s",ms:500},{label:"1s",ms:1e3},{label:"5s",ms:5e3},{label:"30s",ms:3e4},{label:"Pause",ms:-1}];function rt({target:t}){const s=t.label==="Entire Mesh",o=t.label==="All Engines"||t.label.startsWith("Engine "),r=s?"bg-status-error/10 text-status-error":o?"bg-blue-500/10 text-blue-500":"bg-accent/[0.06] text-text-secondary",n=t.scope==="engines"?"engine only":t.scope==="workers"?"worker only":t.guid?"guid":t.topic?"topic":"mesh";return e.jsxs("span",{className:`inline-flex items-center gap-1.5 px-2 py-0.5 text-[10px] font-medium rounded-lg ${r}`,children:[t.label,e.jsx("span",{className:"text-[8px] opacity-50",children:n})]})}function at({open:t,onClose:s,targets:o,onApply:r,isPending:n}){const[a,u]=i.useState("");return e.jsx(Ee,{open:t,onClose:s,title:"Adjust Throttle",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Targets"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:o.map((l,g)=>e.jsx(rt,{target:l},l.guid||l.topic||g))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Presets"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:nt.map(l=>e.jsx("button",{onClick:()=>r(l.ms),disabled:n,className:`px-3 py-1.5 text-xs rounded transition-colors ${l.ms===-1?"bg-status-error/10 text-status-error hover:bg-status-error/20":l.ms===0?"bg-status-success/10 text-status-success hover:bg-status-success/20":"bg-surface-sunken text-text-secondary hover:bg-surface-hover"} disabled:opacity-50`,children:l.label},l.label))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Custom delay (seconds)"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("input",{type:"number",step:"0.1",min:"0",value:a,onChange:l=>u(l.target.value),placeholder:"e.g. 2.5",className:"input text-xs py-1.5 px-3 w-28"}),e.jsx("button",{onClick:()=>{const l=parseFloat(a);isNaN(l)||l<0||r(Math.round(l*1e3))},disabled:n,className:"btn-primary text-xs py-1.5 px-4 disabled:opacity-50",children:"Apply"})]})]})]})})}function ot(){const{data:t}=se(),s=te(),[o,r]=i.useState(null),[n,a]=i.useState(!1),u=(t==null?void 0:t.apps)??[],l=i.useCallback(async(c,w="all")=>{if(u.length===0)return;a(!0);const f=await Promise.allSettled(u.map(k=>s.mutateAsync({appId:k.appId,throttle:c,...w!=="all"?{scope:w}:{}}))),y=f.filter(k=>k.status==="rejected").length;y>0&&console.error(`Emergency throttle: ${y}/${f.length} apps failed`),a(!1),r(null)},[u,s]),g=c=>c==="engines"?"engines":c==="workers"?"workers":"everything";return o?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-xs text-status-error",children:["Pause ",g(o.scope),"?"]}),e.jsx("button",{onClick:()=>l(o.ms,o.scope),disabled:n,className:"px-2.5 py-1 text-xs rounded-md bg-status-error text-white hover:bg-status-error/90 transition-colors disabled:opacity-50",children:n?e.jsx(Z,{className:"w-3.5 h-3.5 animate-spin"}):"Confirm"}),e.jsx("button",{onClick:()=>r(null),disabled:n,className:"px-2.5 py-1 text-xs text-text-tertiary hover:text-text-primary transition-colors disabled:opacity-50",children:"Cancel"})]}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>r({ms:-1,scope:"all"}),disabled:n,className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-error/80 hover:text-status-error hover:bg-status-error/10 transition-colors disabled:opacity-50",title:"Pause all engines and workers",children:[e.jsx(H,{className:"w-3.5 h-3.5"}),"Pause All"]}),e.jsxs("button",{onClick:()=>l(0),disabled:n,className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-success/80 hover:text-status-success hover:bg-status-success/10 transition-colors disabled:opacity-50",title:"Resume all engines and workers",children:[n?e.jsx(Z,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(Re,{className:"w-3.5 h-3.5"}),"Resume All"]})]})}function lt({byStream:t,onNodeFilter:s}){const[o,r]=i.useState(!1);if(i.useEffect(()=>{r(!1);const c=requestAnimationFrame(()=>r(!0));return()=>cancelAnimationFrame(c)},[t]),t.length===0)return e.jsx("p",{className:"text-xs text-text-tertiary py-4 text-center",children:"No activity in this period"});const n=t.filter(c=>c.stream_type==="engine"),a=t.filter(c=>c.stream_type==="worker"),u=Math.max(...t.map(c=>c.count)),l=c=>{const w=u>0?c.count/u*100:0,f=c.stream_type==="engine",y=f?"(all engines)":ae(c.stream_name),k=f?"bg-blue-500/70":"bg-accent/60",C=f?"text-blue-500":"text-text-tertiary";return e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:`text-[9px] font-mono ${C} w-36 truncate text-right shrink-0`,title:c.stream_name,children:y}),e.jsx("div",{className:"flex-1 h-4 bg-surface-sunken rounded overflow-hidden",children:e.jsx("div",{className:`h-full ${k} rounded transition-all duration-500 ease-out`,style:{width:o?`${w}%`:"0%"}})}),e.jsx("span",{className:"text-[10px] font-mono tabular-nums text-text-secondary w-12 text-right shrink-0",children:c.count.toLocaleString()})]},`${c.stream_type}-${c.stream_name}`)},g="text-[9px] uppercase tracking-widest font-semibold mb-1 cursor-pointer hover:underline";return e.jsxs("div",{className:"space-y-1.5",children:[n.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:`${g} text-blue-500/70 hover:text-blue-500`,onClick:()=>s==null?void 0:s("engines"),children:"Engine Stream"}),n.map(l),a.length>0&&e.jsx("div",{className:"h-2"})]}),a.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:`${g} text-accent/70 hover:text-accent`,onClick:()=>s==null?void 0:s("workers"),children:"Worker Streams"}),a.map(l)]})]})}function it({queue:t,workers:s,expanded:o,onToggle:r,onWorkerClick:n,onResumeThrottle:a,onQueueThrottle:u,onResumeQueue:l,byStream:g,activeDuration:c}){const w=i.useMemo(()=>{const d=g.find(m=>m.stream_type==="worker"&&ae(m.stream_name)===t);return(d==null?void 0:d.count)??0},[g,t]),f=i.useMemo(()=>tt(s),[s]),y=i.useMemo(()=>et(s),[s]),{errors:k}=i.useMemo(()=>R(s),[s]),C=f==="paused"?"bg-status-error":f==="degraded"?"bg-status-warning":"bg-status-success",x=i.useMemo(()=>[...s].sort((d,m)=>R([m]).total-R([d]).total),[s]),j=i.useMemo(()=>[{key:"engine_id",label:"Router",render:d=>{var p;const m=d.engine_id.replace(/^[^:]+::/,"").replace(/-[A-Za-z0-9_]{10,}$/,"")||d.engine_id,_=((p=d.engine_id.match(/^([^:]+)::/))==null?void 0:p[1])||"";return e.jsxs("div",{className:"flex items-center gap-2",title:d.engine_id,children:[e.jsx("span",{className:"text-xs text-text-secondary truncate max-w-[180px]",children:m}),_&&e.jsx("span",{className:"text-[9px] text-text-tertiary/50",children:_})]})}},{key:"processed",label:"Processed",render:d=>{const m=R([d]);return e.jsx("span",{className:"text-xs font-mono tabular-nums text-text-tertiary",children:m.total>0?m.total.toLocaleString():"--"})},className:"w-24"},{key:"throttle",label:"Throttle",render:d=>{const m=d.throttle;return m===-1?e.jsx("span",{className:"text-xs text-status-error font-medium",children:"Paused"}):m&&m>0?e.jsx("span",{className:"text-xs text-status-warning font-medium",children:U(m)}):e.jsx("span",{className:"text-xs text-text-tertiary",children:"0"})},className:"w-24"},{key:"actions",label:"",render:d=>e.jsxs(He,{children:[L(d)&&e.jsx(X,{icon:Y,title:"Resume (remove throttle)",onClick:()=>a(d),colorClass:"text-text-tertiary hover:text-status-success"}),e.jsx(X,{icon:J,title:"Adjust throttle",onClick:()=>n(d)})]}),className:"w-16"}],[n,a]);return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>r(t),className:"group/row relative flex items-center gap-3 w-full py-2 hover:bg-surface-hover transition-colors text-left rounded",children:[e.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${C}`,title:f}),e.jsx(ne,{className:`w-3.5 h-3.5 text-text-tertiary/50 transition-transform duration-200 ${o?"rotate-90":""}`,strokeWidth:2}),e.jsx(Be,{queue:t,size:"sm"}),e.jsx("span",{className:"flex-1"}),k>0&&e.jsxs("span",{className:"text-[10px] text-status-error font-medium mr-2",children:[k," errors"]}),y>0&&e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-status-warning w-20",children:[e.jsx(Me,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"font-mono tabular-nums",children:y.toLocaleString()})]}),e.jsxs("span",{className:`flex items-center gap-1 text-xs w-24 ${s.some(L)?"text-status-warning":"text-text-tertiary"}`,children:[e.jsx(Pe,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"font-mono tabular-nums",children:s.length}),e.jsx("span",{children:"workers"})]}),e.jsx("span",{className:"flex items-center gap-1 text-xs font-mono text-text-tertiary w-28 justify-end mr-16",children:w>0?e.jsxs(e.Fragment,{children:[e.jsx(Ae,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),w.toLocaleString()," in ",c]}):e.jsx("span",{className:"text-text-tertiary/40",children:"—"})}),e.jsxs("span",{className:"absolute right-3 top-1/2 -translate-y-1/2 opacity-0 group-hover/row:opacity-100 transition-opacity flex items-center gap-2",children:[s.some(L)&&e.jsx(Y,{className:"w-4 h-4 text-text-tertiary hover:text-status-success",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),l(t)}}),e.jsx(J,{className:"w-4 h-4 text-text-tertiary hover:text-accent",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),u(t)}})]})]}),e.jsx(W,{open:o,children:e.jsx("div",{className:"ml-6",children:e.jsx(ze,{columns:j,data:x,keyFn:O,onRowClick:n,emptyMessage:"No workers",inline:!0})})})]})}let ct=0;function ut(t){const s=t.data||{},o=s.topic?String(s.topic):"",r=s.guid?String(s.guid).slice(0,8):"";switch(t.type){case"pong":return o?`Worker ${r}... on "${o}" responded`:`Engine ${r}... responded`;case"ping":return"Roll call broadcast";case"throttle":{const n=s.throttle,a=o?`queue "${o}"`:r?`node ${r}...`:"all nodes";return`${U(n)} applied to ${a}`}case"job":return`Job ${r?r+"...":""} ${s.status||"updated"}`;case"work":return`Dispatched to "${o||"worker"}" ${r?"("+r+"...)":""}`;case"activate":return`Worker "${o||"unknown"}" activated`;case"cron":return`Cron triggered ${o?'"'+o+'"':""}`;default:return o||r||t.type}}function dt(t){const s=[];let o=0;for(;o<t.length;){const r=t[o];if(r.type==="pong"){let n=o+1;for(;n<t.length&&t[n].type==="pong";)n++;const a=t.slice(o,n);if(a.length>=3)s.push({kind:"group",type:"pong",count:a.length,firstTimestamp:a[a.length-1].timestamp,lastTimestamp:a[0].timestamp,events:a});else for(const u of a)s.push({kind:"single",event:u});o=n}else s.push({kind:"single",event:r}),o++}return s}function le({event:t}){const[s,o]=i.useState(!1);return e.jsxs("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxs("button",{onClick:()=>o(!s),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsx("span",{className:"text-[9px] font-mono text-text-tertiary whitespace-nowrap tabular-nums shrink-0",children:new Date(t.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),e.jsx("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${re[t.type]||"text-text-tertiary"} bg-surface-sunken whitespace-nowrap shrink-0`,children:qe[t.type]||t.type}),e.jsx("span",{className:"text-[9px] text-text-secondary flex-1 min-w-0 truncate",children:ut(t)}),e.jsx("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${s?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),e.jsx(W,{open:s,children:e.jsx("div",{className:"pb-2",children:e.jsx(De,{data:t.data})})})]})}function xt({group:t}){const[s,o]=i.useState(!1),r=t.events.filter(a=>{var u;return!((u=a.data)!=null&&u.topic)}).length,n=t.count-r;return e.jsxs("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxs("button",{onClick:()=>o(!s),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsx("span",{className:"text-[9px] font-mono text-text-tertiary whitespace-nowrap tabular-nums shrink-0",children:new Date(t.lastTimestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),e.jsx("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${re.pong} bg-surface-sunken whitespace-nowrap shrink-0`,children:"roll call"}),e.jsxs("span",{className:"text-[9px] text-text-secondary flex-1 min-w-0 truncate",children:[t.count," nodes responded",r>0&&n>0?` (${r} engine${r!==1?"s":""}, ${n} worker${n!==1?"s":""})`:r>0?` (${r} engine${r!==1?"s":""})`:` (${n} worker${n!==1?"s":""})`]}),e.jsx("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${s?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),e.jsx(W,{open:s,children:e.jsx("div",{className:"ml-4",children:t.events.map(a=>e.jsx(le,{event:a},a.id))})})]})}function pt({channels:t,onToggle:s,customFilter:o,onCustomFilterChange:r}){return e.jsxs("div",{className:"space-y-3 pb-3 border-b border-surface-border mb-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Channels"}),e.jsx("p",{className:"text-[9px] text-text-tertiary",children:"Unchecked channels are dropped before buffering"})]}),e.jsx("div",{className:"grid grid-cols-2 gap-1",children:oe.map(n=>e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer py-0.5",children:[e.jsx("input",{type:"checkbox",checked:t.has(n.key),onChange:()=>s(n.key),className:"w-3 h-3 rounded border-border accent-accent"}),e.jsx("span",{className:"text-[10px] text-text-secondary",title:n.description,children:n.label})]},n.key))}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Text Filter"}),e.jsx("input",{type:"text",value:o,onChange:n=>r(n.target.value),placeholder:"pong",className:"input text-[10px] font-mono py-1 px-2 w-full"}),e.jsxs("p",{className:"text-[9px] text-text-tertiary mt-1",children:["Filter by event type, e.g. ",e.jsx("span",{className:"font-mono",children:"pong"}),", ",e.jsx("span",{className:"font-mono",children:"throttle"}),", or any text in the event data."]})]})]})}function ht({bridgeActive:t}){const[s,o]=i.useState(!1),[r,n]=i.useState(!1),[a,u]=i.useState([]),[l,g]=i.useState(()=>new Set(oe.map(x=>x.key))),[c,w]=i.useState(""),f=i.useRef(l);i.useEffect(()=>{f.current=l},[l]);const y=i.useRef(c);i.useEffect(()=>{y.current=c},[c]);const k=x=>{g(j=>{const d=new Set(j);return d.has(x)?d.delete(x):d.add(x),d})};Je("lt.events.mesh.>",i.useCallback(x=>{var m;const j=((m=x.type)==null?void 0:m.replace("mesh.",""))||"unknown";if(!f.current.has(j))return;const d=y.current;d&&!`${j} ${JSON.stringify(x.data||x)}`.toLowerCase().includes(d.toLowerCase())||u(_=>[{id:++ct,type:j,timestamp:x.timestamp||new Date().toISOString(),data:x.data||x},..._].slice(0,Ge))},[]));const C=()=>u([]);return e.jsxs("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px] sticky top-14 self-start max-h-[calc(100vh-8rem)] flex flex-col",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Event Stream"}),e.jsx(Le,{className:`w-3 h-3 ${t?"text-status-success animate-pulse":"text-text-tertiary"}`}),e.jsx("span",{className:"text-[9px] text-text-tertiary",children:t?"Live":"..."}),e.jsxs("span",{className:"ml-auto flex items-center gap-1",children:[e.jsx("button",{onClick:()=>{o(x=>!x),n(!1)},className:`p-1 rounded transition-colors ${s?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"Configure channels",children:e.jsx(We,{className:"w-3.5 h-3.5"})}),e.jsx("button",{onClick:()=>{n(x=>!x),o(!1)},className:`p-1 rounded transition-colors ${r?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"View raw JSON",children:e.jsx(Qe,{className:"w-3.5 h-3.5"})}),a.length>0&&e.jsx("button",{onClick:C,className:"p-1 rounded text-text-tertiary hover:text-text-primary transition-colors",title:"Clear events",children:e.jsx(Fe,{className:"w-3.5 h-3.5"})})]})]}),e.jsx(W,{open:s,children:e.jsx(pt,{channels:l,onToggle:k,customFilter:c,onCustomFilterChange:w})}),e.jsx(W,{open:r,children:e.jsx("div",{className:"pb-3 border-b border-surface-border mb-3",children:e.jsx("pre",{className:"text-[9px] font-mono text-text-tertiary bg-surface-sunken rounded-lg p-3 max-h-[50vh] overflow-auto whitespace-pre-wrap",children:JSON.stringify(a.slice(0,50),null,2)})})}),a.length>0&&e.jsxs("p",{className:"text-[9px] text-text-tertiary mb-2",children:[a.length," events"]}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:a.length===0?e.jsx("p",{className:"text-xs text-text-tertiary py-6 text-center",children:t?"Waiting for events...":"Subscribing..."}):dt(a).map((x,j)=>x.kind==="group"?e.jsx(xt,{group:x},`grp-${j}`):e.jsx(le,{event:x.event},x.event.id))})]})}function mt(t){const s=[],o=[],r=[];for(const n of t)L(n)?r.push(n):n.is_scout||R([n]).total>0?s.push(n):o.push(n);return s.sort((n,a)=>n.is_scout&&!a.is_scout?-1:!n.is_scout&&a.is_scout?1:R([a]).total-R([n]).total),o.sort((n,a)=>F(n.engine_id).localeCompare(F(a.engine_id))),r.sort((n,a)=>F(n.engine_id).localeCompare(F(a.engine_id))),{active:s,idle:o,paused:r}}function D({engine:t,isFirst:s,onThrottle:o}){const r=F(t.engine_id),n=Ye(t.engine_id),a=R([t]),u=t.stream_depth??0,l=L(t);return e.jsxs("div",{className:"group/row flex items-center gap-3 py-2 hover:bg-surface-hover/50 transition-colors rounded px-1",children:[l?e.jsx(H,{className:"w-3.5 h-3.5 text-status-warning shrink-0",strokeWidth:1.5}):e.jsx(Oe,{className:`w-3.5 h-3.5 shrink-0 ${a.total>0||t.is_scout?"text-status-success":"text-text-tertiary/30"}`,strokeWidth:1.5}),e.jsx("span",{className:`${s?"text-base font-medium":"text-xs"} text-text-primary truncate max-w-[180px]`,title:t.engine_id,children:r}),n&&e.jsx("span",{className:"text-[10px] text-text-tertiary/50",children:n}),t.is_scout&&e.jsx("span",{className:"text-[9px] text-amber-500 uppercase tracking-widest",children:"scout"}),e.jsx("span",{className:"flex-1"}),l&&e.jsx("span",{className:"text-[10px] text-status-warning",children:t.throttle===-1?"Paused":U(t.throttle)}),a.total>0&&e.jsx("span",{className:"text-[10px] font-mono tabular-nums text-text-tertiary w-16 text-right",children:a.total.toLocaleString()}),u>0&&e.jsxs("span",{className:`text-[10px] font-mono tabular-nums w-14 text-right ${u>100?"text-status-warning":"text-text-tertiary/50"}`,children:[u.toLocaleString()," q"]}),e.jsx("span",{className:"text-[10px] font-mono text-text-tertiary/40 w-12 text-right",children:Ze(t.inited)}),e.jsx("span",{className:"opacity-0 group-hover/row:opacity-100 transition-opacity",children:e.jsx("button",{onClick:g=>{g.stopPropagation(),o(t)},className:"text-text-tertiary hover:text-accent transition-colors",title:l?"Resume / adjust throttle":"Pause / throttle",children:e.jsx(J,{className:"w-3.5 h-3.5",strokeWidth:1.5})})})]})}function ee({label:t,engines:s,onThrottle:o}){const[r,n]=i.useState(!1);return s.length===0?null:e.jsxs("div",{className:"mt-1",children:[e.jsxs("button",{onClick:()=>n(!r),className:"flex items-center gap-1.5 text-[10px] text-text-tertiary hover:text-text-secondary transition-colors py-1",children:[e.jsx(ne,{className:`w-3 h-3 transition-transform duration-200 ${r?"rotate-90":""}`,strokeWidth:2}),s.length," ",t]}),e.jsx(W,{open:r,children:e.jsx("div",{className:"ml-1",children:s.map(a=>e.jsx(D,{engine:a,onThrottle:o},a.engine_id))})})]})}function gt({engines:t,onThrottle:s,isLoading:o}){const{active:r,idle:n,paused:a}=i.useMemo(()=>mt(t),[t]);return o?e.jsx("p",{className:"text-xs text-text-tertiary",children:"Discovering engines..."}):t.length===0?e.jsx("p",{className:"text-xs text-text-tertiary",children:"No engines found."}):r.length===0&&n.length===0?e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 py-2",children:[e.jsx(H,{className:"w-4 h-4 text-status-error shrink-0",strokeWidth:1.5}),e.jsxs("span",{className:"text-base text-status-error font-medium",children:["All ",t.length," engines paused"]})]}),e.jsx("p",{className:"text-[10px] text-text-tertiary ml-7",children:"Messages are accumulating. Resume at least one engine to restore processing."}),e.jsx("div",{className:"ml-1 mt-2",children:a.map(u=>e.jsx(D,{engine:u,onThrottle:s},u.engine_id))})]}):e.jsxs("div",{children:[r.map((u,l)=>e.jsx(D,{engine:u,isFirst:l===0,onThrottle:s},u.engine_id)),e.jsx(ee,{label:"idle",engines:n,onThrottle:s}),e.jsx(ee,{label:"paused",engines:a,onThrottle:s})]})}function ft({collapsed:t,toggleSection:s,activeDuration:o,streamStats:r,isLoading:n,queueMap:a,expandedQueues:u,toggleQueue:l,allQueuesExpanded:g,toggleAllQueues:c,handleRowClick:w,handleResumeThrottle:f,handleQueueThrottle:y,handleResumeQueue:k,engines:C,bridgeActive:x}){return e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-6",children:[e.jsxs("div",{className:"flex flex-col gap-12 mt-10",children:[e.jsx(z,{title:`Message Volume (${o})`,sectionKey:"volume",isCollapsed:!!t.volume,onToggle:s,contentClassName:"mt-4 ml-7",children:e.jsx(lt,{byStream:(r==null?void 0:r.byStream)??[],onNodeFilter:()=>{},onQueueFilter:()=>{}})}),e.jsx(z,{title:`Engine Routers (${C.length})`,sectionKey:"engines",isCollapsed:!!t.engines,onToggle:s,contentClassName:"mt-4 ml-7",children:e.jsx(gt,{engines:C,onThrottle:w,isLoading:n})}),e.jsx(z,{title:"Worker Routers",sectionKey:"queues",isCollapsed:!!t.queues,onToggle:s,contentClassName:"mt-4 ml-7 flex flex-col gap-0",children:n?e.jsx("p",{className:"text-xs text-text-tertiary",children:"Discovering mesh nodes..."}):a.size===0?e.jsx("p",{className:"text-xs text-text-tertiary",children:'No worker routers found. Click "Roll Call" to discover.'}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex justify-end mb-2",children:e.jsx("button",{onClick:c,className:"text-[10px] text-accent hover:underline",children:g?"Collapse all":"Expand all"})}),[...a.entries()].sort(([j],[d])=>j.localeCompare(d)).map(([j,d])=>e.jsx(it,{queue:j,workers:d,expanded:u.has(j),onToggle:l,onWorkerClick:w,onResumeThrottle:f,onQueueThrottle:y,onResumeQueue:k,byStream:(r==null?void 0:r.byStream)??[],activeDuration:o},j))]})})]}),e.jsx(ht,{bridgeActive:x})]})}function Mt(){var G;const{data:t}=se(),s=(t==null?void 0:t.apps)??[],{filters:o,setFilter:r}=$e({filters:{app_id:"",duration:"1h"}}),n=((G=s[0])==null?void 0:G.appId)??"durable",a=o.app_id||n,u=o.duration||"1h",l=Se(),g=6e4,{data:c,isLoading:w,error:f,refetch:y,isFetching:k}=_e(a,g),{data:C}=Te(a,u,void 0,g),x=i.useMemo(()=>[...(c==null?void 0:c.profiles)??[]].sort((v,E)=>{const B=v.worker_topic||v.stream||"",Q=E.worker_topic||E.stream||"";return!v.worker_topic&&E.worker_topic?-1:v.worker_topic&&!E.worker_topic?1:B.localeCompare(Q)}),[c==null?void 0:c.profiles]),j=i.useMemo(()=>x.filter(h=>!A(h)),[x]),d=i.useMemo(()=>x.filter(A),[x]),m=i.useMemo(()=>Xe(x),[x]),_=x.filter(L).length,p=i.useMemo(()=>{const h=new Set(s.map(v=>v.appId));return a&&h.add(a),[...h].sort().map(v=>({value:v,label:v}))},[s,a]),[$]=Ue(),b=$.get("queue"),[S,M]=i.useState(()=>b?new Set([b]):new Set),N=i.useCallback(h=>{M(v=>{const E=v.has(h),B=E?new Set:new Set([h]),Q=new URLSearchParams(window.location.search);E?Q.delete("queue"):Q.set("queue",h);const K=Q.toString();return window.history.pushState(null,"",`${window.location.pathname}${K?`?${K}`:""}`),B})},[]),T=m.size>0&&[...m.keys()].every(h=>S.has(h)),I=i.useCallback(()=>{M(T?new Set:new Set(m.keys()))},[T,m]),P="lt:controlplane:collapsed",[ie,ce]=i.useState(()=>{try{const h=JSON.parse(localStorage.getItem(P)||"{}");return b&&(h.queues=!1),h}catch{return{}}}),ue=i.useCallback(h=>{ce(v=>{const E={...v,[h]:!v[h]};return localStorage.setItem(P,JSON.stringify(E)),E})},[]),{throttleModalOpen:de,throttleTargets:V,selectedThrottleTargets:xe,throttleMutation:pe,handleBulkThrottle:he,handleRowClick:me,handleResumeThrottle:ge,handleResumeQueue:fe,handleQueueThrottle:be,closeThrottleModal:je}=st({activeAppId:a,allProfiles:x,profiles:x}),ye=i.useMemo(()=>{const h=[{label:"Engines",value:j.length,dotClass:"bg-blue-500"},{label:"Workers",value:d.length,dotClass:"bg-text-secondary"},{label:"Topics",value:m.size}];return _>0&&h.push({label:"Throttled",value:_,dotClass:"bg-status-warning"}),h},[j.length,d.length,m.size,_]),[q,we]=i.useState(!1),ke=i.useCallback(()=>{l.mutate({appId:a},{onSuccess:()=>we(!0)})},[a,l]);return i.useEffect(()=>{!q&&a&&ke()},[a]),e.jsxs("div",{children:[e.jsx(Ne,{title:"Routers",docsHash:"#docs:dashboard.md:task-queues",stats:ye,actions:e.jsx(ot,{})}),e.jsxs(ve,{actions:e.jsx("div",{className:"flex items-center gap-1",children:Ve.map(h=>e.jsx("button",{onClick:()=>r("duration",h.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${u===h.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:h.label},h.value))}),children:[e.jsx(Ce,{label:"Application",value:o.app_id,onChange:h=>r("app_id",h),options:p}),e.jsxs("button",{onClick:()=>y(),disabled:k,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-tertiary hover:text-text-primary transition-colors disabled:opacity-50",children:[e.jsx(Ie,{className:`w-3.5 h-3.5 ${k?"animate-spin":""}`}),"Roll Call"]})]}),f&&e.jsx("div",{className:"mb-6 px-4 py-3 rounded bg-status-error/10 border border-status-error/20",children:e.jsx("p",{className:"text-xs text-status-error font-medium",children:f.message==="Session expired"?"Session expired — please log in again.":`Failed to load mesh data: ${f.message}`})}),e.jsx(ft,{collapsed:ie,toggleSection:ue,activeDuration:u,streamStats:C,isLoading:w,queueMap:m,expandedQueues:S,toggleQueue:N,allQueuesExpanded:T,toggleAllQueues:I,handleRowClick:me,handleResumeThrottle:ge,handleQueueThrottle:be,handleResumeQueue:fe,engines:j,bridgeActive:q}),e.jsx(at,{open:de,onClose:je,targets:V.length>0?V:xe,onApply:he,isPending:pe.isPending})]})}export{Mt as ControlPlanePage};
2
- //# sourceMappingURL=index-BeLphL59.js.map
@@ -1,2 +0,0 @@
1
- import{u as D,j as t,a as y}from"./vendor-query-B2UbickB.js";import{a as M}from"./vendor-react-CXumBFUA.js";import{b as R,S as d,J as A,d as L}from"./index-_BRA9uFL.js";import{a as O}from"./controlplane-DGvwkuYx.js";import{u as z}from"./useFilterParams-x-Dg0Vgz.js";import{D as E}from"./DataTable-D9yuBv0w.js";import{S as I}from"./StickyPagination-BWhFSr2d.js";import{F as J,b,a as v}from"./FilterBar-Ck4K4rzu.js";import{T as j}from"./TimestampCell-DL6zMNEQ.js";import{P as q}from"./PageHeader-BuJpMxyu.js";import{L as U}from"./ListToolbar-jrVba7QN.js";import{x as W,X as _}from"./vendor-icons-Doy0g69_.js";import"./EmptyState-BcsfPq9T.js";function B(e){const a=new URLSearchParams;return a.set("namespace",e.namespace),a.set("source",e.source),e.limit&&a.set("limit",String(e.limit)),e.offset&&a.set("offset",String(e.offset)),e.sort_by&&a.set("sort_by",e.sort_by),e.order&&a.set("order",e.order),e.status&&a.set("status",e.status),e.stream_name&&a.set("stream_name",e.stream_name),e.msg_type&&a.set("msg_type",e.msg_type),e.topic&&a.set("topic",e.topic),e.workflow_name&&a.set("workflow_name",e.workflow_name),e.jid&&a.set("jid",e.jid),e.aid&&a.set("aid",e.aid),R(`/controlplane/stream-messages?${a}`)}function H(e){return D({queryKey:["controlplane","stream-messages",e],queryFn:()=>B(e),enabled:!!e.namespace,staleTime:15e3})}const f={pending:"bg-text-tertiary",claimed:"bg-status-warning",processed:"bg-status-success",dead_lettered:"bg-status-error"},N={pending:"Pending",claimed:"Claimed",processed:"Processed",dead_lettered:"Dead Lettered"},k="inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary",K=[{value:"pending",label:"Pending"},{value:"claimed",label:"Claimed"},{value:"processed",label:"Processed"},{value:"dead_lettered",label:"Dead Lettered"}],V=[{value:"engine",label:"Engine"},{value:"worker",label:"Worker"}];function m({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("div",{className:"mt-0.5",children:t.jsx(L,{date:a,format:"datetime"})})]}):null}function x({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("p",{className:"text-xs text-text-primary font-mono break-all",children:a})]}):null}function l({label:e,value:a,onFilter:r}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsxs("button",{onClick:()=>r==null?void 0:r(a),className:"flex items-center gap-1 group text-left w-full",title:`Filter by ${e.toLowerCase()}: ${a}`,children:[t.jsx("p",{className:"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors",children:a}),t.jsx(W,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity"})]})]}):null}function G({message:e,filters:a}){return e?t.jsxs("div",{className:"space-y-5 text-[11px]",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${f[e.status]}`}),t.jsx(l,{label:"",value:N[e.status],onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStatus)==null?void 0:r.call(a,e.status)}}),t.jsx("span",{className:k,children:e.source})]}),t.jsx(l,{label:"",value:e.stream_name,onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStreamName)==null?void 0:r.call(a,e.stream_name)}}),t.jsxs("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:["ID: ",e.id]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Timestamps"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(m,{label:"Created",value:e.created_at}),t.jsx(m,{label:"Reserved",value:e.reserved_at}),t.jsx(m,{label:"Processed",value:e.expired_at}),t.jsx(m,{label:"Dead-lettered",value:e.dead_lettered_at})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Metadata"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(x,{label:"Priority",value:String(e.priority)}),t.jsx(x,{label:"Retries",value:`${e.retry_attempt} / ${e.max_retry_attempts}`}),t.jsx(x,{label:"Reserved by",value:e.reserved_by})]})]}),e.jid&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Job"}),t.jsx("div",{className:"grid grid-cols-1 gap-2",children:t.jsx(l,{label:"Job ID",value:e.jid,onFilter:a==null?void 0:a.onFilterJid})})]}),e.source==="worker"&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Worker Details"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(l,{label:"Workflow",value:e.workflow_name,onFilter:a==null?void 0:a.onFilterWorkflow}),t.jsx(l,{label:"Activity",value:e.aid,onFilter:a==null?void 0:a.onFilterAid}),t.jsx(x,{label:"Dimension",value:e.dad}),t.jsx(l,{label:"Type",value:e.msg_type,onFilter:a==null?void 0:a.onFilterMsgType}),t.jsx(l,{label:"Topic",value:e.topic,onFilter:a==null?void 0:a.onFilterTopic})]})]}),t.jsx("div",{className:"space-y-2",children:t.jsx(A,{data:e.message,label:"Payload",defaultCollapsed:!1})})]}):null}function Q(e,a){if(e.length<=a)return e;const r=Math.floor((a-1)/2);return`${e.slice(0,r)}…${e.slice(-r)}`}function de(){const{filters:e,setFilter:a,pagination:r,sort:u,setSort:w}=z({filters:{namespace:"durable",source:"worker",status:"",stream_name:"",msg_type:"",topic:"",workflow_name:"",jid:"",aid:""}}),[n,h]=y.useState(null),{data:c}=O(),S=y.useMemo(()=>((c==null?void 0:c.apps)??[]).map(s=>({value:s.appId,label:s.appId})),[c]),{data:o,isLoading:F,refetch:P,isFetching:T}=H({namespace:e.namespace||"durable",source:e.source||"worker",limit:r.pageSize,offset:r.offset,sort_by:u.sort_by||"created_at",order:u.order||"desc",status:e.status||void 0,stream_name:e.stream_name||void 0,msg_type:e.msg_type||void 0,topic:e.topic||void 0,workflow_name:e.workflow_name||void 0,jid:e.jid||void 0,aid:e.aid||void 0}),p=(o==null?void 0:o.messages)??[],g=(o==null?void 0:o.total)??0,i=y.useMemo(()=>n?p.find(s=>s.id===n.id&&s.source===n.source)??n:null,[p,n]),C=!!i,$=[{key:"status",label:"Status",render:s=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${f[s.status]}`}),t.jsx("span",{className:"text-xs",children:N[s.status]})]}),className:"w-28"},{key:"source",label:"Source",render:s=>t.jsx("span",{className:k,children:s.source}),className:"w-20"},{key:"stream_name",label:"Stream",sortable:!0,render:s=>t.jsx("span",{className:"font-mono text-xs text-text-secondary truncate block max-w-[240px]",title:s.stream_name,children:s.stream_name})},{key:"msg_type",label:"Type",render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.msg_type||"—"}),className:"w-24"},{key:"created_at",label:"Created",sortable:!0,render:s=>t.jsx(j,{date:s.created_at}),className:"w-44"},{key:"reserved_at",label:"Reserved",render:s=>s.reserved_at?t.jsx(j,{date:s.reserved_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"expired_at",label:"Processed",render:s=>s.expired_at?t.jsx(j,{date:s.expired_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"priority",label:"Pri",sortable:!0,render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.priority}),className:"w-12 text-right"},{key:"retry_attempt",label:"Retries",render:s=>t.jsxs("span",{className:"text-xs text-text-secondary",children:[s.retry_attempt,"/",s.max_retry_attempts]}),className:"w-16"}];return t.jsxs("div",{children:[t.jsx(q,{title:"Messages",docsHash:"#docs:dashboard.md:messages"}),t.jsxs(J,{actions:t.jsx(U,{onRefresh:()=>P(),isFetching:T,apiPath:`/controlplane/stream-messages?namespace=${e.namespace||"durable"}&source=${e.source||"worker"}&limit=${r.pageSize}&offset=${r.offset}${e.status?`&status=${e.status}`:""}${e.stream_name?`&stream_name=${e.stream_name}`:""}`}),children:[t.jsx(b,{label:"Namespace",value:e.namespace,onChange:s=>a("namespace",s),options:S,required:!0}),t.jsx(b,{label:"Source",value:e.source,onChange:s=>a("source",s),options:V,required:!0}),t.jsx(b,{label:"Status",value:e.status,onChange:s=>a("status",s),options:K}),t.jsx(v,{label:"Stream",value:e.stream_name,onChange:s=>a("stream_name",s),placeholder:"Filter by stream name…"}),t.jsx(v,{label:"Job ID",value:e.jid,onChange:s=>a("jid",s),placeholder:"Filter by jid…"}),[{key:"topic",label:"Topic",value:e.topic},{key:"workflow_name",label:"Workflow",value:e.workflow_name},{key:"aid",label:"Activity",value:e.aid},{key:"msg_type",label:"Type",value:e.msg_type}].filter(s=>s.value).map(s=>t.jsxs("button",{onClick:()=>a(s.key,""),className:"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors",title:`Clear ${s.label} filter: ${s.value}`,children:[s.label,": ",Q(s.value,12),t.jsx(_,{className:"w-2.5 h-2.5"})]},s.key))]}),t.jsx(E,{columns:$,data:p,keyFn:s=>`${s.source}:${s.id}`,isLoading:F,emptyMessage:"No stream messages found",onRowClick:s=>h(s),activeRowKey:i?`${i.source}:${i.id}`:null,sort:u,onSort:w}),t.jsx(I,{page:r.page,totalPages:r.totalPages(g),onPageChange:r.setPage,total:g,pageSize:r.pageSize,onPageSizeChange:r.setPageSize}),C&&M.createPortal(t.jsxs("div",{className:"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg",style:{top:"3.5rem"},children:[t.jsxs("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50",children:[t.jsx("span",{className:"text-xs font-medium text-text-primary",children:"Message Detail"}),t.jsx("button",{onClick:()=>h(null),className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:t.jsx(_,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"px-4 py-4",children:t.jsx(G,{message:i,filters:{onFilterStatus:s=>a("status",s),onFilterStreamName:s=>a("stream_name",s),onFilterMsgType:s=>a("msg_type",s),onFilterTopic:s=>a("topic",s),onFilterWorkflow:s=>a("workflow_name",s),onFilterJid:s=>a("jid",s),onFilterAid:s=>a("aid",s)}})})]}),document.body)]})}export{de as StreamMessagesPage};
2
- //# sourceMappingURL=index-DDlrQeTj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DDlrQeTj.js","sources":["../../src/api/stream-messages.ts","../../src/pages/admin/streams/constants.ts","../../src/pages/admin/streams/StreamMessageDetail.tsx","../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type StreamMessageStatus = 'pending' | 'claimed' | 'processed' | 'dead_lettered';\nexport type StreamMessageSource = 'engine' | 'worker';\n\nexport interface StreamMessage {\n id: string;\n source: StreamMessageSource;\n stream_name: string;\n message: string;\n status: StreamMessageStatus;\n created_at: string;\n reserved_at: string | null;\n reserved_by: string | null;\n expired_at: string | null;\n dead_lettered_at: string | null;\n priority: number;\n visible_at: string | null;\n retry_attempt: number;\n max_retry_attempts: number;\n workflow_name: string | null;\n jid: string | null;\n aid: string | null;\n dad: string | null;\n msg_type: string | null;\n topic: string | null;\n}\n\nexport interface StreamMessagesResponse {\n messages: StreamMessage[];\n total: number;\n}\n\nexport interface StreamMessagesParams {\n namespace: string;\n source: StreamMessageSource;\n limit?: number;\n offset?: number;\n sort_by?: string;\n order?: 'asc' | 'desc';\n status?: StreamMessageStatus | '';\n stream_name?: string;\n msg_type?: string;\n topic?: string;\n workflow_name?: string;\n jid?: string;\n aid?: string;\n}\n\n// ── Fetch ───────────────────────────────────────────────────────────────────\n\nfunction fetchStreamMessages(params: StreamMessagesParams) {\n const qs = new URLSearchParams();\n qs.set('namespace', params.namespace);\n qs.set('source', params.source);\n if (params.limit) qs.set('limit', String(params.limit));\n if (params.offset) qs.set('offset', String(params.offset));\n if (params.sort_by) qs.set('sort_by', params.sort_by);\n if (params.order) qs.set('order', params.order);\n if (params.status) qs.set('status', params.status);\n if (params.stream_name) qs.set('stream_name', params.stream_name);\n if (params.msg_type) qs.set('msg_type', params.msg_type);\n if (params.topic) qs.set('topic', params.topic);\n if (params.workflow_name) qs.set('workflow_name', params.workflow_name);\n if (params.jid) qs.set('jid', params.jid);\n if (params.aid) qs.set('aid', params.aid);\n return apiFetch<StreamMessagesResponse>(`/controlplane/stream-messages?${qs}`);\n}\n\n// ── Hook ────────────────────────────────────────────────────────────────────\n\nexport function useStreamMessages(params: StreamMessagesParams) {\n return useQuery({\n queryKey: ['controlplane', 'stream-messages', params],\n queryFn: () => fetchStreamMessages(params),\n enabled: !!params.namespace,\n staleTime: 15_000,\n });\n}\n","import type { StreamMessageStatus } from '../../../api/stream-messages';\n\nexport const STATUS_DOT: Record<StreamMessageStatus, string> = {\n pending: 'bg-text-tertiary',\n claimed: 'bg-status-warning',\n processed: 'bg-status-success',\n dead_lettered: 'bg-status-error',\n};\n\nexport const STATUS_LABEL: Record<StreamMessageStatus, string> = {\n pending: 'Pending',\n claimed: 'Claimed',\n processed: 'Processed',\n dead_lettered: 'Dead Lettered',\n};\n\nexport const SOURCE_BADGE =\n 'inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary';\n\nexport const STATUS_OPTIONS = [\n { value: 'pending', label: 'Pending' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'processed', label: 'Processed' },\n { value: 'dead_lettered', label: 'Dead Lettered' },\n];\n\nexport const SOURCE_OPTIONS = [\n { value: 'engine', label: 'Engine' },\n { value: 'worker', label: 'Worker' },\n];\n","import { Filter } from 'lucide-react';\nimport type { StreamMessage } from '../../../api/stream-messages';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { STATUS_DOT, STATUS_LABEL, SOURCE_BADGE } from './constants';\n\nfunction Timestamp({ label, value }: { label: string; value: string | null }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <div className=\"mt-0.5\">\n <DateValue date={value} format=\"datetime\" />\n </div>\n </div>\n );\n}\n\nfunction Field({ label, value }: { label: string; value: string | null | undefined }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <p className=\"text-xs text-text-primary font-mono break-all\">{value}</p>\n </div>\n );\n}\n\n/** A field value that can be clicked to filter the master list. */\nfunction FilterableField({ label, value, onFilter }: {\n label: string;\n value: string | null | undefined;\n onFilter?: (value: string) => void;\n}) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <button\n onClick={() => onFilter?.(value)}\n className=\"flex items-center gap-1 group text-left w-full\"\n title={`Filter by ${label.toLowerCase()}: ${value}`}\n >\n <p className=\"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors\">{value}</p>\n <Filter className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n </div>\n );\n}\n\nexport interface StreamMessageDetailFilters {\n onFilterStatus?: (value: string) => void;\n onFilterStreamName?: (value: string) => void;\n onFilterMsgType?: (value: string) => void;\n onFilterTopic?: (value: string) => void;\n onFilterWorkflow?: (value: string) => void;\n onFilterJid?: (value: string) => void;\n onFilterAid?: (value: string) => void;\n}\n\n/**\n * Standard stream message detail view.\n *\n * This component is the canonical representation of a stream message.\n * Reuse it wherever stream messages need to be displayed — the layout,\n * timestamp formatting (via DateValue with ms/UTC/local tooltip), and\n * payload viewer are the standard.\n */\nexport function StreamMessageDetail({ message, filters }: {\n message: StreamMessage | null;\n filters?: StreamMessageDetailFilters;\n}) {\n if (!message) return null;\n\n return (\n <div className=\"space-y-5 text-[11px]\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[message.status]}`} />\n <FilterableField\n label=\"\"\n value={STATUS_LABEL[message.status]}\n onFilter={() => filters?.onFilterStatus?.(message.status)}\n />\n <span className={SOURCE_BADGE}>{message.source}</span>\n </div>\n <FilterableField\n label=\"\"\n value={message.stream_name}\n onFilter={() => filters?.onFilterStreamName?.(message.stream_name)}\n />\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">ID: {message.id}</p>\n </div>\n\n {/* Timestamps */}\n <div className=\"space-y-2\">\n <SectionLabel>Timestamps</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <Timestamp label=\"Created\" value={message.created_at} />\n <Timestamp label=\"Reserved\" value={message.reserved_at} />\n <Timestamp label=\"Processed\" value={message.expired_at} />\n <Timestamp label=\"Dead-lettered\" value={message.dead_lettered_at} />\n </div>\n </div>\n\n {/* Metadata */}\n <div className=\"space-y-2\">\n <SectionLabel>Metadata</SectionLabel>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Priority\" value={String(message.priority)} />\n <Field label=\"Retries\" value={`${message.retry_attempt} / ${message.max_retry_attempts}`} />\n <Field label=\"Reserved by\" value={message.reserved_by} />\n </div>\n </div>\n\n {/* Job ID — available on both engine and worker streams */}\n {message.jid && (\n <div className=\"space-y-2\">\n <SectionLabel>Job</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Job ID\" value={message.jid} onFilter={filters?.onFilterJid} />\n </div>\n </div>\n )}\n\n {/* Worker-specific fields — clickable to filter */}\n {message.source === 'worker' && (\n <div className=\"space-y-2\">\n <SectionLabel>Worker Details</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Workflow\" value={message.workflow_name} onFilter={filters?.onFilterWorkflow} />\n <FilterableField label=\"Activity\" value={message.aid} onFilter={filters?.onFilterAid} />\n <Field label=\"Dimension\" value={message.dad} />\n <FilterableField label=\"Type\" value={message.msg_type} onFilter={filters?.onFilterMsgType} />\n <FilterableField label=\"Topic\" value={message.topic} onFilter={filters?.onFilterTopic} />\n </div>\n </div>\n )}\n\n {/* Message payload — fully expanded by default */}\n <div className=\"space-y-2\">\n <JsonViewer data={message.message} label=\"Payload\" defaultCollapsed={false} />\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useControlPlaneApps } from '../../../api/controlplane';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: 'durable', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const { data: appsData } = useControlPlaneApps();\n const namespaceOptions = useMemo(\n () => (appsData?.apps ?? []).map((a) => ({ value: a.appId, label: a.appId })),\n [appsData],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || 'durable',\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n const columns: Column<StreamMessage>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => (\n <div className=\"flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[row.status]}`} />\n <span className=\"text-xs\">{STATUS_LABEL[row.status]}</span>\n </div>\n ),\n className: 'w-28',\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-20',\n },\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <span className=\"font-mono text-xs text-text-secondary truncate block max-w-[240px]\" title={row.stream_name}>\n {row.stream_name}\n </span>\n ),\n },\n {\n key: 'msg_type',\n label: 'Type',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">{row.msg_type || '—'}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at ? <TimestampCell date={row.reserved_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at ? <TimestampCell date={row.expired_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-12 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-16',\n },\n ];\n\n return (\n <div>\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/controlplane/stream-messages?namespace=${filters.namespace || 'durable'}&source=${filters.source || 'worker'}&limit=${pagination.pageSize}&offset=${pagination.offset}${filters.status ? `&status=${filters.status}` : ''}${filters.stream_name ? `&stream_name=${filters.stream_name}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n\n {/* Detail panel — portaled to body so fixed positioning works */}\n {panelOpen && createPortal(\n <div className=\"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg\" style={{ top: '3.5rem' }}>\n <div className=\"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50\">\n <span className=\"text-xs font-medium text-text-primary\">Message Detail</span>\n <button\n onClick={() => setSelected(null)}\n className=\"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"px-4 py-4\">\n <StreamMessageDetail\n message={activeMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n"],"names":["fetchStreamMessages","params","qs","apiFetch","useStreamMessages","useQuery","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","STATUS_OPTIONS","SOURCE_OPTIONS","Timestamp","label","value","jsx","DateValue","Field","FilterableField","onFilter","jsxs","Filter","StreamMessageDetail","message","filters","_a","SectionLabel","JsonViewer","truncateMiddle","str","max","half","StreamMessagesPage","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","appsData","useControlPlaneApps","namespaceOptions","useMemo","a","data","isLoading","refetch","isFetching","messages","total","activeMessage","m","panelOpen","columns","row","TimestampCell","PageHeader","FilterBar","ListToolbar","FilterSelect","v","FilterInput","f","X","DataTable","StickyPagination","createPortal"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{c as k,u as R,b as O,j as e,a as d}from"./vendor-query-B2UbickB.js";import{P as F}from"./PageHeader-BuJpMxyu.js";import{b}from"./index-_BRA9uFL.js";import{M}from"./Modal-CSrxpXeM.js";import{R as g,C}from"./constants-BHkpVaqx.js";import{as as E,am as T,ag as W,ad as j,t as I,aa as D}from"./vendor-icons-Doy0g69_.js";import"./vendor-react-CXumBFUA.js";function $(){return R({queryKey:["maintenance"],queryFn:()=>b("/config/maintenance")})}function _(){const t=O();return k({mutationFn:r=>b("/config/maintenance",{method:"PUT",body:JSON.stringify(r)}),onSuccess:()=>{t.invalidateQueries({queryKey:["maintenance"]})}})}function q(){return k({mutationFn:t=>b("/dba/prune",{method:"POST",body:JSON.stringify(t)})})}function v({checked:t,onToggle:r,label:a,hint:s,safety:i,value:l,onChange:c}){const n=i==="safe"?W:i==="moderate"?E:T,o=i==="safe"?"text-status-success":i==="moderate"?"text-status-warning":"text-status-error",m=i==="safe"?"Safe":i==="moderate"?"Careful":"Permanent";return e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("label",{className:"flex items-center gap-2.5 cursor-pointer w-80 shrink-0",children:[e.jsx("input",{type:"checkbox",checked:t,onChange:x=>r(x.target.checked),className:"w-4 h-4 rounded border-border accent-accent shrink-0"}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-text-primary",children:a}),e.jsxs("span",{className:`flex items-center gap-0.5 text-[9px] ${o}`,children:[e.jsx(n,{className:"w-3 h-3",strokeWidth:1.5}),m]})]}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:s})]})]}),e.jsx("select",{value:l,onChange:x=>c(x.target.value),disabled:!t,className:`select text-xs w-36 transition-opacity ${t?"":"opacity-40 cursor-not-allowed"}`,children:g.map(x=>e.jsx("option",{value:x.value,children:x.label},x.value))})]})}function L(){return e.jsxs("div",{className:"flex items-start gap-2 mt-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsx(j,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Stripping preserves workflow results and timeline data needed for the execution detail view. Transient jobs are internal bookkeeping that accumulates over time."})]})}const f={pruneJobs:!0,expire:"30 days",engineStreams:!0,engineStreamsExpire:"1 day",workerStreams:!0,workerStreamsExpire:"90 days",stripAttributes:!1,pruneTransient:!1};function N(t){return t.pruneJobs||t.engineStreams||t.workerStreams||t.stripAttributes||t.pruneTransient}function P({fields:t,onChange:r}){const a=(s,i)=>r({...t,[s]:i});return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Stream Messages"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mb-4",children:"Processed routing messages. Already consumed — safe to remove after a short retention window."}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(v,{checked:t.engineStreams,onToggle:s=>a("engineStreams",s),label:"Engine messages",hint:"Internal orchestration signals",safety:"safe",value:t.engineStreamsExpire,onChange:s=>a("engineStreamsExpire",s)}),e.jsx(v,{checked:t.workerStreams,onToggle:s=>a("workerStreams",s),label:"Worker messages",hint:"Activity dispatch and response payloads",safety:"safe",value:t.workerStreamsExpire,onChange:s=>a("workerStreamsExpire",s)})]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Completed Workflows"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mb-4",children:"Choose how to handle completed workflow records. Reducing strips step-level detail but keeps the workflow and its results. Deleting removes the record entirely."}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("label",{className:"flex items-start gap-2.5 cursor-pointer",children:[e.jsx("input",{type:"radio",name:"workflow-cleanup",checked:!t.stripAttributes&&!t.pruneJobs,onChange:()=>r({...t,stripAttributes:!1,pruneJobs:!1}),className:"w-4 h-4 mt-0.5 accent-accent shrink-0"}),e.jsxs("div",{children:[e.jsx("span",{className:"text-xs text-text-primary",children:"Keep as-is"}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:"No changes to completed workflow records."})]})]}),e.jsxs("div",{className:"flex items-start gap-2.5",children:[e.jsxs("label",{className:"flex items-start gap-2.5 cursor-pointer w-80 shrink-0",children:[e.jsx("input",{type:"radio",name:"workflow-cleanup",checked:t.stripAttributes&&!t.pruneJobs,onChange:()=>r({...t,stripAttributes:!0,pruneJobs:!1}),className:"w-4 h-4 mt-0.5 accent-accent shrink-0"}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-text-primary",children:"Reduce completed workflows"}),e.jsxs("span",{className:"flex items-center gap-0.5 text-[9px] text-status-warning",children:[e.jsx(E,{className:"w-3 h-3",strokeWidth:1.5}),"Careful"]})]}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:"Strips step-level execution detail (activity inputs/outputs, internal state). Workflow results and timeline are preserved."})]})]}),e.jsx("select",{value:t.expire,onChange:s=>a("expire",s.target.value),disabled:!t.stripAttributes||t.pruneJobs,className:`select text-xs w-36 transition-opacity mt-0.5 ${!t.stripAttributes||t.pruneJobs?"opacity-40 cursor-not-allowed":""}`,children:g.map(s=>e.jsx("option",{value:s.value,children:s.label},s.value))})]}),e.jsxs("div",{className:"flex items-start gap-2.5",children:[e.jsxs("label",{className:"flex items-start gap-2.5 cursor-pointer w-80 shrink-0",children:[e.jsx("input",{type:"radio",name:"workflow-cleanup",checked:t.pruneJobs,onChange:()=>r({...t,pruneJobs:!0,stripAttributes:!1}),className:"w-4 h-4 mt-0.5 accent-accent shrink-0"}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-text-primary",children:"Delete completed workflows"}),e.jsxs("span",{className:"flex items-center gap-0.5 text-[9px] text-status-error",children:[e.jsx(T,{className:"w-3 h-3",strokeWidth:1.5}),"Permanent"]})]}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:"Permanently removes workflow records. Results, timeline, and all execution data are deleted and cannot be recovered."})]})]}),e.jsx("select",{value:t.expire,onChange:s=>a("expire",s.target.value),disabled:!t.pruneJobs,className:`select text-xs w-36 transition-opacity mt-0.5 ${t.pruneJobs?"":"opacity-40 cursor-not-allowed"}`,children:g.map(s=>e.jsx("option",{value:s.value,children:s.label},s.value))})]})]}),e.jsx(L,{})]})]})}function p({label:t,value:r}){return e.jsxs("div",{children:[e.jsx("p",{className:"text-lg font-light text-text-primary",children:r.toLocaleString()}),e.jsx("p",{className:"text-[10px] text-text-tertiary",children:t})]})}function U(){const t=q(),[r,a]=d.useState(f),[s,i]=d.useState(null),[l,c]=d.useState(!1),n=()=>{i(null),t.mutate({expire:r.expire,jobs:r.pruneJobs,engineStreams:r.engineStreams,engineStreamsExpire:r.engineStreamsExpire,workerStreams:r.workerStreams,workerStreamsExpire:r.workerStreamsExpire,attributes:r.stripAttributes,pruneTransient:r.pruneTransient},{onSuccess:o=>{i(o),c(!1)}})};return e.jsxs("div",{className:"space-y-8",children:[e.jsx(P,{fields:r,onChange:a}),e.jsxs("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsx("p",{className:"text-[10px] text-text-tertiary",children:N(r)?"This action permanently deletes data and cannot be undone.":"Select at least one operation to enable pruning."}),e.jsx("button",{onClick:()=>c(!0),disabled:!N(r)||t.isPending,className:"bg-status-error text-white px-4 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity disabled:opacity-40 shrink-0",children:t.isPending?"Pruning...":"Prune Now"})]}),s&&e.jsxs("div",{className:"bg-surface-sunken rounded-md px-4 py-3",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Results"}),e.jsxs("div",{className:"flex flex-wrap gap-6",children:[s.jobs!=null&&s.jobs>0&&e.jsx(p,{label:"Jobs deleted",value:s.jobs}),s.engineStreams!=null&&s.engineStreams>0&&e.jsx(p,{label:"Engine streams",value:s.engineStreams}),s.workerStreams!=null&&s.workerStreams>0&&e.jsx(p,{label:"Worker streams",value:s.workerStreams}),s.streams!=null&&s.engineStreams==null&&s.streams>0&&e.jsx(p,{label:"Streams",value:s.streams}),s.attributes!=null&&s.attributes>0&&e.jsx(p,{label:"Artifacts stripped",value:s.attributes}),s.transient!=null&&s.transient>0&&e.jsx(p,{label:"Transient deleted",value:s.transient}),s.marked!=null&&s.marked>0&&e.jsx(p,{label:"Marked pruned",value:s.marked}),Object.values(s).every(o=>!o||o===0)&&e.jsx("p",{className:"text-xs text-text-tertiary",children:"Nothing to prune within the selected retention windows."})]})]}),t.error&&e.jsx("p",{className:"text-xs text-status-error",children:t.error.message}),e.jsx(M,{open:l,onClose:()=>c(!1),title:"Confirm Prune",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-text-secondary",children:"This will permanently delete data. This action cannot be undone."}),e.jsxs("ul",{className:"text-xs text-text-secondary space-y-1 list-disc list-inside",children:[r.pruneJobs&&e.jsxs("li",{children:["Delete jobs older than ",r.expire]}),r.engineStreams&&e.jsxs("li",{children:["Delete engine streams older than ",r.engineStreamsExpire]}),r.workerStreams&&e.jsxs("li",{children:["Delete worker streams older than ",r.workerStreamsExpire]}),r.stripAttributes&&e.jsx("li",{children:"Strip execution artifacts from completed jobs"}),r.pruneTransient&&e.jsx("li",{children:"Delete transient (entity-less) jobs"})]}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:()=>c(!1),className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:n,className:"bg-status-error text-white px-3 py-1.5 rounded-md text-xs hover:opacity-90 transition-opacity",disabled:t.isPending,children:t.isPending?"Pruning...":"Confirm Prune"})]})]})})]})}function w(t){var c;if(!((c=t==null?void 0:t.rules)!=null&&c.length))return f;const r=t.rules,a=r.find(n=>n.target==="streams"&&n.action==="delete"),s=r.find(n=>n.target==="jobs"&&n.action==="delete"&&n.hasEntity===!1),i=r.find(n=>n.target==="jobs"&&n.action==="prune"&&n.hasEntity===!0),l=r.find(n=>n.target==="jobs"&&n.action==="delete"&&n.pruned===!0);return{pruneJobs:!!l,expire:(l==null?void 0:l.olderThan)??"180 days",engineStreams:!!a,engineStreamsExpire:(a==null?void 0:a.olderThan)??"1 day",workerStreams:!!a,workerStreamsExpire:(a==null?void 0:a.olderThan)??"90 days",stripAttributes:!!i,pruneTransient:!!s}}function H(t){const r=[];return t.engineStreams&&r.push({target:"streams",action:"delete",olderThan:t.engineStreamsExpire}),t.workerStreams&&t.workerStreamsExpire!==t.engineStreamsExpire&&r.push({target:"streams",action:"delete",olderThan:t.workerStreamsExpire}),t.pruneTransient&&r.push({target:"jobs",action:"delete",olderThan:t.expire,hasEntity:!1}),t.stripAttributes&&r.push({target:"jobs",action:"prune",olderThan:t.expire,hasEntity:!0}),t.pruneJobs&&r.push({target:"jobs",action:"delete",olderThan:t.expire,pruned:!0}),r}function S(t){var r;return((r=C.find(a=>a.value===t))==null?void 0:r.label)??""}function K(){const{data:t,isLoading:r}=$(),a=_(),[s,i]=d.useState(""),[l,c]=d.useState(f),[n,o]=d.useState(""),m=d.useCallback(()=>{t!=null&&t.config&&(i(t.config.schedule),c(w(t.config)),o(JSON.stringify({schedule:t.config.schedule,fields:w(t.config)})))},[t]);d.useEffect(()=>{m()},[m]);const x=JSON.stringify({schedule:s,fields:l}),y=n!==""&&x!==n,h=(t==null?void 0:t.active)??!1,J=()=>{const u=H(l);a.mutate({schedule:s,rules:u},{onSuccess:()=>{o(JSON.stringify({schedule:s,fields:l}))}})},A=()=>{m()};return r?e.jsx("div",{className:"animate-pulse h-40 bg-surface-sunken rounded"}):e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_auto] gap-10",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Schedule"}),e.jsxs("div",{className:"flex items-end gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-tertiary mb-1",children:"Cron Expression"}),e.jsx("input",{type:"text",value:s,onChange:u=>i(u.target.value),placeholder:"0 2 * * *",className:"input text-xs font-mono w-48"})]}),e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-1.5 h-8",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full ${h?"bg-status-success":"bg-text-tertiary"}`}),e.jsx("span",{className:`text-xs ${h?"text-status-success":"text-text-tertiary"}`,children:h?"Active":"Inactive"})]})}),S(s)&&e.jsx("p",{className:"text-xs text-text-tertiary h-8 flex items-center",children:S(s)})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-3",children:C.map(u=>e.jsx("button",{type:"button",onClick:()=>i(u.value),className:`px-2.5 py-1 text-[10px] rounded-full transition-colors ${s===u.value?"bg-accent/10 text-accent font-medium":"bg-surface-sunken text-text-tertiary hover:text-text-secondary"}`,children:u.label},u.value))})]}),e.jsxs("div",{className:"lg:w-72",children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"How It Works"}),e.jsxs("div",{className:"flex items-start gap-2 px-3 py-2 rounded bg-surface-sunken",children:[e.jsx(j,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0 mt-0.5"}),e.jsx("p",{className:"text-[10px] text-text-tertiary leading-relaxed",children:"Rules execute sequentially on each cron cycle. Engine streams can be pruned aggressively since they only contain internal routing data. Worker streams should be retained longer to preserve execution playback and input enrichment."})]})]})]}),e.jsx(P,{fields:l,onChange:c}),e.jsxs("div",{className:"flex items-center justify-between pt-2 border-t border-surface-border",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[y&&e.jsx("button",{onClick:A,className:"text-[10px] text-text-tertiary hover:text-text-primary transition-colors",children:"Revert changes"}),a.error&&e.jsx("p",{className:"text-xs text-status-error",children:a.error.message})]}),e.jsx("button",{onClick:J,disabled:!y||!s.trim()||a.isPending,className:"btn-primary text-xs disabled:opacity-40 shrink-0",children:a.isPending?"Saving...":"Save Schedule"})]})]})}function Q({mode:t,onChange:r}){const a=(s,i,l)=>e.jsxs("button",{onClick:()=>r(s),className:`flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md transition-colors ${t===s?"bg-accent/10 text-accent font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-surface-hover"}`,children:[i,l]});return e.jsxs("div",{className:"flex gap-1 p-0.5 bg-surface-sunken rounded-lg w-fit",children:[a("prune",e.jsx(I,{className:"w-3.5 h-3.5"}),"Prune Now"),a("schedule",e.jsx(D,{className:"w-3.5 h-3.5"}),"Schedule")]})}function ee(){const[t,r]=d.useState("schedule");return e.jsxs("div",{children:[e.jsx(F,{title:"DB Maintenance",docsHash:"#docs:dashboard.md:db-maintenance",actions:e.jsx(Q,{mode:t,onChange:r})}),e.jsxs("div",{className:"flex items-start gap-2 px-4 py-3 mb-8 rounded-md bg-accent/5 border border-accent/10",children:[e.jsx(j,{className:"w-4 h-4 text-accent shrink-0 mt-0.5"}),e.jsx("p",{className:"text-xs text-text-secondary leading-relaxed",children:"Workflow data grows as jobs complete. Operations are ordered safest-first: stream messages are always safe to prune, workflow reduction preserves results, and deletion is permanent."})]}),t==="prune"?e.jsx(U,{}):e.jsx(K,{})]})}export{ee as MaintenancePage};
2
- //# sourceMappingURL=index-DQHmfTPo.js.map
@@ -1,2 +0,0 @@
1
- import{u as e}from"./vendor-query-B2UbickB.js";import{b as s}from"./index-_BRA9uFL.js";function u(){return e({queryKey:["namespaces"],queryFn:()=>s("/namespaces")})}export{u};
2
- //# sourceMappingURL=namespaces-DtsT_GoV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"namespaces-DtsT_GoV.js","sources":["../../src/api/namespaces.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface LTNamespace {\n id: string;\n name: string;\n description: string | null;\n schema_name: string;\n is_default: boolean;\n metadata: Record<string, unknown> | null;\n created_at: string;\n updated_at: string;\n}\n\nexport function useNamespaces() {\n return useQuery<{ namespaces: LTNamespace[] }>({\n queryKey: ['namespaces'],\n queryFn: () => apiFetch('/namespaces'),\n });\n}\n"],"names":["useNamespaces","useQuery","apiFetch"],"mappings":"uFAcO,SAASA,GAAgB,CAC9B,OAAOC,EAAwC,CAC7C,SAAU,CAAC,YAAY,EACvB,QAAS,IAAMC,EAAS,aAAa,CAAA,CACtC,CACH"}
@@ -1,2 +0,0 @@
1
- import{u as i,c as u}from"./vendor-query-B2UbickB.js";import{b as n}from"./index-_BRA9uFL.js";function a(t={}){const e=new URLSearchParams;return t.limit&&e.set("limit",String(t.limit)),t.offset!==void 0&&e.set("offset",String(t.offset)),t.entity&&e.set("entity",t.entity),t.search&&e.set("search",t.search),t.status&&e.set("status",t.status),t.sort_by&&e.set("sort_by",t.sort_by),t.order&&e.set("order",t.order),e.set("app_id",t.app_id||"longtail"),i({queryKey:["mcpRuns",t],queryFn:()=>n(`/pipelines?${e}`)})}function p(t="longtail"){return i({queryKey:["mcpEntities",t],queryFn:()=>n(`/pipelines/entities?app_id=${t}`)})}function r(t,e="longtail"){return i({queryKey:["mcpRunExecution",t,e],queryFn:()=>n(`/pipelines/${t}/execution?app_id=${e}`),enabled:!!t})}function c(){return u({mutationFn:t=>n(`/pipelines/${t.jobId}/interrupt`,{method:"POST",body:JSON.stringify({topic:t.topic,app_id:t.appId})})})}export{p as a,r as b,c,a as u};
2
- //# sourceMappingURL=pipelines-BjlCm9VH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipelines-BjlCm9VH.js","sources":["../../src/api/pipelines.ts"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\ninterface McpRunFilters {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n app_id?: string;\n sort_by?: string;\n order?: string;\n}\n\nexport function useMcpRuns(filters: McpRunFilters = {}) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n params.set('app_id', filters.app_id || 'longtail');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['mcpRuns', filters],\n queryFn: () => apiFetch(`/pipelines?${params}`),\n });\n}\n\nexport function useMcpEntities(appId = 'longtail') {\n return useQuery<{ entities: string[] }>({\n queryKey: ['mcpEntities', appId],\n queryFn: () => apiFetch(`/pipelines/entities?app_id=${appId}`),\n });\n}\n\nexport function useMcpRunExecution(jobId: string, appId = 'longtail') {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpRunExecution', jobId, appId],\n queryFn: () => apiFetch(`/pipelines/${jobId}/execution?app_id=${appId}`),\n enabled: !!jobId,\n });\n}\n\nexport function useInterruptJob() {\n return useMutation({\n mutationFn: (input: { jobId: string; topic: string; appId: string }) =>\n apiFetch(`/pipelines/${input.jobId}/interrupt`, {\n method: 'POST',\n body: JSON.stringify({ topic: input.topic, app_id: input.appId }),\n }),\n });\n}\n"],"names":["useMcpRuns","filters","params","useQuery","apiFetch","useMcpEntities","appId","useMcpRunExecution","jobId","useInterruptJob","useMutation","input"],"mappings":"8FAeO,SAASA,EAAWC,EAAyB,GAAI,CACtD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,OAAOC,EAAO,IAAI,QAASD,EAAQ,KAAK,EACpDC,EAAO,IAAI,SAAUD,EAAQ,QAAU,UAAU,EAE1CE,EAA2C,CAChD,SAAU,CAAC,UAAWF,CAAO,EAC7B,QAAS,IAAMG,EAAS,cAAcF,CAAM,EAAE,CAAA,CAC/C,CACH,CAEO,SAASG,EAAeC,EAAQ,WAAY,CACjD,OAAOH,EAAiC,CACtC,SAAU,CAAC,cAAeG,CAAK,EAC/B,QAAS,IAAMF,EAAS,8BAA8BE,CAAK,EAAE,CAAA,CAC9D,CACH,CAEO,SAASC,EAAmBC,EAAeF,EAAQ,WAAY,CACpE,OAAOH,EAA4B,CACjC,SAAU,CAAC,kBAAmBK,EAAOF,CAAK,EAC1C,QAAS,IAAMF,EAAS,cAAcI,CAAK,qBAAqBF,CAAK,EAAE,EACvE,QAAS,CAAC,CAACE,CAAA,CACZ,CACH,CAEO,SAASC,GAAkB,CAChC,OAAOC,EAAY,CACjB,WAAaC,GACXP,EAAS,cAAcO,EAAM,KAAK,aAAc,CAC9C,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,MAAOA,EAAM,MAAO,OAAQA,EAAM,KAAA,CAAO,CAAA,CACjE,CAAA,CACJ,CACH"}