@hotmeshio/long-tail 0.17.0 → 0.17.1

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 (223) hide show
  1. package/dashboard/dist/assets/AdminDashboard-D-YHIR8w.js +2 -0
  2. package/dashboard/dist/assets/{AdminDashboard-Bx5G6Qb_.js.map → AdminDashboard-D-YHIR8w.js.map} +1 -1
  3. package/dashboard/dist/assets/{AgentConfigPage-S-YfPwCG.js → AgentConfigPage-CG54Ll2A.js} +7 -7
  4. package/dashboard/dist/assets/{AgentConfigPage-S-YfPwCG.js.map → AgentConfigPage-CG54Ll2A.js.map} +1 -1
  5. package/dashboard/dist/assets/{AgentDetailPage-pFVqLY4c.js → AgentDetailPage-rTcofeW4.js} +3 -3
  6. package/dashboard/dist/assets/{AgentDetailPage-pFVqLY4c.js.map → AgentDetailPage-rTcofeW4.js.map} +1 -1
  7. package/dashboard/dist/assets/AgentsPage-B7PNjrkn.js +2 -0
  8. package/dashboard/dist/assets/{AgentsPage-DjAluFkM.js.map → AgentsPage-B7PNjrkn.js.map} +1 -1
  9. package/dashboard/dist/assets/AvailableEscalationsPage-CEDwyzlx.js +2 -0
  10. package/dashboard/dist/assets/AvailableEscalationsPage-CEDwyzlx.js.map +1 -0
  11. package/dashboard/dist/assets/{BotPicker-h2YrxQS2.js → BotPicker-cg1qXRF3.js} +2 -2
  12. package/dashboard/dist/assets/{BotPicker-h2YrxQS2.js.map → BotPicker-cg1qXRF3.js.map} +1 -1
  13. package/dashboard/dist/assets/{BulkAssignModal-CNKZBgK5.js → BulkAssignModal-BDzaHGAb.js} +2 -2
  14. package/dashboard/dist/assets/{BulkAssignModal-CNKZBgK5.js.map → BulkAssignModal-BDzaHGAb.js.map} +1 -1
  15. package/dashboard/dist/assets/CapabilitiesPage-CswExj9-.js +2 -0
  16. package/dashboard/dist/assets/{CapabilitiesPage-DGsnIiJi.js.map → CapabilitiesPage-CswExj9-.js.map} +1 -1
  17. package/dashboard/dist/assets/{CollapsibleSection-ptEsXSl6.js → CollapsibleSection-CpVKfkkq.js} +2 -2
  18. package/dashboard/dist/assets/{CollapsibleSection-ptEsXSl6.js.map → CollapsibleSection-CpVKfkkq.js.map} +1 -1
  19. package/dashboard/dist/assets/CountdownTimer-ClJhYGg1.js +2 -0
  20. package/dashboard/dist/assets/{CountdownTimer-Cvif0QtN.js.map → CountdownTimer-ClJhYGg1.js.map} +1 -1
  21. package/dashboard/dist/assets/{CredentialsPage-CwKUAtAR.js → CredentialsPage-DYBp7v8W.js} +2 -2
  22. package/dashboard/dist/assets/{CredentialsPage-CwKUAtAR.js.map → CredentialsPage-DYBp7v8W.js.map} +1 -1
  23. package/dashboard/dist/assets/{CronLabel-B9RbqMR-.js → CronLabel-Bd_fipHy.js} +2 -2
  24. package/dashboard/dist/assets/{CronLabel-B9RbqMR-.js.map → CronLabel-Bd_fipHy.js.map} +1 -1
  25. package/dashboard/dist/assets/ElapsedCell-B-Wn6Y8B.js +2 -0
  26. package/dashboard/dist/assets/{ElapsedCell-BirS3yZq.js.map → ElapsedCell-B-Wn6Y8B.js.map} +1 -1
  27. package/dashboard/dist/assets/EntityTimelinePanel-DcgFUbk4.js +2 -0
  28. package/dashboard/dist/assets/{EntityTimelinePanel-D3QNqDiL.js.map → EntityTimelinePanel-DcgFUbk4.js.map} +1 -1
  29. package/dashboard/dist/assets/{EscalationListSchemaPage-Bke-30FY.js → EscalationListSchemaPage-DpnorXeU.js} +3 -3
  30. package/dashboard/dist/assets/{EscalationListSchemaPage-Bke-30FY.js.map → EscalationListSchemaPage-DpnorXeU.js.map} +1 -1
  31. package/dashboard/dist/assets/{EscalationSchemaPage-CTFE9vko.js → EscalationSchemaPage-LPTJJDfP.js} +3 -3
  32. package/dashboard/dist/assets/{EscalationSchemaPage-CTFE9vko.js.map → EscalationSchemaPage-LPTJJDfP.js.map} +1 -1
  33. package/dashboard/dist/assets/EscalationsOverview-Bq5_ICUt.js +2 -0
  34. package/dashboard/dist/assets/{EscalationsOverview-C2FaSmXk.js.map → EscalationsOverview-Bq5_ICUt.js.map} +1 -1
  35. package/dashboard/dist/assets/{EventTable-zFqzbEdC.js → EventTable-Cinbdm1u.js} +2 -2
  36. package/dashboard/dist/assets/{EventTable-zFqzbEdC.js.map → EventTable-Cinbdm1u.js.map} +1 -1
  37. package/dashboard/dist/assets/FilterBar-DyojX5m4.js +2 -0
  38. package/dashboard/dist/assets/FilterBar-DyojX5m4.js.map +1 -0
  39. package/dashboard/dist/assets/{GraphInvokePage-CA_XYI2W.js → GraphInvokePage-Ba5fNcgv.js} +2 -2
  40. package/dashboard/dist/assets/{GraphInvokePage-CA_XYI2W.js.map → GraphInvokePage-Ba5fNcgv.js.map} +1 -1
  41. package/dashboard/dist/assets/HomePage-DuFXqfz3.js +2 -0
  42. package/dashboard/dist/assets/HomePage-DuFXqfz3.js.map +1 -0
  43. package/dashboard/dist/assets/ListToolbar-GpwHcjkZ.js +2 -0
  44. package/dashboard/dist/assets/{ListToolbar-BEogxu1f.js.map → ListToolbar-GpwHcjkZ.js.map} +1 -1
  45. package/dashboard/dist/assets/{McpOverview-CdMR-5qh.js → McpOverview-Bi23-hih.js} +2 -2
  46. package/dashboard/dist/assets/{McpOverview-CdMR-5qh.js.map → McpOverview-Bi23-hih.js.map} +1 -1
  47. package/dashboard/dist/assets/{McpQueryDetailPage-BXo4UjJF.js → McpQueryDetailPage-FhHSfX9W.js} +4 -4
  48. package/dashboard/dist/assets/{McpQueryDetailPage-BXo4UjJF.js.map → McpQueryDetailPage-FhHSfX9W.js.map} +1 -1
  49. package/dashboard/dist/assets/McpQueryPage-czMlM7vR.js +2 -0
  50. package/dashboard/dist/assets/{McpQueryPage-BvvM0Ya1.js.map → McpQueryPage-czMlM7vR.js.map} +1 -1
  51. package/dashboard/dist/assets/McpRunDetailPage-BOh2M0Ca.js +2 -0
  52. package/dashboard/dist/assets/McpRunDetailPage-BOh2M0Ca.js.map +1 -0
  53. package/dashboard/dist/assets/McpRunsPage-DfJzbGYM.js +2 -0
  54. package/dashboard/dist/assets/McpRunsPage-DfJzbGYM.js.map +1 -0
  55. package/dashboard/dist/assets/OperationsPage-BS8blKLj.js +3 -0
  56. package/dashboard/dist/assets/OperationsPage-BS8blKLj.js.map +1 -0
  57. package/dashboard/dist/assets/OperatorDashboard-BWtTKrcJ.js +2 -0
  58. package/dashboard/dist/assets/OperatorDashboard-BWtTKrcJ.js.map +1 -0
  59. package/dashboard/dist/assets/{PersonaDetailPage-BHQ44UIu.js → PersonaDetailPage-VkhuauBf.js} +2 -2
  60. package/dashboard/dist/assets/{PersonaDetailPage-BHQ44UIu.js.map → PersonaDetailPage-VkhuauBf.js.map} +1 -1
  61. package/dashboard/dist/assets/PersonasPage-DRoneLfx.js +2 -0
  62. package/dashboard/dist/assets/PersonasPage-DRoneLfx.js.map +1 -0
  63. package/dashboard/dist/assets/ProcessDetailPage-B5mmkHS0.js +2 -0
  64. package/dashboard/dist/assets/{ProcessDetailPage-CZ09xiWf.js.map → ProcessDetailPage-B5mmkHS0.js.map} +1 -1
  65. package/dashboard/dist/assets/ProcessesListPage-BV0e2OfH.js +2 -0
  66. package/dashboard/dist/assets/ProcessesListPage-BV0e2OfH.js.map +1 -0
  67. package/dashboard/dist/assets/{RoleDetailPage-CDsJKPvV.js → RoleDetailPage-eenl_a5Z.js} +2 -2
  68. package/dashboard/dist/assets/{RoleDetailPage-CDsJKPvV.js.map → RoleDetailPage-eenl_a5Z.js.map} +1 -1
  69. package/dashboard/dist/assets/{RolesPage-D2cV92bL.js → RolesPage-BLfJcFf7.js} +2 -2
  70. package/dashboard/dist/assets/{RolesPage-D2cV92bL.js.map → RolesPage-BLfJcFf7.js.map} +1 -1
  71. package/dashboard/dist/assets/{RunAsSelector-Cvi8x8xx.js → RunAsSelector-BnLKKs51.js} +2 -2
  72. package/dashboard/dist/assets/{RunAsSelector-Cvi8x8xx.js.map → RunAsSelector-BnLKKs51.js.map} +1 -1
  73. package/dashboard/dist/assets/{ScanCodesPage-BWt_iRCu.js → ScanCodesPage-BWIcjnr4.js} +2 -2
  74. package/dashboard/dist/assets/{ScanCodesPage-BWt_iRCu.js.map → ScanCodesPage-BWIcjnr4.js.map} +1 -1
  75. package/dashboard/dist/assets/ScanSchemeDetailPage-sAuU8cZj.js +2 -0
  76. package/dashboard/dist/assets/{ScanSchemeDetailPage-C6mRYkxL.js.map → ScanSchemeDetailPage-sAuU8cZj.js.map} +1 -1
  77. package/dashboard/dist/assets/ScanStationPage-CA_q1uaI.js +2 -0
  78. package/dashboard/dist/assets/{ScanStationPage-YQiijAKy.js.map → ScanStationPage-CA_q1uaI.js.map} +1 -1
  79. package/dashboard/dist/assets/{StickyPagination-BsbSade1.js → StickyPagination-sVI21e82.js} +2 -2
  80. package/dashboard/dist/assets/{StickyPagination-BsbSade1.js.map → StickyPagination-sVI21e82.js.map} +1 -1
  81. package/dashboard/dist/assets/{StreamMessageDetail-jczXwuBw.js → StreamMessageDetail-Djm_zQAv.js} +2 -2
  82. package/dashboard/dist/assets/{StreamMessageDetail-jczXwuBw.js.map → StreamMessageDetail-Djm_zQAv.js.map} +1 -1
  83. package/dashboard/dist/assets/{SwimlaneTimeline-DSO6QXmX.js → SwimlaneTimeline-CwxXRmRQ.js} +2 -2
  84. package/dashboard/dist/assets/{SwimlaneTimeline-DSO6QXmX.js.map → SwimlaneTimeline-CwxXRmRQ.js.map} +1 -1
  85. package/dashboard/dist/assets/{TaskDetailPage-DWLfcAF4.js → TaskDetailPage-SiBSTsfp.js} +2 -2
  86. package/dashboard/dist/assets/{TaskDetailPage-DWLfcAF4.js.map → TaskDetailPage-SiBSTsfp.js.map} +1 -1
  87. package/dashboard/dist/assets/{TasksListPage-B0at3vJ3.js → TasksListPage-CBTFz3Bp.js} +2 -2
  88. package/dashboard/dist/assets/{TasksListPage-B0at3vJ3.js.map → TasksListPage-CBTFz3Bp.js.map} +1 -1
  89. package/dashboard/dist/assets/TimeAgo-Ctwwdamz.js +2 -0
  90. package/dashboard/dist/assets/{TimeAgo-poxwErGl.js.map → TimeAgo-Ctwwdamz.js.map} +1 -1
  91. package/dashboard/dist/assets/{TimestampCell-Be6tvFQd.js → TimestampCell-CI8UrDuQ.js} +2 -2
  92. package/dashboard/dist/assets/{TimestampCell-Be6tvFQd.js.map → TimestampCell-CI8UrDuQ.js.map} +1 -1
  93. package/dashboard/dist/assets/{ToolTestPanel-CYOqnqMz.js → ToolTestPanel-Cf9ZEBF7.js} +2 -2
  94. package/dashboard/dist/assets/{ToolTestPanel-CYOqnqMz.js.map → ToolTestPanel-Cf9ZEBF7.js.map} +1 -1
  95. package/dashboard/dist/assets/{TopicDetailPage-C82WIKaU.js → TopicDetailPage-BYIOSVNy.js} +3 -3
  96. package/dashboard/dist/assets/{TopicDetailPage-C82WIKaU.js.map → TopicDetailPage-BYIOSVNy.js.map} +1 -1
  97. package/dashboard/dist/assets/{TopicsPage-COH547ZD.js → TopicsPage-C9x4tIEi.js} +2 -2
  98. package/dashboard/dist/assets/{TopicsPage-COH547ZD.js.map → TopicsPage-C9x4tIEi.js.map} +1 -1
  99. package/dashboard/dist/assets/{UserName-D2SoVbe9.js → UserName-Ck-eLb-1.js} +2 -2
  100. package/dashboard/dist/assets/{UserName-D2SoVbe9.js.map → UserName-Ck-eLb-1.js.map} +1 -1
  101. package/dashboard/dist/assets/WorkflowExecutionPage-BPxoPK8g.js +2 -0
  102. package/dashboard/dist/assets/{WorkflowExecutionPage-C82Q-TYC.js.map → WorkflowExecutionPage-BPxoPK8g.js.map} +1 -1
  103. package/dashboard/dist/assets/WorkflowsDashboard-CDHQUYEr.js +2 -0
  104. package/dashboard/dist/assets/WorkflowsDashboard-CDHQUYEr.js.map +1 -0
  105. package/dashboard/dist/assets/WorkflowsOverview-DGp8J0G2.js +2 -0
  106. package/dashboard/dist/assets/{WorkflowsOverview-DdKRtWdK.js.map → WorkflowsOverview-DGp8J0G2.js.map} +1 -1
  107. package/dashboard/dist/assets/{YamlWorkflowDetailPage-D3qvyy_4.js → YamlWorkflowDetailPage-B112bGAY.js} +2 -2
  108. package/dashboard/dist/assets/{YamlWorkflowDetailPage-D3qvyy_4.js.map → YamlWorkflowDetailPage-B112bGAY.js.map} +1 -1
  109. package/dashboard/dist/assets/{YamlWorkflowsPage-BJsxZOBC.js → YamlWorkflowsPage-Cw5wddH7.js} +2 -2
  110. package/dashboard/dist/assets/{YamlWorkflowsPage-BJsxZOBC.js.map → YamlWorkflowsPage-Cw5wddH7.js.map} +1 -1
  111. package/dashboard/dist/assets/{agents-OQHCkIfJ.js → agents-CZ8WIdWH.js} +2 -2
  112. package/dashboard/dist/assets/{agents-OQHCkIfJ.js.map → agents-CZ8WIdWH.js.map} +1 -1
  113. package/dashboard/dist/assets/{bots-e8jsNOf4.js → bots-Xu3MUuXN.js} +2 -2
  114. package/dashboard/dist/assets/{bots-e8jsNOf4.js.map → bots-Xu3MUuXN.js.map} +1 -1
  115. package/dashboard/dist/assets/capabilities-XJukFiLn.js +2 -0
  116. package/dashboard/dist/assets/{capabilities-CEo0AB79.js.map → capabilities-XJukFiLn.js.map} +1 -1
  117. package/dashboard/dist/assets/{controlplane-CD6ti-QB.js → controlplane-D8ZQQUAV.js} +2 -2
  118. package/dashboard/dist/assets/{controlplane-CD6ti-QB.js.map → controlplane-D8ZQQUAV.js.map} +1 -1
  119. package/dashboard/dist/assets/escalation-columns-C1GyAMeK.js +2 -0
  120. package/dashboard/dist/assets/{escalation-columns-CUtDSbxl.js.map → escalation-columns-C1GyAMeK.js.map} +1 -1
  121. package/dashboard/dist/assets/index-BEeGFfuP.js +67 -0
  122. package/dashboard/dist/assets/index-BEeGFfuP.js.map +1 -0
  123. package/dashboard/dist/assets/{index-C8VhbKFU.js → index-CHAmwNDI.js} +2 -2
  124. package/dashboard/dist/assets/index-CHAmwNDI.js.map +1 -0
  125. package/dashboard/dist/assets/index-COtlcGK_.js +2 -0
  126. package/dashboard/dist/assets/index-COtlcGK_.js.map +1 -0
  127. package/dashboard/dist/assets/{index-B2aiEKtM.js → index-CR96SICL.js} +2 -2
  128. package/dashboard/dist/assets/{index-B2aiEKtM.js.map → index-CR96SICL.js.map} +1 -1
  129. package/dashboard/dist/assets/{index-Bf4IPu7I.js → index-CRxbF5vt.js} +2 -2
  130. package/dashboard/dist/assets/{index-Bf4IPu7I.js.map → index-CRxbF5vt.js.map} +1 -1
  131. package/dashboard/dist/assets/{index-BpwkKV5f.js → index-CgGR0kM6.js} +3 -3
  132. package/dashboard/dist/assets/{index-BpwkKV5f.js.map → index-CgGR0kM6.js.map} +1 -1
  133. package/dashboard/dist/assets/{index-BsP7vujM.js → index-DCaGxwKU.js} +2 -2
  134. package/dashboard/dist/assets/{index-BsP7vujM.js.map → index-DCaGxwKU.js.map} +1 -1
  135. package/dashboard/dist/assets/{index-COUj4v_W.js → index-DFmV19fc.js} +3 -3
  136. package/dashboard/dist/assets/{index-COUj4v_W.js.map → index-DFmV19fc.js.map} +1 -1
  137. package/dashboard/dist/assets/{index-CTZEzzN3.js → index-DWhyH1kV.js} +2 -2
  138. package/dashboard/dist/assets/{index-CTZEzzN3.js.map → index-DWhyH1kV.js.map} +1 -1
  139. package/dashboard/dist/assets/{index-B0C6wSrQ.js → index-DYIy3uT5.js} +2 -2
  140. package/dashboard/dist/assets/{index-B0C6wSrQ.js.map → index-DYIy3uT5.js.map} +1 -1
  141. package/dashboard/dist/assets/index-D_5_1D7U.js +2 -0
  142. package/dashboard/dist/assets/index-D_5_1D7U.js.map +1 -0
  143. package/dashboard/dist/assets/{index-B76fjEom.js → index-Dc43wixL.js} +2 -2
  144. package/dashboard/dist/assets/{index-B76fjEom.js.map → index-Dc43wixL.js.map} +1 -1
  145. package/dashboard/dist/assets/{index-DIHr2CvI.js → index-DeRM0-Xz.js} +2 -2
  146. package/dashboard/dist/assets/{index-DIHr2CvI.js.map → index-DeRM0-Xz.js.map} +1 -1
  147. package/dashboard/dist/assets/{knowledge-C89zT4Qe.js → knowledge-sjJNIdJY.js} +2 -2
  148. package/dashboard/dist/assets/{knowledge-C89zT4Qe.js.map → knowledge-sjJNIdJY.js.map} +1 -1
  149. package/dashboard/dist/assets/{mcp-BLKHykZS.js → mcp-CQeu19Jf.js} +2 -2
  150. package/dashboard/dist/assets/{mcp-BLKHykZS.js.map → mcp-CQeu19Jf.js.map} +1 -1
  151. package/dashboard/dist/assets/{mcp-query-CfiqUNDV.js → mcp-query-B9GuC88j.js} +2 -2
  152. package/dashboard/dist/assets/{mcp-query-CfiqUNDV.js.map → mcp-query-B9GuC88j.js.map} +1 -1
  153. package/dashboard/dist/assets/{personas-B1HzC94M.js → personas-CQr9sXg3.js} +2 -2
  154. package/dashboard/dist/assets/{personas-B1HzC94M.js.map → personas-CQr9sXg3.js.map} +1 -1
  155. package/dashboard/dist/assets/{pipelines-C73X50ES.js → pipelines-DzMf-VE7.js} +2 -2
  156. package/dashboard/dist/assets/{pipelines-C73X50ES.js.map → pipelines-DzMf-VE7.js.map} +1 -1
  157. package/dashboard/dist/assets/{tasks-DHbFpQk4.js → tasks-QKuXlyLe.js} +2 -2
  158. package/dashboard/dist/assets/{tasks-DHbFpQk4.js.map → tasks-QKuXlyLe.js.map} +1 -1
  159. package/dashboard/dist/assets/{topics-Fu8qCUOd.js → topics-DQAQnGV7.js} +2 -2
  160. package/dashboard/dist/assets/{topics-Fu8qCUOd.js.map → topics-DQAQnGV7.js.map} +1 -1
  161. package/dashboard/dist/assets/useDebouncedValue-DuE9Mj3I.js +2 -0
  162. package/dashboard/dist/assets/useDebouncedValue-DuE9Mj3I.js.map +1 -0
  163. package/dashboard/dist/assets/{useNamespace-CpO5Hogb.js → useNamespace-BTCrNkwo.js} +2 -2
  164. package/dashboard/dist/assets/{useNamespace-CpO5Hogb.js.map → useNamespace-BTCrNkwo.js.map} +1 -1
  165. package/dashboard/dist/assets/{useYamlActivityEvents-BwIl6_d2.js → useYamlActivityEvents-_aa1_rNu.js} +2 -2
  166. package/dashboard/dist/assets/{useYamlActivityEvents-BwIl6_d2.js.map → useYamlActivityEvents-_aa1_rNu.js.map} +1 -1
  167. package/dashboard/dist/assets/{users-C0ke1Z-8.js → users-D-DhFQBy.js} +2 -2
  168. package/dashboard/dist/assets/{users-C0ke1Z-8.js.map → users-D-DhFQBy.js.map} +1 -1
  169. package/dashboard/dist/assets/{workflows-DR9OQcuq.js → workflows-CEWX3imM.js} +2 -2
  170. package/dashboard/dist/assets/{workflows-DR9OQcuq.js.map → workflows-CEWX3imM.js.map} +1 -1
  171. package/dashboard/dist/assets/{yaml-workflows-DjEHh9Wy.js → yaml-workflows-Bek1Mg86.js} +2 -2
  172. package/dashboard/dist/assets/{yaml-workflows-DjEHh9Wy.js.map → yaml-workflows-Bek1Mg86.js.map} +1 -1
  173. package/dashboard/dist/index.html +1 -1
  174. package/docs/dashboard.md +18 -0
  175. package/package.json +1 -1
  176. package/dashboard/dist/assets/AdminDashboard-Bx5G6Qb_.js +0 -2
  177. package/dashboard/dist/assets/AgentsPage-DjAluFkM.js +0 -2
  178. package/dashboard/dist/assets/AvailableEscalationsPage-BHsRZk4v.js +0 -2
  179. package/dashboard/dist/assets/AvailableEscalationsPage-BHsRZk4v.js.map +0 -1
  180. package/dashboard/dist/assets/CapabilitiesPage-DGsnIiJi.js +0 -2
  181. package/dashboard/dist/assets/CountdownTimer-Cvif0QtN.js +0 -2
  182. package/dashboard/dist/assets/ElapsedCell-BirS3yZq.js +0 -2
  183. package/dashboard/dist/assets/EntityTimelinePanel-D3QNqDiL.js +0 -2
  184. package/dashboard/dist/assets/EscalationsOverview-C2FaSmXk.js +0 -2
  185. package/dashboard/dist/assets/FilterBar-fwUqeM-5.js +0 -2
  186. package/dashboard/dist/assets/FilterBar-fwUqeM-5.js.map +0 -1
  187. package/dashboard/dist/assets/HomePage-C2HnqdFX.js +0 -2
  188. package/dashboard/dist/assets/HomePage-C2HnqdFX.js.map +0 -1
  189. package/dashboard/dist/assets/ListToolbar-BEogxu1f.js +0 -2
  190. package/dashboard/dist/assets/McpQueryPage-BvvM0Ya1.js +0 -2
  191. package/dashboard/dist/assets/McpRunDetailPage-5eaJeupC.js +0 -2
  192. package/dashboard/dist/assets/McpRunDetailPage-5eaJeupC.js.map +0 -1
  193. package/dashboard/dist/assets/McpRunsPage-B5_-3NUF.js +0 -2
  194. package/dashboard/dist/assets/McpRunsPage-B5_-3NUF.js.map +0 -1
  195. package/dashboard/dist/assets/OperationsPage-CJXTw02Z.js +0 -3
  196. package/dashboard/dist/assets/OperationsPage-CJXTw02Z.js.map +0 -1
  197. package/dashboard/dist/assets/OperatorDashboard-Dx7639os.js +0 -2
  198. package/dashboard/dist/assets/OperatorDashboard-Dx7639os.js.map +0 -1
  199. package/dashboard/dist/assets/PersonasPage-Cnmb4uox.js +0 -2
  200. package/dashboard/dist/assets/PersonasPage-Cnmb4uox.js.map +0 -1
  201. package/dashboard/dist/assets/ProcessDetailPage-CZ09xiWf.js +0 -2
  202. package/dashboard/dist/assets/ProcessesListPage-BT76_7bW.js +0 -2
  203. package/dashboard/dist/assets/ProcessesListPage-BT76_7bW.js.map +0 -1
  204. package/dashboard/dist/assets/ScanSchemeDetailPage-C6mRYkxL.js +0 -2
  205. package/dashboard/dist/assets/ScanStationPage-YQiijAKy.js +0 -2
  206. package/dashboard/dist/assets/TimeAgo-poxwErGl.js +0 -2
  207. package/dashboard/dist/assets/WorkflowExecutionPage-C82Q-TYC.js +0 -2
  208. package/dashboard/dist/assets/WorkflowsDashboard-DDWwCT-v.js +0 -2
  209. package/dashboard/dist/assets/WorkflowsDashboard-DDWwCT-v.js.map +0 -1
  210. package/dashboard/dist/assets/WorkflowsOverview-DdKRtWdK.js +0 -2
  211. package/dashboard/dist/assets/capabilities-CEo0AB79.js +0 -2
  212. package/dashboard/dist/assets/escalation-columns-CUtDSbxl.js +0 -2
  213. package/dashboard/dist/assets/index-BYIN0l5M.js +0 -2
  214. package/dashboard/dist/assets/index-BYIN0l5M.js.map +0 -1
  215. package/dashboard/dist/assets/index-C8VhbKFU.js.map +0 -1
  216. package/dashboard/dist/assets/index-DSdqso-_.js +0 -67
  217. package/dashboard/dist/assets/index-DSdqso-_.js.map +0 -1
  218. package/dashboard/dist/assets/index-VsZyCFz8.js +0 -2
  219. package/dashboard/dist/assets/index-VsZyCFz8.js.map +0 -1
  220. package/dashboard/dist/assets/useDebouncedValue-C4P2jQuh.js +0 -2
  221. package/dashboard/dist/assets/useDebouncedValue-C4P2jQuh.js.map +0 -1
  222. package/dashboard/dist/assets/useEventHooks-DL3Vhz4g.js +0 -2
  223. package/dashboard/dist/assets/useEventHooks-DL3Vhz4g.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-Bf4IPu7I.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}
