@hotmeshio/long-tail 0.1.8 → 0.1.10

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 (201) hide show
  1. package/build/api/escalations.js +40 -5
  2. package/build/api/tasks.d.ts +25 -1
  3. package/build/api/tasks.js +49 -0
  4. package/build/api/workflows.js +8 -1
  5. package/build/examples/seed.js +18 -0
  6. package/build/examples/types/envelopes.d.ts +8 -0
  7. package/build/examples/types/index.d.ts +1 -1
  8. package/build/examples/workers.js +2 -0
  9. package/build/examples/workflows/basic-signal/activities.d.ts +17 -0
  10. package/build/examples/workflows/basic-signal/activities.js +18 -0
  11. package/build/examples/workflows/basic-signal/index.d.ts +17 -0
  12. package/build/examples/workflows/basic-signal/index.js +116 -0
  13. package/build/index.d.ts +1 -0
  14. package/build/index.js +4 -1
  15. package/build/lib/db/schemas/002_seed.sql +9 -1
  16. package/build/modules/ltconfig.d.ts +8 -1
  17. package/build/modules/ltconfig.js +12 -2
  18. package/build/routes/tasks.js +23 -0
  19. package/build/routes/workflows/invocation.js +1 -1
  20. package/build/sdk/index.d.ts +15 -0
  21. package/build/sdk/index.js +1 -0
  22. package/build/services/interceptor/index.js +9 -3
  23. package/build/services/orchestrator/condition.d.ts +34 -0
  24. package/build/services/orchestrator/condition.js +92 -0
  25. package/build/services/workflow-invocation.d.ts +1 -1
  26. package/build/services/workflow-invocation.js +4 -1
  27. package/build/start/index.d.ts +24 -0
  28. package/build/start/index.js +24 -0
  29. package/build/start/workers.d.ts +6 -8
  30. package/build/start/workers.js +31 -1
  31. package/build/system/mcp-servers/admin/workflows.js +5 -0
  32. package/build/tsconfig.tsbuildinfo +1 -1
  33. package/build/types/envelope.d.ts +7 -0
  34. package/build/types/sdk.d.ts +2 -0
  35. package/build/types/startup.d.ts +29 -2
  36. package/dashboard/dist/assets/{AdminDashboard-B15jSEV2.js → AdminDashboard-DUrSBQOl.js} +2 -2
  37. package/dashboard/dist/assets/{AdminDashboard-B15jSEV2.js.map → AdminDashboard-DUrSBQOl.js.map} +1 -1
  38. package/dashboard/dist/assets/{AvailableEscalationsPage-0V2yvKak.js → AvailableEscalationsPage-Dbd1qUK_.js} +2 -2
  39. package/dashboard/dist/assets/{AvailableEscalationsPage-0V2yvKak.js.map → AvailableEscalationsPage-Dbd1qUK_.js.map} +1 -1
  40. package/dashboard/dist/assets/{BotPicker-B4UxHcek.js → BotPicker-Cg5iNEkm.js} +2 -2
  41. package/dashboard/dist/assets/{BotPicker-B4UxHcek.js.map → BotPicker-Cg5iNEkm.js.map} +1 -1
  42. package/dashboard/dist/assets/{CollapsibleSection-BBexNWVd.js → CollapsibleSection-Kd9UIyeU.js} +2 -2
  43. package/dashboard/dist/assets/{CollapsibleSection-BBexNWVd.js.map → CollapsibleSection-Kd9UIyeU.js.map} +1 -1
  44. package/dashboard/dist/assets/{ConfirmDeleteModal-DlPDJSq_.js → ConfirmDeleteModal-DZMgmlof.js} +2 -2
  45. package/dashboard/dist/assets/{ConfirmDeleteModal-DlPDJSq_.js.map → ConfirmDeleteModal-DZMgmlof.js.map} +1 -1
  46. package/dashboard/dist/assets/{CopyableId-BxHW1ahb.js → CopyableId-cPFTRm8q.js} +2 -2
  47. package/dashboard/dist/assets/{CopyableId-BxHW1ahb.js.map → CopyableId-cPFTRm8q.js.map} +1 -1
  48. package/dashboard/dist/assets/{CredentialsPage-Bp_Y1Szk.js → CredentialsPage-DJablIbs.js} +2 -2
  49. package/dashboard/dist/assets/{CredentialsPage-Bp_Y1Szk.js.map → CredentialsPage-DJablIbs.js.map} +1 -1
  50. package/dashboard/dist/assets/{CustomDurationPicker-ByBFqXSO.js → CustomDurationPicker-NgIP6YDW.js} +2 -2
  51. package/dashboard/dist/assets/{CustomDurationPicker-ByBFqXSO.js.map → CustomDurationPicker-NgIP6YDW.js.map} +1 -1
  52. package/dashboard/dist/assets/{DataTable-DyIXg-tQ.js → DataTable-CTRhTAfT.js} +2 -2
  53. package/dashboard/dist/assets/{DataTable-DyIXg-tQ.js.map → DataTable-CTRhTAfT.js.map} +1 -1
  54. package/dashboard/dist/assets/{ElapsedCell-BgnA0qpS.js → ElapsedCell-HcSJ_MMs.js} +2 -2
  55. package/dashboard/dist/assets/{ElapsedCell-BgnA0qpS.js.map → ElapsedCell-HcSJ_MMs.js.map} +1 -1
  56. package/dashboard/dist/assets/{EmptyState-DlMImvgm.js → EmptyState-joNbd4gg.js} +2 -2
  57. package/dashboard/dist/assets/{EmptyState-DlMImvgm.js.map → EmptyState-joNbd4gg.js.map} +1 -1
  58. package/dashboard/dist/assets/{EscalationsOverview-D90kdfw1.js → EscalationsOverview-DpXDnQux.js} +2 -2
  59. package/dashboard/dist/assets/{EscalationsOverview-D90kdfw1.js.map → EscalationsOverview-DpXDnQux.js.map} +1 -1
  60. package/dashboard/dist/assets/{EventTable-BNxtlgNz.js → EventTable-CYem3v8n.js} +2 -2
  61. package/dashboard/dist/assets/{EventTable-BNxtlgNz.js.map → EventTable-CYem3v8n.js.map} +1 -1
  62. package/dashboard/dist/assets/{FilterBar-BTiaAhCx.js → FilterBar-BiO8SOzc.js} +2 -2
  63. package/dashboard/dist/assets/{FilterBar-BTiaAhCx.js.map → FilterBar-BiO8SOzc.js.map} +1 -1
  64. package/dashboard/dist/assets/{ListToolbar-BUcagSCn.js → ListToolbar-6yRDh2e9.js} +2 -2
  65. package/dashboard/dist/assets/{ListToolbar-BUcagSCn.js.map → ListToolbar-6yRDh2e9.js.map} +1 -1
  66. package/dashboard/dist/assets/{McpOverview-B-tCvz8C.js → McpOverview-CUgSxkQe.js} +2 -2
  67. package/dashboard/dist/assets/{McpOverview-B-tCvz8C.js.map → McpOverview-CUgSxkQe.js.map} +1 -1
  68. package/dashboard/dist/assets/{McpQueryDetailPage-DPlF1wYb.js → McpQueryDetailPage-BWbinTM_.js} +2 -2
  69. package/dashboard/dist/assets/{McpQueryDetailPage-DPlF1wYb.js.map → McpQueryDetailPage-BWbinTM_.js.map} +1 -1
  70. package/dashboard/dist/assets/{McpQueryPage-Bz7AdcfR.js → McpQueryPage-lV6kfDG5.js} +2 -2
  71. package/dashboard/dist/assets/{McpQueryPage-Bz7AdcfR.js.map → McpQueryPage-lV6kfDG5.js.map} +1 -1
  72. package/dashboard/dist/assets/{McpRunDetailPage-Di_qpL2V.js → McpRunDetailPage-D6gaxH3_.js} +2 -2
  73. package/dashboard/dist/assets/{McpRunDetailPage-Di_qpL2V.js.map → McpRunDetailPage-D6gaxH3_.js.map} +1 -1
  74. package/dashboard/dist/assets/{McpRunsPage-BBgybBEa.js → McpRunsPage-DKvTklh9.js} +2 -2
  75. package/dashboard/dist/assets/{McpRunsPage-BBgybBEa.js.map → McpRunsPage-DKvTklh9.js.map} +1 -1
  76. package/dashboard/dist/assets/{Modal-CaJ0gTEa.js → Modal-BuTvD0pz.js} +2 -2
  77. package/dashboard/dist/assets/{Modal-CaJ0gTEa.js.map → Modal-BuTvD0pz.js.map} +1 -1
  78. package/dashboard/dist/assets/{OperatorDashboard-DDfMmrmR.js → OperatorDashboard-C9SSV96T.js} +2 -2
  79. package/dashboard/dist/assets/{OperatorDashboard-DDfMmrmR.js.map → OperatorDashboard-C9SSV96T.js.map} +1 -1
  80. package/dashboard/dist/assets/{PageHeader-C5D-G5rp.js → PageHeader-BcTVF9ul.js} +2 -2
  81. package/dashboard/dist/assets/{PageHeader-C5D-G5rp.js.map → PageHeader-BcTVF9ul.js.map} +1 -1
  82. package/dashboard/dist/assets/{PageHeaderWithStats-DCa2eZh2.js → PageHeaderWithStats-BI7JG5x6.js} +2 -2
  83. package/dashboard/dist/assets/{PageHeaderWithStats-DCa2eZh2.js.map → PageHeaderWithStats-BI7JG5x6.js.map} +1 -1
  84. package/dashboard/dist/assets/{PriorityBadge-DTHq6OUZ.js → PriorityBadge-DqVaOU65.js} +2 -2
  85. package/dashboard/dist/assets/{PriorityBadge-DTHq6OUZ.js.map → PriorityBadge-DqVaOU65.js.map} +1 -1
  86. package/dashboard/dist/assets/{ProcessDetailPage-fC4dhrd0.js → ProcessDetailPage-hFMhf9qa.js} +2 -2
  87. package/dashboard/dist/assets/{ProcessDetailPage-fC4dhrd0.js.map → ProcessDetailPage-hFMhf9qa.js.map} +1 -1
  88. package/dashboard/dist/assets/{ProcessesListPage-CL2MY8uD.js → ProcessesListPage-ByVoBCQ3.js} +2 -2
  89. package/dashboard/dist/assets/{ProcessesListPage-CL2MY8uD.js.map → ProcessesListPage-ByVoBCQ3.js.map} +1 -1
  90. package/dashboard/dist/assets/{RolePill-kgKPANly.js → RolePill-D9ZIkYiu.js} +2 -2
  91. package/dashboard/dist/assets/{RolePill-kgKPANly.js.map → RolePill-D9ZIkYiu.js.map} +1 -1
  92. package/dashboard/dist/assets/{RolesPage-Be2lXTHD.js → RolesPage-SMedMuqa.js} +2 -2
  93. package/dashboard/dist/assets/{RolesPage-Be2lXTHD.js.map → RolesPage-SMedMuqa.js.map} +1 -1
  94. package/dashboard/dist/assets/{RowActions-DIzJCwqR.js → RowActions-yDhwwDbU.js} +2 -2
  95. package/dashboard/dist/assets/{RowActions-DIzJCwqR.js.map → RowActions-yDhwwDbU.js.map} +1 -1
  96. package/dashboard/dist/assets/{StatCard-CRi2Jy6t.js → StatCard-BrBnQFxh.js} +2 -2
  97. package/dashboard/dist/assets/{StatCard-CRi2Jy6t.js.map → StatCard-BrBnQFxh.js.map} +1 -1
  98. package/dashboard/dist/assets/{StatusBadge-BETI_8Mr.js → StatusBadge-xgb-lZku.js} +2 -2
  99. package/dashboard/dist/assets/{StatusBadge-BETI_8Mr.js.map → StatusBadge-xgb-lZku.js.map} +1 -1
  100. package/dashboard/dist/assets/{StepIndicator-DjpMqCjz.js → StepIndicator-B9ps2SvM.js} +2 -2
  101. package/dashboard/dist/assets/{StepIndicator-DjpMqCjz.js.map → StepIndicator-B9ps2SvM.js.map} +1 -1
  102. package/dashboard/dist/assets/{StickyPagination-BZbExQ9t.js → StickyPagination-DTIjBKN3.js} +2 -2
  103. package/dashboard/dist/assets/{StickyPagination-BZbExQ9t.js.map → StickyPagination-DTIjBKN3.js.map} +1 -1
  104. package/dashboard/dist/assets/{SwimlaneTimeline-DZthQyhR.js → SwimlaneTimeline-RK4Yu66z.js} +2 -2
  105. package/dashboard/dist/assets/{SwimlaneTimeline-DZthQyhR.js.map → SwimlaneTimeline-RK4Yu66z.js.map} +1 -1
  106. package/dashboard/dist/assets/{TagInput-CukbOfYn.js → TagInput-CdNUuqk4.js} +2 -2
  107. package/dashboard/dist/assets/{TagInput-CukbOfYn.js.map → TagInput-CdNUuqk4.js.map} +1 -1
  108. package/dashboard/dist/assets/{TaskDetailPage-CIZHIKo9.js → TaskDetailPage-C-nzaNea.js} +2 -2
  109. package/dashboard/dist/assets/{TaskDetailPage-CIZHIKo9.js.map → TaskDetailPage-C-nzaNea.js.map} +1 -1
  110. package/dashboard/dist/assets/{TaskQueuePill-Q7DGoysj.js → TaskQueuePill-Lvr2-NzS.js} +2 -2
  111. package/dashboard/dist/assets/{TaskQueuePill-Q7DGoysj.js.map → TaskQueuePill-Lvr2-NzS.js.map} +1 -1
  112. package/dashboard/dist/assets/{TasksListPage-CsC9wjb0.js → TasksListPage-DSUmD84y.js} +2 -2
  113. package/dashboard/dist/assets/{TasksListPage-CsC9wjb0.js.map → TasksListPage-DSUmD84y.js.map} +1 -1
  114. package/dashboard/dist/assets/{TimeAgo-BcOOnJeH.js → TimeAgo-BZdLdrIh.js} +2 -2
  115. package/dashboard/dist/assets/{TimeAgo-BcOOnJeH.js.map → TimeAgo-BZdLdrIh.js.map} +1 -1
  116. package/dashboard/dist/assets/{TimestampCell-CEMapYDQ.js → TimestampCell-QX_0i5FK.js} +2 -2
  117. package/dashboard/dist/assets/{TimestampCell-CEMapYDQ.js.map → TimestampCell-QX_0i5FK.js.map} +1 -1
  118. package/dashboard/dist/assets/{UserName-BHoN7iRL.js → UserName-DyZMXcBm.js} +2 -2
  119. package/dashboard/dist/assets/{UserName-BHoN7iRL.js.map → UserName-DyZMXcBm.js.map} +1 -1
  120. package/dashboard/dist/assets/{WorkflowExecutionPage-DawKl1LT.js → WorkflowExecutionPage-DjVxfZaF.js} +2 -2
  121. package/dashboard/dist/assets/{WorkflowExecutionPage-DawKl1LT.js.map → WorkflowExecutionPage-DjVxfZaF.js.map} +1 -1
  122. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +2 -0
  123. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +1 -0
  124. package/dashboard/dist/assets/WorkflowsDashboard-DZjuiFZ0.js +2 -0
  125. package/dashboard/dist/assets/WorkflowsDashboard-DZjuiFZ0.js.map +1 -0
  126. package/dashboard/dist/assets/{WorkflowsOverview-DuhAi_OY.js → WorkflowsOverview-CLnLRpOu.js} +2 -2
  127. package/dashboard/dist/assets/{WorkflowsOverview-DuhAi_OY.js.map → WorkflowsOverview-CLnLRpOu.js.map} +1 -1
  128. package/dashboard/dist/assets/{YamlWorkflowsPage-Dc9xw82a.js → YamlWorkflowsPage-VjdhnLmO.js} +2 -2
  129. package/dashboard/dist/assets/{YamlWorkflowsPage-Dc9xw82a.js.map → YamlWorkflowsPage-VjdhnLmO.js.map} +1 -1
  130. package/dashboard/dist/assets/{bots-Dny-rmmI.js → bots-DIM6lBoY.js} +2 -2
  131. package/dashboard/dist/assets/{bots-Dny-rmmI.js.map → bots-DIM6lBoY.js.map} +1 -1
  132. package/dashboard/dist/assets/{escalation-CV0sKNH5.js → escalation-JOTuOqjq.js} +2 -2
  133. package/dashboard/dist/assets/{escalation-CV0sKNH5.js.map → escalation-JOTuOqjq.js.map} +1 -1
  134. package/dashboard/dist/assets/{escalation-columns-30CKyoWI.js → escalation-columns-Cyg58nkg.js} +2 -2
  135. package/dashboard/dist/assets/{escalation-columns-30CKyoWI.js.map → escalation-columns-Cyg58nkg.js.map} +1 -1
  136. package/dashboard/dist/assets/{helpers-C1-30CzH.js → helpers-B1BDxBZd.js} +2 -2
  137. package/dashboard/dist/assets/{helpers-C1-30CzH.js.map → helpers-B1BDxBZd.js.map} +1 -1
  138. package/dashboard/dist/assets/{helpers-C1jaRD-d.js → helpers-BCix9c_m.js} +2 -2
  139. package/dashboard/dist/assets/{helpers-C1jaRD-d.js.map → helpers-BCix9c_m.js.map} +1 -1
  140. package/dashboard/dist/assets/{index-D_aJBEAG.js → index-BUK3qR-1.js} +2 -2
  141. package/dashboard/dist/assets/{index-D_aJBEAG.js.map → index-BUK3qR-1.js.map} +1 -1
  142. package/dashboard/dist/assets/{index-DnmZbNxk.js → index-BYZX9tOb.js} +5 -5
  143. package/dashboard/dist/assets/index-BYZX9tOb.js.map +1 -0
  144. package/dashboard/dist/assets/{index-D-oCWCAS.js → index-BcR6PfpY.js} +2 -2
  145. package/dashboard/dist/assets/{index-D-oCWCAS.js.map → index-BcR6PfpY.js.map} +1 -1
  146. package/dashboard/dist/assets/index-BizfauqT.js +6 -0
  147. package/dashboard/dist/assets/index-BizfauqT.js.map +1 -0
  148. package/dashboard/dist/assets/{index-CxVB7F4X.js → index-Cf60K3x9.js} +2 -2
  149. package/dashboard/dist/assets/{index-CxVB7F4X.js.map → index-Cf60K3x9.js.map} +1 -1
  150. package/dashboard/dist/assets/{index-D0wPM3Ck.js → index-Cg5nfiYX.js} +2 -2
  151. package/dashboard/dist/assets/{index-D0wPM3Ck.js.map → index-Cg5nfiYX.js.map} +1 -1
  152. package/dashboard/dist/assets/index-D1wVX50Z.js +15 -0
  153. package/dashboard/dist/assets/index-D1wVX50Z.js.map +1 -0
  154. package/dashboard/dist/assets/{index-DHgnkykj.js → index-DDYFpi4l.js} +4 -4
  155. package/dashboard/dist/assets/index-DDYFpi4l.js.map +1 -0
  156. package/dashboard/dist/assets/{index-_RBvi7s6.js → index-Di12t56M.js} +2 -2
  157. package/dashboard/dist/assets/{index-_RBvi7s6.js.map → index-Di12t56M.js.map} +1 -1
  158. package/dashboard/dist/assets/{index-Dd_U4mLm.js → index-Ds0JoXS2.js} +2 -2
  159. package/dashboard/dist/assets/{index-Dd_U4mLm.js.map → index-Ds0JoXS2.js.map} +1 -1
  160. package/dashboard/dist/assets/{mcp-CRFr4L9W.js → mcp-B_xbczAt.js} +2 -2
  161. package/dashboard/dist/assets/{mcp-CRFr4L9W.js.map → mcp-B_xbczAt.js.map} +1 -1
  162. package/dashboard/dist/assets/{mcp-query-DHY2mZBQ.js → mcp-query-B8-P_QoG.js} +2 -2
  163. package/dashboard/dist/assets/{mcp-query-DHY2mZBQ.js.map → mcp-query-B8-P_QoG.js.map} +1 -1
  164. package/dashboard/dist/assets/{mcp-runs-BqPHqwAO.js → mcp-runs-CWeZinoF.js} +2 -2
  165. package/dashboard/dist/assets/{mcp-runs-BqPHqwAO.js.map → mcp-runs-CWeZinoF.js.map} +1 -1
  166. package/dashboard/dist/assets/{namespaces-TG1aIpo_.js → namespaces-C3WtdO_9.js} +2 -2
  167. package/dashboard/dist/assets/{namespaces-TG1aIpo_.js.map → namespaces-C3WtdO_9.js.map} +1 -1
  168. package/dashboard/dist/assets/{roles-DhhLTvXg.js → roles-BDAsPpZG.js} +2 -2
  169. package/dashboard/dist/assets/{roles-DhhLTvXg.js.map → roles-BDAsPpZG.js.map} +1 -1
  170. package/dashboard/dist/assets/{settings-D9MBzEeB.js → settings-Ife_UwAp.js} +2 -2
  171. package/dashboard/dist/assets/{settings-D9MBzEeB.js.map → settings-Ife_UwAp.js.map} +1 -1
  172. package/dashboard/dist/assets/{tasks-BxmcZoev.js → tasks-BquNDHDI.js} +2 -2
  173. package/dashboard/dist/assets/{tasks-BxmcZoev.js.map → tasks-BquNDHDI.js.map} +1 -1
  174. package/dashboard/dist/assets/{useEventHooks-BylecvvI.js → useEventHooks-anv_B2Yy.js} +2 -2
  175. package/dashboard/dist/assets/{useEventHooks-BylecvvI.js.map → useEventHooks-anv_B2Yy.js.map} +1 -1
  176. package/dashboard/dist/assets/{useYamlActivityEvents-ocmj11e_.js → useYamlActivityEvents-DN-PTgVx.js} +2 -2
  177. package/dashboard/dist/assets/{useYamlActivityEvents-ocmj11e_.js.map → useYamlActivityEvents-DN-PTgVx.js.map} +1 -1
  178. package/dashboard/dist/assets/{users-Ce5r-JAv.js → users-CFcxB4v6.js} +2 -2
  179. package/dashboard/dist/assets/{users-Ce5r-JAv.js.map → users-CFcxB4v6.js.map} +1 -1
  180. package/dashboard/dist/assets/{vendor-icons-D1DdudfH.js → vendor-icons-T4r2DSPD.js} +2 -2
  181. package/dashboard/dist/assets/{vendor-icons-D1DdudfH.js.map → vendor-icons-T4r2DSPD.js.map} +1 -1
  182. package/dashboard/dist/assets/{workflows-ykIeVbRJ.js → workflows-CeRci9z3.js} +2 -2
  183. package/dashboard/dist/assets/{workflows-ykIeVbRJ.js.map → workflows-CeRci9z3.js.map} +1 -1
  184. package/dashboard/dist/assets/{yaml-workflows-WypmKYht.js → yaml-workflows-DLwd2BOX.js} +2 -2
  185. package/dashboard/dist/assets/{yaml-workflows-WypmKYht.js.map → yaml-workflows-DLwd2BOX.js.map} +1 -1
  186. package/dashboard/dist/index.html +2 -2
  187. package/docs/api/http/escalations.md +99 -0
  188. package/docs/api/http/tasks.md +47 -0
  189. package/docs/api/sdk/escalations.md +137 -0
  190. package/docs/api/sdk/tasks.md +40 -1
  191. package/package.json +1 -1
  192. package/dashboard/dist/assets/WorkflowPill-CP84Vqeg.js +0 -2
  193. package/dashboard/dist/assets/WorkflowPill-CP84Vqeg.js.map +0 -1
  194. package/dashboard/dist/assets/WorkflowsDashboard-QrvVFxtQ.js +0 -2
  195. package/dashboard/dist/assets/WorkflowsDashboard-QrvVFxtQ.js.map +0 -1
  196. package/dashboard/dist/assets/index-BUVQ6wmy.js +0 -6
  197. package/dashboard/dist/assets/index-BUVQ6wmy.js.map +0 -1
  198. package/dashboard/dist/assets/index-DHgnkykj.js.map +0 -1
  199. package/dashboard/dist/assets/index-DnmZbNxk.js.map +0 -1
  200. package/dashboard/dist/assets/index-n7td8zgX.js +0 -17
  201. package/dashboard/dist/assets/index-n7td8zgX.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bots-Dny-rmmI.js","sources":["../../src/api/bots.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { BotRecord, BotApiKeyRecord } from './types';\nimport type { LTRoleType } from './types';\n\ninterface BotListResponse {\n bots: BotRecord[];\n total: number;\n}\n\ninterface BotFilters {\n limit?: number;\n offset?: number;\n}\n\n// ── Query hooks ──────────────────────────────────────────────────────────────\n\nexport function useBots(filters: BotFilters = {}) {\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\n return useQuery<BotListResponse>({\n queryKey: ['bots', filters],\n queryFn: () => apiFetch(`/bot-accounts?${params}`),\n });\n}\n\nexport function useBotApiKeys(botId: string) {\n return useQuery<{ keys: BotApiKeyRecord[] }>({\n queryKey: ['bots', botId, 'api-keys'],\n queryFn: () => apiFetch(`/bot-accounts/${botId}/api-keys`),\n enabled: !!botId,\n });\n}\n\n// ── Mutation hooks ───────────────────────────────────────────────────────────\n\nexport function useCreateBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n display_name?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/bot-accounts', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useUpdateBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n display_name?: string;\n description?: string;\n status?: string;\n }) =>\n apiFetch(`/bot-accounts/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useDeleteBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/bot-accounts/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useCreateBotApiKey() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n botId,\n name,\n scopes,\n }: {\n botId: string;\n name: string;\n scopes?: string[];\n }) =>\n apiFetch<{ id: string; rawKey: string }>(`/bot-accounts/${botId}/api-keys`, {\n method: 'POST',\n body: JSON.stringify({ name, scopes }),\n }),\n onSuccess: (_data, vars) => {\n queryClient.invalidateQueries({ queryKey: ['bots', vars.botId, 'api-keys'] });\n },\n });\n}\n\nexport function useRevokeBotApiKey() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ botId, keyId }: { botId: string; keyId: string }) =>\n apiFetch(`/bot-accounts/${botId}/api-keys/${keyId}`, { method: 'DELETE' }),\n onSuccess: (_data, vars) => {\n queryClient.invalidateQueries({ queryKey: ['bots', vars.botId, 'api-keys'] });\n },\n });\n}\n\nexport function useAddBotRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n botId,\n role,\n type,\n }: {\n botId: string;\n role: string;\n type: LTRoleType;\n }) =>\n apiFetch(`/bot-accounts/${botId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useRemoveBotRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ botId, role }: { botId: string; role: string }) =>\n apiFetch(`/bot-accounts/${botId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n"],"names":["useBots","filters","params","useQuery","apiFetch","useBotApiKeys","botId","useCreateBot","queryClient","useQueryClient","useMutation","data","useUpdateBot","id","useDeleteBot","useCreateBotApiKey","name","scopes","_data","vars","useRevokeBotApiKey","keyId","useAddBotRole","role","type","useRemoveBotRole"],"mappings":"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"}
