@hotmeshio/long-tail 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/settings.js +4 -0
- package/build/lib/db/index.d.ts +1 -7
- package/build/lib/db/schemas/008_capability_reaction.sql +12 -0
- package/build/lib/db/schemas/009_file_topic_category.sql +10 -0
- package/build/lib/events/index.d.ts +9 -0
- package/build/lib/events/index.js +15 -0
- package/build/lib/events/nats.d.ts +15 -1
- package/build/lib/events/nats.js +44 -2
- package/build/lib/events/publish.d.ts +10 -0
- package/build/lib/events/publish.js +28 -0
- package/build/modules/config.d.ts +1 -7
- package/build/services/agent/subscription-sql.d.ts +3 -3
- package/build/services/agent/subscription-sql.js +7 -5
- package/build/services/agent/subscriptions.d.ts +3 -1
- package/build/services/agent/subscriptions.js +6 -0
- package/build/services/agent/trigger-registry.js +18 -0
- package/build/services/topics/system-topics.js +29 -0
- package/build/services/yaml-workflow/deployer.d.ts +1 -1
- package/build/services/yaml-workflow/deployer.js +2 -2
- package/build/services/yaml-workflow/invoke.d.ts +2 -0
- package/build/services/yaml-workflow/invoke.js +5 -1
- package/build/start/adapters.js +11 -9
- package/build/start/config.js +4 -0
- package/build/start/workers.js +12 -3
- package/build/system/index.js +16 -0
- package/build/system/mcp-servers/file-storage.js +18 -0
- package/build/system/workflows/capability-invoke/activities.d.ts +12 -0
- package/build/system/workflows/capability-invoke/activities.js +14 -0
- package/build/system/workflows/capability-invoke/index.d.ts +14 -0
- package/build/system/workflows/capability-invoke/index.js +74 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/events.d.ts +13 -1
- package/build/types/startup.d.ts +7 -0
- package/dashboard/dist/assets/{AdminDashboard-Dr5wTIZT.js → AdminDashboard-DISq0Tz8.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Dr5wTIZT.js.map → AdminDashboard-DISq0Tz8.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js +16 -0
- package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js.map +1 -0
- package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js +4 -0
- package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js.map +1 -0
- package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js +2 -0
- package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js.map +1 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-hOcjAAIj.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-UzjXcO3W.js.map → AvailableEscalationsPage-hOcjAAIj.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-CM-_u73k.js → BotPicker-DuAZgHbJ.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-CM-_u73k.js.map → BotPicker-DuAZgHbJ.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js +2 -0
- package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js.map +1 -0
- package/dashboard/dist/assets/{CollapsibleSection-CnPKa7df.js → CollapsibleSection-DnoUFQVf.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-CnPKa7df.js.map → CollapsibleSection-DnoUFQVf.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-D0SQ39nR.js +2 -0
- package/dashboard/dist/assets/CopyableId-D0SQ39nR.js.map +1 -0
- package/dashboard/dist/assets/{CredentialsPage-CImIzra4.js → CredentialsPage-CqedUU7b.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-CImIzra4.js.map → CredentialsPage-CqedUU7b.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-5HPAmciI.js → CronLabel-CPEjE-mH.js} +2 -2
- package/dashboard/dist/assets/CronLabel-CPEjE-mH.js.map +1 -0
- package/dashboard/dist/assets/CustomDurationPicker-BIQWzbv0.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-5JzEgS7I.js.map → CustomDurationPicker-BIQWzbv0.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-BEW3jBzf.js → DropZone-e5EOL5gC.js} +2 -2
- package/dashboard/dist/assets/{DropZone-BEW3jBzf.js.map → DropZone-e5EOL5gC.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-CzVjr74Y.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-B79BF5Mj.js.map → ElapsedCell-CzVjr74Y.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-QvWvbpx3.js → EscalationsOverview-Bcrb44xJ.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-QvWvbpx3.js.map → EscalationsOverview-Bcrb44xJ.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DAclQwfr.js → EventTable-CGfJU7e1.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DAclQwfr.js.map → EventTable-CGfJU7e1.js.map} +1 -1
- package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js → EventTopicPill-xJJnxvlP.js} +2 -2
- package/dashboard/dist/assets/{EventTopicPill-By-6sXDp.js.map → EventTopicPill-xJJnxvlP.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-DVOi7rR1.js → HomePage-BIzUcGW9.js} +2 -2
- package/dashboard/dist/assets/{HomePage-DVOi7rR1.js.map → HomePage-BIzUcGW9.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Bntl2hex.js → ListToolbar-DNAGFe14.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Bntl2hex.js.map → ListToolbar-DNAGFe14.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-B-xSYPJj.js → McpOverview-BpYk21es.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-B-xSYPJj.js.map → McpOverview-BpYk21es.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-Cq71BzjB.js → McpQueryDetailPage-DlrZiSuL.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-Cq71BzjB.js.map → McpQueryDetailPage-DlrZiSuL.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-Dfz87aZF.js → McpQueryPage-COfPssO7.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-Dfz87aZF.js.map → McpQueryPage-COfPssO7.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js.map +1 -0
- package/dashboard/dist/assets/{McpRunsPage-MUYvUYqz.js → McpRunsPage-BlgcGN3k.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-MUYvUYqz.js.map → McpRunsPage-BlgcGN3k.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-Rih1SZrn.js → OperatorDashboard-BbO6cWzb.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-Rih1SZrn.js.map → OperatorDashboard-BbO6cWzb.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js → PageHeader-B_gV_jKk.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Bo0SpcCK.js.map → PageHeader-B_gV_jKk.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js → PageHeaderWithStats-D0I0nrnx.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-7K5BdhOj.js.map → PageHeaderWithStats-D0I0nrnx.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-s_iV8ICg.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-BMkWCjqD.js.map → ProcessDetailPage-s_iV8ICg.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-vZjUSc7S.js → ProcessesListPage-MnLMnxAa.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-vZjUSc7S.js.map → ProcessesListPage-MnLMnxAa.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BDzPFQUv.js → RolePill-BOBytzrP.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BDzPFQUv.js.map → RolePill-BOBytzrP.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-kjeAsj3_.js → RolesPage-BH7KASM7.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-kjeAsj3_.js.map → RolesPage-BH7KASM7.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-DC4SLtTq.js → RunAsSelector-_QbJKhlo.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-DC4SLtTq.js.map → RunAsSelector-_QbJKhlo.js.map} +1 -1
- package/dashboard/dist/assets/{ServerName-CEOFF7UG.js → ServerName-uqa4eBqm.js} +2 -2
- package/dashboard/dist/assets/{ServerName-CEOFF7UG.js.map → ServerName-uqa4eBqm.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js +2 -0
- package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js.map +1 -0
- package/dashboard/dist/assets/{TagInput-VBY0xIwb.js → TagInput-D3f11sbM.js} +2 -2
- package/dashboard/dist/assets/{TagInput-VBY0xIwb.js.map → TagInput-D3f11sbM.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C0AlG_2t.js → TaskDetailPage-DPV4ySd9.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C0AlG_2t.js.map → TaskDetailPage-DPV4ySd9.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js → TaskQueuePill-Bc45J7X1.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-DZykFijh.js.map → TaskQueuePill-Bc45J7X1.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-69ZWCaCP.js → TasksListPage-BYj3OqUi.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-69ZWCaCP.js.map → TasksListPage-BYj3OqUi.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-W7TdJpV-.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-CttiZG0k.js.map → TimeAgo-W7TdJpV-.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-CYFbEhqc.js → TimestampCell-Bi2nc9Q_.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-CYFbEhqc.js.map → TimestampCell-Bi2nc9Q_.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js → ToolPill-CuoXcmhv.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-RP2Tvlrx.js.map → ToolPill-CuoXcmhv.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js +2 -0
- package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js.map +1 -0
- package/dashboard/dist/assets/{TopicDetailPage-Aq4-6GLl.js → TopicDetailPage-CjaZn4WP.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-Aq4-6GLl.js.map → TopicDetailPage-CjaZn4WP.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-BYFKjRY_.js → TopicsPage-BfsJEC1p.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-BYFKjRY_.js.map → TopicsPage-BfsJEC1p.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-C4_T5-rI.js → UserName-b4baWHM_.js} +2 -2
- package/dashboard/dist/assets/{UserName-C4_T5-rI.js.map → UserName-b4baWHM_.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js +2 -0
- package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js.map +1 -0
- package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-_LMWc-OC.js → WorkflowsDashboard-BzH7jMRu.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-_LMWc-OC.js.map → WorkflowsDashboard-BzH7jMRu.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-DFrfw554.js → WorkflowsOverview-BcUgBvjD.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DFrfw554.js.map → WorkflowsOverview-BcUgBvjD.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CZzGwfol.js → YamlWorkflowsPage-OhpCQJ0l.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CZzGwfol.js.map → YamlWorkflowsPage-OhpCQJ0l.js.map} +1 -1
- package/dashboard/dist/assets/{agents-CsKILVSU.js → agents-Ce3HmPz4.js} +2 -2
- package/dashboard/dist/assets/{agents-CsKILVSU.js.map → agents-Ce3HmPz4.js.map} +1 -1
- package/dashboard/dist/assets/{bots-BzEs6Q9L.js → bots-B0BomNnf.js} +2 -2
- package/dashboard/dist/assets/{bots-BzEs6Q9L.js.map → bots-B0BomNnf.js.map} +1 -1
- package/dashboard/dist/assets/capabilities-t-w5N9K9.js +2 -0
- package/dashboard/dist/assets/capabilities-t-w5N9K9.js.map +1 -0
- package/dashboard/dist/assets/{controlplane-COYEIIAz.js → controlplane-BrtAZnJM.js} +2 -2
- package/dashboard/dist/assets/{controlplane-COYEIIAz.js.map → controlplane-BrtAZnJM.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-BZjS2202.js → escalation-DilnDxw2.js} +2 -2
- package/dashboard/dist/assets/{escalation-BZjS2202.js.map → escalation-DilnDxw2.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-DtRVmPSB.js → escalation-columns-C0slywOY.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-DtRVmPSB.js.map → escalation-columns-C0slywOY.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-BngVEys5.js → helpers-BMvPqQr8.js} +2 -2
- package/dashboard/dist/assets/{helpers-BngVEys5.js.map → helpers-BMvPqQr8.js.map} +1 -1
- package/dashboard/dist/assets/{index-DxMNiFPS.js → index-30-pN97P.js} +2 -2
- package/dashboard/dist/assets/{index-DxMNiFPS.js.map → index-30-pN97P.js.map} +1 -1
- package/dashboard/dist/assets/index-BPxglOYm.css +1 -0
- package/dashboard/dist/assets/{index-R61-yG56.js → index-Bl9wzQ8Q.js} +2 -2
- package/dashboard/dist/assets/{index-R61-yG56.js.map → index-Bl9wzQ8Q.js.map} +1 -1
- package/dashboard/dist/assets/{index-ABsZZf_U.js → index-BxOuF0hm.js} +2 -2
- package/dashboard/dist/assets/{index-ABsZZf_U.js.map → index-BxOuF0hm.js.map} +1 -1
- package/dashboard/dist/assets/{index-BCsShN2l.js → index-Ck2QdJXT.js} +2 -2
- package/dashboard/dist/assets/{index-BCsShN2l.js.map → index-Ck2QdJXT.js.map} +1 -1
- package/dashboard/dist/assets/{index-xgl431mG.js → index-DNmlrCAp.js} +2 -2
- package/dashboard/dist/assets/{index-xgl431mG.js.map → index-DNmlrCAp.js.map} +1 -1
- package/dashboard/dist/assets/index-DPW_i3fH.js +6 -0
- package/dashboard/dist/assets/index-DPW_i3fH.js.map +1 -0
- package/dashboard/dist/assets/{index-DcpCR9c_.js → index-DZX-E_3q.js} +24 -24
- package/dashboard/dist/assets/index-DZX-E_3q.js.map +1 -0
- package/dashboard/dist/assets/{index-DykjJxzr.js → index-D_wqdvG_.js} +2 -2
- package/dashboard/dist/assets/{index-DykjJxzr.js.map → index-D_wqdvG_.js.map} +1 -1
- package/dashboard/dist/assets/{index-Bq5MSkCL.js → index-DnsVYMMg.js} +2 -2
- package/dashboard/dist/assets/{index-Bq5MSkCL.js.map → index-DnsVYMMg.js.map} +1 -1
- package/dashboard/dist/assets/{index-BwivT39P.js → index-H5TlloTk.js} +2 -2
- package/dashboard/dist/assets/{index-BwivT39P.js.map → index-H5TlloTk.js.map} +1 -1
- package/dashboard/dist/assets/{index-ByxH4qQ-.js → index-f-0Duls3.js} +2 -2
- package/dashboard/dist/assets/{index-ByxH4qQ-.js.map → index-f-0Duls3.js.map} +1 -1
- package/dashboard/dist/assets/{index-COgyD_H2.js → index-pIMl0mYp.js} +2 -2
- package/dashboard/dist/assets/{index-COgyD_H2.js.map → index-pIMl0mYp.js.map} +1 -1
- package/dashboard/dist/assets/{index-Byp8BDPs.js → index-qNuxC8kX.js} +2 -2
- package/dashboard/dist/assets/{index-Byp8BDPs.js.map → index-qNuxC8kX.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-DhCbDgy4.js → knowledge-D01NdF5h.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DhCbDgy4.js.map → knowledge-D01NdF5h.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-xh7T0I-f.js → mcp-CjXjDZI0.js} +2 -2
- package/dashboard/dist/assets/{mcp-xh7T0I-f.js.map → mcp-CjXjDZI0.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-il3CfU3U.js → mcp-query-LlKQcWLJ.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-il3CfU3U.js.map → mcp-query-LlKQcWLJ.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js → mcp-runs-C0C54hU6.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-4fyRpegc.js.map → mcp-runs-C0C54hU6.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BBTvHnRF.js → namespaces-6qWDXXJV.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BBTvHnRF.js.map → namespaces-6qWDXXJV.js.map} +1 -1
- package/dashboard/dist/assets/{roles-D7bx5FAM.js → roles-Dtj0uabn.js} +2 -2
- package/dashboard/dist/assets/{roles-D7bx5FAM.js.map → roles-Dtj0uabn.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BgxRbhVM.js → tasks-BevFBjZq.js} +2 -2
- package/dashboard/dist/assets/{tasks-BgxRbhVM.js.map → tasks-BevFBjZq.js.map} +1 -1
- package/dashboard/dist/assets/{topics-CTtCboHe.js → topics-BMG5tx2g.js} +2 -2
- package/dashboard/dist/assets/{topics-CTtCboHe.js.map → topics-BMG5tx2g.js.map} +1 -1
- package/dashboard/dist/assets/useEventHooks-CPyvFlVR.js +2 -0
- package/dashboard/dist/assets/useEventHooks-CPyvFlVR.js.map +1 -0
- package/dashboard/dist/assets/{useYamlActivityEvents-CSMX9He5.js → useYamlActivityEvents-Bll8NPNQ.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CSMX9He5.js.map → useYamlActivityEvents-Bll8NPNQ.js.map} +1 -1
- package/dashboard/dist/assets/{users-CyF-5WLI.js → users-XZ349b0r.js} +2 -2
- package/dashboard/dist/assets/{users-CyF-5WLI.js.map → users-XZ349b0r.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js → vendor-icons-B_Yla7iD.js} +2 -2
- package/dashboard/dist/assets/{vendor-icons-BNtvBbnj.js.map → vendor-icons-B_Yla7iD.js.map} +1 -1
- package/dashboard/dist/assets/{workflows-Bf4_w24H.js → workflows-Do-Eiv8f.js} +2 -2
- package/dashboard/dist/assets/{workflows-Bf4_w24H.js.map → workflows-Do-Eiv8f.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js → yaml-workflows-DolGRQ5f.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Cp1N0NMK.js.map → yaml-workflows-DolGRQ5f.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/agents.md +9 -9
- package/docs/api/http/agents.md +12 -10
- package/docs/api/http/settings.md +4 -0
- package/docs/api/sdk/agents.md +4 -2
- package/docs/api/sdk/settings.md +2 -1
- package/docs/dashboard.md +1 -1
- package/package.json +2 -2
- package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js +0 -13
- package/dashboard/dist/assets/AgentConfigPage-D52KyJY-.js.map +0 -1
- package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js +0 -4
- package/dashboard/dist/assets/AgentDetailPage-Cbo_qrYF.js.map +0 -1
- package/dashboard/dist/assets/AgentsPage-CvuF8--H.js +0 -2
- package/dashboard/dist/assets/AgentsPage-CvuF8--H.js.map +0 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-UzjXcO3W.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-D1QEHMKw.js.map +0 -1
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
- package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js.map +0 -1
- package/dashboard/dist/assets/CronLabel-5HPAmciI.js.map +0 -1
- package/dashboard/dist/assets/CustomDurationPicker-5JzEgS7I.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-B79BF5Mj.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CXXRgMmJ.js.map +0 -1
- package/dashboard/dist/assets/ProcessDetailPage-BMkWCjqD.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-MUUXgT3o.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-MUUXgT3o.js.map +0 -1
- package/dashboard/dist/assets/TimeAgo-CttiZG0k.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-CY_PLZSe.js.map +0 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DUSTBasv.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-pPuGH8v9.js.map +0 -1
- package/dashboard/dist/assets/index-DXEYynKO.css +0 -1
- package/dashboard/dist/assets/index-DcpCR9c_.js.map +0 -1
- package/dashboard/dist/assets/index-DuPY59Yu.js +0 -5
- package/dashboard/dist/assets/index-DuPY59Yu.js.map +0 -1
- package/dashboard/dist/assets/settings-nt6qyR1S.js +0 -2
- package/dashboard/dist/assets/settings-nt6qyR1S.js.map +0 -1
- package/dashboard/dist/assets/useEventHooks-CkJOmbF-.js +0 -2
- package/dashboard/dist/assets/useEventHooks-CkJOmbF-.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}body{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{--tw-border-opacity: 1;border-color:rgb(224 218 240 / var(--tw-border-opacity, 1))}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.btn-primary{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(108 71 255 / var(--tw-bg-opacity, 1));padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(88 53 219 / var(--tw-bg-opacity, 1))}.btn-secondary{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(224 218 240 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(247 244 255 / var(--tw-bg-opacity, 1))}.btn-ghost{border-radius:.375rem;padding:.625rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(91 81 115 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-ghost:hover{--tw-bg-opacity: 1;background-color:rgb(247 244 255 / var(--tw-bg-opacity, 1))}.row-hover{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s}.row-hover:hover{--tw-bg-opacity: 1;background-color:rgb(247 244 255 / var(--tw-bg-opacity, 1))}.\!input{width:100%;border-bottom-width:1px;border-color:#e0daf099;background-color:transparent;padding:.375rem .25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\!input::-moz-placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.\!input::placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.\!input:focus{border-color:#6c47ff80;outline:2px solid transparent;outline-offset:2px}.input{width:100%;border-bottom-width:1px;border-color:#e0daf099;background-color:transparent;padding:.375rem .25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input::-moz-placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.input::placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.input:focus{border-color:#6c47ff80;outline:2px solid transparent;outline-offset:2px}.input-json{width:100%;resize:vertical;border-radius:.375rem;border-width:1px;border-color:#e0daf066;background-color:transparent;padding:.5rem .75rem;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:11px;--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);line-height:1.625;--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-json::-moz-placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.input-json::placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.input-json:focus{border-color:#6c47ff80;outline:2px solid transparent;outline-offset:2px}.select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-bottom-width:1px;border-color:#e0daf099;background-color:transparent;padding:.375rem .25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.select:focus{border-color:#6c47ff80;outline:2px solid transparent;outline-offset:2px}.label{margin-bottom:.125rem;display:block;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.hint{margin-top:.25rem;font-size:9px;line-height:1.375;color:#918aabb3}.section-header{margin-bottom:.75rem;display:block;border-bottom-width:1px;border-color:#e0daf04d;padding-bottom:.375rem;font-size:.75rem;line-height:1rem;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:#6c47ffcc}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.inset-y-0{top:0;bottom:0}.-left-\[3px\]{left:-3px}.-right-1{right:-.25rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-3{bottom:.75rem}.left-0{left:0}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-56{left:14rem}.left-\[7px\]{left:7px}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-6{top:1.5rem}.top-\[2\.75rem\]{top:2.75rem}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[45\]{z-index:45}.z-\[5\]{z-index:5}.z-\[9999\]{z-index:9999}.col-span-2{grid-column:span 2 / span 2}.float-right{float:right}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.-ml-10{margin-left:-2.5rem}.-ml-8{margin-left:-2rem}.-ml-\[12\.5rem\]{margin-left:-12.5rem}.-ml-\[9\.75rem\]{margin-left:-9.75rem}.-mt-1{margin-top:-.25rem}.-mt-2{margin-top:-.5rem}.-mt-6{margin-top:-1.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-7{margin-left:1.75rem}.ml-8{margin-left:2rem}.ml-9{margin-left:2.25rem}.ml-\[19px\]{margin-left:19px}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-16{margin-right:4rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-3\.5{margin-top:.875rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[3em\]{margin-top:3em}.mt-px{margin-top:1px}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-8{height:2rem}.h-\[12\.5rem\]{height:12.5rem}.h-\[14px\]{height:14px}.h-\[15px\]{height:15px}.h-\[16rem\]{height:16rem}.h-\[18px\]{height:18px}.h-\[7px\]{height:7px}.h-\[80px\]{height:80px}.h-\[9px\]{height:9px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[200px\]{max-height:200px}.max-h-\[280px\]{max-height:280px}.max-h-\[300px\]{max-height:300px}.max-h-\[30vh\]{max-height:30vh}.max-h-\[400px\]{max-height:400px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[calc\(100vh-220px\)\]{max-height:calc(100vh - 220px)}.max-h-\[calc\(100vh-8rem\)\]{max-height:calc(100vh - 8rem)}.max-h-none{max-height:none}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[160px\]{min-height:160px}.min-h-\[200px\]{min-height:200px}.min-h-\[28px\]{min-height:28px}.min-h-\[300px\]{min-height:300px}.min-h-\[34px\]{min-height:34px}.min-h-\[360px\]{min-height:360px}.min-h-\[48px\]{min-height:48px}.min-h-\[60px\]{min-height:60px}.min-h-\[80px\]{min-height:80px}.min-h-\[calc\(100vh-12rem\)\]{min-height:calc(100vh - 12rem)}.min-h-\[calc\(100vh-80px\)\]{min-height:calc(100vh - 80px)}.min-h-\[calc\(100vh-9rem\)\]{min-height:calc(100vh - 9rem)}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[12\.5rem\]{width:12.5rem}.w-\[120px\]{width:120px}.w-\[14px\]{width:14px}.w-\[15px\]{width:15px}.w-\[16rem\]{width:16rem}.w-\[18px\]{width:18px}.w-\[200px\]{width:200px}.w-\[22rem\]{width:22rem}.w-\[28rem\]{width:28rem}.w-\[30\%\]{width:30%}.w-\[36rem\]{width:36rem}.w-\[380px\]{width:380px}.w-\[400px\]{width:400px}.w-\[40vw\]{width:40vw}.w-\[48rem\]{width:48rem}.w-\[7px\]{width:7px}.w-\[9px\]{width:9px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.min-w-\[20px\]{min-width:20px}.min-w-\[800px\]{min-width:800px}.min-w-\[80px\]{min-width:80px}.max-w-0{max-width:0px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[240px\]{max-width:240px}.max-w-\[60\%\]{max-width:60%}.max-w-\[65\%\]{max-width:65%}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-dashboard{max-width:1440px}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-center{transform-origin:center}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[60vh\]{--tw-translate-y: -60vh;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[120vw\]{--tw-translate-x: 120vw;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-\[120deg\]{--tw-rotate: -120deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[3\]{--tw-scale-x: 3;--tw-scale-y: 3;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[field-error-in_0\.3s_ease-out\]{animation:field-error-in .3s ease-out}.animate-\[field-shake_0\.4s_ease-in-out\]{animation:field-shake .4s ease-in-out}.animate-\[triage-glow_6s_ease-in-out_infinite\]{animation:triage-glow 6s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-\[1fr_240px\]{grid-template-columns:1fr 240px}.grid-cols-\[300px_1fr\]{grid-template-columns:300px 1fr}.grid-cols-\[3fr_1fr\]{grid-template-columns:3fr 1fr}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-14{-moz-column-gap:3.5rem;column-gap:3.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-10{row-gap:2.5rem}.gap-y-14{row-gap:3.5rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-6{row-gap:1.5rem}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-surface-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(224 218 240 / var(--tw-divide-opacity, 1))}.divide-surface-border\/20>:not([hidden])~:not([hidden]){border-color:#e0daf033}.divide-surface-border\/30>:not([hidden])~:not([hidden]){border-color:#e0daf04d}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-accent{--tw-border-opacity: 1;border-color:rgb(108 71 255 / var(--tw-border-opacity, 1))}.border-accent-faint{--tw-border-opacity: 1;border-color:rgb(232 226 248 / var(--tw-border-opacity, 1))}.border-accent-muted{--tw-border-opacity: 1;border-color:rgb(200 190 240 / var(--tw-border-opacity, 1))}.border-accent-muted\/40{border-color:#c8bef066}.border-accent\/10{border-color:#6c47ff1a}.border-accent\/20{border-color:#6c47ff33}.border-accent\/30{border-color:#6c47ff4d}.border-accent\/40{border-color:#6c47ff66}.border-amber-400\/40{border-color:#fbbf2466}.border-amber-600{--tw-border-opacity: 1;border-color:rgb(217 119 6 / var(--tw-border-opacity, 1))}.border-blue-400\/40{border-color:#60a5fa66}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-emerald-400\/30{border-color:#34d3994d}.border-emerald-400\/40{border-color:#34d39966}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-purple-500\/20{border-color:#a855f733}.border-status-draft{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-status-error{--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.border-status-error\/20{border-color:#dc262633}.border-status-error\/30{border-color:#dc26264d}.border-status-error\/50{border-color:#dc262680}.border-status-pending\/30{border-color:#f59e0b4d}.border-status-success{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-status-success\/20{border-color:#16a34a33}.border-status-success\/30{border-color:#16a34a4d}.border-status-warning{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-status-warning\/20{border-color:#f59e0b33}.border-status-warning\/30{border-color:#f59e0b4d}.border-surface-border{--tw-border-opacity: 1;border-color:rgb(224 218 240 / var(--tw-border-opacity, 1))}.border-surface-border\/15{border-color:#e0daf026}.border-surface-border\/30{border-color:#e0daf04d}.border-surface-border\/40{border-color:#e0daf066}.border-surface-border\/50{border-color:#e0daf080}.border-surface-border\/60{border-color:#e0daf099}.border-text-tertiary{--tw-border-opacity: 1;border-color:rgb(145 138 171 / var(--tw-border-opacity, 1))}.border-violet-400\/40{border-color:#a78bfa66}.border-violet-500{--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity, 1))}.border-white\/70{border-color:#ffffffb3}.border-l-accent{--tw-border-opacity: 1;border-left-color:rgb(108 71 255 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-r-surface-border{--tw-border-opacity: 1;border-right-color:rgb(224 218 240 / var(--tw-border-opacity, 1))}.border-r-transparent{border-right-color:transparent}.\!bg-status-error{--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))!important}.bg-\[\#6C47FF\]{--tw-bg-opacity: 1;background-color:rgb(108 71 255 / var(--tw-bg-opacity, 1))}.bg-\[a-z\]{background-color:a-z}.bg-accent{--tw-bg-opacity: 1;background-color:rgb(108 71 255 / var(--tw-bg-opacity, 1))}.bg-accent-faint{--tw-bg-opacity: 1;background-color:rgb(232 226 248 / var(--tw-bg-opacity, 1))}.bg-accent-faint\/50{background-color:#e8e2f880}.bg-accent-muted{--tw-bg-opacity: 1;background-color:rgb(200 190 240 / var(--tw-bg-opacity, 1))}.bg-accent-muted\/20{background-color:#c8bef033}.bg-accent\/10{background-color:#6c47ff1a}.bg-accent\/15{background-color:#6c47ff26}.bg-accent\/20{background-color:#6c47ff33}.bg-accent\/5{background-color:#6c47ff0d}.bg-accent\/60{background-color:#6c47ff99}.bg-accent\/\[0\.06\]{background-color:#6c47ff0f}.bg-accent\/\[0\.08\]{background-color:#6c47ff14}.bg-amber-300\/\[0\.08\]{background-color:#fcd34d14}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-400\/15{background-color:#fbbf2426}.bg-amber-400\/\[0\.08\]{background-color:#fbbf2414}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-black\/20{background-color:#0003}.bg-black\/30{background-color:#0000004d}.bg-blue-400\/15{background-color:#60a5fa26}.bg-blue-400\/\[0\.08\]{background-color:#60a5fa14}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/60{background-color:#3b82f699}.bg-blue-500\/70{background-color:#3b82f6b3}.bg-cyan-400\/15{background-color:#22d3ee26}.bg-cyan-400\/\[0\.08\]{background-color:#22d3ee14}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-400\/15{background-color:#34d39926}.bg-emerald-400\/\[0\.08\]{background-color:#34d39914}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-fuchsia-400\/\[0\.08\]{background-color:#e879f914}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-green-400\/\[0\.08\]{background-color:#4ade8014}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-indigo-400\/\[0\.08\]{background-color:#818cf814}.bg-lime-400\/\[0\.08\]{background-color:#a3e63514}.bg-orange-400\/15{background-color:#fb923c26}.bg-orange-400\/\[0\.08\]{background-color:#fb923c14}.bg-pink-300\/\[0\.08\]{background-color:#f9a8d414}.bg-pink-400\/\[0\.08\]{background-color:#f472b614}.bg-purple-400\/\[0\.08\]{background-color:#c084fc14}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-400\/\[0\.08\]{background-color:#f8717114}.bg-rose-300\/\[0\.08\]{background-color:#fda4af14}.bg-rose-400\/15{background-color:#fb718526}.bg-rose-400\/\[0\.08\]{background-color:#fb718514}.bg-sky-300\/\[0\.08\]{background-color:#7dd3fc14}.bg-sky-400\/\[0\.08\]{background-color:#38bdf814}.bg-status-active{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-status-draft{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-status-draft\/30{background-color:#f973164d}.bg-status-error{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-status-error\/10{background-color:#dc26261a}.bg-status-error\/5{background-color:#dc26260d}.bg-status-error\/70{background-color:#dc2626b3}.bg-status-error\/\[0\.04\]{background-color:#dc26260a}.bg-status-pending{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-status-pending\/10{background-color:#f59e0b1a}.bg-status-success{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-status-success\/10{background-color:#16a34a1a}.bg-status-success\/20{background-color:#16a34a33}.bg-status-success\/30{background-color:#16a34a4d}.bg-status-success\/5{background-color:#16a34a0d}.bg-status-warning{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-status-warning\/10{background-color:#f59e0b1a}.bg-status-warning\/15{background-color:#f59e0b26}.bg-status-warning\/5{background-color:#f59e0b0d}.bg-stone-400\/\[0\.08\]{background-color:#a8a29e14}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-surface-border{--tw-bg-opacity: 1;background-color:rgb(224 218 240 / var(--tw-bg-opacity, 1))}.bg-surface-border\/60{background-color:#e0daf099}.bg-surface-hover{--tw-bg-opacity: 1;background-color:rgb(247 244 255 / var(--tw-bg-opacity, 1))}.bg-surface-hover\/30{background-color:#f7f4ff4d}.bg-surface-raised{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-surface-raised\/50{background-color:#ffffff80}.bg-surface-raised\/\[0\.03\]{background-color:#ffffff08}.bg-surface-sunken{--tw-bg-opacity: 1;background-color:rgb(245 245 247 / var(--tw-bg-opacity, 1))}.bg-surface-sunken\/20{background-color:#f5f5f733}.bg-surface-sunken\/30{background-color:#f5f5f74d}.bg-surface-sunken\/40{background-color:#f5f5f766}.bg-surface-sunken\/50{background-color:#f5f5f780}.bg-surface-sunken\/80{background-color:#f5f5f7cc}.bg-surface-sunken\/90{background-color:#f5f5f7e6}.bg-surface\/90{background-color:#ffffffe6}.bg-surface\/95{background-color:#fffffff2}.bg-teal-300\/\[0\.08\]{background-color:#5eead414}.bg-teal-400\/\[0\.08\]{background-color:#2dd4bf14}.bg-text-primary\/30{background-color:#1e15354d}.bg-text-secondary{--tw-bg-opacity: 1;background-color:rgb(91 81 115 / var(--tw-bg-opacity, 1))}.bg-text-tertiary{--tw-bg-opacity: 1;background-color:rgb(145 138 171 / var(--tw-bg-opacity, 1))}.bg-text-tertiary\/30{background-color:#918aab4d}.bg-transparent{background-color:transparent}.bg-violet-300\/\[0\.08\]{background-color:#c4b5fd14}.bg-violet-400\/15{background-color:#a78bfa26}.bg-violet-400\/\[0\.08\]{background-color:#a78bfa14}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-400\/\[0\.08\]{background-color:#facc1514}.bg-zinc-400\/15{background-color:#a1a1aa26}.bg-zinc-500{--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity, 1))}.bg-zinc-600{--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.from-accent\/\[0\.04\]{--tw-gradient-from: rgb(108 71 255 / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(108 71 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-status-active{fill:#2563eb}.fill-status-error{fill:#dc2626}.fill-status-success{fill:#16a34a}.fill-status-warning{fill:#f59e0b}.fill-text-tertiary{fill:#918aab}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-top{-o-object-position:top;object-position:top}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.\!px-2{padding-left:.5rem!important;padding-right:.5rem!important}.\!px-2\.5{padding-left:.625rem!important;padding-right:.625rem!important}.\!py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.\!py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-60{padding-bottom:15rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-11{padding-left:2.75rem}.pl-14{padding-left:3.5rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-52{padding-left:13rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-28{padding-right:7rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[36px\]{padding-top:36px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:JetBrains Mono,Fira Code,ui-monospace,monospace}.font-sans{font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif}.\!text-\[9px\]{font-size:9px!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[1\.5rem\]{font-size:1.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[36px\]{font-size:36px}.text-\[44px\]{font-size:44px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[a-z\]{color:a-z}.text-accent{--tw-text-opacity: 1;color:rgb(108 71 255 / var(--tw-text-opacity, 1))}.text-accent-muted{--tw-text-opacity: 1;color:rgb(200 190 240 / var(--tw-text-opacity, 1))}.text-accent\/40{color:#6c47ff66}.text-accent\/50{color:#6c47ff80}.text-accent\/60{color:#6c47ff99}.text-accent\/70{color:#6c47ffb3}.text-accent\/75{color:#6c47ffbf}.text-accent\/80{color:#6c47ffcc}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-500\/70{color:#3b82f6b3}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-fuchsia-400{--tw-text-opacity: 1;color:rgb(232 121 249 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-lime-400{--tw-text-opacity: 1;color:rgb(163 230 53 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.text-pink-400{--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-400\/60{color:#f8717199}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-status-active{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-status-error{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-status-error\/50{color:#dc262680}.text-status-error\/70{color:#dc2626b3}.text-status-error\/80{color:#dc2626cc}.text-status-pending{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-status-success{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-status-success\/70{color:#16a34ab3}.text-status-success\/80{color:#16a34acc}.text-status-warning{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-stone-400{--tw-text-opacity: 1;color:rgb(168 162 158 / var(--tw-text-opacity, 1))}.text-surface-border{--tw-text-opacity: 1;color:rgb(224 218 240 / var(--tw-text-opacity, 1))}.text-teal-300{--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-text-inverse{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-text-primary{--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1))}.text-text-secondary{--tw-text-opacity: 1;color:rgb(91 81 115 / var(--tw-text-opacity, 1))}.text-text-tertiary{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.text-text-tertiary\/30{color:#918aab4d}.text-text-tertiary\/40{color:#918aab66}.text-text-tertiary\/50{color:#918aab80}.text-text-tertiary\/60{color:#918aab99}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-zinc-400{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.decoration-text-tertiary\/30{text-decoration-color:#918aab4d}.accent-accent{accent-color:#6C47FF}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/5{--tw-shadow-color: rgb(0 0 0 / .05);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-accent{--tw-ring-opacity: 1;--tw-ring-color: rgb(108 71 255 / var(--tw-ring-opacity, 1))}.ring-accent\/40{--tw-ring-color: rgb(108 71 255 / .4)}.ring-offset-1{--tw-ring-offset-width: 1px}.ring-offset-surface{--tw-ring-offset-color: #FFFFFF}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.brightness-150{--tw-brightness: brightness(1.5);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\[2px\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-\[1500ms\]{transition-duration:1.5s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes triage-glow{0%{box-shadow:0 0 3px #6c47ff26}8.3%{box-shadow:0 0 10px 2px #6c47ff66}16.7%,to{box-shadow:0 0 3px #6c47ff26}}.animate-page-enter{animation:fadeIn .15s ease-out both}@keyframes pageFade{0%{opacity:0}to{opacity:1}}.animate-page-in{animation:pageFade .2s ease-out both}@keyframes field-shake{0%,to{transform:translate(0)}15%{transform:translate(-4px)}30%{transform:translate(3px)}45%{transform:translate(-2px)}60%{transform:translate(1px)}75%{transform:translate(0)}}@keyframes field-error-in{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.bg-stripes{background-image:repeating-linear-gradient(-45deg,transparent,transparent 3px,rgba(255,255,255,.15) 3px,rgba(255,255,255,.15) 6px);background-color:var(--color-status-warning, #f59e0b)}.placeholder\:italic::-moz-placeholder{font-style:italic}.placeholder\:italic::placeholder{font-style:italic}.placeholder\:text-text-tertiary::-moz-placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.placeholder\:text-text-tertiary::placeholder{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.placeholder\:text-text-tertiary\/40::-moz-placeholder{color:#918aab66}.placeholder\:text-text-tertiary\/40::placeholder{color:#918aab66}.placeholder\:text-text-tertiary\/50::-moz-placeholder{color:#918aab80}.placeholder\:text-text-tertiary\/50::placeholder{color:#918aab80}.first\:mt-0:first-child{margin-top:0}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-accent\/40:hover{border-color:#6c47ff66}.hover\:border-accent\/50:hover{border-color:#6c47ff80}.hover\:border-text-tertiary:hover{--tw-border-opacity: 1;border-color:rgb(145 138 171 / var(--tw-border-opacity, 1))}.hover\:\!bg-status-error\/90:hover{background-color:#dc2626e6!important}.hover\:bg-accent-hover:hover{--tw-bg-opacity: 1;background-color:rgb(88 53 219 / var(--tw-bg-opacity, 1))}.hover\:bg-accent-muted:hover{--tw-bg-opacity: 1;background-color:rgb(200 190 240 / var(--tw-bg-opacity, 1))}.hover\:bg-accent\/10:hover{background-color:#6c47ff1a}.hover\:bg-accent\/20:hover{background-color:#6c47ff33}.hover\:bg-accent\/25:hover{background-color:#6c47ff40}.hover\:bg-accent\/30:hover{background-color:#6c47ff4d}.hover\:bg-accent\/90:hover{background-color:#6c47ffe6}.hover\:bg-accent\/\[0\.04\]:hover{background-color:#6c47ff0a}.hover\:bg-emerald-600\/10:hover{background-color:#0596691a}.hover\:bg-red-600\/10:hover,.hover\:bg-status-error\/10:hover{background-color:#dc26261a}.hover\:bg-status-error\/20:hover{background-color:#dc262633}.hover\:bg-status-error\/80:hover{background-color:#dc2626cc}.hover\:bg-status-error\/90:hover{background-color:#dc2626e6}.hover\:bg-status-success\/10:hover{background-color:#16a34a1a}.hover\:bg-status-success\/20:hover{background-color:#16a34a33}.hover\:bg-surface-hover:hover{--tw-bg-opacity: 1;background-color:rgb(247 244 255 / var(--tw-bg-opacity, 1))}.hover\:bg-surface-hover\/30:hover{background-color:#f7f4ff4d}.hover\:bg-surface-hover\/50:hover{background-color:#f7f4ff80}.hover\:bg-surface-raised:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-surface-raised\/30:hover{background-color:#ffffff4d}.hover\:bg-surface-raised\/60:hover{background-color:#fff9}.hover\:bg-surface-sunken:hover{--tw-bg-opacity: 1;background-color:rgb(245 245 247 / var(--tw-bg-opacity, 1))}.hover\:bg-surface-sunken\/40:hover{background-color:#f5f5f766}.hover\:text-accent:hover{--tw-text-opacity: 1;color:rgb(108 71 255 / var(--tw-text-opacity, 1))}.hover\:text-accent-hover:hover{--tw-text-opacity: 1;color:rgb(88 53 219 / var(--tw-text-opacity, 1))}.hover\:text-accent\/80:hover{color:#6c47ffcc}.hover\:text-amber-300:hover{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-emerald-300:hover{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-status-error:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-status-error\/80:hover{color:#dc2626cc}.hover\:text-status-success:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-status-success\/80:hover{color:#16a34acc}.hover\:text-status-warning:hover{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.hover\:text-status-warning\/80:hover{color:#f59e0bcc}.hover\:text-text-primary:hover{--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1))}.hover\:text-text-secondary:hover{--tw-text-opacity: 1;color:rgb(91 81 115 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-accent:focus{--tw-border-opacity: 1;border-color:rgb(108 71 255 / var(--tw-border-opacity, 1))}.focus\:border-accent\/50:focus{border-color:#6c47ff80}.focus\:border-status-error:focus{--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-inset:focus{--tw-ring-inset: inset}.focus\:ring-accent:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(108 71 255 / var(--tw-ring-opacity, 1))}.focus\:ring-accent\/30:focus{--tw-ring-color: rgb(108 71 255 / .3)}.focus\:ring-accent\/40:focus{--tw-ring-color: rgb(108 71 255 / .4)}.focus\:ring-accent\/50:focus{--tw-ring-color: rgb(108 71 255 / .5)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:no-underline:disabled{text-decoration-line:none}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group\/srv:hover .group-hover\/srv\:visible{visibility:visible}.group\/section:hover .group-hover\/section\:text-text-tertiary{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.group\/srv:hover .group-hover\/srv\:text-accent,.group:hover .group-hover\:text-accent{--tw-text-opacity: 1;color:rgb(108 71 255 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-accent-hover{--tw-text-opacity: 1;color:rgb(88 53 219 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-text-primary{--tw-text-opacity: 1;color:rgb(30 21 53 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-text-tertiary{--tw-text-opacity: 1;color:rgb(145 138 171 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group\/key:hover .group-hover\/key\:opacity-100,.group\/row:hover .group-hover\/row\:opacity-100,.group\/sched:hover .group-hover\/sched\:opacity-100{opacity:1}.group\/sorthead:hover .group-hover\/sorthead\:opacity-40{opacity:.4}.group\/sub:hover .group-hover\/sub\:opacity-100,.group\/task:hover .group-hover\/task\:opacity-100,.group\/trace:hover .group-hover\/trace\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:w-72{width:18rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[1fr_240px\]{grid-template-columns:1fr 240px}.lg\:grid-cols-\[1fr_320px\]{grid-template-columns:1fr 320px}.lg\:grid-cols-\[1fr_340px\]{grid-template-columns:1fr 340px}.lg\:grid-cols-\[1fr_360px\]{grid-template-columns:1fr 360px}.lg\:grid-cols-\[1fr_400px\]{grid-template-columns:1fr 400px}.lg\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.lg\:border-l{border-left-width:1px}.lg\:border-surface-border{--tw-border-opacity: 1;border-color:rgb(224 218 240 / var(--tw-border-opacity, 1))}.lg\:pl-12{padding-left:3rem}}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as $,j as t,a as y}from"./vendor-query-B2UbickB.js";import{a as D}from"./vendor-react-CX88sFS5.js";import{b as M,S as d,J as R,c as A}from"./index-DcpCR9c_.js";import{a as L}from"./controlplane-COYEIIAz.js";import{u as O}from"./useFilterParams-DZCAaBC7.js";import{D as z}from"./DataTable-D9yuBv0w.js";import{S as E}from"./StickyPagination-F9FZsRy9.js";import{F as I,b,a as J}from"./FilterBar-Ck4K4rzu.js";import{T as j}from"./TimestampCell-CYFbEhqc.js";import{P as q}from"./PageHeader-Bo0SpcCK.js";import{L as U}from"./ListToolbar-Bntl2hex.js";import{r as W,X as g}from"./vendor-icons-BNtvBbnj.js";import"./EmptyState-BcsfPq9T.js";function B(e){const a=new URLSearchParams;return a.set("namespace",e.namespace),a.set("source",e.source),e.limit&&a.set("limit",String(e.limit)),e.offset&&a.set("offset",String(e.offset)),e.sort_by&&a.set("sort_by",e.sort_by),e.order&&a.set("order",e.order),e.status&&a.set("status",e.status),e.stream_name&&a.set("stream_name",e.stream_name),e.msg_type&&a.set("msg_type",e.msg_type),e.topic&&a.set("topic",e.topic),e.workflow_name&&a.set("workflow_name",e.workflow_name),e.jid&&a.set("jid",e.jid),e.aid&&a.set("aid",e.aid),M(`/controlplane/stream-messages?${a}`)}function H(e){return $({queryKey:["controlplane","stream-messages",e],queryFn:()=>B(e),enabled:!!e.namespace,staleTime:15e3})}const _={pending:"bg-text-tertiary",claimed:"bg-status-warning",processed:"bg-status-success",dead_lettered:"bg-status-error"},f={pending:"Pending",claimed:"Claimed",processed:"Processed",dead_lettered:"Dead Lettered"},N="inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary",K=[{value:"pending",label:"Pending"},{value:"claimed",label:"Claimed"},{value:"processed",label:"Processed"},{value:"dead_lettered",label:"Dead Lettered"}],V=[{value:"engine",label:"Engine"},{value:"worker",label:"Worker"}];function m({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("div",{className:"mt-0.5",children:t.jsx(A,{date:a,format:"datetime"})})]}):null}function x({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("p",{className:"text-xs text-text-primary font-mono break-all",children:a})]}):null}function l({label:e,value:a,onFilter:r}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsxs("button",{onClick:()=>r==null?void 0:r(a),className:"flex items-center gap-1 group text-left w-full",title:`Filter by ${e.toLowerCase()}: ${a}`,children:[t.jsx("p",{className:"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors",children:a}),t.jsx(W,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity"})]})]}):null}function G({message:e,filters:a}){return e?t.jsxs("div",{className:"space-y-5 text-[11px]",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${_[e.status]}`}),t.jsx(l,{label:"",value:f[e.status],onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStatus)==null?void 0:r.call(a,e.status)}}),t.jsx("span",{className:N,children:e.source})]}),t.jsx(l,{label:"",value:e.stream_name,onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStreamName)==null?void 0:r.call(a,e.stream_name)}}),t.jsxs("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:["ID: ",e.id]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Timestamps"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(m,{label:"Created",value:e.created_at}),t.jsx(m,{label:"Reserved",value:e.reserved_at}),t.jsx(m,{label:"Processed",value:e.expired_at}),t.jsx(m,{label:"Dead-lettered",value:e.dead_lettered_at})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Metadata"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(x,{label:"Priority",value:String(e.priority)}),t.jsx(x,{label:"Retries",value:`${e.retry_attempt} / ${e.max_retry_attempts}`}),t.jsx(x,{label:"Reserved by",value:e.reserved_by})]})]}),e.jid&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Job"}),t.jsx("div",{className:"grid grid-cols-1 gap-2",children:t.jsx(l,{label:"Job ID",value:e.jid,onFilter:a==null?void 0:a.onFilterJid})})]}),e.source==="worker"&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Worker Details"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(l,{label:"Workflow",value:e.workflow_name,onFilter:a==null?void 0:a.onFilterWorkflow}),t.jsx(l,{label:"Activity",value:e.aid,onFilter:a==null?void 0:a.onFilterAid}),t.jsx(x,{label:"Dimension",value:e.dad}),t.jsx(l,{label:"Type",value:e.msg_type,onFilter:a==null?void 0:a.onFilterMsgType}),t.jsx(l,{label:"Topic",value:e.topic,onFilter:a==null?void 0:a.onFilterTopic})]})]}),t.jsx("div",{className:"space-y-2",children:t.jsx(R,{data:e.message,label:"Payload",defaultCollapsed:!1})})]}):null}function ce(){const{filters:e,setFilter:a,pagination:r,sort:u,setSort:k}=O({filters:{namespace:"durable",source:"worker",status:"",stream_name:"",msg_type:"",topic:"",workflow_name:"",jid:"",aid:""}}),[n,h]=y.useState(null),{data:c}=L(),w=y.useMemo(()=>((c==null?void 0:c.apps)??[]).map(s=>({value:s.appId,label:s.appId})),[c]),{data:o,isLoading:S,refetch:F,isFetching:P}=H({namespace:e.namespace||"durable",source:e.source||"worker",limit:r.pageSize,offset:r.offset,sort_by:u.sort_by||"created_at",order:u.order||"desc",status:e.status||void 0,stream_name:e.stream_name||void 0,msg_type:e.msg_type||void 0,topic:e.topic||void 0,workflow_name:e.workflow_name||void 0,jid:e.jid||void 0,aid:e.aid||void 0}),p=(o==null?void 0:o.messages)??[],v=(o==null?void 0:o.total)??0,i=y.useMemo(()=>n?p.find(s=>s.id===n.id&&s.source===n.source)??n:null,[p,n]),T=!!i,C=[{key:"status",label:"Status",render:s=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${_[s.status]}`}),t.jsx("span",{className:"text-xs",children:f[s.status]})]}),className:"w-28"},{key:"source",label:"Source",render:s=>t.jsx("span",{className:N,children:s.source}),className:"w-20"},{key:"stream_name",label:"Stream",sortable:!0,render:s=>t.jsx("span",{className:"font-mono text-xs text-text-secondary truncate block max-w-[240px]",title:s.stream_name,children:s.stream_name})},{key:"msg_type",label:"Type",render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.msg_type||"—"}),className:"w-24"},{key:"created_at",label:"Created",sortable:!0,render:s=>t.jsx(j,{date:s.created_at}),className:"w-44"},{key:"reserved_at",label:"Reserved",render:s=>s.reserved_at?t.jsx(j,{date:s.reserved_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"expired_at",label:"Processed",render:s=>s.expired_at?t.jsx(j,{date:s.expired_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"priority",label:"Pri",sortable:!0,render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.priority}),className:"w-12 text-right"},{key:"retry_attempt",label:"Retries",render:s=>t.jsxs("span",{className:"text-xs text-text-secondary",children:[s.retry_attempt,"/",s.max_retry_attempts]}),className:"w-16"}];return t.jsxs("div",{children:[t.jsx(q,{title:"Messages",docsHash:"#docs:dashboard.md:messages"}),t.jsxs(I,{actions:t.jsx(U,{onRefresh:()=>F(),isFetching:P,apiPath:`/controlplane/stream-messages?namespace=${e.namespace||"durable"}&source=${e.source||"worker"}&limit=${r.pageSize}&offset=${r.offset}${e.status?`&status=${e.status}`:""}${e.stream_name?`&stream_name=${e.stream_name}`:""}`}),children:[t.jsx(b,{label:"Namespace",value:e.namespace,onChange:s=>a("namespace",s),options:w,required:!0}),t.jsx(b,{label:"Source",value:e.source,onChange:s=>a("source",s),options:V,required:!0}),t.jsx(b,{label:"Status",value:e.status,onChange:s=>a("status",s),options:K}),t.jsx(J,{label:"Stream",value:e.stream_name,onChange:s=>a("stream_name",s),placeholder:"Filter by stream name…"}),[{key:"topic",label:"Topic",value:e.topic},{key:"workflow_name",label:"Workflow",value:e.workflow_name},{key:"jid",label:"Job",value:e.jid},{key:"aid",label:"Activity",value:e.aid},{key:"msg_type",label:"Type",value:e.msg_type}].filter(s=>s.value).map(s=>t.jsxs("button",{onClick:()=>a(s.key,""),className:"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors",title:`Clear ${s.label} filter`,children:[s.label,": ",s.value,t.jsx(g,{className:"w-2.5 h-2.5"})]},s.key))]}),t.jsx(z,{columns:C,data:p,keyFn:s=>`${s.source}:${s.id}`,isLoading:S,emptyMessage:"No stream messages found",onRowClick:s=>h(s),activeRowKey:i?`${i.source}:${i.id}`:null,sort:u,onSort:k}),t.jsx(E,{page:r.page,totalPages:r.totalPages(v),onPageChange:r.setPage,total:v,pageSize:r.pageSize,onPageSizeChange:r.setPageSize}),T&&D.createPortal(t.jsxs("div",{className:"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg",style:{top:"3.5rem"},children:[t.jsxs("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50",children:[t.jsx("span",{className:"text-xs font-medium text-text-primary",children:"Message Detail"}),t.jsx("button",{onClick:()=>h(null),className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:t.jsx(g,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"px-4 py-4",children:t.jsx(G,{message:i,filters:{onFilterStatus:s=>a("status",s),onFilterStreamName:s=>a("stream_name",s),onFilterMsgType:s=>a("msg_type",s),onFilterTopic:s=>a("topic",s),onFilterWorkflow:s=>a("workflow_name",s),onFilterJid:s=>a("jid",s),onFilterAid:s=>a("aid",s)}})})]}),document.body)]})}export{ce as StreamMessagesPage};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{u as $,j as t,a as y}from"./vendor-query-B2UbickB.js";import{a as D}from"./vendor-react-CX88sFS5.js";import{b as M,S as d,J as R,d as A}from"./index-DZX-E_3q.js";import{a as L}from"./controlplane-BrtAZnJM.js";import{u as O}from"./useFilterParams-DZCAaBC7.js";import{D as z}from"./DataTable-D9yuBv0w.js";import{S as E}from"./StickyPagination-F9FZsRy9.js";import{F as I,b,a as J}from"./FilterBar-Ck4K4rzu.js";import{T as j}from"./TimestampCell-Bi2nc9Q_.js";import{P as q}from"./PageHeader-B_gV_jKk.js";import{L as U}from"./ListToolbar-DNAGFe14.js";import{r as W,X as g}from"./vendor-icons-B_Yla7iD.js";import"./EmptyState-BcsfPq9T.js";function B(e){const a=new URLSearchParams;return a.set("namespace",e.namespace),a.set("source",e.source),e.limit&&a.set("limit",String(e.limit)),e.offset&&a.set("offset",String(e.offset)),e.sort_by&&a.set("sort_by",e.sort_by),e.order&&a.set("order",e.order),e.status&&a.set("status",e.status),e.stream_name&&a.set("stream_name",e.stream_name),e.msg_type&&a.set("msg_type",e.msg_type),e.topic&&a.set("topic",e.topic),e.workflow_name&&a.set("workflow_name",e.workflow_name),e.jid&&a.set("jid",e.jid),e.aid&&a.set("aid",e.aid),M(`/controlplane/stream-messages?${a}`)}function H(e){return $({queryKey:["controlplane","stream-messages",e],queryFn:()=>B(e),enabled:!!e.namespace,staleTime:15e3})}const _={pending:"bg-text-tertiary",claimed:"bg-status-warning",processed:"bg-status-success",dead_lettered:"bg-status-error"},f={pending:"Pending",claimed:"Claimed",processed:"Processed",dead_lettered:"Dead Lettered"},N="inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary",K=[{value:"pending",label:"Pending"},{value:"claimed",label:"Claimed"},{value:"processed",label:"Processed"},{value:"dead_lettered",label:"Dead Lettered"}],V=[{value:"engine",label:"Engine"},{value:"worker",label:"Worker"}];function m({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("div",{className:"mt-0.5",children:t.jsx(A,{date:a,format:"datetime"})})]}):null}function x({label:e,value:a}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsx("p",{className:"text-xs text-text-primary font-mono break-all",children:a})]}):null}function l({label:e,value:a,onFilter:r}){return a?t.jsxs("div",{children:[t.jsx("span",{className:"text-text-tertiary",children:e}),t.jsxs("button",{onClick:()=>r==null?void 0:r(a),className:"flex items-center gap-1 group text-left w-full",title:`Filter by ${e.toLowerCase()}: ${a}`,children:[t.jsx("p",{className:"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors",children:a}),t.jsx(W,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity"})]})]}):null}function G({message:e,filters:a}){return e?t.jsxs("div",{className:"space-y-5 text-[11px]",children:[t.jsxs("div",{children:[t.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${_[e.status]}`}),t.jsx(l,{label:"",value:f[e.status],onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStatus)==null?void 0:r.call(a,e.status)}}),t.jsx("span",{className:N,children:e.source})]}),t.jsx(l,{label:"",value:e.stream_name,onFilter:()=>{var r;return(r=a==null?void 0:a.onFilterStreamName)==null?void 0:r.call(a,e.stream_name)}}),t.jsxs("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:["ID: ",e.id]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Timestamps"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(m,{label:"Created",value:e.created_at}),t.jsx(m,{label:"Reserved",value:e.reserved_at}),t.jsx(m,{label:"Processed",value:e.expired_at}),t.jsx(m,{label:"Dead-lettered",value:e.dead_lettered_at})]})]}),t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Metadata"}),t.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[t.jsx(x,{label:"Priority",value:String(e.priority)}),t.jsx(x,{label:"Retries",value:`${e.retry_attempt} / ${e.max_retry_attempts}`}),t.jsx(x,{label:"Reserved by",value:e.reserved_by})]})]}),e.jid&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Job"}),t.jsx("div",{className:"grid grid-cols-1 gap-2",children:t.jsx(l,{label:"Job ID",value:e.jid,onFilter:a==null?void 0:a.onFilterJid})})]}),e.source==="worker"&&t.jsxs("div",{className:"space-y-2",children:[t.jsx(d,{children:"Worker Details"}),t.jsxs("div",{className:"grid grid-cols-1 gap-2",children:[t.jsx(l,{label:"Workflow",value:e.workflow_name,onFilter:a==null?void 0:a.onFilterWorkflow}),t.jsx(l,{label:"Activity",value:e.aid,onFilter:a==null?void 0:a.onFilterAid}),t.jsx(x,{label:"Dimension",value:e.dad}),t.jsx(l,{label:"Type",value:e.msg_type,onFilter:a==null?void 0:a.onFilterMsgType}),t.jsx(l,{label:"Topic",value:e.topic,onFilter:a==null?void 0:a.onFilterTopic})]})]}),t.jsx("div",{className:"space-y-2",children:t.jsx(R,{data:e.message,label:"Payload",defaultCollapsed:!1})})]}):null}function ce(){const{filters:e,setFilter:a,pagination:r,sort:u,setSort:k}=O({filters:{namespace:"durable",source:"worker",status:"",stream_name:"",msg_type:"",topic:"",workflow_name:"",jid:"",aid:""}}),[n,h]=y.useState(null),{data:c}=L(),w=y.useMemo(()=>((c==null?void 0:c.apps)??[]).map(s=>({value:s.appId,label:s.appId})),[c]),{data:o,isLoading:S,refetch:F,isFetching:P}=H({namespace:e.namespace||"durable",source:e.source||"worker",limit:r.pageSize,offset:r.offset,sort_by:u.sort_by||"created_at",order:u.order||"desc",status:e.status||void 0,stream_name:e.stream_name||void 0,msg_type:e.msg_type||void 0,topic:e.topic||void 0,workflow_name:e.workflow_name||void 0,jid:e.jid||void 0,aid:e.aid||void 0}),p=(o==null?void 0:o.messages)??[],v=(o==null?void 0:o.total)??0,i=y.useMemo(()=>n?p.find(s=>s.id===n.id&&s.source===n.source)??n:null,[p,n]),T=!!i,C=[{key:"status",label:"Status",render:s=>t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:`w-2 h-2 rounded-full shrink-0 ${_[s.status]}`}),t.jsx("span",{className:"text-xs",children:f[s.status]})]}),className:"w-28"},{key:"source",label:"Source",render:s=>t.jsx("span",{className:N,children:s.source}),className:"w-20"},{key:"stream_name",label:"Stream",sortable:!0,render:s=>t.jsx("span",{className:"font-mono text-xs text-text-secondary truncate block max-w-[240px]",title:s.stream_name,children:s.stream_name})},{key:"msg_type",label:"Type",render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.msg_type||"—"}),className:"w-24"},{key:"created_at",label:"Created",sortable:!0,render:s=>t.jsx(j,{date:s.created_at}),className:"w-44"},{key:"reserved_at",label:"Reserved",render:s=>s.reserved_at?t.jsx(j,{date:s.reserved_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"expired_at",label:"Processed",render:s=>s.expired_at?t.jsx(j,{date:s.expired_at}):t.jsx("span",{className:"text-xs text-text-tertiary",children:"—"}),className:"w-44"},{key:"priority",label:"Pri",sortable:!0,render:s=>t.jsx("span",{className:"text-xs text-text-secondary",children:s.priority}),className:"w-12 text-right"},{key:"retry_attempt",label:"Retries",render:s=>t.jsxs("span",{className:"text-xs text-text-secondary",children:[s.retry_attempt,"/",s.max_retry_attempts]}),className:"w-16"}];return t.jsxs("div",{children:[t.jsx(q,{title:"Messages",docsHash:"#docs:dashboard.md:messages"}),t.jsxs(I,{actions:t.jsx(U,{onRefresh:()=>F(),isFetching:P,apiPath:`/controlplane/stream-messages?namespace=${e.namespace||"durable"}&source=${e.source||"worker"}&limit=${r.pageSize}&offset=${r.offset}${e.status?`&status=${e.status}`:""}${e.stream_name?`&stream_name=${e.stream_name}`:""}`}),children:[t.jsx(b,{label:"Namespace",value:e.namespace,onChange:s=>a("namespace",s),options:w,required:!0}),t.jsx(b,{label:"Source",value:e.source,onChange:s=>a("source",s),options:V,required:!0}),t.jsx(b,{label:"Status",value:e.status,onChange:s=>a("status",s),options:K}),t.jsx(J,{label:"Stream",value:e.stream_name,onChange:s=>a("stream_name",s),placeholder:"Filter by stream name…"}),[{key:"topic",label:"Topic",value:e.topic},{key:"workflow_name",label:"Workflow",value:e.workflow_name},{key:"jid",label:"Job",value:e.jid},{key:"aid",label:"Activity",value:e.aid},{key:"msg_type",label:"Type",value:e.msg_type}].filter(s=>s.value).map(s=>t.jsxs("button",{onClick:()=>a(s.key,""),className:"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors",title:`Clear ${s.label} filter`,children:[s.label,": ",s.value,t.jsx(g,{className:"w-2.5 h-2.5"})]},s.key))]}),t.jsx(z,{columns:C,data:p,keyFn:s=>`${s.source}:${s.id}`,isLoading:S,emptyMessage:"No stream messages found",onRowClick:s=>h(s),activeRowKey:i?`${i.source}:${i.id}`:null,sort:u,onSort:k}),t.jsx(E,{page:r.page,totalPages:r.totalPages(v),onPageChange:r.setPage,total:v,pageSize:r.pageSize,onPageSizeChange:r.setPageSize}),T&&D.createPortal(t.jsxs("div",{className:"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg",style:{top:"3.5rem"},children:[t.jsxs("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50",children:[t.jsx("span",{className:"text-xs font-medium text-text-primary",children:"Message Detail"}),t.jsx("button",{onClick:()=>h(null),className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:t.jsx(g,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"px-4 py-4",children:t.jsx(G,{message:i,filters:{onFilterStatus:s=>a("status",s),onFilterStreamName:s=>a("stream_name",s),onFilterMsgType:s=>a("msg_type",s),onFilterTopic:s=>a("topic",s),onFilterWorkflow:s=>a("workflow_name",s),onFilterJid:s=>a("jid",s),onFilterAid:s=>a("aid",s)}})})]}),document.body)]})}export{ce as StreamMessagesPage};
|
|
2
|
+
//# sourceMappingURL=index-Bl9wzQ8Q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-R61-yG56.js","sources":["../../src/api/stream-messages.ts","../../src/pages/admin/streams/constants.ts","../../src/pages/admin/streams/StreamMessageDetail.tsx","../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type StreamMessageStatus = 'pending' | 'claimed' | 'processed' | 'dead_lettered';\nexport type StreamMessageSource = 'engine' | 'worker';\n\nexport interface StreamMessage {\n id: string;\n source: StreamMessageSource;\n stream_name: string;\n message: string;\n status: StreamMessageStatus;\n created_at: string;\n reserved_at: string | null;\n reserved_by: string | null;\n expired_at: string | null;\n dead_lettered_at: string | null;\n priority: number;\n visible_at: string | null;\n retry_attempt: number;\n max_retry_attempts: number;\n workflow_name: string | null;\n jid: string | null;\n aid: string | null;\n dad: string | null;\n msg_type: string | null;\n topic: string | null;\n}\n\nexport interface StreamMessagesResponse {\n messages: StreamMessage[];\n total: number;\n}\n\nexport interface StreamMessagesParams {\n namespace: string;\n source: StreamMessageSource;\n limit?: number;\n offset?: number;\n sort_by?: string;\n order?: 'asc' | 'desc';\n status?: StreamMessageStatus | '';\n stream_name?: string;\n msg_type?: string;\n topic?: string;\n workflow_name?: string;\n jid?: string;\n aid?: string;\n}\n\n// ── Fetch ───────────────────────────────────────────────────────────────────\n\nfunction fetchStreamMessages(params: StreamMessagesParams) {\n const qs = new URLSearchParams();\n qs.set('namespace', params.namespace);\n qs.set('source', params.source);\n if (params.limit) qs.set('limit', String(params.limit));\n if (params.offset) qs.set('offset', String(params.offset));\n if (params.sort_by) qs.set('sort_by', params.sort_by);\n if (params.order) qs.set('order', params.order);\n if (params.status) qs.set('status', params.status);\n if (params.stream_name) qs.set('stream_name', params.stream_name);\n if (params.msg_type) qs.set('msg_type', params.msg_type);\n if (params.topic) qs.set('topic', params.topic);\n if (params.workflow_name) qs.set('workflow_name', params.workflow_name);\n if (params.jid) qs.set('jid', params.jid);\n if (params.aid) qs.set('aid', params.aid);\n return apiFetch<StreamMessagesResponse>(`/controlplane/stream-messages?${qs}`);\n}\n\n// ── Hook ────────────────────────────────────────────────────────────────────\n\nexport function useStreamMessages(params: StreamMessagesParams) {\n return useQuery({\n queryKey: ['controlplane', 'stream-messages', params],\n queryFn: () => fetchStreamMessages(params),\n enabled: !!params.namespace,\n staleTime: 15_000,\n });\n}\n","import type { StreamMessageStatus } from '../../../api/stream-messages';\n\nexport const STATUS_DOT: Record<StreamMessageStatus, string> = {\n pending: 'bg-text-tertiary',\n claimed: 'bg-status-warning',\n processed: 'bg-status-success',\n dead_lettered: 'bg-status-error',\n};\n\nexport const STATUS_LABEL: Record<StreamMessageStatus, string> = {\n pending: 'Pending',\n claimed: 'Claimed',\n processed: 'Processed',\n dead_lettered: 'Dead Lettered',\n};\n\nexport const SOURCE_BADGE =\n 'inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary';\n\nexport const STATUS_OPTIONS = [\n { value: 'pending', label: 'Pending' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'processed', label: 'Processed' },\n { value: 'dead_lettered', label: 'Dead Lettered' },\n];\n\nexport const SOURCE_OPTIONS = [\n { value: 'engine', label: 'Engine' },\n { value: 'worker', label: 'Worker' },\n];\n","import { Filter } from 'lucide-react';\nimport type { StreamMessage } from '../../../api/stream-messages';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { STATUS_DOT, STATUS_LABEL, SOURCE_BADGE } from './constants';\n\nfunction Timestamp({ label, value }: { label: string; value: string | null }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <div className=\"mt-0.5\">\n <DateValue date={value} format=\"datetime\" />\n </div>\n </div>\n );\n}\n\nfunction Field({ label, value }: { label: string; value: string | null | undefined }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <p className=\"text-xs text-text-primary font-mono break-all\">{value}</p>\n </div>\n );\n}\n\n/** A field value that can be clicked to filter the master list. */\nfunction FilterableField({ label, value, onFilter }: {\n label: string;\n value: string | null | undefined;\n onFilter?: (value: string) => void;\n}) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <button\n onClick={() => onFilter?.(value)}\n className=\"flex items-center gap-1 group text-left w-full\"\n title={`Filter by ${label.toLowerCase()}: ${value}`}\n >\n <p className=\"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors\">{value}</p>\n <Filter className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n </div>\n );\n}\n\nexport interface StreamMessageDetailFilters {\n onFilterStatus?: (value: string) => void;\n onFilterStreamName?: (value: string) => void;\n onFilterMsgType?: (value: string) => void;\n onFilterTopic?: (value: string) => void;\n onFilterWorkflow?: (value: string) => void;\n onFilterJid?: (value: string) => void;\n onFilterAid?: (value: string) => void;\n}\n\n/**\n * Standard stream message detail view.\n *\n * This component is the canonical representation of a stream message.\n * Reuse it wherever stream messages need to be displayed — the layout,\n * timestamp formatting (via DateValue with ms/UTC/local tooltip), and\n * payload viewer are the standard.\n */\nexport function StreamMessageDetail({ message, filters }: {\n message: StreamMessage | null;\n filters?: StreamMessageDetailFilters;\n}) {\n if (!message) return null;\n\n return (\n <div className=\"space-y-5 text-[11px]\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[message.status]}`} />\n <FilterableField\n label=\"\"\n value={STATUS_LABEL[message.status]}\n onFilter={() => filters?.onFilterStatus?.(message.status)}\n />\n <span className={SOURCE_BADGE}>{message.source}</span>\n </div>\n <FilterableField\n label=\"\"\n value={message.stream_name}\n onFilter={() => filters?.onFilterStreamName?.(message.stream_name)}\n />\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">ID: {message.id}</p>\n </div>\n\n {/* Timestamps */}\n <div className=\"space-y-2\">\n <SectionLabel>Timestamps</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <Timestamp label=\"Created\" value={message.created_at} />\n <Timestamp label=\"Reserved\" value={message.reserved_at} />\n <Timestamp label=\"Processed\" value={message.expired_at} />\n <Timestamp label=\"Dead-lettered\" value={message.dead_lettered_at} />\n </div>\n </div>\n\n {/* Metadata */}\n <div className=\"space-y-2\">\n <SectionLabel>Metadata</SectionLabel>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Priority\" value={String(message.priority)} />\n <Field label=\"Retries\" value={`${message.retry_attempt} / ${message.max_retry_attempts}`} />\n <Field label=\"Reserved by\" value={message.reserved_by} />\n </div>\n </div>\n\n {/* Job ID — available on both engine and worker streams */}\n {message.jid && (\n <div className=\"space-y-2\">\n <SectionLabel>Job</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Job ID\" value={message.jid} onFilter={filters?.onFilterJid} />\n </div>\n </div>\n )}\n\n {/* Worker-specific fields — clickable to filter */}\n {message.source === 'worker' && (\n <div className=\"space-y-2\">\n <SectionLabel>Worker Details</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Workflow\" value={message.workflow_name} onFilter={filters?.onFilterWorkflow} />\n <FilterableField label=\"Activity\" value={message.aid} onFilter={filters?.onFilterAid} />\n <Field label=\"Dimension\" value={message.dad} />\n <FilterableField label=\"Type\" value={message.msg_type} onFilter={filters?.onFilterMsgType} />\n <FilterableField label=\"Topic\" value={message.topic} onFilter={filters?.onFilterTopic} />\n </div>\n </div>\n )}\n\n {/* Message payload — fully expanded by default */}\n <div className=\"space-y-2\">\n <JsonViewer data={message.message} label=\"Payload\" defaultCollapsed={false} />\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useControlPlaneApps } from '../../../api/controlplane';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nexport function StreamMessagesPage() {\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: 'durable', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const { data: appsData } = useControlPlaneApps();\n const namespaceOptions = useMemo(\n () => (appsData?.apps ?? []).map((a) => ({ value: a.appId, label: a.appId })),\n [appsData],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || 'durable',\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n const columns: Column<StreamMessage>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => (\n <div className=\"flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[row.status]}`} />\n <span className=\"text-xs\">{STATUS_LABEL[row.status]}</span>\n </div>\n ),\n className: 'w-28',\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-20',\n },\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <span className=\"font-mono text-xs text-text-secondary truncate block max-w-[240px]\" title={row.stream_name}>\n {row.stream_name}\n </span>\n ),\n },\n {\n key: 'msg_type',\n label: 'Type',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">{row.msg_type || '—'}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at ? <TimestampCell date={row.reserved_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at ? <TimestampCell date={row.expired_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-12 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-16',\n },\n ];\n\n return (\n <div>\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/controlplane/stream-messages?namespace=${filters.namespace || 'durable'}&source=${filters.source || 'worker'}&limit=${pagination.pageSize}&offset=${pagination.offset}${filters.status ? `&status=${filters.status}` : ''}${filters.stream_name ? `&stream_name=${filters.stream_name}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'jid', label: 'Job', value: filters.jid },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter`}\n >\n {f.label}: {f.value}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n />\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\n {/* Detail panel — portaled to body so fixed positioning works */}\n {panelOpen && createPortal(\n <div className=\"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg\" style={{ top: '3.5rem' }}>\n <div className=\"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50\">\n <span className=\"text-xs font-medium text-text-primary\">Message Detail</span>\n <button\n onClick={() => setSelected(null)}\n className=\"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"px-4 py-4\">\n <StreamMessageDetail\n message={activeMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n"],"names":["fetchStreamMessages","params","qs","apiFetch","useStreamMessages","useQuery","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","STATUS_OPTIONS","SOURCE_OPTIONS","Timestamp","label","value","jsx","DateValue","Field","FilterableField","onFilter","jsxs","Filter","StreamMessageDetail","message","filters","_a","SectionLabel","JsonViewer","StreamMessagesPage","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","appsData","useControlPlaneApps","namespaceOptions","useMemo","a","data","isLoading","refetch","isFetching","messages","total","activeMessage","m","panelOpen","columns","row","TimestampCell","PageHeader","FilterBar","ListToolbar","FilterSelect","v","FilterInput","f","X","DataTable","StickyPagination","createPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-Bl9wzQ8Q.js","sources":["../../src/api/stream-messages.ts","../../src/pages/admin/streams/constants.ts","../../src/pages/admin/streams/StreamMessageDetail.tsx","../../src/pages/admin/streams/StreamMessagesPage.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\n// ── Types ───────────────────────────────────────────────────────────────────\n\nexport type StreamMessageStatus = 'pending' | 'claimed' | 'processed' | 'dead_lettered';\nexport type StreamMessageSource = 'engine' | 'worker';\n\nexport interface StreamMessage {\n id: string;\n source: StreamMessageSource;\n stream_name: string;\n message: string;\n status: StreamMessageStatus;\n created_at: string;\n reserved_at: string | null;\n reserved_by: string | null;\n expired_at: string | null;\n dead_lettered_at: string | null;\n priority: number;\n visible_at: string | null;\n retry_attempt: number;\n max_retry_attempts: number;\n workflow_name: string | null;\n jid: string | null;\n aid: string | null;\n dad: string | null;\n msg_type: string | null;\n topic: string | null;\n}\n\nexport interface StreamMessagesResponse {\n messages: StreamMessage[];\n total: number;\n}\n\nexport interface StreamMessagesParams {\n namespace: string;\n source: StreamMessageSource;\n limit?: number;\n offset?: number;\n sort_by?: string;\n order?: 'asc' | 'desc';\n status?: StreamMessageStatus | '';\n stream_name?: string;\n msg_type?: string;\n topic?: string;\n workflow_name?: string;\n jid?: string;\n aid?: string;\n}\n\n// ── Fetch ───────────────────────────────────────────────────────────────────\n\nfunction fetchStreamMessages(params: StreamMessagesParams) {\n const qs = new URLSearchParams();\n qs.set('namespace', params.namespace);\n qs.set('source', params.source);\n if (params.limit) qs.set('limit', String(params.limit));\n if (params.offset) qs.set('offset', String(params.offset));\n if (params.sort_by) qs.set('sort_by', params.sort_by);\n if (params.order) qs.set('order', params.order);\n if (params.status) qs.set('status', params.status);\n if (params.stream_name) qs.set('stream_name', params.stream_name);\n if (params.msg_type) qs.set('msg_type', params.msg_type);\n if (params.topic) qs.set('topic', params.topic);\n if (params.workflow_name) qs.set('workflow_name', params.workflow_name);\n if (params.jid) qs.set('jid', params.jid);\n if (params.aid) qs.set('aid', params.aid);\n return apiFetch<StreamMessagesResponse>(`/controlplane/stream-messages?${qs}`);\n}\n\n// ── Hook ────────────────────────────────────────────────────────────────────\n\nexport function useStreamMessages(params: StreamMessagesParams) {\n return useQuery({\n queryKey: ['controlplane', 'stream-messages', params],\n queryFn: () => fetchStreamMessages(params),\n enabled: !!params.namespace,\n staleTime: 15_000,\n });\n}\n","import type { StreamMessageStatus } from '../../../api/stream-messages';\n\nexport const STATUS_DOT: Record<StreamMessageStatus, string> = {\n pending: 'bg-text-tertiary',\n claimed: 'bg-status-warning',\n processed: 'bg-status-success',\n dead_lettered: 'bg-status-error',\n};\n\nexport const STATUS_LABEL: Record<StreamMessageStatus, string> = {\n pending: 'Pending',\n claimed: 'Claimed',\n processed: 'Processed',\n dead_lettered: 'Dead Lettered',\n};\n\nexport const SOURCE_BADGE =\n 'inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary';\n\nexport const STATUS_OPTIONS = [\n { value: 'pending', label: 'Pending' },\n { value: 'claimed', label: 'Claimed' },\n { value: 'processed', label: 'Processed' },\n { value: 'dead_lettered', label: 'Dead Lettered' },\n];\n\nexport const SOURCE_OPTIONS = [\n { value: 'engine', label: 'Engine' },\n { value: 'worker', label: 'Worker' },\n];\n","import { Filter } from 'lucide-react';\nimport type { StreamMessage } from '../../../api/stream-messages';\nimport { SectionLabel } from '../../../components/common/layout/SectionLabel';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { STATUS_DOT, STATUS_LABEL, SOURCE_BADGE } from './constants';\n\nfunction Timestamp({ label, value }: { label: string; value: string | null }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <div className=\"mt-0.5\">\n <DateValue date={value} format=\"datetime\" />\n </div>\n </div>\n );\n}\n\nfunction Field({ label, value }: { label: string; value: string | null | undefined }) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <p className=\"text-xs text-text-primary font-mono break-all\">{value}</p>\n </div>\n );\n}\n\n/** A field value that can be clicked to filter the master list. */\nfunction FilterableField({ label, value, onFilter }: {\n label: string;\n value: string | null | undefined;\n onFilter?: (value: string) => void;\n}) {\n if (!value) return null;\n return (\n <div>\n <span className=\"text-text-tertiary\">{label}</span>\n <button\n onClick={() => onFilter?.(value)}\n className=\"flex items-center gap-1 group text-left w-full\"\n title={`Filter by ${label.toLowerCase()}: ${value}`}\n >\n <p className=\"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors\">{value}</p>\n <Filter className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity\" />\n </button>\n </div>\n );\n}\n\nexport interface StreamMessageDetailFilters {\n onFilterStatus?: (value: string) => void;\n onFilterStreamName?: (value: string) => void;\n onFilterMsgType?: (value: string) => void;\n onFilterTopic?: (value: string) => void;\n onFilterWorkflow?: (value: string) => void;\n onFilterJid?: (value: string) => void;\n onFilterAid?: (value: string) => void;\n}\n\n/**\n * Standard stream message detail view.\n *\n * This component is the canonical representation of a stream message.\n * Reuse it wherever stream messages need to be displayed — the layout,\n * timestamp formatting (via DateValue with ms/UTC/local tooltip), and\n * payload viewer are the standard.\n */\nexport function StreamMessageDetail({ message, filters }: {\n message: StreamMessage | null;\n filters?: StreamMessageDetailFilters;\n}) {\n if (!message) return null;\n\n return (\n <div className=\"space-y-5 text-[11px]\">\n {/* Header */}\n <div>\n <div className=\"flex items-center gap-2 mb-1\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[message.status]}`} />\n <FilterableField\n label=\"\"\n value={STATUS_LABEL[message.status]}\n onFilter={() => filters?.onFilterStatus?.(message.status)}\n />\n <span className={SOURCE_BADGE}>{message.source}</span>\n </div>\n <FilterableField\n label=\"\"\n value={message.stream_name}\n onFilter={() => filters?.onFilterStreamName?.(message.stream_name)}\n />\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">ID: {message.id}</p>\n </div>\n\n {/* Timestamps */}\n <div className=\"space-y-2\">\n <SectionLabel>Timestamps</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <Timestamp label=\"Created\" value={message.created_at} />\n <Timestamp label=\"Reserved\" value={message.reserved_at} />\n <Timestamp label=\"Processed\" value={message.expired_at} />\n <Timestamp label=\"Dead-lettered\" value={message.dead_lettered_at} />\n </div>\n </div>\n\n {/* Metadata */}\n <div className=\"space-y-2\">\n <SectionLabel>Metadata</SectionLabel>\n <div className=\"grid grid-cols-2 gap-2\">\n <Field label=\"Priority\" value={String(message.priority)} />\n <Field label=\"Retries\" value={`${message.retry_attempt} / ${message.max_retry_attempts}`} />\n <Field label=\"Reserved by\" value={message.reserved_by} />\n </div>\n </div>\n\n {/* Job ID — available on both engine and worker streams */}\n {message.jid && (\n <div className=\"space-y-2\">\n <SectionLabel>Job</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Job ID\" value={message.jid} onFilter={filters?.onFilterJid} />\n </div>\n </div>\n )}\n\n {/* Worker-specific fields — clickable to filter */}\n {message.source === 'worker' && (\n <div className=\"space-y-2\">\n <SectionLabel>Worker Details</SectionLabel>\n <div className=\"grid grid-cols-1 gap-2\">\n <FilterableField label=\"Workflow\" value={message.workflow_name} onFilter={filters?.onFilterWorkflow} />\n <FilterableField label=\"Activity\" value={message.aid} onFilter={filters?.onFilterAid} />\n <Field label=\"Dimension\" value={message.dad} />\n <FilterableField label=\"Type\" value={message.msg_type} onFilter={filters?.onFilterMsgType} />\n <FilterableField label=\"Topic\" value={message.topic} onFilter={filters?.onFilterTopic} />\n </div>\n </div>\n )}\n\n {/* Message payload — fully expanded by default */}\n <div className=\"space-y-2\">\n <JsonViewer data={message.message} label=\"Payload\" defaultCollapsed={false} />\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { useStreamMessages, type StreamMessage } from '../../../api/stream-messages';\nimport { useControlPlaneApps } from '../../../api/controlplane';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { TimestampCell } from '../../../components/common/display/TimestampCell';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../../components/common/data/ListToolbar';\nimport { StreamMessageDetail } from './StreamMessageDetail';\nimport { STATUS_DOT, STATUS_LABEL, STATUS_OPTIONS, SOURCE_OPTIONS, SOURCE_BADGE } from './constants';\n\nexport function StreamMessagesPage() {\n const { filters, setFilter, pagination, sort, setSort } = useFilterParams({\n filters: { namespace: 'durable', source: 'worker', status: '', stream_name: '', msg_type: '', topic: '', workflow_name: '', jid: '', aid: '' },\n });\n\n const [selected, setSelected] = useState<StreamMessage | null>(null);\n\n const { data: appsData } = useControlPlaneApps();\n const namespaceOptions = useMemo(\n () => (appsData?.apps ?? []).map((a) => ({ value: a.appId, label: a.appId })),\n [appsData],\n );\n\n const { data, isLoading, refetch, isFetching } = useStreamMessages({\n namespace: filters.namespace || 'durable',\n source: (filters.source as 'engine' | 'worker') || 'worker',\n limit: pagination.pageSize,\n offset: pagination.offset,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n status: (filters.status as any) || undefined,\n stream_name: filters.stream_name || undefined,\n msg_type: filters.msg_type || undefined,\n topic: filters.topic || undefined,\n workflow_name: filters.workflow_name || undefined,\n jid: filters.jid || undefined,\n aid: filters.aid || undefined,\n });\n\n const messages = data?.messages ?? [];\n const total = data?.total ?? 0;\n\n const activeMessage = useMemo(() => {\n if (!selected) return null;\n return messages.find((m) => m.id === selected.id && m.source === selected.source) ?? selected;\n }, [messages, selected]);\n\n const panelOpen = !!activeMessage;\n\n const columns: Column<StreamMessage>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => (\n <div className=\"flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full shrink-0 ${STATUS_DOT[row.status]}`} />\n <span className=\"text-xs\">{STATUS_LABEL[row.status]}</span>\n </div>\n ),\n className: 'w-28',\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => <span className={SOURCE_BADGE}>{row.source}</span>,\n className: 'w-20',\n },\n {\n key: 'stream_name',\n label: 'Stream',\n sortable: true,\n render: (row) => (\n <span className=\"font-mono text-xs text-text-secondary truncate block max-w-[240px]\" title={row.stream_name}>\n {row.stream_name}\n </span>\n ),\n },\n {\n key: 'msg_type',\n label: 'Type',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">{row.msg_type || '—'}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <TimestampCell date={row.created_at} />,\n className: 'w-44',\n },\n {\n key: 'reserved_at',\n label: 'Reserved',\n render: (row) => row.reserved_at ? <TimestampCell date={row.reserved_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'expired_at',\n label: 'Processed',\n render: (row) => row.expired_at ? <TimestampCell date={row.expired_at} /> : <span className=\"text-xs text-text-tertiary\">—</span>,\n className: 'w-44',\n },\n {\n key: 'priority',\n label: 'Pri',\n sortable: true,\n render: (row) => <span className=\"text-xs text-text-secondary\">{row.priority}</span>,\n className: 'w-12 text-right',\n },\n {\n key: 'retry_attempt',\n label: 'Retries',\n render: (row) => (\n <span className=\"text-xs text-text-secondary\">\n {row.retry_attempt}/{row.max_retry_attempts}\n </span>\n ),\n className: 'w-16',\n },\n ];\n\n return (\n <div>\n <PageHeader title=\"Messages\" docsHash=\"#docs:dashboard.md:messages\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/controlplane/stream-messages?namespace=${filters.namespace || 'durable'}&source=${filters.source || 'worker'}&limit=${pagination.pageSize}&offset=${pagination.offset}${filters.status ? `&status=${filters.status}` : ''}${filters.stream_name ? `&stream_name=${filters.stream_name}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={filters.namespace}\n onChange={(v) => setFilter('namespace', v)}\n options={namespaceOptions}\n required\n />\n <FilterSelect\n label=\"Source\"\n value={filters.source}\n onChange={(v) => setFilter('source', v)}\n options={SOURCE_OPTIONS}\n required\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterInput\n label=\"Stream\"\n value={filters.stream_name}\n onChange={(v) => setFilter('stream_name', v)}\n placeholder=\"Filter by stream name…\"\n />\n {/* Active dimension filter pills — inline in the sticky bar */}\n {[\n { key: 'topic', label: 'Topic', value: filters.topic },\n { key: 'workflow_name', label: 'Workflow', value: filters.workflow_name },\n { key: 'jid', label: 'Job', value: filters.jid },\n { key: 'aid', label: 'Activity', value: filters.aid },\n { key: 'msg_type', label: 'Type', value: filters.msg_type },\n ].filter((f) => f.value).map((f) => (\n <button\n key={f.key}\n onClick={() => setFilter(f.key as any, '')}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors\"\n title={`Clear ${f.label} filter`}\n >\n {f.label}: {f.value}\n <X className=\"w-2.5 h-2.5\" />\n </button>\n ))}\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={messages}\n keyFn={(row) => `${row.source}:${row.id}`}\n isLoading={isLoading}\n emptyMessage=\"No stream messages found\"\n onRowClick={(row) => setSelected(row)}\n activeRowKey={activeMessage ? `${activeMessage.source}:${activeMessage.id}` : null}\n sort={sort}\n onSort={setSort}\n />\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\n {/* Detail panel — portaled to body so fixed positioning works */}\n {panelOpen && createPortal(\n <div className=\"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg\" style={{ top: '3.5rem' }}>\n <div className=\"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50\">\n <span className=\"text-xs font-medium text-text-primary\">Message Detail</span>\n <button\n onClick={() => setSelected(null)}\n className=\"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors\"\n title=\"Close\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n <div className=\"px-4 py-4\">\n <StreamMessageDetail\n message={activeMessage}\n filters={{\n onFilterStatus: (v) => setFilter('status', v),\n onFilterStreamName: (v) => setFilter('stream_name', v),\n onFilterMsgType: (v) => setFilter('msg_type', v),\n onFilterTopic: (v) => setFilter('topic', v),\n onFilterWorkflow: (v) => setFilter('workflow_name', v),\n onFilterJid: (v) => setFilter('jid', v),\n onFilterAid: (v) => setFilter('aid', v),\n }}\n />\n </div>\n </div>,\n document.body,\n )}\n </div>\n );\n}\n"],"names":["fetchStreamMessages","params","qs","apiFetch","useStreamMessages","useQuery","STATUS_DOT","STATUS_LABEL","SOURCE_BADGE","STATUS_OPTIONS","SOURCE_OPTIONS","Timestamp","label","value","jsx","DateValue","Field","FilterableField","onFilter","jsxs","Filter","StreamMessageDetail","message","filters","_a","SectionLabel","JsonViewer","StreamMessagesPage","setFilter","pagination","sort","setSort","useFilterParams","selected","setSelected","useState","appsData","useControlPlaneApps","namespaceOptions","useMemo","a","data","isLoading","refetch","isFetching","messages","total","activeMessage","m","panelOpen","columns","row","TimestampCell","PageHeader","FilterBar","ListToolbar","FilterSelect","v","FilterInput","f","X","DataTable","StickyPagination","createPortal"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,a as u}from"./vendor-query-B2UbickB.js";import{d as H,e as $,f as O,g as U}from"./mcp-xh7T0I-f.js";import{S as z}from"./StepIndicator-CuUIGxKk.js";import{P as J}from"./PageHeader-Bo0SpcCK.js";import{T as Y}from"./TagInput-VBY0xIwb.js";import{X as q,H as K,ai as V,aj as X}from"./vendor-icons-BNtvBbnj.js";import{e as G,c as W,f as Q}from"./vendor-react-CX88sFS5.js";import"./index-DcpCR9c_.js";const T={name:"",description:"",mode:"network",transport_type:"sse",command:"",args:"",env_vars:"{}",url:"",auto_connect:!1,tags:[],compile_hints:"",credential_providers:[],discovered_tools:null};function Z(s){const t=s.transport_config??{},r=!!t.builtin;let a="network";return r?a="in-process":s.transport_type==="stdio"&&(a="local-process"),{name:s.name,description:s.description??"",mode:a,transport_type:s.transport_type,command:t.command??"",args:(t.args??[]).join(", "),env_vars:t.env?JSON.stringify(t.env,null,2):"{}",url:t.url??"",auto_connect:s.auto_connect,tags:s.tags??[],compile_hints:s.compile_hints??"",credential_providers:s.credential_providers??[],discovered_tools:s.tool_manifest??null}}function M(s){let t={};return s.mode==="local-process"?t={command:s.command.trim(),args:s.args.split(",").map(r=>r.trim()).filter(Boolean),env:s.env_vars.trim()?JSON.parse(s.env_vars):void 0}:s.mode==="network"&&(t={url:s.url.trim()}),{name:s.name.trim(),description:s.description.trim()||void 0,transport_type:s.mode==="local-process"?"stdio":s.transport_type,transport_config:t,auto_connect:s.auto_connect,tags:s.tags,compile_hints:s.compile_hints.trim()||void 0,credential_providers:s.credential_providers.length>0?s.credential_providers:void 0}}const L=["Transport","Discovery","Test","Review"];function E(s,t){return s===1?!(!t.name.trim()||t.mode==="network"&&!t.url.trim()||t.mode==="local-process"&&!t.command.trim()):!0}const c="label",h="hint",ee=[{value:"in-process",label:"In-Process",hint:"Built-in server running inside the app"},{value:"network",label:"Network Service",hint:"Remote server via SSE or Streamable HTTP"},{value:"local-process",label:"Local Process",hint:"Spawn a local command via stdio"}];function se({form:s,set:t,isBuiltin:r}){return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Connection Mode"}),e.jsx("div",{className:"grid grid-cols-3 gap-3 mt-1",children:ee.map(a=>{const d=s.mode===a.value,l=r&&a.value!=="in-process";return e.jsxs("button",{type:"button",disabled:l,onClick:()=>{t("mode",a.value),a.value==="local-process"&&t("transport_type","stdio"),a.value==="network"&&t("transport_type","sse")},className:`text-left p-3 rounded-md border transition-colors ${d?"border-accent bg-accent/5":l?"border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed":"border-surface-border hover:border-text-tertiary cursor-pointer"}`,children:[e.jsx("span",{className:`text-xs font-medium ${d?"text-accent":"text-text-primary"}`,children:a.label}),e.jsx("span",{className:"block text-[10px] text-text-tertiary mt-0.5",children:a.hint})]},a.value)})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Name"}),e.jsx("input",{type:"text",value:s.name,onChange:a=>t("name",a.target.value),placeholder:"e.g., vision-server",className:"input text-xs w-full",disabled:r})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Description"}),e.jsx("input",{type:"text",value:s.description,onChange:a=>t("description",a.target.value),placeholder:"Optional description",className:"input text-xs w-full"})]})]}),s.mode==="in-process"&&e.jsx("div",{children:e.jsx("p",{className:h,children:"This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed."})}),s.mode==="network"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Server URL"}),e.jsx("input",{type:"text",value:s.url,onChange:a=>t("url",a.target.value),placeholder:"https://mcp-server.example.com/sse",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Transport Protocol"}),e.jsx("div",{className:"flex gap-2 mt-1",children:["sse","streamable-http"].map(a=>e.jsx("button",{type:"button",onClick:()=>t("transport_type",a),className:`px-3 py-1.5 text-xs rounded-md border transition-colors ${s.transport_type===a?"border-accent bg-accent/5 text-accent font-medium":"border-surface-border text-text-secondary hover:border-text-tertiary"}`,children:a==="sse"?"SSE":"Streamable HTTP"},a))})]})]}),s.mode==="local-process"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Command"}),e.jsx("input",{type:"text",value:s.command,onChange:a=>t("command",a.target.value),placeholder:"e.g., npx",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Arguments (comma-separated)"}),e.jsx("input",{type:"text",value:s.args,onChange:a=>t("args",a.target.value),placeholder:"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Environment Variables (JSON)"}),e.jsx("textarea",{value:s.env_vars,onChange:a=>t("env_vars",a.target.value),className:"input-json w-full",rows:3,spellCheck:!1})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.auto_connect,onChange:a=>t("auto_connect",a.target.checked),className:"w-4 h-4 rounded border-border accent-accent"}),e.jsx("span",{className:"text-xs text-text-primary",children:"Auto-connect on startup"})]})]})}function te({form:s,set:t}){const[r,a]=u.useState(""),d=n=>{const i=n.trim().toLowerCase();i&&!s.credential_providers.includes(i)&&t("credential_providers",[...s.credential_providers,i]),a("")},l=n=>{t("credential_providers",s.credential_providers.filter(i=>i!==n))},p=n=>{n.key==="Enter"||n.key===","?(n.preventDefault(),d(r)):n.key==="Backspace"&&!r&&s.credential_providers.length>0&&l(s.credential_providers[s.credential_providers.length-1])};return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Tags"}),e.jsx(Y,{tags:s.tags,onChange:n=>t("tags",n),placeholder:"Add tag (e.g., database, analytics)..."}),e.jsx("p",{className:h,children:"Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools."})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Compile Hints"}),e.jsx("textarea",{value:s.compile_hints,onChange:n=>t("compile_hints",n.target.value),placeholder:"Guidance for the workflow compiler when generating YAML from this server's tools...",className:"input text-xs w-full leading-relaxed",rows:4,spellCheck:!1}),e.jsx("p",{className:h,children:"Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized."})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Credential Providers"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary",children:[s.credential_providers.map(n=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[n,e.jsx("button",{type:"button",onClick:()=>l(n),className:"hover:text-status-error transition-colors",children:e.jsx(q,{className:"w-2.5 h-2.5"})})]},n)),e.jsx("input",{type:"text",value:r,onChange:n=>a(n.target.value),onKeyDown:p,onBlur:()=>{r.trim()&&d(r)},placeholder:s.credential_providers.length===0?"Add provider (e.g., github, slack)...":"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"})]}),e.jsx("p",{className:h,children:"IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution."})]})]})}function ae({form:s,set:t}){const r=H(),a=s.mode==="in-process",d=()=>{const n=M(s);r.mutate({transport_type:n.transport_type,transport_config:n.transport_config},{onSuccess:i=>{i.success&&t("discovered_tools",i.tools)}})},l=r.data,p=s.discovered_tools??(l==null?void 0:l.tools)??[];return e.jsx("div",{className:"space-y-5",children:a?e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-text-secondary",children:"In-process servers connect lazily on first tool call. No connection test needed."}),s.discovered_tools&&s.discovered_tools.length>0&&e.jsxs("div",{className:"mt-4",children:[e.jsxs("p",{className:"text-xs text-text-tertiary mb-2",children:[s.discovered_tools.length," tool",s.discovered_tools.length!==1?"s":""," cached from last connection"]}),e.jsx(I,{tools:s.discovered_tools})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("button",{type:"button",onClick:d,disabled:r.isPending,className:"btn-primary text-xs",children:r.isPending?e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(K,{className:"w-3 h-3 animate-spin"}),"Connecting..."]}):"Test Connection"}),(l==null?void 0:l.success)&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-status-success",children:[e.jsx(V,{className:"w-3.5 h-3.5"}),"Connected — ",p.length," tool",p.length!==1?"s":""," discovered"]}),l&&!l.success&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-status-error",children:[e.jsx(X,{className:"w-3.5 h-3.5"}),l.error||"Connection failed"]})]}),p.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-text-tertiary mb-2",children:"Discovered tools"}),e.jsx(I,{tools:p})]}),e.jsx("p",{className:h,children:"Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine."})]})})}function I({tools:s}){return e.jsx("div",{className:"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border",children:s.map(t=>e.jsxs("div",{className:"px-3 py-2",children:[e.jsx("span",{className:"text-xs font-medium text-text-primary font-mono",children:t.name}),t.description&&e.jsx("span",{className:"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2",children:t.description})]},t.name))})}const re={"in-process":"In-Process",network:"Network Service","local-process":"Local Process"},ne={stdio:"stdio",sse:"SSE","streamable-http":"Streamable HTTP"};function le({form:s}){const t=s.discovered_tools??[];return e.jsxs("div",{className:"space-y-4",children:[e.jsx(x,{label:"Name",value:s.name}),s.description&&e.jsx(x,{label:"Description",value:s.description}),e.jsx(x,{label:"Mode",value:re[s.mode]??s.mode}),s.mode==="network"&&e.jsxs(e.Fragment,{children:[e.jsx(x,{label:"Transport",value:ne[s.transport_type]??s.transport_type}),e.jsx(x,{label:"URL",value:s.url,mono:!0})]}),s.mode==="local-process"&&e.jsxs(e.Fragment,{children:[e.jsx(x,{label:"Command",value:s.command,mono:!0}),s.args&&e.jsx(x,{label:"Args",value:s.args,mono:!0})]}),e.jsx(x,{label:"Auto-connect",value:s.auto_connect?"Yes":"No"}),s.tags.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Tags"}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.tags.map(r=>e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:r},r))})]}),s.credential_providers.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Credential Providers"}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.credential_providers.map(r=>e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:r},r))})]}),s.compile_hints&&e.jsx(x,{label:"Compile Hints",value:s.compile_hints}),t.length>0&&e.jsx(x,{label:"Discovered Tools",value:`${t.length} tool${t.length!==1?"s":""}`})]})}function x({label:s,value:t,mono:r}){return e.jsxs("div",{children:[e.jsx("label",{className:c,children:s}),e.jsx("p",{className:`text-xs text-text-primary mt-0.5 ${r?"font-mono":""}`,children:t})]})}function ve(){var C,k,P;const{serverId:s}=G(),t=!s,r=W(),{data:a,isLoading:d}=$(s??""),l=O(),p=U(),[n,i]=u.useState(T),[N,y]=u.useState(!1),[R,_]=u.useState(""),[D,f]=Q(),o=parseInt(D.get("step")||"1",10),j=u.useCallback(m=>{f(v=>{const g=new URLSearchParams(v);return g.set("step",String(m)),g},{replace:!1})},[f]);u.useEffect(()=>{if(!N){if(t){i(T),y(!0);return}a&&(i(Z(a)),y(!0))}},[a,t,N]);const b=(m,v)=>i(g=>({...g,[m]:v})),A=!!((C=a==null?void 0:a.transport_config)!=null&&C.builtin),F=()=>{_("");const m=M(n);a?p.mutate({id:a.id,...m},{onSuccess:()=>r("/mcp/servers")}):l.mutate(m,{onSuccess:()=>r("/mcp/servers"),onError:v=>_(v.message)})};if(!t&&d)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-60 bg-surface-sunken rounded"})]});if(!t&&!a&&!d)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Server not found."});const B=o===L.length,w=l.isPending||p.isPending,S=R||((k=l.error)==null?void 0:k.message)||((P=p.error)==null?void 0:P.message);return e.jsxs("div",{children:[e.jsx(J,{title:t?"Register MCP Server":(a==null?void 0:a.name)??""}),e.jsxs("div",{className:"max-w-3xl",children:[e.jsx(z,{steps:L,currentStep:o-1,onStepClick:m=>j(m+1)}),e.jsxs("div",{className:"min-h-[360px] py-2",children:[o===1&&e.jsx(se,{form:n,set:b,isBuiltin:A}),o===2&&e.jsx(te,{form:n,set:b}),o===3&&e.jsx(ae,{form:n,set:b}),o===4&&e.jsx(le,{form:n})]}),S&&e.jsx("p",{className:"text-xs text-status-error mt-4",children:S}),e.jsxs("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsx("div",{children:o>1&&e.jsx("button",{onClick:()=>j(o-1),className:"btn-secondary text-xs",children:"Back"})}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx("button",{onClick:()=>r("/mcp/servers"),className:"btn-ghost text-xs",children:"Cancel"}),B?e.jsx("button",{onClick:F,disabled:!E(o,n)||w,className:"btn-primary text-xs",children:w?"Saving...":a?"Save":"Register"}):e.jsx("button",{onClick:()=>j(o+1),disabled:!E(o,n),className:"btn-primary text-xs",children:"Next"})]})]})]})]})}export{ve as McpServerDetailPage};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{j as e,a as u}from"./vendor-query-B2UbickB.js";import{d as H,e as $,f as O,g as U}from"./mcp-CjXjDZI0.js";import{S as z}from"./StepIndicator-CuUIGxKk.js";import{P as J}from"./PageHeader-B_gV_jKk.js";import{T as Y}from"./TagInput-D3f11sbM.js";import{X as q,H as K,aj as V,ak as X}from"./vendor-icons-B_Yla7iD.js";import{e as G,c as W,f as Q}from"./vendor-react-CX88sFS5.js";import"./index-DZX-E_3q.js";const T={name:"",description:"",mode:"network",transport_type:"sse",command:"",args:"",env_vars:"{}",url:"",auto_connect:!1,tags:[],compile_hints:"",credential_providers:[],discovered_tools:null};function Z(s){const t=s.transport_config??{},r=!!t.builtin;let a="network";return r?a="in-process":s.transport_type==="stdio"&&(a="local-process"),{name:s.name,description:s.description??"",mode:a,transport_type:s.transport_type,command:t.command??"",args:(t.args??[]).join(", "),env_vars:t.env?JSON.stringify(t.env,null,2):"{}",url:t.url??"",auto_connect:s.auto_connect,tags:s.tags??[],compile_hints:s.compile_hints??"",credential_providers:s.credential_providers??[],discovered_tools:s.tool_manifest??null}}function M(s){let t={};return s.mode==="local-process"?t={command:s.command.trim(),args:s.args.split(",").map(r=>r.trim()).filter(Boolean),env:s.env_vars.trim()?JSON.parse(s.env_vars):void 0}:s.mode==="network"&&(t={url:s.url.trim()}),{name:s.name.trim(),description:s.description.trim()||void 0,transport_type:s.mode==="local-process"?"stdio":s.transport_type,transport_config:t,auto_connect:s.auto_connect,tags:s.tags,compile_hints:s.compile_hints.trim()||void 0,credential_providers:s.credential_providers.length>0?s.credential_providers:void 0}}const L=["Transport","Discovery","Test","Review"];function E(s,t){return s===1?!(!t.name.trim()||t.mode==="network"&&!t.url.trim()||t.mode==="local-process"&&!t.command.trim()):!0}const c="label",h="hint",ee=[{value:"in-process",label:"In-Process",hint:"Built-in server running inside the app"},{value:"network",label:"Network Service",hint:"Remote server via SSE or Streamable HTTP"},{value:"local-process",label:"Local Process",hint:"Spawn a local command via stdio"}];function se({form:s,set:t,isBuiltin:r}){return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Connection Mode"}),e.jsx("div",{className:"grid grid-cols-3 gap-3 mt-1",children:ee.map(a=>{const d=s.mode===a.value,l=r&&a.value!=="in-process";return e.jsxs("button",{type:"button",disabled:l,onClick:()=>{t("mode",a.value),a.value==="local-process"&&t("transport_type","stdio"),a.value==="network"&&t("transport_type","sse")},className:`text-left p-3 rounded-md border transition-colors ${d?"border-accent bg-accent/5":l?"border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed":"border-surface-border hover:border-text-tertiary cursor-pointer"}`,children:[e.jsx("span",{className:`text-xs font-medium ${d?"text-accent":"text-text-primary"}`,children:a.label}),e.jsx("span",{className:"block text-[10px] text-text-tertiary mt-0.5",children:a.hint})]},a.value)})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Name"}),e.jsx("input",{type:"text",value:s.name,onChange:a=>t("name",a.target.value),placeholder:"e.g., vision-server",className:"input text-xs w-full",disabled:r})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Description"}),e.jsx("input",{type:"text",value:s.description,onChange:a=>t("description",a.target.value),placeholder:"Optional description",className:"input text-xs w-full"})]})]}),s.mode==="in-process"&&e.jsx("div",{children:e.jsx("p",{className:h,children:"This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed."})}),s.mode==="network"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Server URL"}),e.jsx("input",{type:"text",value:s.url,onChange:a=>t("url",a.target.value),placeholder:"https://mcp-server.example.com/sse",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Transport Protocol"}),e.jsx("div",{className:"flex gap-2 mt-1",children:["sse","streamable-http"].map(a=>e.jsx("button",{type:"button",onClick:()=>t("transport_type",a),className:`px-3 py-1.5 text-xs rounded-md border transition-colors ${s.transport_type===a?"border-accent bg-accent/5 text-accent font-medium":"border-surface-border text-text-secondary hover:border-text-tertiary"}`,children:a==="sse"?"SSE":"Streamable HTTP"},a))})]})]}),s.mode==="local-process"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Command"}),e.jsx("input",{type:"text",value:s.command,onChange:a=>t("command",a.target.value),placeholder:"e.g., npx",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Arguments (comma-separated)"}),e.jsx("input",{type:"text",value:s.args,onChange:a=>t("args",a.target.value),placeholder:"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp",className:"input text-xs w-full font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Environment Variables (JSON)"}),e.jsx("textarea",{value:s.env_vars,onChange:a=>t("env_vars",a.target.value),className:"input-json w-full",rows:3,spellCheck:!1})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.auto_connect,onChange:a=>t("auto_connect",a.target.checked),className:"w-4 h-4 rounded border-border accent-accent"}),e.jsx("span",{className:"text-xs text-text-primary",children:"Auto-connect on startup"})]})]})}function te({form:s,set:t}){const[r,a]=u.useState(""),d=n=>{const i=n.trim().toLowerCase();i&&!s.credential_providers.includes(i)&&t("credential_providers",[...s.credential_providers,i]),a("")},l=n=>{t("credential_providers",s.credential_providers.filter(i=>i!==n))},p=n=>{n.key==="Enter"||n.key===","?(n.preventDefault(),d(r)):n.key==="Backspace"&&!r&&s.credential_providers.length>0&&l(s.credential_providers[s.credential_providers.length-1])};return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Tags"}),e.jsx(Y,{tags:s.tags,onChange:n=>t("tags",n),placeholder:"Add tag (e.g., database, analytics)..."}),e.jsx("p",{className:h,children:"Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools."})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Compile Hints"}),e.jsx("textarea",{value:s.compile_hints,onChange:n=>t("compile_hints",n.target.value),placeholder:"Guidance for the workflow compiler when generating YAML from this server's tools...",className:"input text-xs w-full leading-relaxed",rows:4,spellCheck:!1}),e.jsx("p",{className:h,children:"Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized."})]}),e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Credential Providers"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary",children:[s.credential_providers.map(n=>e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[n,e.jsx("button",{type:"button",onClick:()=>l(n),className:"hover:text-status-error transition-colors",children:e.jsx(q,{className:"w-2.5 h-2.5"})})]},n)),e.jsx("input",{type:"text",value:r,onChange:n=>a(n.target.value),onKeyDown:p,onBlur:()=>{r.trim()&&d(r)},placeholder:s.credential_providers.length===0?"Add provider (e.g., github, slack)...":"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"})]}),e.jsx("p",{className:h,children:"IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution."})]})]})}function ae({form:s,set:t}){const r=H(),a=s.mode==="in-process",d=()=>{const n=M(s);r.mutate({transport_type:n.transport_type,transport_config:n.transport_config},{onSuccess:i=>{i.success&&t("discovered_tools",i.tools)}})},l=r.data,p=s.discovered_tools??(l==null?void 0:l.tools)??[];return e.jsx("div",{className:"space-y-5",children:a?e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-text-secondary",children:"In-process servers connect lazily on first tool call. No connection test needed."}),s.discovered_tools&&s.discovered_tools.length>0&&e.jsxs("div",{className:"mt-4",children:[e.jsxs("p",{className:"text-xs text-text-tertiary mb-2",children:[s.discovered_tools.length," tool",s.discovered_tools.length!==1?"s":""," cached from last connection"]}),e.jsx(I,{tools:s.discovered_tools})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("button",{type:"button",onClick:d,disabled:r.isPending,className:"btn-primary text-xs",children:r.isPending?e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(K,{className:"w-3 h-3 animate-spin"}),"Connecting..."]}):"Test Connection"}),(l==null?void 0:l.success)&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-status-success",children:[e.jsx(V,{className:"w-3.5 h-3.5"}),"Connected — ",p.length," tool",p.length!==1?"s":""," discovered"]}),l&&!l.success&&e.jsxs("span",{className:"flex items-center gap-1 text-xs text-status-error",children:[e.jsx(X,{className:"w-3.5 h-3.5"}),l.error||"Connection failed"]})]}),p.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-xs text-text-tertiary mb-2",children:"Discovered tools"}),e.jsx(I,{tools:p})]}),e.jsx("p",{className:h,children:"Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine."})]})})}function I({tools:s}){return e.jsx("div",{className:"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border",children:s.map(t=>e.jsxs("div",{className:"px-3 py-2",children:[e.jsx("span",{className:"text-xs font-medium text-text-primary font-mono",children:t.name}),t.description&&e.jsx("span",{className:"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2",children:t.description})]},t.name))})}const re={"in-process":"In-Process",network:"Network Service","local-process":"Local Process"},ne={stdio:"stdio",sse:"SSE","streamable-http":"Streamable HTTP"};function le({form:s}){const t=s.discovered_tools??[];return e.jsxs("div",{className:"space-y-4",children:[e.jsx(x,{label:"Name",value:s.name}),s.description&&e.jsx(x,{label:"Description",value:s.description}),e.jsx(x,{label:"Mode",value:re[s.mode]??s.mode}),s.mode==="network"&&e.jsxs(e.Fragment,{children:[e.jsx(x,{label:"Transport",value:ne[s.transport_type]??s.transport_type}),e.jsx(x,{label:"URL",value:s.url,mono:!0})]}),s.mode==="local-process"&&e.jsxs(e.Fragment,{children:[e.jsx(x,{label:"Command",value:s.command,mono:!0}),s.args&&e.jsx(x,{label:"Args",value:s.args,mono:!0})]}),e.jsx(x,{label:"Auto-connect",value:s.auto_connect?"Yes":"No"}),s.tags.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Tags"}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.tags.map(r=>e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:r},r))})]}),s.credential_providers.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:c,children:"Credential Providers"}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.credential_providers.map(r=>e.jsx("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:r},r))})]}),s.compile_hints&&e.jsx(x,{label:"Compile Hints",value:s.compile_hints}),t.length>0&&e.jsx(x,{label:"Discovered Tools",value:`${t.length} tool${t.length!==1?"s":""}`})]})}function x({label:s,value:t,mono:r}){return e.jsxs("div",{children:[e.jsx("label",{className:c,children:s}),e.jsx("p",{className:`text-xs text-text-primary mt-0.5 ${r?"font-mono":""}`,children:t})]})}function ve(){var C,k,P;const{serverId:s}=G(),t=!s,r=W(),{data:a,isLoading:d}=$(s??""),l=O(),p=U(),[n,i]=u.useState(T),[N,y]=u.useState(!1),[R,_]=u.useState(""),[D,f]=Q(),o=parseInt(D.get("step")||"1",10),j=u.useCallback(m=>{f(v=>{const g=new URLSearchParams(v);return g.set("step",String(m)),g},{replace:!1})},[f]);u.useEffect(()=>{if(!N){if(t){i(T),y(!0);return}a&&(i(Z(a)),y(!0))}},[a,t,N]);const b=(m,v)=>i(g=>({...g,[m]:v})),A=!!((C=a==null?void 0:a.transport_config)!=null&&C.builtin),F=()=>{_("");const m=M(n);a?p.mutate({id:a.id,...m},{onSuccess:()=>r("/mcp/servers")}):l.mutate(m,{onSuccess:()=>r("/mcp/servers"),onError:v=>_(v.message)})};if(!t&&d)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-60 bg-surface-sunken rounded"})]});if(!t&&!a&&!d)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Server not found."});const B=o===L.length,w=l.isPending||p.isPending,S=R||((k=l.error)==null?void 0:k.message)||((P=p.error)==null?void 0:P.message);return e.jsxs("div",{children:[e.jsx(J,{title:t?"Register MCP Server":(a==null?void 0:a.name)??""}),e.jsxs("div",{className:"max-w-3xl",children:[e.jsx(z,{steps:L,currentStep:o-1,onStepClick:m=>j(m+1)}),e.jsxs("div",{className:"min-h-[360px] py-2",children:[o===1&&e.jsx(se,{form:n,set:b,isBuiltin:A}),o===2&&e.jsx(te,{form:n,set:b}),o===3&&e.jsx(ae,{form:n,set:b}),o===4&&e.jsx(le,{form:n})]}),S&&e.jsx("p",{className:"text-xs text-status-error mt-4",children:S}),e.jsxs("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsx("div",{children:o>1&&e.jsx("button",{onClick:()=>j(o-1),className:"btn-secondary text-xs",children:"Back"})}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx("button",{onClick:()=>r("/mcp/servers"),className:"btn-ghost text-xs",children:"Cancel"}),B?e.jsx("button",{onClick:F,disabled:!E(o,n)||w,className:"btn-primary text-xs",children:w?"Saving...":a?"Save":"Register"}):e.jsx("button",{onClick:()=>j(o+1),disabled:!E(o,n),className:"btn-primary text-xs",children:"Next"})]})]})]})]})}export{ve as McpServerDetailPage};
|
|
2
|
+
//# sourceMappingURL=index-BxOuF0hm.js.map
|