@hotmeshio/long-tail 0.4.4 → 0.4.5
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/api/agent-subscriptions.js +14 -0
- package/build/lib/events/index.js +3 -0
- package/build/lib/events/nats.js +2 -0
- package/build/services/agent/index.js +14 -0
- package/build/services/agent/trigger-registry.d.ts +2 -0
- package/build/services/agent/trigger-registry.js +37 -8
- package/build/start/workers.js +3 -0
- package/build/types/events.d.ts +1 -1
- package/dashboard/dist/assets/AdminDashboard-ntLz5Pro.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-DISq0Tz8.js.map → AdminDashboard-ntLz5Pro.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js +16 -0
- package/dashboard/dist/assets/{AgentConfigPage-DqaJpB3K.js.map → AgentConfigPage-D27vWOI6.js.map} +1 -1
- package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js +4 -0
- package/dashboard/dist/assets/{AgentDetailPage-BPzPk2GC.js.map → AgentDetailPage-Cm2KFR4O.js.map} +1 -1
- package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js +2 -0
- package/dashboard/dist/assets/{AgentsPage-CLcxJWjC.js.map → AgentsPage-_ptA-0YO.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-bdPqEzbx.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-hOcjAAIj.js.map → AvailableEscalationsPage-bdPqEzbx.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-CYfFMpkY.js +2 -0
- package/dashboard/dist/assets/{BotPicker-DuAZgHbJ.js.map → BotPicker-CYfFMpkY.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-PRel6TXd.js.map → CapabilitiesPage-M7-ZTFNV.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-DU5KAtQ-.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-DnoUFQVf.js.map → CollapsibleSection-DU5KAtQ-.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-_hW5Vc05.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-_hW5Vc05.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-DiWqv41D.js +2 -0
- package/dashboard/dist/assets/{CopyableId-D0SQ39nR.js.map → CopyableId-DiWqv41D.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-CmbwypSF.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-CqedUU7b.js.map → CredentialsPage-CmbwypSF.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-nycfAefc.js +2 -0
- package/dashboard/dist/assets/{CronLabel-CPEjE-mH.js.map → CronLabel-nycfAefc.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-gNZRBaHg.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-BIQWzbv0.js.map → CustomDurationPicker-gNZRBaHg.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-DGerT2ZM.js +2 -0
- package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-DGerT2ZM.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-vNcqMd05.js +2 -0
- package/dashboard/dist/assets/{DropZone-e5EOL5gC.js.map → DropZone-vNcqMd05.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-CdvQbtve.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-CzVjr74Y.js.map → ElapsedCell-CdvQbtve.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-DMldv8c5.js +2 -0
- package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-DMldv8c5.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-BNENCL_2.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-Bcrb44xJ.js.map → EscalationsOverview-BNENCL_2.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-BqDAyXyc.js +2 -0
- package/dashboard/dist/assets/{EventTable-CGfJU7e1.js.map → EventTable-BqDAyXyc.js.map} +1 -1
- package/dashboard/dist/assets/EventTopicPill-CnHFBglc.js +2 -0
- package/dashboard/dist/assets/{EventTopicPill-xJJnxvlP.js.map → EventTopicPill-CnHFBglc.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-TYiTtUgv.js +2 -0
- package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-TYiTtUgv.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-fterfLKH.js +2 -0
- package/dashboard/dist/assets/{HomePage-BIzUcGW9.js.map → HomePage-fterfLKH.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-BO5Igi6v.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-DNAGFe14.js.map → ListToolbar-BO5Igi6v.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-BQokGg0z.js +2 -0
- package/dashboard/dist/assets/{McpOverview-BpYk21es.js.map → McpOverview-BQokGg0z.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-0WOp2n_j.js +5 -0
- package/dashboard/dist/assets/{McpQueryDetailPage-DlrZiSuL.js.map → McpQueryDetailPage-0WOp2n_j.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-DUey_h9J.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-COfPssO7.js.map → McpQueryPage-DUey_h9J.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-Cra0nQSw.js.map → McpRunDetailPage-Cv4qyr91.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-B3R6KZ61.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-BlgcGN3k.js.map → McpRunsPage-B3R6KZ61.js.map} +1 -1
- package/dashboard/dist/assets/Modal-Qe8lW7gQ.js +2 -0
- package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-Qe8lW7gQ.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-dldvzjcg.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-BbO6cWzb.js.map → OperatorDashboard-dldvzjcg.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-DF4BeEm4.js +2 -0
- package/dashboard/dist/assets/{PageHeader-B_gV_jKk.js.map → PageHeader-DF4BeEm4.js.map} +1 -1
- package/dashboard/dist/assets/PageHeaderWithStats-BQZw6BgA.js +2 -0
- package/dashboard/dist/assets/{PageHeaderWithStats-D0I0nrnx.js.map → PageHeaderWithStats-BQZw6BgA.js.map} +1 -1
- package/dashboard/dist/assets/PriorityBadge-DMyB3WLZ.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-DMyB3WLZ.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-Beo-QVL-.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-s_iV8ICg.js.map → ProcessDetailPage-Beo-QVL-.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-C_ars8gp.js +2 -0
- package/dashboard/dist/assets/{ProcessesListPage-MnLMnxAa.js.map → ProcessesListPage-C_ars8gp.js.map} +1 -1
- package/dashboard/dist/assets/RolePill-DrBZ7JJj.js +2 -0
- package/dashboard/dist/assets/{RolePill-BOBytzrP.js.map → RolePill-DrBZ7JJj.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DgSXFFGL.js +2 -0
- package/dashboard/dist/assets/{RolesPage-BH7KASM7.js.map → RolesPage-DgSXFFGL.js.map} +1 -1
- package/dashboard/dist/assets/RowActions-QcakGbVA.js +2 -0
- package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-QcakGbVA.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-CYMeZwrM.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-_QbJKhlo.js.map → RunAsSelector-CYMeZwrM.js.map} +1 -1
- package/dashboard/dist/assets/ServerName-D5NKD06M.js +2 -0
- package/dashboard/dist/assets/{ServerName-uqa4eBqm.js.map → ServerName-D5NKD06M.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-PZQmmCHK.js +2 -0
- package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-PZQmmCHK.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-ME2R6a7K.js +2 -0
- package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-ME2R6a7K.js.map} +1 -1
- package/dashboard/dist/assets/StepIndicator-CDDVahOz.js +2 -0
- package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CDDVahOz.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-Ddy93Q5I.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-Ddy93Q5I.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js +2 -0
- package/dashboard/dist/assets/{SwimlaneTimeline-og79Llvs.js.map → SwimlaneTimeline-CYYA8nd9.js.map} +1 -1
- package/dashboard/dist/assets/TagInput-B45Dm3IW.js +2 -0
- package/dashboard/dist/assets/{TagInput-D3f11sbM.js.map → TagInput-B45Dm3IW.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-BJRUjVDv.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill-Bc45J7X1.js.map → TaskQueuePill-BJRUjVDv.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-Czu08px3.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-BYj3OqUi.js.map → TasksListPage-Czu08px3.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-CJ56IUy6.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-W7TdJpV-.js.map → TimeAgo-CJ56IUy6.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-QtcYZ9Jx.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-Bi2nc9Q_.js.map → TimestampCell-QtcYZ9Jx.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-DpDv3FwI.js +2 -0
- package/dashboard/dist/assets/{ToolPill-CuoXcmhv.js.map → ToolPill-DpDv3FwI.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js +2 -0
- package/dashboard/dist/assets/{ToolTestPanel-Dl3C53zb.js.map → ToolTestPanel-BzFOwzd_.js.map} +1 -1
- package/dashboard/dist/assets/TopicDetailPage-DwShZbh9.js +9 -0
- package/dashboard/dist/assets/{TopicDetailPage-CjaZn4WP.js.map → TopicDetailPage-DwShZbh9.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-DKXlpZl_.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-BfsJEC1p.js.map → TopicsPage-DKXlpZl_.js.map} +1 -1
- package/dashboard/dist/assets/UserName-zlR1so37.js +2 -0
- package/dashboard/dist/assets/{UserName-b4baWHM_.js.map → UserName-zlR1so37.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-BGmJnXnk.js.map → WorkflowExecutionPage-BMNIxeJB.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-Bg2-0Hkg.js.map → WorkflowPill-B5B3yGlh.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-BlAPZbQZ.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-BzH7jMRu.js.map → WorkflowsDashboard-BlAPZbQZ.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsOverview-NnPi6rwS.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-BcUgBvjD.js.map → WorkflowsOverview-NnPi6rwS.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-C4mZum6x.js +2 -0
- package/dashboard/dist/assets/{YamlWorkflowsPage-OhpCQJ0l.js.map → YamlWorkflowsPage-C4mZum6x.js.map} +1 -1
- package/dashboard/dist/assets/{agents-Ce3HmPz4.js → agents-B5wvILeV.js} +2 -2
- package/dashboard/dist/assets/{agents-Ce3HmPz4.js.map → agents-B5wvILeV.js.map} +1 -1
- package/dashboard/dist/assets/{bots-B0BomNnf.js → bots-BPlouRDm.js} +2 -2
- package/dashboard/dist/assets/{bots-B0BomNnf.js.map → bots-BPlouRDm.js.map} +1 -1
- package/dashboard/dist/assets/capabilities-DkvRG09b.js +2 -0
- package/dashboard/dist/assets/{capabilities-t-w5N9K9.js.map → capabilities-DkvRG09b.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-BrtAZnJM.js → controlplane-0m_rA-UW.js} +2 -2
- package/dashboard/dist/assets/{controlplane-BrtAZnJM.js.map → controlplane-0m_rA-UW.js.map} +1 -1
- package/dashboard/dist/assets/escalation-CfIAIUg2.js +2 -0
- package/dashboard/dist/assets/{escalation-DilnDxw2.js.map → escalation-CfIAIUg2.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-CLIdxlbe.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-C0slywOY.js.map → escalation-columns-CLIdxlbe.js.map} +1 -1
- package/dashboard/dist/assets/helpers-prGqC38M.js +2 -0
- package/dashboard/dist/assets/{helpers-BMvPqQr8.js.map → helpers-prGqC38M.js.map} +1 -1
- package/dashboard/dist/assets/index-4T7Z_gQ4.js +281 -0
- package/dashboard/dist/assets/index-4T7Z_gQ4.js.map +1 -0
- package/dashboard/dist/assets/index-BR3SwTNI.js +2 -0
- package/dashboard/dist/assets/{index-pIMl0mYp.js.map → index-BR3SwTNI.js.map} +1 -1
- package/dashboard/dist/assets/index-BWKIigEk.js +2 -0
- package/dashboard/dist/assets/{index-qNuxC8kX.js.map → index-BWKIigEk.js.map} +1 -1
- package/dashboard/dist/assets/index-BgVuyWhi.js +15 -0
- package/dashboard/dist/assets/{index-D_wqdvG_.js.map → index-BgVuyWhi.js.map} +1 -1
- package/dashboard/dist/assets/index-C0sDEKdo.js +2 -0
- package/dashboard/dist/assets/{index-30-pN97P.js.map → index-C0sDEKdo.js.map} +1 -1
- package/dashboard/dist/assets/index-C2MJzu6J.js +2 -0
- package/dashboard/dist/assets/{index-f-0Duls3.js.map → index-C2MJzu6J.js.map} +1 -1
- package/dashboard/dist/assets/index-CFoddJDr.js +6 -0
- package/dashboard/dist/assets/{index-Ck2QdJXT.js.map → index-CFoddJDr.js.map} +1 -1
- package/dashboard/dist/assets/index-CrMxD5Ib.js +6 -0
- package/dashboard/dist/assets/{index-DPW_i3fH.js.map → index-CrMxD5Ib.js.map} +1 -1
- package/dashboard/dist/assets/index-CuY5hPYB.js +2 -0
- package/dashboard/dist/assets/{index-DnsVYMMg.js.map → index-CuY5hPYB.js.map} +1 -1
- package/dashboard/dist/assets/index-CwkJBn87.js +2 -0
- package/dashboard/dist/assets/{index-Bl9wzQ8Q.js.map → index-CwkJBn87.js.map} +1 -1
- package/dashboard/dist/assets/index-DeL84Cag.js +2 -0
- package/dashboard/dist/assets/{index-DNmlrCAp.js.map → index-DeL84Cag.js.map} +1 -1
- package/dashboard/dist/assets/index-DqeLbz6j.js +2 -0
- package/dashboard/dist/assets/{index-BxOuF0hm.js.map → index-DqeLbz6j.js.map} +1 -1
- package/dashboard/dist/assets/index-P9huxx3-.js +2 -0
- package/dashboard/dist/assets/{index-H5TlloTk.js.map → index-P9huxx3-.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-D01NdF5h.js → knowledge-CUZxyRCO.js} +2 -2
- package/dashboard/dist/assets/{knowledge-D01NdF5h.js.map → knowledge-CUZxyRCO.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CjXjDZI0.js → mcp-B5VQPoF3.js} +2 -2
- package/dashboard/dist/assets/{mcp-CjXjDZI0.js.map → mcp-B5VQPoF3.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-LlKQcWLJ.js → mcp-query-Ba5Zj3yg.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-LlKQcWLJ.js.map → mcp-query-Ba5Zj3yg.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-C0C54hU6.js → mcp-runs-CAiEr5Fc.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-C0C54hU6.js.map → mcp-runs-CAiEr5Fc.js.map} +1 -1
- package/dashboard/dist/assets/namespaces-sVr5scma.js +2 -0
- package/dashboard/dist/assets/{namespaces-6qWDXXJV.js.map → namespaces-sVr5scma.js.map} +1 -1
- package/dashboard/dist/assets/{roles-Dtj0uabn.js → roles-E_bA4e0f.js} +2 -2
- package/dashboard/dist/assets/{roles-Dtj0uabn.js.map → roles-E_bA4e0f.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BevFBjZq.js → tasks-CL6Gv8jB.js} +2 -2
- package/dashboard/dist/assets/{tasks-BevFBjZq.js.map → tasks-CL6Gv8jB.js.map} +1 -1
- package/dashboard/dist/assets/{topics-BMG5tx2g.js → topics-DbtPHERP.js} +2 -2
- package/dashboard/dist/assets/{topics-BMG5tx2g.js.map → topics-DbtPHERP.js.map} +1 -1
- package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js → useCollapsedSections-CGNA5oKV.js} +2 -2
- package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js.map → useCollapsedSections-CGNA5oKV.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-CPyvFlVR.js → useEventHooks-C6c618cj.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CPyvFlVR.js.map → useEventHooks-C6c618cj.js.map} +1 -1
- package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
- package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-Bll8NPNQ.js → useYamlActivityEvents-eK7kIUdh.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Bll8NPNQ.js.map → useYamlActivityEvents-eK7kIUdh.js.map} +1 -1
- package/dashboard/dist/assets/{users-XZ349b0r.js → users-CCHSIAxt.js} +2 -2
- package/dashboard/dist/assets/{users-XZ349b0r.js.map → users-CCHSIAxt.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-B_Yla7iD.js → vendor-icons-D8-ZINAH.js} +2 -2
- package/dashboard/dist/assets/{vendor-icons-B_Yla7iD.js.map → vendor-icons-D8-ZINAH.js.map} +1 -1
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
- package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
- package/dashboard/dist/assets/{workflows-Do-Eiv8f.js → workflows-BNbocg_9.js} +2 -2
- package/dashboard/dist/assets/{workflows-Do-Eiv8f.js.map → workflows-BNbocg_9.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DolGRQ5f.js → yaml-workflows-Cu1FUwrc.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DolGRQ5f.js.map → yaml-workflows-Cu1FUwrc.js.map} +1 -1
- package/dashboard/dist/index.html +4 -4
- package/package.json +1 -1
- package/dashboard/dist/assets/AdminDashboard-DISq0Tz8.js +0 -2
- package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js +0 -16
- package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js +0 -4
- package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-hOcjAAIj.js +0 -2
- package/dashboard/dist/assets/BotPicker-DuAZgHbJ.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-DnoUFQVf.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
- package/dashboard/dist/assets/CopyableId-D0SQ39nR.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-CqedUU7b.js +0 -2
- package/dashboard/dist/assets/CronLabel-CPEjE-mH.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-BIQWzbv0.js +0 -2
- package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
- package/dashboard/dist/assets/DropZone-e5EOL5gC.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-CzVjr74Y.js +0 -2
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
- package/dashboard/dist/assets/EscalationsOverview-Bcrb44xJ.js +0 -2
- package/dashboard/dist/assets/EventTable-CGfJU7e1.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-xJJnxvlP.js +0 -2
- package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
- package/dashboard/dist/assets/HomePage-BIzUcGW9.js +0 -2
- package/dashboard/dist/assets/ListToolbar-DNAGFe14.js +0 -2
- package/dashboard/dist/assets/McpOverview-BpYk21es.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-DlrZiSuL.js +0 -5
- package/dashboard/dist/assets/McpQueryPage-COfPssO7.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-BlgcGN3k.js +0 -2
- package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-BbO6cWzb.js +0 -2
- package/dashboard/dist/assets/PageHeader-B_gV_jKk.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-D0I0nrnx.js +0 -2
- package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-s_iV8ICg.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-MnLMnxAa.js +0 -2
- package/dashboard/dist/assets/RolePill-BOBytzrP.js +0 -2
- package/dashboard/dist/assets/RolesPage-BH7KASM7.js +0 -2
- package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-_QbJKhlo.js +0 -2
- package/dashboard/dist/assets/ServerName-uqa4eBqm.js +0 -2
- package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
- package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
- package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
- package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js +0 -2
- package/dashboard/dist/assets/TagInput-D3f11sbM.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DPV4ySd9.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-DPV4ySd9.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill-Bc45J7X1.js +0 -2
- package/dashboard/dist/assets/TasksListPage-BYj3OqUi.js +0 -2
- package/dashboard/dist/assets/TimeAgo-W7TdJpV-.js +0 -2
- package/dashboard/dist/assets/TimestampCell-Bi2nc9Q_.js +0 -2
- package/dashboard/dist/assets/ToolPill-CuoXcmhv.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js +0 -2
- package/dashboard/dist/assets/TopicDetailPage-CjaZn4WP.js +0 -9
- package/dashboard/dist/assets/TopicsPage-BfsJEC1p.js +0 -2
- package/dashboard/dist/assets/UserName-b4baWHM_.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-BzH7jMRu.js +0 -2
- package/dashboard/dist/assets/WorkflowsOverview-BcUgBvjD.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-OhpCQJ0l.js +0 -2
- package/dashboard/dist/assets/capabilities-t-w5N9K9.js +0 -2
- package/dashboard/dist/assets/escalation-DilnDxw2.js +0 -2
- package/dashboard/dist/assets/escalation-columns-C0slywOY.js +0 -2
- package/dashboard/dist/assets/helpers-BMvPqQr8.js +0 -2
- package/dashboard/dist/assets/index-30-pN97P.js +0 -2
- package/dashboard/dist/assets/index-Bl9wzQ8Q.js +0 -2
- package/dashboard/dist/assets/index-BxOuF0hm.js +0 -2
- package/dashboard/dist/assets/index-Ck2QdJXT.js +0 -6
- package/dashboard/dist/assets/index-DNmlrCAp.js +0 -2
- package/dashboard/dist/assets/index-DPW_i3fH.js +0 -6
- package/dashboard/dist/assets/index-DZX-E_3q.js +0 -63
- package/dashboard/dist/assets/index-DZX-E_3q.js.map +0 -1
- package/dashboard/dist/assets/index-D_wqdvG_.js +0 -15
- package/dashboard/dist/assets/index-DnsVYMMg.js +0 -2
- package/dashboard/dist/assets/index-H5TlloTk.js +0 -2
- package/dashboard/dist/assets/index-f-0Duls3.js +0 -2
- package/dashboard/dist/assets/index-pIMl0mYp.js +0 -2
- package/dashboard/dist/assets/index-qNuxC8kX.js +0 -2
- package/dashboard/dist/assets/namespaces-6qWDXXJV.js +0 -2
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
- package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElapsedCell-
|
|
1
|
+
{"version":3,"file":"ElapsedCell-CdvQbtve.js","sources":["../../src/components/common/display/ElapsedCell.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { formatDurationCompact } from '../../../lib/format';\nimport { DateTooltip } from './DateTooltip';\n\ninterface ElapsedCellProps {\n startDate: string;\n endDate?: string | null;\n isLive?: boolean;\n}\n\n/**\n * Elapsed duration cell for data tables.\n * Shows compact duration with hover tooltip. Ticks every second when live.\n */\nexport function ElapsedCell({ startDate, endDate, isLive }: ElapsedCellProps) {\n const [now, setNow] = useState(Date.now);\n\n useEffect(() => {\n if (!isLive) return;\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, [isLive]);\n\n const start = new Date(startDate).getTime();\n const end = endDate ? new Date(endDate).getTime() : now;\n const ms = Math.max(0, end - start);\n\n const display = formatDurationCompact(ms);\n\n const options = useMemo(() => [\n { label: 'ms', value: String(ms) },\n { label: 'sec', value: `${(ms / 1000).toFixed(3)}s` },\n { label: 'text', value: display },\n ], [ms, display]);\n\n return (\n <DateTooltip options={options}>\n <span className={`text-xs ${isLive ? 'text-status-active' : 'text-text-tertiary'}`}>\n {display}\n </span>\n </DateTooltip>\n );\n}\n"],"names":["ElapsedCell","startDate","endDate","isLive","now","setNow","useState","useEffect","id","start","end","ms","display","formatDurationCompact","options","useMemo","jsxDEV","DateTooltip"],"mappings":"gGAcO,SAASA,EAAY,CAAE,UAAAC,EAAW,QAAAC,EAAS,OAAAC,GAA4B,CAC5E,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,KAAK,GAAG,EAEvCC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAQ,OACb,MAAMK,EAAK,YAAY,IAAMH,EAAO,KAAK,IAAA,CAAK,EAAG,GAAI,EACrD,MAAO,IAAM,cAAcG,CAAE,CAC/B,EAAG,CAACL,CAAM,CAAC,EAEX,MAAMM,EAAQ,IAAI,KAAKR,CAAS,EAAE,QAAA,EAC5BS,EAAMR,EAAU,IAAI,KAAKA,CAAO,EAAE,UAAYE,EAC9CO,EAAK,KAAK,IAAI,EAAGD,EAAMD,CAAK,EAE5BG,EAAUC,EAAsBF,CAAE,EAElCG,EAAUC,EAAAA,QAAQ,IAAM,CAC5B,CAAE,MAAO,KAAM,MAAO,OAAOJ,CAAE,CAAA,EAC/B,CAAE,MAAO,MAAO,MAAO,IAAIA,EAAK,KAAM,QAAQ,CAAC,CAAC,GAAA,EAChD,CAAE,MAAO,OAAQ,MAAOC,CAAA,CAAQ,EAC/B,CAACD,EAAIC,CAAO,CAAC,EAEhB,OACEI,EAAAA,OAACC,EAAA,CAAY,QAAAH,EACX,SAAAE,SAAC,OAAA,CAAK,UAAW,WAAWb,EAAS,qBAAuB,oBAAoB,GAC7E,SAAAS,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./index-4T7Z_gQ4.js";function o({title:m="No data",description:t,icon:s}){return e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-20",children:[s&&e.jsxDEV("div",{className:"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4",children:e.jsxDEV(s,{className:"w-5 h-5 text-accent/50"},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/EmptyState.tsx",lineNumber:16,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/EmptyState.tsx",lineNumber:15,columnNumber:9},this),e.jsxDEV("p",{className:"text-sm text-text-secondary",children:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/EmptyState.tsx",lineNumber:19,columnNumber:7},this),t&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-1",children:t},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/EmptyState.tsx",lineNumber:21,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/EmptyState.tsx",lineNumber:13,columnNumber:5},this)}export{o as E};
|
|
2
|
+
//# sourceMappingURL=EmptyState-DMldv8c5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmptyState-
|
|
1
|
+
{"version":3,"file":"EmptyState-DMldv8c5.js","sources":["../../src/components/common/display/EmptyState.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\n\nexport function EmptyState({\n title = 'No data',\n description,\n icon: Icon,\n}: {\n title?: string;\n description?: string;\n icon?: LucideIcon;\n}) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20\">\n {Icon && (\n <div className=\"w-12 h-12 rounded-full bg-accent/[0.06] flex items-center justify-center mb-4\">\n <Icon className=\"w-5 h-5 text-accent/50\" />\n </div>\n )}\n <p className=\"text-sm text-text-secondary\">{title}</p>\n {description && (\n <p className=\"text-xs text-text-tertiary mt-1\">{description}</p>\n )}\n </div>\n );\n}\n"],"names":["EmptyState","title","description","Icon","jsxDEV"],"mappings":"wCAEO,SAASA,EAAW,CACzB,MAAAC,EAAQ,UACR,YAAAC,EACA,KAAMC,CACR,EAIG,CACD,OACEC,EAAAA,OAAC,MAAA,CAAI,UAAU,kDACZ,SAAA,CAAAD,YACE,MAAA,CAAI,UAAU,gFACb,SAAAC,SAACD,EAAA,CAAK,UAAU,wBAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyC,CAAA,EAD3C,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAEFC,SAAC,IAAA,CAAE,UAAU,8BAA+B,SAAAH,CAAA,EAA5C,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAkD,EACjDC,GACCE,EAAAA,OAAC,IAAA,CAAE,UAAU,kCAAmC,SAAAF,CAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4D,CAAA,CAAA,EARhE,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as u,j as e}from"./index-4T7Z_gQ4.js";import{a as b}from"./vendor-query-DLp59M9_.js";import{e as v}from"./useEventHooks-C6c618cj.js";import{P as N}from"./PageHeader-DF4BeEm4.js";import{S as c}from"./StatCard-PZQmmCHK.js";import{c as h}from"./vendor-react-Co3Y8ikm.js";import"./vendor-icons-D8-ZINAH.js";const x=[{label:"1h",value:"1h"},{label:"24h",value:"24h"},{label:"7d",value:"7d"},{label:"30d",value:"30d"}];function i({value:o,colorClass:l,onClick:n}){return o===0?e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:31,columnNumber:12},this):e.jsxDEV("button",{onClick:n,className:`${l} hover:underline tabular-nums font-medium`,children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:34,columnNumber:5},this)}function w(){var m,d;v();const o=h(),[l,n]=b.useState("24h"),{data:s}=u(l),r=a=>{const p=new URLSearchParams(a).toString();o(`/escalations/available${p?`?${p}`:""}`)},t="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return e.jsxDEV("div",{children:[e.jsxDEV(N,{title:"Escalations",docsHash:"#docs:dashboard.md:escalations-overview"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:61,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-1 mb-6",children:x.map(a=>e.jsxDEV("button",{onClick:()=>n(a.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${l===a.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:a.label},a.value,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:66,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:64,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[e.jsxDEV(c,{label:"Open",value:(s==null?void 0:s.pending)??"—",colorClass:"text-status-pending",onClick:()=>r()},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:82,columnNumber:9},this),e.jsxDEV(c,{label:"Claimed",value:(s==null?void 0:s.claimed)??"—",colorClass:"text-status-active",onClick:()=>r()},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:83,columnNumber:9},this),e.jsxDEV(c,{label:"Created",value:(s==null?void 0:s.created)??"—",onClick:()=>r()},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:84,columnNumber:9},this),e.jsxDEV(c,{label:"Resolved",value:(s==null?void 0:s.resolved)??"—",colorClass:"text-status-success",onClick:()=>r()},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:85,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:81,columnNumber:7},this),(((m=s==null?void 0:s.by_role)==null?void 0:m.length)??0)>0&&e.jsxDEV("div",{className:"mb-8",children:e.jsxDEV("table",{className:"w-full text-left",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b border-surface-border",children:[e.jsxDEV("th",{className:t,children:"Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:94,columnNumber:17},this),e.jsxDEV("th",{className:`${t} text-right w-24`,children:"Pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:95,columnNumber:17},this),e.jsxDEV("th",{className:`${t} text-right w-24`,children:"Claimed"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:96,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:93,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:92,columnNumber:13},this),e.jsxDEV("tbody",{children:s.by_role.map(a=>e.jsxDEV("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsxDEV("button",{onClick:()=>r({role:a.role}),className:"hover:text-accent hover:underline",children:a.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:103,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:102,columnNumber:19},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(i,{value:a.pending,colorClass:"text-status-pending",onClick:()=>r({role:a.role})},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:111,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:110,columnNumber:19},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(i,{value:a.claimed,colorClass:"text-status-active",onClick:()=>r({role:a.role})},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:118,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:117,columnNumber:19},this)]},a.role,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:101,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:99,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:90,columnNumber:9},this),(((d=s==null?void 0:s.by_type)==null?void 0:d.length)??0)>0&&e.jsxDEV("div",{children:e.jsxDEV("table",{className:"w-full text-left",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b border-surface-border",children:[e.jsxDEV("th",{className:t,children:"Type"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:137,columnNumber:17},this),e.jsxDEV("th",{className:`${t} text-right w-24`,children:"Pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:138,columnNumber:17},this),e.jsxDEV("th",{className:`${t} text-right w-24`,children:"Claimed"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:139,columnNumber:17},this),e.jsxDEV("th",{className:`${t} text-right w-24`,children:"Resolved"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:140,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:136,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:135,columnNumber:13},this),e.jsxDEV("tbody",{children:s.by_type.map(a=>e.jsxDEV("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsxDEV("button",{onClick:()=>r({type:a.type}),className:"hover:text-accent hover:underline",children:a.type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:147,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:146,columnNumber:19},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(i,{value:a.pending,colorClass:"text-status-pending",onClick:()=>r({type:a.type})},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:155,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:154,columnNumber:19},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(i,{value:a.claimed,colorClass:"text-status-active",onClick:()=>r({type:a.type})},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:162,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:161,columnNumber:19},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(i,{value:a.resolved,colorClass:"text-status-success",onClick:()=>r({type:a.type})},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:169,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:168,columnNumber:19},this)]},a.type,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:145,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:143,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:134,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:133,columnNumber:9},this),s&&s.by_role.length===0&&s.by_type.length===0&&e.jsxDEV("div",{className:"py-16 text-center",children:e.jsxDEV("p",{className:"text-sm text-text-tertiary",children:["No escalation activity in the last ",l]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:185,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:184,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/EscalationsOverview.tsx",lineNumber:60,columnNumber:5},this)}export{w as EscalationsOverview};
|
|
2
|
+
//# sourceMappingURL=EscalationsOverview-BNENCL_2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EscalationsOverview-Bcrb44xJ.js","sources":["../../src/pages/operator/EscalationsOverview.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useEscalationStats } from '../../api/escalations';\nimport { useEscalationStatsEvents } from '../../hooks/useEventHooks';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { StatCard } from '../../components/common/data/StatCard';\n\n// ── Duration filter ──────────────────────────────────────────────────────────\n\nconst DURATIONS = [\n { label: '1h', value: '1h' },\n { label: '24h', value: '24h' },\n { label: '7d', value: '7d' },\n { label: '30d', value: '30d' },\n] as const;\n\ntype DurationValue = (typeof DURATIONS)[number]['value'];\n\n// ── Clickable stat cell ──────────────────────────────────────────────────────\n\nfunction StatCell({\n value,\n colorClass,\n onClick,\n}: {\n value: number;\n colorClass: string;\n onClick: () => void;\n}) {\n if (value === 0) {\n return <span className=\"text-text-tertiary\">0</span>;\n }\n return (\n <button\n onClick={onClick}\n className={`${colorClass} hover:underline tabular-nums font-medium`}\n >\n {value}\n </button>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function EscalationsOverview() {\n useEscalationStatsEvents();\n const navigate = useNavigate();\n const [duration, setDuration] = useState<DurationValue>('24h');\n\n const { data: stats } = useEscalationStats(duration);\n\n const goToList = (params?: Record<string, string>) => {\n const qs = new URLSearchParams(params).toString();\n navigate(`/escalations/available${qs ? `?${qs}` : ''}`);\n };\n\n const thCls = 'pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary';\n\n return (\n <div>\n <PageHeader title=\"Escalations\" docsHash=\"#docs:dashboard.md:escalations-overview\" />\n\n {/* Duration tabs */}\n <div className=\"flex items-center gap-1 mb-6\">\n {DURATIONS.map((d) => (\n <button\n key={d.value}\n onClick={() => setDuration(d.value)}\n className={`px-3 py-1 text-xs rounded-full transition-colors ${\n duration === d.value\n ? 'bg-accent text-text-inverse'\n : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {d.label}\n </button>\n ))}\n </div>\n\n {/* Summary cards */}\n <div className=\"grid grid-cols-4 gap-4 mb-8\">\n <StatCard label=\"Open\" value={stats?.pending ?? '—'} colorClass=\"text-status-pending\" onClick={() => goToList()} />\n <StatCard label=\"Claimed\" value={stats?.claimed ?? '—'} colorClass=\"text-status-active\" onClick={() => goToList()} />\n <StatCard label=\"Created\" value={stats?.created ?? '—'} onClick={() => goToList()} />\n <StatCard label=\"Resolved\" value={stats?.resolved ?? '—'} colorClass=\"text-status-success\" onClick={() => goToList()} />\n </div>\n\n {/* By-role table */}\n {(stats?.by_role?.length ?? 0) > 0 && (\n <div className=\"mb-8\">\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Role</th>\n <th className={`${thCls} text-right w-24`}>Pending</th>\n <th className={`${thCls} text-right w-24`}>Claimed</th>\n </tr>\n </thead>\n <tbody>\n {stats!.by_role.map((row) => (\n <tr key={row.role} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToList({ role: row.role })}\n className=\"hover:text-accent hover:underline\"\n >\n {row.role}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.pending}\n colorClass=\"text-status-pending\"\n onClick={() => goToList({ role: row.role })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.claimed}\n colorClass=\"text-status-active\"\n onClick={() => goToList({ role: row.role })}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {/* By-type table */}\n {(stats?.by_type?.length ?? 0) > 0 && (\n <div>\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Type</th>\n <th className={`${thCls} text-right w-24`}>Pending</th>\n <th className={`${thCls} text-right w-24`}>Claimed</th>\n <th className={`${thCls} text-right w-24`}>Resolved</th>\n </tr>\n </thead>\n <tbody>\n {stats!.by_type.map((row) => (\n <tr key={row.type} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToList({ type: row.type })}\n className=\"hover:text-accent hover:underline\"\n >\n {row.type}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.pending}\n colorClass=\"text-status-pending\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.claimed}\n colorClass=\"text-status-active\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.resolved}\n colorClass=\"text-status-success\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {/* Empty state */}\n {stats && stats.by_role.length === 0 && stats.by_type.length === 0 && (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n No escalation activity in the last {duration}\n </p>\n </div>\n )}\n </div>\n );\n}\n"],"names":["DURATIONS","StatCell","value","colorClass","onClick","jsx","EscalationsOverview","useEscalationStatsEvents","navigate","useNavigate","duration","setDuration","useState","stats","useEscalationStats","goToList","params","qs","thCls","PageHeader","d","jsxs","StatCard","_a","row","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EscalationsOverview-BNENCL_2.js","sources":["../../src/pages/operator/EscalationsOverview.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useEscalationStats } from '../../api/escalations';\nimport { useEscalationStatsEvents } from '../../hooks/useEventHooks';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { StatCard } from '../../components/common/data/StatCard';\n\n// ── Duration filter ──────────────────────────────────────────────────────────\n\nconst DURATIONS = [\n { label: '1h', value: '1h' },\n { label: '24h', value: '24h' },\n { label: '7d', value: '7d' },\n { label: '30d', value: '30d' },\n] as const;\n\ntype DurationValue = (typeof DURATIONS)[number]['value'];\n\n// ── Clickable stat cell ──────────────────────────────────────────────────────\n\nfunction StatCell({\n value,\n colorClass,\n onClick,\n}: {\n value: number;\n colorClass: string;\n onClick: () => void;\n}) {\n if (value === 0) {\n return <span className=\"text-text-tertiary\">0</span>;\n }\n return (\n <button\n onClick={onClick}\n className={`${colorClass} hover:underline tabular-nums font-medium`}\n >\n {value}\n </button>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function EscalationsOverview() {\n useEscalationStatsEvents();\n const navigate = useNavigate();\n const [duration, setDuration] = useState<DurationValue>('24h');\n\n const { data: stats } = useEscalationStats(duration);\n\n const goToList = (params?: Record<string, string>) => {\n const qs = new URLSearchParams(params).toString();\n navigate(`/escalations/available${qs ? `?${qs}` : ''}`);\n };\n\n const thCls = 'pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary';\n\n return (\n <div>\n <PageHeader title=\"Escalations\" docsHash=\"#docs:dashboard.md:escalations-overview\" />\n\n {/* Duration tabs */}\n <div className=\"flex items-center gap-1 mb-6\">\n {DURATIONS.map((d) => (\n <button\n key={d.value}\n onClick={() => setDuration(d.value)}\n className={`px-3 py-1 text-xs rounded-full transition-colors ${\n duration === d.value\n ? 'bg-accent text-text-inverse'\n : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {d.label}\n </button>\n ))}\n </div>\n\n {/* Summary cards */}\n <div className=\"grid grid-cols-4 gap-4 mb-8\">\n <StatCard label=\"Open\" value={stats?.pending ?? '—'} colorClass=\"text-status-pending\" onClick={() => goToList()} />\n <StatCard label=\"Claimed\" value={stats?.claimed ?? '—'} colorClass=\"text-status-active\" onClick={() => goToList()} />\n <StatCard label=\"Created\" value={stats?.created ?? '—'} onClick={() => goToList()} />\n <StatCard label=\"Resolved\" value={stats?.resolved ?? '—'} colorClass=\"text-status-success\" onClick={() => goToList()} />\n </div>\n\n {/* By-role table */}\n {(stats?.by_role?.length ?? 0) > 0 && (\n <div className=\"mb-8\">\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Role</th>\n <th className={`${thCls} text-right w-24`}>Pending</th>\n <th className={`${thCls} text-right w-24`}>Claimed</th>\n </tr>\n </thead>\n <tbody>\n {stats!.by_role.map((row) => (\n <tr key={row.role} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToList({ role: row.role })}\n className=\"hover:text-accent hover:underline\"\n >\n {row.role}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.pending}\n colorClass=\"text-status-pending\"\n onClick={() => goToList({ role: row.role })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.claimed}\n colorClass=\"text-status-active\"\n onClick={() => goToList({ role: row.role })}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {/* By-type table */}\n {(stats?.by_type?.length ?? 0) > 0 && (\n <div>\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Type</th>\n <th className={`${thCls} text-right w-24`}>Pending</th>\n <th className={`${thCls} text-right w-24`}>Claimed</th>\n <th className={`${thCls} text-right w-24`}>Resolved</th>\n </tr>\n </thead>\n <tbody>\n {stats!.by_type.map((row) => (\n <tr key={row.type} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToList({ type: row.type })}\n className=\"hover:text-accent hover:underline\"\n >\n {row.type}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.pending}\n colorClass=\"text-status-pending\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.claimed}\n colorClass=\"text-status-active\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell\n value={row.resolved}\n colorClass=\"text-status-success\"\n onClick={() => goToList({ type: row.type })}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n\n {/* Empty state */}\n {stats && stats.by_role.length === 0 && stats.by_type.length === 0 && (\n <div className=\"py-16 text-center\">\n <p className=\"text-sm text-text-tertiary\">\n No escalation activity in the last {duration}\n </p>\n </div>\n )}\n </div>\n );\n}\n"],"names":["DURATIONS","StatCell","value","colorClass","onClick","jsxDEV","EscalationsOverview","useEscalationStatsEvents","navigate","useNavigate","duration","setDuration","useState","stats","useEscalationStats","goToList","params","qs","thCls","PageHeader","d","StatCard","_a","row","_b"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as t,f as j,C as V}from"./index-4T7Z_gQ4.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{F as S,b}from"./FilterBar-TYiTtUgv.js";import{E as C}from"./SwimlaneTimeline-CYYA8nd9.js";const $=new Set(["activity_task_scheduled","timer_started","child_workflow_execution_started","signal_wait_started"]),F=new Set(["activity_task_completed","activity_task_failed","timer_fired","child_workflow_execution_completed","child_workflow_execution_failed","workflow_execution_signaled"]);function P(i){const o=new Set;for(const l of i)F.has(l.event_type)&&l.attributes.timeline_key&&o.add(l.attributes.timeline_key);return o}function R({events:i,childTasks:o}){const[l,w]=n.useState(""),[c,x]=n.useState(""),[d,h]=n.useState("asc"),[m,u]=n.useState(new Set),N=[...new Set(i.map(e=>e.category))].sort(),v=[...new Set(i.map(e=>e.event_type))].sort(),k=P(i),g=e=>{if(e.duration_ms!==null||!$.has(e.event_type))return!1;const s=e.attributes.timeline_key;return!(s&&k.has(s))};let r=i;l&&(r=r.filter(e=>e.category===l)),c&&(r=r.filter(e=>e.event_type===c)),r=[...r].sort((e,s)=>d==="asc"?e.event_id-s.event_id:s.event_id-e.event_id);const E=e=>{switch(e){case"activity":return"bg-blue-500";case"signal":return"bg-emerald-500";case"timer":return"bg-status-warning";case"child_workflow":return"bg-violet-500";default:return"bg-text-tertiary"}},_=e=>{const s=e.event_type;if(e.attributes.activity_type)return`${s} — ${e.attributes.activity_type}`;if(e.attributes.signal_name)return`${s} — ${e.attributes.signal_name}`;if(e.attributes.child_workflow_id){const a=e.attributes.child_workflow_id,D=a.length>24?`${a.slice(0,24)}...`:a;return`${s} — ${D}`}return s},y=e=>{if(!(o!=null&&o.length))return;const s=e.attributes.activity_type;if(s)return o.find(a=>a.workflow_type===s)},f=e=>{u(s=>{const a=new Set(s);return a.has(e)?a.delete(e):a.add(e),a})},p=r.length>0&&r.every(e=>m.has(e.event_id)),T=()=>{u(p?new Set:new Set(r.map(e=>e.event_id)))};return t.jsxDEV("div",{children:[t.jsxDEV("div",{className:"px-6 py-4 border-b border-surface-border flex items-center justify-between flex-wrap gap-3",children:[t.jsxDEV("div",{className:"flex items-center gap-4",children:[t.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:["Events (",r.length,")"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:135,columnNumber:11},this),r.length>0&&t.jsxDEV("button",{onClick:T,className:"text-[10px] text-accent hover:underline",children:p?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:139,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:134,columnNumber:9},this),t.jsxDEV(S,{children:[t.jsxDEV(b,{label:"Category",value:l,onChange:w,options:N.map(e=>({value:e,label:e}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:145,columnNumber:11},this),t.jsxDEV(b,{label:"Type",value:c,onChange:x,options:v.map(e=>({value:e,label:e}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:151,columnNumber:11},this),t.jsxDEV("button",{onClick:()=>h(e=>e==="asc"?"desc":"asc"),className:"btn-ghost text-xs",children:d==="asc"?"Oldest first":"Newest first"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:157,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:144,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:133,columnNumber:7},this),t.jsxDEV("div",{children:r.length===0?t.jsxDEV("div",{className:"px-6 py-8 text-center",children:t.jsxDEV("p",{className:"text-sm text-text-tertiary",children:"No events match the current filters"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:169,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:168,columnNumber:11},this):r.map(e=>{const s=m.has(e.event_id),a=g(e);return t.jsxDEV("div",{className:"border-b border-surface-border last:border-b-0",children:[t.jsxDEV("div",{className:"px-6 py-3 flex items-center gap-4 cursor-pointer hover:bg-surface-hover transition-colors duration-200",onClick:()=>f(e.event_id),children:[t.jsxDEV("span",{className:`text-[10px] text-text-tertiary transition-transform duration-300 ${s?"rotate-90":""}`,children:"▶"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:187,columnNumber:19},this),t.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary w-8 shrink-0",children:e.event_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:193,columnNumber:19},this),t.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${E(e.category)}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:196,columnNumber:19},this),t.jsxDEV("span",{className:"text-sm text-text-primary flex-1 truncate",children:_(e)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:199,columnNumber:19},this),t.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary shrink-0",children:a?t.jsxDEV("span",{className:"inline-flex items-center gap-1 text-status-warning",children:[t.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:205,columnNumber:25},this),"Pending"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:204,columnNumber:23},this):e.duration_ms!==null?j(e.duration_ms):"--"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:202,columnNumber:19},this),t.jsxDEV("time",{className:"text-[10px] font-mono text-text-tertiary shrink-0",children:new Date(e.event_time).toLocaleTimeString()},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:214,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:182,columnNumber:17},this),t.jsxDEV(V,{open:s&&!!e.attributes,children:t.jsxDEV("div",{className:"px-6 pb-4 pl-16",children:t.jsxDEV(C,{event:e,childTask:y(e),pending:a,onClose:()=>f(e.event_id)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:222,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:221,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:220,columnNumber:17},this)]},e.event_id,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:177,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:166,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventTable.tsx",lineNumber:132,columnNumber:5},this)}export{R as E};
|
|
2
|
+
//# sourceMappingURL=EventTable-BqDAyXyc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventTable-CGfJU7e1.js","sources":["../../src/pages/workflows/workflow-execution/EventTable.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { EventDetailPanel } from './EventDetailPanel';\nimport { formatDuration } from './utils';\n\ninterface EventTableProps {\n events: WorkflowExecutionEvent[];\n childTasks?: LTTaskRecord[];\n}\n\n/** Event types that represent the \"start\" phase of a paired operation */\nconst STARTED_TYPES = new Set([\n 'activity_task_scheduled',\n 'timer_started',\n 'child_workflow_execution_started',\n 'signal_wait_started',\n]);\n\n/** Completion event types that close a paired operation */\nconst COMPLETED_TYPES = new Set([\n 'activity_task_completed',\n 'activity_task_failed',\n 'timer_fired',\n 'child_workflow_execution_completed',\n 'child_workflow_execution_failed',\n 'workflow_execution_signaled',\n]);\n\n/**\n * Build a set of timeline_keys that have a matching completion event.\n * A \"scheduled\" event is only truly pending if no completion exists.\n */\nfunction buildCompletedKeys(events: WorkflowExecutionEvent[]): Set<string> {\n const keys = new Set<string>();\n for (const e of events) {\n if (COMPLETED_TYPES.has(e.event_type) && e.attributes.timeline_key) {\n keys.add(e.attributes.timeline_key);\n }\n }\n return keys;\n}\n\nexport function EventTable({ events, childTasks }: EventTableProps) {\n const [categoryFilter, setCategoryFilter] = useState('');\n const [typeFilter, setTypeFilter] = useState('');\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc');\n const [expandedEvents, setExpandedEvents] = useState<Set<number>>(new Set());\n\n const categories = [...new Set(events.map((e) => e.category))].sort();\n const eventTypes = [...new Set(events.map((e) => e.event_type))].sort();\n const completedKeys = buildCompletedKeys(events);\n\n /** True only when a \"started/scheduled\" event has no matching completion */\n const isPending = (evt: WorkflowExecutionEvent): boolean => {\n if (evt.duration_ms !== null) return false;\n if (!STARTED_TYPES.has(evt.event_type)) return false;\n const tlk = evt.attributes.timeline_key;\n if (tlk && completedKeys.has(tlk)) return false;\n return true;\n };\n\n let filtered = events;\n if (categoryFilter) filtered = filtered.filter((e) => e.category === categoryFilter);\n if (typeFilter) filtered = filtered.filter((e) => e.event_type === typeFilter);\n\n filtered = [...filtered].sort((a, b) =>\n sortOrder === 'asc' ? a.event_id - b.event_id : b.event_id - a.event_id,\n );\n\n const categoryDot = (category: string) => {\n switch (category) {\n case 'activity':\n return 'bg-blue-500';\n case 'signal':\n return 'bg-emerald-500';\n case 'timer':\n return 'bg-status-warning';\n case 'child_workflow':\n return 'bg-violet-500';\n default:\n return 'bg-text-tertiary';\n }\n };\n\n /** Build a descriptive label for an event row */\n const eventLabel = (evt: WorkflowExecutionEvent): string => {\n const base = evt.event_type;\n if (evt.attributes.activity_type) {\n return `${base} — ${evt.attributes.activity_type}`;\n }\n if (evt.attributes.signal_name) {\n return `${base} — ${evt.attributes.signal_name}`;\n }\n if (evt.attributes.child_workflow_id) {\n const id = evt.attributes.child_workflow_id;\n const truncated = id.length > 24 ? `${id.slice(0, 24)}...` : id;\n return `${base} — ${truncated}`;\n }\n return base;\n };\n\n /** Find a matching child task for an event's activity_type */\n const findChildTask = (evt: WorkflowExecutionEvent): LTTaskRecord | undefined => {\n if (!childTasks?.length) return undefined;\n const activityType = evt.attributes.activity_type;\n if (!activityType) return undefined;\n return childTasks.find((t) => t.workflow_type === activityType);\n };\n\n const toggleEvent = (id: number) => {\n setExpandedEvents((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const allExpanded = filtered.length > 0 && filtered.every((e) => expandedEvents.has(e.event_id));\n\n const toggleAll = () => {\n if (allExpanded) {\n setExpandedEvents(new Set());\n } else {\n setExpandedEvents(new Set(filtered.map((e) => e.event_id)));\n }\n };\n\n return (\n <div>\n <div className=\"px-6 py-4 border-b border-surface-border flex items-center justify-between flex-wrap gap-3\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Events ({filtered.length})\n </p>\n {filtered.length > 0 && (\n <button onClick={toggleAll} className=\"text-[10px] text-accent hover:underline\">\n {allExpanded ? 'Collapse all' : 'Expand all'}\n </button>\n )}\n </div>\n <FilterBar>\n <FilterSelect\n label=\"Category\"\n value={categoryFilter}\n onChange={setCategoryFilter}\n options={categories.map((c) => ({ value: c, label: c }))}\n />\n <FilterSelect\n label=\"Type\"\n value={typeFilter}\n onChange={setTypeFilter}\n options={eventTypes.map((t) => ({ value: t, label: t }))}\n />\n <button\n onClick={() => setSortOrder((s) => (s === 'asc' ? 'desc' : 'asc'))}\n className=\"btn-ghost text-xs\"\n >\n {sortOrder === 'asc' ? 'Oldest first' : 'Newest first'}\n </button>\n </FilterBar>\n </div>\n\n <div>\n {filtered.length === 0 ? (\n <div className=\"px-6 py-8 text-center\">\n <p className=\"text-sm text-text-tertiary\">No events match the current filters</p>\n </div>\n ) : (\n filtered.map((evt) => {\n const isExpanded = expandedEvents.has(evt.event_id);\n const pending = isPending(evt);\n\n return (\n <div\n key={evt.event_id}\n className=\"border-b border-surface-border last:border-b-0\"\n >\n {/* Row header */}\n <div\n className=\"px-6 py-3 flex items-center gap-4 cursor-pointer hover:bg-surface-hover transition-colors duration-200\"\n onClick={() => toggleEvent(evt.event_id)}\n >\n {/* Expand chevron */}\n <span\n className={`text-[10px] text-text-tertiary transition-transform duration-300 ${isExpanded ? 'rotate-90' : ''}`}\n >\n ▶\n </span>\n\n <span className=\"text-xs font-mono text-text-tertiary w-8 shrink-0\">\n {evt.event_id}\n </span>\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${categoryDot(evt.category)}`}\n />\n <span className=\"text-sm text-text-primary flex-1 truncate\">\n {eventLabel(evt)}\n </span>\n <span className=\"text-xs font-mono text-text-tertiary shrink-0\">\n {pending ? (\n <span className=\"inline-flex items-center gap-1 text-status-warning\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n Pending\n </span>\n ) : evt.duration_ms !== null ? (\n formatDuration(evt.duration_ms)\n ) : (\n '--'\n )}\n </span>\n <time className=\"text-[10px] font-mono text-text-tertiary shrink-0\">\n {new Date(evt.event_time).toLocaleTimeString()}\n </time>\n </div>\n\n {/* Inline detail panel — directly below the clicked row */}\n <Collapsible open={isExpanded && !!evt.attributes}>\n <div className=\"px-6 pb-4 pl-16\">\n <EventDetailPanel\n event={evt}\n childTask={findChildTask(evt)}\n pending={pending}\n onClose={() => toggleEvent(evt.event_id)}\n />\n </div>\n </Collapsible>\n </div>\n );\n })\n )}\n </div>\n </div>\n );\n}\n"],"names":["STARTED_TYPES","COMPLETED_TYPES","buildCompletedKeys","events","keys","e","EventTable","childTasks","categoryFilter","setCategoryFilter","useState","typeFilter","setTypeFilter","sortOrder","setSortOrder","expandedEvents","setExpandedEvents","categories","eventTypes","completedKeys","isPending","evt","tlk","filtered","a","b","categoryDot","category","eventLabel","base","id","truncated","findChildTask","activityType","t","toggleEvent","prev","next","allExpanded","toggleAll","jsxs","jsx","FilterBar","FilterSelect","c","s","isExpanded","pending","formatDuration","Collapsible","EventDetailPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EventTable-BqDAyXyc.js","sources":["../../src/pages/workflows/workflow-execution/EventTable.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport type { WorkflowExecutionEvent, LTTaskRecord } from '../../../api/types';\nimport { EventDetailPanel } from './EventDetailPanel';\nimport { formatDuration } from './utils';\n\ninterface EventTableProps {\n events: WorkflowExecutionEvent[];\n childTasks?: LTTaskRecord[];\n}\n\n/** Event types that represent the \"start\" phase of a paired operation */\nconst STARTED_TYPES = new Set([\n 'activity_task_scheduled',\n 'timer_started',\n 'child_workflow_execution_started',\n 'signal_wait_started',\n]);\n\n/** Completion event types that close a paired operation */\nconst COMPLETED_TYPES = new Set([\n 'activity_task_completed',\n 'activity_task_failed',\n 'timer_fired',\n 'child_workflow_execution_completed',\n 'child_workflow_execution_failed',\n 'workflow_execution_signaled',\n]);\n\n/**\n * Build a set of timeline_keys that have a matching completion event.\n * A \"scheduled\" event is only truly pending if no completion exists.\n */\nfunction buildCompletedKeys(events: WorkflowExecutionEvent[]): Set<string> {\n const keys = new Set<string>();\n for (const e of events) {\n if (COMPLETED_TYPES.has(e.event_type) && e.attributes.timeline_key) {\n keys.add(e.attributes.timeline_key);\n }\n }\n return keys;\n}\n\nexport function EventTable({ events, childTasks }: EventTableProps) {\n const [categoryFilter, setCategoryFilter] = useState('');\n const [typeFilter, setTypeFilter] = useState('');\n const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc');\n const [expandedEvents, setExpandedEvents] = useState<Set<number>>(new Set());\n\n const categories = [...new Set(events.map((e) => e.category))].sort();\n const eventTypes = [...new Set(events.map((e) => e.event_type))].sort();\n const completedKeys = buildCompletedKeys(events);\n\n /** True only when a \"started/scheduled\" event has no matching completion */\n const isPending = (evt: WorkflowExecutionEvent): boolean => {\n if (evt.duration_ms !== null) return false;\n if (!STARTED_TYPES.has(evt.event_type)) return false;\n const tlk = evt.attributes.timeline_key;\n if (tlk && completedKeys.has(tlk)) return false;\n return true;\n };\n\n let filtered = events;\n if (categoryFilter) filtered = filtered.filter((e) => e.category === categoryFilter);\n if (typeFilter) filtered = filtered.filter((e) => e.event_type === typeFilter);\n\n filtered = [...filtered].sort((a, b) =>\n sortOrder === 'asc' ? a.event_id - b.event_id : b.event_id - a.event_id,\n );\n\n const categoryDot = (category: string) => {\n switch (category) {\n case 'activity':\n return 'bg-blue-500';\n case 'signal':\n return 'bg-emerald-500';\n case 'timer':\n return 'bg-status-warning';\n case 'child_workflow':\n return 'bg-violet-500';\n default:\n return 'bg-text-tertiary';\n }\n };\n\n /** Build a descriptive label for an event row */\n const eventLabel = (evt: WorkflowExecutionEvent): string => {\n const base = evt.event_type;\n if (evt.attributes.activity_type) {\n return `${base} — ${evt.attributes.activity_type}`;\n }\n if (evt.attributes.signal_name) {\n return `${base} — ${evt.attributes.signal_name}`;\n }\n if (evt.attributes.child_workflow_id) {\n const id = evt.attributes.child_workflow_id;\n const truncated = id.length > 24 ? `${id.slice(0, 24)}...` : id;\n return `${base} — ${truncated}`;\n }\n return base;\n };\n\n /** Find a matching child task for an event's activity_type */\n const findChildTask = (evt: WorkflowExecutionEvent): LTTaskRecord | undefined => {\n if (!childTasks?.length) return undefined;\n const activityType = evt.attributes.activity_type;\n if (!activityType) return undefined;\n return childTasks.find((t) => t.workflow_type === activityType);\n };\n\n const toggleEvent = (id: number) => {\n setExpandedEvents((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const allExpanded = filtered.length > 0 && filtered.every((e) => expandedEvents.has(e.event_id));\n\n const toggleAll = () => {\n if (allExpanded) {\n setExpandedEvents(new Set());\n } else {\n setExpandedEvents(new Set(filtered.map((e) => e.event_id)));\n }\n };\n\n return (\n <div>\n <div className=\"px-6 py-4 border-b border-surface-border flex items-center justify-between flex-wrap gap-3\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Events ({filtered.length})\n </p>\n {filtered.length > 0 && (\n <button onClick={toggleAll} className=\"text-[10px] text-accent hover:underline\">\n {allExpanded ? 'Collapse all' : 'Expand all'}\n </button>\n )}\n </div>\n <FilterBar>\n <FilterSelect\n label=\"Category\"\n value={categoryFilter}\n onChange={setCategoryFilter}\n options={categories.map((c) => ({ value: c, label: c }))}\n />\n <FilterSelect\n label=\"Type\"\n value={typeFilter}\n onChange={setTypeFilter}\n options={eventTypes.map((t) => ({ value: t, label: t }))}\n />\n <button\n onClick={() => setSortOrder((s) => (s === 'asc' ? 'desc' : 'asc'))}\n className=\"btn-ghost text-xs\"\n >\n {sortOrder === 'asc' ? 'Oldest first' : 'Newest first'}\n </button>\n </FilterBar>\n </div>\n\n <div>\n {filtered.length === 0 ? (\n <div className=\"px-6 py-8 text-center\">\n <p className=\"text-sm text-text-tertiary\">No events match the current filters</p>\n </div>\n ) : (\n filtered.map((evt) => {\n const isExpanded = expandedEvents.has(evt.event_id);\n const pending = isPending(evt);\n\n return (\n <div\n key={evt.event_id}\n className=\"border-b border-surface-border last:border-b-0\"\n >\n {/* Row header */}\n <div\n className=\"px-6 py-3 flex items-center gap-4 cursor-pointer hover:bg-surface-hover transition-colors duration-200\"\n onClick={() => toggleEvent(evt.event_id)}\n >\n {/* Expand chevron */}\n <span\n className={`text-[10px] text-text-tertiary transition-transform duration-300 ${isExpanded ? 'rotate-90' : ''}`}\n >\n ▶\n </span>\n\n <span className=\"text-xs font-mono text-text-tertiary w-8 shrink-0\">\n {evt.event_id}\n </span>\n <span\n className={`w-2 h-2 rounded-full shrink-0 ${categoryDot(evt.category)}`}\n />\n <span className=\"text-sm text-text-primary flex-1 truncate\">\n {eventLabel(evt)}\n </span>\n <span className=\"text-xs font-mono text-text-tertiary shrink-0\">\n {pending ? (\n <span className=\"inline-flex items-center gap-1 text-status-warning\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse\" />\n Pending\n </span>\n ) : evt.duration_ms !== null ? (\n formatDuration(evt.duration_ms)\n ) : (\n '--'\n )}\n </span>\n <time className=\"text-[10px] font-mono text-text-tertiary shrink-0\">\n {new Date(evt.event_time).toLocaleTimeString()}\n </time>\n </div>\n\n {/* Inline detail panel — directly below the clicked row */}\n <Collapsible open={isExpanded && !!evt.attributes}>\n <div className=\"px-6 pb-4 pl-16\">\n <EventDetailPanel\n event={evt}\n childTask={findChildTask(evt)}\n pending={pending}\n onClose={() => toggleEvent(evt.event_id)}\n />\n </div>\n </Collapsible>\n </div>\n );\n })\n )}\n </div>\n </div>\n );\n}\n"],"names":["STARTED_TYPES","COMPLETED_TYPES","buildCompletedKeys","events","keys","e","EventTable","childTasks","categoryFilter","setCategoryFilter","useState","typeFilter","setTypeFilter","sortOrder","setSortOrder","expandedEvents","setExpandedEvents","categories","eventTypes","completedKeys","isPending","evt","tlk","filtered","a","b","categoryDot","category","eventLabel","base","id","truncated","findChildTask","activityType","t","toggleEvent","prev","next","allExpanded","toggleAll","jsxDEV","FilterBar","FilterSelect","c","s","isExpanded","pending","formatDuration","Collapsible","EventDetailPanel"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./index-4T7Z_gQ4.js";import{R as i}from"./vendor-icons-D8-ZINAH.js";const a={task:"text-blue-400",workflow:"text-accent",escalation:"text-amber-400",activity:"text-cyan-400",knowledge:"text-violet-400",agent:"text-emerald-400",app:"text-rose-400",milestone:"text-violet-400"};function c({topic:t}){const o=t.split(".")[0],s=a[o]??"text-text-quaternary",n=t.split(".").slice(-2).join(".");return e.jsxDEV("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-secondary",children:[e.jsxDEV(i,{className:`w-2.5 h-2.5 shrink-0 ${s}`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/EventTopicPill.tsx",lineNumber:31,columnNumber:7},this),n]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/EventTopicPill.tsx",lineNumber:30,columnNumber:5},this)}export{c as E};
|
|
2
|
+
//# sourceMappingURL=EventTopicPill-CnHFBglc.js.map
|
package/dashboard/dist/assets/{EventTopicPill-xJJnxvlP.js.map → EventTopicPill-CnHFBglc.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventTopicPill-
|
|
1
|
+
{"version":3,"file":"EventTopicPill-CnHFBglc.js","sources":["../../src/components/common/display/EventTopicPill.tsx"],"sourcesContent":["import { Radio } from 'lucide-react';\n\n/**\n * Universal event topic display — Radio icon + monotype text.\n * Used everywhere an event subscription topic is rendered.\n * No border, no background — matches CronLabel's simplicity.\n */\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'text-blue-400',\n workflow: 'text-accent',\n escalation: 'text-amber-400',\n activity: 'text-cyan-400',\n knowledge: 'text-violet-400',\n agent: 'text-emerald-400',\n app: 'text-rose-400',\n milestone: 'text-violet-400',\n};\n\ninterface EventTopicPillProps {\n topic: string;\n}\n\nexport function EventTopicPill({ topic }: EventTopicPillProps) {\n const category = topic.split('.')[0];\n const iconColor = CATEGORY_COLORS[category] ?? 'text-text-quaternary';\n const shortTopic = topic.split('.').slice(-2).join('.');\n\n return (\n <span className=\"inline-flex items-center gap-1 text-[11px] font-mono text-text-secondary\">\n <Radio className={`w-2.5 h-2.5 shrink-0 ${iconColor}`} strokeWidth={1.5} />\n {shortTopic}\n </span>\n );\n}\n"],"names":["CATEGORY_COLORS","EventTopicPill","topic","category","iconColor","shortTopic","jsxDEV","Radio"],"mappings":"uFAQA,MAAMA,EAA0C,CAC9C,KAAY,gBACZ,SAAY,cACZ,WAAY,iBACZ,SAAY,gBACZ,UAAY,kBACZ,MAAY,mBACZ,IAAY,gBACZ,UAAY,iBACd,EAMO,SAASC,EAAe,CAAE,MAAAC,GAA8B,CAC7D,MAAMC,EAAWD,EAAM,MAAM,GAAG,EAAE,CAAC,EAC7BE,EAAYJ,EAAgBG,CAAQ,GAAK,uBACzCE,EAAaH,EAAM,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,EAEtD,OACEI,EAAAA,OAAC,OAAA,CAAK,UAAU,2EACd,SAAA,CAAAA,EAAAA,OAACC,GAAM,UAAW,wBAAwBH,CAAS,GAAI,YAAa,KAApE,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAyE,EACxEC,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./index-4T7Z_gQ4.js";import{a as m}from"./vendor-query-DLp59M9_.js";function p({children:r,actions:t}){return e.jsxDEV("div",{className:"sticky top-0 z-20 bg-surface -mx-10 px-10 py-1.5 pb-4 border-b border-surface-border/50",children:e.jsxDEV("div",{className:"flex items-center gap-2 flex-wrap",children:[r,t&&e.jsxDEV("div",{className:"ml-auto flex items-center gap-2",children:t},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:13,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:11,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:10,columnNumber:5},this)}function x({label:r,value:t,onChange:l,options:n,required:i,placeholder:s}){return e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary",children:r},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:32,columnNumber:7},this),e.jsxDEV("select",{value:t,onChange:a=>l(a.target.value),className:"select text-[11px] py-1 px-2",children:[!i&&e.jsxDEV("option",{value:"",children:s||"All"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:38,columnNumber:23},this),n.map(a=>e.jsxDEV("option",{value:a.value,children:a.label},a.value,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:40,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:33,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:31,columnNumber:5},this)}function b({label:r,value:t,onChange:l,placeholder:n}){const[i,s]=m.useState(t),a=m.useRef(void 0);m.useEffect(()=>{s(t)},[t]);const c=o=>{s(o),clearTimeout(a.current),a.current=setTimeout(()=>l(o),300)};return m.useEffect(()=>()=>clearTimeout(a.current),[]),e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("label",{className:"text-[10px] text-text-tertiary whitespace-nowrap",children:r},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("input",{type:"text",value:i,onChange:o=>c(o.target.value),placeholder:n,className:"input text-[11px] py-1 px-2 w-48 font-mono"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:75,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/FilterBar.tsx",lineNumber:73,columnNumber:5},this)}export{p as F,b as a,x as b};
|
|
2
|
+
//# sourceMappingURL=FilterBar-TYiTtUgv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterBar-
|
|
1
|
+
{"version":3,"file":"FilterBar-TYiTtUgv.js","sources":["../../src/components/common/data/FilterBar.tsx"],"sourcesContent":["import { useState, useEffect, useRef, type ReactNode } from 'react';\n\ninterface FilterBarProps {\n children: ReactNode;\n actions?: ReactNode;\n}\n\nexport function FilterBar({ children, actions }: FilterBarProps) {\n return (\n <div className=\"sticky top-0 z-20 bg-surface -mx-10 px-10 py-1.5 pb-4 border-b border-surface-border/50\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {children}\n {actions && <div className=\"ml-auto flex items-center gap-2\">{actions}</div>}\n </div>\n </div>\n );\n}\n\ninterface FilterSelectProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n options: { value: string; label: string }[];\n /** When true, omit the default \"All\" option — a value is always required. */\n required?: boolean;\n placeholder?: string;\n}\n\nexport function FilterSelect({ label, value, onChange, options, required, placeholder }: FilterSelectProps) {\n return (\n <div className=\"flex items-center gap-1.5\">\n <label className=\"text-[10px] text-text-tertiary\">{label}</label>\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"select text-[11px] py-1 px-2\"\n >\n {!required && <option value=\"\">{placeholder || 'All'}</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\ninterface FilterInputProps {\n label: string;\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n}\n\nexport function FilterInput({ label, value, onChange, placeholder }: FilterInputProps) {\n const [local, setLocal] = useState(value);\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n // Sync from parent when the URL-driven value changes externally\n useEffect(() => { setLocal(value); }, [value]);\n\n const handleChange = (v: string) => {\n setLocal(v);\n clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => onChange(v), 300);\n };\n\n // Flush on unmount\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <label className=\"text-[10px] text-text-tertiary whitespace-nowrap\">{label}</label>\n <input\n type=\"text\"\n value={local}\n onChange={(e) => handleChange(e.target.value)}\n placeholder={placeholder}\n className=\"input text-[11px] py-1 px-2 w-48 font-mono\"\n />\n </div>\n );\n}\n"],"names":["FilterBar","children","actions","jsxDEV","FilterSelect","label","value","onChange","options","required","placeholder","e","opt","FilterInput","local","setLocal","useState","timerRef","useRef","useEffect","handleChange","v"],"mappings":"uFAOO,SAASA,EAAU,CAAE,SAAAC,EAAU,QAAAC,GAA2B,CAC/D,gBACG,MAAA,CAAI,UAAU,0FACb,SAAAC,EAAAA,OAAC,MAAA,CAAI,UAAU,oCACZ,SAAA,CAAAF,EACAC,GAAWC,EAAAA,OAAC,MAAA,CAAI,UAAU,kCAAmC,SAAAD,CAAA,EAAlD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0D,CAAA,CAAA,EAFxE,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,CAEJ,CAYO,SAASE,EAAa,CAAE,MAAAC,EAAO,MAAAC,EAAO,SAAAC,EAAU,QAAAC,EAAS,SAAAC,EAAU,YAAAC,GAAkC,CAC1G,OACEP,EAAAA,OAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,iCAAkC,SAAAE,CAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAyD,EACzDF,EAAAA,OAAC,SAAA,CACC,MAAAG,EACA,SAAWK,GAAMJ,EAASI,EAAE,OAAO,KAAK,EACxC,UAAU,+BAET,SAAA,CAAA,CAACF,GAAYN,EAAAA,OAAC,SAAA,CAAO,MAAM,GAAI,YAAe,OAAjC,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuC,EACpDK,EAAQ,IAAKI,GACZT,EAAAA,OAAC,SAAA,CAAuB,MAAOS,EAAI,MAChC,SAAAA,EAAI,KAAA,EADMA,EAAI,MAAjB,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,CAAA,CAAA,EAVH,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAWA,CAAA,EAbF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAcA,CAEJ,CASO,SAASC,EAAY,CAAE,MAAAR,EAAO,MAAAC,EAAO,SAAAC,EAAU,YAAAG,GAAiC,CACrF,KAAM,CAACI,EAAOC,CAAQ,EAAIC,EAAAA,SAASV,CAAK,EAClCW,EAAWC,EAAAA,OAAsC,MAAS,EAGhEC,EAAAA,UAAU,IAAM,CAAEJ,EAAST,CAAK,CAAG,EAAG,CAACA,CAAK,CAAC,EAE7C,MAAMc,EAAgBC,GAAc,CAClCN,EAASM,CAAC,EACV,aAAaJ,EAAS,OAAO,EAC7BA,EAAS,QAAU,WAAW,IAAMV,EAASc,CAAC,EAAG,GAAG,CACtD,EAGAF,OAAAA,EAAAA,UAAU,IAAM,IAAM,aAAaF,EAAS,OAAO,EAAG,CAAA,CAAE,EAGtDd,EAAAA,OAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,mDAAoD,SAAAE,CAAA,EAArE,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA2E,EAC3EF,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOW,EACP,SAAWH,GAAMS,EAAaT,EAAE,OAAO,KAAK,EAC5C,YAAAD,EACA,UAAU,4CAAA,EALZ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{k as Z,s as I,j as e,d as P,c as ee,N as se,J as ae}from"./index-4T7Z_gQ4.js";import{a as c}from"./vendor-query-DLp59M9_.js";import{b as oe}from"./workflows-BNbocg_9.js";import{u as te}from"./mcp-runs-CAiEr5Fc.js";import{a as re}from"./controlplane-0m_rA-UW.js";import{u as ie}from"./tasks-CL6Gv8jB.js";import{e as me,b as le,u as ne}from"./useEventHooks-C6c618cj.js";import{R as T}from"./RolePill-DrBZ7JJj.js";import{W as x}from"./WorkflowPill-B5B3yGlh.js";import{L as f}from"./ListToolbar-BO5Igi6v.js";import{E as ce}from"./EventTopicPill-CnHFBglc.js";import{t as z,a3 as p,L as B,W as M,C as Q,I as J,R as O,B as de,i as pe}from"./vendor-icons-D8-ZINAH.js";import{c as G,f as ue}from"./vendor-react-Co3Y8ikm.js";const he={completed:"bg-status-success",active:"bg-status-active",running:"bg-status-active",pending:"bg-status-pending",error:"bg-status-error",failed:"bg-status-error"};function U(a){return he[a]??"bg-text-tertiary"}let be=0;function Ne(a=5){const[o,t]=c.useState([]),[r,i]=c.useState(!1),n=c.useRef(null),m=c.useCallback(l=>{var d,N,v;if((d=l.type)!=null&&d.startsWith("mesh."))return;const b=l.activityName||l.workflowName||((N=l.data)==null?void 0:N.domain)||((v=l.workflowId)==null?void 0:v.slice(0,16))||"";t(D=>[{id:++be,type:l.type,timestamp:l.timestamp,label:b,data:l},...D].slice(0,a)),i(!0),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>i(!1),2e3)},[a]);return ee(`${se}.>`,m),{events:o,pulse:r}}function u({icon:a,color:o,docsHash:t,children:r,actions:i}){return e.jsxDEV("div",{className:"flex items-center justify-between mb-4 pb-2 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(a,{className:`w-4.5 h-4.5 ${o||"text-accent/60"}`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:66,columnNumber:9},this),e.jsxDEV("h2",{className:"text-sm font-semibold uppercase tracking-widest text-accent/80",children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:65,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[t&&e.jsxDEV("button",{onClick:()=>{window.location.hash=t},className:"text-text-quaternary hover:text-accent transition-colors",title:"Docs",children:e.jsxDEV(de,{className:"w-2.5 h-2.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:72,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:71,columnNumber:11},this),i]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:69,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:64,columnNumber:5},this)}function h({icon:a,text:o}){return e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-10 text-center",children:[e.jsxDEV(a,{className:"w-6 h-6 text-text-quaternary/50 mb-2",strokeWidth:1},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:84,columnNumber:7},this),e.jsxDEV("p",{className:"text-xs text-text-quaternary",children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:85,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:83,columnNumber:5},this)}function xe(a,o=37){if(!a||a.length<=o)return a;const t=Math.floor((o-3)/2);return`${a.slice(0,t)}...${a.slice(-t)}`}function y({dot:a,pill:o,id:t,date:r,onClick:i}){return e.jsxDEV("button",{onClick:i,className:"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${a}`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:108,columnNumber:9},this),e.jsxDEV("span",{className:"text-[12px] text-text-primary font-mono truncate max-w-[60%]",children:xe(t)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:109,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto whitespace-nowrap",children:e.jsxDEV(P,{date:r},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:110,columnNumber:95},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:110,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:107,columnNumber:7},this),e.jsxDEV("div",{className:"pl-3.5 flex items-center gap-1 overflow-hidden",children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:112,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:106,columnNumber:5},this)}function g({to:a,icon:o,title:t}){const r=G();return e.jsxDEV("button",{onClick:()=>r(a),className:"text-text-quaternary hover:text-accent transition-colors",title:t,children:e.jsxDEV(o,{className:"w-2.5 h-2.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:125,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:120,columnNumber:5},this)}function X({appIds:a,selected:o,onSelect:t}){const[r,i]=c.useState(!1),n=c.useRef(null);return c.useEffect(()=>{if(!r)return;const m=l=>{n.current&&!n.current.contains(l.target)&&i(!1)};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[r]),a.length<=1?null:e.jsxDEV("div",{className:"relative mb-3 -mt-2",ref:n,children:[e.jsxDEV("button",{onClick:()=>i(m=>!m),className:"flex items-center gap-1 px-2 py-0.5 text-[10px] rounded bg-accent/10 text-accent hover:bg-accent/20 transition-colors",children:[o,e.jsxDEV("svg",{className:`w-2.5 h-2.5 transition-transform ${r?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:159,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:158,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:153,columnNumber:7},this),r&&e.jsxDEV("div",{className:"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg z-30 py-1 min-w-[120px]",children:a.map(m=>e.jsxDEV("button",{onClick:()=>{t(m),i(!1)},className:`w-full text-left px-3 py-1.5 text-[11px] transition-colors ${o===m?"text-accent bg-accent/5":"text-text-secondary hover:bg-surface-hover"}`,children:m},m,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:165,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:163,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:152,columnNumber:5},this)}function fe({event:a}){const[o,t]=c.useState(!1);return e.jsxDEV("div",{children:[e.jsxDEV("button",{onClick:()=>t(!o),className:"w-full text-left px-1 py-2 hover:bg-surface-hover/50 rounded-md transition-colors flex items-center gap-2",children:[e.jsxDEV(pe,{className:`w-2.5 h-2.5 text-text-quaternary shrink-0 transition-transform ${o?"rotate-0":"-rotate-90"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:188,columnNumber:9},this),e.jsxDEV(ce,{topic:a.type},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:189,columnNumber:9},this),e.jsxDEV("span",{className:"text-[11px] text-text-secondary font-mono truncate flex-1",children:a.label||"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:190,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary shrink-0",children:e.jsxDEV(P,{date:a.timestamp,format:"time"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:191,columnNumber:69},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:191,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:187,columnNumber:7},this),o&&e.jsxDEV("div",{className:"pl-5 pb-2",children:e.jsxDEV(ae,{data:a.data,defaultCollapsed:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:195,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:194,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:186,columnNumber:5},this)}function Se(){var $,q,A,F,L;const a=G(),{user:o}=Z(),[t,r]=ue(),i=t.get("pipelinenamespace")||"hmsh",n=t.get("durablenamespace")||"durable",m=c.useCallback((s,E)=>{r(Y=>{const W=new URLSearchParams(Y);return W.set(s,E),W},{replace:!1})},[r]);me(),le(),ne();const l=ie({limit:5}),b=oe({limit:5,sort_by:"updated_at",order:"desc",namespace:n}),{data:d}=re(),N=((d==null?void 0:d.apps)??[]).map(s=>s.appId),v=N,D=N,H=te({limit:5,app_id:i,sort_by:"updated_at",order:"desc"}),j=I({status:"pending",limit:5,sort_by:"updated_at",order:"desc"}),V=I({assigned_to:o==null?void 0:o.userId,status:"pending",limit:5,sort_by:"updated_at",order:"desc"}),{events:w,pulse:K}=Ne(),k=(($=l.data)==null?void 0:$.processes)??[],_=((q=b.data)==null?void 0:q.jobs)??[],C=((A=H.data)==null?void 0:A.jobs)??[],S=((F=j.data)==null?void 0:F.escalations)??[],R=((L=V.data)==null?void 0:L.escalations)??[];return e.jsxDEV("div",{children:[e.jsxDEV("h1",{className:"text-3xl font-light text-text-primary mb-10",children:"Recent Activity"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:240,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-14",children:[e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:z,color:"text-emerald-400",docsHash:"#docs:dashboard.md:processes-overview",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(f,{onRefresh:()=>l.refetch(),isFetching:l.isFetching,apiPath:"/tasks/processes?limit=5"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:249,columnNumber:15},this),e.jsxDEV(g,{to:"/processes/all",icon:p,title:"All processes"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:250,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:248,columnNumber:13},this),children:"Certified Processes"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:247,columnNumber:11},this),e.jsxDEV("div",{className:"mb-3 -mt-2",children:e.jsxDEV("span",{className:"px-2 py-0.5 text-[10px] rounded text-text-quaternary uppercase tracking-widest",children:"all namespaces"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:256,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:255,columnNumber:11},this),k.length===0?e.jsxDEV(h,{icon:z,text:"No recent processes"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:259,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-1",children:k.map(s=>e.jsxDEV(y,{dot:(s.task_count??0)>0&&(s.completed??0)>=(s.task_count??0)?"bg-status-success":(s.escalated??0)>0?"border border-status-error":"bg-status-active",pill:e.jsxDEV(e.Fragment,{children:(s.workflow_types??[s.workflow_type]).filter(Boolean).map(E=>e.jsxDEV(x,{type:E,size:"xs"},E,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:266,columnNumber:104},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:266,columnNumber:25},this),id:s.origin_id,date:s.last_activity??s.started_at,onClick:()=>a(`/processes/detail/${s.origin_id}`)},s.origin_id,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:263,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:261,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:246,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:B,color:"text-blue-400",docsHash:"#docs:dashboard.md:durable-executions",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(f,{onRefresh:()=>b.refetch(),isFetching:b.isFetching,apiPath:`/workflow-states/jobs?namespace=${n}&limit=5`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:280,columnNumber:15},this),e.jsxDEV(g,{to:"/workflows/executions",icon:p,title:"All durable executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:281,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:279,columnNumber:13},this),children:"Durable Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:278,columnNumber:11},this),e.jsxDEV(X,{appIds:v,selected:n,onSelect:s=>m("durablenamespace",s)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:286,columnNumber:11},this),_.length===0?e.jsxDEV(h,{icon:B,text:"No recent executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:288,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-1",children:_.map(s=>e.jsxDEV(y,{dot:U(s.status),pill:e.jsxDEV(x,{type:s.entity||s.type||"workflow",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:295,columnNumber:25},this),id:s.workflow_id,date:s.updated_at??s.created_at,onClick:()=>a(`/workflows/executions/${s.workflow_id}`)},s.workflow_id,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:292,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:290,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:277,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:M,color:"text-violet-400",docsHash:"#docs:dashboard.md:mcp-pipeline-tools",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(f,{onRefresh:()=>H.refetch(),isFetching:H.isFetching,apiPath:`/mcp-runs?app_id=${i}&limit=5`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:309,columnNumber:15},this),e.jsxDEV(g,{to:"/mcp/executions",icon:p,title:"All pipeline executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:310,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:308,columnNumber:13},this),children:"Pipeline Executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:307,columnNumber:11},this),e.jsxDEV(X,{appIds:D,selected:i,onSelect:s=>m("pipelinenamespace",s)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:315,columnNumber:11},this),C.length===0?e.jsxDEV(h,{icon:M,text:"No recent pipeline runs"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:317,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-1",children:C.map(s=>e.jsxDEV(y,{dot:U(s.status),pill:e.jsxDEV(x,{type:s.entity||s.workflow_name||"pipeline",variant:"pipeline",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:324,columnNumber:25},this),id:s.workflow_id,date:s.updated_at??s.created_at,onClick:()=>a(`/mcp/executions/${s.workflow_id}?namespace=${i}`)},s.workflow_id,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:321,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:319,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:306,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:243,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-x-14 mt-14",children:[e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:Q,color:"text-amber-400",docsHash:"#docs:dashboard.md:all-escalations",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(f,{onRefresh:()=>j.refetch(),isFetching:j.isFetching,apiPath:"/escalations?status=pending&limit=5&sort_by=priority&order=asc"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:342,columnNumber:15},this),e.jsxDEV(g,{to:"/escalations/available",icon:p,title:"All available escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:343,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:341,columnNumber:13},this),children:"All Escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:340,columnNumber:11},this),S.length===0?e.jsxDEV(h,{icon:Q,text:"No pending escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:349,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-1",children:S.map(s=>e.jsxDEV("button",{onClick:()=>a(`/escalations/detail/${s.id}`),className:"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsxDEV("span",{className:"text-[9px] text-text-quaternary font-medium shrink-0",children:["P",s.priority??2]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:359,columnNumber:21},this),e.jsxDEV("span",{className:"text-[12px] text-text-primary truncate flex-1 max-w-[65%]",children:s.description||s.subtype||s.type},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:360,columnNumber:21},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto",children:e.jsxDEV(P,{date:s.updated_at??s.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:361,columnNumber:89},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:361,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:358,columnNumber:19},this),e.jsxDEV("div",{className:"flex items-center gap-2 pl-5",children:[e.jsxDEV(x,{type:s.type||"unknown",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:364,columnNumber:21},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:365,columnNumber:21},this),e.jsxDEV(T,{role:s.role},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:366,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:363,columnNumber:19},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:353,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:351,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:339,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:J,color:"text-orange-400",docsHash:"#docs:dashboard.md:escalations-overview",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(f,{onRefresh:()=>V.refetch(),isFetching:V.isFetching,apiPath:`/escalations?assigned_to=${(o==null?void 0:o.userId)??""}&status=pending&limit=5`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:378,columnNumber:15},this),e.jsxDEV(g,{to:"/escalations/queue",icon:p,title:"My escalation queue"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:379,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:377,columnNumber:13},this),children:"My Escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:376,columnNumber:11},this),R.length===0?e.jsxDEV(h,{icon:J,text:"No assigned escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:385,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-1",children:R.map(s=>e.jsxDEV("button",{onClick:()=>a(`/escalations/detail/${s.id}`),className:"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsxDEV("span",{className:"text-[9px] text-text-quaternary font-medium shrink-0",children:["P",s.priority??2]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:395,columnNumber:21},this),e.jsxDEV("span",{className:"text-[12px] text-text-primary truncate flex-1 max-w-[65%]",children:s.description||s.subtype||s.type},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:396,columnNumber:21},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto",children:e.jsxDEV(P,{date:s.updated_at??s.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:397,columnNumber:89},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:397,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:394,columnNumber:19},this),e.jsxDEV("div",{className:"flex items-center gap-2 pl-5",children:[e.jsxDEV(x,{type:s.type||"unknown",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:400,columnNumber:21},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:401,columnNumber:21},this),e.jsxDEV(T,{role:s.role},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:402,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:399,columnNumber:19},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:389,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:387,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:375,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV(u,{icon:O,color:"text-emerald-400",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${K?"bg-emerald-400":"bg-zinc-600"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:415,columnNumber:17},this),e.jsxDEV("button",{onClick:()=>{const s=document.querySelector('[title="Fullscreen"]');s==null||s.click()},className:"text-text-quaternary hover:text-accent transition-colors",title:"View all events",children:e.jsxDEV(p,{className:"w-2.5 h-2.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:421,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:416,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:414,columnNumber:15},this),children:"Event Stream"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:412,columnNumber:11},this),w.length===0?e.jsxDEV(h,{icon:O,text:"Events appear here in real time"},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:429,columnNumber:13},this):e.jsxDEV("div",{className:"divide-y divide-surface-border/20",children:w.map(s=>e.jsxDEV(fe,{event:s},s.id,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:433,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:431,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:411,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:336,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/home/HomePage.tsx",lineNumber:239,columnNumber:5},this)}export{Se as HomePage};
|
|
2
|
+
//# sourceMappingURL=HomePage-fterfLKH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage-BIzUcGW9.js","sources":["../../src/pages/home/HomePage.tsx"],"sourcesContent":["import { useState, useRef, useCallback, useEffect } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport {\n AlertCircle, Inbox, ListChecks, Wand2, Layers, Radio, ExternalLink, BookOpen, ChevronDown,\n} from 'lucide-react';\nimport { useEscalations } from '../../api/escalations';\nimport { useJobs } from '../../api/workflows';\nimport { useMcpRuns } from '../../api/mcp-runs';\nimport { useControlPlaneApps } from '../../api/controlplane';\nimport { useProcesses } from '../../api/tasks';\nimport { useAuth } from '../../hooks/useAuth';\nimport { useEscalationStatsEvents, useWorkflowListEvents, useProcessListEvents } from '../../hooks/useEventHooks';\nimport { useEventSubscription } from '../../hooks/useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../../lib/nats/config';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { EventTopicPill } from '../../components/common/display/EventTopicPill';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\n\nconst STATUS_DOT: Record<string, string> = {\n completed: 'bg-status-success',\n active: 'bg-status-active',\n running: 'bg-status-active',\n pending: 'bg-status-pending',\n error: 'bg-status-error',\n failed: 'bg-status-error',\n};\nfunction statusDotClass(status: string): string {\n return STATUS_DOT[status] ?? 'bg-text-tertiary';\n}\n\n// ── Event colors ────────────────────────────────────────────────────────────\n\n\n// ── Live Feed ───────────────────────────────────────────────────────────────\n\ninterface FeedEvent { id: number; type: string; timestamp: string; label: string; data: Record<string, unknown>; }\nlet feedCounter = 0;\n\nfunction useLiveFeed(maxItems = 5) {\n const [events, setEvents] = useState<FeedEvent[]>([]);\n const [pulse, setPulse] = useState(false);\n const pulseTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handler = useCallback((event: any) => {\n if (event.type?.startsWith('mesh.')) return;\n const label = event.activityName || event.workflowName || event.data?.domain || event.workflowId?.slice(0, 16) || '';\n setEvents((prev) => [{ id: ++feedCounter, type: event.type, timestamp: event.timestamp, label, data: event }, ...prev].slice(0, maxItems));\n setPulse(true);\n if (pulseTimer.current) clearTimeout(pulseTimer.current);\n pulseTimer.current = setTimeout(() => setPulse(false), 2000);\n }, [maxItems]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, handler);\n return { events, pulse };\n}\n\n// ── Section header ──────────────────────────────────────────────────────────\n\nfunction SectionHeader({ icon: Icon, color, docsHash, children, actions }: { icon: React.ElementType; color?: string; docsHash?: string; children: React.ReactNode; actions?: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between mb-4 pb-2 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <Icon className={`w-4.5 h-4.5 ${color || 'text-accent/60'}`} strokeWidth={1.5} />\n <h2 className=\"text-sm font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n <div className=\"flex items-center gap-2\">\n {docsHash && (\n <button onClick={() => { window.location.hash = docsHash; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Docs\">\n <BookOpen className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n )}\n {actions}\n </div>\n </div>\n );\n}\n\nfunction EmptyPanel({ icon: Icon, text }: { icon: React.ElementType; text: string }) {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <Icon className=\"w-6 h-6 text-text-quaternary/50 mb-2\" strokeWidth={1} />\n <p className=\"text-xs text-text-quaternary\">{text}</p>\n </div>\n );\n}\n\n/** Middle-ellipsis: keep first N and last N chars with ... in between */\nfunction midEllipsis(s: string, maxLen = 37): string {\n if (!s || s.length <= maxLen) return s;\n const keep = Math.floor((maxLen - 3) / 2);\n return `${s.slice(0, keep)}...${s.slice(-keep)}`;\n}\n\n/** Consistent row for all execution lists in row 1 */\nfunction ExecutionRow({ dot, pill, id, date, onClick }: {\n dot: string;\n pill: React.ReactNode;\n id: string;\n date: string;\n onClick: () => void;\n}) {\n return (\n <button onClick={onClick} className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\">\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${dot}`} />\n <span className=\"text-[12px] text-text-primary font-mono truncate max-w-[60%]\">{midEllipsis(id)}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto whitespace-nowrap\"><DateValue date={date} /></span>\n </div>\n <div className=\"pl-3.5 flex items-center gap-1 overflow-hidden\">{pill}</div>\n </button>\n );\n}\n\nfunction NavIcon({ to, icon: Icon, title }: { to: string; icon: React.ElementType; title: string }) {\n const navigate = useNavigate();\n return (\n <button\n onClick={() => navigate(to)}\n className=\"text-text-quaternary hover:text-accent transition-colors\"\n title={title}\n >\n <Icon className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n );\n}\n\n// ── Namespace Picker ────────────────────────────────────────────────────────\n\nfunction AppPicker({ appIds, selected, onSelect }: {\n appIds: string[];\n selected: string;\n onSelect: (id: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n if (appIds.length <= 1) return null;\n\n return (\n <div className=\"relative mb-3 -mt-2\" ref={ref}>\n <button\n onClick={() => setOpen((v) => !v)}\n className=\"flex items-center gap-1 px-2 py-0.5 text-[10px] rounded bg-accent/10 text-accent hover:bg-accent/20 transition-colors\"\n >\n {selected}\n <svg className={`w-2.5 h-2.5 transition-transform ${open ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {open && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg z-30 py-1 min-w-[120px]\">\n {appIds.map((id) => (\n <button\n key={id}\n onClick={() => { onSelect(id); setOpen(false); }}\n className={`w-full text-left px-3 py-1.5 text-[11px] transition-colors ${\n selected === id ? 'text-accent bg-accent/5' : 'text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {id}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ── Event stream row (expandable) ───────────────────────────────────────────\n\nfunction EventStreamRow({ event }: { event: FeedEvent }) {\n const [expanded, setExpanded] = useState(false);\n return (\n <div>\n <button onClick={() => setExpanded(!expanded)} className=\"w-full text-left px-1 py-2 hover:bg-surface-hover/50 rounded-md transition-colors flex items-center gap-2\">\n <ChevronDown className={`w-2.5 h-2.5 text-text-quaternary shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <EventTopicPill topic={event.type} />\n <span className=\"text-[11px] text-text-secondary font-mono truncate flex-1\">{event.label || '—'}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0\"><DateValue date={event.timestamp} format=\"time\" /></span>\n </button>\n {expanded && (\n <div className=\"pl-5 pb-2\">\n <JsonViewer data={event.data} defaultCollapsed={false} />\n </div>\n )}\n </div>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function HomePage() {\n const navigate = useNavigate();\n const { user } = useAuth();\n const [searchParams, setSearchParams] = useSearchParams();\n const pipelineNs = searchParams.get('pipelinenamespace') || 'hmsh';\n const durableNs = searchParams.get('durablenamespace') || 'durable';\n const setNs = useCallback((key: string, ns: string) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set(key, ns);\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n useEscalationStatsEvents();\n useWorkflowListEvents();\n useProcessListEvents();\n\n const procQ = useProcesses({ limit: 5 });\n const jobsQ = useJobs({ limit: 5, sort_by: 'updated_at', order: 'desc', namespace: durableNs });\n const { data: cpData } = useControlPlaneApps();\n const allAppIds = (cpData?.apps ?? []).map((a: any) => a.appId);\n const durableAppIds = allAppIds;\n const pipelineAppIds = allAppIds;\n const mcpQ = useMcpRuns({ limit: 5, app_id: pipelineNs, sort_by: 'updated_at', order: 'desc' });\n const allEscQ = useEscalations({ status: 'pending', limit: 5, sort_by: 'updated_at', order: 'desc' });\n const myEscQ = useEscalations({ assigned_to: user?.userId, status: 'pending', limit: 5, sort_by: 'updated_at', order: 'desc' });\n const { events: liveEvents, pulse } = useLiveFeed();\n\n const processes = procQ.data?.processes ?? [];\n const jobs = jobsQ.data?.jobs ?? [];\n const mcpRuns = (mcpQ.data as any)?.jobs ?? [];\n const allEscalations = allEscQ.data?.escalations ?? [];\n const myEscalations = myEscQ.data?.escalations ?? [];\n\n return (\n <div>\n <h1 className=\"text-3xl font-light text-text-primary mb-10\">Recent Activity</h1>\n\n {/* ── Row 1: Processes | Durable Executions | Pipeline Executions ──── */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-14\">\n\n {/* Col 1: Processes */}\n <div>\n <SectionHeader icon={Layers} color=\"text-emerald-400\" docsHash=\"#docs:dashboard.md:processes-overview\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => procQ.refetch()} isFetching={procQ.isFetching} apiPath=\"/tasks/processes?limit=5\" />\n <NavIcon to=\"/processes/all\" icon={ExternalLink} title=\"All processes\" />\n </div>\n }>\n Certified Processes\n </SectionHeader>\n <div className=\"mb-3 -mt-2\">\n <span className=\"px-2 py-0.5 text-[10px] rounded text-text-quaternary uppercase tracking-widest\">all namespaces</span>\n </div>\n {processes.length === 0 ? (\n <EmptyPanel icon={Layers} text=\"No recent processes\" />\n ) : (\n <div className=\"space-y-1\">\n {processes.map((p: any) => (\n <ExecutionRow\n key={p.origin_id}\n dot={(p.task_count ?? 0) > 0 && (p.completed ?? 0) >= (p.task_count ?? 0) ? 'bg-status-success' : (p.escalated ?? 0) > 0 ? 'border border-status-error' : 'bg-status-active'}\n pill={<>{(p.workflow_types ?? [p.workflow_type]).filter(Boolean).map((wt: string) => <WorkflowPill key={wt} type={wt} size=\"xs\" />)}</>}\n id={p.origin_id}\n date={p.last_activity ?? p.started_at}\n onClick={() => navigate(`/processes/detail/${p.origin_id}`)}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: Durable Executions */}\n <div>\n <SectionHeader icon={ListChecks} color=\"text-blue-400\" docsHash=\"#docs:dashboard.md:durable-executions\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => jobsQ.refetch()} isFetching={jobsQ.isFetching} apiPath={`/workflow-states/jobs?namespace=${durableNs}&limit=5`} />\n <NavIcon to=\"/workflows/executions\" icon={ExternalLink} title=\"All durable executions\" />\n </div>\n }>\n Durable Executions\n </SectionHeader>\n <AppPicker appIds={durableAppIds} selected={durableNs} onSelect={(ns) => setNs('durablenamespace', ns)} />\n {jobs.length === 0 ? (\n <EmptyPanel icon={ListChecks} text=\"No recent executions\" />\n ) : (\n <div className=\"space-y-1\">\n {jobs.map((job: any) => (\n <ExecutionRow\n key={job.workflow_id}\n dot={statusDotClass(job.status)}\n pill={<WorkflowPill type={job.entity || job.type || 'workflow'} size=\"xs\" />}\n id={job.workflow_id}\n date={job.updated_at ?? job.created_at}\n onClick={() => navigate(`/workflows/executions/${job.workflow_id}`)}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Col 3: Pipeline Executions */}\n <div>\n <SectionHeader icon={Wand2} color=\"text-violet-400\" docsHash=\"#docs:dashboard.md:mcp-pipeline-tools\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => mcpQ.refetch()} isFetching={mcpQ.isFetching} apiPath={`/mcp-runs?app_id=${pipelineNs}&limit=5`} />\n <NavIcon to=\"/mcp/executions\" icon={ExternalLink} title=\"All pipeline executions\" />\n </div>\n }>\n Pipeline Executions\n </SectionHeader>\n <AppPicker appIds={pipelineAppIds} selected={pipelineNs} onSelect={(ns) => setNs('pipelinenamespace', ns)} />\n {mcpRuns.length === 0 ? (\n <EmptyPanel icon={Wand2} text=\"No recent pipeline runs\" />\n ) : (\n <div className=\"space-y-1\">\n {mcpRuns.map((run: any) => (\n <ExecutionRow\n key={run.workflow_id}\n dot={statusDotClass(run.status)}\n pill={<WorkflowPill type={run.entity || run.workflow_name || 'pipeline'} variant=\"pipeline\" size=\"xs\" />}\n id={run.workflow_id}\n date={run.updated_at ?? run.created_at}\n onClick={() => navigate(`/mcp/executions/${run.workflow_id}?namespace=${pipelineNs}`)}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Row 2: All Escalations | My Escalations | Event Stream ──────── */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-x-14 mt-14\">\n\n {/* Col 1: All Escalations */}\n <div>\n <SectionHeader icon={AlertCircle} color=\"text-amber-400\" docsHash=\"#docs:dashboard.md:all-escalations\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => allEscQ.refetch()} isFetching={allEscQ.isFetching} apiPath=\"/escalations?status=pending&limit=5&sort_by=priority&order=asc\" />\n <NavIcon to=\"/escalations/available\" icon={ExternalLink} title=\"All available escalations\" />\n </div>\n }>\n All Escalations\n </SectionHeader>\n {allEscalations.length === 0 ? (\n <EmptyPanel icon={AlertCircle} text=\"No pending escalations\" />\n ) : (\n <div className=\"space-y-1\">\n {allEscalations.map((esc: any) => (\n <button\n key={esc.id}\n onClick={() => navigate(`/escalations/detail/${esc.id}`)}\n className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"text-[9px] text-text-quaternary font-medium shrink-0\">P{esc.priority ?? 2}</span>\n <span className=\"text-[12px] text-text-primary truncate flex-1 max-w-[65%]\">{esc.description || esc.subtype || esc.type}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto\"><DateValue date={esc.updated_at ?? esc.created_at} /></span>\n </div>\n <div className=\"flex items-center gap-2 pl-5\">\n <WorkflowPill type={esc.type || 'unknown'} size=\"xs\" />\n <span className=\"flex-1\" />\n <RolePill role={esc.role} />\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: My Escalations */}\n <div>\n <SectionHeader icon={Inbox} color=\"text-orange-400\" docsHash=\"#docs:dashboard.md:escalations-overview\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => myEscQ.refetch()} isFetching={myEscQ.isFetching} apiPath={`/escalations?assigned_to=${user?.userId ?? ''}&status=pending&limit=5`} />\n <NavIcon to=\"/escalations/queue\" icon={ExternalLink} title=\"My escalation queue\" />\n </div>\n }>\n My Escalations\n </SectionHeader>\n {myEscalations.length === 0 ? (\n <EmptyPanel icon={Inbox} text=\"No assigned escalations\" />\n ) : (\n <div className=\"space-y-1\">\n {myEscalations.map((esc: any) => (\n <button\n key={esc.id}\n onClick={() => navigate(`/escalations/detail/${esc.id}`)}\n className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"text-[9px] text-text-quaternary font-medium shrink-0\">P{esc.priority ?? 2}</span>\n <span className=\"text-[12px] text-text-primary truncate flex-1 max-w-[65%]\">{esc.description || esc.subtype || esc.type}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto\"><DateValue date={esc.updated_at ?? esc.created_at} /></span>\n </div>\n <div className=\"flex items-center gap-2 pl-5\">\n <WorkflowPill type={esc.type || 'unknown'} size=\"xs\" />\n <span className=\"flex-1\" />\n <RolePill role={esc.role} />\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 3: Event Stream */}\n <div>\n <SectionHeader icon={Radio} color=\"text-emerald-400\"\n actions={\n <div className=\"flex items-center gap-2\">\n <span className={`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${pulse ? 'bg-emerald-400' : 'bg-zinc-600'}`} />\n <button\n onClick={() => { const btn = document.querySelector('[title=\"Fullscreen\"]') as HTMLButtonElement; btn?.click(); }}\n className=\"text-text-quaternary hover:text-accent transition-colors\"\n title=\"View all events\"\n >\n <ExternalLink className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n </div>\n }\n >\n Event Stream\n </SectionHeader>\n {liveEvents.length === 0 ? (\n <EmptyPanel icon={Radio} text=\"Events appear here in real time\" />\n ) : (\n <div className=\"divide-y divide-surface-border/20\">\n {liveEvents.map((ev) => (\n <EventStreamRow key={ev.id} event={ev} />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["STATUS_DOT","statusDotClass","status","feedCounter","useLiveFeed","maxItems","events","setEvents","useState","pulse","setPulse","pulseTimer","useRef","handler","useCallback","event","_a","label","_b","_c","prev","useEventSubscription","NATS_SUBJECT_PREFIX","SectionHeader","Icon","color","docsHash","children","actions","jsxs","jsx","BookOpen","EmptyPanel","text","midEllipsis","s","maxLen","keep","ExecutionRow","dot","pill","id","date","onClick","DateValue","NavIcon","to","title","navigate","useNavigate","AppPicker","appIds","selected","onSelect","open","setOpen","ref","useEffect","e","v","EventStreamRow","expanded","setExpanded","ChevronDown","EventTopicPill","JsonViewer","HomePage","user","useAuth","searchParams","setSearchParams","useSearchParams","pipelineNs","durableNs","setNs","key","ns","next","useEscalationStatsEvents","useWorkflowListEvents","useProcessListEvents","procQ","useProcesses","jobsQ","useJobs","cpData","useControlPlaneApps","allAppIds","a","durableAppIds","pipelineAppIds","mcpQ","useMcpRuns","allEscQ","useEscalations","myEscQ","liveEvents","processes","jobs","mcpRuns","allEscalations","_d","myEscalations","_e","Layers","ListToolbar","ExternalLink","p","wt","WorkflowPill","ListChecks","job","Wand2","run","AlertCircle","esc","RolePill","Inbox","Radio","btn","ev"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomePage-fterfLKH.js","sources":["../../src/pages/home/HomePage.tsx"],"sourcesContent":["import { useState, useRef, useCallback, useEffect } from 'react';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport {\n AlertCircle, Inbox, ListChecks, Wand2, Layers, Radio, ExternalLink, BookOpen, ChevronDown,\n} from 'lucide-react';\nimport { useEscalations } from '../../api/escalations';\nimport { useJobs } from '../../api/workflows';\nimport { useMcpRuns } from '../../api/mcp-runs';\nimport { useControlPlaneApps } from '../../api/controlplane';\nimport { useProcesses } from '../../api/tasks';\nimport { useAuth } from '../../hooks/useAuth';\nimport { useEscalationStatsEvents, useWorkflowListEvents, useProcessListEvents } from '../../hooks/useEventHooks';\nimport { useEventSubscription } from '../../hooks/useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../../lib/nats/config';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { RolePill } from '../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { EventTopicPill } from '../../components/common/display/EventTopicPill';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\n\nconst STATUS_DOT: Record<string, string> = {\n completed: 'bg-status-success',\n active: 'bg-status-active',\n running: 'bg-status-active',\n pending: 'bg-status-pending',\n error: 'bg-status-error',\n failed: 'bg-status-error',\n};\nfunction statusDotClass(status: string): string {\n return STATUS_DOT[status] ?? 'bg-text-tertiary';\n}\n\n// ── Event colors ────────────────────────────────────────────────────────────\n\n\n// ── Live Feed ───────────────────────────────────────────────────────────────\n\ninterface FeedEvent { id: number; type: string; timestamp: string; label: string; data: Record<string, unknown>; }\nlet feedCounter = 0;\n\nfunction useLiveFeed(maxItems = 5) {\n const [events, setEvents] = useState<FeedEvent[]>([]);\n const [pulse, setPulse] = useState(false);\n const pulseTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const handler = useCallback((event: any) => {\n if (event.type?.startsWith('mesh.')) return;\n const label = event.activityName || event.workflowName || event.data?.domain || event.workflowId?.slice(0, 16) || '';\n setEvents((prev) => [{ id: ++feedCounter, type: event.type, timestamp: event.timestamp, label, data: event }, ...prev].slice(0, maxItems));\n setPulse(true);\n if (pulseTimer.current) clearTimeout(pulseTimer.current);\n pulseTimer.current = setTimeout(() => setPulse(false), 2000);\n }, [maxItems]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, handler);\n return { events, pulse };\n}\n\n// ── Section header ──────────────────────────────────────────────────────────\n\nfunction SectionHeader({ icon: Icon, color, docsHash, children, actions }: { icon: React.ElementType; color?: string; docsHash?: string; children: React.ReactNode; actions?: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between mb-4 pb-2 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <Icon className={`w-4.5 h-4.5 ${color || 'text-accent/60'}`} strokeWidth={1.5} />\n <h2 className=\"text-sm font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n <div className=\"flex items-center gap-2\">\n {docsHash && (\n <button onClick={() => { window.location.hash = docsHash; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Docs\">\n <BookOpen className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n )}\n {actions}\n </div>\n </div>\n );\n}\n\nfunction EmptyPanel({ icon: Icon, text }: { icon: React.ElementType; text: string }) {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <Icon className=\"w-6 h-6 text-text-quaternary/50 mb-2\" strokeWidth={1} />\n <p className=\"text-xs text-text-quaternary\">{text}</p>\n </div>\n );\n}\n\n/** Middle-ellipsis: keep first N and last N chars with ... in between */\nfunction midEllipsis(s: string, maxLen = 37): string {\n if (!s || s.length <= maxLen) return s;\n const keep = Math.floor((maxLen - 3) / 2);\n return `${s.slice(0, keep)}...${s.slice(-keep)}`;\n}\n\n/** Consistent row for all execution lists in row 1 */\nfunction ExecutionRow({ dot, pill, id, date, onClick }: {\n dot: string;\n pill: React.ReactNode;\n id: string;\n date: string;\n onClick: () => void;\n}) {\n return (\n <button onClick={onClick} className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\">\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${dot}`} />\n <span className=\"text-[12px] text-text-primary font-mono truncate max-w-[60%]\">{midEllipsis(id)}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto whitespace-nowrap\"><DateValue date={date} /></span>\n </div>\n <div className=\"pl-3.5 flex items-center gap-1 overflow-hidden\">{pill}</div>\n </button>\n );\n}\n\nfunction NavIcon({ to, icon: Icon, title }: { to: string; icon: React.ElementType; title: string }) {\n const navigate = useNavigate();\n return (\n <button\n onClick={() => navigate(to)}\n className=\"text-text-quaternary hover:text-accent transition-colors\"\n title={title}\n >\n <Icon className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n );\n}\n\n// ── Namespace Picker ────────────────────────────────────────────────────────\n\nfunction AppPicker({ appIds, selected, onSelect }: {\n appIds: string[];\n selected: string;\n onSelect: (id: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n if (appIds.length <= 1) return null;\n\n return (\n <div className=\"relative mb-3 -mt-2\" ref={ref}>\n <button\n onClick={() => setOpen((v) => !v)}\n className=\"flex items-center gap-1 px-2 py-0.5 text-[10px] rounded bg-accent/10 text-accent hover:bg-accent/20 transition-colors\"\n >\n {selected}\n <svg className={`w-2.5 h-2.5 transition-transform ${open ? 'rotate-180' : ''}`} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {open && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg z-30 py-1 min-w-[120px]\">\n {appIds.map((id) => (\n <button\n key={id}\n onClick={() => { onSelect(id); setOpen(false); }}\n className={`w-full text-left px-3 py-1.5 text-[11px] transition-colors ${\n selected === id ? 'text-accent bg-accent/5' : 'text-text-secondary hover:bg-surface-hover'\n }`}\n >\n {id}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ── Event stream row (expandable) ───────────────────────────────────────────\n\nfunction EventStreamRow({ event }: { event: FeedEvent }) {\n const [expanded, setExpanded] = useState(false);\n return (\n <div>\n <button onClick={() => setExpanded(!expanded)} className=\"w-full text-left px-1 py-2 hover:bg-surface-hover/50 rounded-md transition-colors flex items-center gap-2\">\n <ChevronDown className={`w-2.5 h-2.5 text-text-quaternary shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <EventTopicPill topic={event.type} />\n <span className=\"text-[11px] text-text-secondary font-mono truncate flex-1\">{event.label || '—'}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0\"><DateValue date={event.timestamp} format=\"time\" /></span>\n </button>\n {expanded && (\n <div className=\"pl-5 pb-2\">\n <JsonViewer data={event.data} defaultCollapsed={false} />\n </div>\n )}\n </div>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function HomePage() {\n const navigate = useNavigate();\n const { user } = useAuth();\n const [searchParams, setSearchParams] = useSearchParams();\n const pipelineNs = searchParams.get('pipelinenamespace') || 'hmsh';\n const durableNs = searchParams.get('durablenamespace') || 'durable';\n const setNs = useCallback((key: string, ns: string) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set(key, ns);\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n useEscalationStatsEvents();\n useWorkflowListEvents();\n useProcessListEvents();\n\n const procQ = useProcesses({ limit: 5 });\n const jobsQ = useJobs({ limit: 5, sort_by: 'updated_at', order: 'desc', namespace: durableNs });\n const { data: cpData } = useControlPlaneApps();\n const allAppIds = (cpData?.apps ?? []).map((a: any) => a.appId);\n const durableAppIds = allAppIds;\n const pipelineAppIds = allAppIds;\n const mcpQ = useMcpRuns({ limit: 5, app_id: pipelineNs, sort_by: 'updated_at', order: 'desc' });\n const allEscQ = useEscalations({ status: 'pending', limit: 5, sort_by: 'updated_at', order: 'desc' });\n const myEscQ = useEscalations({ assigned_to: user?.userId, status: 'pending', limit: 5, sort_by: 'updated_at', order: 'desc' });\n const { events: liveEvents, pulse } = useLiveFeed();\n\n const processes = procQ.data?.processes ?? [];\n const jobs = jobsQ.data?.jobs ?? [];\n const mcpRuns = (mcpQ.data as any)?.jobs ?? [];\n const allEscalations = allEscQ.data?.escalations ?? [];\n const myEscalations = myEscQ.data?.escalations ?? [];\n\n return (\n <div>\n <h1 className=\"text-3xl font-light text-text-primary mb-10\">Recent Activity</h1>\n\n {/* ── Row 1: Processes | Durable Executions | Pipeline Executions ──── */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-14\">\n\n {/* Col 1: Processes */}\n <div>\n <SectionHeader icon={Layers} color=\"text-emerald-400\" docsHash=\"#docs:dashboard.md:processes-overview\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => procQ.refetch()} isFetching={procQ.isFetching} apiPath=\"/tasks/processes?limit=5\" />\n <NavIcon to=\"/processes/all\" icon={ExternalLink} title=\"All processes\" />\n </div>\n }>\n Certified Processes\n </SectionHeader>\n <div className=\"mb-3 -mt-2\">\n <span className=\"px-2 py-0.5 text-[10px] rounded text-text-quaternary uppercase tracking-widest\">all namespaces</span>\n </div>\n {processes.length === 0 ? (\n <EmptyPanel icon={Layers} text=\"No recent processes\" />\n ) : (\n <div className=\"space-y-1\">\n {processes.map((p: any) => (\n <ExecutionRow\n key={p.origin_id}\n dot={(p.task_count ?? 0) > 0 && (p.completed ?? 0) >= (p.task_count ?? 0) ? 'bg-status-success' : (p.escalated ?? 0) > 0 ? 'border border-status-error' : 'bg-status-active'}\n pill={<>{(p.workflow_types ?? [p.workflow_type]).filter(Boolean).map((wt: string) => <WorkflowPill key={wt} type={wt} size=\"xs\" />)}</>}\n id={p.origin_id}\n date={p.last_activity ?? p.started_at}\n onClick={() => navigate(`/processes/detail/${p.origin_id}`)}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: Durable Executions */}\n <div>\n <SectionHeader icon={ListChecks} color=\"text-blue-400\" docsHash=\"#docs:dashboard.md:durable-executions\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => jobsQ.refetch()} isFetching={jobsQ.isFetching} apiPath={`/workflow-states/jobs?namespace=${durableNs}&limit=5`} />\n <NavIcon to=\"/workflows/executions\" icon={ExternalLink} title=\"All durable executions\" />\n </div>\n }>\n Durable Executions\n </SectionHeader>\n <AppPicker appIds={durableAppIds} selected={durableNs} onSelect={(ns) => setNs('durablenamespace', ns)} />\n {jobs.length === 0 ? (\n <EmptyPanel icon={ListChecks} text=\"No recent executions\" />\n ) : (\n <div className=\"space-y-1\">\n {jobs.map((job: any) => (\n <ExecutionRow\n key={job.workflow_id}\n dot={statusDotClass(job.status)}\n pill={<WorkflowPill type={job.entity || job.type || 'workflow'} size=\"xs\" />}\n id={job.workflow_id}\n date={job.updated_at ?? job.created_at}\n onClick={() => navigate(`/workflows/executions/${job.workflow_id}`)}\n />\n ))}\n </div>\n )}\n </div>\n\n {/* Col 3: Pipeline Executions */}\n <div>\n <SectionHeader icon={Wand2} color=\"text-violet-400\" docsHash=\"#docs:dashboard.md:mcp-pipeline-tools\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => mcpQ.refetch()} isFetching={mcpQ.isFetching} apiPath={`/mcp-runs?app_id=${pipelineNs}&limit=5`} />\n <NavIcon to=\"/mcp/executions\" icon={ExternalLink} title=\"All pipeline executions\" />\n </div>\n }>\n Pipeline Executions\n </SectionHeader>\n <AppPicker appIds={pipelineAppIds} selected={pipelineNs} onSelect={(ns) => setNs('pipelinenamespace', ns)} />\n {mcpRuns.length === 0 ? (\n <EmptyPanel icon={Wand2} text=\"No recent pipeline runs\" />\n ) : (\n <div className=\"space-y-1\">\n {mcpRuns.map((run: any) => (\n <ExecutionRow\n key={run.workflow_id}\n dot={statusDotClass(run.status)}\n pill={<WorkflowPill type={run.entity || run.workflow_name || 'pipeline'} variant=\"pipeline\" size=\"xs\" />}\n id={run.workflow_id}\n date={run.updated_at ?? run.created_at}\n onClick={() => navigate(`/mcp/executions/${run.workflow_id}?namespace=${pipelineNs}`)}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* ── Row 2: All Escalations | My Escalations | Event Stream ──────── */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-x-14 mt-14\">\n\n {/* Col 1: All Escalations */}\n <div>\n <SectionHeader icon={AlertCircle} color=\"text-amber-400\" docsHash=\"#docs:dashboard.md:all-escalations\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => allEscQ.refetch()} isFetching={allEscQ.isFetching} apiPath=\"/escalations?status=pending&limit=5&sort_by=priority&order=asc\" />\n <NavIcon to=\"/escalations/available\" icon={ExternalLink} title=\"All available escalations\" />\n </div>\n }>\n All Escalations\n </SectionHeader>\n {allEscalations.length === 0 ? (\n <EmptyPanel icon={AlertCircle} text=\"No pending escalations\" />\n ) : (\n <div className=\"space-y-1\">\n {allEscalations.map((esc: any) => (\n <button\n key={esc.id}\n onClick={() => navigate(`/escalations/detail/${esc.id}`)}\n className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"text-[9px] text-text-quaternary font-medium shrink-0\">P{esc.priority ?? 2}</span>\n <span className=\"text-[12px] text-text-primary truncate flex-1 max-w-[65%]\">{esc.description || esc.subtype || esc.type}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto\"><DateValue date={esc.updated_at ?? esc.created_at} /></span>\n </div>\n <div className=\"flex items-center gap-2 pl-5\">\n <WorkflowPill type={esc.type || 'unknown'} size=\"xs\" />\n <span className=\"flex-1\" />\n <RolePill role={esc.role} />\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: My Escalations */}\n <div>\n <SectionHeader icon={Inbox} color=\"text-orange-400\" docsHash=\"#docs:dashboard.md:escalations-overview\" actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar onRefresh={() => myEscQ.refetch()} isFetching={myEscQ.isFetching} apiPath={`/escalations?assigned_to=${user?.userId ?? ''}&status=pending&limit=5`} />\n <NavIcon to=\"/escalations/queue\" icon={ExternalLink} title=\"My escalation queue\" />\n </div>\n }>\n My Escalations\n </SectionHeader>\n {myEscalations.length === 0 ? (\n <EmptyPanel icon={Inbox} text=\"No assigned escalations\" />\n ) : (\n <div className=\"space-y-1\">\n {myEscalations.map((esc: any) => (\n <button\n key={esc.id}\n onClick={() => navigate(`/escalations/detail/${esc.id}`)}\n className=\"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors\"\n >\n <div className=\"flex items-center gap-2 mb-0.5\">\n <span className=\"text-[9px] text-text-quaternary font-medium shrink-0\">P{esc.priority ?? 2}</span>\n <span className=\"text-[12px] text-text-primary truncate flex-1 max-w-[65%]\">{esc.description || esc.subtype || esc.type}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-auto\"><DateValue date={esc.updated_at ?? esc.created_at} /></span>\n </div>\n <div className=\"flex items-center gap-2 pl-5\">\n <WorkflowPill type={esc.type || 'unknown'} size=\"xs\" />\n <span className=\"flex-1\" />\n <RolePill role={esc.role} />\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 3: Event Stream */}\n <div>\n <SectionHeader icon={Radio} color=\"text-emerald-400\"\n actions={\n <div className=\"flex items-center gap-2\">\n <span className={`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${pulse ? 'bg-emerald-400' : 'bg-zinc-600'}`} />\n <button\n onClick={() => { const btn = document.querySelector('[title=\"Fullscreen\"]') as HTMLButtonElement; btn?.click(); }}\n className=\"text-text-quaternary hover:text-accent transition-colors\"\n title=\"View all events\"\n >\n <ExternalLink className=\"w-2.5 h-2.5\" strokeWidth={1.5} />\n </button>\n </div>\n }\n >\n Event Stream\n </SectionHeader>\n {liveEvents.length === 0 ? (\n <EmptyPanel icon={Radio} text=\"Events appear here in real time\" />\n ) : (\n <div className=\"divide-y divide-surface-border/20\">\n {liveEvents.map((ev) => (\n <EventStreamRow key={ev.id} event={ev} />\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["STATUS_DOT","statusDotClass","status","feedCounter","useLiveFeed","maxItems","events","setEvents","useState","pulse","setPulse","pulseTimer","useRef","handler","useCallback","event","_a","label","_b","_c","prev","useEventSubscription","NATS_SUBJECT_PREFIX","SectionHeader","Icon","color","docsHash","children","actions","jsxDEV","BookOpen","EmptyPanel","text","midEllipsis","s","maxLen","keep","ExecutionRow","dot","pill","id","date","onClick","DateValue","NavIcon","to","title","navigate","useNavigate","AppPicker","appIds","selected","onSelect","open","setOpen","ref","useEffect","e","v","EventStreamRow","expanded","setExpanded","ChevronDown","EventTopicPill","JsonViewer","HomePage","user","useAuth","searchParams","setSearchParams","useSearchParams","pipelineNs","durableNs","setNs","key","ns","next","useEscalationStatsEvents","useWorkflowListEvents","useProcessListEvents","procQ","useProcesses","jobsQ","useJobs","cpData","useControlPlaneApps","allAppIds","a","durableAppIds","pipelineAppIds","mcpQ","useMcpRuns","allEscQ","useEscalations","myEscQ","liveEvents","processes","jobs","mcpRuns","allEscalations","_d","myEscalations","_e","Layers","ListToolbar","ExternalLink","p","wt","WorkflowPill","ListChecks","job","Wand2","run","AlertCircle","esc","RolePill","Inbox","Radio","btn","ev"],"mappings":"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"}
|