@hotmeshio/long-tail 0.4.17 → 0.4.19
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/README.md +0 -2
- package/build/adapters/express.js +4 -0
- package/build/api/auth-sso.d.ts +12 -0
- package/build/api/auth-sso.js +54 -0
- package/build/api/escalations/bulk.js +2 -2
- package/build/api/escalations/claim.js +3 -13
- package/build/api/escalations/create.js +3 -2
- package/build/api/escalations/helpers.d.ts +1 -0
- package/build/api/escalations/helpers.js +6 -4
- package/build/api/escalations/list.d.ts +1 -0
- package/build/api/escalations/list.js +1 -0
- package/build/api/escalations/metadata.js +4 -4
- package/build/api/escalations/single.js +3 -2
- package/build/api/settings.js +6 -1
- package/build/api/topics.d.ts +9 -0
- package/build/api/topics.js +31 -2
- package/build/lib/events/index.d.ts +1 -0
- package/build/lib/events/index.js +4 -0
- package/build/lib/events/nats.d.ts +5 -0
- package/build/lib/events/nats.js +9 -0
- package/build/lib/events/publish.d.ts +12 -9
- package/build/lib/events/publish.js +27 -17
- package/build/modules/auth.d.ts +7 -0
- package/build/modules/auth.js +104 -2
- package/build/modules/sso.d.ts +6 -0
- package/build/modules/sso.js +20 -0
- package/build/routes/auth-sso.d.ts +2 -0
- package/build/routes/auth-sso.js +51 -0
- package/build/routes/bot-accounts.js +1 -1
- package/build/routes/controlplane.js +6 -6
- package/build/routes/escalations/list.js +1 -0
- package/build/routes/index.js +2 -0
- package/build/routes/mcp-endpoint.d.ts +17 -0
- package/build/routes/mcp-endpoint.js +70 -0
- package/build/routes/nats-credentials.js +1 -1
- package/build/routes/roles.js +5 -5
- package/build/routes/topics.js +2 -0
- package/build/routes/users.js +31 -5
- package/build/sdk/index.d.ts +1 -0
- package/build/services/agent/input-mapper.js +17 -1
- package/build/services/escalation/crud.js +14 -1
- package/build/services/escalation/queries.d.ts +1 -0
- package/build/services/escalation/queries.js +7 -0
- package/build/services/mcp/exposure.d.ts +15 -0
- package/build/services/mcp/exposure.js +18 -0
- package/build/services/mcp/external-server.d.ts +15 -0
- package/build/services/mcp/external-server.js +125 -0
- package/build/services/mcp/seed-service-account.d.ts +11 -0
- package/build/services/mcp/seed-service-account.js +77 -0
- package/build/services/role/index.d.ts +1 -1
- package/build/services/role/index.js +2 -2
- package/build/services/topics/system-topics.js +29 -25
- package/build/services/user/index.d.ts +1 -1
- package/build/services/user/index.js +2 -1
- package/build/services/user/rbac.d.ts +11 -0
- package/build/services/user/rbac.js +17 -0
- package/build/services/user/sso-provision.d.ts +19 -0
- package/build/services/user/sso-provision.js +62 -0
- package/build/services/workflow-invocation.js +5 -3
- package/build/start/config.js +6 -0
- package/build/start/server.js +2 -0
- package/build/start/workers.js +15 -0
- package/build/system/index.js +53 -35
- package/build/system/mcp-servers/admin/agent-subscriptions.d.ts +5 -0
- package/build/system/mcp-servers/admin/agent-subscriptions.js +78 -0
- package/build/system/mcp-servers/admin/agents.d.ts +5 -0
- package/build/system/mcp-servers/admin/agents.js +103 -0
- package/build/system/mcp-servers/admin/bot-accounts.d.ts +5 -0
- package/build/system/mcp-servers/admin/bot-accounts.js +126 -0
- package/build/system/mcp-servers/admin/controlplane.d.ts +5 -0
- package/build/system/mcp-servers/admin/controlplane.js +107 -0
- package/build/system/mcp-servers/admin/escalations.js +88 -0
- package/build/system/mcp-servers/admin/exports.d.ts +5 -0
- package/build/system/mcp-servers/admin/exports.js +101 -0
- package/build/system/mcp-servers/admin/index.d.ts +16 -8
- package/build/system/mcp-servers/admin/index.js +36 -21
- package/build/system/mcp-servers/admin/pipelines.d.ts +5 -0
- package/build/system/mcp-servers/admin/pipelines.js +96 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +614 -6
- package/build/system/mcp-servers/admin/schemas.js +239 -1
- package/build/system/mcp-servers/admin/settings.d.ts +5 -0
- package/build/system/mcp-servers/admin/settings.js +53 -0
- package/build/system/mcp-servers/admin/topics.d.ts +5 -0
- package/build/system/mcp-servers/admin/topics.js +101 -0
- package/build/system/seed/tool-manifests-admin.d.ts +5077 -188
- package/build/system/seed/tool-manifests-admin.js +79 -30
- package/build/system/seed/tool-manifests-data.d.ts +20 -0
- package/build/system/seed/tool-manifests-data.js +24 -6
- package/build/system/seed/tool-manifests-escalation.d.ts +5 -0
- package/build/system/seed/tool-manifests-escalation.js +5 -0
- package/build/system/seed/tool-manifests-events.d.ts +4 -0
- package/build/system/seed/tool-manifests-events.js +4 -0
- package/build/system/seed/tool-manifests-knowledge.d.ts +6 -0
- package/build/system/seed/tool-manifests-knowledge.js +7 -0
- package/build/system/seed/tool-manifests-workflows.d.ts +8 -0
- package/build/system/seed/tool-manifests-workflows.js +8 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/auth.d.ts +71 -0
- package/build/types/events.d.ts +17 -6
- package/build/types/index.d.ts +1 -1
- package/build/types/startup.d.ts +22 -1
- package/dashboard/dist/assets/{AdminDashboard-Cfo0mwL2.js → AdminDashboard-BwUGcCxQ.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Cfo0mwL2.js.map → AdminDashboard-BwUGcCxQ.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-DgrYzLwq.js +16 -0
- package/dashboard/dist/assets/AgentConfigPage-DgrYzLwq.js.map +1 -0
- package/dashboard/dist/assets/{AgentDetailPage-3mZA7SOb.js → AgentDetailPage-XJpl7wfJ.js} +4 -4
- package/dashboard/dist/assets/AgentDetailPage-XJpl7wfJ.js.map +1 -0
- package/dashboard/dist/assets/{AgentsPage-CTVocfBb.js → AgentsPage-CGpVG6r8.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-CTVocfBb.js.map → AgentsPage-CGpVG6r8.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-DR1e0TQZ.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-CA9x9o5s.js.map → AvailableEscalationsPage-DR1e0TQZ.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-BKtjl6IL.js +2 -0
- package/dashboard/dist/assets/{BotPicker-BQp_Vs73.js.map → BotPicker-BKtjl6IL.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-wpVtkGeU.js → CapabilitiesPage-kCB8fyOj.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-wpVtkGeU.js.map → CapabilitiesPage-kCB8fyOj.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-2eZMMZiG.js → CollapsibleSection-C3tU61hB.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-2eZMMZiG.js.map → CollapsibleSection-C3tU61hB.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-DJGLssm0.js → CredentialsPage-Dt4nJs_B.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-DJGLssm0.js.map → CredentialsPage-Dt4nJs_B.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-BdE6mHyA.js +2 -0
- package/dashboard/dist/assets/CronLabel-BdE6mHyA.js.map +1 -0
- package/dashboard/dist/assets/{CustomDurationPicker-DbyqfK35.js → CustomDurationPicker-B_Yxfb-u.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-DbyqfK35.js.map → CustomDurationPicker-B_Yxfb-u.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-BkfRoUcm.js → DropZone-CptiQ0wc.js} +2 -2
- package/dashboard/dist/assets/{DropZone-BkfRoUcm.js.map → DropZone-CptiQ0wc.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-tcGx5PFI.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-BPYm8RA7.js.map → ElapsedCell-tcGx5PFI.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-kYGHfnLf.js → EscalationsOverview-1KO5dXzk.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-kYGHfnLf.js.map → EscalationsOverview-1KO5dXzk.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DSDzJMer.js → EventTable-DnpsQ6Ew.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DSDzJMer.js.map → EventTable-DnpsQ6Ew.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-B2Jgo1J1.js +2 -0
- package/dashboard/dist/assets/HomePage-B2Jgo1J1.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-jrVba7QN.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-DEef1_-T.js.map → ListToolbar-jrVba7QN.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CZFW5qMb.js → McpOverview-BzyxJyc9.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CZFW5qMb.js.map → McpOverview-BzyxJyc9.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-q9xH-QRo.js → McpQueryDetailPage-DXNseeKl.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-q9xH-QRo.js.map → McpQueryDetailPage-DXNseeKl.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-D14466yi.js → McpQueryPage-WZfTY43_.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-D14466yi.js.map → McpQueryPage-WZfTY43_.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-DKZp-p7S.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-SXyiwc0d.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-aZg057y3.js.map → McpRunsPage-SXyiwc0d.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-Cy7ySMXj.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-Cy7ySMXj.js.map +1 -0
- package/dashboard/dist/assets/{PageHeader-CR6TpJG_.js → PageHeader-BuJpMxyu.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-CR6TpJG_.js.map → PageHeader-BuJpMxyu.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-CRcQEAO1.js → PageHeaderWithStats-yD_PTbOl.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-CRcQEAO1.js.map → PageHeaderWithStats-yD_PTbOl.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-DyzNjwu8.js → ProcessDetailPage-DYIfvWyc.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-DyzNjwu8.js.map → ProcessDetailPage-DYIfvWyc.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-CT_3b5Wt.js → ProcessesListPage-DR1RGaMl.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-CT_3b5Wt.js.map → ProcessesListPage-DR1RGaMl.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BC54Vn-U.js → RolePill-SasQKc_B.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BC54Vn-U.js.map → RolePill-SasQKc_B.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-CpRJq-sg.js → RolesPage-pMERxj15.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-CpRJq-sg.js.map → RolesPage-pMERxj15.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-C20rdNsC.js → RunAsSelector-B-ksMoEj.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-C20rdNsC.js.map → RunAsSelector-B-ksMoEj.js.map} +1 -1
- package/dashboard/dist/assets/ServerName-CHspudaC.js +2 -0
- package/dashboard/dist/assets/{ServerName-Q6okiv4f.js.map → ServerName-CHspudaC.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CbFaU4bq.js → SwimlaneTimeline-Cr_K5qpu.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CbFaU4bq.js.map → SwimlaneTimeline-Cr_K5qpu.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-D6l1SPWd.js → TagInput-DvF3j8MA.js} +2 -2
- package/dashboard/dist/assets/{TagInput-D6l1SPWd.js.map → TagInput-DvF3j8MA.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-22cJsFmM.js → TaskDetailPage-BO5p7AEe.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-22cJsFmM.js.map → TaskDetailPage-BO5p7AEe.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-iDBVCEQQ.js → TaskQueuePill-BCQrS2oK.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-iDBVCEQQ.js.map → TaskQueuePill-BCQrS2oK.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-BDmaUIKu.js → TasksListPage-BRg-uFtF.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-BDmaUIKu.js.map → TasksListPage-BRg-uFtF.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-7wqEp87-.js → TimeAgo-BSzN6rAH.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-7wqEp87-.js.map → TimeAgo-BSzN6rAH.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BBCf8zsN.js → TimestampCell-DL6zMNEQ.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BBCf8zsN.js.map → TimestampCell-DL6zMNEQ.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-HcRTggHo.js → ToolPill-1aTqYtzp.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-HcRTggHo.js.map → ToolPill-1aTqYtzp.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-Dosq1cqG.js → ToolTestPanel-fLzNp79U.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-Dosq1cqG.js.map → ToolTestPanel-fLzNp79U.js.map} +1 -1
- package/dashboard/dist/assets/TopicDetailPage-D7gCsPKB.js +9 -0
- package/dashboard/dist/assets/TopicDetailPage-D7gCsPKB.js.map +1 -0
- package/dashboard/dist/assets/{TopicsPage-tVPdz-k0.js → TopicsPage-B3Aa8Haz.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-tVPdz-k0.js.map → TopicsPage-B3Aa8Haz.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DX7IBjFn.js → UserName-BjHIJWgh.js} +2 -2
- package/dashboard/dist/assets/{UserName-DX7IBjFn.js.map → UserName-BjHIJWgh.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BjC0j9_L.js → WorkflowExecutionPage-BQ7AYlQA.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BjC0j9_L.js.map → WorkflowExecutionPage-BQ7AYlQA.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-54px0YiY.js → WorkflowPill-Z-zHRKOK.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-54px0YiY.js.map → WorkflowPill-Z-zHRKOK.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-D-G8Xudz.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsOverview-DaJRDkNy.js → WorkflowsOverview-B4DUcVxs.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DaJRDkNy.js.map → WorkflowsOverview-B4DUcVxs.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CkpQaUmz.js → YamlWorkflowsPage-CnTNOku0.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CkpQaUmz.js.map → YamlWorkflowsPage-CnTNOku0.js.map} +1 -1
- package/dashboard/dist/assets/{agents-B-P5MlEx.js → agents-CkvQDr9b.js} +2 -2
- package/dashboard/dist/assets/{agents-B-P5MlEx.js.map → agents-CkvQDr9b.js.map} +1 -1
- package/dashboard/dist/assets/{bots-CZz9iVys.js → bots-CzuMCVgU.js} +2 -2
- package/dashboard/dist/assets/{bots-CZz9iVys.js.map → bots-CzuMCVgU.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DrZ8Vw_v.js → capabilities-CbGmS0ty.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DrZ8Vw_v.js.map → capabilities-CbGmS0ty.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-cj-1c-1C.js → controlplane-DGvwkuYx.js} +2 -2
- package/dashboard/dist/assets/{controlplane-cj-1c-1C.js.map → controlplane-DGvwkuYx.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-BEVFyQnE.js → escalation-B7ysVToF.js} +2 -2
- package/dashboard/dist/assets/{escalation-BEVFyQnE.js.map → escalation-B7ysVToF.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-Beox3TXH.js → escalation-columns-CHQEJU1j.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-Beox3TXH.js.map → escalation-columns-CHQEJU1j.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B4gzNq9h.js → helpers-BFOjXa4r.js} +2 -2
- package/dashboard/dist/assets/{helpers-B4gzNq9h.js.map → helpers-BFOjXa4r.js.map} +1 -1
- package/dashboard/dist/assets/index-B9_1AZaG.js +2 -0
- package/dashboard/dist/assets/{index-3n5VREXN.js.map → index-B9_1AZaG.js.map} +1 -1
- package/dashboard/dist/assets/{index-BCQ65lNu.js → index-BFaDxPxA.js} +2 -2
- package/dashboard/dist/assets/{index-BCQ65lNu.js.map → index-BFaDxPxA.js.map} +1 -1
- package/dashboard/dist/assets/index-BduDiGcw.js +15 -0
- package/dashboard/dist/assets/{index-UtAfnStw.js.map → index-BduDiGcw.js.map} +1 -1
- package/dashboard/dist/assets/{index-Bh-PnP17.js → index-BeLphL59.js} +2 -2
- package/dashboard/dist/assets/{index-Bh-PnP17.js.map → index-BeLphL59.js.map} +1 -1
- package/dashboard/dist/assets/index-C--SEsU7.css +1 -0
- package/dashboard/dist/assets/{index-_DfbFHXk.js → index-CRiBkHPb.js} +2 -2
- package/dashboard/dist/assets/{index-_DfbFHXk.js.map → index-CRiBkHPb.js.map} +1 -1
- package/dashboard/dist/assets/{index-DdKbIZNE.js → index-CbrMW-gM.js} +2 -2
- package/dashboard/dist/assets/{index-DdKbIZNE.js.map → index-CbrMW-gM.js.map} +1 -1
- package/dashboard/dist/assets/{index-aJRDh4zW.js → index-CvOGgvzP.js} +2 -2
- package/dashboard/dist/assets/{index-aJRDh4zW.js.map → index-CvOGgvzP.js.map} +1 -1
- package/dashboard/dist/assets/{index-D1MywQ2z.js → index-DDlrQeTj.js} +2 -2
- package/dashboard/dist/assets/{index-D1MywQ2z.js.map → index-DDlrQeTj.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYXiz05a.js → index-DQHmfTPo.js} +2 -2
- package/dashboard/dist/assets/{index-BYXiz05a.js.map → index-DQHmfTPo.js.map} +1 -1
- package/dashboard/dist/assets/{index-BpN31nuC.js → index-_BRA9uFL.js} +25 -25
- package/dashboard/dist/assets/index-_BRA9uFL.js.map +1 -0
- package/dashboard/dist/assets/index-a98qWLB-.js +2 -0
- package/dashboard/dist/assets/index-a98qWLB-.js.map +1 -0
- package/dashboard/dist/assets/index-l_8R6U4r.js +6 -0
- package/dashboard/dist/assets/index-l_8R6U4r.js.map +1 -0
- package/dashboard/dist/assets/{index-D4KGadbW.js → index-v0OQpgXS.js} +2 -2
- package/dashboard/dist/assets/{index-D4KGadbW.js.map → index-v0OQpgXS.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DhtKWMON.js → knowledge-BlF8UMrk.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DhtKWMON.js.map → knowledge-BlF8UMrk.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BXN7-wGF.js → mcp-MtXuky8q.js} +2 -2
- package/dashboard/dist/assets/{mcp-BXN7-wGF.js.map → mcp-MtXuky8q.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BIJP4mQJ.js → mcp-query-DQ-J1Q0K.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BIJP4mQJ.js.map → mcp-query-DQ-J1Q0K.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-ne_yDQZX.js → namespaces-DtsT_GoV.js} +2 -2
- package/dashboard/dist/assets/{namespaces-ne_yDQZX.js.map → namespaces-DtsT_GoV.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-Bcz62DoS.js → pipelines-BjlCm9VH.js} +2 -2
- package/dashboard/dist/assets/{pipelines-Bcz62DoS.js.map → pipelines-BjlCm9VH.js.map} +1 -1
- package/dashboard/dist/assets/{roles-De2CzGCy.js → roles-D-LhJ82d.js} +2 -2
- package/dashboard/dist/assets/{roles-De2CzGCy.js.map → roles-D-LhJ82d.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-4yL5EfxI.js → tasks-BrP_8uEN.js} +2 -2
- package/dashboard/dist/assets/{tasks-4yL5EfxI.js.map → tasks-BrP_8uEN.js.map} +1 -1
- package/dashboard/dist/assets/topics-DUk-zX5D.js +2 -0
- package/dashboard/dist/assets/{topics-DDKHpRwP.js.map → topics-DUk-zX5D.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-XNNzwADV.js +2 -0
- package/dashboard/dist/assets/useEventHooks-XNNzwADV.js.map +1 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-Dv6GhDkh.js → useYamlActivityEvents-DANQ5jIY.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Dv6GhDkh.js.map → useYamlActivityEvents-DANQ5jIY.js.map} +1 -1
- package/dashboard/dist/assets/{users-pSMWP58G.js → users-vj0JgOkA.js} +2 -2
- package/dashboard/dist/assets/{users-pSMWP58G.js.map → users-vj0JgOkA.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CrrAvF2g.js → vendor-icons-Doy0g69_.js} +116 -111
- package/dashboard/dist/assets/vendor-icons-Doy0g69_.js.map +1 -0
- package/dashboard/dist/assets/{workflows-COYPOe2I.js → workflows-CmqgGPzI.js} +2 -2
- package/dashboard/dist/assets/{workflows-COYPOe2I.js.map → workflows-CmqgGPzI.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-1dF3ig6u.js → yaml-workflows-DNFyjBXH.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-1dF3ig6u.js.map → yaml-workflows-DNFyjBXH.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/controlplane.md +1 -1
- package/docs/api/http/mcp-endpoint.md +133 -0
- package/docs/api/http/roles.md +46 -0
- package/docs/api/http/service-accounts.md +15 -0
- package/docs/api/http/settings.md +6 -0
- package/docs/api/mcp/admin.md +1187 -0
- package/docs/api/mcp/claude-code.md +47 -0
- package/docs/api/mcp/docs.md +54 -0
- package/docs/api/mcp/events.md +80 -0
- package/docs/api/mcp/file-storage.md +76 -0
- package/docs/api/mcp/http-fetch.md +64 -0
- package/docs/api/mcp/human-queue.md +101 -0
- package/docs/api/mcp/index.md +52 -0
- package/docs/api/mcp/knowledge.md +125 -0
- package/docs/api/mcp/oauth.md +62 -0
- package/docs/api/mcp/schema-exchange.md +56 -0
- package/docs/api/mcp/translation.md +28 -0
- package/docs/api/mcp/vision.md +46 -0
- package/docs/api/sdk/settings.md +3 -1
- package/docs/auth.md +109 -0
- package/docs/dashboard.md +1 -1
- package/package.json +1 -1
- package/build/system/mcp-servers/playwright/browser-lifecycle.d.ts +0 -26
- package/build/system/mcp-servers/playwright/browser-lifecycle.js +0 -125
- package/build/system/mcp-servers/playwright/index.d.ts +0 -25
- package/build/system/mcp-servers/playwright/index.js +0 -42
- package/build/system/mcp-servers/playwright/schemas.d.ts +0 -394
- package/build/system/mcp-servers/playwright/schemas.js +0 -90
- package/build/system/mcp-servers/playwright/tools-atomic.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-atomic.js +0 -9
- package/build/system/mcp-servers/playwright/tools-navigation.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-navigation.js +0 -153
- package/build/system/mcp-servers/playwright/tools-page-interaction.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-page-interaction.js +0 -162
- package/build/system/mcp-servers/playwright/tools-run-script.d.ts +0 -2
- package/build/system/mcp-servers/playwright/tools-run-script.js +0 -207
- package/build/system/mcp-servers/playwright/types.d.ts +0 -8
- package/build/system/mcp-servers/playwright/types.js +0 -30
- package/build/system/mcp-servers/playwright/vision-helper.d.ts +0 -12
- package/build/system/mcp-servers/playwright/vision-helper.js +0 -81
- package/build/system/mcp-servers/playwright-cli/helpers.d.ts +0 -11
- package/build/system/mcp-servers/playwright-cli/helpers.js +0 -20
- package/build/system/mcp-servers/playwright-cli/index.d.ts +0 -4
- package/build/system/mcp-servers/playwright-cli/index.js +0 -15
- package/build/system/mcp-servers/playwright-cli/schemas.d.ts +0 -219
- package/build/system/mcp-servers/playwright-cli/schemas.js +0 -75
- package/build/system/mcp-servers/playwright-cli/tools-auth.d.ts +0 -2
- package/build/system/mcp-servers/playwright-cli/tools-auth.js +0 -183
- package/build/system/mcp-servers/playwright-cli/tools-capture.d.ts +0 -2
- package/build/system/mcp-servers/playwright-cli/tools-capture.js +0 -273
- package/build/system/seed/tool-manifests-browser.d.ts +0 -577
- package/build/system/seed/tool-manifests-browser.js +0 -158
- package/dashboard/dist/assets/AgentConfigPage-DBtvb2x5.js +0 -16
- package/dashboard/dist/assets/AgentConfigPage-DBtvb2x5.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-3mZA7SOb.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-CA9x9o5s.js +0 -2
- package/dashboard/dist/assets/BotPicker-BQp_Vs73.js +0 -2
- package/dashboard/dist/assets/CronLabel-DY8VdTS9.js +0 -2
- package/dashboard/dist/assets/CronLabel-DY8VdTS9.js.map +0 -1
- package/dashboard/dist/assets/ElapsedCell-BPYm8RA7.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-CCWCs07y.js +0 -2
- package/dashboard/dist/assets/EventTopicPill-CCWCs07y.js.map +0 -1
- package/dashboard/dist/assets/HomePage-CwRebzmO.js +0 -2
- package/dashboard/dist/assets/HomePage-CwRebzmO.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-DEef1_-T.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-X0sfRFTk.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-X0sfRFTk.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-aZg057y3.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-iZEHnndU.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-iZEHnndU.js.map +0 -1
- package/dashboard/dist/assets/ServerName-Q6okiv4f.js +0 -2
- package/dashboard/dist/assets/TopicDetailPage-DW97-YHQ.js +0 -9
- package/dashboard/dist/assets/TopicDetailPage-DW97-YHQ.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsDashboard-eCH4gpAk.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-eCH4gpAk.js.map +0 -1
- package/dashboard/dist/assets/index-3n5VREXN.js +0 -2
- package/dashboard/dist/assets/index-BAXzN-QB.js +0 -6
- package/dashboard/dist/assets/index-BAXzN-QB.js.map +0 -1
- package/dashboard/dist/assets/index-BpN31nuC.js.map +0 -1
- package/dashboard/dist/assets/index-C37LMzJa.css +0 -1
- package/dashboard/dist/assets/index-C5dHozmW.js +0 -2
- package/dashboard/dist/assets/index-C5dHozmW.js.map +0 -1
- package/dashboard/dist/assets/index-UtAfnStw.js +0 -15
- package/dashboard/dist/assets/topics-DDKHpRwP.js +0 -2
- package/dashboard/dist/assets/useEventHooks-NzIyvoGY.js +0 -2
- package/dashboard/dist/assets/useEventHooks-NzIyvoGY.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-CrrAvF2g.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgentDetailPage-3mZA7SOb.js","sources":["../../src/pages/agents/AgentDetailPage.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport {\n Bot, Play, Pause, Trash2, ArrowRight, Pencil, BookOpen,\n Radio, Clock, Brain, Compass,\n} from 'lucide-react';\nimport { useAgent, useUpdateAgent, useDeleteAgent } from '../../api/agents';\nimport { useSettings } from '../../api/settings';\nimport { useAgentSubscriptions } from '../../api/agent-subscriptions';\nimport { useAgentEvents } from '../../hooks/useEventHooks';\nimport { useEventSubscription } from '../../hooks/useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../../lib/nats/config';\nimport { EventTopicPill } from '../../components/common/display/EventTopicPill';\nimport { CronLabel } from '../../components/common/display/CronLabel';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction formatTime(iso: string): string {\n return new Date(iso).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\nfunction SectionHeader({ icon: Icon, color, children, actions }: { icon: React.ElementType; color: string; children: React.ReactNode; actions?: React.ReactNode }) {\n return (\n <div className=\"flex items-center justify-between mb-3 pb-2 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n {actions}\n </div>\n );\n}\n\nfunction EmptyHint({ text }: { text: string }) {\n return <p className=\"text-[11px] text-text-quaternary py-2\">{text}</p>;\n}\n\n// ── Live feed ───────────────────────────────────────────────────────────────\n\ninterface FeedEvent { id: number; type: string; timestamp: string; label: string; }\nlet feedCounter = 0;\n\nfunction useAgentFeed(workflowName?: string) {\n const [events, setEvents] = useState<FeedEvent[]>([]);\n const [pulse, setPulse] = useState(false);\n const handler = useCallback((event: any) => {\n if (event.type?.startsWith('mesh.')) return;\n if (workflowName && event.workflowName !== workflowName) return;\n const label = event.activityName || event.data?.domain || event.workflowId?.slice(0, 16) || '';\n setEvents((prev) => [{ id: ++feedCounter, type: event.type, timestamp: event.timestamp, label }, ...prev].slice(0, 10));\n setPulse(true);\n setTimeout(() => setPulse(false), 2000);\n }, [workflowName]);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, handler);\n return { events, pulse };\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function AgentDetailPage() {\n const { id } = useParams<{ id: string }>();\n const navigate = useNavigate();\n const { data: settings } = useSettings();\n const aiEnabled = !!settings?.ai?.enabled;\n const label = aiEnabled ? 'Agent' : 'Automation';\n const { data: agent, isLoading } = useAgent(id ?? null);\n const { data: subsData } = useAgentSubscriptions(id ?? null);\n const updateMutation = useUpdateAgent();\n const deleteMutation = useDeleteAgent();\n const { events: liveEvents, pulse } = useAgentFeed(agent?.workflow_type ?? undefined);\n useAgentEvents();\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!agent) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Bot className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">{label} not found</h2>\n <button onClick={() => navigate('/agents')} className=\"text-sm text-accent hover:text-accent-hover transition-colors\">Back to {label.toLowerCase()}s</button>\n </div>\n );\n }\n\n const statusDot = agent.status === 'active' ? 'bg-emerald-400' : agent.status === 'paused' ? 'bg-amber-400' : agent.status === 'error' ? 'bg-red-400' : 'bg-zinc-500';\n const subs = subsData?.subscriptions ?? [];\n const statusLabel = agent.status === 'active' ? 'Active' : agent.status === 'paused' ? 'Paused' : agent.status === 'error' ? 'Error' : 'Inactive';\n const schedules = (agent.behaviors as any)?.schedules as any[] | undefined;\n const legacyCron = agent.behaviors?.cron;\n const schedCount = schedules?.length || (legacyCron ? 1 : 0);\n\n const handlePause = () => {\n const msg = [\n `Pause \"${agent.id}\"?`,\n '',\n 'This will:',\n subs.length > 0 ? `• Stop ${subs.length} event subscription${subs.length !== 1 ? 's' : ''}` : null,\n schedCount > 0 ? `• Stop ${schedCount} schedule${schedCount !== 1 ? 's' : ''}` : null,\n '',\n 'Knowledge and workflow history are preserved. You can reactivate anytime.',\n ].filter(Boolean).join('\\n');\n if (confirm(msg)) updateMutation.mutate({ id: agent.id, status: 'paused' as any });\n };\n\n const handleDelete = () => {\n const msg = [\n `Delete \"${agent.id}\"?`,\n '',\n 'This permanently removes:',\n '• The agent configuration',\n subs.length > 0 ? `• ${subs.length} event subscription${subs.length !== 1 ? 's' : ''}` : null,\n schedCount > 0 ? `• ${schedCount} schedule${schedCount !== 1 ? 's' : ''}` : null,\n '',\n 'Knowledge entries and workflow history are preserved.',\n ].filter(Boolean).join('\\n');\n if (confirm(msg)) deleteMutation.mutate(agent.id, { onSuccess: () => navigate('/agents') });\n };\n\n return (\n <div>\n {/* ── Hero ──────────────────────────────────────────────────────────── */}\n <div className=\"flex items-start justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-3xl font-light text-text-primary\">{label}: {agent.id}</h1>\n <button onClick={() => { window.location.hash = '#docs:agents.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors mt-1\" title=\"Docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex items-center gap-1.5 mr-2\">\n <span className={`w-2 h-2 rounded-full ${statusDot}`} />\n <span className=\"text-xs text-text-secondary capitalize\">{statusLabel}</span>\n </div>\n <button onClick={() => navigate(`/agents/${agent.id}/edit`)} className=\"flex items-center gap-1.5 px-4 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n {agent.status !== 'active' && (\n <button onClick={() => updateMutation.mutate({ id: agent.id, status: 'active' as any })} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-emerald-400 hover:bg-emerald-600/10 transition-colors\">\n <Play className=\"w-3 h-3\" /> Activate\n </button>\n )}\n {agent.status === 'active' && (\n <button onClick={handlePause} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <Pause className=\"w-3 h-3\" /> Pause\n </button>\n )}\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n </div>\n </div>\n\n {/* Description callout */}\n {agent.description && (\n <div className=\"border-l-2 border-accent/30 pl-4 py-1 mb-10\">\n <p className=\"text-[13px] text-text-secondary italic leading-relaxed\">{agent.description}</p>\n </div>\n )}\n\n {/* Motivation */}\n {(agent.goals || agent.rules) && (\n <div className=\"mb-10\">\n <SectionHeader icon={Compass} color=\"text-rose-400\">Motivation</SectionHeader>\n <div className=\"grid grid-cols-2 gap-x-14 bg-surface-sunken/20 rounded-lg px-5 py-4\">\n {agent.goals && (\n <div>\n <p className=\"text-[9px] text-text-quaternary uppercase tracking-widest mb-1.5\">Goals</p>\n <p className=\"text-[13px] text-text-primary leading-relaxed\">{agent.goals}</p>\n </div>\n )}\n {agent.rules && (\n <div>\n <p className=\"text-[9px] text-text-quaternary uppercase tracking-widest mb-1.5\">Rules</p>\n <p className=\"text-[13px] text-text-primary leading-relaxed\">{agent.rules}</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* ── 3-column grid ─────────────────────────────────────────────────── */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-10\">\n\n {/* Col 1: Subscriptions */}\n <div>\n <SectionHeader icon={Radio} color=\"text-cyan-400\">\n Subscriptions ({subs.length})\n </SectionHeader>\n {subs.length === 0 ? (\n <EmptyHint text=\"No event subscriptions\" />\n ) : (\n <div className=\"divide-y divide-surface-border/30\">\n {subs.map((sub: any) => (\n <div key={sub.id} className=\"flex items-center py-2\">\n <div className=\"flex-1 min-w-0\"><EventTopicPill topic={sub.topic} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\">\n <span className=\"text-text-quaternary text-[10px]\">→</span>\n <WorkflowPill\n type={sub.reaction_type === 'capability' ? sub.tool_name : sub.workflow_type || sub.reaction_type}\n variant={sub.reaction_type === 'pipeline' ? 'pipeline' : sub.reaction_type === 'capability' ? 'capability' : 'durable'}\n />\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Col 2: Schedules */}\n <div>\n <SectionHeader icon={Clock} color=\"text-amber-400\">Schedules ({schedCount})</SectionHeader>\n {schedules?.length ? (\n <div className=\"divide-y divide-surface-border/30\">\n {schedules.map((s: any, i: number) => (\n <div key={i} className=\"flex items-center py-2\">\n <div className=\"flex-1 min-w-0\"><CronLabel cron={s.cron} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-[10px]\">→</span><WorkflowPill type={s.workflow_type || 'workflow'} /></div>\n </div>\n ))}\n </div>\n ) : legacyCron ? (\n <div className=\"flex items-center py-1\">\n <div className=\"flex-1 min-w-0\"><CronLabel cron={legacyCron} /></div>\n {agent.workflow_type && <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-[10px]\">→</span><WorkflowPill type={agent.workflow_type} /></div>}\n </div>\n ) : (\n <EmptyHint text=\"No schedules configured\" />\n )}\n </div>\n\n {/* Col 3: Knowledge + Activity */}\n <div className=\"space-y-10\">\n <div>\n <SectionHeader icon={Brain} color=\"text-emerald-400\">Knowledge</SectionHeader>\n {agent.knowledge_domain ? (\n <button onClick={() => navigate(`/knowledge?domain=${agent.knowledge_domain}`)} className=\"group text-left flex items-center gap-3\">\n <span className=\"text-sm font-mono text-text-primary group-hover:text-accent transition-colors\">{agent.knowledge_domain}</span>\n <span className=\"text-[10px] text-text-quaternary\">{agent.stats?.knowledge_count?.toLocaleString() ?? 0} entries</span>\n <ArrowRight className=\"w-3 h-3 text-accent opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n ) : (\n <EmptyHint text=\"No knowledge domain\" />\n )}\n </div>\n\n <div>\n <SectionHeader icon={Radio} color=\"text-cyan-400\"\n actions={\n <div className=\"flex items-center gap-1.5\">\n <span className={`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${pulse ? 'bg-emerald-400' : 'bg-zinc-600'}`} />\n <span className=\"text-[10px] text-text-quaternary\">live</span>\n </div>\n }\n >\n Activity\n </SectionHeader>\n {liveEvents.length === 0 ? (\n <EmptyHint text=\"Events appear here as the agent runs\" />\n ) : (\n <div className=\"space-y-1.5\">\n {liveEvents.map((ev) => (\n <div key={ev.id}>\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-[11px] text-text-primary font-mono truncate flex-1\">{ev.label || '—'}</span>\n <span className=\"text-[10px] text-text-quaternary shrink-0 ml-2\">{formatTime(ev.timestamp)}</span>\n </div>\n <EventTopicPill topic={ev.type} />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["formatTime","iso","SectionHeader","Icon","color","children","actions","jsxs","jsx","EmptyHint","text","feedCounter","useAgentFeed","workflowName","events","setEvents","useState","pulse","setPulse","handler","useCallback","event","_a","label","_b","_c","prev","useEventSubscription","NATS_SUBJECT_PREFIX","AgentDetailPage","id","useParams","navigate","useNavigate","settings","useSettings","agent","isLoading","useAgent","subsData","useAgentSubscriptions","updateMutation","useUpdateAgent","deleteMutation","useDeleteAgent","liveEvents","useAgentEvents","Bot","statusDot","subs","statusLabel","schedules","legacyCron","schedCount","handlePause","msg","handleDelete","BookOpen","Pencil","Play","Pause","Trash2","Compass","Radio","sub","EventTopicPill","WorkflowPill","Clock","i","CronLabel","Brain","_e","_d","ArrowRight","ev"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,a as r}from"./vendor-query-B2UbickB.js";import{j as J,g as pe,k as fe,l as ye,m as be,n as je,o as ve,p as Ce,q as Se,r as ke}from"./index-BpN31nuC.js";import{f as Ne}from"./useEventHooks-NzIyvoGY.js";import{u as Pe}from"./roles-De2CzGCy.js";import{u as we}from"./useFilterParams-x-Dg0Vgz.js";import{D as Ae}from"./DataTable-D9yuBv0w.js";import{S as Ee}from"./StickyPagination-BWhFSr2d.js";import{P as Te}from"./PageHeader-CR6TpJG_.js";import{P as Be}from"./constants-BHkpVaqx.js";import{u as D,C as K}from"./CustomDurationPicker-DbyqfK35.js";import{M as H}from"./Modal-CSrxpXeM.js";import{u as Me}from"./users-pSMWP58G.js";import{E as _e,a as Fe}from"./escalation-columns-Beox3TXH.js";import{R as Le,a as Ie}from"./RowActions-Dg-Fsm5O.js";import{L as $e}from"./ListToolbar-DEef1_-T.js";import{a7 as ze}from"./vendor-icons-CrrAvF2g.js";import{c as Re}from"./vendor-react-CXumBFUA.js";import"./EmptyState-BcsfPq9T.js";import"./FilterBar-Ck4K4rzu.js";import"./PriorityBadge-DfQY9St9.js";import"./RolePill-BC54Vn-U.js";import"./WorkflowPill-54px0YiY.js";import"./TimestampCell-BBCf8zsN.js";import"./escalation-BEVFyQnE.js";const Oe=s=>s.isPriorityPending||s.isClaimPending||s.isAssignPending||s.isEscalatePending||s.isTriagePending;function Ue(s){const i=Oe(s),c=D();return e.jsxs("div",{className:"flex flex-wrap items-center gap-3 px-4 py-3 bg-accent/5 border border-accent/20 rounded-lg mb-4",children:[e.jsxs("span",{className:"text-xs font-medium text-accent",children:[s.selectedCount," selected"]}),e.jsx("div",{className:"w-px h-5 bg-surface-border"}),e.jsxs("select",{onChange:t=>{t.target.value&&(s.onSetPriority(parseInt(t.target.value)),t.target.value="")},disabled:i,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsx("option",{value:"",disabled:!0,children:"Priority..."}),Be.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))]}),e.jsxs("select",{onChange:t=>{t.target.value&&(s.onClaim(parseInt(t.target.value)),t.target.value="")},disabled:i,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsx("option",{value:"",disabled:!0,children:"Claim for..."}),c.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))]}),e.jsx("button",{onClick:s.onAssign,disabled:i,className:"btn-secondary text-xs py-1.5",children:s.isAssignPending?"Assigning...":"Assign to..."}),s.availableRoles.length>0&&e.jsxs("select",{onChange:t=>{t.target.value&&(s.onEscalate(t.target.value),t.target.value="")},disabled:i,className:"select text-xs py-1.5",defaultValue:"",children:[e.jsx("option",{value:"",disabled:!0,children:"Escalate to..."}),s.availableRoles.map(t=>e.jsx("option",{value:t,children:t},t))]}),e.jsx("button",{onClick:s.onTriage,disabled:i,className:"btn-secondary text-xs py-1.5",children:s.isTriagePending?"Triaging...":"Triage"}),e.jsx("div",{className:"flex-1"}),e.jsx("button",{onClick:s.onClearSelection,className:"text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Clear"}),i&&e.jsx("span",{className:"text-xs text-text-tertiary animate-pulse",children:"Processing..."})]})}function De({open:s,onClose:i,selectedCount:c,selectedRoles:t,onSubmit:h,isPending:l}){const{isSuperAdmin:x}=J(),o=D(),[d,y]=r.useState("user"),[p,k]=r.useState(null),[N,E]=r.useState(""),[S,L]=r.useState("30"),[m,g]=r.useState(0),R=r.useCallback(n=>g(n),[]),T=!x&&t.length===1?t[0]:void 0,{data:b,isLoading:P}=Me({role:T,status:"active",limit:200}),B=r.useMemo(()=>{const n=(b==null?void 0:b.users)??[];if(!N.trim())return n;const f=N.toLowerCase();return n.filter(w=>{var j,v;return((j=w.display_name)==null?void 0:j.toLowerCase().includes(f))||((v=w.email)==null?void 0:v.toLowerCase().includes(f))})},[b==null?void 0:b.users,N]),M=()=>{y("user"),k(null),E(""),L("30"),g(0),i()},I=n=>{k(n),y("duration")},_=()=>{y("user")},$=()=>{if(!p)return;const n=S==="custom"?m:parseInt(S);!n||n<=0||h(p.id,n)};return e.jsx(H,{open:s,onClose:M,title:"Assign Escalations",children:e.jsxs("div",{className:"space-y-4",children:[d==="user"&&e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Select a user to assign"," ",e.jsx("span",{className:"font-medium text-text-primary",children:c})," ","escalation(s) to:"]}),e.jsx("input",{type:"text",value:N,onChange:n=>E(n.target.value),placeholder:"Search by name or email...",className:"input text-xs w-full",autoFocus:!0}),e.jsxs("div",{className:"max-h-60 overflow-y-auto border border-surface-border rounded-lg divide-y divide-surface-border",children:[P&&e.jsx("p",{className:"text-xs text-text-tertiary p-3",children:"Loading users..."}),!P&&B.length===0&&e.jsx("p",{className:"text-xs text-text-tertiary p-3",children:"No users found"}),B.map(n=>e.jsxs("button",{onClick:()=>I(n),className:"w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors",children:[e.jsx("p",{className:"text-xs font-medium text-text-primary",children:n.display_name||n.external_id}),n.email&&e.jsx("p",{className:"text-[10px] text-text-tertiary",children:n.email})]},n.id))]}),e.jsx("div",{className:"flex justify-end pt-2",children:e.jsx("button",{onClick:M,className:"btn-secondary text-xs",children:"Cancel"})})]}),d==="duration"&&p&&e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Assign to"," ",e.jsx("span",{className:"font-medium text-text-primary",children:p.display_name||p.external_id})," ","for:"]}),e.jsxs("select",{value:S,onChange:n=>{L(n.target.value),g(0)},className:"select w-full text-sm",children:[o.map(n=>e.jsx("option",{value:n.value,children:n.label},n.value)),e.jsx("option",{value:"custom",children:"Other..."})]}),S==="custom"&&e.jsx(K,{onChange:R,autoFocus:!0}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:_,className:"btn-secondary text-xs",children:"Back"}),e.jsx("button",{onClick:$,disabled:l,className:"btn-primary text-xs",children:l?"Assigning...":"Assign"})]})]})]})})}function He({open:s,onClose:i,selectedCount:c,onSubmit:t,isPending:h}){const[l,x]=r.useState(""),o=()=>{t(l||void 0)};return e.jsx(H,{open:s,onClose:i,title:"Submit for AI Triage",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Submit ",e.jsx("span",{className:"font-medium text-text-primary",children:c})," escalation(s) for AI triage? The triage orchestrator will take over resolution."]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-text-secondary block mb-1",children:["Triage hint ",e.jsx("span",{className:"text-text-tertiary",children:"(optional)"})]}),e.jsx("input",{type:"text",value:l,onChange:d=>x(d.target.value),placeholder:"e.g., image_orientation",className:"input text-xs font-mono w-full"}),e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Guides the triage workflow on what remediation to apply"})]}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:i,className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:o,disabled:h,className:"btn-primary text-xs",children:h?"Submitting...":"Submit for Triage"})]})]})})}function F(s,i,c){return t=>{s.mutate(t,{onSuccess:()=>{i(),c==null||c()}})}}function qe(s){const i=()=>[...s.selectedIds];return{handleSetPriority:o=>{F(s.setPriority,s.clearSelection)({ids:i(),priority:o})},handleBulkClaim:o=>{F(s.bulkClaim,s.clearSelection)({ids:i(),durationMinutes:o})},handleBulkEscalate:o=>{F(s.bulkEscalate,s.clearSelection)({ids:i(),targetRole:o})},handleBulkTriage:o=>{F(s.bulkTriage,s.clearSelection,s.closeTriageModal)({ids:i(),hint:o})},handleBulkAssign:(o,d)=>{F(s.bulkAssign,s.clearSelection,s.closeAssignModal)({ids:i(),targetUserId:o,durationMinutes:d})}}}function Qe({claimTarget:s,onClose:i,claimDuration:c,onDurationChange:t,claimDurations:h,onCustomClaimChange:l,onClaim:x,isPending:o}){return e.jsx(H,{open:!!s,onClose:i,title:"Claim Escalation",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-text-secondary",children:["Claim ",e.jsx("span",{className:"font-medium text-text-primary",children:s==null?void 0:s.type})," for:"]}),e.jsxs("select",{value:c,onChange:d=>{t(d.target.value)},className:"select w-full text-sm",children:[h.map(d=>e.jsx("option",{value:d.value,children:d.label},d.value)),e.jsx("option",{value:"custom",children:"Other..."})]}),c==="custom"&&e.jsx(K,{onChange:l,autoFocus:!0}),e.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsx("button",{onClick:i,className:"btn-secondary text-xs",children:"Cancel"}),e.jsx("button",{onClick:x,className:"btn-primary text-xs",disabled:o,children:o?"Claiming...":"Claim"})]})]})})}function pt(){Ne();const s=Re(),{user:i,isSuperAdmin:c}=J(),{filters:t,setFilter:h,pagination:l,sort:x,setSort:o}=we({filters:{role:"",type:"",priority:"",status:"available",search:""}}),d=D(),[y,p]=r.useState(null),[k,N]=r.useState("30"),[E,S]=r.useState(0),L=r.useCallback(a=>S(a),[]),[m,g]=r.useState(new Set),[R,T]=r.useState(!1),[b,P]=r.useState(!1),B=pe(),M=fe(),I=ye(),_=be(),$=je(),n=ve(),{data:f}=Pe(),{data:w}=Ce();r.useEffect(()=>{g(new Set)},[t.role,t.type,t.priority,t.status,l.page,l.pageSize]);const j=t.status||"",v=j==="available",O=j==="claimed"?"pending":j==="resolved"?"resolved":void 0,q={role:t.role||void 0,type:t.type||void 0,priority:t.priority?parseInt(t.priority):void 0,limit:l.pageSize,offset:l.offset,sort_by:x.sort_by||void 0,order:x.sort_by?x.order:void 0},W=Se({...q,enabled:v}),X=ke({status:O,...q,enabled:!v}),Z=v?W:X,{data:A,isLoading:ee,error:z,refetch:te,isFetching:se}=Z,ae=new Date,Q=(A==null?void 0:A.escalations)??[],V=j==="claimed"?Q.filter(a=>a.assigned_to&&a.assigned_until&&new Date(a.assigned_until)>ae):Q,U=(t.search??"").toLowerCase(),C=U?V.filter(a=>{const u=[a.id,a.type,a.subtype,a.description,a.workflow_id,a.origin_id,a.role];return a.metadata&&u.push(...Object.values(a.metadata).map(String)),u.some(Y=>Y&&String(Y).toLowerCase().includes(U))}):V,G=j==="claimed"||U?C.length:(A==null?void 0:A.total)??0,ne=c||(i==null?void 0:i.roles.some(a=>a.type==="admin")),ie=r.useMemo(()=>{const a=new Set;for(const u of C)m.has(u.id)&&a.add(u.role);return[...a]},[C,m]),le=r.useCallback(()=>g(new Set),[]),oe=()=>{if(!y)return;const a=k==="custom"?E:parseInt(k);!a||a<=0||B.mutate({id:y.id,durationMinutes:a},{onSuccess:()=>{p(null),s(`/escalations/detail/${y.id}`)}})},{handleSetPriority:re,handleBulkClaim:ce,handleBulkEscalate:de,handleBulkTriage:ue,handleBulkAssign:me}=qe({selectedIds:m,clearSelection:le,setPriority:M,bulkClaim:I,bulkEscalate:$,bulkTriage:n,bulkAssign:_,closeTriageModal:()=>T(!1),closeAssignModal:()=>P(!1)}),xe=a=>{const u=new Set(m);u.has(a)?u.delete(a):u.add(a),g(u)},ge=()=>{m.size===C.length?g(new Set):g(new Set(C.map(a=>a.id)))},he=[ne?{key:"select",label:e.jsx("input",{type:"checkbox",checked:C.length>0&&m.size===C.length,onChange:ge,className:"rounded"}),render:a=>e.jsx("input",{type:"checkbox",checked:m.has(a.id),onChange:u=>{u.stopPropagation(),xe(a.id)},onClick:u=>u.stopPropagation(),className:"rounded"}),className:"w-10"}:{key:"spacer",label:"",render:()=>null,className:"w-10"},..._e,{key:"actions",label:"",render:a=>e.jsx(Le,{children:e.jsx(Ie,{icon:ze,title:"Claim escalation",onClick:()=>p(a)})}),className:"w-16 text-right"}];return e.jsxs("div",{children:[e.jsx(Te,{title:"All Escalations",docsHash:"#docs:dashboard.md:all-escalations"}),e.jsx(Fe,{filters:t,setFilter:h,roles:(f==null?void 0:f.roles)??[],types:(w==null?void 0:w.types)??[],showStatus:!0,actions:e.jsx($e,{onRefresh:()=>te(),isFetching:se,apiPath:`/escalations${v?"/available":""}?limit=${l.pageSize}&offset=${l.offset}${O?`&status=${O}`:""}${t.role?`&role=${t.role}`:""}${t.type?`&type=${t.type}`:""}${t.priority?`&priority=${t.priority}`:""}`})}),m.size>0&&e.jsx(Ue,{selectedCount:m.size,onClearSelection:()=>g(new Set),onSetPriority:re,onClaim:ce,onAssign:()=>P(!0),onEscalate:de,onTriage:()=>T(!0),isPriorityPending:M.isPending,isClaimPending:I.isPending,isAssignPending:_.isPending,isEscalatePending:$.isPending,isTriagePending:n.isPending,availableRoles:(f==null?void 0:f.roles)??[]}),z&&e.jsx("div",{className:"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error",children:z.message==="Session expired"?"Your session has expired. Please log in again.":`Failed to load escalations: ${z.message}`}),e.jsx(Ae,{columns:he,data:C,keyFn:a=>a.id,onRowClick:a=>s(`/escalations/detail/${a.id}`,{state:{from:"/escalations/available"}}),isLoading:ee,emptyMessage:z?"Unable to load data":"No available escalations",sort:x,onSort:o}),e.jsx(Ee,{page:l.page,totalPages:l.totalPages(G),onPageChange:l.setPage,total:G,pageSize:l.pageSize,onPageSizeChange:l.setPageSize}),e.jsx(Qe,{claimTarget:y,onClose:()=>p(null),claimDuration:k,onDurationChange:a=>{N(a),S(0)},claimDurations:d,customClaimMinutes:E,onCustomClaimChange:L,onClaim:oe,isPending:B.isPending}),e.jsx(He,{open:R,onClose:()=>T(!1),selectedCount:m.size,onSubmit:ue,isPending:n.isPending}),e.jsx(De,{open:b,onClose:()=>P(!1),selectedCount:m.size,selectedRoles:ie,onSubmit:me,isPending:_.isPending})]})}export{pt as AvailableEscalationsPage};
|
|
2
|
-
//# sourceMappingURL=AvailableEscalationsPage-CA9x9o5s.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as m,j as e}from"./vendor-query-B2UbickB.js";import{h as j}from"./bots-CZz9iVys.js";import{a as d,X as y,af as u,l as N,a0 as p}from"./vendor-icons-CrrAvF2g.js";function k({selected:s,onChange:n,placeholder:f}){const{data:l}=j({limit:100}),c=((l==null?void 0:l.bots)??[]).filter(t=>t.status==="active"),[o,r]=m.useState(!1),i=m.useRef(null);m.useEffect(()=>{const t=a=>{i.current&&!i.current.contains(a.target)&&r(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[]);const x=c.find(t=>t.external_id===s),h=f??"Invoking user (default)";return e.jsxs("div",{ref:i,className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>r(!o),className:"flex items-center gap-1.5 w-full px-1 py-1.5 bg-transparent border-b border-surface-border/60 text-left cursor-pointer hover:border-accent/50 transition-colors focus:outline-none focus:border-accent/50",children:[s&&x?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsx(d,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"}),x.display_name||x.external_id,e.jsx("span",{role:"button",onClick:t=>{t.stopPropagation(),n("")},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsx(y,{className:"w-2.5 h-2.5"})})]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-text-tertiary",children:[e.jsx(u,{className:"w-3 h-3 shrink-0"}),h]}),e.jsx(N,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${o?"rotate-180":""}`})]}),o&&e.jsxs("div",{className:"absolute z-20 mt-1 w-full bg-surface-raised border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:[e.jsxs("button",{type:"button",onClick:()=>{n(""),r(!1)},className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${s?"text-text-primary hover:bg-surface-sunken":"bg-accent/[0.06] text-accent"}`,children:[e.jsx(u,{className:"w-3 h-3 shrink-0 text-text-tertiary"}),e.jsx("span",{className:"flex-1",children:"Invoking user"}),!s&&e.jsx(p,{className:"w-3 h-3 shrink-0"})]}),c.length===0?e.jsx("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No bot accounts"}):c.map(t=>{const a=s===t.external_id;return e.jsxs("button",{type:"button",onClick:()=>{n(t.external_id),r(!1)},className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${a?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsx(d,{className:"w-3 h-3 shrink-0 text-accent/60"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("span",{children:t.display_name||t.external_id}),t.display_name&&t.display_name!==t.external_id&&e.jsx("span",{className:"ml-1 text-text-tertiary font-mono",children:t.external_id})]}),a&&e.jsx(p,{className:"w-3 h-3 shrink-0"})]},t.id)})]})]})}export{k as B};
|
|
2
|
-
//# sourceMappingURL=BotPicker-BQp_Vs73.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as o,b as i,c as r,j as u}from"./vendor-query-B2UbickB.js";import{b as n}from"./index-BpN31nuC.js";import{aa as c}from"./vendor-icons-CrrAvF2g.js";function l(e){return o({queryKey:["agent-subscriptions",e],queryFn:()=>n(`/agents/${e}/subscriptions`),enabled:!!e})}function m(){const e=i();return r({mutationFn:({agentId:s,...t})=>n(`/agents/${s}/subscriptions`,{method:"POST",body:JSON.stringify(t)}),onSuccess:(s,t)=>{e.invalidateQueries({queryKey:["agent-subscriptions",t.agentId]}),e.invalidateQueries({queryKey:["agents"]})}})}function d(){const e=i();return r({mutationFn:({agentId:s,subId:t,...a})=>n(`/agents/${s}/subscriptions/${t}`,{method:"PUT",body:JSON.stringify(a)}),onSuccess:(s,t)=>{e.invalidateQueries({queryKey:["agent-subscriptions",t.agentId]})}})}function g(){const e=i();return r({mutationFn:({agentId:s,subId:t})=>n(`/agents/${s}/subscriptions/${t}`,{method:"DELETE"}),onSuccess:(s,t)=>{e.invalidateQueries({queryKey:["agent-subscriptions",t.agentId]}),e.invalidateQueries({queryKey:["agents"]})}})}function f({cron:e}){return u.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-secondary",children:[u.jsx(c,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5}),e]})}export{f as C,m as a,d as b,g as c,l as u};
|
|
2
|
-
//# sourceMappingURL=CronLabel-DY8VdTS9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CronLabel-DY8VdTS9.js","sources":["../../src/api/agent-subscriptions.ts","../../src/components/common/display/CronLabel.tsx"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface AgentSubscription {\n id: string;\n agent_id: string;\n topic: string;\n filter?: Record<string, any>;\n reaction_type: 'durable' | 'pipeline' | 'mcp_query' | 'capability';\n workflow_type?: string;\n pipeline_id?: string;\n mcp_prompt?: string;\n server_id?: string;\n tool_name?: string;\n input_mapping: Record<string, any>;\n execute_as?: string;\n enabled: boolean;\n created_at: string;\n updated_at: string;\n}\n\ninterface SubscriptionListResponse {\n subscriptions: AgentSubscription[];\n}\n\nexport function useAgentSubscriptions(agentId: string | null) {\n return useQuery<SubscriptionListResponse>({\n queryKey: ['agent-subscriptions', agentId],\n queryFn: () => apiFetch(`/agents/${agentId}/subscriptions`),\n enabled: !!agentId,\n });\n}\n\nexport function useCreateSubscription() {\n const queryClient = useQueryClient();\n return useMutation<AgentSubscription, Error, { agentId: string } & Partial<AgentSubscription>>({\n mutationFn: ({ agentId, ...body }) =>\n apiFetch(`/agents/${agentId}/subscriptions`, {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: (_, vars) => {\n queryClient.invalidateQueries({ queryKey: ['agent-subscriptions', vars.agentId] });\n queryClient.invalidateQueries({ queryKey: ['agents'] });\n },\n });\n}\n\nexport function useUpdateSubscription() {\n const queryClient = useQueryClient();\n return useMutation<AgentSubscription, Error, { agentId: string; subId: string } & Partial<AgentSubscription>>({\n mutationFn: ({ agentId, subId, ...body }) =>\n apiFetch(`/agents/${agentId}/subscriptions/${subId}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: (_, vars) => {\n queryClient.invalidateQueries({ queryKey: ['agent-subscriptions', vars.agentId] });\n },\n });\n}\n\nexport function useDeleteSubscription() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean }, Error, { agentId: string; subId: string }>({\n mutationFn: ({ agentId, subId }) =>\n apiFetch(`/agents/${agentId}/subscriptions/${subId}`, { method: 'DELETE' }),\n onSuccess: (_, vars) => {\n queryClient.invalidateQueries({ queryKey: ['agent-subscriptions', vars.agentId] });\n queryClient.invalidateQueries({ queryKey: ['agents'] });\n },\n });\n}\n","import { Clock } from 'lucide-react';\n\ninterface CronLabelProps {\n cron: string;\n}\n\n/**\n * Universal cron expression display — Clock icon + monotype text.\n * Used everywhere a cron schedule is rendered.\n */\nexport function CronLabel({ cron }: CronLabelProps) {\n return (\n <span className=\"inline-flex items-center gap-1 text-[11px] font-mono text-text-secondary\">\n <Clock className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n {cron}\n </span>\n );\n}\n"],"names":["useAgentSubscriptions","agentId","useQuery","apiFetch","useCreateSubscription","queryClient","useQueryClient","useMutation","body","_","vars","useUpdateSubscription","subId","useDeleteSubscription","CronLabel","cron","jsxs","jsx","Clock"],"mappings":"4JAyBO,SAASA,EAAsBC,EAAwB,CAC5D,OAAOC,EAAmC,CACxC,SAAU,CAAC,sBAAuBD,CAAO,EACzC,QAAS,IAAME,EAAS,WAAWF,CAAO,gBAAgB,EAC1D,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASG,GAAwB,CACtC,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAwF,CAC7F,WAAY,CAAC,CAAE,QAAAN,EAAS,GAAGO,KACzBL,EAAS,WAAWF,CAAO,iBAAkB,CAC3C,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,CAACC,EAAGC,IAAS,CACtBL,EAAY,kBAAkB,CAAE,SAAU,CAAC,sBAAuBK,EAAK,OAAO,EAAG,EACjFL,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CAEO,SAASM,GAAwB,CACtC,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAuG,CAC5G,WAAY,CAAC,CAAE,QAAAN,EAAS,MAAAW,EAAO,GAAGJ,CAAA,IAChCL,EAAS,WAAWF,CAAO,kBAAkBW,CAAK,GAAI,CACpD,OAAQ,MACR,KAAM,KAAK,UAAUJ,CAAI,CAAA,CAC1B,EACH,UAAW,CAACC,EAAGC,IAAS,CACtBL,EAAY,kBAAkB,CAAE,SAAU,CAAC,sBAAuBK,EAAK,OAAO,EAAG,CACnF,CAAA,CACD,CACH,CAEO,SAASG,GAAwB,CACtC,MAAMR,EAAcC,EAAA,EACpB,OAAOC,EAA6E,CAClF,WAAY,CAAC,CAAE,QAAAN,EAAS,MAAAW,KACtBT,EAAS,WAAWF,CAAO,kBAAkBW,CAAK,GAAI,CAAE,OAAQ,SAAU,EAC5E,UAAW,CAACH,EAAGC,IAAS,CACtBL,EAAY,kBAAkB,CAAE,SAAU,CAAC,sBAAuBK,EAAK,OAAO,EAAG,EACjFL,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CC9DO,SAASS,EAAU,CAAE,KAAAC,GAAwB,CAClD,OACEC,EAAAA,KAAC,OAAA,CAAK,UAAU,2EACd,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAM,UAAU,4CAA4C,YAAa,IAAK,EAC9EH,CAAA,EACH,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as s,j as n}from"./vendor-query-B2UbickB.js";import{z as p,x as f}from"./index-BpN31nuC.js";function D({startDate:r,endDate:o,isLive:e}){const[l,c]=s.useState(Date.now);s.useEffect(()=>{if(!e)return;const u=setInterval(()=>c(Date.now()),1e3);return()=>clearInterval(u)},[e]);const x=new Date(r).getTime(),i=o?new Date(o).getTime():l,t=Math.max(0,i-x),a=p(t),m=s.useMemo(()=>[{label:"ms",value:String(t)},{label:"sec",value:`${(t/1e3).toFixed(3)}s`},{label:"text",value:a}],[t,a]);return n.jsx(f,{options:m,children:n.jsx("span",{className:`text-xs ${e?"text-status-active":"text-text-tertiary"}`,children:a})})}export{D as E};
|
|
2
|
-
//# sourceMappingURL=ElapsedCell-BPYm8RA7.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./vendor-query-B2UbickB.js";import{R as a}from"./vendor-icons-CrrAvF2g.js";const i={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=i[o]??"text-text-quaternary",n=t.split(".").slice(-2).join(".");return e.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-secondary",children:[e.jsx(a,{className:`w-2.5 h-2.5 shrink-0 ${s}`,strokeWidth:1.5}),n]})}export{c as E};
|
|
2
|
-
//# sourceMappingURL=EventTopicPill-CCWCs07y.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventTopicPill-CCWCs07y.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","jsxs","jsx","Radio"],"mappings":"8FAQA,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,KAAC,OAAA,CAAK,UAAU,2EACd,SAAA,CAAAC,MAACC,GAAM,UAAW,wBAAwBJ,CAAS,GAAI,YAAa,IAAK,EACxEC,CAAA,EACH,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as d,j as e}from"./vendor-query-B2UbickB.js";import{j as Z,r as H,d as N,c as ee,N as se,J as te}from"./index-BpN31nuC.js";import{b as ae}from"./workflows-COYPOe2I.js";import{u as ie}from"./pipelines-Bcz62DoS.js";import{a as ne}from"./controlplane-cj-1c-1C.js";import{u as re}from"./tasks-4yL5EfxI.js";import{e as oe,b as ce,u as le}from"./useEventHooks-NzIyvoGY.js";import{R as B}from"./RolePill-BC54Vn-U.js";import{W as j}from"./WorkflowPill-54px0YiY.js";import{L as g}from"./ListToolbar-DEef1_-T.js";import{E as de}from"./EventTopicPill-CCWCs07y.js";import{z as D,a9 as p,L as M,W as Q,C as J,I as O,R as U,B as xe,l as pe}from"./vendor-icons-CrrAvF2g.js";import{c as G,f as me}from"./vendor-react-CXumBFUA.js";const ue={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 V(t){return ue[t]??"bg-text-tertiary"}let he=0;function fe(t=5){const[a,i]=d.useState([]),[n,r]=d.useState(!1),l=d.useRef(null),o=d.useCallback(c=>{var x,f,b;if((x=c.type)!=null&&x.startsWith("mesh."))return;const h=c.activityName||c.workflowName||((f=c.data)==null?void 0:f.domain)||((b=c.workflowId)==null?void 0:b.slice(0,16))||"";i(w=>[{id:++he,type:c.type,timestamp:c.timestamp,label:h,data:c},...w].slice(0,t)),r(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>r(!1),2e3)},[t]);return ee(`${se}.>`,o),{events:a,pulse:n}}function m({icon:t,color:a,docsHash:i,children:n,actions:r}){return e.jsxs("div",{className:"flex items-center justify-between mb-4 pb-2 border-b border-surface-border",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(t,{className:`w-4.5 h-4.5 ${a||"text-accent/60"}`,strokeWidth:1.5}),e.jsx("h2",{className:"text-sm font-semibold uppercase tracking-widest text-accent/80",children:n})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsx("button",{onClick:()=>{window.location.hash=i},className:"text-text-quaternary hover:text-accent transition-colors",title:"Docs",children:e.jsx(xe,{className:"w-2.5 h-2.5",strokeWidth:1.5})}),r]})]})}function u({icon:t,text:a}){return e.jsxs("div",{className:"flex flex-col items-center justify-center py-10 text-center",children:[e.jsx(t,{className:"w-6 h-6 text-text-quaternary/50 mb-2",strokeWidth:1}),e.jsx("p",{className:"text-xs text-text-quaternary",children:a})]})}function je(t,a=37){if(!t||t.length<=a)return t;const i=Math.floor((a-3)/2);return`${t.slice(0,i)}...${t.slice(-i)}`}function C({dot:t,pill:a,id:i,date:n,onClick:r}){return e.jsxs("button",{onClick:r,className:"w-full text-left hover:bg-surface-hover/50 rounded-md px-1 py-1.5 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${t}`}),e.jsx("span",{className:"text-[12px] text-text-primary font-mono truncate max-w-[60%]",children:je(i)}),e.jsx("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto whitespace-nowrap",children:e.jsx(N,{date:n})})]}),e.jsx("div",{className:"pl-3.5 flex items-center gap-1 overflow-hidden",children:a})]})}function v({to:t,icon:a,title:i}){const n=G();return e.jsx("button",{onClick:()=>n(t),className:"text-text-quaternary hover:text-accent transition-colors",title:i,children:e.jsx(a,{className:"w-2.5 h-2.5",strokeWidth:1.5})})}function X({appIds:t,selected:a,onSelect:i}){const[n,r]=d.useState(!1),l=d.useRef(null);return d.useEffect(()=>{if(!n)return;const o=c=>{l.current&&!l.current.contains(c.target)&&r(!1)};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[n]),t.length<=1?null:e.jsxs("div",{className:"relative mb-3 -mt-2",ref:l,children:[e.jsxs("button",{onClick:()=>r(o=>!o),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:[a,e.jsx("svg",{className:`w-2.5 h-2.5 transition-transform ${n?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"})})]}),n&&e.jsx("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:t.map(o=>e.jsx("button",{onClick:()=>{i(o),r(!1)},className:`w-full text-left px-3 py-1.5 text-[11px] transition-colors ${a===o?"text-accent bg-accent/5":"text-text-secondary hover:bg-surface-hover"}`,children:o},o))})]})}function ge({event:t}){const[a,i]=d.useState(!1);return e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>i(!a),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.jsx(pe,{className:`w-2.5 h-2.5 text-text-quaternary shrink-0 transition-transform ${a?"rotate-0":"-rotate-90"}`}),e.jsx(de,{topic:t.type}),e.jsx("span",{className:"text-[11px] text-text-secondary font-mono truncate flex-1",children:t.label||"—"}),e.jsx("span",{className:"text-[10px] text-text-quaternary shrink-0",children:e.jsx(N,{date:t.timestamp,format:"time"})})]}),a&&e.jsx("div",{className:"pl-5 pb-2",children:e.jsx(te,{data:t.data,defaultCollapsed:!1})})]})}function qe(){var F,L,W,I,T;const t=G(),{user:a}=Z(),[i,n]=me(),r=i.get("pipelinenamespace")||"hmsh",l=i.get("durablenamespace")||"durable",o=d.useCallback((s,y)=>{n(Y=>{const z=new URLSearchParams(Y);return z.set(s,y),z},{replace:!1})},[n]);oe(),ce(),le();const c=re({limit:5}),h=ae({limit:5,sort_by:"updated_at",order:"desc",namespace:l}),{data:x}=ne(),f=((x==null?void 0:x.apps)??[]).map(s=>s.appId),b=f,w=f,k=ie({limit:5,app_id:r,sort_by:"updated_at",order:"desc"}),_=H({status:"pending",limit:5,sort_by:"updated_at",order:"desc"}),E=H({assigned_to:a==null?void 0:a.userId,status:"pending",limit:5,sort_by:"updated_at",order:"desc"}),{events:P,pulse:K}=fe(),S=((F=c.data)==null?void 0:F.processes)??[],R=((L=h.data)==null?void 0:L.jobs)??[],$=((W=k.data)==null?void 0:W.jobs)??[],q=((I=_.data)==null?void 0:I.escalations)??[],A=((T=E.data)==null?void 0:T.escalations)??[];return e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-light text-text-primary mb-10",children:"Recent Activity"}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-14",children:[e.jsxs("div",{children:[e.jsx(m,{icon:D,color:"text-emerald-400",docsHash:"#docs:dashboard.md:processes-overview",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{onRefresh:()=>c.refetch(),isFetching:c.isFetching,apiPath:"/tasks/processes?limit=5"}),e.jsx(v,{to:"/processes/all",icon:p,title:"All processes"})]}),children:"Certified Processes"}),e.jsx("div",{className:"mb-3 -mt-2",children:e.jsx("span",{className:"px-2 py-0.5 text-[10px] rounded text-text-quaternary uppercase tracking-widest",children:"all namespaces"})}),S.length===0?e.jsx(u,{icon:D,text:"No recent processes"}):e.jsx("div",{className:"space-y-1",children:S.map(s=>e.jsx(C,{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.jsx(e.Fragment,{children:(s.workflow_types??[s.workflow_type]).filter(Boolean).map(y=>e.jsx(j,{type:y,size:"xs"},y))}),id:s.origin_id,date:s.last_activity??s.started_at,onClick:()=>t(`/processes/detail/${s.origin_id}`)},s.origin_id))})]}),e.jsxs("div",{children:[e.jsx(m,{icon:M,color:"text-blue-400",docsHash:"#docs:dashboard.md:durable-executions",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{onRefresh:()=>h.refetch(),isFetching:h.isFetching,apiPath:`/workflow-states/jobs?namespace=${l}&limit=5`}),e.jsx(v,{to:"/workflows/executions",icon:p,title:"All durable executions"})]}),children:"Durable Executions"}),e.jsx(X,{appIds:b,selected:l,onSelect:s=>o("durablenamespace",s)}),R.length===0?e.jsx(u,{icon:M,text:"No recent executions"}):e.jsx("div",{className:"space-y-1",children:R.map(s=>e.jsx(C,{dot:V(s.status),pill:e.jsx(j,{type:s.entity||s.type||"workflow",size:"xs"}),id:s.workflow_id,date:s.updated_at??s.created_at,onClick:()=>t(`/workflows/executions/${s.workflow_id}`)},s.workflow_id))})]}),e.jsxs("div",{children:[e.jsx(m,{icon:Q,color:"text-violet-400",docsHash:"#docs:dashboard.md:mcp-pipeline-tools",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{onRefresh:()=>k.refetch(),isFetching:k.isFetching,apiPath:`/pipelines?app_id=${r}&limit=5`}),e.jsx(v,{to:"/mcp/executions",icon:p,title:"All pipeline executions"})]}),children:"Pipeline Executions"}),e.jsx(X,{appIds:w,selected:r,onSelect:s=>o("pipelinenamespace",s)}),$.length===0?e.jsx(u,{icon:Q,text:"No recent pipeline runs"}):e.jsx("div",{className:"space-y-1",children:$.map(s=>e.jsx(C,{dot:V(s.status),pill:e.jsx(j,{type:s.entity||s.workflow_name||"pipeline",variant:"pipeline",size:"xs"}),id:s.workflow_id,date:s.updated_at??s.created_at,onClick:()=>t(`/mcp/executions/${s.workflow_id}?namespace=${r}`)},s.workflow_id))})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-x-14 mt-14",children:[e.jsxs("div",{children:[e.jsx(m,{icon:J,color:"text-amber-400",docsHash:"#docs:dashboard.md:all-escalations",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{onRefresh:()=>_.refetch(),isFetching:_.isFetching,apiPath:"/escalations?status=pending&limit=5&sort_by=priority&order=asc"}),e.jsx(v,{to:"/escalations/available",icon:p,title:"All available escalations"})]}),children:"All Escalations"}),q.length===0?e.jsx(u,{icon:J,text:"No pending escalations"}):e.jsx("div",{className:"space-y-1",children:q.map(s=>e.jsxs("button",{onClick:()=>t(`/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.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsxs("span",{className:"text-[9px] text-text-quaternary font-medium shrink-0",children:["P",s.priority??2]}),e.jsx("span",{className:"text-[12px] text-text-primary truncate flex-1 max-w-[65%]",children:s.description||s.subtype||s.type}),e.jsx("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto",children:e.jsx(N,{date:s.updated_at??s.created_at})})]}),e.jsxs("div",{className:"flex items-center gap-2 pl-5",children:[e.jsx(j,{type:s.type||"unknown",size:"xs"}),e.jsx("span",{className:"flex-1"}),e.jsx(B,{role:s.role})]})]},s.id))})]}),e.jsxs("div",{children:[e.jsx(m,{icon:O,color:"text-orange-400",docsHash:"#docs:dashboard.md:escalations-overview",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(g,{onRefresh:()=>E.refetch(),isFetching:E.isFetching,apiPath:`/escalations?assigned_to=${(a==null?void 0:a.userId)??""}&status=pending&limit=5`}),e.jsx(v,{to:"/escalations/queue",icon:p,title:"My escalation queue"})]}),children:"My Escalations"}),A.length===0?e.jsx(u,{icon:O,text:"No assigned escalations"}):e.jsx("div",{className:"space-y-1",children:A.map(s=>e.jsxs("button",{onClick:()=>t(`/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.jsxs("div",{className:"flex items-center gap-2 mb-0.5",children:[e.jsxs("span",{className:"text-[9px] text-text-quaternary font-medium shrink-0",children:["P",s.priority??2]}),e.jsx("span",{className:"text-[12px] text-text-primary truncate flex-1 max-w-[65%]",children:s.description||s.subtype||s.type}),e.jsx("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-auto",children:e.jsx(N,{date:s.updated_at??s.created_at})})]}),e.jsxs("div",{className:"flex items-center gap-2 pl-5",children:[e.jsx(j,{type:s.type||"unknown",size:"xs"}),e.jsx("span",{className:"flex-1"}),e.jsx(B,{role:s.role})]})]},s.id))})]}),e.jsxs("div",{children:[e.jsx(m,{icon:U,color:"text-emerald-400",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${K?"bg-emerald-400":"bg-zinc-600"}`}),e.jsx("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.jsx(p,{className:"w-2.5 h-2.5",strokeWidth:1.5})})]}),children:"Event Stream"}),P.length===0?e.jsx(u,{icon:U,text:"Events appear here in real time"}):e.jsx("div",{className:"divide-y divide-surface-border/20",children:P.map(s=>e.jsx(ge,{event:s},s.id))})]})]})]})}export{qe as HomePage};
|
|
2
|
-
//# sourceMappingURL=HomePage-CwRebzmO.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage-CwRebzmO.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/pipelines';\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={`/pipelines?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,2 +0,0 @@
|
|
|
1
|
-
import{a as C,j as s}from"./vendor-query-B2UbickB.js";import{L as u,E as j}from"./index-BpN31nuC.js";import{a0 as d,aI as N,aJ as f,ax as h}from"./vendor-icons-CrrAvF2g.js";function w({onRefresh:m,isFetching:r=!1,apiPath:e}){const[c,l]=C.useState(null),i=(t,a)=>{navigator.clipboard.writeText(t).then(()=>{l(a),setTimeout(()=>l(null),2e3)})},x=()=>{if(!e)return;const t=`${window.location.origin}${u}/api${e}`;i(t,"url")},p=()=>{if(!e)return;const t=`${window.location.origin}${u}/api${e}`,a=j(),$=a?`curl -H "Authorization: Bearer ${a}" "${t}"`:`curl "${t}"`;i($,"curl")},n="p-1 text-text-quaternary hover:text-accent transition-colors rounded",o="w-2.5 h-2.5";return s.jsxs("div",{className:"flex items-center gap-0.5",children:[e&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:x,className:n,title:"Copy API URL",children:c==="url"?s.jsx(d,{className:`${o} text-status-success`}):s.jsx(N,{className:o})}),s.jsx("button",{onClick:p,className:n,title:"Copy curl (includes auth token)",children:c==="curl"?s.jsx(d,{className:`${o} text-status-success`}):s.jsx(f,{className:o})})]}),s.jsx("button",{onClick:m,disabled:r,className:`${n} disabled:opacity-50`,title:"Refresh",children:s.jsx(h,{className:`${o} ${r?"animate-spin":""}`})})]})}export{w as L};
|
|
2
|
-
//# sourceMappingURL=ListToolbar-DEef1_-T.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as R,a as m,j as e}from"./vendor-query-B2UbickB.js";import{b as D,c as L}from"./pipelines-Bcz62DoS.js";import{u as J,c as K,D as M,d as S,J as _,N as U}from"./index-BpN31nuC.js";import{S as $}from"./StatusBadge-XQlNFwmH.js";import{P as E}from"./PageHeader-CR6TpJG_.js";import{C as A}from"./CopyableId-DaT0ZRHg.js";import{C as b}from"./CollapsibleSection-2eZMMZiG.js";import{u as V}from"./useCollapsedSections-BU5HULGs.js";import{L as q}from"./ListToolbar-DEef1_-T.js";import{S as B}from"./SwimlaneTimeline-CbFaU4bq.js";import{E as F}from"./EventTable-DSDzJMer.js";import{e as H,f as Q}from"./vendor-react-CXumBFUA.js";import"./vendor-icons-CrrAvF2g.js";import"./FilterBar-Ck4K4rzu.js";const z={running:"in_progress",completed:"completed",failed:"failed"};function O({isRunning:a,onTerminate:l}){const[s,n]=m.useState(!1),t=m.useRef(null);return m.useEffect(()=>{if(!s)return;const o=i=>{t.current&&!t.current.contains(i.target)&&n(!1)};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[s]),a?e.jsxs("div",{className:"relative",ref:t,children:[e.jsx("button",{onClick:()=>n(!s),className:"btn-primary text-xs",children:"Actions"}),s&&e.jsx("div",{className:"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10",children:e.jsx("button",{onClick:()=>{l(),n(!1)},className:"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover",children:"Terminate"})})]}):null}function oe(){var N,w;const{jobId:a}=H(),[l]=Q(),s=l.get("namespace")||"longtail",n=R(),{data:t,isLoading:o,error:i,refetch:v,isFetching:T}=D(a,s),C=L(),{data:u}=J(),{isCollapsed:p,toggle:f}=V("mcp-run-detail"),g=((N=u==null?void 0:u.telemetry)==null?void 0:N.traceUrl)??null,I=m.useCallback(x=>{!a||x.workflowId!==a||n.invalidateQueries({queryKey:["mcpRunExecution",a]})},[a,n]);if(K(`${U}.activity.>`,I),o)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-64"}),e.jsx("div",{className:"h-60 bg-surface-sunken rounded"})]});if(i||!t)return e.jsxs("div",{children:[e.jsx(E,{title:"Pipeline Execution"}),e.jsxs("div",{className:"mt-4 text-center py-8",children:[e.jsx("p",{className:"text-sm text-text-primary mb-1",children:(w=i==null?void 0:i.message)!=null&&w.includes("expired")?"Execution data is no longer available":"Unable to load execution"}),e.jsx("p",{className:"text-xs text-text-tertiary",children:(i==null?void 0:i.message)??"The run could not be resolved."})]})]});const{events:j,summary:r}=t,h=j.find(x=>{var k;return x.category==="activity"&&((k=x.attributes.kind)==null?void 0:k.includes("completed"))}),P=(h==null?void 0:h.attributes.result)??null,d=t.result,y=(d==null?void 0:d.data)??d??null;return e.jsxs("div",{children:[e.jsx(E,{title:"Pipeline Execution",actions:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(q,{onRefresh:()=>v(),isFetching:T,apiPath:`/pipelines/${a}/execution?app_id=${s}`}),e.jsx(O,{isRunning:t.status==="running",onTerminate:()=>{confirm("Interrupt this pipeline execution? This cannot be undone.")&&C.mutate({jobId:t.workflow_id,topic:t.workflow_type,appId:s},{onSuccess:()=>v()})}})]})}),e.jsxs("div",{className:"bg-surface-sunken/50 rounded-md p-5 mb-8",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsx("h2",{className:"text-sm font-mono text-text-primary truncate flex-1",children:t.workflow_id}),e.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[e.jsx(c,{label:"Tools",value:r.activities.user}),e.jsx(c,{label:"System",value:r.activities.system,muted:!0}),r.child_workflows.total>0&&e.jsx(c,{label:"Children",value:r.child_workflows.total}),r.timers>0&&e.jsx(c,{label:"Timers",value:r.timers}),r.signals>0&&e.jsx(c,{label:"Signals",value:r.signals}),e.jsx($,{status:z[t.status]??t.status})]})]}),e.jsxs("div",{className:"grid grid-cols-6 gap-x-6",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Server"}),e.jsx("p",{className:"text-xs font-mono text-text-primary truncate",children:s})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Tool"}),e.jsx("p",{className:"text-xs font-mono text-text-primary truncate",children:t.workflow_type||"—"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Duration"}),e.jsx(M,{ms:t.duration_ms,className:"font-mono text-text-primary"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Started"}),t.start_time?e.jsx(S,{date:t.start_time,format:"datetime",className:"font-mono text-text-primary"}):e.jsx("span",{className:"text-xs text-text-tertiary",children:"--"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Completed"}),t.close_time?e.jsx(S,{date:t.close_time,format:"datetime",className:"font-mono text-text-primary"}):e.jsx("span",{className:"text-xs text-text-tertiary",children:"--"})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Trace"}),t.trace_id?e.jsx(A,{label:"",value:t.trace_id,href:g?g.replace("{traceId}",t.trace_id):void 0,external:!0}):e.jsx("span",{className:"text-xs text-text-tertiary",children:"—"})]})]})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsx(b,{title:"Details",sectionKey:"details",isCollapsed:p("details"),onToggle:f,children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[e.jsx("div",{children:e.jsx(_,{data:P??{},label:"Input"})}),y!==null&&e.jsx("div",{children:e.jsx(_,{data:y,label:"Result"})})]})}),e.jsx(b,{title:"Execution Timeline",sectionKey:"timeline",isCollapsed:p("timeline"),onToggle:f,children:e.jsx(B,{events:j,outline:!0})}),e.jsx(b,{title:"Events",sectionKey:"events",isCollapsed:p("events"),onToggle:f,children:e.jsx(F,{events:j})})]})]})}function c({label:a,value:l,muted:s}){return e.jsxs("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsx("span",{className:"text-text-tertiary",children:a}),e.jsx("span",{className:`font-medium tabular-nums ${s?"text-text-tertiary":"text-text-primary"}`,children:l})]})}export{oe as McpRunDetailPage};
|
|
2
|
-
//# sourceMappingURL=McpRunDetailPage-X0sfRFTk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"McpRunDetailPage-X0sfRFTk.js","sources":["../../src/pages/mcp/McpRunDetailPage.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useCallback } from 'react';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useMcpRunExecution, useInterruptJob } from '../../api/pipelines';\nimport { useSettings } from '../../api/settings';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { CopyableId } from '../../components/common/display/CopyableId';\nimport { CollapsibleSection } from '../../components/common/layout/CollapsibleSection';\nimport { useCollapsedSections } from '../../hooks/useCollapsedSections';\nimport { useEventSubscription } from '../../hooks/useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../../lib/nats/config';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { DurationValue } from '../../components/common/display/DurationValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\n\nimport { SwimlaneTimeline } from '../workflows/workflow-execution/SwimlaneTimeline';\nimport { EventTable } from '../workflows/workflow-execution/EventTable';\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nconst statusMap: Record<string, string> = {\n running: 'in_progress',\n completed: 'completed',\n failed: 'failed',\n};\n\n// ── Actions dropdown ────────────────────────────────────────────────────────\n\nfunction ActionsDropdown({ isRunning, onTerminate }: {\n isRunning: boolean;\n onTerminate: () => 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 (!isRunning) return null;\n\n return (\n <div className=\"relative\" ref={ref}>\n <button onClick={() => setOpen(!open)} className=\"btn-primary text-xs\">\n Actions\n </button>\n {open && (\n <div className=\"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10\">\n <button\n onClick={() => { onTerminate(); setOpen(false); }}\n className=\"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover\"\n >\n Terminate\n </button>\n </div>\n )}\n </div>\n );\n}\n\n// ── Main page ────────────────────────────────────────────────────────────────\n\nexport function McpRunDetailPage() {\n const { jobId } = useParams<{ jobId: string }>();\n const [searchParams] = useSearchParams();\n const namespace = searchParams.get('namespace') || 'longtail';\n const queryClient = useQueryClient();\n const { data: execution, isLoading, error, refetch, isFetching } = useMcpRunExecution(jobId!, namespace);\n const interruptMutation = useInterruptJob();\n const { data: settings } = useSettings();\n const { isCollapsed, toggle } = useCollapsedSections('mcp-run-detail');\n\n\n const traceUrl = settings?.telemetry?.traceUrl ?? null;\n\n // Subscribe to activity events for this job — refetch execution on each step\n const activityHandler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n queryClient.invalidateQueries({ queryKey: ['mcpRunExecution', jobId] });\n }, [jobId, queryClient]);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.activity.>`, activityHandler);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (error || !execution) {\n return (\n <div>\n <PageHeader title=\"Pipeline Execution\" />\n <div className=\"mt-4 text-center py-8\">\n <p className=\"text-sm text-text-primary mb-1\">\n {(error as Error)?.message?.includes('expired')\n ? 'Execution data is no longer available'\n : 'Unable to load execution'}\n </p>\n <p className=\"text-xs text-text-tertiary\">\n {(error as Error)?.message ?? 'The run could not be resolved.'}\n </p>\n </div>\n </div>\n );\n }\n\n const { events, summary } = execution;\n\n // The trigger activity's result is the effective input to the flow —\n // it accepts outside job input and provides it to descendant activities.\n const triggerCompleted = events.find(\n (e) => e.category === 'activity' && e.attributes.kind?.includes('completed'),\n );\n const triggerInput = triggerCompleted?.attributes.result ?? null;\n\n // Unwrap result — the `data` field is what users care about\n const rawResult = execution.result as Record<string, unknown> | null | undefined;\n const result = rawResult?.data ?? rawResult ?? null;\n\n return (\n <div>\n <PageHeader\n title=\"Pipeline Execution\"\n actions={\n <div className=\"flex items-center gap-2\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/pipelines/${jobId}/execution?app_id=${namespace}`}\n />\n <ActionsDropdown\n isRunning={execution.status === 'running'}\n onTerminate={() => {\n if (confirm('Interrupt this pipeline execution? This cannot be undone.')) {\n interruptMutation.mutate(\n { jobId: execution.workflow_id, topic: execution.workflow_type, appId: namespace },\n { onSuccess: () => refetch() },\n );\n }\n }}\n />\n </div>\n }\n />\n\n {/* ── Header card ─────────────────────────────────── */}\n <div className=\"bg-surface-sunken/50 rounded-md p-5 mb-8\">\n {/* Row 1: Job ID + stats + status */}\n <div className=\"flex items-center gap-4 mb-4\">\n <h2 className=\"text-sm font-mono text-text-primary truncate flex-1\">{execution.workflow_id}</h2>\n <div className=\"flex items-center gap-4 shrink-0\">\n <Stat label=\"Tools\" value={summary.activities.user} />\n <Stat label=\"System\" value={summary.activities.system} muted />\n {summary.child_workflows.total > 0 && (\n <Stat label=\"Children\" value={summary.child_workflows.total} />\n )}\n {summary.timers > 0 && <Stat label=\"Timers\" value={summary.timers} />}\n {summary.signals > 0 && <Stat label=\"Signals\" value={summary.signals} />}\n <StatusBadge status={statusMap[execution.status] ?? execution.status} />\n </div>\n </div>\n\n {/* Row 2: Namespace, Topic, Duration, Started, Trace */}\n <div className=\"grid grid-cols-6 gap-x-6\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Server</p>\n <p className=\"text-xs font-mono text-text-primary truncate\">{namespace}</p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Tool</p>\n <p className=\"text-xs font-mono text-text-primary truncate\">{execution.workflow_type || '—'}</p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Duration</p>\n <DurationValue ms={execution.duration_ms} className=\"font-mono text-text-primary\" />\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Started</p>\n {execution.start_time\n ? <DateValue date={execution.start_time} format=\"datetime\" className=\"font-mono text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Completed</p>\n {execution.close_time\n ? <DateValue date={execution.close_time} format=\"datetime\" className=\"font-mono text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5\">Trace</p>\n {execution.trace_id ? (\n <CopyableId\n label=\"\"\n value={execution.trace_id}\n href={traceUrl ? traceUrl.replace('{traceId}', execution.trace_id) : undefined}\n external\n />\n ) : (\n <span className=\"text-xs text-text-tertiary\">—</span>\n )}\n </div>\n </div>\n </div>\n\n {/* ── Sections ────────────────────────────────────── */}\n <div className=\"space-y-6\">\n {/* Details: Input + Result */}\n <CollapsibleSection title=\"Details\" sectionKey=\"details\" isCollapsed={isCollapsed('details')} onToggle={toggle}>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n <div>\n <JsonViewer data={triggerInput ?? {}} label=\"Input\" />\n </div>\n {result !== null && (\n <div>\n <JsonViewer data={result} label=\"Result\" />\n </div>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Execution Timeline (swimlane) */}\n <CollapsibleSection title=\"Execution Timeline\" sectionKey=\"timeline\" isCollapsed={isCollapsed('timeline')} onToggle={toggle}>\n <SwimlaneTimeline events={events} outline />\n </CollapsibleSection>\n\n {/* Events (table) */}\n <CollapsibleSection title=\"Events\" sectionKey=\"events\" isCollapsed={isCollapsed('events')} onToggle={toggle}>\n <EventTable events={events} />\n </CollapsibleSection>\n </div>\n </div>\n );\n}\n\n// ── Stat pill ────────────────────────────────────────────────────────────────\n\nfunction Stat({ label, value, muted }: { label: string; value: number; muted?: boolean }) {\n return (\n <div className=\"flex items-center gap-1.5 text-xs\">\n <span className=\"text-text-tertiary\">{label}</span>\n <span className={`font-medium tabular-nums ${muted ? 'text-text-tertiary' : 'text-text-primary'}`}>{value}</span>\n </div>\n );\n}\n"],"names":["statusMap","ActionsDropdown","isRunning","onTerminate","open","setOpen","useState","ref","useRef","useEffect","handler","e","jsxs","jsx","McpRunDetailPage","jobId","useParams","searchParams","useSearchParams","namespace","queryClient","useQueryClient","execution","isLoading","error","refetch","isFetching","useMcpRunExecution","interruptMutation","useInterruptJob","settings","useSettings","isCollapsed","toggle","useCollapsedSections","traceUrl","_a","activityHandler","useCallback","event","useEventSubscription","NATS_SUBJECT_PREFIX","PageHeader","_b","events","summary","triggerCompleted","triggerInput","rawResult","result","ListToolbar","Stat","StatusBadge","DurationValue","DateValue","CopyableId","CollapsibleSection","JsonViewer","SwimlaneTimeline","EventTable","label","value","muted"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as m,j as s}from"./vendor-query-B2UbickB.js";import{a as T,u as F}from"./pipelines-Bcz62DoS.js";import{a as R}from"./yaml-workflows-1dF3ig6u.js";import{u as M}from"./namespaces-ne_yDQZX.js";import{u as z}from"./useFilterParams-x-Dg0Vgz.js";import{D as E}from"./DataTable-D9yuBv0w.js";import{W as A}from"./WorkflowPill-54px0YiY.js";import{T as b}from"./TimestampCell-BBCf8zsN.js";import{E as L}from"./ElapsedCell-BPYm8RA7.js";import{P as U}from"./PageHeader-CR6TpJG_.js";import{F as I,b as h}from"./FilterBar-Ck4K4rzu.js";import{S as O}from"./StickyPagination-BWhFSr2d.js";import{L as W}from"./ListToolbar-DEef1_-T.js";import{R as B,a as H}from"./RowActions-Dg-Fsm5O.js";import{y as q}from"./vendor-icons-CrrAvF2g.js";import{c as G}from"./vendor-react-CXumBFUA.js";import"./index-BpN31nuC.js";import"./EmptyState-BcsfPq9T.js";const Y={running:"in_progress",completed:"completed",failed:"failed"},J={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},K={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function Q(f,a){return[{key:"workflow_id",label:"Run ID / Tool",render:e=>{const u=J[Y[e.status]??e.status]??"bg-status-pending",i=e.status==="running"?" animate-pulse":"";return s.jsxs("div",{className:"flex items-start gap-2 min-w-0",children:[s.jsx("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full mt-1.5 ${u}${i}`,title:e.status}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"font-mono text-xs text-text-primary truncate block",children:e.workflow_id}),s.jsx("div",{className:"mt-0.5",children:e.entity?s.jsx(A,{type:e.entity,variant:"pipeline",size:"xs"}):s.jsx("span",{className:"text-[10px] text-text-tertiary",children:"—"})})]})]})}},{key:"created_at",label:"Created",sortable:!0,render:e=>s.jsx(b,{date:e.created_at}),className:"w-40"},{key:"updated_at",label:"Updated",sortable:!0,render:e=>s.jsx(b,{date:e.updated_at}),className:"w-40"},{key:"duration",label:"Duration",render:e=>s.jsx(L,{startDate:e.created_at,endDate:e.status==="running"?null:e.updated_at,isLive:e.status==="running"}),className:"w-28"},{key:"actions",label:"",render:e=>s.jsxs(B,{children:[s.jsx(H,{icon:q,title:`Filter by ${e.entity}`,onClick:()=>f(e.entity)}),s.jsx("button",{onClick:u=>{u.stopPropagation(),a(e.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${e.status}`,children:s.jsx("svg",{className:`w-[18px] h-[18px] ${K[e.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"currentColor",children:s.jsx("circle",{cx:"12",cy:"12",r:"6"})})})]}),className:"w-24 text-right"}]}function xe(){const f=G(),{filters:a,setFilter:e,setFilters:u,pagination:i,sort:g,setSort:v}=z({filters:{search:"",entity:"",status:"",namespace:""}}),[d,j]=m.useState(a.search);m.useEffect(()=>{if(d===a.search)return;const t=setTimeout(()=>e("search",d),300);return()=>clearTimeout(t)},[d,e,a.search]);const{data:r}=R(),{data:l}=M(),x=m.useMemo(()=>{const t=new Set((r==null?void 0:r.app_ids)??[]);for(const o of(l==null?void 0:l.namespaces)??[])t.add(o.name);return[...t].sort()},[r==null?void 0:r.app_ids,l==null?void 0:l.namespaces]),S=x.includes("hmsh")?"hmsh":x[0]??"",n=a.namespace||S,{data:c}=T(n),{data:p,isLoading:N,refetch:_,isFetching:k}=F({app_id:n,limit:i.pageSize,offset:i.offset,entity:a.entity||void 0,search:a.search||void 0,status:a.status||void 0,sort_by:g.sort_by||void 0,order:g.order||void 0}),y=(p==null?void 0:p.total)??0,C=(p==null?void 0:p.jobs)??[],$=Q(t=>e("entity",t),t=>e("status",t)),w=m.useMemo(()=>{const t=new Set(x);return n&&t.add(n),[...t].sort().map(o=>({value:o,label:o}))},[x,n]),P=m.useMemo(()=>{const t=new Set((c==null?void 0:c.entities)??[]);return a.entity&&!t.has(a.entity)&&t.add(a.entity),[...t].sort().map(o=>({value:o,label:o}))},[c==null?void 0:c.entities,a.entity]);return s.jsxs("div",{children:[s.jsx(U,{title:"Pipeline Executions",docsHash:"#docs:dashboard.md:pipeline-executions"}),s.jsxs(I,{actions:s.jsx(W,{onRefresh:()=>_(),isFetching:k,apiPath:`/pipelines?app_id=${n||"longtail"}&limit=${i.pageSize}&offset=${i.offset}${a.entity?`&entity=${a.entity}`:""}${a.status?`&status=${a.status}`:""}${a.search?`&search=${a.search}`:""}`}),children:[s.jsx(h,{label:"Namespace",value:n,onChange:t=>{u({namespace:t,entity:""})},options:w,required:!0}),s.jsx("input",{type:"text",placeholder:"Search run ID...",value:d,onChange:t=>j(t.target.value),className:"input text-[11px] py-1 px-2 w-56"}),s.jsx(h,{label:"Tool",value:a.entity,onChange:t=>e("entity",t),options:P}),s.jsx(h,{label:"Status",value:a.status,onChange:t=>e("status",t),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]})]}),s.jsx(E,{columns:$,data:C,keyFn:t=>t.workflow_id,onRowClick:t=>f(`/mcp/executions/${encodeURIComponent(t.workflow_id)}?namespace=${n}`),isLoading:N,emptyMessage:"No pipeline executions found",sort:g,onSort:v}),s.jsx(O,{page:i.page,totalPages:i.totalPages(y),onPageChange:i.setPage,total:y,pageSize:i.pageSize,onPageSizeChange:i.setPageSize})]})}export{xe as McpRunsPage};
|
|
2
|
-
//# sourceMappingURL=McpRunsPage-aZg057y3.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as o}from"./vendor-query-B2UbickB.js";import{j as C,s as P,p as L,r as _}from"./index-BpN31nuC.js";import{f as R}from"./useEventHooks-NzIyvoGY.js";import{u as $}from"./roles-De2CzGCy.js";import{u as T}from"./useFilterParams-x-Dg0Vgz.js";import{D as k}from"./DataTable-D9yuBv0w.js";import{P as F}from"./PageHeader-CR6TpJG_.js";import{S as N}from"./StickyPagination-BWhFSr2d.js";import{R as z,a as O}from"./RowActions-Dg-Fsm5O.js";import{a as A,T as M,E as I}from"./escalation-columns-Beox3TXH.js";import{L as D}from"./ListToolbar-DEef1_-T.js";import{a8 as U}from"./vendor-icons-CrrAvF2g.js";import{c as q}from"./vendor-react-CXumBFUA.js";import"./EmptyState-BcsfPq9T.js";import"./FilterBar-Ck4K4rzu.js";import"./PriorityBadge-DfQY9St9.js";import"./RolePill-BC54Vn-U.js";import"./WorkflowPill-54px0YiY.js";import"./TimestampCell-BBCf8zsN.js";import"./escalation-BEVFyQnE.js";function pt(){R();const y=q(),{user:n}=C(),{filters:e,setFilter:x,pagination:s,sort:r,setSort:h}=T({filters:{role:"",type:"",priority:"",search:""}}),S=P(),{data:l}=$(),{data:p}=L(),{data:a,isLoading:b,error:i,refetch:v,isFetching:j}=_({assigned_to:n==null?void 0:n.userId,status:"pending",role:e.role||void 0,type:e.type||void 0,priority:e.priority?parseInt(e.priority):void 0,limit:s.pageSize,offset:s.offset,sort_by:r.sort_by||void 0,order:r.sort_by?r.order:void 0}),m=((a==null?void 0:a.escalations)??[]).filter(t=>t.assigned_until&&new Date(t.assigned_until)>new Date),c=(e.search??"").toLowerCase(),d=c?m.filter(t=>{const u=[t.id,t.type,t.subtype,t.description,t.workflow_id,t.origin_id,t.role];return t.metadata&&u.push(...Object.values(t.metadata).map(String)),u.some(f=>f&&String(f).toLowerCase().includes(c))}):m,g=c?d.length:(a==null?void 0:a.total)??0,E={key:"actions",label:"",render:t=>o.jsx(z,{children:o.jsx(O,{icon:U,title:"Release escalation",onClick:()=>S.mutate(t.id),colorClass:"text-text-tertiary hover:text-status-warning"})}),className:"w-16 text-right"},w=[M,...I,E];return o.jsxs("div",{children:[o.jsx(F,{title:"My Escalations"}),o.jsx(A,{filters:e,setFilter:x,roles:(l==null?void 0:l.roles)??[],types:(p==null?void 0:p.types)??[],actions:o.jsx(D,{onRefresh:()=>v(),isFetching:j,apiPath:`/escalations?status=claimed&limit=${s.pageSize}&offset=${s.offset}${e.role?`&role=${e.role}`:""}${e.type?`&type=${e.type}`:""}${e.priority?`&priority=${e.priority}`:""}`})}),i&&o.jsx("div",{className:"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error",children:i.message==="Session expired"?"Your session has expired. Please log in again.":`Failed to load escalations: ${i.message}`}),o.jsx(k,{columns:w,data:d,keyFn:t=>t.id,onRowClick:t=>y(`/escalations/detail/${t.id}`,{state:{from:"/escalations/queue"}}),isLoading:b,emptyMessage:i?"Unable to load data":"No assigned escalations",sort:r,onSort:h}),o.jsx(N,{page:s.page,totalPages:s.totalPages(g),onPageChange:s.setPage,total:g,pageSize:s.pageSize,onPageSizeChange:s.setPageSize})]})}export{pt as OperatorDashboard};
|
|
2
|
-
//# sourceMappingURL=OperatorDashboard-iZEHnndU.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OperatorDashboard-iZEHnndU.js","sources":["../../src/pages/operator/OperatorDashboard.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { LockOpen } from 'lucide-react';\nimport { useAuth } from '../../hooks/useAuth';\nimport { useEscalations, useEscalationTypes, useReleaseEscalation } from '../../api/escalations';\nimport { useEscalationListEvents } from '../../hooks/useEventHooks';\nimport { useRoles } from '../../api/roles';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { RowAction, RowActionGroup } from '../../components/common/layout/RowActions';\nimport { ESCALATION_COLUMNS, TIME_LEFT_COLUMN, EscalationFilterBar } from './escalation-columns';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport type { LTEscalationRecord } from '../../api/types';\n\nexport function OperatorDashboard() {\n useEscalationListEvents();\n const navigate = useNavigate();\n const { user } = useAuth();\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { role: '', type: '', priority: '', search: '' },\n });\n const release = useReleaseEscalation();\n const { data: rolesData } = useRoles();\n const { data: typesData } = useEscalationTypes();\n\n const { data, isLoading, error: queryError, refetch, isFetching } = useEscalations({\n assigned_to: user?.userId,\n status: 'pending',\n role: filters.role || undefined,\n type: filters.type || undefined,\n priority: filters.priority ? parseInt(filters.priority) : undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || undefined,\n order: sort.sort_by ? sort.order : undefined,\n });\n\n // Exclude expired claims — they're back in the available pool\n const activeRaw = (data?.escalations ?? []).filter(\n (e) => e.assigned_until && new Date(e.assigned_until) > new Date(),\n );\n\n // Client-side search across visible fields + metadata values\n const searchTerm = (filters.search ?? '').toLowerCase();\n const activeClaims = searchTerm\n ? activeRaw.filter((e) => {\n const fields = [e.id, e.type, e.subtype, e.description, e.workflow_id, e.origin_id, e.role];\n if (e.metadata) fields.push(...Object.values(e.metadata).map(String));\n return fields.some((f) => f && String(f).toLowerCase().includes(searchTerm));\n })\n : activeRaw;\n const total = searchTerm ? activeClaims.length : (data?.total ?? 0);\n\n const releaseColumn: Column<LTEscalationRecord> = {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={LockOpen}\n title=\"Release escalation\"\n onClick={() => release.mutate(row.id)}\n colorClass=\"text-text-tertiary hover:text-status-warning\"\n />\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n };\n\n // Time-left first (aligns with checkbox on All Escalations), then summary + base columns + actions\n const columns: Column<LTEscalationRecord>[] = [\n TIME_LEFT_COLUMN,\n ...ESCALATION_COLUMNS,\n releaseColumn,\n ];\n\n return (\n <div>\n <PageHeader title=\"My Escalations\" />\n\n <EscalationFilterBar\n filters={filters}\n setFilter={setFilter}\n roles={rolesData?.roles ?? []}\n types={typesData?.types ?? []}\n actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/escalations?status=claimed&limit=${pagination.pageSize}&offset=${pagination.offset}${filters.role ? `&role=${filters.role}` : ''}${filters.type ? `&type=${filters.type}` : ''}${filters.priority ? `&priority=${filters.priority}` : ''}`}\n />\n }\n />\n\n {queryError && (\n <div className=\"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error\">\n {(queryError as Error).message === 'Session expired'\n ? 'Your session has expired. Please log in again.'\n : `Failed to load escalations: ${(queryError as Error).message}`}\n </div>\n )}\n\n <DataTable\n columns={columns}\n data={activeClaims}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/escalations/detail/${row.id}`, { state: { from: '/escalations/queue' } })}\n isLoading={isLoading}\n emptyMessage={queryError ? 'Unable to load data' : 'No assigned escalations'}\n sort={sort}\n onSort={setSort}\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["OperatorDashboard","useEscalationListEvents","navigate","useNavigate","user","useAuth","filters","setFilter","pagination","sort","setSort","useFilterParams","release","useReleaseEscalation","rolesData","useRoles","typesData","useEscalationTypes","data","isLoading","queryError","refetch","isFetching","useEscalations","activeRaw","e","searchTerm","activeClaims","fields","total","releaseColumn","row","jsx","RowActionGroup","RowAction","LockOpen","columns","TIME_LEFT_COLUMN","ESCALATION_COLUMNS","PageHeader","EscalationFilterBar","ListToolbar","DataTable","StickyPagination"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./vendor-query-B2UbickB.js";import{j as i,a9 as x}from"./vendor-icons-CrrAvF2g.js";import{c}from"./vendor-react-CXumBFUA.js";function h({name:e,serverId:r,short:a=!0}){const n=c(),s=a?e.replace(/^long-tail-/,""):e;return r?t.jsxs("button",{onClick:o=>{o.stopPropagation(),n(`/mcp/servers/${r}`)},className:"group/srv inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary hover:text-accent transition-colors",title:e,children:[t.jsx(i,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent",strokeWidth:1.5}),s,t.jsx(x,{className:"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent",strokeWidth:1.5})]}):t.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary",title:e,children:[t.jsx(i,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5}),s]})}export{h as S};
|
|
2
|
-
//# sourceMappingURL=ServerName-Q6okiv4f.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{a as i,j as e}from"./vendor-query-B2UbickB.js";import{a as G,b as H,c as K,d as Q}from"./topics-DDKHpRwP.js";import{u as X,d as b,J as W}from"./index-BpN31nuC.js";import{L as Y}from"./ListToolbar-DEef1_-T.js";import{R as n,B as Z,$ as ee,u as te,aQ as se,X as ae,T as ce,a as R,v as ie}from"./vendor-icons-CrrAvF2g.js";import{e as ne,c as re}from"./vendor-react-CXumBFUA.js";const le={task:"bg-blue-400/15 text-blue-400",workflow:"bg-accent/15 text-accent",escalation:"bg-amber-400/15 text-amber-400",activity:"bg-cyan-400/15 text-cyan-400",knowledge:"bg-violet-400/15 text-violet-400",agent:"bg-emerald-400/15 text-emerald-400",app:"bg-rose-400/15 text-rose-400",milestone:"bg-violet-400/15 text-violet-400"};function y({icon:r,color:x,children:l}){return e.jsxs("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsx(r,{className:`w-4 h-4 ${x}`,strokeWidth:1.5}),e.jsx("h2",{className:"text-xs font-semibold uppercase tracking-widest text-accent/80",children:l})]})}function je(){var E,T,O,D,J;const{topic:r}=ne(),x=r?decodeURIComponent(r):null,l=re(),{data:t,isLoading:q,refetch:m,isFetching:$}=G(x),{data:p}=X(),L=(E=p==null?void 0:p.ai)!=null&&E.enabled?"agents":"automations",f=H(),M=K(),c=Q(),[a,h]=i.useState(!1),[u,N]=i.useState(""),[v,k]=i.useState(""),[w,S]=i.useState(""),[j,_]=i.useState(""),[C,o]=i.useState("");if(q)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsx(n,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1}),e.jsx("h2",{className:"text-lg font-medium text-text-primary mb-2",children:"Topic not found"})]});const U=t.source==="system",P=!t.managed,B=le[t.category]??"bg-zinc-400/15 text-zinc-400",d=t.example_payload?JSON.stringify(t.example_payload,null,2):(T=t.payload_schema)!=null&&T.properties?JSON.stringify(Object.fromEntries(Object.keys(t.payload_schema.properties).map(s=>[s,""])),null,2):"{}";!u&&d!=="{}"&&N(d);const I=()=>{k(t.description??""),S((t.tags??[]).join(", ")),_(t.payload_schema?JSON.stringify(t.payload_schema,null,2):""),o(""),h(!0)},z=()=>h(!1),A=()=>{const s=w.split(",").map(V=>V.trim()).filter(Boolean);let g;if(j.trim())try{g=JSON.parse(j),o("")}catch{o("Invalid JSON");return}f.mutate({topic:t.topic,description:v,tags:s,...g!==void 0?{payload_schema:g}:{}},{onSuccess:()=>{h(!1),m()}})},F=()=>{confirm(`Delete topic "${t.topic}"?
|
|
2
|
-
|
|
3
|
-
This removes it from the catalog. Active subscriptions are not affected.`)&&M.mutate(t.topic,{onSuccess:()=>l("/topics")})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-1",children:[e.jsx(n,{className:"w-5 h-5 text-accent",strokeWidth:1.5}),e.jsx("h1",{className:"text-lg font-mono font-medium text-text-primary",children:t.topic}),e.jsx("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsx(Z,{className:"w-4 h-4",strokeWidth:1.5})})]}),!a&&t.description?e.jsx("p",{className:"text-sm text-text-secondary leading-relaxed",children:t.description}):a?null:e.jsx("p",{className:"text-sm text-text-quaternary italic",children:"No description"})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[!a&&P&&e.jsxs("button",{onClick:I,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ee,{className:"w-3 h-3"})," Edit"]}),!a&&!U&&P&&e.jsxs("button",{onClick:F,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors",children:[e.jsx(te,{className:"w-3 h-3"})," Delete"]}),a&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:A,disabled:f.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(se,{className:"w-3 h-3"})," Save"]}),e.jsxs("button",{onClick:z,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsx(ae,{className:"w-3 h-3"})," Cancel"]})]})]})]}),e.jsxs("div",{className:"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Category"}),e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${B}`,children:t.category})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Source"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:t.source})]}),((O=t.tags)==null?void 0:O.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(ce,{className:"w-2.5 h-2.5 text-text-quaternary",strokeWidth:1.5}),t.tags.map(s=>e.jsx("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken",children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Created"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(b,{date:t.created_at})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Updated"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(b,{date:t.updated_at})})]}),t.last_seen_at&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Last Seen"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(b,{date:t.last_seen_at})})]}),e.jsx("div",{className:"ml-auto self-center",children:e.jsx(Y,{onRefresh:()=>m(),isFetching:$,apiPath:`/topics/by-name/${encodeURIComponent(t.topic)}`})})]}),!a&&e.jsxs("div",{className:"flex gap-5",children:[e.jsx("div",{className:"flex-1 min-w-0",children:t.payload_schema||t.example_payload?e.jsxs("div",{className:`grid gap-5 ${t.payload_schema&&t.example_payload?"grid-cols-2":"grid-cols-1"}`,children:[t.payload_schema&&e.jsxs("div",{className:"min-w-0",children:[e.jsx(y,{icon:n,color:"text-accent",children:"Payload Schema"}),e.jsx(W,{data:t.payload_schema})]}),t.example_payload&&e.jsxs("div",{className:"min-w-0",children:[e.jsx(y,{icon:n,color:"text-cyan-400",children:"Example Payload"}),e.jsx(W,{data:t.example_payload})]})]}):e.jsxs("div",{children:[e.jsx(y,{icon:n,color:"text-accent",children:"Payload Schema"}),e.jsx("p",{className:"text-[11px] text-text-quaternary",children:"No schema defined. Click Edit to add one."})]})}),e.jsxs("div",{className:"w-64 shrink-0 space-y-4 animate-page-enter",children:[e.jsxs("div",{className:"bg-surface-sunken/30 rounded-md px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(R,{className:"w-3.5 h-3.5 text-emerald-400",strokeWidth:1.5}),e.jsxs("h2",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:["Subscribers (",((D=t.subscribers)==null?void 0:D.length)??0,")"]})]}),(J=t.subscribers)!=null&&J.length?e.jsx("div",{className:"space-y-0.5",children:t.subscribers.map(s=>e.jsxs("button",{onClick:()=>l(`/agents/${s.agent_id}`),className:"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors",children:[e.jsx(R,{className:"w-2.5 h-2.5 text-emerald-400 shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-[11px] text-text-primary hover:text-accent transition-colors truncate",children:s.agent_name}),e.jsx("span",{className:"text-[9px] font-mono text-text-quaternary ml-auto shrink-0",children:s.reaction_type})]},s.id))}):e.jsxs("p",{className:"text-[11px] text-text-quaternary",children:["No ",L," subscribed."]})]}),e.jsxs("div",{className:"sticky top-16 bg-surface-sunken/40 rounded-md p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(ie,{className:"w-3.5 h-3.5 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Publish"})]}),e.jsx("textarea",{value:u||d,onChange:s=>N(s.target.value),className:"input-json w-full text-[11px]",rows:7,spellCheck:!1,placeholder:'{ "key": "value" }'}),e.jsx("div",{className:"mt-3",children:e.jsx("button",{onClick:()=>{try{const s=JSON.parse(u||d);c.mutate({topic:t.topic,data:s},{onSuccess:()=>m()})}catch{}},disabled:c.isPending,className:"btn-primary text-xs w-full",children:c.isPending?"Publishing…":"Publish"})}),c.isSuccess&&e.jsx("p",{className:"text-[10px] text-status-success mt-2 animate-page-enter",children:"Event published"}),c.isError&&e.jsx("p",{className:"text-[10px] text-status-error mt-2",children:c.error.message})]})]})]}),a&&e.jsxs("div",{className:"space-y-6 max-w-3xl",children:[e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Description"}),e.jsx("textarea",{value:v,onChange:s=>k(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Tags"}),e.jsx("input",{type:"text",value:w,onChange:s=>S(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"}),e.jsx("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Payload Schema"}),e.jsx("textarea",{value:j,onChange:s=>{_(s.target.value),o("")},rows:12,className:"input-json w-full",placeholder:`{
|
|
4
|
-
"type": "object",
|
|
5
|
-
"properties": {
|
|
6
|
-
"orderId": { "type": "string" }
|
|
7
|
-
}
|
|
8
|
-
}`}),C&&e.jsx("p",{className:"text-[10px] text-red-400 mt-1",children:C}),e.jsx("p",{className:"hint",children:"JSON Schema describing the event.data shape."})]})]})]})}export{je as TopicDetailPage};
|
|
9
|
-
//# sourceMappingURL=TopicDetailPage-DW97-YHQ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TopicDetailPage-DW97-YHQ.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen, Send } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic, usePublishTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { useSettings } from '../../api/settings';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const { data: settings } = useSettings();\n const subscriberLabel = settings?.ai?.enabled ? 'agents' : 'automations';\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n const publishMutation = usePublishTopic();\n\n const [editing, setEditing] = useState(false);\n const [publishPayload, setPublishPayload] = useState('');\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const isManaged = topic.managed;\n const editable = !isManaged;\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-zinc-400/15 text-zinc-400';\n\n const defaultPayload = topic.example_payload\n ? JSON.stringify(topic.example_payload, null, 2)\n : topic.payload_schema?.properties\n ? JSON.stringify(Object.fromEntries(Object.keys(topic.payload_schema.properties).map(k => [k, ''])), null, 2)\n : '{}';\n if (!publishPayload && defaultPayload !== '{}') {\n setPublishPayload(defaultPayload);\n }\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div>\n {/* ── Header ───────────────────────────────────────────────── */}\n <div className=\"flex items-start justify-between mb-4\">\n <div>\n <div className=\"flex items-center gap-3 mb-1\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n {!editing && topic.description ? (\n <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n ) : !editing ? (\n <p className=\"text-sm text-text-quaternary italic\">No description</p>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {!editing && editable && (\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n )}\n {!editing && !isSystem && editable && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* ── Details band ─────────────────────────────────────────── */}\n <div className=\"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative\">\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Category</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Source</p>\n <span className=\"text-xs font-mono text-text-secondary\">{topic.source}</span>\n </div>\n {topic.tags?.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags</p>\n <div className=\"flex items-center gap-1.5\">\n <Tag className=\"w-2.5 h-2.5 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">{tag}</span>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Created</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.created_at} /></span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Updated</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.updated_at} /></span>\n </div>\n {topic.last_seen_at && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Last Seen</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.last_seen_at} /></span>\n </div>\n )}\n <div className=\"ml-auto self-center\">\n <ListToolbar onRefresh={() => refetch()} isFetching={isFetching} apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`} />\n </div>\n </div>\n\n {/* ── Three-column layout: Payloads | Activity (pub/sub) ─── */}\n {!editing && (\n <div className=\"flex gap-5\">\n {/* Left — Payloads */}\n <div className=\"flex-1 min-w-0\">\n {(topic.payload_schema || topic.example_payload) ? (\n <div className={`grid gap-5 ${topic.payload_schema && topic.example_payload ? 'grid-cols-2' : 'grid-cols-1'}`}>\n {topic.payload_schema && (\n <div className=\"min-w-0\">\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <JsonViewer data={topic.payload_schema} />\n </div>\n )}\n {topic.example_payload && (\n <div className=\"min-w-0\">\n <SectionHeader icon={Radio} color=\"text-cyan-400\">Example Payload</SectionHeader>\n <JsonViewer data={topic.example_payload} />\n </div>\n )}\n </div>\n ) : (\n <div>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n </div>\n )}\n </div>\n\n {/* Right — Activity: Subscribers + Publish */}\n <div className=\"w-64 shrink-0 space-y-4 animate-page-enter\">\n {/* Subscribers */}\n <div className=\"bg-surface-sunken/30 rounded-md px-4 py-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Bot className=\"w-3.5 h-3.5 text-emerald-400\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Subscribers ({topic.subscribers?.length ?? 0})\n </h2>\n </div>\n {topic.subscribers?.length ? (\n <div className=\"space-y-0.5\">\n {topic.subscribers.map((sub) => (\n <button\n key={sub.id}\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors\"\n >\n <Bot className=\"w-2.5 h-2.5 text-emerald-400 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[11px] text-text-primary hover:text-accent transition-colors truncate\">{sub.agent_name}</span>\n <span className=\"text-[9px] font-mono text-text-quaternary ml-auto shrink-0\">{sub.reaction_type}</span>\n </button>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No {subscriberLabel} subscribed.</p>\n )}\n </div>\n\n {/* Publish */}\n <div className=\"sticky top-16 bg-surface-sunken/40 rounded-md p-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Send className=\"w-3.5 h-3.5 text-accent\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Publish</h2>\n </div>\n <textarea\n value={publishPayload || defaultPayload}\n onChange={(e) => setPublishPayload(e.target.value)}\n className=\"input-json w-full text-[11px]\"\n rows={7}\n spellCheck={false}\n placeholder='{ \"key\": \"value\" }'\n />\n <div className=\"mt-3\">\n <button\n onClick={() => {\n try {\n const data = JSON.parse(publishPayload || defaultPayload);\n publishMutation.mutate({ topic: topic.topic, data }, { onSuccess: () => refetch() });\n } catch { /* invalid JSON */ }\n }}\n disabled={publishMutation.isPending}\n className=\"btn-primary text-xs w-full\"\n >\n {publishMutation.isPending ? 'Publishing…' : 'Publish'}\n </button>\n </div>\n {publishMutation.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2 animate-page-enter\">Event published</p>\n )}\n {publishMutation.isError && (\n <p className=\"text-[10px] text-status-error mt-2\">{publishMutation.error.message}</p>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ── Edit mode ────────────────────────────────────────────── */}\n {editing && (\n <div className=\"space-y-6 max-w-3xl\">\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-red-400 mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape.</p>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxs","jsx","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","settings","useSettings","subscriberLabel","_a","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","publishMutation","usePublishTopic","editing","setEditing","useState","publishPayload","setPublishPayload","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","editable","categoryPillCls","defaultPayload","_b","k","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","Pencil","Trash2","Fragment","Save","X","_c","Tag","tag","DateValue","ListToolbar","JsonViewer","Bot","_d","_e","sub","Send","e","data"],"mappings":"8XASA,MAAMA,GAA0C,CAC9C,KAAY,+BACZ,SAAY,2BACZ,WAAY,iCACZ,SAAY,+BACZ,UAAY,mCACZ,MAAY,qCACZ,IAAY,+BACZ,UAAY,kCACd,EAEA,SAASC,EAAc,CAAE,KAAMC,EAAM,MAAAC,EAAO,SAAAC,GAAmF,CAC7H,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAC,MAACJ,GAAK,UAAW,WAAWC,CAAK,GAAI,YAAa,IAAK,EACvDG,EAAAA,IAAC,KAAA,CAAG,UAAU,iEAAkE,SAAAF,CAAA,CAAS,CAAA,EAC3F,CAEJ,CAEO,SAASG,IAAkB,eAChC,KAAM,CAAE,MAAOC,CAAA,EAAiBC,GAAA,EAC1BC,EAAWF,EAAe,mBAAmBA,CAAY,EAAI,KAC7DG,EAAWC,GAAA,EACX,CAAE,KAAMC,EAAO,UAAAC,EAAW,QAAAC,EAAS,WAAAC,CAAA,EAAeC,EAASP,CAAQ,EACnE,CAAE,KAAMQ,CAAA,EAAaC,EAAA,EACrBC,GAAkBC,EAAAH,GAAA,YAAAA,EAAU,KAAV,MAAAG,EAAc,QAAU,SAAW,cACrDC,EAAiBC,EAAA,EACjBC,EAAiBC,EAAA,EACjBC,EAAkBC,EAAA,EAElB,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAgBC,CAAiB,EAAIF,EAAAA,SAAS,EAAE,EACjD,CAACG,EAAiBC,CAAkB,EAAIJ,EAAAA,SAAS,EAAE,EACnD,CAACK,EAAUC,CAAW,EAAIN,EAAAA,SAAS,EAAE,EACrC,CAACO,EAAYC,CAAa,EAAIR,EAAAA,SAAS,EAAE,EACzC,CAACS,EAAaC,CAAc,EAAIV,EAAAA,SAAS,EAAE,EAEjD,GAAIhB,EACF,OAAOT,EAAAA,KAAC,MAAA,CAAI,UAAU,0BAA0B,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,UAAU,oCAAA,CAAqC,EAAEA,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAA,CAAiC,CAAA,EAAE,EAG1J,GAAI,CAACO,EACH,OACER,EAAAA,KAAC,MAAA,CAAI,UAAU,8DACb,SAAA,CAAAC,EAAAA,IAACmC,EAAA,CAAM,UAAU,sCAAsC,YAAa,EAAG,EACvEnC,EAAAA,IAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,iBAAA,CAAe,CAAA,EAC5E,EAIJ,MAAMoC,EAAW7B,EAAM,SAAW,SAE5B8B,EAAW,CADC9B,EAAM,QAElB+B,EAAkB5C,GAAgBa,EAAM,QAAQ,GAAK,+BAErDgC,EAAiBhC,EAAM,gBACzB,KAAK,UAAUA,EAAM,gBAAiB,KAAM,CAAC,GAC7CiC,EAAAjC,EAAM,iBAAN,MAAAiC,EAAsB,WACpB,KAAK,UAAU,OAAO,YAAY,OAAO,KAAKjC,EAAM,eAAe,UAAU,EAAE,IAAIkC,GAAK,CAACA,EAAG,EAAE,CAAC,CAAC,EAAG,KAAM,CAAC,EAC1G,KACF,CAAChB,GAAkBc,IAAmB,MACxCb,EAAkBa,CAAc,EAGlC,MAAMG,EAAY,IAAM,CACtBd,EAAmBrB,EAAM,aAAe,EAAE,EAC1CuB,GAAavB,EAAM,MAAQ,CAAA,GAAI,KAAK,IAAI,CAAC,EACzCyB,EAAczB,EAAM,eAAiB,KAAK,UAAUA,EAAM,eAAgB,KAAM,CAAC,EAAI,EAAE,EACvF2B,EAAe,EAAE,EACjBX,EAAW,EAAI,CACjB,EAEMoB,EAAa,IAAMpB,EAAW,EAAK,EAEnCqB,EAAW,IAAM,CACrB,MAAMC,EAAOhB,EAAS,MAAM,GAAG,EAAE,IAAKiB,GAAMA,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO,EACpE,IAAIC,EACJ,GAAIhB,EAAW,OACb,GAAI,CACFgB,EAAiB,KAAK,MAAMhB,CAAU,EACtCG,EAAe,EAAE,CACnB,MAAQ,CACNA,EAAe,cAAc,EAC7B,MACF,CAEFlB,EAAe,OACb,CAAE,MAAOT,EAAM,MAAO,YAAaoB,EAAiB,KAAAkB,EAAM,GAAIE,IAAmB,OAAY,CAAE,eAAAA,CAAA,EAAmB,CAAA,CAAC,EACnH,CAAE,UAAW,IAAM,CAAExB,EAAW,EAAK,EAAGd,EAAA,CAAW,CAAA,CAAE,CAEzD,EAEMuC,EAAe,IAAM,CACrB,QAAQ,iBAAiBzC,EAAM,KAAK;AAAA;AAAA,yEAAgF,GACtHW,EAAe,OAAOX,EAAM,MAAO,CAAE,UAAW,IAAMF,EAAS,SAAS,EAAG,CAE/E,EAEA,cACG,MAAA,CAEC,SAAA,CAAAN,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAC,EAAAA,IAACmC,EAAA,CAAM,UAAU,sBAAsB,YAAa,IAAK,EACzDnC,EAAAA,IAAC,KAAA,CAAG,UAAU,kDAAmD,WAAM,MAAM,EAC7EA,MAAC,SAAA,CAAO,QAAS,IAAM,CAAE,OAAO,SAAS,KAAO,iBAAmB,EAAG,UAAU,2DAA2D,MAAM,aAC/I,SAAAA,EAAAA,IAACiD,EAAA,CAAS,UAAU,UAAU,YAAa,GAAA,CAAK,CAAA,CAClD,CAAA,EACF,EACC,CAAC3B,GAAWf,EAAM,YACjBP,EAAAA,IAAC,IAAA,CAAE,UAAU,8CAA+C,SAAAO,EAAM,WAAA,CAAY,EAC3Ee,EAED,KADFtB,EAAAA,IAAC,KAAE,UAAU,sCAAsC,0BAAc,CAC/D,EACN,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACZ,SAAA,CAAA,CAACuB,GAAWe,GACXtC,EAAAA,KAAC,UAAO,QAAS2C,EAAW,UAAU,+HACpC,SAAA,CAAA1C,EAAAA,IAACkD,GAAA,CAAO,UAAU,SAAA,CAAU,EAAE,OAAA,EAChC,EAED,CAAC5B,GAAW,CAACc,GAAYC,UACvB,SAAA,CAAO,QAASW,EAAc,UAAU,oIACvC,SAAA,CAAAhD,EAAAA,IAACmD,GAAA,CAAO,UAAU,SAAA,CAAU,EAAE,SAAA,EAChC,EAED7B,GACCvB,EAAAA,KAAAqD,WAAA,CACE,SAAA,CAAArD,EAAAA,KAAC,UAAO,QAAS6C,EAAU,SAAU5B,EAAe,UAAW,UAAU,+HACvE,SAAA,CAAAhB,EAAAA,IAACqD,GAAA,CAAK,UAAU,SAAA,CAAU,EAAE,OAAA,EAC9B,EACAtD,EAAAA,KAAC,SAAA,CAAO,QAAS4C,EAAY,UAAU,+IACrC,SAAA,CAAA3C,EAAAA,IAACsD,GAAA,CAAE,UAAU,SAAA,CAAU,EAAE,SAAA,CAAA,CAC3B,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,EACF,EAGAvD,EAAAA,KAAC,MAAA,CAAI,UAAU,qGACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,WAAQ,QACjG,OAAA,CAAK,UAAW,wEAAwEsC,CAAe,GAAK,WAAM,QAAA,CAAS,CAAA,EAC9H,SACC,MAAA,CACC,SAAA,CAAAtC,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,SAAM,EAChGA,EAAAA,IAAC,OAAA,CAAK,UAAU,wCAAyC,WAAM,MAAA,CAAO,CAAA,EACxE,IACCuD,EAAAhD,EAAM,OAAN,YAAAgD,EAAY,QAAS,UACnB,MAAA,CACC,SAAA,CAAAvD,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,OAAI,EAC9FD,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAC,EAAAA,IAACwD,GAAA,CAAI,UAAU,mCAAmC,YAAa,IAAK,EACnEjD,EAAM,KAAK,IAAKkD,GACfzD,EAAAA,IAAC,OAAA,CAAe,UAAU,4GAA6G,SAAAyD,CAAA,EAA5HA,CAAgI,CAC5I,CAAA,CAAA,CACH,CAAA,EACF,SAED,MAAA,CACC,SAAA,CAAAzD,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,UAAO,EACjGA,EAAAA,IAAC,QAAK,UAAU,8BAA8B,eAAC0D,EAAA,CAAU,KAAMnD,EAAM,UAAA,CAAY,CAAA,CAAE,CAAA,EACrF,SACC,MAAA,CACC,SAAA,CAAAP,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,UAAO,EACjGA,EAAAA,IAAC,QAAK,UAAU,8BAA8B,eAAC0D,EAAA,CAAU,KAAMnD,EAAM,UAAA,CAAY,CAAA,CAAE,CAAA,EACrF,EACCA,EAAM,cACLR,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,IAAA,CAAE,UAAU,6EAA6E,SAAA,YAAS,EACnGA,EAAAA,IAAC,QAAK,UAAU,8BAA8B,eAAC0D,EAAA,CAAU,KAAMnD,EAAM,YAAA,CAAc,CAAA,CAAE,CAAA,EACvF,QAED,MAAA,CAAI,UAAU,sBACb,SAAAP,EAAAA,IAAC2D,EAAA,CAAY,UAAW,IAAMlD,EAAA,EAAW,WAAAC,EAAwB,QAAS,mBAAmB,mBAAmBH,EAAM,KAAK,CAAC,GAAI,CAAA,CAClI,CAAA,EACF,EAGC,CAACe,GACAvB,EAAAA,KAAC,MAAA,CAAI,UAAU,aAEb,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,iBACX,SAAAO,EAAM,gBAAkBA,EAAM,gBAC9BR,OAAC,MAAA,CAAI,UAAW,cAAcQ,EAAM,gBAAkBA,EAAM,gBAAkB,cAAgB,aAAa,GACxG,SAAA,CAAAA,EAAM,gBACLR,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAC,MAACL,EAAA,CAAc,KAAMwC,EAAO,MAAM,cAAc,SAAA,iBAAc,EAC9DnC,EAAAA,IAAC4D,EAAA,CAAW,KAAMrD,EAAM,cAAA,CAAgB,CAAA,EAC1C,EAEDA,EAAM,iBACLR,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAC,MAACL,EAAA,CAAc,KAAMwC,EAAO,MAAM,gBAAgB,SAAA,kBAAe,EACjEnC,EAAAA,IAAC4D,EAAA,CAAW,KAAMrD,EAAM,eAAA,CAAiB,CAAA,CAAA,CAC3C,CAAA,CAAA,CAEJ,SAEC,MAAA,CACC,SAAA,CAAAP,MAACL,EAAA,CAAc,KAAMwC,EAAO,MAAM,cAAc,SAAA,iBAAc,EAC9DnC,EAAAA,IAAC,IAAA,CAAE,UAAU,mCAAmC,SAAA,2CAAA,CAAyC,CAAA,CAAA,CAC3F,CAAA,CAEJ,EAGAD,EAAAA,KAAC,MAAA,CAAI,UAAU,6CAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAC,EAAAA,IAAC6D,EAAA,CAAI,UAAU,+BAA+B,YAAa,IAAK,EAChE9D,EAAAA,KAAC,KAAA,CAAG,UAAU,yEAAyE,SAAA,CAAA,kBACvE+D,EAAAvD,EAAM,cAAN,YAAAuD,EAAmB,SAAU,EAAE,GAAA,CAAA,CAC/C,CAAA,EACF,GACCC,EAAAxD,EAAM,cAAN,MAAAwD,EAAmB,OAClB/D,EAAAA,IAAC,MAAA,CAAI,UAAU,cACZ,SAAAO,EAAM,YAAY,IAAKyD,GACtBjE,EAAAA,KAAC,SAAA,CAEC,QAAS,IAAMM,EAAS,WAAW2D,EAAI,QAAQ,EAAE,EACjD,UAAU,oGAEV,SAAA,CAAAhE,EAAAA,IAAC6D,EAAA,CAAI,UAAU,wCAAwC,YAAa,IAAK,EACzE7D,EAAAA,IAAC,OAAA,CAAK,UAAU,6EAA8E,WAAI,WAAW,EAC7GA,EAAAA,IAAC,OAAA,CAAK,UAAU,6DAA8D,WAAI,aAAA,CAAc,CAAA,CAAA,EAN3FgE,EAAI,EAAA,CAQZ,CAAA,CACH,EAEAjE,OAAC,IAAA,CAAE,UAAU,mCAAmC,SAAA,CAAA,MAAIe,EAAgB,cAAA,CAAA,CAAY,CAAA,EAEpF,EAGAf,EAAAA,KAAC,MAAA,CAAI,UAAU,oDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAC,EAAAA,IAACiE,GAAA,CAAK,UAAU,0BAA0B,YAAa,IAAK,EAC5DjE,EAAAA,IAAC,KAAA,CAAG,UAAU,yEAAyE,SAAA,SAAA,CAAO,CAAA,EAChG,EACAA,EAAAA,IAAC,WAAA,CACC,MAAOyB,GAAkBc,EACzB,SAAW2B,GAAMxC,EAAkBwC,EAAE,OAAO,KAAK,EACjD,UAAU,gCACV,KAAM,EACN,WAAY,GACZ,YAAY,oBAAA,CAAA,EAEdlE,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,IAAC,SAAA,CACC,QAAS,IAAM,CACb,GAAI,CACF,MAAMmE,EAAO,KAAK,MAAM1C,GAAkBc,CAAc,EACxDnB,EAAgB,OAAO,CAAE,MAAOb,EAAM,MAAO,KAAA4D,CAAA,EAAQ,CAAE,UAAW,IAAM1D,EAAA,CAAQ,CAAG,CACrF,MAAQ,CAAqB,CAC/B,EACA,SAAUW,EAAgB,UAC1B,UAAU,6BAET,SAAAA,EAAgB,UAAY,cAAgB,SAAA,CAAA,EAEjD,EACCA,EAAgB,WACfpB,EAAAA,IAAC,IAAA,CAAE,UAAU,0DAA0D,SAAA,kBAAe,EAEvFoB,EAAgB,SACfpB,MAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAoB,EAAgB,MAAM,OAAA,CAAQ,CAAA,CAAA,CAErF,CAAA,CAAA,CACF,CAAA,EACF,EAIDE,GACCvB,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,iBAAiB,SAAA,cAAW,EAC7CA,EAAAA,IAAC,WAAA,CACC,MAAO2B,EACP,SAAWuC,GAAMtC,EAAmBsC,EAAE,OAAO,KAAK,EAClD,KAAM,EACN,UAAU,oBACV,YAAY,4BAAA,CAAA,CACd,EACF,SACC,MAAA,CACC,SAAA,CAAAlE,EAAAA,IAAC,QAAA,CAAM,UAAU,iBAAiB,SAAA,OAAI,EACtCA,EAAAA,IAAC,QAAA,CACC,KAAK,OACL,MAAO6B,EACP,SAAWqC,GAAMpC,EAAYoC,EAAE,OAAO,KAAK,EAC3C,YAAY,yBACZ,UAAU,iBAAA,CAAA,EAEZlE,EAAAA,IAAC,IAAA,CAAE,UAAU,OAAO,SAAA,qDAAA,CAAmD,CAAA,EACzE,SACC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,QAAA,CAAM,UAAU,iBAAiB,SAAA,iBAAc,EAChDA,EAAAA,IAAC,WAAA,CACC,MAAO+B,EACP,SAAWmC,GAAM,CAAElC,EAAckC,EAAE,OAAO,KAAK,EAAGhC,EAAe,EAAE,CAAG,EACtE,KAAM,GACN,UAAU,oBACV,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,EAEdD,GAAejC,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAiC,SAAAiC,EAAY,EAC1EjC,EAAAA,IAAC,IAAA,CAAE,UAAU,OAAO,SAAA,8CAAA,CAA4C,CAAA,CAAA,CAClE,CAAA,CAAA,CACF,CAAA,EAEJ,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as u,j as s}from"./vendor-query-B2UbickB.js";import{T as h}from"./TimestampCell-BBCf8zsN.js";import{E as D}from"./ElapsedCell-BPYm8RA7.js";import{u as R,e as W,b as z}from"./workflows-COYPOe2I.js";import{j as E}from"./index-BpN31nuC.js";import{b as A}from"./useEventHooks-NzIyvoGY.js";import{u as L}from"./useFilterParams-x-Dg0Vgz.js";import{D as M}from"./DataTable-D9yuBv0w.js";import{W as I}from"./WorkflowPill-54px0YiY.js";import{P as U}from"./PageHeader-CR6TpJG_.js";import{F as O,b as f}from"./FilterBar-Ck4K4rzu.js";import{S as B}from"./StickyPagination-BWhFSr2d.js";import{L as H}from"./ListToolbar-DEef1_-T.js";import{R as J,a as w}from"./RowActions-Dg-Fsm5O.js";import{y as G,J as V}from"./vendor-icons-CrrAvF2g.js";import{c as q}from"./vendor-react-CXumBFUA.js";import"./EmptyState-BcsfPq9T.js";const K={running:"in_progress",completed:"completed",failed:"failed"},Q={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},X={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function Y(d,n,p,a,r){return[{key:"workflow_id",label:"Workflow ID / Type",render:e=>{const o=Q[K[e.status]??e.status]??"bg-status-pending",m=e.status==="running"?" animate-pulse":"";return s.jsxs("div",{className:"flex items-start gap-2 min-w-0",children:[s.jsx("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full mt-1.5 ${o}${m}`,title:e.status}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"font-mono text-xs text-text-primary truncate block",children:e.workflow_id}),s.jsx("div",{className:"mt-0.5",children:s.jsx(I,{type:e.entity,variant:r.get(e.entity)??"durable",size:"xs"})})]})]})}},{key:"created_at",label:"Created",render:e=>s.jsx(h,{date:e.created_at}),className:"w-40",sortable:!0},{key:"updated_at",label:"Updated",render:e=>s.jsx(h,{date:e.updated_at}),className:"w-40",sortable:!0},{key:"duration",label:"Duration",render:e=>s.jsx(D,{startDate:e.created_at,endDate:e.status==="running"?null:e.updated_at,isLive:e.status==="running"}),className:"w-28"},{key:"actions",label:"",render:e=>s.jsxs(J,{children:[s.jsx(w,{icon:G,title:`Filter by ${e.entity}`,onClick:()=>d(e.entity)}),s.jsx("button",{onClick:o=>{o.stopPropagation(),n(e.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${e.status}`,children:s.jsx("svg",{className:`w-[18px] h-[18px] ${X[e.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"currentColor",children:s.jsx("circle",{cx:"12",cy:"12",r:"6"})})}),p&&s.jsx(w,{icon:V,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.entity)}`)})]}),className:"w-24 text-right"}]}function xe({tier:d="all"}){A();const n=q(),{isSuperAdmin:p}=E(),{filters:a,setFilter:r,pagination:e,sort:o,setSort:m}=L({filters:{search:"",entity:"",status:"",tier:d}}),l=a.tier||"all",v=l==="certified"?"true":l==="durable"?"false":void 0,{data:g}=R(),{data:x}=W(),k=u.useMemo(()=>{const t=new Map;for(const y of x??[])t.set(y.workflow_type,y.tier??"durable");return t},[x]),j=Y(t=>r("entity",t),t=>r("status",t),p,n,k),[c,S]=u.useState(a.search);u.useEffect(()=>{if(c===a.search)return;const t=setTimeout(()=>r("search",c),300);return()=>clearTimeout(t)},[c,r,a.search]);const{data:i,isLoading:C,refetch:_,isFetching:$}=z({limit:e.pageSize,offset:e.offset,entity:a.entity||void 0,search:a.search||void 0,status:a.status||void 0,sort_by:o.sort_by||void 0,order:o.sort_by?o.order:void 0,registered:v}),b=(i==null?void 0:i.total)??0,N=(i==null?void 0:i.jobs)??[],T=u.useMemo(()=>[...new Set((g??[]).map(t=>t.workflow_type))].sort(),[g]),P="Workflow Executions",F=l==="certified"?"No certified workflow executions found":l==="durable"?"No durable workflow executions found":"No workflow executions found";return s.jsxs("div",{children:[s.jsx(U,{title:P,docsHash:"#docs:dashboard.md:durable-executions"}),s.jsxs(O,{actions:s.jsx(H,{onRefresh:()=>_(),isFetching:$,apiPath:`/workflow-states/jobs?limit=${e.pageSize}&offset=${e.offset}${a.entity?`&entity=${a.entity}`:""}${a.search?`&search=${a.search}`:""}${a.status?`&status=${a.status}`:""}${o.sort_by?`&sort_by=${o.sort_by}&order=${o.order}`:""}`}),children:[s.jsx("input",{type:"text",placeholder:"Search workflow ID...",value:c,onChange:t=>S(t.target.value),className:"input text-[11px] py-1 px-2 w-56"}),s.jsx(f,{label:"Type",value:a.entity,onChange:t=>r("entity",t),options:T.map(t=>({value:t,label:t}))}),s.jsx(f,{label:"Status",value:a.status,onChange:t=>r("status",t),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]}),s.jsx(f,{label:"Tier",value:a.tier==="all"?"":a.tier,onChange:t=>r("tier",t||"all"),options:[{value:"certified",label:"Certified"},{value:"durable",label:"Durable"}]})]}),s.jsx(M,{columns:j,data:N,keyFn:t=>t.workflow_id,onRowClick:t=>n(`/workflows/executions/${t.workflow_id}`),isLoading:C,emptyMessage:F,sort:o,onSort:m}),s.jsx(B,{page:e.page,totalPages:e.totalPages(b),onPageChange:e.setPage,total:b,pageSize:e.pageSize,onPageSizeChange:e.setPageSize})]})}export{xe as WorkflowsDashboard};
|
|
2
|
-
//# sourceMappingURL=WorkflowsDashboard-eCH4gpAk.js.map
|