@hotmeshio/long-tail 0.25.2 → 0.25.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/routes/oauth-server/authorize.js +4 -4
- package/build/services/auth/oauth-server/authorization.d.ts +5 -0
- package/build/services/auth/oauth-server/authorization.js +8 -0
- package/build/services/auth/oauth-server/metadata.d.ts +1 -1
- package/build/services/auth/oauth-server/metadata.js +2 -1
- package/dashboard/dist/assets/{AdminDashboard-B8MqNLiB.js → AdminDashboard-DlItqxFS.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-B8MqNLiB.js.map → AdminDashboard-DlItqxFS.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-Yg81Eiuo.js → AgentConfigPage-BUmT4a7n.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-Yg81Eiuo.js.map → AgentConfigPage-BUmT4a7n.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-ZUGYEONO.js → AgentDetailPage-Cww8rlBi.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-ZUGYEONO.js.map → AgentDetailPage-Cww8rlBi.js.map} +1 -1
- package/dashboard/dist/assets/AgentsPage-C9UuUKhr.js +2 -0
- package/dashboard/dist/assets/{AgentsPage-CZIWMwak.js.map → AgentsPage-C9UuUKhr.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-BVtpc4xO.js → AvailableEscalationsPage-DrvfXz70.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-BVtpc4xO.js.map → AvailableEscalationsPage-DrvfXz70.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-8bf0yOCT.js → BotPicker-CDq9XRMp.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-8bf0yOCT.js.map → BotPicker-CDq9XRMp.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-B2lr1J6P.js → BulkAssignModal-jsvqtrEA.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-B2lr1J6P.js.map → BulkAssignModal-jsvqtrEA.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-BQQBR2sj.js → CapabilitiesPage-CSCrI6B1.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-BQQBR2sj.js.map → CapabilitiesPage-CSCrI6B1.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DFW8TYyU.js → CollapsibleSection-uD9mn-CQ.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DFW8TYyU.js.map → CollapsibleSection-uD9mn-CQ.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DGlOlQAo.js → ConfirmDeleteModal-BRmx2hA4.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DGlOlQAo.js.map → ConfirmDeleteModal-BRmx2hA4.js.map} +1 -1
- package/dashboard/dist/assets/{ConnectedAppsPage-CIM9gzHj.js → ConnectedAppsPage-DlMzE5a-.js} +2 -2
- package/dashboard/dist/assets/{ConnectedAppsPage-CIM9gzHj.js.map → ConnectedAppsPage-DlMzE5a-.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-BD_iWm6S.js → CountdownTimer-sRuM4eM5.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-BD_iWm6S.js.map → CountdownTimer-sRuM4eM5.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-CTtUkvoD.js → CredentialsPage-bLYydwqa.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-CTtUkvoD.js.map → CredentialsPage-bLYydwqa.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-rZMptkYQ.js → CronLabel-D_ATDL2N.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-rZMptkYQ.js.map → CronLabel-D_ATDL2N.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-CmK9gHC5.js → ElapsedCell-groSMfqB.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-CmK9gHC5.js.map → ElapsedCell-groSMfqB.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-Cfg0EMZs.js → EntityTimelinePanel-D-F3_A9m.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-Cfg0EMZs.js.map → EntityTimelinePanel-D-F3_A9m.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-CPcbC1-9.js → EscalationListSchemaPage-Bad6Jrmr.js} +2 -2
- package/dashboard/dist/assets/{EscalationListSchemaPage-CPcbC1-9.js.map → EscalationListSchemaPage-Bad6Jrmr.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-BsYdNVN7.js → EscalationSchemaPage-BKi_npI9.js} +2 -2
- package/dashboard/dist/assets/{EscalationSchemaPage-BsYdNVN7.js.map → EscalationSchemaPage-BKi_npI9.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTimeline-D1enxZDs.js → EscalationTimeline-DQUUm3b1.js} +2 -2
- package/dashboard/dist/assets/{EscalationTimeline-D1enxZDs.js.map → EscalationTimeline-DQUUm3b1.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTitleSelect-DwqhnPKX.js → EscalationTitleSelect-3mhXh77a.js} +2 -2
- package/dashboard/dist/assets/{EscalationTitleSelect-DwqhnPKX.js.map → EscalationTitleSelect-3mhXh77a.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-ChuKh02E.js → EscalationsOverview-Qaov-uML.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-ChuKh02E.js.map → EscalationsOverview-Qaov-uML.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-GqZIKPce.js → EventTable-V4RF_n58.js} +2 -2
- package/dashboard/dist/assets/{EventTable-GqZIKPce.js.map → EventTable-V4RF_n58.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-CqPFZkVU.js → FilterBar-BygWrnB1.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-CqPFZkVU.js.map → FilterBar-BygWrnB1.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-_fB7mtBU.js → GraphInvokePage-Djslhf96.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-_fB7mtBU.js.map → GraphInvokePage-Djslhf96.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BXA0Cz0F.js → HomePage-EjcNxlKx.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BXA0Cz0F.js.map → HomePage-EjcNxlKx.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Bf4DFITI.js → ListToolbar-RrEAePOX.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Bf4DFITI.js.map → ListToolbar-RrEAePOX.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-H61XQRji.js → McpOverview-8gqiL3Vj.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-H61XQRji.js.map → McpOverview-8gqiL3Vj.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-wbwK8WWq.js → McpQueryDetailPage-COyn6Ak5.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-wbwK8WWq.js.map → McpQueryDetailPage-COyn6Ak5.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-CYvVEk3G.js → McpQueryPage-Dj6Qj72w.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-CYvVEk3G.js.map → McpQueryPage-Dj6Qj72w.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-TZBX68i4.js → McpRunDetailPage-80fQn9iX.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-TZBX68i4.js.map → McpRunDetailPage-80fQn9iX.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-Cu91Mh52.js → McpRunsPage-DaSsI-EM.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-Cu91Mh52.js.map → McpRunsPage-DaSsI-EM.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-D-6sKw6y.js → OperationsPage-BSu1o2gB.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-D-6sKw6y.js.map → OperationsPage-BSu1o2gB.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-DD8JUU3L.js → OperatorDashboard-HFI4WGIV.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-DD8JUU3L.js.map → OperatorDashboard-HFI4WGIV.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-CGri6okV.js → PersonaDetailPage-D0qlBuGi.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-CGri6okV.js.map → PersonaDetailPage-D0qlBuGi.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-DtHW6-Qx.js → PersonasPage-BJClu-5H.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-DtHW6-Qx.js.map → PersonasPage-BJClu-5H.js.map} +1 -1
- package/dashboard/dist/assets/{PortalPage-Dgbk_mzr.js → PortalPage-CucNZn_w.js} +2 -2
- package/dashboard/dist/assets/{PortalPage-Dgbk_mzr.js.map → PortalPage-CucNZn_w.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-BdkacBrD.js → ProcessDetailPage-B9wMw0RV.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-BdkacBrD.js.map → ProcessDetailPage-B9wMw0RV.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DO5A-OfZ.js → ProcessesListPage-B6k4RpmR.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DO5A-OfZ.js.map → ProcessesListPage-B6k4RpmR.js.map} +1 -1
- package/dashboard/dist/assets/{ResolverForm-CqGE5lf-.js → ResolverForm-ZVufJ4G-.js} +2 -2
- package/dashboard/dist/assets/{ResolverForm-CqGE5lf-.js.map → ResolverForm-ZVufJ4G-.js.map} +1 -1
- package/dashboard/dist/assets/{RoleDetailPage-DgVp0Hih.js → RoleDetailPage-CTbq0mz4.js} +2 -2
- package/dashboard/dist/assets/{RoleDetailPage-DgVp0Hih.js.map → RoleDetailPage-CTbq0mz4.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-BmsWq83e.js → RolesPage-DBKxeam4.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-BmsWq83e.js.map → RolesPage-DBKxeam4.js.map} +1 -1
- package/dashboard/dist/assets/RosterWidget-BkLAwEYB.js +2 -0
- package/dashboard/dist/assets/RosterWidget-BkLAwEYB.js.map +1 -0
- package/dashboard/dist/assets/{RunAsSelector-CyUWGp5P.js → RunAsSelector-D2DC4iDf.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-CyUWGp5P.js.map → RunAsSelector-D2DC4iDf.js.map} +1 -1
- package/dashboard/dist/assets/{ScanCodesPage-Cy05JOt4.js → ScanCodesPage-BlKleaT0.js} +2 -2
- package/dashboard/dist/assets/{ScanCodesPage-Cy05JOt4.js.map → ScanCodesPage-BlKleaT0.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BX1afzOg.js → ScanSchemeDetailPage-CTW6gofi.js} +2 -2
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BX1afzOg.js.map → ScanSchemeDetailPage-CTW6gofi.js.map} +1 -1
- package/dashboard/dist/assets/{ScanStationPage-DLAB41tb.js → ScanStationPage-DPRjSPyT.js} +2 -2
- package/dashboard/dist/assets/{ScanStationPage-DLAB41tb.js.map → ScanStationPage-DPRjSPyT.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-BzUTnYYE.js → StickyPagination-CkmX3-Gu.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-BzUTnYYE.js.map → StickyPagination-CkmX3-Gu.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-D0W1ekgG.js → StreamMessageDetail-Xm_n510s.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-D0W1ekgG.js.map → StreamMessageDetail-Xm_n510s.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-BPBwmwuO.js → SwimlaneTimeline-De48aJan.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-BPBwmwuO.js.map → SwimlaneTimeline-De48aJan.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-VuaIXISy.js → TaskDetailPage-HycMx3O9.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-VuaIXISy.js.map → TaskDetailPage-HycMx3O9.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-KaUSoqos.js → TasksListPage-OIcFFp1C.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-KaUSoqos.js.map → TasksListPage-OIcFFp1C.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-C_E6u0fr.js → TimeAgo-OTC_55oZ.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-C_E6u0fr.js.map → TimeAgo-OTC_55oZ.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-CUJiAmax.js → TimestampCell-CAwIj_AI.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-CUJiAmax.js.map → TimestampCell-CAwIj_AI.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-Ch5nQANh.js → ToolTestPanel-8Vf6pfw4.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-Ch5nQANh.js.map → ToolTestPanel-8Vf6pfw4.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-BprToO7w.js → TopicDetailPage-iZW8rK9L.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-BprToO7w.js.map → TopicDetailPage-iZW8rK9L.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-8SmCnQ-E.js → TopicsPage-CqiEcj-W.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-8SmCnQ-E.js.map → TopicsPage-CqiEcj-W.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BkJryunF.js → UserName-DQFjuoib.js} +2 -2
- package/dashboard/dist/assets/{UserName-BkJryunF.js.map → UserName-DQFjuoib.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-B2S5ODie.js → WorkflowExecutionPage-Di08wCbs.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-B2S5ODie.js.map → WorkflowExecutionPage-Di08wCbs.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-CABuRCXp.js → WorkflowsDashboard-Bb8HlrTJ.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-CABuRCXp.js.map → WorkflowsDashboard-Bb8HlrTJ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-BPUHAj8T.js → WorkflowsOverview-Dta1kurk.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-BPUHAj8T.js.map → WorkflowsOverview-Dta1kurk.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DZGjT-Tl.js → YamlWorkflowDetailPage-CfAajg68.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DZGjT-Tl.js.map → YamlWorkflowDetailPage-CfAajg68.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-DIxHURlM.js → YamlWorkflowsPage-CQFUzT4t.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-DIxHURlM.js.map → YamlWorkflowsPage-CQFUzT4t.js.map} +1 -1
- package/dashboard/dist/assets/{agents-BnDp2rcb.js → agents-PuftRTB2.js} +2 -2
- package/dashboard/dist/assets/{agents-BnDp2rcb.js.map → agents-PuftRTB2.js.map} +1 -1
- package/dashboard/dist/assets/{bots-maURYoyr.js → bots-BmEiPAWY.js} +2 -2
- package/dashboard/dist/assets/{bots-maURYoyr.js.map → bots-BmEiPAWY.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-5-TakMUh.js → capabilities-CRii4Soa.js} +2 -2
- package/dashboard/dist/assets/{capabilities-5-TakMUh.js.map → capabilities-CRii4Soa.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-BXVVTWoh.js → controlplane-DO_czaYo.js} +2 -2
- package/dashboard/dist/assets/{controlplane-BXVVTWoh.js.map → controlplane-DO_czaYo.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-v8gx8wFb.js → escalation-columns-CzCquCPh.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-v8gx8wFb.js.map → escalation-columns-CzCquCPh.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-items-OWntjDaH.js → escalation-items-Cy0ZgJqV.js} +2 -2
- package/dashboard/dist/assets/{escalation-items-OWntjDaH.js.map → escalation-items-Cy0ZgJqV.js.map} +1 -1
- package/dashboard/dist/assets/{index-BIfY4mR2.js → index-2SM2_onB.js} +2 -2
- package/dashboard/dist/assets/{index-BIfY4mR2.js.map → index-2SM2_onB.js.map} +1 -1
- package/dashboard/dist/assets/{index-vgHzaGmW.js → index-4YaDUcKd.js} +2 -2
- package/dashboard/dist/assets/{index-vgHzaGmW.js.map → index-4YaDUcKd.js.map} +1 -1
- package/dashboard/dist/assets/{index-YGTGxcTF.js → index-CL_1VpGb.js} +2 -2
- package/dashboard/dist/assets/{index-YGTGxcTF.js.map → index-CL_1VpGb.js.map} +1 -1
- package/dashboard/dist/assets/{index-Dk7nwVpm.js → index-CZ7A3AcD.js} +2 -2
- package/dashboard/dist/assets/{index-Dk7nwVpm.js.map → index-CZ7A3AcD.js.map} +1 -1
- package/dashboard/dist/assets/{index-CvKegIVe.js → index-CfP2nKRc.js} +2 -2
- package/dashboard/dist/assets/{index-CvKegIVe.js.map → index-CfP2nKRc.js.map} +1 -1
- package/dashboard/dist/assets/{index-CR9rhAvN.js → index-Cga5IW3D.js} +2 -2
- package/dashboard/dist/assets/{index-CR9rhAvN.js.map → index-Cga5IW3D.js.map} +1 -1
- package/dashboard/dist/assets/{index-BTm3-qwq.js → index-Cx8xb-oU.js} +2 -2
- package/dashboard/dist/assets/{index-BTm3-qwq.js.map → index-Cx8xb-oU.js.map} +1 -1
- package/dashboard/dist/assets/{index-Dafrbwk_.js → index-DhSCCpqM.js} +2 -2
- package/dashboard/dist/assets/{index-Dafrbwk_.js.map → index-DhSCCpqM.js.map} +1 -1
- package/dashboard/dist/assets/{index-WPVpyoD3.js → index-DiaRlFYI.js} +2 -2
- package/dashboard/dist/assets/{index-WPVpyoD3.js.map → index-DiaRlFYI.js.map} +1 -1
- package/dashboard/dist/assets/{index-D7peGNN0.js → index-Dz6R8-Dw.js} +11 -11
- package/dashboard/dist/assets/index-Dz6R8-Dw.js.map +1 -0
- package/dashboard/dist/assets/{index-D_ojXTgO.js → index-Rwqrflm-.js} +2 -2
- package/dashboard/dist/assets/{index-D_ojXTgO.js.map → index-Rwqrflm-.js.map} +1 -1
- package/dashboard/dist/assets/{index-DvkcyTE2.js → index-XntldBd0.js} +2 -2
- package/dashboard/dist/assets/{index-DvkcyTE2.js.map → index-XntldBd0.js.map} +1 -1
- package/dashboard/dist/assets/{index-CWKs10VQ.js → index-jL2K6us4.js} +2 -2
- package/dashboard/dist/assets/{index-CWKs10VQ.js.map → index-jL2K6us4.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-L_zY1zmy.js → knowledge-CeUqGPuo.js} +2 -2
- package/dashboard/dist/assets/{knowledge-L_zY1zmy.js.map → knowledge-CeUqGPuo.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-wCWFRA0T.js → mcp-Cx96NTeD.js} +2 -2
- package/dashboard/dist/assets/{mcp-wCWFRA0T.js.map → mcp-Cx96NTeD.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CFbGudkb.js → mcp-query-XAzWl0gm.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CFbGudkb.js.map → mcp-query-XAzWl0gm.js.map} +1 -1
- package/dashboard/dist/assets/{personas-B_VIacZJ.js → personas--4kjwyOw.js} +2 -2
- package/dashboard/dist/assets/{personas-B_VIacZJ.js.map → personas--4kjwyOw.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-Bv0Z8xQA.js → pipelines-PgkwvG7f.js} +2 -2
- package/dashboard/dist/assets/{pipelines-Bv0Z8xQA.js.map → pipelines-PgkwvG7f.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-DP6yaNZs.js → tasks-CcYxdBa3.js} +2 -2
- package/dashboard/dist/assets/{tasks-DP6yaNZs.js.map → tasks-CcYxdBa3.js.map} +1 -1
- package/dashboard/dist/assets/{topics-UBSIcpSR.js → topics-_lik7cNY.js} +2 -2
- package/dashboard/dist/assets/{topics-UBSIcpSR.js.map → topics-_lik7cNY.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-R62q3Xpx.js → useDebouncedValue-Bm_AoxVx.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-R62q3Xpx.js.map → useDebouncedValue-Bm_AoxVx.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-CAaszJDE.js → useNamespace-DgXXKdx5.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-CAaszJDE.js.map → useNamespace-DgXXKdx5.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-emCp9U69.js → useYamlActivityEvents-Dj2qtGSd.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-emCp9U69.js.map → useYamlActivityEvents-Dj2qtGSd.js.map} +1 -1
- package/dashboard/dist/assets/{validate-C7yskdEn.js → validate-FlXCBBT6.js} +2 -2
- package/dashboard/dist/assets/{validate-C7yskdEn.js.map → validate-FlXCBBT6.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-C2sOwz1p.js → yaml-workflows-B0_JxRYQ.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-C2sOwz1p.js.map → yaml-workflows-B0_JxRYQ.js.map} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/docs/hitl/x-lt-roster.md +1 -1
- package/docs/mcp.md +6 -1
- package/docs/scan-codes.md +5 -0
- package/package.json +1 -1
- package/dashboard/dist/assets/AgentsPage-CZIWMwak.js +0 -2
- package/dashboard/dist/assets/RosterWidget-DR-T4Izu.js +0 -2
- package/dashboard/dist/assets/RosterWidget-DR-T4Izu.js.map +0 -1
- package/dashboard/dist/assets/index-D7peGNN0.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-WPVpyoD3.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-DiaRlFYI.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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"}
|