1
+ {"version":3,"file":"bots-DIM6lBoY.js","sources":["../../src/api/bots.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { BotRecord, BotApiKeyRecord } from './types';\nimport type { LTRoleType } from './types';\n\ninterface BotListResponse {\n bots: BotRecord[];\n total: number;\n}\n\ninterface BotFilters {\n limit?: number;\n offset?: number;\n}\n\n// ── Query hooks ──────────────────────────────────────────────────────────────\n\nexport function useBots(filters: BotFilters = {}) {\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\n return useQuery<BotListResponse>({\n queryKey: ['bots', filters],\n queryFn: () => apiFetch(`/bot-accounts?${params}`),\n });\n}\n\nexport function useBotApiKeys(botId: string) {\n return useQuery<{ keys: BotApiKeyRecord[] }>({\n queryKey: ['bots', botId, 'api-keys'],\n queryFn: () => apiFetch(`/bot-accounts/${botId}/api-keys`),\n enabled: !!botId,\n });\n}\n\n// ── Mutation hooks ───────────────────────────────────────────────────────────\n\nexport function useCreateBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n name: string;\n description?: string;\n display_name?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/bot-accounts', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useUpdateBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n display_name?: string;\n description?: string;\n status?: string;\n }) =>\n apiFetch(`/bot-accounts/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useDeleteBot() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/bot-accounts/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useCreateBotApiKey() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n botId,\n name,\n scopes,\n }: {\n botId: string;\n name: string;\n scopes?: string[];\n }) =>\n apiFetch<{ id: string; rawKey: string }>(`/bot-accounts/${botId}/api-keys`, {\n method: 'POST',\n body: JSON.stringify({ name, scopes }),\n }),\n onSuccess: (_data, vars) => {\n queryClient.invalidateQueries({ queryKey: ['bots', vars.botId, 'api-keys'] });\n },\n });\n}\n\nexport function useRevokeBotApiKey() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ botId, keyId }: { botId: string; keyId: string }) =>\n apiFetch(`/bot-accounts/${botId}/api-keys/${keyId}`, { method: 'DELETE' }),\n onSuccess: (_data, vars) => {\n queryClient.invalidateQueries({ queryKey: ['bots', vars.botId, 'api-keys'] });\n },\n });\n}\n\nexport function useAddBotRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n botId,\n role,\n type,\n }: {\n botId: string;\n role: string;\n type: LTRoleType;\n }) =>\n apiFetch(`/bot-accounts/${botId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n\nexport function useRemoveBotRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ botId, role }: { botId: string; role: string }) =>\n apiFetch(`/bot-accounts/${botId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['bots'] });\n },\n });\n}\n"],"names":["useBots","filters","params","useQuery","apiFetch","useBotApiKeys","botId","useCreateBot","queryClient","useQueryClient","useMutation","data","useUpdateBot","id","useDeleteBot","useCreateBotApiKey","name","scopes","_data","vars","useRevokeBotApiKey","keyId","useAddBotRole","role","type","useRemoveBotRole"],"mappings":"qGAiBO,SAASA,EAAQC,EAAsB,GAAI,CAChD,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,EAEtEE,EAA0B,CAC/B,SAAU,CAAC,OAAQF,CAAO,EAC1B,QAAS,IAAMG,EAAS,iBAAiBF,CAAM,EAAE,CAAA,CAClD,CACH,CAEO,SAASG,EAAcC,EAAe,CAC3C,OAAOH,EAAsC,CAC3C,SAAU,CAAC,OAAQG,EAAO,UAAU,EACpC,QAAS,IAAMF,EAAS,iBAAiBE,CAAK,WAAW,EACzD,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAIO,SAASC,GAAe,CAC7B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAMXP,EAAS,gBAAiB,CACxB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,CACtD,CAAA,CACD,CACH,CAEO,SAASI,GAAe,CAC7B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAG,EACA,GAAGF,CAAA,IAOHP,EAAS,iBAAiBS,CAAE,GAAI,CAC9B,OAAQ,MACR,KAAM,KAAK,UAAUF,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,CACtD,CAAA,CACD,CACH,CAEO,SAASM,GAAe,CAC7B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaG,GACXT,EAAS,iBAAiBS,CAAE,GAAI,CAAE,OAAQ,SAAU,EACtD,UAAW,IAAM,CACfL,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,CACtD,CAAA,CACD,CACH,CAEO,SAASO,GAAqB,CACnC,MAAMP,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,MAAAJ,EACA,KAAAU,EACA,OAAAC,CAAA,IAMAb,EAAyC,iBAAiBE,CAAK,YAAa,CAC1E,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAU,EAAM,OAAAC,EAAQ,CAAA,CACtC,EACH,UAAW,CAACC,EAAOC,IAAS,CAC1BX,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAQW,EAAK,MAAO,UAAU,EAAG,CAC9E,CAAA,CACD,CACH,CAEO,SAASC,GAAqB,CACnC,MAAMZ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,MAAAJ,EAAO,MAAAe,KACpBjB,EAAS,iBAAiBE,CAAK,aAAae,CAAK,GAAI,CAAE,OAAQ,SAAU,EAC3E,UAAW,CAACH,EAAOC,IAAS,CAC1BX,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAQW,EAAK,MAAO,UAAU,EAAG,CAC9E,CAAA,CACD,CACH,CAEO,SAASG,GAAgB,CAC9B,MAAMd,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,MAAAJ,EACA,KAAAiB,EACA,KAAAC,CAAA,IAMApB,EAAS,iBAAiBE,CAAK,SAAU,CACvC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAiB,EAAM,KAAAC,EAAM,CAAA,CACpC,EACH,UAAW,IAAM,CACfhB,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,CACtD,CAAA,CACD,CACH,CAEO,SAASiB,GAAmB,CACjC,MAAMjB,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,MAAAJ,EAAO,KAAAiB,CAAA,IACpBnB,EAAS,iBAAiBE,CAAK,UAAU,mBAAmBiB,CAAI,CAAC,GAAI,CACnE,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACff,EAAY,kBAAkB,CAAE,SAAU,CAAC,MAAM,EAAG,CACtD,CAAA,CACD,CACH"}
@@ -1,2 +1,2 @@
1
- import{v as l,j as s,w as m,x as c}from"./index-DnmZbNxk.js";import{a}from"./vendor-query-DLp59M9_.js";const n=[{maxMs:0,color:"text-status-error"},{maxMs:300*1e3,color:"text-status-error"},{maxMs:900*1e3,color:"text-status-warning"},{maxMs:1/0,color:"text-accent"}];function u(e){if(e<=0)return n[0].color;for(const t of n)if(e<t.maxMs)return t.color;return n[n.length-1].color}function d({until:e}){const[t,r]=a.useState(()=>new Date(e).getTime()-Date.now());a.useEffect(()=>{const o=setInterval(()=>{r(new Date(e).getTime()-Date.now())},1e3);return()=>clearInterval(o)},[e]);const i=a.useMemo(()=>{const o=new Date(e);return[{label:"ms",value:String(Math.max(0,t))},{label:"until",value:o.toISOString()},{label:"local",value:l(o,"MMM d, yyyy h:mm:ss a")}]},[e,t]);return s.jsxDEV(m,{options:i,children:s.jsxDEV("span",{className:`text-xs font-mono ${u(t)}`,children:c(t)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:42,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:41,columnNumber:5},this)}function p(e){return!!(e.assigned_to&&e.assigned_until&&new Date(e.assigned_until)>new Date)}function w(e){return!e.workflow_type}export{d as C,p as a,w as i};
2
- //# sourceMappingURL=escalation-CV0sKNH5.js.map
1
+ import{v as l,j as s,w as m,x as c}from"./index-BYZX9tOb.js";import{a}from"./vendor-query-DLp59M9_.js";const n=[{maxMs:0,color:"text-status-error"},{maxMs:300*1e3,color:"text-status-error"},{maxMs:900*1e3,color:"text-status-warning"},{maxMs:1/0,color:"text-accent"}];function u(e){if(e<=0)return n[0].color;for(const t of n)if(e<t.maxMs)return t.color;return n[n.length-1].color}function d({until:e}){const[t,r]=a.useState(()=>new Date(e).getTime()-Date.now());a.useEffect(()=>{const o=setInterval(()=>{r(new Date(e).getTime()-Date.now())},1e3);return()=>clearInterval(o)},[e]);const i=a.useMemo(()=>{const o=new Date(e);return[{label:"ms",value:String(Math.max(0,t))},{label:"until",value:o.toISOString()},{label:"local",value:l(o,"MMM d, yyyy h:mm:ss a")}]},[e,t]);return s.jsxDEV(m,{options:i,children:s.jsxDEV("span",{className:`text-xs font-mono ${u(t)}`,children:c(t)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:42,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/CountdownTimer.tsx",lineNumber:41,columnNumber:5},this)}function p(e){return!!(e.assigned_to&&e.assigned_until&&new Date(e.assigned_until)>new Date)}function w(e){return!e.workflow_type}export{d as C,p as a,w as i};
2
+ //# sourceMappingURL=escalation-JOTuOqjq.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"escalation-CV0sKNH5.js","sources":["../../src/components/common/display/CountdownTimer.tsx","../../src/lib/escalation.ts"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { format as fnsFormat } from 'date-fns';\nimport { formatRemaining } from '../../../lib/format';\nimport { DateTooltip } from './DateTooltip';\n\nconst COUNTDOWN_THRESHOLDS = [\n { maxMs: 0, color: 'text-status-error' },\n { maxMs: 5 * 60 * 1000, color: 'text-status-error' },\n { maxMs: 15 * 60 * 1000, color: 'text-status-warning' },\n { maxMs: Infinity, color: 'text-accent' },\n] as const;\n\nfunction countdownColor(remainingMs: number): string {\n if (remainingMs <= 0) return COUNTDOWN_THRESHOLDS[0].color;\n for (const t of COUNTDOWN_THRESHOLDS) {\n if (remainingMs < t.maxMs) return t.color;\n }\n return COUNTDOWN_THRESHOLDS[COUNTDOWN_THRESHOLDS.length - 1].color;\n}\n\nexport function CountdownTimer({ until }: { until: string }) {\n const [remaining, setRemaining] = useState(() => new Date(until).getTime() - Date.now());\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRemaining(new Date(until).getTime() - Date.now());\n }, 1000);\n return () => clearInterval(interval);\n }, [until]);\n\n const options = useMemo(() => {\n const d = new Date(until);\n return [\n { label: 'ms', value: String(Math.max(0, remaining)) },\n { label: 'until', value: d.toISOString() },\n { label: 'local', value: fnsFormat(d, 'MMM d, yyyy h:mm:ss a') },\n ];\n }, [until, remaining]);\n\n return (\n <DateTooltip options={options}>\n <span className={`text-xs font-mono ${countdownColor(remaining)}`}>\n {formatRemaining(remaining)}\n </span>\n </DateTooltip>\n );\n}\n","import type { LTEscalationRecord } from '../api/types';\n\nexport function isEffectivelyClaimed(esc: LTEscalationRecord): boolean {\n return !!(\n esc.assigned_to &&\n esc.assigned_until &&\n new Date(esc.assigned_until) > new Date()\n );\n}\n\n/** An ACK escalation has no associated workflow — it's a notification, not a task. */\nexport function isAckEscalation(esc: LTEscalationRecord): boolean {\n return !esc.workflow_type;\n}\n\nexport function isAvailable(esc: LTEscalationRecord): boolean {\n return (\n esc.status === 'pending' &&\n (!esc.assigned_to ||\n !esc.assigned_until ||\n new Date(esc.assigned_until) <= new Date())\n );\n}\n"],"names":["COUNTDOWN_THRESHOLDS","countdownColor","remainingMs","CountdownTimer","until","remaining","setRemaining","useState","useEffect","interval","options","useMemo","d","fnsFormat","jsxDEV","DateTooltip","formatRemaining","isEffectivelyClaimed","esc","isAckEscalation"],"mappings":"uGAKA,MAAMA,EAAuB,CAC3B,CAAE,MAAO,EAAgB,MAAO,mBAAA,EAChC,CAAE,MAAO,IAAS,IAAO,MAAO,mBAAA,EAChC,CAAE,MAAO,IAAU,IAAM,MAAO,qBAAA,EAChC,CAAE,MAAO,IAAiB,MAAO,aAAA,CACnC,EAEA,SAASC,EAAeC,EAA6B,CACnD,GAAIA,GAAe,EAAG,OAAOF,EAAqB,CAAC,EAAE,MACrD,UAAW,KAAKA,EACd,GAAIE,EAAc,EAAE,MAAO,OAAO,EAAE,MAEtC,OAAOF,EAAqBA,EAAqB,OAAS,CAAC,EAAE,KAC/D,CAEO,SAASG,EAAe,CAAE,MAAAC,GAA4B,CAC3D,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,IAAM,IAAI,KAAKH,CAAK,EAAE,QAAA,EAAY,KAAK,KAAK,EAEvFI,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,YAAY,IAAM,CACjCH,EAAa,IAAI,KAAKF,CAAK,EAAE,UAAY,KAAK,KAAK,CACrD,EAAG,GAAI,EACP,MAAO,IAAM,cAAcK,CAAQ,CACrC,EAAG,CAACL,CAAK,CAAC,EAEV,MAAMM,EAAUC,EAAAA,QAAQ,IAAM,CAC5B,MAAMC,EAAI,IAAI,KAAKR,CAAK,EACxB,MAAO,CACL,CAAE,MAAO,KAAM,MAAO,OAAO,KAAK,IAAI,EAAGC,CAAS,CAAC,CAAA,EACnD,CAAE,MAAO,QAAS,MAAOO,EAAE,aAAY,EACvC,CAAE,MAAO,QAAS,MAAOC,EAAUD,EAAG,uBAAuB,CAAA,CAAE,CAEnE,EAAG,CAACR,EAAOC,CAAS,CAAC,EAErB,OACES,EAAAA,OAACC,EAAA,CAAY,QAAAL,EACX,SAAAI,SAAC,OAAA,CAAK,UAAW,qBAAqBb,EAAeI,CAAS,CAAC,GAC5D,SAAAW,EAAgBX,CAAS,CAAA,EAD5B,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAEJ,CC5CO,SAASY,EAAqBC,EAAkC,CACrE,MAAO,CAAC,EACNA,EAAI,aACJA,EAAI,gBACJ,IAAI,KAAKA,EAAI,cAAc,EAAI,IAAI,KAEvC,CAGO,SAASC,EAAgBD,EAAkC,CAChE,MAAO,CAACA,EAAI,aACd"}
1
+ {"version":3,"file":"escalation-JOTuOqjq.js","sources":["../../src/components/common/display/CountdownTimer.tsx","../../src/lib/escalation.ts"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { format as fnsFormat } from 'date-fns';\nimport { formatRemaining } from '../../../lib/format';\nimport { DateTooltip } from './DateTooltip';\n\nconst COUNTDOWN_THRESHOLDS = [\n { maxMs: 0, color: 'text-status-error' },\n { maxMs: 5 * 60 * 1000, color: 'text-status-error' },\n { maxMs: 15 * 60 * 1000, color: 'text-status-warning' },\n { maxMs: Infinity, color: 'text-accent' },\n] as const;\n\nfunction countdownColor(remainingMs: number): string {\n if (remainingMs <= 0) return COUNTDOWN_THRESHOLDS[0].color;\n for (const t of COUNTDOWN_THRESHOLDS) {\n if (remainingMs < t.maxMs) return t.color;\n }\n return COUNTDOWN_THRESHOLDS[COUNTDOWN_THRESHOLDS.length - 1].color;\n}\n\nexport function CountdownTimer({ until }: { until: string }) {\n const [remaining, setRemaining] = useState(() => new Date(until).getTime() - Date.now());\n\n useEffect(() => {\n const interval = setInterval(() => {\n setRemaining(new Date(until).getTime() - Date.now());\n }, 1000);\n return () => clearInterval(interval);\n }, [until]);\n\n const options = useMemo(() => {\n const d = new Date(until);\n return [\n { label: 'ms', value: String(Math.max(0, remaining)) },\n { label: 'until', value: d.toISOString() },\n { label: 'local', value: fnsFormat(d, 'MMM d, yyyy h:mm:ss a') },\n ];\n }, [until, remaining]);\n\n return (\n <DateTooltip options={options}>\n <span className={`text-xs font-mono ${countdownColor(remaining)}`}>\n {formatRemaining(remaining)}\n </span>\n </DateTooltip>\n );\n}\n","import type { LTEscalationRecord } from '../api/types';\n\nexport function isEffectivelyClaimed(esc: LTEscalationRecord): boolean {\n return !!(\n esc.assigned_to &&\n esc.assigned_until &&\n new Date(esc.assigned_until) > new Date()\n );\n}\n\n/** An ACK escalation has no associated workflow — it's a notification, not a task. */\nexport function isAckEscalation(esc: LTEscalationRecord): boolean {\n return !esc.workflow_type;\n}\n\nexport function isAvailable(esc: LTEscalationRecord): boolean {\n return (\n esc.status === 'pending' &&\n (!esc.assigned_to ||\n !esc.assigned_until ||\n new Date(esc.assigned_until) <= new Date())\n );\n}\n"],"names":["COUNTDOWN_THRESHOLDS","countdownColor","remainingMs","CountdownTimer","until","remaining","setRemaining","useState","useEffect","interval","options","useMemo","d","fnsFormat","jsxDEV","DateTooltip","formatRemaining","isEffectivelyClaimed","esc","isAckEscalation"],"mappings":"uGAKA,MAAMA,EAAuB,CAC3B,CAAE,MAAO,EAAgB,MAAO,mBAAA,EAChC,CAAE,MAAO,IAAS,IAAO,MAAO,mBAAA,EAChC,CAAE,MAAO,IAAU,IAAM,MAAO,qBAAA,EAChC,CAAE,MAAO,IAAiB,MAAO,aAAA,CACnC,EAEA,SAASC,EAAeC,EAA6B,CACnD,GAAIA,GAAe,EAAG,OAAOF,EAAqB,CAAC,EAAE,MACrD,UAAW,KAAKA,EACd,GAAIE,EAAc,EAAE,MAAO,OAAO,EAAE,MAEtC,OAAOF,EAAqBA,EAAqB,OAAS,CAAC,EAAE,KAC/D,CAEO,SAASG,EAAe,CAAE,MAAAC,GAA4B,CAC3D,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,IAAM,IAAI,KAAKH,CAAK,EAAE,QAAA,EAAY,KAAK,KAAK,EAEvFI,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,YAAY,IAAM,CACjCH,EAAa,IAAI,KAAKF,CAAK,EAAE,UAAY,KAAK,KAAK,CACrD,EAAG,GAAI,EACP,MAAO,IAAM,cAAcK,CAAQ,CACrC,EAAG,CAACL,CAAK,CAAC,EAEV,MAAMM,EAAUC,EAAAA,QAAQ,IAAM,CAC5B,MAAMC,EAAI,IAAI,KAAKR,CAAK,EACxB,MAAO,CACL,CAAE,MAAO,KAAM,MAAO,OAAO,KAAK,IAAI,EAAGC,CAAS,CAAC,CAAA,EACnD,CAAE,MAAO,QAAS,MAAOO,EAAE,aAAY,EACvC,CAAE,MAAO,QAAS,MAAOC,EAAUD,EAAG,uBAAuB,CAAA,CAAE,CAEnE,EAAG,CAACR,EAAOC,CAAS,CAAC,EAErB,OACES,EAAAA,OAACC,EAAA,CAAY,QAAAL,EACX,SAAAI,SAAC,OAAA,CAAK,UAAW,qBAAqBb,EAAeI,CAAS,CAAC,GAC5D,SAAAW,EAAgBX,CAAS,CAAA,EAD5B,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAEJ,CC5CO,SAASY,EAAqBC,EAAkC,CACrE,MAAO,CAAC,EACNA,EAAI,aACJA,EAAI,gBACJ,IAAI,KAAKA,EAAI,cAAc,EAAI,IAAI,KAEvC,CAGO,SAASC,EAAgBD,EAAkC,CAChE,MAAO,CAACA,EAAI,aACd"}
@@ -1,2 +1,2 @@
1
- import{j as a}from"./index-DnmZbNxk.js";import{F as c,b as r}from"./FilterBar-BTiaAhCx.js";import{P as u}from"./PriorityBadge-DTHq6OUZ.js";import{R as p}from"./RolePill-kgKPANly.js";import{W as d}from"./WorkflowPill-CP84Vqeg.js";import{T as b}from"./TimestampCell-CEMapYDQ.js";import{C as N,i as f,a as x}from"./escalation-CV0sKNH5.js";import{Y as h,Z as v,_ as g,$ as t}from"./vendor-icons-D1DdudfH.js";import{L as y}from"./vendor-react-Co3Y8ikm.js";function E({row:e}){if(f(e)){const l=e.status==="resolved"?"text-status-success":"text-text-tertiary";return a.jsxDEV(g,{className:`w-3 h-3 shrink-0 ${l}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:17,columnNumber:12},this)}return e.status==="resolved"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:20,columnNumber:12},this):e.status==="cancelled"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:23,columnNumber:12},this):x(e)?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:26,columnNumber:12},this):a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:29,columnNumber:10},this)}const R=[{key:"description",label:"Summary",render:e=>a.jsxDEV("div",{className:"flex items-start gap-2 overflow-hidden",children:[a.jsxDEV("span",{className:"mt-1 shrink-0",children:a.jsxDEV(E,{row:e},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:41},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:9},void 0),a.jsxDEV("div",{className:"min-w-0 overflow-hidden",children:[a.jsxDEV("p",{className:"text-xs text-text-primary truncate",children:e.description||e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:41,columnNumber:11},void 0),a.jsxDEV("div",{className:"flex items-center gap-2 mt-0.5",children:[a.jsxDEV(d,{type:e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:43,columnNumber:13},void 0),e.subtype&&e.subtype!==e.type&&a.jsxDEV("span",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:e.subtype},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:45,columnNumber:15},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:42,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:40,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:38,columnNumber:7},void 0),className:"max-w-0"},{key:"task_id",label:"Task",render:e=>e.task_id?a.jsxDEV(y,{to:`/workflows/tasks/detail/${e.task_id}`,onClick:l=>l.stopPropagation(),className:"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors",children:[e.task_id.slice(0,12),"…",a.jsxDEV(h,{size:10,className:"opacity-0 group-hover/task:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:64,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:58,columnNumber:9},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:67,columnNumber:9},void 0),className:"w-36 whitespace-nowrap"},{key:"role",label:"Role",render:e=>a.jsxDEV(p,{role:e.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:74,columnNumber:22},void 0),className:"w-28"},{key:"priority",label:"Priority",render:e=>a.jsxDEV(u,{priority:e.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:80,columnNumber:22},void 0),className:"w-20",sortable:!0},{key:"created_at",label:"Created",render:e=>a.jsxDEV(b,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:87,columnNumber:22},void 0),className:"w-40",sortable:!0}],L={key:"expires",label:a.jsxDEV(v,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:96,columnNumber:11},void 0),render:e=>e.assigned_until?a.jsxDEV(N,{until:e.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:99,columnNumber:7},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:101,columnNumber:7},void 0),className:"w-10"},j=[{value:"1",label:"P1"},{value:"2",label:"P2"},{value:"3",label:"P3"},{value:"4",label:"P4"}],D=[{value:"available",label:"Available"},{value:"claimed",label:"Claimed"},{value:"resolved",label:"Resolved"}];function I({filters:e,setFilter:l,roles:o,types:i,showStatus:n=!1,actions:m}){return a.jsxDEV(c,{actions:m,children:[n&&a.jsxDEV(r,{label:"Status",value:e.status??"",onChange:s=>l("status",s),options:D},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:172,columnNumber:9},this),a.jsxDEV(r,{label:"Role",value:e.role,onChange:s=>l("role",s),options:o.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:179,columnNumber:7},this),a.jsxDEV(r,{label:"Type",value:e.type,onChange:s=>l("type",s),options:i.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:185,columnNumber:7},this),a.jsxDEV(r,{label:"Priority",value:e.priority,onChange:s=>l("priority",s),options:j},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:191,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:170,columnNumber:5},this)}export{R as E,L as T,I as a};
2
- //# sourceMappingURL=escalation-columns-30CKyoWI.js.map
1
+ import{j as a}from"./index-BYZX9tOb.js";import{F as c,b as r}from"./FilterBar-BiO8SOzc.js";import{P as u}from"./PriorityBadge-DqVaOU65.js";import{R as p}from"./RolePill-D9ZIkYiu.js";import{W as d}from"./WorkflowPill-CZqGslD6.js";import{T as b}from"./TimestampCell-QX_0i5FK.js";import{C as N,i as f,a as x}from"./escalation-JOTuOqjq.js";import{Y as h,Z as v,_ as g,$ as t}from"./vendor-icons-T4r2DSPD.js";import{L as y}from"./vendor-react-Co3Y8ikm.js";function E({row:e}){if(f(e)){const l=e.status==="resolved"?"text-status-success":"text-text-tertiary";return a.jsxDEV(g,{className:`w-3 h-3 shrink-0 ${l}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:17,columnNumber:12},this)}return e.status==="resolved"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:20,columnNumber:12},this):e.status==="cancelled"?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:23,columnNumber:12},this):x(e)?a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:26,columnNumber:12},this):a.jsxDEV(t,{className:"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:29,columnNumber:10},this)}const R=[{key:"description",label:"Summary",render:e=>a.jsxDEV("div",{className:"flex items-start gap-2 overflow-hidden",children:[a.jsxDEV("span",{className:"mt-1 shrink-0",children:a.jsxDEV(E,{row:e},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:41},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:39,columnNumber:9},void 0),a.jsxDEV("div",{className:"min-w-0 overflow-hidden",children:[a.jsxDEV("p",{className:"text-xs text-text-primary truncate",children:e.description||e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:41,columnNumber:11},void 0),a.jsxDEV("div",{className:"flex items-center gap-2 mt-0.5",children:[a.jsxDEV(d,{type:e.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:43,columnNumber:13},void 0),e.subtype&&e.subtype!==e.type&&a.jsxDEV("span",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:e.subtype},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:45,columnNumber:15},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:42,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:40,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:38,columnNumber:7},void 0),className:"max-w-0"},{key:"task_id",label:"Task",render:e=>e.task_id?a.jsxDEV(y,{to:`/workflows/tasks/detail/${e.task_id}`,onClick:l=>l.stopPropagation(),className:"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors",children:[e.task_id.slice(0,12),"…",a.jsxDEV(h,{size:10,className:"opacity-0 group-hover/task:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:64,columnNumber:11},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:58,columnNumber:9},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:67,columnNumber:9},void 0),className:"w-36 whitespace-nowrap"},{key:"role",label:"Role",render:e=>a.jsxDEV(p,{role:e.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:74,columnNumber:22},void 0),className:"w-28"},{key:"priority",label:"Priority",render:e=>a.jsxDEV(u,{priority:e.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:80,columnNumber:22},void 0),className:"w-20",sortable:!0},{key:"created_at",label:"Created",render:e=>a.jsxDEV(b,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:87,columnNumber:22},void 0),className:"w-40",sortable:!0}],L={key:"expires",label:a.jsxDEV(v,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:96,columnNumber:11},void 0),render:e=>e.assigned_until?a.jsxDEV(N,{until:e.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:99,columnNumber:7},void 0):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:101,columnNumber:7},void 0),className:"w-10"},j=[{value:"1",label:"P1"},{value:"2",label:"P2"},{value:"3",label:"P3"},{value:"4",label:"P4"}],D=[{value:"available",label:"Available"},{value:"claimed",label:"Claimed"},{value:"resolved",label:"Resolved"}];function I({filters:e,setFilter:l,roles:o,types:i,showStatus:n=!1,actions:m}){return a.jsxDEV(c,{actions:m,children:[n&&a.jsxDEV(r,{label:"Status",value:e.status??"",onChange:s=>l("status",s),options:D},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:172,columnNumber:9},this),a.jsxDEV(r,{label:"Role",value:e.role,onChange:s=>l("role",s),options:o.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:179,columnNumber:7},this),a.jsxDEV(r,{label:"Type",value:e.type,onChange:s=>l("type",s),options:i.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:185,columnNumber:7},this),a.jsxDEV(r,{label:"Priority",value:e.priority,onChange:s=>l("priority",s),options:j},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:191,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-columns.tsx",lineNumber:170,columnNumber:5},this)}export{R as E,L as T,I as a};
2
+ //# sourceMappingURL=escalation-columns-Cyg58nkg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"escalation-columns-30CKyoWI.js","sources":["../../src/pages/operator/escalation-columns.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { ExternalLink, Circle, Bell, Clock } from 'lucide-react';\nimport type { Column } from '../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { CountdownTimer } from '../../components/common/display/CountdownTimer';\nimport { isEffectivelyClaimed, isAckEscalation } from '../../lib/escalation';\nimport type { LTEscalationRecord } from '../../api/types';\n\n/** Status dot — rendered inline before summary. */\nfunction StatusDot({ row }: { row: LTEscalationRecord }) {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 shrink-0 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success\" />;\n }\n if (row.status === 'cancelled') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active\" />;\n}\n\n/** Base columns shared by all escalation list pages. */\nexport const ESCALATION_COLUMNS: Column<LTEscalationRecord>[] = [\n {\n key: 'description',\n label: 'Summary',\n render: (row) => (\n <div className=\"flex items-start gap-2 overflow-hidden\">\n <span className=\"mt-1 shrink-0\"><StatusDot row={row} /></span>\n <div className=\"min-w-0 overflow-hidden\">\n <p className=\"text-xs text-text-primary truncate\">{row.description || row.type}</p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <WorkflowPill type={row.type} />\n {row.subtype && row.subtype !== row.type && (\n <span className=\"text-[10px] text-text-tertiary whitespace-nowrap\">{row.subtype}</span>\n )}\n </div>\n </div>\n </div>\n ),\n className: 'max-w-0',\n },\n {\n key: 'task_id',\n label: 'Task',\n render: (row) =>\n row.task_id ? (\n <Link\n to={`/workflows/tasks/detail/${row.task_id}`}\n onClick={(e) => e.stopPropagation()}\n className=\"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors\"\n >\n {row.task_id.slice(0, 12)}…\n <ExternalLink size={10} className=\"opacity-0 group-hover/task:opacity-100 transition-opacity\" />\n </Link>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-36 whitespace-nowrap',\n },\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n className: 'w-28',\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n sortable: true,\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-40',\n sortable: true,\n },\n];\n\n/** Time-remaining column for claimed escalations — aligns with checkbox column on All Escalations. */\nexport const TIME_LEFT_COLUMN: Column<LTEscalationRecord> = {\n key: 'expires',\n label: (<Clock className=\"w-3.5 h-3.5 text-text-tertiary\" />) as any,\n render: (row) =>\n row.assigned_until ? (\n <CountdownTimer until={row.assigned_until} />\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-10',\n};\n\n/** Status icon column — color-coded filled circle, or bell for ACK/notification escalations. */\nexport const STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) => {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 fill-status-success text-status-success\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 fill-text-tertiary text-text-tertiary\" />;\n },\n className: 'w-8',\n};\n\n/** Claimed-only status icon (always orange, or bell for ACK). */\nexport const CLAIMED_STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) =>\n isAckEscalation(row)\n ? <Bell className=\"w-3 h-3 text-status-warning\" />\n : <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />,\n className: 'w-8',\n};\n\n/** Priority filter options shared by both pages. */\nexport const PRIORITY_OPTIONS = [\n { value: '1', label: 'P1' },\n { value: '2', label: 'P2' },\n { value: '3', label: 'P3' },\n { value: '4', label: 'P4' },\n];\n\n/** Status filter options for escalation list pages. */\nexport const STATUS_OPTIONS = [\n { value: 'available', label: 'Available' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'resolved', label: 'Resolved' },\n];\n\n/** Shared filter bar for escalation list pages. */\nexport function EscalationFilterBar({\n filters,\n setFilter,\n roles,\n types,\n showStatus = false,\n actions,\n}: {\n filters: { role: string; type: string; priority: string; status?: string };\n setFilter: (key: any, value: string) => void;\n roles: string[];\n types: string[];\n showStatus?: boolean;\n actions?: React.ReactNode;\n}) {\n return (\n <FilterBar actions={actions}>\n {showStatus && (\n <FilterSelect\n label=\"Status\"\n value={filters.status ?? ''}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n )}\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n <FilterSelect\n label=\"Type\"\n value={filters.type}\n onChange={(v) => setFilter('type', v)}\n options={types.map((t) => ({ value: t, label: t }))}\n />\n <FilterSelect\n label=\"Priority\"\n value={filters.priority}\n onChange={(v) => setFilter('priority', v)}\n options={PRIORITY_OPTIONS}\n />\n </FilterBar>\n );\n}\n"],"names":["StatusDot","row","isAckEscalation","color","jsxDEV","Bell","Circle","isEffectivelyClaimed","ESCALATION_COLUMNS","this","WorkflowPill","Link","e","ExternalLink","RolePill","PriorityBadge","TimestampCell","TIME_LEFT_COLUMN","Clock","CountdownTimer","PRIORITY_OPTIONS","STATUS_OPTIONS","EscalationFilterBar","filters","setFilter","roles","types","showStatus","actions","FilterBar","FilterSelect","v","r","t"],"mappings":"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"}
1
+ {"version":3,"file":"escalation-columns-Cyg58nkg.js","sources":["../../src/pages/operator/escalation-columns.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { ExternalLink, Circle, Bell, Clock } from 'lucide-react';\nimport type { Column } from '../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { CountdownTimer } from '../../components/common/display/CountdownTimer';\nimport { isEffectivelyClaimed, isAckEscalation } from '../../lib/escalation';\nimport type { LTEscalationRecord } from '../../api/types';\n\n/** Status dot — rendered inline before summary. */\nfunction StatusDot({ row }: { row: LTEscalationRecord }) {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 shrink-0 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-success text-status-success\" />;\n }\n if (row.status === 'cancelled') {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-error text-status-error\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 shrink-0 fill-status-active text-status-active\" />;\n}\n\n/** Base columns shared by all escalation list pages. */\nexport const ESCALATION_COLUMNS: Column<LTEscalationRecord>[] = [\n {\n key: 'description',\n label: 'Summary',\n render: (row) => (\n <div className=\"flex items-start gap-2 overflow-hidden\">\n <span className=\"mt-1 shrink-0\"><StatusDot row={row} /></span>\n <div className=\"min-w-0 overflow-hidden\">\n <p className=\"text-xs text-text-primary truncate\">{row.description || row.type}</p>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <WorkflowPill type={row.type} />\n {row.subtype && row.subtype !== row.type && (\n <span className=\"text-[10px] text-text-tertiary whitespace-nowrap\">{row.subtype}</span>\n )}\n </div>\n </div>\n </div>\n ),\n className: 'max-w-0',\n },\n {\n key: 'task_id',\n label: 'Task',\n render: (row) =>\n row.task_id ? (\n <Link\n to={`/workflows/tasks/detail/${row.task_id}`}\n onClick={(e) => e.stopPropagation()}\n className=\"group/task inline-flex items-center gap-1 text-xs font-mono text-text-secondary hover:text-accent transition-colors\"\n >\n {row.task_id.slice(0, 12)}…\n <ExternalLink size={10} className=\"opacity-0 group-hover/task:opacity-100 transition-opacity\" />\n </Link>\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-36 whitespace-nowrap',\n },\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n className: 'w-28',\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n sortable: true,\n },\n {\n key: 'created_at',\n label: 'Created',\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-40',\n sortable: true,\n },\n];\n\n/** Time-remaining column for claimed escalations — aligns with checkbox column on All Escalations. */\nexport const TIME_LEFT_COLUMN: Column<LTEscalationRecord> = {\n key: 'expires',\n label: (<Clock className=\"w-3.5 h-3.5 text-text-tertiary\" />) as any,\n render: (row) =>\n row.assigned_until ? (\n <CountdownTimer until={row.assigned_until} />\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n ),\n className: 'w-10',\n};\n\n/** Status icon column — color-coded filled circle, or bell for ACK/notification escalations. */\nexport const STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) => {\n if (isAckEscalation(row)) {\n const color = row.status === 'resolved' ? 'text-status-success' : 'text-text-tertiary';\n return <Bell className={`w-3 h-3 ${color}`} />;\n }\n if (row.status === 'resolved') {\n return <Circle className=\"w-2.5 h-2.5 fill-status-success text-status-success\" />;\n }\n if (isEffectivelyClaimed(row)) {\n return <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />;\n }\n // pending (unclaimed)\n return <Circle className=\"w-2.5 h-2.5 fill-text-tertiary text-text-tertiary\" />;\n },\n className: 'w-8',\n};\n\n/** Claimed-only status icon (always orange, or bell for ACK). */\nexport const CLAIMED_STATUS_COLUMN: Column<LTEscalationRecord> = {\n key: 'status',\n label: '',\n render: (row) =>\n isAckEscalation(row)\n ? <Bell className=\"w-3 h-3 text-status-warning\" />\n : <Circle className=\"w-2.5 h-2.5 fill-status-warning text-status-warning\" />,\n className: 'w-8',\n};\n\n/** Priority filter options shared by both pages. */\nexport const PRIORITY_OPTIONS = [\n { value: '1', label: 'P1' },\n { value: '2', label: 'P2' },\n { value: '3', label: 'P3' },\n { value: '4', label: 'P4' },\n];\n\n/** Status filter options for escalation list pages. */\nexport const STATUS_OPTIONS = [\n { value: 'available', label: 'Available' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'resolved', label: 'Resolved' },\n];\n\n/** Shared filter bar for escalation list pages. */\nexport function EscalationFilterBar({\n filters,\n setFilter,\n roles,\n types,\n showStatus = false,\n actions,\n}: {\n filters: { role: string; type: string; priority: string; status?: string };\n setFilter: (key: any, value: string) => void;\n roles: string[];\n types: string[];\n showStatus?: boolean;\n actions?: React.ReactNode;\n}) {\n return (\n <FilterBar actions={actions}>\n {showStatus && (\n <FilterSelect\n label=\"Status\"\n value={filters.status ?? ''}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n )}\n <FilterSelect\n label=\"Role\"\n value={filters.role}\n onChange={(v) => setFilter('role', v)}\n options={roles.map((r) => ({ value: r, label: r }))}\n />\n <FilterSelect\n label=\"Type\"\n value={filters.type}\n onChange={(v) => setFilter('type', v)}\n options={types.map((t) => ({ value: t, label: t }))}\n />\n <FilterSelect\n label=\"Priority\"\n value={filters.priority}\n onChange={(v) => setFilter('priority', v)}\n options={PRIORITY_OPTIONS}\n />\n </FilterBar>\n );\n}\n"],"names":["StatusDot","row","isAckEscalation","color","jsxDEV","Bell","Circle","isEffectivelyClaimed","ESCALATION_COLUMNS","this","WorkflowPill","Link","e","ExternalLink","RolePill","PriorityBadge","TimestampCell","TIME_LEFT_COLUMN","Clock","CountdownTimer","PRIORITY_OPTIONS","STATUS_OPTIONS","EscalationFilterBar","filters","setFilter","roles","types","showStatus","actions","FilterBar","FilterSelect","v","r","t"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as n}from"./index-DnmZbNxk.js";import{T as o}from"./TimeAgo-BcOOnJeH.js";import{S as l}from"./StatusBadge-BETI_8Mr.js";const i={"* * * * *":"Every minute","*/5 * * * *":"Every 5 minutes","*/15 * * * *":"Every 15 minutes","*/30 * * * *":"Every 30 minutes","0 * * * *":"Every hour","0 */2 * * *":"Every 2 hours","0 */6 * * *":"Every 6 hours","0 */12 * * *":"Every 12 hours","0 0 * * *":"Daily at midnight","0 9 * * *":"Daily at 9 AM","0 9 * * 1-5":"Weekdays at 9 AM","0 0 * * 0":"Weekly (Sunday midnight)","0 0 1 * *":"Monthly (1st at midnight)","0 2 * * *":"Daily at 2 AM"};function c(e){return i[e]??""}const f=[["*/15 * * * *","Every 15 min"],["0 * * * *","Every hour"],["0 */6 * * *","Every 6 hours"],["0 9 * * *","Daily 9 AM"],["0 9 * * 1-5","Weekdays 9 AM"],["0 0 * * 0","Weekly (Sun)"]];function p(e){const t=e==null?void 0:e.data;if(!t||typeof t!="object"||Array.isArray(t))return null;const a=Object.entries(t);return a.length===0||!a.every(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)?null:a.map(([r,s])=>({key:r,value:s===null?"":String(s),type:s===null?"string":typeof s}))}const h=[{key:"workflow_id",label:"Workflow ID",render:e=>n.jsxDEV("span",{className:"font-mono text-[11px] text-text-secondary",children:e.workflow_id.length>40?`${e.workflow_id.slice(0,40)}...`:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:69,columnNumber:7},void 0)},{key:"status",label:"Status",render:e=>n.jsxDEV(l,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:79,columnNumber:22},void 0),className:"w-28"},{key:"created_at",label:"Started",render:e=>n.jsxDEV(o,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:85,columnNumber:22},void 0),className:"w-32"}];export{f as C,c as d,p as e,h as j};
2
- //# sourceMappingURL=helpers-C1-30CzH.js.map
1
+ import{j as n}from"./index-BYZX9tOb.js";import{T as o}from"./TimeAgo-BZdLdrIh.js";import{S as l}from"./StatusBadge-xgb-lZku.js";const i={"* * * * *":"Every minute","*/5 * * * *":"Every 5 minutes","*/15 * * * *":"Every 15 minutes","*/30 * * * *":"Every 30 minutes","0 * * * *":"Every hour","0 */2 * * *":"Every 2 hours","0 */6 * * *":"Every 6 hours","0 */12 * * *":"Every 12 hours","0 0 * * *":"Daily at midnight","0 9 * * *":"Daily at 9 AM","0 9 * * 1-5":"Weekdays at 9 AM","0 0 * * 0":"Weekly (Sunday midnight)","0 0 1 * *":"Monthly (1st at midnight)","0 2 * * *":"Daily at 2 AM"};function c(e){return i[e]??""}const f=[["*/15 * * * *","Every 15 min"],["0 * * * *","Every hour"],["0 */6 * * *","Every 6 hours"],["0 9 * * *","Daily 9 AM"],["0 9 * * 1-5","Weekdays 9 AM"],["0 0 * * 0","Weekly (Sun)"]];function p(e){const t=e==null?void 0:e.data;if(!t||typeof t!="object"||Array.isArray(t))return null;const a=Object.entries(t);return a.length===0||!a.every(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)?null:a.map(([r,s])=>({key:r,value:s===null?"":String(s),type:s===null?"string":typeof s}))}const h=[{key:"workflow_id",label:"Workflow ID",render:e=>n.jsxDEV("span",{className:"font-mono text-[11px] text-text-secondary",children:e.workflow_id.length>40?`${e.workflow_id.slice(0,40)}...`:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:69,columnNumber:7},void 0)},{key:"status",label:"Status",render:e=>n.jsxDEV(l,{status:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:79,columnNumber:22},void 0),className:"w-28"},{key:"created_at",label:"Started",render:e=>n.jsxDEV(o,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/cron/helpers.tsx",lineNumber:85,columnNumber:22},void 0),className:"w-32"}];export{f as C,c as d,p as e,h as j};
2
+ //# sourceMappingURL=helpers-B1BDxBZd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers-C1-30CzH.js","sources":["../../src/pages/workflows/cron/helpers.tsx"],"sourcesContent":["import type { LTJob } from '../../../api/types';\nimport type { Column } from '../../../components/common/data/DataTable';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\n// -- Cron descriptions -------------------------------------------------------\n\nconst CRON_DESCRIPTIONS: Record<string, string> = {\n '* * * * *': 'Every minute',\n '*/5 * * * *': 'Every 5 minutes',\n '*/15 * * * *': 'Every 15 minutes',\n '*/30 * * * *': 'Every 30 minutes',\n '0 * * * *': 'Every hour',\n '0 */2 * * *': 'Every 2 hours',\n '0 */6 * * *': 'Every 6 hours',\n '0 */12 * * *': 'Every 12 hours',\n '0 0 * * *': 'Daily at midnight',\n '0 9 * * *': 'Daily at 9 AM',\n '0 9 * * 1-5': 'Weekdays at 9 AM',\n '0 0 * * 0': 'Weekly (Sunday midnight)',\n '0 0 1 * *': 'Monthly (1st at midnight)',\n '0 2 * * *': 'Daily at 2 AM',\n};\n\nexport function describeCron(expr: string): string {\n return CRON_DESCRIPTIONS[expr] ?? '';\n}\n\nexport const COMMON_PATTERNS: [string, string][] = [\n ['*/15 * * * *', 'Every 15 min'],\n ['0 * * * *', 'Every hour'],\n ['0 */6 * * *', 'Every 6 hours'],\n ['0 9 * * *', 'Daily 9 AM'],\n ['0 9 * * 1-5', 'Weekdays 9 AM'],\n ['0 0 * * 0', 'Weekly (Sun)'],\n];\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n// -- Envelope helpers ---------------------------------------------------------\n\n/** Extract simple string/number/boolean keys from `data` for form view. */\nexport function extractFormFields(\n envelope: Record<string, unknown>,\n): { key: string; value: string; type: string }[] | null {\n const data = envelope?.data;\n if (!data || typeof data !== 'object' || Array.isArray(data)) return null;\n const entries = Object.entries(data as Record<string, unknown>);\n if (entries.length === 0) return null;\n // Only show form if all values are scalar\n const allScalar = entries.every(\n ([, v]) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null,\n );\n if (!allScalar) return null;\n return entries.map(([key, value]) => ({\n key,\n value: value === null ? '' : String(value),\n type: value === null ? 'string' : typeof value,\n }));\n}\n\n// -- Recent jobs table columns ------------------------------------------------\n\nexport const jobColumns: Column<LTJob>[] = [\n {\n key: 'workflow_id',\n label: 'Workflow ID',\n render: (row) => (\n <span className=\"font-mono text-[11px] text-text-secondary\">\n {row.workflow_id.length > 40\n ? `${row.workflow_id.slice(0, 40)}...`\n : row.workflow_id}\n </span>\n ),\n },\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-28',\n },\n {\n key: 'created_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.created_at} />,\n className: 'w-32',\n },\n];\n"],"names":["CRON_DESCRIPTIONS","describeCron","expr","COMMON_PATTERNS","extractFormFields","envelope","data","entries","v","key","value","jobColumns","row","jsxDEV","this","StatusBadge","TimeAgo"],"mappings":"gIAOA,MAAMA,EAA4C,CAChD,YAAa,eACb,cAAe,kBACf,eAAgB,mBAChB,eAAgB,mBAChB,YAAa,aACb,cAAe,gBACf,cAAe,gBACf,eAAgB,iBAChB,YAAa,oBACb,YAAa,gBACb,cAAe,mBACf,YAAa,2BACb,YAAa,4BACb,YAAa,eACf,EAEO,SAASC,EAAaC,EAAsB,CACjD,OAAOF,EAAkBE,CAAI,GAAK,EACpC,CAEO,MAAMC,EAAsC,CACjD,CAAC,eAAgB,cAAc,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,cAAc,CAC9B,EAOO,SAASC,EACdC,EACuD,CACvD,MAAMC,EAAOD,GAAA,YAAAA,EAAU,KACvB,GAAI,CAACC,GAAQ,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,EAAG,OAAO,KACrE,MAAMC,EAAU,OAAO,QAAQD,CAA+B,EAM9D,OALIC,EAAQ,SAAW,GAKnB,CAHcA,EAAQ,MACxB,CAAC,EAAGC,CAAC,IAAM,OAAOA,GAAM,UAAY,OAAOA,GAAM,UAAY,OAAOA,GAAM,WAAaA,IAAM,IAAA,EAExE,KAChBD,EAAQ,IAAI,CAAC,CAACE,EAAKC,CAAK,KAAO,CACpC,IAAAD,EACA,MAAOC,IAAU,KAAO,GAAK,OAAOA,CAAK,EACzC,KAAMA,IAAU,KAAO,SAAW,OAAOA,CAAA,EACzC,CACJ,CAIO,MAAMC,EAA8B,CACzC,CACE,IAAK,cACL,MAAO,cACP,OAASC,GACPC,EAAAA,OAAC,QAAK,UAAU,4CACb,WAAI,YAAY,OAAS,GACtB,GAAGD,EAAI,YAAY,MAAM,EAAG,EAAE,CAAC,MAC/BA,EAAI,aAHV,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAAE,MAIA,CAAA,EAGJ,CACE,IAAK,SACL,MAAO,SACP,OAASF,YAASG,EAAA,CAAY,OAAQH,EAAI,MAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAAiC,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASF,YAASI,EAAA,CAAQ,KAAMJ,EAAI,UAAA,EAAnB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAA+B,EAChD,UAAW,MAAA,CAEf"}
1
+ {"version":3,"file":"helpers-B1BDxBZd.js","sources":["../../src/pages/workflows/cron/helpers.tsx"],"sourcesContent":["import type { LTJob } from '../../../api/types';\nimport type { Column } from '../../../components/common/data/DataTable';\nimport { TimeAgo } from '../../../components/common/display/TimeAgo';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\n// -- Cron descriptions -------------------------------------------------------\n\nconst CRON_DESCRIPTIONS: Record<string, string> = {\n '* * * * *': 'Every minute',\n '*/5 * * * *': 'Every 5 minutes',\n '*/15 * * * *': 'Every 15 minutes',\n '*/30 * * * *': 'Every 30 minutes',\n '0 * * * *': 'Every hour',\n '0 */2 * * *': 'Every 2 hours',\n '0 */6 * * *': 'Every 6 hours',\n '0 */12 * * *': 'Every 12 hours',\n '0 0 * * *': 'Daily at midnight',\n '0 9 * * *': 'Daily at 9 AM',\n '0 9 * * 1-5': 'Weekdays at 9 AM',\n '0 0 * * 0': 'Weekly (Sunday midnight)',\n '0 0 1 * *': 'Monthly (1st at midnight)',\n '0 2 * * *': 'Daily at 2 AM',\n};\n\nexport function describeCron(expr: string): string {\n return CRON_DESCRIPTIONS[expr] ?? '';\n}\n\nexport const COMMON_PATTERNS: [string, string][] = [\n ['*/15 * * * *', 'Every 15 min'],\n ['0 * * * *', 'Every hour'],\n ['0 */6 * * *', 'Every 6 hours'],\n ['0 9 * * *', 'Daily 9 AM'],\n ['0 9 * * 1-5', 'Weekdays 9 AM'],\n ['0 0 * * 0', 'Weekly (Sun)'],\n];\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n\n// -- Envelope helpers ---------------------------------------------------------\n\n/** Extract simple string/number/boolean keys from `data` for form view. */\nexport function extractFormFields(\n envelope: Record<string, unknown>,\n): { key: string; value: string; type: string }[] | null {\n const data = envelope?.data;\n if (!data || typeof data !== 'object' || Array.isArray(data)) return null;\n const entries = Object.entries(data as Record<string, unknown>);\n if (entries.length === 0) return null;\n // Only show form if all values are scalar\n const allScalar = entries.every(\n ([, v]) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null,\n );\n if (!allScalar) return null;\n return entries.map(([key, value]) => ({\n key,\n value: value === null ? '' : String(value),\n type: value === null ? 'string' : typeof value,\n }));\n}\n\n// -- Recent jobs table columns ------------------------------------------------\n\nexport const jobColumns: Column<LTJob>[] = [\n {\n key: 'workflow_id',\n label: 'Workflow ID',\n render: (row) => (\n <span className=\"font-mono text-[11px] text-text-secondary\">\n {row.workflow_id.length > 40\n ? `${row.workflow_id.slice(0, 40)}...`\n : row.workflow_id}\n </span>\n ),\n },\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-28',\n },\n {\n key: 'created_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.created_at} />,\n className: 'w-32',\n },\n];\n"],"names":["CRON_DESCRIPTIONS","describeCron","expr","COMMON_PATTERNS","extractFormFields","envelope","data","entries","v","key","value","jobColumns","row","jsxDEV","this","StatusBadge","TimeAgo"],"mappings":"gIAOA,MAAMA,EAA4C,CAChD,YAAa,eACb,cAAe,kBACf,eAAgB,mBAChB,eAAgB,mBAChB,YAAa,aACb,cAAe,gBACf,cAAe,gBACf,eAAgB,iBAChB,YAAa,oBACb,YAAa,gBACb,cAAe,mBACf,YAAa,2BACb,YAAa,4BACb,YAAa,eACf,EAEO,SAASC,EAAaC,EAAsB,CACjD,OAAOF,EAAkBE,CAAI,GAAK,EACpC,CAEO,MAAMC,EAAsC,CACjD,CAAC,eAAgB,cAAc,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,YAAY,EAC1B,CAAC,cAAe,eAAe,EAC/B,CAAC,YAAa,cAAc,CAC9B,EAOO,SAASC,EACdC,EACuD,CACvD,MAAMC,EAAOD,GAAA,YAAAA,EAAU,KACvB,GAAI,CAACC,GAAQ,OAAOA,GAAS,UAAY,MAAM,QAAQA,CAAI,EAAG,OAAO,KACrE,MAAMC,EAAU,OAAO,QAAQD,CAA+B,EAM9D,OALIC,EAAQ,SAAW,GAKnB,CAHcA,EAAQ,MACxB,CAAC,EAAGC,CAAC,IAAM,OAAOA,GAAM,UAAY,OAAOA,GAAM,UAAY,OAAOA,GAAM,WAAaA,IAAM,IAAA,EAExE,KAChBD,EAAQ,IAAI,CAAC,CAACE,EAAKC,CAAK,KAAO,CACpC,IAAAD,EACA,MAAOC,IAAU,KAAO,GAAK,OAAOA,CAAK,EACzC,KAAMA,IAAU,KAAO,SAAW,OAAOA,CAAA,EACzC,CACJ,CAIO,MAAMC,EAA8B,CACzC,CACE,IAAK,cACL,MAAO,cACP,OAASC,GACPC,EAAAA,OAAC,QAAK,UAAU,4CACb,WAAI,YAAY,OAAS,GACtB,GAAGD,EAAI,YAAY,MAAM,EAAG,EAAE,CAAC,MAC/BA,EAAI,aAHV,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,CAAA,EAAAE,MAIA,CAAA,EAGJ,CACE,IAAK,SACL,MAAO,SACP,OAASF,YAASG,EAAA,CAAY,OAAQH,EAAI,MAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAAiC,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASF,YAASI,EAAA,CAAQ,KAAMJ,EAAI,UAAA,EAAnB,OAAA,GAAA,CAAA,SAAA,sDAAA,WAAA,GAAA,aAAA,EAAA,EAAAE,MAA+B,EAChD,UAAW,MAAA,CAEf"}
@@ -1,2 +1,2 @@
1
- import{i as a,j as s}from"./index-DnmZbNxk.js";import{B as i}from"./BotPicker-B4UxHcek.js";import{a2 as c,a3 as l}from"./vendor-icons-D1DdudfH.js";function f({selected:e,onChange:o}){const{user:t,isSuperAdmin:r,hasRoleType:n}=a(),m=r||n("admin");return s.jsxDEV("div",{className:"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20",children:m?s.jsxDEV("div",{className:"space-y-1",children:[s.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Run as"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:18,columnNumber:11},this),s.jsxDEV(i,{selected:e,onChange:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:17,columnNumber:9},this):s.jsxDEV("div",{className:"flex items-center gap-1.5",children:e?s.jsxDEV(s.Fragment,{children:[s.jsxDEV(c,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:25,columnNumber:15},this),s.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",s.jsxDEV("span",{className:"font-medium text-accent font-mono",children:e},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:27,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:26,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:24,columnNumber:13},this):s.jsxDEV(s.Fragment,{children:[s.jsxDEV(l,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:32,columnNumber:15},this),s.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",s.jsxDEV("span",{className:"font-medium text-accent",children:(t==null?void 0:t.displayName)||(t==null?void 0:t.userId)||"you"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:34,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:33,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:31,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:22,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:15,columnNumber:5},this)}const b=["Describe","Discover","Compile","Deploy","Test","Verify"];function N(e){return e?e.status==="completed"?"completed":e.status==="failed"?"failed":"in_progress":"pending"}function x(e){const o=e.match(/```json\s*([\s\S]*?)```/)||e.match(/\{[\s\S]*?\n\}/);if(!o)return null;try{return JSON.parse((o[1]??o[0]).trim())}catch{return null}}function h(e){if(!(e!=null&&e.properties))return{};const o={};for(const[t,r]of Object.entries(e.properties)){const n=r;n.default!==void 0?o[t]=n.default:n.type==="string"?o[t]="":n.type==="number"||n.type==="integer"?o[t]=n.minimum??0:n.type==="boolean"?o[t]=!1:n.type==="object"?o[t]={}:n.type==="array"?o[t]=[]:o[t]=null}return o}export{f as R,b as S,h as b,x as e,N as m};
2
- //# sourceMappingURL=helpers-C1jaRD-d.js.map
1
+ import{i as a,j as s}from"./index-BYZX9tOb.js";import{B as i}from"./BotPicker-Cg5iNEkm.js";import{a2 as c,a3 as l}from"./vendor-icons-T4r2DSPD.js";function f({selected:e,onChange:o}){const{user:t,isSuperAdmin:r,hasRoleType:n}=a(),m=r||n("admin");return s.jsxDEV("div",{className:"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20",children:m?s.jsxDEV("div",{className:"space-y-1",children:[s.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Run as"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:18,columnNumber:11},this),s.jsxDEV(i,{selected:e,onChange:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:17,columnNumber:9},this):s.jsxDEV("div",{className:"flex items-center gap-1.5",children:e?s.jsxDEV(s.Fragment,{children:[s.jsxDEV(c,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:25,columnNumber:15},this),s.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",s.jsxDEV("span",{className:"font-medium text-accent font-mono",children:e},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:27,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:26,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:24,columnNumber:13},this):s.jsxDEV(s.Fragment,{children:[s.jsxDEV(l,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:32,columnNumber:15},this),s.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",s.jsxDEV("span",{className:"font-medium text-accent",children:(t==null?void 0:t.displayName)||(t==null?void 0:t.userId)||"you"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:34,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:33,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:31,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:22,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:15,columnNumber:5},this)}const b=["Describe","Discover","Compile","Deploy","Test","Verify"];function N(e){return e?e.status==="completed"?"completed":e.status==="failed"?"failed":"in_progress":"pending"}function x(e){const o=e.match(/```json\s*([\s\S]*?)```/)||e.match(/\{[\s\S]*?\n\}/);if(!o)return null;try{return JSON.parse((o[1]??o[0]).trim())}catch{return null}}function h(e){if(!(e!=null&&e.properties))return{};const o={};for(const[t,r]of Object.entries(e.properties)){const n=r;n.default!==void 0?o[t]=n.default:n.type==="string"?o[t]="":n.type==="number"||n.type==="integer"?o[t]=n.minimum??0:n.type==="boolean"?o[t]=!1:n.type==="object"?o[t]={}:n.type==="array"?o[t]=[]:o[t]=null}return o}export{f as R,b as S,h as b,x as e,N as m};
2
+ //# sourceMappingURL=helpers-BCix9c_m.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers-C1jaRD-d.js","sources":["../../src/components/common/form/RunAsSelector.tsx","../../src/pages/mcp/mcp-query-detail/helpers.ts"],"sourcesContent":["import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from './BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\n\ninterface RunAsSelectorProps {\n selected: string;\n onChange: (botExternalId: string) => void;\n}\n\nexport function RunAsSelector({ selected, onChange }: RunAsSelectorProps) {\n const { user, isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n\n return (\n <div className=\"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20\">\n {isAdmin ? (\n <div className=\"space-y-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Run as</label>\n <BotPicker selected={selected} onChange={onChange} />\n </div>\n ) : (\n <div className=\"flex items-center gap-1.5\">\n {selected ? (\n <>\n <Bot className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent font-mono\">{selected}</span>\n </span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent\">{user?.displayName || user?.userId || 'you'}</span>\n </span>\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n","// ── Shared helpers for MCP Query Detail wizard panels ────────────────────────\n\nexport type Step = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const STEP_LABELS_BASE = ['Describe', 'Discover', 'Compile', 'Deploy', 'Test', 'Verify'] as const;\n\nexport function mapStatus(exec: { status?: string } | undefined): string {\n if (!exec) return 'pending';\n if (exec.status === 'completed') return 'completed';\n if (exec.status === 'failed') return 'failed';\n return 'in_progress';\n}\n\nexport function extractJsonFromSummary(summary: string): Record<string, unknown> | null {\n const match = summary.match(/```json\\s*([\\s\\S]*?)```/) || summary.match(/\\{[\\s\\S]*?\\n\\}/);\n if (!match) return null;\n try { return JSON.parse((match[1] ?? match[0]).trim()); } catch { return null; }\n}\n\n// ── Helpers migrated from yaml-workflow-detail ───────────────────────────────\n\nexport type Section = 'invoke' | 'tools' | 'config';\n\nexport function buildSkeleton(schema: Record<string, any>): Record<string, any> {\n if (!schema?.properties) return {};\n const result: Record<string, any> = {};\n for (const [key, prop] of Object.entries(schema.properties)) {\n const p = prop as any;\n if (p.default !== undefined) result[key] = p.default;\n else if (p.type === 'string') result[key] = '';\n else if (p.type === 'number' || p.type === 'integer') result[key] = p.minimum ?? 0;\n else if (p.type === 'boolean') result[key] = false;\n else if (p.type === 'object') result[key] = {};\n else if (p.type === 'array') result[key] = [];\n else result[key] = null;\n }\n return result;\n}\n\nexport function inferFieldType(schemaProp: any): string {\n if (!schemaProp) return 'string';\n return schemaProp.type || 'string';\n}\n\nexport const metadataLabels: Record<string, string> = {\n app: 'MCP Workflow Server', tpc: 'MCP Workflow Tool', vrs: 'Version', ngn: 'Engine ID',\n jid: 'Job ID', gid: 'Run ID', aid: 'Activity ID', ts: 'Time Series',\n jc: 'Created', ju: 'Updated', trc: 'Trace ID', js: 'Job Status',\n};\n\nexport const jobStatusLabels: Record<number, string> = { 0: 'Completed', 1: 'Pending', 2: 'Error' };\n\nexport function parseCompactTimestamp(val: string): string {\n const match = val.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)$/);\n if (!match) return val;\n const [, y, mo, d, h, mi, s, ms] = match;\n return `${y}-${mo}-${d} ${h}:${mi}:${s}.${ms}`;\n}\n\nexport function formatMetadataValue(key: string, value: unknown): string {\n if (key === 'js' && typeof value === 'number') return jobStatusLabels[value] ?? `Unknown (${value})`;\n if ((key === 'jc' || key === 'ju') && typeof value === 'string') return parseCompactTimestamp(value);\n return String(value ?? '');\n}\n\nexport function sourceLabel(s: string | undefined) {\n if (s === 'llm') return 'LLM';\n if (s === 'db') return 'DB';\n return 'MCP';\n}\n\nexport function sourceColor(s: string | undefined) {\n if (s === 'llm') return 'bg-purple-500/10 text-purple-400 border-purple-500/20';\n return 'bg-accent-primary/10 text-accent border-accent-primary/20';\n}\n"],"names":["RunAsSelector","selected","onChange","user","isSuperAdmin","hasRoleType","useAuth","isAdmin","jsxDEV","BotPicker","Fragment","Bot","UserCircle","STEP_LABELS_BASE","mapStatus","exec","extractJsonFromSummary","summary","match","buildSkeleton","schema","result","key","prop","p"],"mappings":"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"}
1
+ {"version":3,"file":"helpers-BCix9c_m.js","sources":["../../src/components/common/form/RunAsSelector.tsx","../../src/pages/mcp/mcp-query-detail/helpers.ts"],"sourcesContent":["import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from './BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\n\ninterface RunAsSelectorProps {\n selected: string;\n onChange: (botExternalId: string) => void;\n}\n\nexport function RunAsSelector({ selected, onChange }: RunAsSelectorProps) {\n const { user, isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n\n return (\n <div className=\"px-2.5 py-2 rounded-md bg-accent/[0.06] border border-accent/20\">\n {isAdmin ? (\n <div className=\"space-y-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Run as</label>\n <BotPicker selected={selected} onChange={onChange} />\n </div>\n ) : (\n <div className=\"flex items-center gap-1.5\">\n {selected ? (\n <>\n <Bot className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent font-mono\">{selected}</span>\n </span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent\">{user?.displayName || user?.userId || 'you'}</span>\n </span>\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n","// ── Shared helpers for MCP Query Detail wizard panels ────────────────────────\n\nexport type Step = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport const STEP_LABELS_BASE = ['Describe', 'Discover', 'Compile', 'Deploy', 'Test', 'Verify'] as const;\n\nexport function mapStatus(exec: { status?: string } | undefined): string {\n if (!exec) return 'pending';\n if (exec.status === 'completed') return 'completed';\n if (exec.status === 'failed') return 'failed';\n return 'in_progress';\n}\n\nexport function extractJsonFromSummary(summary: string): Record<string, unknown> | null {\n const match = summary.match(/```json\\s*([\\s\\S]*?)```/) || summary.match(/\\{[\\s\\S]*?\\n\\}/);\n if (!match) return null;\n try { return JSON.parse((match[1] ?? match[0]).trim()); } catch { return null; }\n}\n\n// ── Helpers migrated from yaml-workflow-detail ───────────────────────────────\n\nexport type Section = 'invoke' | 'tools' | 'config';\n\nexport function buildSkeleton(schema: Record<string, any>): Record<string, any> {\n if (!schema?.properties) return {};\n const result: Record<string, any> = {};\n for (const [key, prop] of Object.entries(schema.properties)) {\n const p = prop as any;\n if (p.default !== undefined) result[key] = p.default;\n else if (p.type === 'string') result[key] = '';\n else if (p.type === 'number' || p.type === 'integer') result[key] = p.minimum ?? 0;\n else if (p.type === 'boolean') result[key] = false;\n else if (p.type === 'object') result[key] = {};\n else if (p.type === 'array') result[key] = [];\n else result[key] = null;\n }\n return result;\n}\n\nexport function inferFieldType(schemaProp: any): string {\n if (!schemaProp) return 'string';\n return schemaProp.type || 'string';\n}\n\nexport const metadataLabels: Record<string, string> = {\n app: 'MCP Workflow Server', tpc: 'MCP Workflow Tool', vrs: 'Version', ngn: 'Engine ID',\n jid: 'Job ID', gid: 'Run ID', aid: 'Activity ID', ts: 'Time Series',\n jc: 'Created', ju: 'Updated', trc: 'Trace ID', js: 'Job Status',\n};\n\nexport const jobStatusLabels: Record<number, string> = { 0: 'Completed', 1: 'Pending', 2: 'Error' };\n\nexport function parseCompactTimestamp(val: string): string {\n const match = val.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)$/);\n if (!match) return val;\n const [, y, mo, d, h, mi, s, ms] = match;\n return `${y}-${mo}-${d} ${h}:${mi}:${s}.${ms}`;\n}\n\nexport function formatMetadataValue(key: string, value: unknown): string {\n if (key === 'js' && typeof value === 'number') return jobStatusLabels[value] ?? `Unknown (${value})`;\n if ((key === 'jc' || key === 'ju') && typeof value === 'string') return parseCompactTimestamp(value);\n return String(value ?? '');\n}\n\nexport function sourceLabel(s: string | undefined) {\n if (s === 'llm') return 'LLM';\n if (s === 'db') return 'DB';\n return 'MCP';\n}\n\nexport function sourceColor(s: string | undefined) {\n if (s === 'llm') return 'bg-purple-500/10 text-purple-400 border-purple-500/20';\n return 'bg-accent-primary/10 text-accent border-accent-primary/20';\n}\n"],"names":["RunAsSelector","selected","onChange","user","isSuperAdmin","hasRoleType","useAuth","isAdmin","jsxDEV","BotPicker","Fragment","Bot","UserCircle","STEP_LABELS_BASE","mapStatus","exec","extractJsonFromSummary","summary","match","buildSkeleton","schema","result","key","prop","p"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{b as O,j as e,u as Ve,C as W,J as je}from"./index-DnmZbNxk.js";import{u as z,c as ne,b as De,a as l}from"./vendor-query-DLp59M9_.js";import{P as ke}from"./PageHeaderWithStats-DCa2eZh2.js";import{D as le}from"./DataTable-DyIXg-tQ.js";import{C as U}from"./CollapsibleSection-BBexNWVd.js";import{F as we,b as Qe}from"./FilterBar-BTiaAhCx.js";import{u as Se}from"./useFilterParams-BUyLHcx_.js";import{R as oe,a as L}from"./RowActions-DIzJCwqR.js";import{ai as J,aj as G,R as Te,S as Pe,ak as Fe,E as Me,i as Re,A as _e,Z as $e,al as Ae,P as Oe,a7 as Ie}from"./vendor-icons-D1DdudfH.js";import{M as Be}from"./Modal-CaJ0gTEa.js";import{T as We}from"./TaskQueuePill-Q7DGoysj.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-DlMImvgm.js";function Le(){return O("/controlplane/apps")}function Je(t){return O(`/controlplane/rollcall?app_id=${encodeURIComponent(t)}`)}function qe(t){return O("/controlplane/throttle",{method:"POST",body:JSON.stringify(t)})}function Ke(t){return O("/controlplane/subscribe",{method:"POST",body:JSON.stringify(t)})}function Ue(t,a,s){let r=`/controlplane/streams?app_id=${encodeURIComponent(t)}&duration=${encodeURIComponent(a)}`;return O(r)}function ie(){return z({queryKey:["controlplane","apps"],queryFn:Le,staleTime:6e4})}function Ge(t,a){return z({queryKey:["controlplane","rollcall",t],queryFn:()=>Je(t),enabled:!!t,refetchInterval:a})}function me(){const t=De();return ne({mutationFn:qe,onSuccess:()=>{setTimeout(()=>{t.invalidateQueries({queryKey:["controlplane","rollcall"]})},1500)}})}function ze(t,a,s,r){return z({queryKey:["controlplane","streams",t,a,""],queryFn:()=>Ue(t,a),enabled:!!t,staleTime:15e3,refetchInterval:r})}function He(){return ne({mutationFn:Ke})}const Ye=[{label:"15m",value:"15m"},{label:"30m",value:"30m"},{label:"1h",value:"1h"},{label:"1d",value:"1d"},{label:"7d",value:"7d"}],Xe={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"},Ze=250;function $(t){return!!t.worker_topic}function A(t){return typeof t.throttle=="number"&&t.throttle!==0}function H(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 ce(t,a){if(!t||!a)return"—";const s=parseFloat(t),r=parseFloat(a);return isNaN(s)||isNaN(r)?"—":`${(s-r).toFixed(1)} / ${s.toFixed(1)} GB`}function ue(t){return t.replace(/^hmsh:[^:]+:x:/,"")||"(engine)"}const de=[{key:"pong",label:"Pong",description:"Roll call responses"},{key:"ping",label:"Ping",description:"Roll call 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 k(t){return`${t.engine_id}-${t.worker_topic||"engine"}`}function et(t){const a=new Map;for(const s of t){if(!s.worker_topic)continue;const r=s.worker_topic;a.has(r)||a.set(r,[]),a.get(r).push(s)}return a}function tt(t){let a=0,s=0,r=0;for(const o of t)if(o.counts)for(const[n,h]of Object.entries(o.counts))a+=h,n==="200"?s+=h:n==="500"&&(r+=h);return{total:a,success:s,errors:r}}function at(){return{key:"throttle",label:"Throttle",render:t=>{const a=t.throttle;return a===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:23,columnNumber:28},this):a&&a>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:24,columnNumber:30},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:25,columnNumber:14},this)},className:"w-24"}}function st(){return{key:"memory",label:"Memory",render:t=>{var a,s;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((a=t.system)==null?void 0:a.TotalMemoryGB,(s=t.system)==null?void 0:s.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:36,columnNumber:7},this)},className:"w-36"}}function rt(t,a){return{key:"actions",label:"",render:s=>e.jsxDEV(oe,{children:[A(s)&&e.jsxDEV(L,{icon:G,title:"Resume (remove throttle)",onClick:()=>a(s),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>t(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:61,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:52,columnNumber:7},this),className:"w-16"}}function nt(t){const a=t.profiles.some(s=>t.selectedIds.has(k(s)));return[{key:"select",label:e.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[e.jsxDEV("input",{type:"checkbox",checked:t.profiles.length>0&&t.profiles.every(s=>t.selectedIds.has(k(s))),onChange:t.toggleAll,className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:76,columnNumber:11},this),a&&t.onBulkThrottle&&e.jsxDEV(J,{className:"w-[14px] h-[14px] text-text-tertiary hover:text-accent cursor-pointer",strokeWidth:1.5,onClick:s=>{s.stopPropagation(),t.onBulkThrottle()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:83,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:75,columnNumber:9},this),render:s=>e.jsxDEV("input",{type:"checkbox",checked:t.selectedIds.has(k(s)),onChange:r=>{r.stopPropagation(),t.toggleCheckbox(s)},onClick:r=>r.stopPropagation(),className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:92,columnNumber:9},this),className:"w-16"},{key:"engine_id",label:"Engine ID",render:s=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:s.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:106,columnNumber:9},this),className:"w-48"},at(),{key:"processed",label:"Processed",render:s=>{const r=tt([s]);return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:r.total.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:116,columnNumber:16},this)},className:"w-24"},st(),rt(t.onRowThrottle,t.onResumeThrottle)]}function lt({activeAppId:t,allProfiles:a,profiles:s}){const r=me(),[o,n]=l.useState(new Set),[h,i]=l.useState(!1),[f,m]=l.useState([]);l.useEffect(()=>{n(new Set)},[t]);const V=l.useCallback(p=>{n(w=>{const E=new Set(w),Q=k(p);return E.has(Q)?E.delete(Q):E.add(Q),E})},[]),y=l.useCallback(()=>{o.size===s.length?n(new Set):n(new Set(s.map(k)))},[s,o.size]),d=l.useMemo(()=>{const p=s.filter(g=>o.has(k(g)));if(p.length===0)return[];if(p.length===a.length)return[{label:"Entire Mesh"}];const w=p.filter(g=>!$(g)),E=p.filter($),Q=[];for(const g of w)Q.push({label:`Engine ${g.engine_id}`,guid:g.engine_id});const T=new Map;for(const g of E){const S=g.worker_topic;T.has(S)||T.set(S,[]),T.get(S).push(g)}for(const[g,S]of T){const R=a.filter(F=>F.worker_topic===g);if(S.length===R.length)Q.push({label:g,topic:g});else for(const F of S)Q.push({label:`${g} ${F.engine_id}`,guid:F.engine_id})}return Q},[s,a,o]);return{selectedIds:o,setSelectedIds:n,toggleCheckbox:V,toggleAll:y,throttleModalOpen:h,throttleTargets:f,selectedThrottleTargets:d,throttleMutation:r,handleBulkThrottle:p=>{const w=f.length>0?f:d;for(const E of w)r.mutate({appId:t,throttle:p,...E.topic?{topic:E.topic}:{},...E.guid?{guid:E.guid}:{}});i(!1),m([])},handleRowClick:p=>{const w=$(p)?`${p.worker_topic} ${p.engine_id}`:`Engine ${p.engine_id}`;m([{label:w,guid:p.engine_id}]),i(!0)},handleBulkThrottleOpen:()=>{m(d),i(!0)},handleResumeThrottle:p=>{r.mutate({appId:t,throttle:0,guid:p.engine_id})},handleResumeQueue:p=>{r.mutate({appId:t,throttle:0,topic:p})},handleQueueThrottle:p=>{m([{label:p,topic:p}]),i(!0)},closeThrottleModal:()=>{i(!1),m([])}}}const ot=[{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 it({target:t}){const a=t.label==="Entire Mesh",s=t.label==="All Engines"||t.label.startsWith("Engine "),r=a?"bg-status-error/10 text-status-error":s?"bg-blue-500/10 text-blue-500":"bg-accent/[0.06] text-text-secondary",o=t.guid?"guid":t.topic?"topic":"mesh";return e.jsxDEV("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.jsxDEV("span",{className:"text-[8px] opacity-50",children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:35,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:33,columnNumber:5},this)}function mt({open:t,onClose:a,targets:s,onApply:r,isPending:o}){const[n,h]=l.useState("0");return e.jsxDEV(Be,{open:t,onClose:a,title:"Adjust Throttle",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Targets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:s.map((i,f)=>e.jsxDEV(it,{target:i},i.guid||i.topic||f,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:50,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:48,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:46,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Presets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:ot.map(i=>e.jsxDEV("button",{onClick:()=>{h(i.ms===-1?"-1":String(i.ms/1e3)),r(i.ms)},disabled:o,className:`px-3 py-1.5 text-xs rounded transition-colors ${i.ms===-1?"bg-status-error/10 text-status-error hover:bg-status-error/20":i.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:i.label},i.label,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:59,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Custom (seconds between messages)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:78,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("input",{type:"number",step:"0.1",min:"-1",value:n,onChange:i=>h(i.target.value),className:"input text-xs py-1.5 px-3 w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{const i=parseFloat(n);isNaN(i)||r(i===-1?-1:Math.round(i*1e3))},disabled:o,className:"btn-primary text-xs py-1.5 px-4 disabled:opacity-50",children:"Apply"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:90,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"0 = resume, -1 = pause indefinitely"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:45,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:44,columnNumber:5},this)}function ct({byStream:t,onNodeFilter:a}){const[s,r]=l.useState(!1);if(l.useEffect(()=>{r(!1);const m=requestAnimationFrame(()=>r(!0));return()=>cancelAnimationFrame(m)},[t]),t.length===0)return e.jsxDEV("p",{className:"text-xs text-text-tertiary py-4 text-center",children:"No activity in this period"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:26,columnNumber:12},this);const o=t.filter(m=>m.stream_type==="engine"),n=t.filter(m=>m.stream_type==="worker"),h=Math.max(...t.map(m=>m.count)),i=m=>{const V=h>0?m.count/h*100:0,y=m.stream_type==="engine",d=y?"(all engines)":ue(m.stream_name),x=y?"bg-blue-500/70":"bg-accent/60",C=y?"text-blue-500":"text-text-tertiary";return e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`text-[9px] font-mono ${C} w-36 truncate text-right shrink-0`,title:m.stream_name,children:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 h-4 bg-surface-sunken rounded overflow-hidden",children:e.jsxDEV("div",{className:`h-full ${x} rounded transition-all duration-500 ease-out`,style:{width:s?`${V}%`:"0%"}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:48,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:47,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] font-mono tabular-nums text-text-secondary w-12 text-right shrink-0",children:m.count.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:53,columnNumber:9},this)]},`${m.stream_type}-${m.stream_name}`,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:40,columnNumber:7},this)},f="text-[9px] uppercase tracking-widest font-semibold mb-1 cursor-pointer hover:underline";return e.jsxDEV("div",{className:"space-y-1.5",children:[o.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-blue-500/70 hover:text-blue-500`,onClick:()=>a==null?void 0:a("engines"),children:"Engine Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:66,columnNumber:11},this),o.map(i),n.length>0&&e.jsxDEV("div",{className:"h-2"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:73,columnNumber:40},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:65,columnNumber:9},this),n.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-accent/70 hover:text-accent`,onClick:()=>a==null?void 0:a("workers"),children:"Worker Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:78,columnNumber:11},this),n.map(i)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:63,columnNumber:5},this)}let ut=0;function dt({event:t}){var r,o,n;const[a,s]=l.useState(!1);return e.jsxDEV("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxDEV("button",{onClick:()=>s(!a),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsxDEV("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"})},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:27,columnNumber:9},this),e.jsxDEV("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${Xe[t.type]||"text-text-tertiary"} bg-surface-sunken whitespace-nowrap shrink-0`,children:t.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:30,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono flex-1 min-w-0 break-all",children:[(r=t.data)!=null&&r.guid?String(t.data.guid):"",(o=t.data)!=null&&o.topic?` ${String(t.data.topic)}`:"",t.type==="throttle"?` → ${H((n=t.data)==null?void 0:n.throttle)}`:""]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${a?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:42,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:38,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV("div",{className:"pb-2",children:e.jsxDEV(je,{data:t.data},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:47,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:46,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:45,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:22,columnNumber:5},this)}function pt({channels:t,onToggle:a,customFilter:s,onCustomFilterChange:r}){return e.jsxDEV("div",{className:"space-y-3 pb-3 border-b border-surface-border mb-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Channels"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:67,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary",children:"Unchecked channels are dropped before buffering"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:70,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:66,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-1",children:de.map(o=>e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer py-0.5",children:[e.jsxDEV("input",{type:"checkbox",checked:t.has(o.key),onChange:()=>a(o.key),className:"w-3 h-3 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",title:o.description,children:o.label},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:83,columnNumber:13},this)]},o.key,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:76,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Text Filter"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:90,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s,onChange:o=>r(o.target.value),placeholder:"pong",className:"input text-[10px] font-mono py-1 px-2 w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:93,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mt-1",children:["Filter by event type, e.g. ",e.jsxDEV("span",{className:"font-mono",children:"pong"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:38},this),", ",e.jsxDEV("span",{className:"font-mono",children:"throttle"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:79},this),", or any text in the event data."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:65,columnNumber:5},this)}function ht({bridgeActive:t}){const[a,s]=l.useState(!1),[r,o]=l.useState(!1),[n,h]=l.useState([]),[i,f]=l.useState(()=>new Set(de.map(u=>u.key))),[m,V]=l.useState(""),y=l.useRef(i);l.useEffect(()=>{y.current=i},[i]);const d=l.useRef(m);l.useEffect(()=>{d.current=m},[m]);const x=u=>{f(N=>{const D=new Set(N);return D.has(u)?D.delete(u):D.add(u),D})};Ve("lt.events.mesh.>",l.useCallback(u=>{var j;const N=((j=u.type)==null?void 0:j.replace("mesh.",""))||"unknown";if(!y.current.has(N))return;const D=d.current;D&&!`${N} ${JSON.stringify(u.data||u)}`.toLowerCase().includes(D.toLowerCase())||h(P=>[{id:++ut,type:N,timestamp:u.timestamp||new Date().toISOString(),data:u.data||u},...P].slice(0,Ze))},[]));const C=()=>h([]);return e.jsxDEV("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.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Event Stream"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV(Te,{className:`w-3 h-3 ${t?"text-status-success animate-pulse":"text-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:172,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:t?"Live":"..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("span",{className:"ml-auto flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>{s(u=>!u),o(!1)},className:`p-1 rounded transition-colors ${a?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"Configure channels",children:e.jsxDEV(Pe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:183,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:178,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>{o(u=>!u),s(!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.jsxDEV(Fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:185,columnNumber:11},this),n.length>0&&e.jsxDEV("button",{onClick:C,className:"p-1 rounded text-text-tertiary hover:text-text-primary transition-colors",title:"Clear events",children:e.jsxDEV(Me,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:198,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:193,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:177,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV(pt,{channels:i,onToggle:x,customFilter:m,onCustomFilterChange:V},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:206,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:205,columnNumber:7},this),e.jsxDEV(W,{open:r,children:e.jsxDEV("div",{className:"pb-3 border-b border-surface-border mb-3",children:e.jsxDEV("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(n.slice(0,50),null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:217,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:216,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:215,columnNumber:7},this),n.length>0&&e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mb-2",children:[n.length," events"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:225,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary py-6 text-center",children:t?"Waiting for events...":"Subscribing..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:233,columnNumber:11},this):n.map(u=>e.jsxDEV(dt,{event:u},u.id,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:238,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:231,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:166,columnNumber:5},this)}function bt({queue:t,workers:a,expanded:s,onToggle:r,onWorkerClick:o,onResumeThrottle:n,onQueueThrottle:h,onResumeQueue:i,byStream:f,activeDuration:m}){const V=l.useMemo(()=>{const d=f.find(x=>x.stream_type==="worker"&&ue(x.stream_name)===t);return(d==null?void 0:d.count)??0},[f,t]),y=l.useMemo(()=>[{key:"engine_id",label:"Worker ID",render:d=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:d.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:55,columnNumber:9},this),className:"w-48"},{key:"throttle",label:"Throttle",render:d=>{const x=d.throttle;return x===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:66,columnNumber:30},this):x&&x>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(x)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:67,columnNumber:32},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:68,columnNumber:16},this)},className:"w-24"},{key:"memory",label:"Memory",render:d=>{var x,C;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((x=d.system)==null?void 0:x.TotalMemoryGB,(C=d.system)==null?void 0:C.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:76,columnNumber:9},this)},className:"w-36"},{key:"actions",label:"",render:d=>e.jsxDEV(oe,{children:[A(d)&&e.jsxDEV(L,{icon:G,title:"Resume (remove throttle)",onClick:()=>n(d),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:88,columnNumber:13},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>o(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:95,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:86,columnNumber:9},this),className:"w-16"}],[o,n]);return e.jsxDEV("div",{children:[e.jsxDEV("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.jsxDEV(Re,{className:`w-3.5 h-3.5 text-text-tertiary/50 transition-transform duration-200 ${s?"rotate-90":""}`,strokeWidth:2},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:112,columnNumber:9},this),e.jsxDEV(We,{queue:t,size:"sm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:116,columnNumber:9},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV("span",{className:`flex items-center gap-1 text-xs w-24 ${a.some(A)?"text-status-warning":"text-text-tertiary"}`,children:[e.jsxDEV(_e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("span",{className:"font-mono tabular-nums",children:a.length},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:122,columnNumber:11},this),e.jsxDEV("span",{children:"workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:120,columnNumber:9},this),e.jsxDEV("span",{className:"flex items-center gap-1 text-xs font-mono text-text-tertiary w-28 justify-end mr-16",children:V>0?e.jsxDEV(e.Fragment,{children:[e.jsxDEV($e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:129,columnNumber:15},this),V.toLocaleString()," in ",m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary/40",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:133,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:126,columnNumber:9},this),e.jsxDEV("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:[a.some(A)&&e.jsxDEV(G,{className:"w-4 h-4 text-text-tertiary hover:text-status-success",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),i(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:139,columnNumber:13},this),e.jsxDEV(J,{className:"w-4 h-4 text-text-tertiary hover:text-accent",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),h(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:137,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:108,columnNumber:7},this),e.jsxDEV(W,{open:s,children:e.jsxDEV("div",{className:"ml-6",children:e.jsxDEV(le,{columns:y,data:a,keyFn:k,onRowClick:o,emptyMessage:"No workers",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:161,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:160,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:107,columnNumber:5},this)}function xt(){const{data:t}=ie(),a=me(),[s,r]=l.useState(!1),o=(t==null?void 0:t.apps)??[],n=h=>{for(const i of o)a.mutate({appId:i.appId,throttle:h});r(!1)};return s?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-xs text-status-error",children:"Pause all queues?"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:22,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>n(-1),className:"px-2.5 py-1 text-xs rounded-md bg-status-error text-white hover:bg-status-error/90 transition-colors",children:"Confirm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:23,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!1),className:"px-2.5 py-1 text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:29,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:21,columnNumber:7},this):e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("button",{onClick:()=>r(!0),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",title:"Pause all queues",children:[e.jsxDEV(Ae,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:46,columnNumber:9},this),"Pause All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("button",{onClick:()=>n(0),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",title:"Resume all queues",children:[e.jsxDEV(Oe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:54,columnNumber:9},this),"Resume All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:49,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:40,columnNumber:5},this)}function St(){var re;const{data:t}=ie(),a=(t==null?void 0:t.apps)??[],{filters:s,setFilter:r}=Se({filters:{app_id:"",duration:"1h"}}),o=((re=a[0])==null?void 0:re.appId)??"durable",n=s.app_id||o,h=s.duration||"1h",i=He(),f=6e4,{data:m,isLoading:V,error:y,refetch:d,isFetching:x}=Ge(n,f),{data:C}=ze(n,h,void 0,f),u=l.useMemo(()=>[...(m==null?void 0:m.profiles)??[]].sort((b,v)=>{const _=b.worker_topic||b.stream||"",B=v.worker_topic||v.stream||"";return!b.worker_topic&&v.worker_topic?-1:b.worker_topic&&!v.worker_topic?1:_.localeCompare(B)}),[m==null?void 0:m.profiles]),N=l.useMemo(()=>u.filter(c=>!$(c)),[u]),D=l.useMemo(()=>u.filter($),[u]),j=l.useMemo(()=>et(u),[u]),P=u.filter(A).length,p=l.useMemo(()=>{const c=new Set(a.map(b=>b.appId));return n&&c.add(n),[...c].sort().map(b=>({value:b,label:b}))},[a,n]),[w,E]=l.useState(new Set),Q=l.useCallback(c=>{E(b=>{const v=new Set(b);return v.has(c)?v.delete(c):v.add(c),v})},[]),T=j.size>0&&[...j.keys()].every(c=>w.has(c)),g=l.useCallback(()=>{E(T?new Set:new Set(j.keys()))},[T,j]),S="lt:controlplane:collapsed",[R,F]=l.useState(()=>{try{return JSON.parse(localStorage.getItem(S)||"{}")}catch{return{}}}),q=l.useCallback(c=>{F(b=>{const v={...b,[c]:!b[c]};return localStorage.setItem(S,JSON.stringify(v)),v})},[]),{selectedIds:M,setSelectedIds:Y,toggleCheckbox:X,throttleModalOpen:pe,throttleTargets:Z,selectedThrottleTargets:he,throttleMutation:be,handleBulkThrottle:xe,handleRowClick:I,handleBulkThrottleOpen:ee,handleResumeThrottle:K,handleResumeQueue:Ne,handleQueueThrottle:fe,closeThrottleModal:ge}=lt({activeAppId:n,allProfiles:u,profiles:u}),te=l.useCallback(()=>{const c=new Set(N.map(k)),b=N.length>0&&N.every(v=>M.has(k(v)));Y(v=>{const _=new Set(v);for(const B of c)b?_.delete(B):_.add(B);return _})},[N,M,Y]),ae=l.useCallback(()=>{N.filter(b=>M.has(k(b))).length!==0&&ee()},[N,M,ee]),ve=l.useMemo(()=>nt({profiles:N,selectedIds:M,toggleAll:te,toggleCheckbox:X,onRowThrottle:I,onResumeThrottle:K,onBulkThrottle:ae}),[N,M,te,X,I,K,ae]),Ee=l.useMemo(()=>{const c=[{label:"Engines",value:N.length,dotClass:"bg-blue-500"},{label:"Workers",value:D.length,dotClass:"bg-text-secondary"},{label:"Queues",value:j.size}];return P>0&&c.push({label:"Throttled",value:P,dotClass:"bg-status-warning"}),c},[N.length,D.length,j.size,P]),[se,ye]=l.useState(!1),Ce=l.useCallback(()=>{i.mutate({appId:n},{onSuccess:()=>ye(!0)})},[n,i]);return l.useEffect(()=>{!se&&n&&Ce()},[n]),e.jsxDEV("div",{children:[e.jsxDEV(ke,{title:"Task Queues",stats:Ee,actions:e.jsxDEV(xt,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:190,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:187,columnNumber:7},this),e.jsxDEV(we,{actions:e.jsxDEV("div",{className:"flex items-center gap-1",children:Ye.map(c=>e.jsxDEV("button",{onClick:()=>r("duration",c.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${h===c.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:c.label},c.value,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:197,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:195,columnNumber:11},this),children:[e.jsxDEV(Qe,{label:"Application",value:s.app_id,onChange:c=>r("app_id",c),options:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:212,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>d(),disabled:x,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.jsxDEV(Ie,{className:`w-3.5 h-3.5 ${x?"animate-spin":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:223,columnNumber:11},this),"Roll Call"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:218,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:193,columnNumber:7},this),y&&e.jsxDEV("div",{className:"mb-6 px-4 py-3 rounded bg-status-error/10 border border-status-error/20",children:e.jsxDEV("p",{className:"text-xs text-status-error font-medium",children:y.message==="Session expired"?"Session expired — please log in again.":`Failed to load mesh data: ${y.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:231,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:230,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-6",children:[e.jsxDEV("div",{className:"flex flex-col gap-12 mt-10",children:[e.jsxDEV(U,{title:`Stream Volume (${h})`,sectionKey:"volume",isCollapsed:!!R.volume,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(ct,{byStream:(C==null?void 0:C.byStream)??[],onNodeFilter:()=>{},onQueueFilter:()=>{}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:250,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:243,columnNumber:11},this),e.jsxDEV(U,{title:"Worker Queues",sectionKey:"queues",isCollapsed:!!R.queues,onToggle:q,contentClassName:"mt-4 ml-7 flex flex-col gap-0",children:V?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Discovering mesh nodes..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:266,columnNumber:15},this):j.size===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:'No worker queues found. Click "Roll Call" to discover.'},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:268,columnNumber:15},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex justify-end mb-2",children:e.jsxDEV("button",{onClick:g,className:"text-[10px] text-accent hover:underline",children:T?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:272,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:271,columnNumber:17},this),[...j.entries()].sort(([c],[b])=>c.localeCompare(b)).map(([c,b])=>e.jsxDEV(bt,{queue:c,workers:b,expanded:w.has(c),onToggle:Q,onWorkerClick:I,onResumeThrottle:K,onQueueThrottle:fe,onResumeQueue:Ne,byStream:(C==null?void 0:C.byStream)??[],activeDuration:h},c,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:279,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:270,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:258,columnNumber:11},this),e.jsxDEV(U,{title:"Engines",sectionKey:"engines",isCollapsed:!!R.engines,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(le,{columns:ve,data:N,keyFn:k,onRowClick:I,isLoading:V,emptyMessage:V?"Discovering engines...":"No engines found.",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:305,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:298,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:241,columnNumber:9},this),e.jsxDEV(ht,{bridgeActive:se},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:317,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:240,columnNumber:7},this),e.jsxDEV(mt,{open:pe,onClose:ge,targets:Z.length>0?Z:he,onApply:xe,isPending:be.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:320,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:186,columnNumber:5},this)}export{St as ControlPlanePage};
2
- //# sourceMappingURL=index-D_aJBEAG.js.map
1
+ import{b as O,j as e,u as Ve,C as W,J as je}from"./index-BYZX9tOb.js";import{u as z,c as ne,b as De,a as l}from"./vendor-query-DLp59M9_.js";import{P as ke}from"./PageHeaderWithStats-BI7JG5x6.js";import{D as le}from"./DataTable-CTRhTAfT.js";import{C as U}from"./CollapsibleSection-Kd9UIyeU.js";import{F as we,b as Qe}from"./FilterBar-BiO8SOzc.js";import{u as Se}from"./useFilterParams-BUyLHcx_.js";import{R as oe,a as L}from"./RowActions-yDhwwDbU.js";import{ai as J,aj as G,R as Te,S as Pe,ak as Fe,E as Me,i as Re,A as _e,Z as $e,al as Ae,P as Oe,a7 as Ie}from"./vendor-icons-T4r2DSPD.js";import{M as Be}from"./Modal-BuTvD0pz.js";import{T as We}from"./TaskQueuePill-Lvr2-NzS.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-joNbd4gg.js";function Le(){return O("/controlplane/apps")}function Je(t){return O(`/controlplane/rollcall?app_id=${encodeURIComponent(t)}`)}function qe(t){return O("/controlplane/throttle",{method:"POST",body:JSON.stringify(t)})}function Ke(t){return O("/controlplane/subscribe",{method:"POST",body:JSON.stringify(t)})}function Ue(t,a,s){let r=`/controlplane/streams?app_id=${encodeURIComponent(t)}&duration=${encodeURIComponent(a)}`;return O(r)}function ie(){return z({queryKey:["controlplane","apps"],queryFn:Le,staleTime:6e4})}function Ge(t,a){return z({queryKey:["controlplane","rollcall",t],queryFn:()=>Je(t),enabled:!!t,refetchInterval:a})}function me(){const t=De();return ne({mutationFn:qe,onSuccess:()=>{setTimeout(()=>{t.invalidateQueries({queryKey:["controlplane","rollcall"]})},1500)}})}function ze(t,a,s,r){return z({queryKey:["controlplane","streams",t,a,""],queryFn:()=>Ue(t,a),enabled:!!t,staleTime:15e3,refetchInterval:r})}function He(){return ne({mutationFn:Ke})}const Ye=[{label:"15m",value:"15m"},{label:"30m",value:"30m"},{label:"1h",value:"1h"},{label:"1d",value:"1d"},{label:"7d",value:"7d"}],Xe={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"},Ze=250;function $(t){return!!t.worker_topic}function A(t){return typeof t.throttle=="number"&&t.throttle!==0}function H(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 ce(t,a){if(!t||!a)return"—";const s=parseFloat(t),r=parseFloat(a);return isNaN(s)||isNaN(r)?"—":`${(s-r).toFixed(1)} / ${s.toFixed(1)} GB`}function ue(t){return t.replace(/^hmsh:[^:]+:x:/,"")||"(engine)"}const de=[{key:"pong",label:"Pong",description:"Roll call responses"},{key:"ping",label:"Ping",description:"Roll call 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 k(t){return`${t.engine_id}-${t.worker_topic||"engine"}`}function et(t){const a=new Map;for(const s of t){if(!s.worker_topic)continue;const r=s.worker_topic;a.has(r)||a.set(r,[]),a.get(r).push(s)}return a}function tt(t){let a=0,s=0,r=0;for(const o of t)if(o.counts)for(const[n,h]of Object.entries(o.counts))a+=h,n==="200"?s+=h:n==="500"&&(r+=h);return{total:a,success:s,errors:r}}function at(){return{key:"throttle",label:"Throttle",render:t=>{const a=t.throttle;return a===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:23,columnNumber:28},this):a&&a>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:24,columnNumber:30},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:25,columnNumber:14},this)},className:"w-24"}}function st(){return{key:"memory",label:"Memory",render:t=>{var a,s;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((a=t.system)==null?void 0:a.TotalMemoryGB,(s=t.system)==null?void 0:s.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:36,columnNumber:7},this)},className:"w-36"}}function rt(t,a){return{key:"actions",label:"",render:s=>e.jsxDEV(oe,{children:[A(s)&&e.jsxDEV(L,{icon:G,title:"Resume (remove throttle)",onClick:()=>a(s),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>t(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:61,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:52,columnNumber:7},this),className:"w-16"}}function nt(t){const a=t.profiles.some(s=>t.selectedIds.has(k(s)));return[{key:"select",label:e.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[e.jsxDEV("input",{type:"checkbox",checked:t.profiles.length>0&&t.profiles.every(s=>t.selectedIds.has(k(s))),onChange:t.toggleAll,className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:76,columnNumber:11},this),a&&t.onBulkThrottle&&e.jsxDEV(J,{className:"w-[14px] h-[14px] text-text-tertiary hover:text-accent cursor-pointer",strokeWidth:1.5,onClick:s=>{s.stopPropagation(),t.onBulkThrottle()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:83,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:75,columnNumber:9},this),render:s=>e.jsxDEV("input",{type:"checkbox",checked:t.selectedIds.has(k(s)),onChange:r=>{r.stopPropagation(),t.toggleCheckbox(s)},onClick:r=>r.stopPropagation(),className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:92,columnNumber:9},this),className:"w-16"},{key:"engine_id",label:"Engine ID",render:s=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:s.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:106,columnNumber:9},this),className:"w-48"},at(),{key:"processed",label:"Processed",render:s=>{const r=tt([s]);return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:r.total.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:116,columnNumber:16},this)},className:"w-24"},st(),rt(t.onRowThrottle,t.onResumeThrottle)]}function lt({activeAppId:t,allProfiles:a,profiles:s}){const r=me(),[o,n]=l.useState(new Set),[h,i]=l.useState(!1),[f,m]=l.useState([]);l.useEffect(()=>{n(new Set)},[t]);const V=l.useCallback(p=>{n(w=>{const E=new Set(w),Q=k(p);return E.has(Q)?E.delete(Q):E.add(Q),E})},[]),y=l.useCallback(()=>{o.size===s.length?n(new Set):n(new Set(s.map(k)))},[s,o.size]),d=l.useMemo(()=>{const p=s.filter(g=>o.has(k(g)));if(p.length===0)return[];if(p.length===a.length)return[{label:"Entire Mesh"}];const w=p.filter(g=>!$(g)),E=p.filter($),Q=[];for(const g of w)Q.push({label:`Engine ${g.engine_id}`,guid:g.engine_id});const T=new Map;for(const g of E){const S=g.worker_topic;T.has(S)||T.set(S,[]),T.get(S).push(g)}for(const[g,S]of T){const R=a.filter(F=>F.worker_topic===g);if(S.length===R.length)Q.push({label:g,topic:g});else for(const F of S)Q.push({label:`${g} ${F.engine_id}`,guid:F.engine_id})}return Q},[s,a,o]);return{selectedIds:o,setSelectedIds:n,toggleCheckbox:V,toggleAll:y,throttleModalOpen:h,throttleTargets:f,selectedThrottleTargets:d,throttleMutation:r,handleBulkThrottle:p=>{const w=f.length>0?f:d;for(const E of w)r.mutate({appId:t,throttle:p,...E.topic?{topic:E.topic}:{},...E.guid?{guid:E.guid}:{}});i(!1),m([])},handleRowClick:p=>{const w=$(p)?`${p.worker_topic} ${p.engine_id}`:`Engine ${p.engine_id}`;m([{label:w,guid:p.engine_id}]),i(!0)},handleBulkThrottleOpen:()=>{m(d),i(!0)},handleResumeThrottle:p=>{r.mutate({appId:t,throttle:0,guid:p.engine_id})},handleResumeQueue:p=>{r.mutate({appId:t,throttle:0,topic:p})},handleQueueThrottle:p=>{m([{label:p,topic:p}]),i(!0)},closeThrottleModal:()=>{i(!1),m([])}}}const ot=[{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 it({target:t}){const a=t.label==="Entire Mesh",s=t.label==="All Engines"||t.label.startsWith("Engine "),r=a?"bg-status-error/10 text-status-error":s?"bg-blue-500/10 text-blue-500":"bg-accent/[0.06] text-text-secondary",o=t.guid?"guid":t.topic?"topic":"mesh";return e.jsxDEV("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.jsxDEV("span",{className:"text-[8px] opacity-50",children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:35,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:33,columnNumber:5},this)}function mt({open:t,onClose:a,targets:s,onApply:r,isPending:o}){const[n,h]=l.useState("0");return e.jsxDEV(Be,{open:t,onClose:a,title:"Adjust Throttle",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Targets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:s.map((i,f)=>e.jsxDEV(it,{target:i},i.guid||i.topic||f,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:50,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:48,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:46,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Presets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:ot.map(i=>e.jsxDEV("button",{onClick:()=>{h(i.ms===-1?"-1":String(i.ms/1e3)),r(i.ms)},disabled:o,className:`px-3 py-1.5 text-xs rounded transition-colors ${i.ms===-1?"bg-status-error/10 text-status-error hover:bg-status-error/20":i.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:i.label},i.label,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:59,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Custom (seconds between messages)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:78,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("input",{type:"number",step:"0.1",min:"-1",value:n,onChange:i=>h(i.target.value),className:"input text-xs py-1.5 px-3 w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{const i=parseFloat(n);isNaN(i)||r(i===-1?-1:Math.round(i*1e3))},disabled:o,className:"btn-primary text-xs py-1.5 px-4 disabled:opacity-50",children:"Apply"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:90,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"0 = resume, -1 = pause indefinitely"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:45,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:44,columnNumber:5},this)}function ct({byStream:t,onNodeFilter:a}){const[s,r]=l.useState(!1);if(l.useEffect(()=>{r(!1);const m=requestAnimationFrame(()=>r(!0));return()=>cancelAnimationFrame(m)},[t]),t.length===0)return e.jsxDEV("p",{className:"text-xs text-text-tertiary py-4 text-center",children:"No activity in this period"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:26,columnNumber:12},this);const o=t.filter(m=>m.stream_type==="engine"),n=t.filter(m=>m.stream_type==="worker"),h=Math.max(...t.map(m=>m.count)),i=m=>{const V=h>0?m.count/h*100:0,y=m.stream_type==="engine",d=y?"(all engines)":ue(m.stream_name),x=y?"bg-blue-500/70":"bg-accent/60",C=y?"text-blue-500":"text-text-tertiary";return e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`text-[9px] font-mono ${C} w-36 truncate text-right shrink-0`,title:m.stream_name,children:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 h-4 bg-surface-sunken rounded overflow-hidden",children:e.jsxDEV("div",{className:`h-full ${x} rounded transition-all duration-500 ease-out`,style:{width:s?`${V}%`:"0%"}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:48,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:47,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] font-mono tabular-nums text-text-secondary w-12 text-right shrink-0",children:m.count.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:53,columnNumber:9},this)]},`${m.stream_type}-${m.stream_name}`,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:40,columnNumber:7},this)},f="text-[9px] uppercase tracking-widest font-semibold mb-1 cursor-pointer hover:underline";return e.jsxDEV("div",{className:"space-y-1.5",children:[o.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-blue-500/70 hover:text-blue-500`,onClick:()=>a==null?void 0:a("engines"),children:"Engine Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:66,columnNumber:11},this),o.map(i),n.length>0&&e.jsxDEV("div",{className:"h-2"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:73,columnNumber:40},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:65,columnNumber:9},this),n.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-accent/70 hover:text-accent`,onClick:()=>a==null?void 0:a("workers"),children:"Worker Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:78,columnNumber:11},this),n.map(i)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:63,columnNumber:5},this)}let ut=0;function dt({event:t}){var r,o,n;const[a,s]=l.useState(!1);return e.jsxDEV("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxDEV("button",{onClick:()=>s(!a),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsxDEV("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"})},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:27,columnNumber:9},this),e.jsxDEV("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${Xe[t.type]||"text-text-tertiary"} bg-surface-sunken whitespace-nowrap shrink-0`,children:t.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:30,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono flex-1 min-w-0 break-all",children:[(r=t.data)!=null&&r.guid?String(t.data.guid):"",(o=t.data)!=null&&o.topic?` ${String(t.data.topic)}`:"",t.type==="throttle"?` → ${H((n=t.data)==null?void 0:n.throttle)}`:""]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${a?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:42,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:38,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV("div",{className:"pb-2",children:e.jsxDEV(je,{data:t.data},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:47,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:46,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:45,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:22,columnNumber:5},this)}function pt({channels:t,onToggle:a,customFilter:s,onCustomFilterChange:r}){return e.jsxDEV("div",{className:"space-y-3 pb-3 border-b border-surface-border mb-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Channels"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:67,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary",children:"Unchecked channels are dropped before buffering"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:70,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:66,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-1",children:de.map(o=>e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer py-0.5",children:[e.jsxDEV("input",{type:"checkbox",checked:t.has(o.key),onChange:()=>a(o.key),className:"w-3 h-3 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",title:o.description,children:o.label},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:83,columnNumber:13},this)]},o.key,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:76,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Text Filter"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:90,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s,onChange:o=>r(o.target.value),placeholder:"pong",className:"input text-[10px] font-mono py-1 px-2 w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:93,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mt-1",children:["Filter by event type, e.g. ",e.jsxDEV("span",{className:"font-mono",children:"pong"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:38},this),", ",e.jsxDEV("span",{className:"font-mono",children:"throttle"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:79},this),", or any text in the event data."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:65,columnNumber:5},this)}function ht({bridgeActive:t}){const[a,s]=l.useState(!1),[r,o]=l.useState(!1),[n,h]=l.useState([]),[i,f]=l.useState(()=>new Set(de.map(u=>u.key))),[m,V]=l.useState(""),y=l.useRef(i);l.useEffect(()=>{y.current=i},[i]);const d=l.useRef(m);l.useEffect(()=>{d.current=m},[m]);const x=u=>{f(N=>{const D=new Set(N);return D.has(u)?D.delete(u):D.add(u),D})};Ve("lt.events.mesh.>",l.useCallback(u=>{var j;const N=((j=u.type)==null?void 0:j.replace("mesh.",""))||"unknown";if(!y.current.has(N))return;const D=d.current;D&&!`${N} ${JSON.stringify(u.data||u)}`.toLowerCase().includes(D.toLowerCase())||h(P=>[{id:++ut,type:N,timestamp:u.timestamp||new Date().toISOString(),data:u.data||u},...P].slice(0,Ze))},[]));const C=()=>h([]);return e.jsxDEV("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.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Event Stream"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV(Te,{className:`w-3 h-3 ${t?"text-status-success animate-pulse":"text-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:172,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:t?"Live":"..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("span",{className:"ml-auto flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>{s(u=>!u),o(!1)},className:`p-1 rounded transition-colors ${a?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"Configure channels",children:e.jsxDEV(Pe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:183,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:178,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>{o(u=>!u),s(!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.jsxDEV(Fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:185,columnNumber:11},this),n.length>0&&e.jsxDEV("button",{onClick:C,className:"p-1 rounded text-text-tertiary hover:text-text-primary transition-colors",title:"Clear events",children:e.jsxDEV(Me,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:198,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:193,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:177,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV(pt,{channels:i,onToggle:x,customFilter:m,onCustomFilterChange:V},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:206,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:205,columnNumber:7},this),e.jsxDEV(W,{open:r,children:e.jsxDEV("div",{className:"pb-3 border-b border-surface-border mb-3",children:e.jsxDEV("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(n.slice(0,50),null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:217,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:216,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:215,columnNumber:7},this),n.length>0&&e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mb-2",children:[n.length," events"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:225,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary py-6 text-center",children:t?"Waiting for events...":"Subscribing..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:233,columnNumber:11},this):n.map(u=>e.jsxDEV(dt,{event:u},u.id,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:238,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:231,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:166,columnNumber:5},this)}function bt({queue:t,workers:a,expanded:s,onToggle:r,onWorkerClick:o,onResumeThrottle:n,onQueueThrottle:h,onResumeQueue:i,byStream:f,activeDuration:m}){const V=l.useMemo(()=>{const d=f.find(x=>x.stream_type==="worker"&&ue(x.stream_name)===t);return(d==null?void 0:d.count)??0},[f,t]),y=l.useMemo(()=>[{key:"engine_id",label:"Worker ID",render:d=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:d.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:55,columnNumber:9},this),className:"w-48"},{key:"throttle",label:"Throttle",render:d=>{const x=d.throttle;return x===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:66,columnNumber:30},this):x&&x>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(x)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:67,columnNumber:32},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:68,columnNumber:16},this)},className:"w-24"},{key:"memory",label:"Memory",render:d=>{var x,C;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((x=d.system)==null?void 0:x.TotalMemoryGB,(C=d.system)==null?void 0:C.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:76,columnNumber:9},this)},className:"w-36"},{key:"actions",label:"",render:d=>e.jsxDEV(oe,{children:[A(d)&&e.jsxDEV(L,{icon:G,title:"Resume (remove throttle)",onClick:()=>n(d),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:88,columnNumber:13},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>o(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:95,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:86,columnNumber:9},this),className:"w-16"}],[o,n]);return e.jsxDEV("div",{children:[e.jsxDEV("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.jsxDEV(Re,{className:`w-3.5 h-3.5 text-text-tertiary/50 transition-transform duration-200 ${s?"rotate-90":""}`,strokeWidth:2},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:112,columnNumber:9},this),e.jsxDEV(We,{queue:t,size:"sm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:116,columnNumber:9},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV("span",{className:`flex items-center gap-1 text-xs w-24 ${a.some(A)?"text-status-warning":"text-text-tertiary"}`,children:[e.jsxDEV(_e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("span",{className:"font-mono tabular-nums",children:a.length},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:122,columnNumber:11},this),e.jsxDEV("span",{children:"workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:120,columnNumber:9},this),e.jsxDEV("span",{className:"flex items-center gap-1 text-xs font-mono text-text-tertiary w-28 justify-end mr-16",children:V>0?e.jsxDEV(e.Fragment,{children:[e.jsxDEV($e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:129,columnNumber:15},this),V.toLocaleString()," in ",m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary/40",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:133,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:126,columnNumber:9},this),e.jsxDEV("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:[a.some(A)&&e.jsxDEV(G,{className:"w-4 h-4 text-text-tertiary hover:text-status-success",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),i(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:139,columnNumber:13},this),e.jsxDEV(J,{className:"w-4 h-4 text-text-tertiary hover:text-accent",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),h(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:137,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:108,columnNumber:7},this),e.jsxDEV(W,{open:s,children:e.jsxDEV("div",{className:"ml-6",children:e.jsxDEV(le,{columns:y,data:a,keyFn:k,onRowClick:o,emptyMessage:"No workers",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:161,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:160,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:107,columnNumber:5},this)}function xt(){const{data:t}=ie(),a=me(),[s,r]=l.useState(!1),o=(t==null?void 0:t.apps)??[],n=h=>{for(const i of o)a.mutate({appId:i.appId,throttle:h});r(!1)};return s?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-xs text-status-error",children:"Pause all queues?"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:22,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>n(-1),className:"px-2.5 py-1 text-xs rounded-md bg-status-error text-white hover:bg-status-error/90 transition-colors",children:"Confirm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:23,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!1),className:"px-2.5 py-1 text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:29,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:21,columnNumber:7},this):e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("button",{onClick:()=>r(!0),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",title:"Pause all queues",children:[e.jsxDEV(Ae,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:46,columnNumber:9},this),"Pause All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("button",{onClick:()=>n(0),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",title:"Resume all queues",children:[e.jsxDEV(Oe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:54,columnNumber:9},this),"Resume All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:49,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:40,columnNumber:5},this)}function St(){var re;const{data:t}=ie(),a=(t==null?void 0:t.apps)??[],{filters:s,setFilter:r}=Se({filters:{app_id:"",duration:"1h"}}),o=((re=a[0])==null?void 0:re.appId)??"durable",n=s.app_id||o,h=s.duration||"1h",i=He(),f=6e4,{data:m,isLoading:V,error:y,refetch:d,isFetching:x}=Ge(n,f),{data:C}=ze(n,h,void 0,f),u=l.useMemo(()=>[...(m==null?void 0:m.profiles)??[]].sort((b,v)=>{const _=b.worker_topic||b.stream||"",B=v.worker_topic||v.stream||"";return!b.worker_topic&&v.worker_topic?-1:b.worker_topic&&!v.worker_topic?1:_.localeCompare(B)}),[m==null?void 0:m.profiles]),N=l.useMemo(()=>u.filter(c=>!$(c)),[u]),D=l.useMemo(()=>u.filter($),[u]),j=l.useMemo(()=>et(u),[u]),P=u.filter(A).length,p=l.useMemo(()=>{const c=new Set(a.map(b=>b.appId));return n&&c.add(n),[...c].sort().map(b=>({value:b,label:b}))},[a,n]),[w,E]=l.useState(new Set),Q=l.useCallback(c=>{E(b=>{const v=new Set(b);return v.has(c)?v.delete(c):v.add(c),v})},[]),T=j.size>0&&[...j.keys()].every(c=>w.has(c)),g=l.useCallback(()=>{E(T?new Set:new Set(j.keys()))},[T,j]),S="lt:controlplane:collapsed",[R,F]=l.useState(()=>{try{return JSON.parse(localStorage.getItem(S)||"{}")}catch{return{}}}),q=l.useCallback(c=>{F(b=>{const v={...b,[c]:!b[c]};return localStorage.setItem(S,JSON.stringify(v)),v})},[]),{selectedIds:M,setSelectedIds:Y,toggleCheckbox:X,throttleModalOpen:pe,throttleTargets:Z,selectedThrottleTargets:he,throttleMutation:be,handleBulkThrottle:xe,handleRowClick:I,handleBulkThrottleOpen:ee,handleResumeThrottle:K,handleResumeQueue:Ne,handleQueueThrottle:fe,closeThrottleModal:ge}=lt({activeAppId:n,allProfiles:u,profiles:u}),te=l.useCallback(()=>{const c=new Set(N.map(k)),b=N.length>0&&N.every(v=>M.has(k(v)));Y(v=>{const _=new Set(v);for(const B of c)b?_.delete(B):_.add(B);return _})},[N,M,Y]),ae=l.useCallback(()=>{N.filter(b=>M.has(k(b))).length!==0&&ee()},[N,M,ee]),ve=l.useMemo(()=>nt({profiles:N,selectedIds:M,toggleAll:te,toggleCheckbox:X,onRowThrottle:I,onResumeThrottle:K,onBulkThrottle:ae}),[N,M,te,X,I,K,ae]),Ee=l.useMemo(()=>{const c=[{label:"Engines",value:N.length,dotClass:"bg-blue-500"},{label:"Workers",value:D.length,dotClass:"bg-text-secondary"},{label:"Queues",value:j.size}];return P>0&&c.push({label:"Throttled",value:P,dotClass:"bg-status-warning"}),c},[N.length,D.length,j.size,P]),[se,ye]=l.useState(!1),Ce=l.useCallback(()=>{i.mutate({appId:n},{onSuccess:()=>ye(!0)})},[n,i]);return l.useEffect(()=>{!se&&n&&Ce()},[n]),e.jsxDEV("div",{children:[e.jsxDEV(ke,{title:"Task Queues",stats:Ee,actions:e.jsxDEV(xt,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:190,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:187,columnNumber:7},this),e.jsxDEV(we,{actions:e.jsxDEV("div",{className:"flex items-center gap-1",children:Ye.map(c=>e.jsxDEV("button",{onClick:()=>r("duration",c.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${h===c.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:c.label},c.value,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:197,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:195,columnNumber:11},this),children:[e.jsxDEV(Qe,{label:"Application",value:s.app_id,onChange:c=>r("app_id",c),options:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:212,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>d(),disabled:x,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.jsxDEV(Ie,{className:`w-3.5 h-3.5 ${x?"animate-spin":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:223,columnNumber:11},this),"Roll Call"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:218,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:193,columnNumber:7},this),y&&e.jsxDEV("div",{className:"mb-6 px-4 py-3 rounded bg-status-error/10 border border-status-error/20",children:e.jsxDEV("p",{className:"text-xs text-status-error font-medium",children:y.message==="Session expired"?"Session expired — please log in again.":`Failed to load mesh data: ${y.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:231,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:230,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-6",children:[e.jsxDEV("div",{className:"flex flex-col gap-12 mt-10",children:[e.jsxDEV(U,{title:`Stream Volume (${h})`,sectionKey:"volume",isCollapsed:!!R.volume,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(ct,{byStream:(C==null?void 0:C.byStream)??[],onNodeFilter:()=>{},onQueueFilter:()=>{}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:250,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:243,columnNumber:11},this),e.jsxDEV(U,{title:"Worker Queues",sectionKey:"queues",isCollapsed:!!R.queues,onToggle:q,contentClassName:"mt-4 ml-7 flex flex-col gap-0",children:V?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Discovering mesh nodes..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:266,columnNumber:15},this):j.size===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:'No worker queues found. Click "Roll Call" to discover.'},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:268,columnNumber:15},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex justify-end mb-2",children:e.jsxDEV("button",{onClick:g,className:"text-[10px] text-accent hover:underline",children:T?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:272,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:271,columnNumber:17},this),[...j.entries()].sort(([c],[b])=>c.localeCompare(b)).map(([c,b])=>e.jsxDEV(bt,{queue:c,workers:b,expanded:w.has(c),onToggle:Q,onWorkerClick:I,onResumeThrottle:K,onQueueThrottle:fe,onResumeQueue:Ne,byStream:(C==null?void 0:C.byStream)??[],activeDuration:h},c,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:279,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:270,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:258,columnNumber:11},this),e.jsxDEV(U,{title:"Engines",sectionKey:"engines",isCollapsed:!!R.engines,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(le,{columns:ve,data:N,keyFn:k,onRowClick:I,isLoading:V,emptyMessage:V?"Discovering engines...":"No engines found.",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:305,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:298,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:241,columnNumber:9},this),e.jsxDEV(ht,{bridgeActive:se},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:317,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:240,columnNumber:7},this),e.jsxDEV(mt,{open:pe,onClose:ge,targets:Z.length>0?Z:he,onApply:xe,isPending:be.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:320,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:186,columnNumber:5},this)}export{St as ControlPlanePage};
2
+ //# sourceMappingURL=index-BUK3qR-1.js.map