1
+ {"version":3,"file":"index-CRxbF5vt.js","sources":["../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useState, useMemo, useEffect } from 'react';\nimport { X, MessageSquare } from 'lucide-react';\nimport { SlidePanel, SlidePanelViews } from '../../../components/common/layout/SlidePanel';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useNamespace } from '../../../hooks/useNamespace';\nimport { buildApiPath } from '../../../lib/api-path';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nfunction truncateMiddle(str: string, max: number): string {\n if (str.length <= max) return str;\n const half = Math.floor((max - 1) / 2);\n return `${str.slice(0, half)}…${str.slice(-half)}`;\n}\n\nexport function StreamMessagesPage() {\n const { namespace, available } = useNamespace('namespace');\n\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: '', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const namespaceOptions = useMemo(\n () => available.map((id) => ({ value: id, label: id })),\n [available],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || namespace,\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n // Hold the last message through the panel's closing animation so the detail\n // content stays rendered while the panel slides shut.\n const [lastMessage, setLastMessage] = useState<StreamMessage | null>(null);\n useEffect(() => {\n if (activeMessage) setLastMessage(activeMessage);\n }, [activeMessage]);\n const displayMessage = activeMessage ?? lastMessage;\n\n // Status and type live as the dot and the detail panel — the row itself\n // stays one flexible stream column plus fixed narrow facts, so the table\n // shrinks with the container (same shape as the executions list).\n const columns: Column<StreamMessage>[] = [\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span\n className={`w-2.5 h-2.5 shrink-0 rounded-full dot-ring ${STATUS_DOT[row.status]}`}\n title={STATUS_LABEL[row.status]}\n />\n <span className=\"font-mono text-xs text-text-secondary truncate\" title={row.stream_name}>\n {row.stream_name}\n </span>\n </div>\n ),\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at\n ? <DateValue date={row.reserved_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at\n ? <DateValue date={row.expired_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />\n : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-32',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-14 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary whitespace-nowrap\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-20',\n },\n ];\n\n return (\n // Master-list flow beside a full-height panel: the left column is a plain\n // page-scrolling list (FilterBar and table headers stick against the main\n // scroll, exactly like the executions list). The panel column spans the\n // page height; its sticky viewport stays pinned with its own scroll.\n // Negative margins let the panel span the full middle row; the left\n // column re-adds those gutters for its own content.\n <div className=\"flex items-stretch min-w-0 -mt-10 -mr-10 -mb-16\">\n <div className=\"flex-1 min-w-0 pt-10 pr-10\">\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/controlplane/stream-messages', {\n namespace: filters.namespace || namespace,\n source: filters.source || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: filters.status || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n <FilterInput\n label=\"Job ID\"\n value={filters.jid}\n onChange={(v) => setFilter('jid', v)}\n placeholder=\"Filter by jid…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter: ${f.value}`}\n >\n {f.label}: {truncateMiddle(f.value, 12)}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n layout=\"fixed\"\n />\n\n {/* Direct child of the tall column so sticky works; its -mx-10 fills\n the column's pr-10, ending flush at the panel's edge. */}\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n\n {/* Detail panel — spans the page height; the sticky viewport keeps the\n chrome pinned to the visible area with its own scroll. */}\n <SlidePanel open={panelOpen} width={416} className=\"self-stretch\">\n <div className=\"h-full pl-4\">\n <SlidePanelViews\n views={[{\n id: 'detail',\n icon: MessageSquare,\n label: 'Message Detail',\n content: displayMessage ? (\n <StreamMessageDetail\n message={displayMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n ) : null,\n }]}\n activeId=\"detail\"\n onViewChange={() => {}}\n onClose={() => setSelected(null)}\n stickyClassName=\"sticky top-0 z-10 h-[calc(100vh-5.25rem)] pt-9\"\n />\n </div>\n </SlidePanel>\n </div>\n );\n}\n"],"names":["truncateMiddle","str","max","half","StreamMessagesPage","namespace","available","useNamespace","filters","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","namespaceOptions","useMemo","id","data","isLoading","refetch","isFetching","useStreamMessages","messages","total","activeMessage","m","panelOpen","lastMessage","setLastMessage","useEffect","displayMessage","columns","row","jsxs","jsx","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","DateValue","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","SOURCE_OPTIONS","STATUS_OPTIONS","FilterInput","f","X","DataTable","StickyPagination","SlidePanel","SlidePanelViews","MessageSquare","StreamMessageDetail"],"mappings":"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"}