@hotmeshio/long-tail 0.1.15 → 0.1.16
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 +0 -3
- package/build/api/yaml-workflows/crud.js +25 -5
- package/build/index.d.ts +1 -1
- package/build/lib/db/schemas/schemas/001_schema.sql +485 -0
- package/build/lib/db/schemas/schemas/002_seed.sql +92 -0
- package/build/lib/events/socketio.d.ts +12 -0
- package/build/lib/events/socketio.js +24 -1
- package/build/routes/index.js +2 -0
- package/build/routes/nats-credentials.d.ts +2 -0
- package/build/routes/nats-credentials.js +22 -0
- package/build/services/yaml-workflow/workers/register.js +4 -2
- package/build/start/adapters.js +4 -1
- package/build/start/socket-auth.d.ts +13 -0
- package/build/start/socket-auth.js +32 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-NLryl1_B.js → AdminDashboard-Bprul9Eb.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-NLryl1_B.js.map → AdminDashboard-Bprul9Eb.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-6vexlrk3.js → AvailableEscalationsPage-H_z5mC10.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-6vexlrk3.js.map → AvailableEscalationsPage-H_z5mC10.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-DWhn0tr1.js → BotPicker-DcvILNUf.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-DWhn0tr1.js.map → BotPicker-DcvILNUf.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-CgYgQiOc.js → CollapsibleSection-BWPbzgEe.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-CgYgQiOc.js.map → CollapsibleSection-BWPbzgEe.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DCKAPXD3.js → ConfirmDeleteModal-Cy6KVLfC.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DCKAPXD3.js.map → ConfirmDeleteModal-Cy6KVLfC.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DXkaAOYk.js → CopyableId-CRED8hvk.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DXkaAOYk.js.map → CopyableId-CRED8hvk.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-B361BOfU.js → CredentialsPage-BUdvxiE3.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-B361BOfU.js.map → CredentialsPage-BUdvxiE3.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-D2G1ldiF.js → CustomDurationPicker-eOk2EqQ5.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-D2G1ldiF.js.map → CustomDurationPicker-eOk2EqQ5.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-DXSUbA26.js → DataTable-bd2PTBJd.js} +2 -2
- package/dashboard/dist/assets/{DataTable-DXSUbA26.js.map → DataTable-bd2PTBJd.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-CQGqkXP_.js → ElapsedCell-BGo8vyus.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-CQGqkXP_.js.map → ElapsedCell-BGo8vyus.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-Dep92Wkg.js → EmptyState-BygtU-Rh.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-Dep92Wkg.js.map → EmptyState-BygtU-Rh.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DVEFVjs7.js → EscalationsOverview-DUEcN5MP.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DVEFVjs7.js.map → EscalationsOverview-DUEcN5MP.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-BMJAPkMi.js → EventTable-CmFhswLW.js} +2 -2
- package/dashboard/dist/assets/{EventTable-BMJAPkMi.js.map → EventTable-CmFhswLW.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-DbVbCzH2.js → FilterBar-BQNzsd3A.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-DbVbCzH2.js.map → FilterBar-BQNzsd3A.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-0XNuXj0M.js → ListToolbar-OWOn-HiC.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-0XNuXj0M.js.map → ListToolbar-OWOn-HiC.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CeYnCzBN.js → McpOverview-OkEzvClD.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CeYnCzBN.js.map → McpOverview-OkEzvClD.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-t3qW3QNa.js → McpQueryDetailPage-C6Ih5sC_.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-t3qW3QNa.js.map → McpQueryDetailPage-C6Ih5sC_.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-CfUcdzaj.js → McpQueryPage-BAuOf5TL.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-CfUcdzaj.js.map → McpQueryPage-BAuOf5TL.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-CZtodW_Z.js → McpRunDetailPage-DMeiG4i_.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-CZtodW_Z.js.map → McpRunDetailPage-DMeiG4i_.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-Dzgq7HGt.js → McpRunsPage-CG3cNJh8.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-Dzgq7HGt.js.map → McpRunsPage-CG3cNJh8.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-yyhUeKoA.js → Modal-Dir9Rlnx.js} +2 -2
- package/dashboard/dist/assets/{Modal-yyhUeKoA.js.map → Modal-Dir9Rlnx.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-Ceh7OQtZ.js → OperatorDashboard-OqWC6Azy.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-Ceh7OQtZ.js.map → OperatorDashboard-OqWC6Azy.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-CZ9a8cpr.js → PageHeader-FJIemmrC.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-CZ9a8cpr.js.map → PageHeader-FJIemmrC.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BJuNs5NM.js → PageHeaderWithStats-Br5y9qNO.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BJuNs5NM.js.map → PageHeaderWithStats-Br5y9qNO.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-BrPikMFy.js → PriorityBadge-C7D5d_HY.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-BrPikMFy.js.map → PriorityBadge-C7D5d_HY.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-2miaYd8G.js → ProcessDetailPage-DZIP6grw.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-2miaYd8G.js.map → ProcessDetailPage-DZIP6grw.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DqpRDqjk.js → ProcessesListPage-BQoPYkeB.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DqpRDqjk.js.map → ProcessesListPage-BQoPYkeB.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-DxbJMfJu.js → RolePill-D6nMxMvp.js} +2 -2
- package/dashboard/dist/assets/{RolePill-DxbJMfJu.js.map → RolePill-D6nMxMvp.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-CYHRo21-.js → RolesPage-CwLnJFhy.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-CYHRo21-.js.map → RolesPage-CwLnJFhy.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-DurFwIwe.js → RowActions-JqgAB0p3.js} +2 -2
- package/dashboard/dist/assets/{RowActions-DurFwIwe.js.map → RowActions-JqgAB0p3.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-CNKraP6u.js → RunAsSelector-KAlKtitB.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-CNKraP6u.js.map → RunAsSelector-KAlKtitB.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-CKplpK3w.js → StatCard-B-WLhOaH.js} +2 -2
- package/dashboard/dist/assets/{StatCard-CKplpK3w.js.map → StatCard-B-WLhOaH.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-Dm0V1dNN.js → StatusBadge-DVCf2ncM.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-Dm0V1dNN.js.map → StatusBadge-DVCf2ncM.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-Dicx0WTZ.js → StepIndicator-D9Xvdf18.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-Dicx0WTZ.js.map → StepIndicator-D9Xvdf18.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-B2jYvU3-.js → StickyPagination-CJHMzYJj.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-B2jYvU3-.js.map → StickyPagination-CJHMzYJj.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-ClwumkT1.js → SwimlaneTimeline-YiXPDyEL.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-ClwumkT1.js.map → SwimlaneTimeline-YiXPDyEL.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CypDZ6Kl.js → TagInput-DcPnUnSJ.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CypDZ6Kl.js.map → TagInput-DcPnUnSJ.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-DooDNJGT.js → TaskDetailPage-DftmYWD7.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-DooDNJGT.js.map → TaskDetailPage-DftmYWD7.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-C1hZ-j31.js → TaskQueuePill-BzduBqwy.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-C1hZ-j31.js.map → TaskQueuePill-BzduBqwy.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-D7CdkAeg.js → TasksListPage-DeewV4Gp.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-D7CdkAeg.js.map → TasksListPage-DeewV4Gp.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-B5LXB2aj.js → TimeAgo-DJZq-e4R.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-B5LXB2aj.js.map → TimeAgo-DJZq-e4R.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-Crb9b0Gw.js → TimestampCell-Dx5uwGfS.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-Crb9b0Gw.js.map → TimestampCell-Dx5uwGfS.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-OPg-nkRa.js → UserName-CnGk7MgL.js} +2 -2
- package/dashboard/dist/assets/{UserName-OPg-nkRa.js.map → UserName-CnGk7MgL.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CcLVrs9b.js → WorkflowExecutionPage-CPQ0fIwf.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CcLVrs9b.js.map → WorkflowExecutionPage-CPQ0fIwf.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CCV4MMj7.js → WorkflowPill-BrD5d1AG.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CCV4MMj7.js.map → WorkflowPill-BrD5d1AG.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-DB1SncBi.js → WorkflowsDashboard-BzjhABZP.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DB1SncBi.js.map → WorkflowsDashboard-BzjhABZP.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-DvShiYJV.js → WorkflowsOverview-lBp2E6rN.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-DvShiYJV.js.map → WorkflowsOverview-lBp2E6rN.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-DCBoMeGI.js → YamlWorkflowsPage-C_MkAp2i.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-DCBoMeGI.js.map → YamlWorkflowsPage-C_MkAp2i.js.map} +1 -1
- package/dashboard/dist/assets/{bots-Dqos20NE.js → bots-fc_O_YIq.js} +2 -2
- package/dashboard/dist/assets/{bots-Dqos20NE.js.map → bots-fc_O_YIq.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-A0CsbvNV.js → escalation-BYhLYHBz.js} +2 -2
- package/dashboard/dist/assets/{escalation-A0CsbvNV.js.map → escalation-BYhLYHBz.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-BpBJN6k4.js → escalation-columns-DjJyuC1g.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-BpBJN6k4.js.map → escalation-columns-DjJyuC1g.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-CmznCuAx.js → helpers-CQG3Rh2y.js} +2 -2
- package/dashboard/dist/assets/{helpers-CmznCuAx.js.map → helpers-CQG3Rh2y.js.map} +1 -1
- package/dashboard/dist/assets/{index-C8-UaN4N.js → index-2nBhR7Dg.js} +2 -2
- package/dashboard/dist/assets/{index-C8-UaN4N.js.map → index-2nBhR7Dg.js.map} +1 -1
- package/dashboard/dist/assets/{index-DZHNte4o.js → index-4IUoh_hd.js} +2 -2
- package/dashboard/dist/assets/{index-DZHNte4o.js.map → index-4IUoh_hd.js.map} +1 -1
- package/dashboard/dist/assets/{index-BIeYV5QK.js → index-B2CqPzLK.js} +2 -2
- package/dashboard/dist/assets/{index-BIeYV5QK.js.map → index-B2CqPzLK.js.map} +1 -1
- package/dashboard/dist/assets/{index-ZjOUzWhc.js → index-B78xalb4.js} +2 -2
- package/dashboard/dist/assets/{index-ZjOUzWhc.js.map → index-B78xalb4.js.map} +1 -1
- package/dashboard/dist/assets/{index-CjxHCVxl.js → index-BI8r69O_.js} +2 -2
- package/dashboard/dist/assets/{index-CjxHCVxl.js.map → index-BI8r69O_.js.map} +1 -1
- package/dashboard/dist/assets/{index-t5frSddy.js → index-CUqCBBZG.js} +2 -2
- package/dashboard/dist/assets/{index-t5frSddy.js.map → index-CUqCBBZG.js.map} +1 -1
- package/dashboard/dist/assets/{index-Cr0Rqsj7.js → index-D51PaQZY.js} +2 -2
- package/dashboard/dist/assets/{index-Cr0Rqsj7.js.map → index-D51PaQZY.js.map} +1 -1
- package/dashboard/dist/assets/{index-XGOmZ117.js → index-DNtXXy1o.js} +2 -2
- package/dashboard/dist/assets/{index-XGOmZ117.js.map → index-DNtXXy1o.js.map} +1 -1
- package/dashboard/dist/assets/{index-VnYkWW8r.js → index-DR4qQvlW.js} +2 -2
- package/dashboard/dist/assets/{index-VnYkWW8r.js.map → index-DR4qQvlW.js.map} +1 -1
- package/dashboard/dist/assets/{index-CAj5LT9H.js → index-Dh0PCbR-.js} +2 -2
- package/dashboard/dist/assets/{index-CAj5LT9H.js.map → index-Dh0PCbR-.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYwD3kHN.js → index-KYpLvJKB.js} +2 -2
- package/dashboard/dist/assets/{index-BYwD3kHN.js.map → index-KYpLvJKB.js.map} +1 -1
- package/dashboard/dist/assets/{index-puKKZ5l8.js → index-sNrqYt0Q.js} +53 -53
- package/dashboard/dist/assets/index-sNrqYt0Q.js.map +1 -0
- package/dashboard/dist/assets/{mcp-DrWymhSu.js → mcp-D2XfRh8v.js} +2 -2
- package/dashboard/dist/assets/{mcp-DrWymhSu.js.map → mcp-D2XfRh8v.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js → mcp-query-CIx_mIC7.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BhUxVEMS.js.map → mcp-query-CIx_mIC7.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js → mcp-runs-C9_J4LIH.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DUfz4mLd.js.map → mcp-runs-C9_J4LIH.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-Cm6AY5sh.js → namespaces-BwMljx6f.js} +2 -2
- package/dashboard/dist/assets/{namespaces-Cm6AY5sh.js.map → namespaces-BwMljx6f.js.map} +1 -1
- package/dashboard/dist/assets/{roles-2v1Kc7BJ.js → roles-Bd_sTV6I.js} +2 -2
- package/dashboard/dist/assets/{roles-2v1Kc7BJ.js.map → roles-Bd_sTV6I.js.map} +1 -1
- package/dashboard/dist/assets/{settings-DTQNp6tH.js → settings-BCb8eFyA.js} +2 -2
- package/dashboard/dist/assets/{settings-DTQNp6tH.js.map → settings-BCb8eFyA.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-CS1rgG1s.js → tasks-Bq54qGGq.js} +2 -2
- package/dashboard/dist/assets/{tasks-CS1rgG1s.js.map → tasks-Bq54qGGq.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js → useEventHooks-BTbGf536.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-BjXX8x3a.js.map → useEventHooks-BTbGf536.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BeR-nVWQ.js → useYamlActivityEvents-CsYP09W5.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BeR-nVWQ.js.map → useYamlActivityEvents-CsYP09W5.js.map} +1 -1
- package/dashboard/dist/assets/{users-DYsdQ7Md.js → users-BTBhafGc.js} +2 -2
- package/dashboard/dist/assets/{users-DYsdQ7Md.js.map → users-BTBhafGc.js.map} +1 -1
- package/dashboard/dist/assets/{workflows-2QAXh3UD.js → workflows-BkzA4ahe.js} +2 -2
- package/dashboard/dist/assets/{workflows-2QAXh3UD.js.map → workflows-BkzA4ahe.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.js → yaml-workflows-Cs0EYp0F.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-sx8-UEE3.js.map → yaml-workflows-Cs0EYp0F.js.map} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/index-puKKZ5l8.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-VnYkWW8r.js","sources":["../../src/pages/mcp/servers/detail/server-form-types.ts","../../src/pages/mcp/servers/detail/TransportStep.tsx","../../src/pages/mcp/servers/detail/DiscoveryStep.tsx","../../src/pages/mcp/servers/detail/TestStep.tsx","../../src/pages/mcp/servers/detail/ReviewStep.tsx","../../src/pages/mcp/servers/detail/McpServerDetailPage.tsx"],"sourcesContent":["import type { McpServerRecord, McpToolManifest } from '../../../../api/types';\n\nexport interface ServerFormState {\n name: string;\n description: string;\n mode: 'in-process' | 'network' | 'local-process';\n transport_type: 'stdio' | 'sse' | 'streamable-http';\n // stdio fields\n command: string;\n args: string;\n env_vars: string;\n // network fields\n url: string;\n // shared\n auto_connect: boolean;\n tags: string[];\n compile_hints: string;\n credential_providers: string[];\n discovered_tools: McpToolManifest[] | null;\n}\n\nexport const EMPTY_FORM: ServerFormState = {\n name: '',\n description: '',\n mode: 'network',\n transport_type: 'sse',\n command: '',\n args: '',\n env_vars: '{}',\n url: '',\n auto_connect: false,\n tags: [],\n compile_hints: '',\n credential_providers: [],\n discovered_tools: null,\n};\n\nexport function serverToForm(s: McpServerRecord): ServerFormState {\n const config = s.transport_config ?? {};\n const isBuiltin = !!(config as any).builtin;\n\n let mode: ServerFormState['mode'] = 'network';\n if (isBuiltin) mode = 'in-process';\n else if (s.transport_type === 'stdio') mode = 'local-process';\n\n return {\n name: s.name,\n description: s.description ?? '',\n mode,\n transport_type: s.transport_type,\n command: (config as any).command ?? '',\n args: ((config as any).args ?? []).join(', '),\n env_vars: (config as any).env ? JSON.stringify((config as any).env, null, 2) : '{}',\n url: (config as any).url ?? '',\n auto_connect: s.auto_connect,\n tags: s.tags ?? [],\n compile_hints: (s as any).compile_hints ?? '',\n credential_providers: s.credential_providers ?? [],\n discovered_tools: s.tool_manifest ?? null,\n };\n}\n\nexport function formToPayload(form: ServerFormState) {\n let transport_config: Record<string, unknown> = {};\n\n if (form.mode === 'local-process') {\n transport_config = {\n command: form.command.trim(),\n args: form.args.split(',').map((a) => a.trim()).filter(Boolean),\n env: form.env_vars.trim() ? JSON.parse(form.env_vars) : undefined,\n };\n } else if (form.mode === 'network') {\n transport_config = { url: form.url.trim() };\n }\n // in-process: transport_config stays empty (server manages it)\n\n return {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n transport_type: form.mode === 'local-process' ? 'stdio' as const : form.transport_type,\n transport_config,\n auto_connect: form.auto_connect,\n tags: form.tags,\n compile_hints: form.compile_hints.trim() || undefined,\n credential_providers: form.credential_providers.length > 0 ? form.credential_providers : undefined,\n };\n}\n\nexport const STEP_LABELS = ['Transport', 'Discovery', 'Test', 'Review'];\n\nexport function isStepValid(step: number, form: ServerFormState): boolean {\n if (step === 1) {\n if (!form.name.trim()) return false;\n if (form.mode === 'network' && !form.url.trim()) return false;\n if (form.mode === 'local-process' && !form.command.trim()) return false;\n return true;\n }\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n isBuiltin: boolean;\n}\n\nconst modes = [\n { value: 'in-process', label: 'In-Process', hint: 'Built-in server running inside the app' },\n { value: 'network', label: 'Network Service', hint: 'Remote server via SSE or Streamable HTTP' },\n { value: 'local-process', label: 'Local Process', hint: 'Spawn a local command via stdio' },\n] as const;\n\nexport function TransportStep({ form, set, isBuiltin }: Props) {\n return (\n <div className=\"space-y-5\">\n {/* Mode selector */}\n <div>\n <label className={labelCls}>Connection Mode</label>\n <div className=\"grid grid-cols-3 gap-3 mt-1\">\n {modes.map((m) => {\n const active = form.mode === m.value;\n const disabled = isBuiltin && m.value !== 'in-process';\n return (\n <button\n key={m.value}\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n set('mode', m.value);\n if (m.value === 'local-process') set('transport_type', 'stdio');\n if (m.value === 'network') set('transport_type', 'sse');\n }}\n className={`text-left p-3 rounded-md border transition-colors ${\n active\n ? 'border-accent bg-accent/5'\n : disabled\n ? 'border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed'\n : 'border-surface-border hover:border-text-tertiary cursor-pointer'\n }`}\n >\n <span className={`text-xs font-medium ${active ? 'text-accent' : 'text-text-primary'}`}>\n {m.label}\n </span>\n <span className=\"block text-[10px] text-text-tertiary mt-0.5\">{m.hint}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Name + Description (always shown) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className={labelCls}>Name</label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value)}\n placeholder=\"e.g., vision-server\"\n className=\"input text-xs w-full\"\n disabled={isBuiltin}\n />\n </div>\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Optional description\"\n className=\"input text-xs w-full\"\n />\n </div>\n </div>\n\n {/* In-Process: read-only info */}\n {form.mode === 'in-process' && (\n <div>\n <p className={hintCls}>\n This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed.\n </p>\n </div>\n )}\n\n {/* Network: URL + transport toggle */}\n {form.mode === 'network' && (\n <>\n <div>\n <label className={labelCls}>Server URL</label>\n <input\n type=\"text\"\n value={form.url}\n onChange={(e) => set('url', e.target.value)}\n placeholder=\"https://mcp-server.example.com/sse\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Transport Protocol</label>\n <div className=\"flex gap-2 mt-1\">\n {(['sse', 'streamable-http'] as const).map((t) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => set('transport_type', t)}\n className={`px-3 py-1.5 text-xs rounded-md border transition-colors ${\n form.transport_type === t\n ? 'border-accent bg-accent/5 text-accent font-medium'\n : 'border-surface-border text-text-secondary hover:border-text-tertiary'\n }`}\n >\n {t === 'sse' ? 'SSE' : 'Streamable HTTP'}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* Local Process: command + args + env */}\n {form.mode === 'local-process' && (\n <>\n <div>\n <label className={labelCls}>Command</label>\n <input\n type=\"text\"\n value={form.command}\n onChange={(e) => set('command', e.target.value)}\n placeholder=\"e.g., npx\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Arguments (comma-separated)</label>\n <input\n type=\"text\"\n value={form.args}\n onChange={(e) => set('args', e.target.value)}\n placeholder=\"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Environment Variables (JSON)</label>\n <textarea\n value={form.env_vars}\n onChange={(e) => set('env_vars', e.target.value)}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={3}\n spellCheck={false}\n />\n </div>\n </>\n )}\n\n {/* Auto-connect */}\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.auto_connect}\n onChange={(e) => set('auto_connect', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary\">Auto-connect on startup</span>\n </label>\n </div>\n );\n}\n","import { useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { TagInput } from '../../../../components/common/form/TagInput';\nimport type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function DiscoveryStep({ form, set }: Props) {\n const [cpInput, setCpInput] = useState('');\n\n const addProvider = (raw: string) => {\n const v = raw.trim().toLowerCase();\n if (v && !form.credential_providers.includes(v)) {\n set('credential_providers', [...form.credential_providers, v]);\n }\n setCpInput('');\n };\n\n const removeProvider = (p: string) => {\n set('credential_providers', form.credential_providers.filter((x) => x !== p));\n };\n\n const handleCpKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addProvider(cpInput);\n } else if (e.key === 'Backspace' && !cpInput && form.credential_providers.length > 0) {\n removeProvider(form.credential_providers[form.credential_providers.length - 1]);\n }\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Tags */}\n <div>\n <label className={labelCls}>Tags</label>\n <TagInput\n tags={form.tags}\n onChange={(tags) => set('tags', tags)}\n placeholder=\"Add tag (e.g., database, analytics)...\"\n />\n <p className={hintCls}>\n Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools.\n </p>\n </div>\n\n {/* Compile Hints */}\n <div>\n <label className={labelCls}>Compile Hints</label>\n <textarea\n value={form.compile_hints}\n onChange={(e) => set('compile_hints', e.target.value)}\n placeholder=\"Guidance for the workflow compiler when generating YAML from this server's tools...\"\n className=\"input text-xs w-full leading-relaxed\"\n rows={4}\n spellCheck={false}\n />\n <p className={hintCls}>\n Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized.\n </p>\n </div>\n\n {/* Credential Providers */}\n <div>\n <label className={labelCls}>Credential Providers</label>\n <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\">\n {form.credential_providers.map((p) => (\n <span\n key={p}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {p}\n <button\n type=\"button\"\n onClick={() => removeProvider(p)}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n type=\"text\"\n value={cpInput}\n onChange={(e) => setCpInput(e.target.value)}\n onKeyDown={handleCpKey}\n onBlur={() => { if (cpInput.trim()) addProvider(cpInput); }}\n placeholder={form.credential_providers.length === 0 ? 'Add provider (e.g., github, slack)...' : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n <p className={hintCls}>\n IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution.\n </p>\n </div>\n </div>\n );\n}\n","import { CheckCircle2, XCircle, Loader2 } from 'lucide-react';\nimport { useTestConnection } from '../../../../api/mcp';\nimport type { ServerFormState } from './server-form-types';\nimport { formToPayload } from './server-form-types';\nimport { hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function TestStep({ form, set }: Props) {\n const test = useTestConnection();\n const isInProcess = form.mode === 'in-process';\n\n const handleTest = () => {\n const payload = formToPayload(form);\n test.mutate(\n { transport_type: payload.transport_type, transport_config: payload.transport_config },\n {\n onSuccess: (result) => {\n if (result.success) {\n set('discovered_tools', result.tools);\n }\n },\n },\n );\n };\n\n const result = test.data;\n const tools = form.discovered_tools ?? result?.tools ?? [];\n\n return (\n <div className=\"space-y-5\">\n {isInProcess ? (\n <div>\n <p className=\"text-sm text-text-secondary\">\n In-process servers connect lazily on first tool call. No connection test needed.\n </p>\n {form.discovered_tools && form.discovered_tools.length > 0 && (\n <div className=\"mt-4\">\n <p className=\"text-xs text-text-tertiary mb-2\">\n {form.discovered_tools.length} tool{form.discovered_tools.length !== 1 ? 's' : ''} cached from last connection\n </p>\n <ToolList tools={form.discovered_tools} />\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={test.isPending}\n className=\"btn-primary text-xs\"\n >\n {test.isPending ? (\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"w-3 h-3 animate-spin\" />\n Connecting...\n </span>\n ) : (\n 'Test Connection'\n )}\n </button>\n {result?.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-success\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n Connected — {tools.length} tool{tools.length !== 1 ? 's' : ''} discovered\n </span>\n )}\n {result && !result.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-error\">\n <XCircle className=\"w-3.5 h-3.5\" />\n {result.error || 'Connection failed'}\n </span>\n )}\n </div>\n\n {tools.length > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary mb-2\">Discovered tools</p>\n <ToolList tools={tools} />\n </div>\n )}\n\n <p className={hintCls}>\n Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine.\n </p>\n </>\n )}\n </div>\n );\n}\n\nfunction ToolList({ tools }: { tools: { name: string; description?: string }[] }) {\n return (\n <div className=\"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border\">\n {tools.map((t) => (\n <div key={t.name} className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-text-primary font-mono\">{t.name}</span>\n {t.description && (\n <span className=\"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2\">{t.description}</span>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n}\n\nconst modeLabels: Record<string, string> = {\n 'in-process': 'In-Process',\n 'network': 'Network Service',\n 'local-process': 'Local Process',\n};\n\nconst transportLabels: Record<string, string> = {\n stdio: 'stdio',\n sse: 'SSE',\n 'streamable-http': 'Streamable HTTP',\n};\n\nexport function ReviewStep({ form }: Props) {\n const tools = form.discovered_tools ?? [];\n\n return (\n <div className=\"space-y-4\">\n <Row label=\"Name\" value={form.name} />\n {form.description && <Row label=\"Description\" value={form.description} />}\n <Row label=\"Mode\" value={modeLabels[form.mode] ?? form.mode} />\n\n {form.mode === 'network' && (\n <>\n <Row label=\"Transport\" value={transportLabels[form.transport_type] ?? form.transport_type} />\n <Row label=\"URL\" value={form.url} mono />\n </>\n )}\n {form.mode === 'local-process' && (\n <>\n <Row label=\"Command\" value={form.command} mono />\n {form.args && <Row label=\"Args\" value={form.args} mono />}\n </>\n )}\n\n <Row label=\"Auto-connect\" value={form.auto_connect ? 'Yes' : 'No'} />\n\n {form.tags.length > 0 && (\n <div>\n <label className={labelCls}>Tags</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.tags.map((t) => (\n <span key={t} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.credential_providers.length > 0 && (\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.credential_providers.map((p) => (\n <span key={p} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {p}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.compile_hints && <Row label=\"Compile Hints\" value={form.compile_hints} />}\n\n {tools.length > 0 && (\n <Row label=\"Discovered Tools\" value={`${tools.length} tool${tools.length !== 1 ? 's' : ''}`} />\n )}\n </div>\n );\n}\n\nfunction Row({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div>\n <label className={labelCls}>{label}</label>\n <p className={`text-xs text-text-primary mt-0.5 ${mono ? 'font-mono' : ''}`}>{value}</p>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useMcpServer, useCreateMcpServer, useUpdateMcpServer } from '../../../../api/mcp';\nimport { StepIndicator } from '../../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../../components/common/layout/PageHeader';\nimport {\n EMPTY_FORM,\n serverToForm,\n formToPayload,\n STEP_LABELS,\n isStepValid,\n} from './server-form-types';\nimport type { ServerFormState } from './server-form-types';\nimport { TransportStep } from './TransportStep';\nimport { DiscoveryStep } from './DiscoveryStep';\nimport { TestStep } from './TestStep';\nimport { ReviewStep } from './ReviewStep';\n\nexport function McpServerDetailPage() {\n const { serverId } = useParams<{ serverId: string }>();\n const isNew = !serverId;\n const navigate = useNavigate();\n const { data: existing, isLoading } = useMcpServer(serverId ?? '');\n const createServer = useCreateMcpServer();\n const updateServer = useUpdateMcpServer();\n\n const [form, setForm] = useState<ServerFormState>(EMPTY_FORM);\n const [initialized, setInitialized] = useState(false);\n const [saveError, setSaveError] = useState('');\n\n // Step via URL search param\n const [searchParams, setSearchParams] = useSearchParams();\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n // Initialize form from existing record\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(EMPTY_FORM);\n setInitialized(true);\n return;\n }\n if (existing) {\n setForm(serverToForm(existing));\n setInitialized(true);\n }\n }, [existing, isNew, initialized]);\n\n const set = (field: keyof ServerFormState, value: any) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n const isBuiltin = !!(existing?.transport_config as any)?.builtin;\n\n // Save\n const handleSave = () => {\n setSaveError('');\n const payload = formToPayload(form);\n\n if (existing) {\n updateServer.mutate(\n { id: existing.id, ...payload },\n { onSuccess: () => navigate('/mcp/servers') },\n );\n } else {\n createServer.mutate(payload, {\n onSuccess: () => navigate('/mcp/servers'),\n onError: (err) => setSaveError(err.message),\n });\n }\n };\n\n if (!isNew && isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !existing && !isLoading) {\n return <p className=\"text-sm text-text-secondary\">Server not found.</p>;\n }\n\n const isLast = step === STEP_LABELS.length;\n const isPending = createServer.isPending || updateServer.isPending;\n const error = saveError || (createServer.error as Error | null)?.message || (updateServer.error as Error | null)?.message;\n\n return (\n <div>\n <PageHeader title={isNew ? 'Register MCP Server' : existing?.name ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <TransportStep form={form} set={set} isBuiltin={isBuiltin} />}\n {step === 2 && <DiscoveryStep form={form} set={set} />}\n {step === 3 && <TestStep form={form} set={set} />}\n {step === 4 && <ReviewStep form={form} />}\n </div>\n\n {error && (\n <p className=\"text-xs text-status-error mt-4\">{error}</p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button onClick={() => setStep(step - 1)} className=\"btn-secondary text-xs\">\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/mcp/servers')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Saving...' : existing ? 'Save' : 'Register'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["EMPTY_FORM","serverToForm","config","isBuiltin","mode","formToPayload","form","transport_config","a","STEP_LABELS","isStepValid","step","labelCls","hintCls","modes","TransportStep","set","jsxDEV","m","active","disabled","e","Fragment","t","DiscoveryStep","cpInput","setCpInput","useState","addProvider","raw","v","removeProvider","p","x","handleCpKey","TagInput","tags","X","TestStep","test","useTestConnection","isInProcess","handleTest","payload","result","tools","ToolList","Loader2","CheckCircle2","XCircle","modeLabels","transportLabels","ReviewStep","Row","label","value","mono","McpServerDetailPage","serverId","useParams","isNew","navigate","useNavigate","existing","isLoading","useMcpServer","createServer","useCreateMcpServer","updateServer","useUpdateMcpServer","setForm","initialized","setInitialized","saveError","setSaveError","searchParams","setSearchParams","useSearchParams","setStep","useCallback","s","prev","next","useEffect","field","f","_a","handleSave","err","isLast","isPending","error","_b","_c","PageHeader","StepIndicator","i"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-DR4qQvlW.js","sources":["../../src/pages/mcp/servers/detail/server-form-types.ts","../../src/pages/mcp/servers/detail/TransportStep.tsx","../../src/pages/mcp/servers/detail/DiscoveryStep.tsx","../../src/pages/mcp/servers/detail/TestStep.tsx","../../src/pages/mcp/servers/detail/ReviewStep.tsx","../../src/pages/mcp/servers/detail/McpServerDetailPage.tsx"],"sourcesContent":["import type { McpServerRecord, McpToolManifest } from '../../../../api/types';\n\nexport interface ServerFormState {\n name: string;\n description: string;\n mode: 'in-process' | 'network' | 'local-process';\n transport_type: 'stdio' | 'sse' | 'streamable-http';\n // stdio fields\n command: string;\n args: string;\n env_vars: string;\n // network fields\n url: string;\n // shared\n auto_connect: boolean;\n tags: string[];\n compile_hints: string;\n credential_providers: string[];\n discovered_tools: McpToolManifest[] | null;\n}\n\nexport const EMPTY_FORM: ServerFormState = {\n name: '',\n description: '',\n mode: 'network',\n transport_type: 'sse',\n command: '',\n args: '',\n env_vars: '{}',\n url: '',\n auto_connect: false,\n tags: [],\n compile_hints: '',\n credential_providers: [],\n discovered_tools: null,\n};\n\nexport function serverToForm(s: McpServerRecord): ServerFormState {\n const config = s.transport_config ?? {};\n const isBuiltin = !!(config as any).builtin;\n\n let mode: ServerFormState['mode'] = 'network';\n if (isBuiltin) mode = 'in-process';\n else if (s.transport_type === 'stdio') mode = 'local-process';\n\n return {\n name: s.name,\n description: s.description ?? '',\n mode,\n transport_type: s.transport_type,\n command: (config as any).command ?? '',\n args: ((config as any).args ?? []).join(', '),\n env_vars: (config as any).env ? JSON.stringify((config as any).env, null, 2) : '{}',\n url: (config as any).url ?? '',\n auto_connect: s.auto_connect,\n tags: s.tags ?? [],\n compile_hints: (s as any).compile_hints ?? '',\n credential_providers: s.credential_providers ?? [],\n discovered_tools: s.tool_manifest ?? null,\n };\n}\n\nexport function formToPayload(form: ServerFormState) {\n let transport_config: Record<string, unknown> = {};\n\n if (form.mode === 'local-process') {\n transport_config = {\n command: form.command.trim(),\n args: form.args.split(',').map((a) => a.trim()).filter(Boolean),\n env: form.env_vars.trim() ? JSON.parse(form.env_vars) : undefined,\n };\n } else if (form.mode === 'network') {\n transport_config = { url: form.url.trim() };\n }\n // in-process: transport_config stays empty (server manages it)\n\n return {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n transport_type: form.mode === 'local-process' ? 'stdio' as const : form.transport_type,\n transport_config,\n auto_connect: form.auto_connect,\n tags: form.tags,\n compile_hints: form.compile_hints.trim() || undefined,\n credential_providers: form.credential_providers.length > 0 ? form.credential_providers : undefined,\n };\n}\n\nexport const STEP_LABELS = ['Transport', 'Discovery', 'Test', 'Review'];\n\nexport function isStepValid(step: number, form: ServerFormState): boolean {\n if (step === 1) {\n if (!form.name.trim()) return false;\n if (form.mode === 'network' && !form.url.trim()) return false;\n if (form.mode === 'local-process' && !form.command.trim()) return false;\n return true;\n }\n return true;\n}\n\nexport const labelCls = 'block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1';\nexport const hintCls = 'text-[10px] text-text-tertiary mt-2 leading-relaxed';\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n isBuiltin: boolean;\n}\n\nconst modes = [\n { value: 'in-process', label: 'In-Process', hint: 'Built-in server running inside the app' },\n { value: 'network', label: 'Network Service', hint: 'Remote server via SSE or Streamable HTTP' },\n { value: 'local-process', label: 'Local Process', hint: 'Spawn a local command via stdio' },\n] as const;\n\nexport function TransportStep({ form, set, isBuiltin }: Props) {\n return (\n <div className=\"space-y-5\">\n {/* Mode selector */}\n <div>\n <label className={labelCls}>Connection Mode</label>\n <div className=\"grid grid-cols-3 gap-3 mt-1\">\n {modes.map((m) => {\n const active = form.mode === m.value;\n const disabled = isBuiltin && m.value !== 'in-process';\n return (\n <button\n key={m.value}\n type=\"button\"\n disabled={disabled}\n onClick={() => {\n set('mode', m.value);\n if (m.value === 'local-process') set('transport_type', 'stdio');\n if (m.value === 'network') set('transport_type', 'sse');\n }}\n className={`text-left p-3 rounded-md border transition-colors ${\n active\n ? 'border-accent bg-accent/5'\n : disabled\n ? 'border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed'\n : 'border-surface-border hover:border-text-tertiary cursor-pointer'\n }`}\n >\n <span className={`text-xs font-medium ${active ? 'text-accent' : 'text-text-primary'}`}>\n {m.label}\n </span>\n <span className=\"block text-[10px] text-text-tertiary mt-0.5\">{m.hint}</span>\n </button>\n );\n })}\n </div>\n </div>\n\n {/* Name + Description (always shown) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className={labelCls}>Name</label>\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => set('name', e.target.value)}\n placeholder=\"e.g., vision-server\"\n className=\"input text-xs w-full\"\n disabled={isBuiltin}\n />\n </div>\n <div>\n <label className={labelCls}>Description</label>\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Optional description\"\n className=\"input text-xs w-full\"\n />\n </div>\n </div>\n\n {/* In-Process: read-only info */}\n {form.mode === 'in-process' && (\n <div>\n <p className={hintCls}>\n This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed.\n </p>\n </div>\n )}\n\n {/* Network: URL + transport toggle */}\n {form.mode === 'network' && (\n <>\n <div>\n <label className={labelCls}>Server URL</label>\n <input\n type=\"text\"\n value={form.url}\n onChange={(e) => set('url', e.target.value)}\n placeholder=\"https://mcp-server.example.com/sse\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Transport Protocol</label>\n <div className=\"flex gap-2 mt-1\">\n {(['sse', 'streamable-http'] as const).map((t) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => set('transport_type', t)}\n className={`px-3 py-1.5 text-xs rounded-md border transition-colors ${\n form.transport_type === t\n ? 'border-accent bg-accent/5 text-accent font-medium'\n : 'border-surface-border text-text-secondary hover:border-text-tertiary'\n }`}\n >\n {t === 'sse' ? 'SSE' : 'Streamable HTTP'}\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n\n {/* Local Process: command + args + env */}\n {form.mode === 'local-process' && (\n <>\n <div>\n <label className={labelCls}>Command</label>\n <input\n type=\"text\"\n value={form.command}\n onChange={(e) => set('command', e.target.value)}\n placeholder=\"e.g., npx\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Arguments (comma-separated)</label>\n <input\n type=\"text\"\n value={form.args}\n onChange={(e) => set('args', e.target.value)}\n placeholder=\"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div>\n <label className={labelCls}>Environment Variables (JSON)</label>\n <textarea\n value={form.env_vars}\n onChange={(e) => set('env_vars', e.target.value)}\n className=\"input font-mono text-[11px] w-full leading-relaxed\"\n rows={3}\n spellCheck={false}\n />\n </div>\n </>\n )}\n\n {/* Auto-connect */}\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.auto_connect}\n onChange={(e) => set('auto_connect', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary\">Auto-connect on startup</span>\n </label>\n </div>\n );\n}\n","import { useState, type KeyboardEvent } from 'react';\nimport { X } from 'lucide-react';\nimport { TagInput } from '../../../../components/common/form/TagInput';\nimport type { ServerFormState } from './server-form-types';\nimport { labelCls, hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function DiscoveryStep({ form, set }: Props) {\n const [cpInput, setCpInput] = useState('');\n\n const addProvider = (raw: string) => {\n const v = raw.trim().toLowerCase();\n if (v && !form.credential_providers.includes(v)) {\n set('credential_providers', [...form.credential_providers, v]);\n }\n setCpInput('');\n };\n\n const removeProvider = (p: string) => {\n set('credential_providers', form.credential_providers.filter((x) => x !== p));\n };\n\n const handleCpKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addProvider(cpInput);\n } else if (e.key === 'Backspace' && !cpInput && form.credential_providers.length > 0) {\n removeProvider(form.credential_providers[form.credential_providers.length - 1]);\n }\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Tags */}\n <div>\n <label className={labelCls}>Tags</label>\n <TagInput\n tags={form.tags}\n onChange={(tags) => set('tags', tags)}\n placeholder=\"Add tag (e.g., database, analytics)...\"\n />\n <p className={hintCls}>\n Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools.\n </p>\n </div>\n\n {/* Compile Hints */}\n <div>\n <label className={labelCls}>Compile Hints</label>\n <textarea\n value={form.compile_hints}\n onChange={(e) => set('compile_hints', e.target.value)}\n placeholder=\"Guidance for the workflow compiler when generating YAML from this server's tools...\"\n className=\"input text-xs w-full leading-relaxed\"\n rows={4}\n spellCheck={false}\n />\n <p className={hintCls}>\n Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized.\n </p>\n </div>\n\n {/* Credential Providers */}\n <div>\n <label className={labelCls}>Credential Providers</label>\n <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\">\n {form.credential_providers.map((p) => (\n <span\n key={p}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\"\n >\n {p}\n <button\n type=\"button\"\n onClick={() => removeProvider(p)}\n className=\"hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n <input\n type=\"text\"\n value={cpInput}\n onChange={(e) => setCpInput(e.target.value)}\n onKeyDown={handleCpKey}\n onBlur={() => { if (cpInput.trim()) addProvider(cpInput); }}\n placeholder={form.credential_providers.length === 0 ? 'Add provider (e.g., github, slack)...' : ''}\n className=\"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary\"\n />\n </div>\n <p className={hintCls}>\n IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution.\n </p>\n </div>\n </div>\n );\n}\n","import { CheckCircle2, XCircle, Loader2 } from 'lucide-react';\nimport { useTestConnection } from '../../../../api/mcp';\nimport type { ServerFormState } from './server-form-types';\nimport { formToPayload } from './server-form-types';\nimport { hintCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n set: (field: keyof ServerFormState, value: any) => void;\n}\n\nexport function TestStep({ form, set }: Props) {\n const test = useTestConnection();\n const isInProcess = form.mode === 'in-process';\n\n const handleTest = () => {\n const payload = formToPayload(form);\n test.mutate(\n { transport_type: payload.transport_type, transport_config: payload.transport_config },\n {\n onSuccess: (result) => {\n if (result.success) {\n set('discovered_tools', result.tools);\n }\n },\n },\n );\n };\n\n const result = test.data;\n const tools = form.discovered_tools ?? result?.tools ?? [];\n\n return (\n <div className=\"space-y-5\">\n {isInProcess ? (\n <div>\n <p className=\"text-sm text-text-secondary\">\n In-process servers connect lazily on first tool call. No connection test needed.\n </p>\n {form.discovered_tools && form.discovered_tools.length > 0 && (\n <div className=\"mt-4\">\n <p className=\"text-xs text-text-tertiary mb-2\">\n {form.discovered_tools.length} tool{form.discovered_tools.length !== 1 ? 's' : ''} cached from last connection\n </p>\n <ToolList tools={form.discovered_tools} />\n </div>\n )}\n </div>\n ) : (\n <>\n <div className=\"flex items-center gap-3\">\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={test.isPending}\n className=\"btn-primary text-xs\"\n >\n {test.isPending ? (\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"w-3 h-3 animate-spin\" />\n Connecting...\n </span>\n ) : (\n 'Test Connection'\n )}\n </button>\n {result?.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-success\">\n <CheckCircle2 className=\"w-3.5 h-3.5\" />\n Connected — {tools.length} tool{tools.length !== 1 ? 's' : ''} discovered\n </span>\n )}\n {result && !result.success && (\n <span className=\"flex items-center gap-1 text-xs text-status-error\">\n <XCircle className=\"w-3.5 h-3.5\" />\n {result.error || 'Connection failed'}\n </span>\n )}\n </div>\n\n {tools.length > 0 && (\n <div>\n <p className=\"text-xs text-text-tertiary mb-2\">Discovered tools</p>\n <ToolList tools={tools} />\n </div>\n )}\n\n <p className={hintCls}>\n Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine.\n </p>\n </>\n )}\n </div>\n );\n}\n\nfunction ToolList({ tools }: { tools: { name: string; description?: string }[] }) {\n return (\n <div className=\"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border\">\n {tools.map((t) => (\n <div key={t.name} className=\"px-3 py-2\">\n <span className=\"text-xs font-medium text-text-primary font-mono\">{t.name}</span>\n {t.description && (\n <span className=\"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2\">{t.description}</span>\n )}\n </div>\n ))}\n </div>\n );\n}\n","import type { ServerFormState } from './server-form-types';\nimport { labelCls } from './server-form-types';\n\ninterface Props {\n form: ServerFormState;\n}\n\nconst modeLabels: Record<string, string> = {\n 'in-process': 'In-Process',\n 'network': 'Network Service',\n 'local-process': 'Local Process',\n};\n\nconst transportLabels: Record<string, string> = {\n stdio: 'stdio',\n sse: 'SSE',\n 'streamable-http': 'Streamable HTTP',\n};\n\nexport function ReviewStep({ form }: Props) {\n const tools = form.discovered_tools ?? [];\n\n return (\n <div className=\"space-y-4\">\n <Row label=\"Name\" value={form.name} />\n {form.description && <Row label=\"Description\" value={form.description} />}\n <Row label=\"Mode\" value={modeLabels[form.mode] ?? form.mode} />\n\n {form.mode === 'network' && (\n <>\n <Row label=\"Transport\" value={transportLabels[form.transport_type] ?? form.transport_type} />\n <Row label=\"URL\" value={form.url} mono />\n </>\n )}\n {form.mode === 'local-process' && (\n <>\n <Row label=\"Command\" value={form.command} mono />\n {form.args && <Row label=\"Args\" value={form.args} mono />}\n </>\n )}\n\n <Row label=\"Auto-connect\" value={form.auto_connect ? 'Yes' : 'No'} />\n\n {form.tags.length > 0 && (\n <div>\n <label className={labelCls}>Tags</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.tags.map((t) => (\n <span key={t} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.credential_providers.length > 0 && (\n <div>\n <label className={labelCls}>Credential Providers</label>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {form.credential_providers.map((p) => (\n <span key={p} className=\"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium\">\n {p}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {form.compile_hints && <Row label=\"Compile Hints\" value={form.compile_hints} />}\n\n {tools.length > 0 && (\n <Row label=\"Discovered Tools\" value={`${tools.length} tool${tools.length !== 1 ? 's' : ''}`} />\n )}\n </div>\n );\n}\n\nfunction Row({ label, value, mono }: { label: string; value: string; mono?: boolean }) {\n return (\n <div>\n <label className={labelCls}>{label}</label>\n <p className={`text-xs text-text-primary mt-0.5 ${mono ? 'font-mono' : ''}`}>{value}</p>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport { useMcpServer, useCreateMcpServer, useUpdateMcpServer } from '../../../../api/mcp';\nimport { StepIndicator } from '../../../../components/common/layout/StepIndicator';\nimport { PageHeader } from '../../../../components/common/layout/PageHeader';\nimport {\n EMPTY_FORM,\n serverToForm,\n formToPayload,\n STEP_LABELS,\n isStepValid,\n} from './server-form-types';\nimport type { ServerFormState } from './server-form-types';\nimport { TransportStep } from './TransportStep';\nimport { DiscoveryStep } from './DiscoveryStep';\nimport { TestStep } from './TestStep';\nimport { ReviewStep } from './ReviewStep';\n\nexport function McpServerDetailPage() {\n const { serverId } = useParams<{ serverId: string }>();\n const isNew = !serverId;\n const navigate = useNavigate();\n const { data: existing, isLoading } = useMcpServer(serverId ?? '');\n const createServer = useCreateMcpServer();\n const updateServer = useUpdateMcpServer();\n\n const [form, setForm] = useState<ServerFormState>(EMPTY_FORM);\n const [initialized, setInitialized] = useState(false);\n const [saveError, setSaveError] = useState('');\n\n // Step via URL search param\n const [searchParams, setSearchParams] = useSearchParams();\n const step = parseInt(searchParams.get('step') || '1', 10);\n const setStep = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: false });\n }, [setSearchParams]);\n\n // Initialize form from existing record\n useEffect(() => {\n if (initialized) return;\n if (isNew) {\n setForm(EMPTY_FORM);\n setInitialized(true);\n return;\n }\n if (existing) {\n setForm(serverToForm(existing));\n setInitialized(true);\n }\n }, [existing, isNew, initialized]);\n\n const set = (field: keyof ServerFormState, value: any) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n const isBuiltin = !!(existing?.transport_config as any)?.builtin;\n\n // Save\n const handleSave = () => {\n setSaveError('');\n const payload = formToPayload(form);\n\n if (existing) {\n updateServer.mutate(\n { id: existing.id, ...payload },\n { onSuccess: () => navigate('/mcp/servers') },\n );\n } else {\n createServer.mutate(payload, {\n onSuccess: () => navigate('/mcp/servers'),\n onError: (err) => setSaveError(err.message),\n });\n }\n };\n\n if (!isNew && isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!isNew && !existing && !isLoading) {\n return <p className=\"text-sm text-text-secondary\">Server not found.</p>;\n }\n\n const isLast = step === STEP_LABELS.length;\n const isPending = createServer.isPending || updateServer.isPending;\n const error = saveError || (createServer.error as Error | null)?.message || (updateServer.error as Error | null)?.message;\n\n return (\n <div>\n <PageHeader title={isNew ? 'Register MCP Server' : existing?.name ?? ''} />\n\n <div className=\"max-w-3xl\">\n <StepIndicator steps={STEP_LABELS} currentStep={step - 1} onStepClick={(i) => setStep(i + 1)} />\n\n <div className=\"min-h-[360px] py-2\">\n {step === 1 && <TransportStep form={form} set={set} isBuiltin={isBuiltin} />}\n {step === 2 && <DiscoveryStep form={form} set={set} />}\n {step === 3 && <TestStep form={form} set={set} />}\n {step === 4 && <ReviewStep form={form} />}\n </div>\n\n {error && (\n <p className=\"text-xs text-status-error mt-4\">{error}</p>\n )}\n\n {/* Navigation */}\n <div className=\"flex justify-between items-center pt-4 border-t border-surface-border mt-4\">\n <div>\n {step > 1 && (\n <button onClick={() => setStep(step - 1)} className=\"btn-secondary text-xs\">\n Back\n </button>\n )}\n </div>\n <div className=\"flex gap-3\">\n <button onClick={() => navigate('/mcp/servers')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n {isLast ? (\n <button\n onClick={handleSave}\n disabled={!isStepValid(step, form) || isPending}\n className=\"btn-primary text-xs\"\n >\n {isPending ? 'Saving...' : existing ? 'Save' : 'Register'}\n </button>\n ) : (\n <button\n onClick={() => setStep(step + 1)}\n disabled={!isStepValid(step, form)}\n className=\"btn-primary text-xs\"\n >\n Next\n </button>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["EMPTY_FORM","serverToForm","config","isBuiltin","mode","formToPayload","form","transport_config","a","STEP_LABELS","isStepValid","step","labelCls","hintCls","modes","TransportStep","set","jsxDEV","m","active","disabled","e","Fragment","t","DiscoveryStep","cpInput","setCpInput","useState","addProvider","raw","v","removeProvider","p","x","handleCpKey","TagInput","tags","X","TestStep","test","useTestConnection","isInProcess","handleTest","payload","result","tools","ToolList","Loader2","CheckCircle2","XCircle","modeLabels","transportLabels","ReviewStep","Row","label","value","mono","McpServerDetailPage","serverId","useParams","isNew","navigate","useNavigate","existing","isLoading","useMcpServer","createServer","useCreateMcpServer","updateServer","useUpdateMcpServer","setForm","initialized","setInitialized","saveError","setSaveError","searchParams","setSearchParams","useSearchParams","setStep","useCallback","s","prev","next","useEffect","field","f","_a","handleSave","err","isLast","isPending","error","_b","_c","PageHeader","StepIndicator","i"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as e}from"./index-puKKZ5l8.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{e as G,i as K,u as F,j as X,b as Z}from"./workflows-2QAXh3UD.js";import{D as ee}from"./DataTable-DXSUbA26.js";import{C as se}from"./ConfirmDeleteModal-DCKAPXD3.js";import{F as re,b as P}from"./FilterBar-DbVbCzH2.js";import{R as oe,a as _}from"./RowActions-DurFwIwe.js";import{u as ae}from"./useFilterParams-CGRYFw_A.js";import{P as U}from"./PageHeader-CZ9a8cpr.js";import{R as te}from"./RolePill-DxbJMfJu.js";import{T as ie}from"./TaskQueuePill-C1hZ-j31.js";import{W as le}from"./WorkflowPill-CCV4MMj7.js";import{a3 as ne,S as ce,W as me,a8 as de,a9 as ue,U as I,X as $,g as J,D as M,d as q}from"./vendor-icons-CWl44VA6.js";import{c as B,e as fe,f as pe}from"./vendor-react-Co3Y8ikm.js";import{S as he}from"./StepIndicator-Dicx0WTZ.js";import{u as be}from"./roles-2v1Kc7BJ.js";import{B as Ne}from"./BotPicker-DWhn0tr1.js";import"./EmptyState-Dep92Wkg.js";import"./Modal-yyhUeKoA.js";import"./bots-Dqos20NE.js";function ge(s,o){const l=o.toLowerCase();return s.workflow_type.toLowerCase().includes(l)||(s.description??"").toLowerCase().includes(l)}function Be(){const s=B(),{data:o,isLoading:l}=G(),d=K(),{filters:a,setFilter:n}=ae({filters:{search:"",queue:"",role:"",tier:""}}),[m,v]=u.useState(a.search),[p,y]=u.useState(null);u.useEffect(()=>{if(m===a.search)return;const r=setTimeout(()=>n("search",m),300);return()=>clearTimeout(r)},[m,n,a.search]);const i=o??[],f=u.useMemo(()=>[...new Set(i.map(r=>r.task_queue).filter(Boolean))].sort(),[i]),c=u.useMemo(()=>[...new Set(i.flatMap(r=>r.roles??[]))].sort(),[i]),t=u.useMemo(()=>{let r=i;return a.search&&(r=r.filter(b=>ge(b,a.search))),a.queue&&(r=r.filter(b=>b.task_queue===a.queue)),a.role&&(r=r.filter(b=>(b.roles??[]).includes(a.role))),a.tier&&(r=r.filter(b=>b.tier===a.tier)),r},[i,a]),D=[{key:"workflow_type",label:"Workflow",render:r=>e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV(le,{type:r.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:77,columnNumber:11},this),r.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:79,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:76,columnNumber:9},this)},{key:"task_queue",label:"Queue",render:r=>r.task_queue?e.jsxDEV(ie,{queue:r.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:41},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:84},this),className:"whitespace-nowrap"},{key:"tier",label:"Tier",render:r=>r.tier==="certified"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[e.jsxDEV(ne,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:166},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:46},this):r.tier==="configured"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-info/10 text-status-info",children:[e.jsxDEV(ce,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:177},this),"Configured"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:47},this):e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:96,columnNumber:16},this),className:"whitespace-nowrap"},{key:"roles",label:"Roles",render:r=>r.registered?e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:[(r.roles??[]).map(b=>e.jsxDEV(te,{role:b},b,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:106,columnNumber:13},this)),(!r.roles||r.roles.length===0)&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:108,columnNumber:54},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:104,columnNumber:9},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:111,columnNumber:9},this)},{key:"actions",label:"",render:r=>e.jsxDEV(oe,{children:[r.tier==="durable"&&e.jsxDEV(_,{icon:me,title:"Configure workflow",onClick:()=>s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`),colorClass:"text-text-tertiary hover:text-status-info"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:120,columnNumber:13},this),r.tier==="configured"&&e.jsxDEV(_,{icon:de,title:"Certify workflow",onClick:()=>s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:128,columnNumber:13},this),r.registered&&e.jsxDEV(_,{icon:ue,title:"Remove configuration",onClick:()=>y(r.workflow_type),colorClass:"text-text-tertiary hover:text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:136,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:118,columnNumber:9},this),className:"w-16 text-right"}],j=()=>{p&&d.mutate(p,{onSuccess:()=>y(null)})},E=r=>{r.registered?s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`):s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`)};return e.jsxDEV("div",{children:[e.jsxDEV(U,{title:"Workflow Registry",actions:e.jsxDEV("button",{onClick:()=>s("/workflows/registry/new"),className:"btn-primary text-xs",children:"Register Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:169,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:166,columnNumber:7},this),e.jsxDEV(re,{children:[e.jsxDEV("input",{type:"text",placeholder:"Search workflow type...",value:m,onChange:r=>v(r.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:179,columnNumber:9},this),e.jsxDEV(P,{label:"Queue",value:a.queue,onChange:r=>n("queue",r),options:f.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:186,columnNumber:9},this),e.jsxDEV(P,{label:"Tier",value:a.tier,onChange:r=>n("tier",r),options:[{value:"certified",label:"Certified"},{value:"configured",label:"Configured"},{value:"durable",label:"Durable"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:192,columnNumber:9},this),e.jsxDEV(P,{label:"Role",value:a.role,onChange:r=>n("role",r),options:c.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:202,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:178,columnNumber:7},this),e.jsxDEV(ee,{columns:D,data:t,keyFn:r=>r.workflow_type,onRowClick:E,isLoading:l,emptyMessage:"No workflows found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:210,columnNumber:7},this),e.jsxDEV(se,{open:!!p,onClose:()=>y(null),onConfirm:j,title:"De-certify Workflow",description:e.jsxDEV(e.Fragment,{children:["Remove certification from ",e.jsxDEV("span",{className:"font-mono font-medium text-text-primary",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:50},this),"? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:22},this),isPending:d.isPending,error:d.error},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:220,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:165,columnNumber:5},this)}function C(s){return s.split(",").map(o=>o.trim()).filter(Boolean)}const R={workflow_type:"",description:"",task_queue:"",default_role:"reviewer",invocable:!1,roles:"",invocation_roles:"",consumes:"",envelope_schema:"",resolver_schema:"",cron_schedule:"",execute_as:"",certified:!1};function xe(s){const o=(s.roles??[]).join(", "),l=(s.consumes??[]).join(", ");return{workflow_type:s.workflow_type,description:s.description??"",task_queue:s.task_queue??"",default_role:s.default_role,invocable:s.invocable,roles:o,invocation_roles:(s.invocation_roles??[]).join(", "),consumes:l,envelope_schema:s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):"",resolver_schema:s.resolver_schema?JSON.stringify(s.resolver_schema,null,2):"",cron_schedule:s.cron_schedule??"",execute_as:s.execute_as??"",certified:!!(o||l)}}const T=["Identity","Invocation","Advanced"];function V(s){if(!s.trim())return!0;try{return JSON.parse(s),!0}catch{return!1}}function L(s,o){return s===1?!!o.workflow_type.trim():s===2?V(o.envelope_schema):s===3?V(o.resolver_schema):!0}const k="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",g="text-[10px] text-text-tertiary mt-2 leading-relaxed",Q="input font-mono text-[11px] w-full leading-relaxed tabular-nums";function A({selected:s,onChange:o,single:l,placeholder:d}){const{data:a}=be(),n=(a==null?void 0:a.roles)??[],[m,v]=u.useState(!1),p=u.useRef(null);u.useEffect(()=>{const c=t=>{p.current&&!p.current.contains(t.target)&&v(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[]);const y=c=>{l?(o(s.includes(c)?[]:[c]),v(!1)):o(s.includes(c)?s.filter(t=>t!==c):[...s,c])},i=c=>{o(s.filter(t=>t!==c))},f=d??(l?"Select role...":"Add roles...");return e.jsxDEV("div",{ref:p,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>v(!m),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[s.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:f},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:55,columnNumber:11},this),s.map(c=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsxDEV(I,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:62,columnNumber:13},this),c,e.jsxDEV("span",{role:"button",onClick:t=>{t.stopPropagation(),i(c)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:69,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:64,columnNumber:13},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:58,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${m?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:49,columnNumber:7},this),m&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No roles defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:80,columnNumber:13},this):n.map(c=>{const t=s.includes(c);return e.jsxDEV("button",{type:"button",onClick:()=>y(c),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${t?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(I,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:95,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:96,columnNumber:19},this),t&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:97,columnNumber:34},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:85,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:78,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:47,columnNumber:5},this)}function we({options:s,selected:o,onChange:l,placeholder:d}){const[a,n]=u.useState(!1),m=u.useRef(null);u.useEffect(()=>{const i=f=>{m.current&&!m.current.contains(f.target)&&n(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[]);const v=i=>{l(o.includes(i)?o.filter(f=>f!==i):[...o,i])},p=i=>{l(o.filter(f=>f!==i))},y=d??"Add workflows...";return e.jsxDEV("div",{ref:m,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>n(!a),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[o.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:y},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:45,columnNumber:11},this),o.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono",children:[e.jsxDEV(q,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:52,columnNumber:13},this),i,e.jsxDEV("span",{role:"button",onClick:f=>{f.stopPropagation(),p(i)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:59,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:54,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:48,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${a?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:63,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:39,columnNumber:7},this),a&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:s.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No registered workflows"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:69,columnNumber:13},this):s.map(i=>{const f=o.includes(i);return e.jsxDEV("button",{type:"button",onClick:()=>v(i),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${f?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(q,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:84,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:i},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:85,columnNumber:19},this),f&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:86,columnNumber:34},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:74,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:38,columnNumber:5},this)}function z(s){return C(s)}function O(s){return s.join(", ")}function ke({form:s,set:o}){const{data:l}=F(),d=(l??[]).map(a=>a.workflow_type).filter(a=>a!==s.workflow_type);return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Resolver Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:31,columnNumber:9},this),e.jsxDEV("textarea",{value:s.resolver_schema,onChange:a=>o("resolver_schema",a.target.value),placeholder:`{
|
|
1
|
+
import{j as e}from"./index-sNrqYt0Q.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{e as G,i as K,u as F,j as X,b as Z}from"./workflows-BkzA4ahe.js";import{D as ee}from"./DataTable-bd2PTBJd.js";import{C as se}from"./ConfirmDeleteModal-Cy6KVLfC.js";import{F as re,b as P}from"./FilterBar-BQNzsd3A.js";import{R as oe,a as _}from"./RowActions-JqgAB0p3.js";import{u as ae}from"./useFilterParams-CGRYFw_A.js";import{P as U}from"./PageHeader-FJIemmrC.js";import{R as te}from"./RolePill-D6nMxMvp.js";import{T as ie}from"./TaskQueuePill-BzduBqwy.js";import{W as le}from"./WorkflowPill-BrD5d1AG.js";import{a3 as ne,S as ce,W as me,a8 as de,a9 as ue,U as I,X as $,g as J,D as M,d as q}from"./vendor-icons-CWl44VA6.js";import{c as B,e as fe,f as pe}from"./vendor-react-Co3Y8ikm.js";import{S as he}from"./StepIndicator-D9Xvdf18.js";import{u as be}from"./roles-Bd_sTV6I.js";import{B as Ne}from"./BotPicker-DcvILNUf.js";import"./EmptyState-BygtU-Rh.js";import"./Modal-Dir9Rlnx.js";import"./bots-fc_O_YIq.js";function ge(s,o){const l=o.toLowerCase();return s.workflow_type.toLowerCase().includes(l)||(s.description??"").toLowerCase().includes(l)}function Be(){const s=B(),{data:o,isLoading:l}=G(),d=K(),{filters:a,setFilter:n}=ae({filters:{search:"",queue:"",role:"",tier:""}}),[m,v]=u.useState(a.search),[p,y]=u.useState(null);u.useEffect(()=>{if(m===a.search)return;const r=setTimeout(()=>n("search",m),300);return()=>clearTimeout(r)},[m,n,a.search]);const i=o??[],f=u.useMemo(()=>[...new Set(i.map(r=>r.task_queue).filter(Boolean))].sort(),[i]),c=u.useMemo(()=>[...new Set(i.flatMap(r=>r.roles??[]))].sort(),[i]),t=u.useMemo(()=>{let r=i;return a.search&&(r=r.filter(b=>ge(b,a.search))),a.queue&&(r=r.filter(b=>b.task_queue===a.queue)),a.role&&(r=r.filter(b=>(b.roles??[]).includes(a.role))),a.tier&&(r=r.filter(b=>b.tier===a.tier)),r},[i,a]),D=[{key:"workflow_type",label:"Workflow",render:r=>e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV(le,{type:r.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:77,columnNumber:11},this),r.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 truncate",children:r.description},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:79,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:76,columnNumber:9},this)},{key:"task_queue",label:"Queue",render:r=>r.task_queue?e.jsxDEV(ie,{queue:r.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:41},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:87,columnNumber:84},this),className:"whitespace-nowrap"},{key:"tier",label:"Tier",render:r=>r.tier==="certified"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent",children:[e.jsxDEV(ne,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:166},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:94,columnNumber:46},this):r.tier==="configured"?e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-info/10 text-status-info",children:[e.jsxDEV(ce,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:177},this),"Configured"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:95,columnNumber:47},this):e.jsxDEV("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary",children:"Durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:96,columnNumber:16},this),className:"whitespace-nowrap"},{key:"roles",label:"Roles",render:r=>r.registered?e.jsxDEV("div",{className:"flex gap-1 flex-wrap",children:[(r.roles??[]).map(b=>e.jsxDEV(te,{role:b},b,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:106,columnNumber:13},this)),(!r.roles||r.roles.length===0)&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:108,columnNumber:54},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:104,columnNumber:9},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:111,columnNumber:9},this)},{key:"actions",label:"",render:r=>e.jsxDEV(oe,{children:[r.tier==="durable"&&e.jsxDEV(_,{icon:me,title:"Configure workflow",onClick:()=>s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`),colorClass:"text-text-tertiary hover:text-status-info"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:120,columnNumber:13},this),r.tier==="configured"&&e.jsxDEV(_,{icon:de,title:"Certify workflow",onClick:()=>s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:128,columnNumber:13},this),r.registered&&e.jsxDEV(_,{icon:ue,title:"Remove configuration",onClick:()=>y(r.workflow_type),colorClass:"text-text-tertiary hover:text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:136,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:118,columnNumber:9},this),className:"w-16 text-right"}],j=()=>{p&&d.mutate(p,{onSuccess:()=>y(null)})},E=r=>{r.registered?s(`/workflows/registry/${encodeURIComponent(r.workflow_type)}`):s(`/workflows/registry/new?workflow_type=${encodeURIComponent(r.workflow_type)}&task_queue=${encodeURIComponent(r.task_queue??"")}`)};return e.jsxDEV("div",{children:[e.jsxDEV(U,{title:"Workflow Registry",actions:e.jsxDEV("button",{onClick:()=>s("/workflows/registry/new"),className:"btn-primary text-xs",children:"Register Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:169,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:166,columnNumber:7},this),e.jsxDEV(re,{children:[e.jsxDEV("input",{type:"text",placeholder:"Search workflow type...",value:m,onChange:r=>v(r.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:179,columnNumber:9},this),e.jsxDEV(P,{label:"Queue",value:a.queue,onChange:r=>n("queue",r),options:f.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:186,columnNumber:9},this),e.jsxDEV(P,{label:"Tier",value:a.tier,onChange:r=>n("tier",r),options:[{value:"certified",label:"Certified"},{value:"configured",label:"Configured"},{value:"durable",label:"Durable"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:192,columnNumber:9},this),e.jsxDEV(P,{label:"Role",value:a.role,onChange:r=>n("role",r),options:c.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:202,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:178,columnNumber:7},this),e.jsxDEV(ee,{columns:D,data:t,keyFn:r=>r.workflow_type,onRowClick:E,isLoading:l,emptyMessage:"No workflows found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:210,columnNumber:7},this),e.jsxDEV(se,{open:!!p,onClose:()=>y(null),onConfirm:j,title:"De-certify Workflow",description:e.jsxDEV(e.Fragment,{children:["Remove certification from ",e.jsxDEV("span",{className:"font-mono font-medium text-text-primary",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:50},this),"? This removes interceptor guarantees, escalation chains, and invocation role constraints. The workflow will continue running as a standard durable workflow."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:225,columnNumber:22},this),isPending:d.isPending,error:d.error},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:220,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigsPage.tsx",lineNumber:165,columnNumber:5},this)}function C(s){return s.split(",").map(o=>o.trim()).filter(Boolean)}const R={workflow_type:"",description:"",task_queue:"",default_role:"reviewer",invocable:!1,roles:"",invocation_roles:"",consumes:"",envelope_schema:"",resolver_schema:"",cron_schedule:"",execute_as:"",certified:!1};function xe(s){const o=(s.roles??[]).join(", "),l=(s.consumes??[]).join(", ");return{workflow_type:s.workflow_type,description:s.description??"",task_queue:s.task_queue??"",default_role:s.default_role,invocable:s.invocable,roles:o,invocation_roles:(s.invocation_roles??[]).join(", "),consumes:l,envelope_schema:s.envelope_schema?JSON.stringify(s.envelope_schema,null,2):"",resolver_schema:s.resolver_schema?JSON.stringify(s.resolver_schema,null,2):"",cron_schedule:s.cron_schedule??"",execute_as:s.execute_as??"",certified:!!(o||l)}}const T=["Identity","Invocation","Advanced"];function V(s){if(!s.trim())return!0;try{return JSON.parse(s),!0}catch{return!1}}function L(s,o){return s===1?!!o.workflow_type.trim():s===2?V(o.envelope_schema):s===3?V(o.resolver_schema):!0}const k="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",g="text-[10px] text-text-tertiary mt-2 leading-relaxed",Q="input font-mono text-[11px] w-full leading-relaxed tabular-nums";function A({selected:s,onChange:o,single:l,placeholder:d}){const{data:a}=be(),n=(a==null?void 0:a.roles)??[],[m,v]=u.useState(!1),p=u.useRef(null);u.useEffect(()=>{const c=t=>{p.current&&!p.current.contains(t.target)&&v(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[]);const y=c=>{l?(o(s.includes(c)?[]:[c]),v(!1)):o(s.includes(c)?s.filter(t=>t!==c):[...s,c])},i=c=>{o(s.filter(t=>t!==c))},f=d??(l?"Select role...":"Add roles...");return e.jsxDEV("div",{ref:p,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>v(!m),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[s.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:f},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:55,columnNumber:11},this),s.map(c=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px]",children:[e.jsxDEV(I,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:62,columnNumber:13},this),c,e.jsxDEV("span",{role:"button",onClick:t=>{t.stopPropagation(),i(c)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:69,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:64,columnNumber:13},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:58,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${m?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:49,columnNumber:7},this),m&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No roles defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:80,columnNumber:13},this):n.map(c=>{const t=s.includes(c);return e.jsxDEV("button",{type:"button",onClick:()=>y(c),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${t?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(I,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:95,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:96,columnNumber:19},this),t&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:97,columnNumber:34},this)]},c,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:85,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:78,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RolePicker.tsx",lineNumber:47,columnNumber:5},this)}function we({options:s,selected:o,onChange:l,placeholder:d}){const[a,n]=u.useState(!1),m=u.useRef(null);u.useEffect(()=>{const i=f=>{m.current&&!m.current.contains(f.target)&&n(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[]);const v=i=>{l(o.includes(i)?o.filter(f=>f!==i):[...o,i])},p=i=>{l(o.filter(f=>f!==i))},y=d??"Add workflows...";return e.jsxDEV("div",{ref:m,className:"relative",children:[e.jsxDEV("button",{type:"button",onClick:()=>n(!a),className:"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none",children:[o.length===0&&e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:y},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:45,columnNumber:11},this),o.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-[11px] font-mono",children:[e.jsxDEV(q,{className:"w-2.5 h-2.5 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:52,columnNumber:13},this),i,e.jsxDEV("span",{role:"button",onClick:f=>{f.stopPropagation(),p(i)},className:"ml-0.5 hover:text-status-error transition-colors",children:e.jsxDEV($,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:59,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:54,columnNumber:13},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:48,columnNumber:11},this)),e.jsxDEV(J,{className:`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${a?"rotate-180":""}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:63,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:39,columnNumber:7},this),a&&e.jsxDEV("div",{className:"absolute z-20 mt-1 w-full bg-white border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto",children:s.length===0?e.jsxDEV("p",{className:"px-3 py-2 text-xs text-text-tertiary",children:"No registered workflows"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:69,columnNumber:13},this):s.map(i=>{const f=o.includes(i);return e.jsxDEV("button",{type:"button",onClick:()=>v(i),className:`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs font-mono transition-colors ${f?"bg-accent/[0.06] text-accent":"text-text-primary hover:bg-surface-sunken"}`,children:[e.jsxDEV(q,{className:"w-3 h-3 shrink-0 text-accent/60"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:84,columnNumber:19},this),e.jsxDEV("span",{className:"flex-1",children:i},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:85,columnNumber:19},this),f&&e.jsxDEV(M,{className:"w-3 h-3 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:86,columnNumber:34},this)]},i,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:74,columnNumber:17},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/WorkflowPicker.tsx",lineNumber:38,columnNumber:5},this)}function z(s){return C(s)}function O(s){return s.join(", ")}function ke({form:s,set:o}){const{data:l}=F(),d=(l??[]).map(a=>a.workflow_type).filter(a=>a!==s.workflow_type);return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:k,children:"Resolver Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/AdvancedStep.tsx",lineNumber:31,columnNumber:9},this),e.jsxDEV("textarea",{value:s.resolver_schema,onChange:a=>o("resolver_schema",a.target.value),placeholder:`{
|
|
2
2
|
"properties": {
|
|
3
3
|
"approved": { "type": "boolean", "default": false, "description": "Approve?" },
|
|
4
4
|
"notes": { "type": "string", "default": "", "description": "Reviewer notes" }
|
|
@@ -12,4 +12,4 @@ import{j as e}from"./index-puKKZ5l8.js";import{a as u}from"./vendor-query-DLp59M
|
|
|
12
12
|
"source": "dashboard"
|
|
13
13
|
}
|
|
14
14
|
}`,className:Q,rows:8,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:169,columnNumber:13},this),e.jsxDEV("p",{className:g,children:["Pre-fills the JSON editor when invoking this workflow. Should include ",e.jsxDEV("span",{className:"font-mono",children:"data"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:179,columnNumber:30},this)," (workflow input) and optional ",e.jsxDEV("span",{className:"font-mono",children:"metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:179,columnNumber:100},this)," (context)."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:177,columnNumber:13},this),s.envelope_schema.trim()&&!V(s.envelope_schema)&&e.jsxDEV("p",{className:"text-[10px] text-status-error mt-1",children:"Invalid JSON"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:182,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:167,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:138,columnNumber:9},this),!s.invocable&&e.jsxDEV("div",{className:"py-4 px-4 bg-surface-sunken/50 rounded-md text-center",children:e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Enable ",e.jsxDEV("span",{className:"font-medium text-text-secondary",children:"Invocable"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:191,columnNumber:20},this)," above to configure who can start this workflow and set an input template."]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:190,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:189,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/ConfigWizardSteps.tsx",lineNumber:120,columnNumber:5},this)}function Qe(){const{workflowType:s}=fe(),o=!s,l=B(),{data:d,isLoading:a}=F(),n=X(),m=(d==null?void 0:d.find(h=>h.workflow_type===s))??null,v=new Set(["mcpQuery","mcpDeterministic","mcpQueryRouter","mcpTriage","mcpTriageRouter","mcpTriageDeterministic","insightQuery"]),{data:p}=Z({limit:500}),y=u.useMemo(()=>{const h=new Set((d??[]).map(N=>N.workflow_type));return[...new Set(((p==null?void 0:p.jobs)??[]).map(N=>N.entity))].filter(N=>!h.has(N)&&!v.has(N)).sort()},[d,p]),[i,f]=pe(),c=u.useMemo(()=>{if(!o)return R;const h=i.get("workflow_type")??"",w=i.get("task_queue")??"";return!h&&!w?R:{...R,workflow_type:h,task_queue:w}},[o,i]),[t,D]=u.useState(c),[j,E]=u.useState(""),[r,b]=u.useState(!1),x=parseInt(i.get("step")||"1",10),S=u.useCallback(h=>{f(w=>{const N=new URLSearchParams(w);return N.set("step",String(h)),N},{replace:!1})},[f]);u.useEffect(()=>{if(!r){if(o){D(c),b(!0);return}m&&(D(xe(m)),b(!0))}},[m,o,r,c]);const W=(h,w)=>D(N=>({...N,[h]:w})),H=()=>{if(!t.workflow_type.trim())return;E("");let h=null,w=null;try{t.envelope_schema.trim()&&(h=JSON.parse(t.envelope_schema))}catch{E("Invalid JSON in Envelope Schema");return}try{t.resolver_schema.trim()&&(w=JSON.parse(t.resolver_schema))}catch{E("Invalid JSON in Resolver Schema");return}n.mutate({workflow_type:t.workflow_type.trim(),description:t.description.trim()||null,task_queue:t.task_queue.trim()||null,default_role:t.default_role.trim()||"reviewer",invocable:t.invocable,roles:C(t.roles),invocation_roles:C(t.invocation_roles),consumes:C(t.consumes),envelope_schema:h,resolver_schema:w,cron_schedule:t.cron_schedule.trim()||null,execute_as:t.execute_as.trim()||null},{onSuccess:()=>{l("/workflows/registry")}})};if(a)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:132,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:133,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:131,columnNumber:7},this);if(!o&&!m)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Config not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:139,columnNumber:12},this);const Y=x===T.length;return e.jsxDEV("div",{children:[e.jsxDEV(U,{title:o?"Register Workflow":(m==null?void 0:m.workflow_type)??""},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:147,columnNumber:7},this),e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV(he,{steps:T,currentStep:x-1,onStepClick:h=>S(h+1)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:150,columnNumber:11},this),e.jsxDEV("div",{className:"min-h-[360px] py-2",children:[x===1&&e.jsxDEV(De,{form:t,set:W,editing:!!m,durableTypes:y},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:153,columnNumber:28},this),x===2&&e.jsxDEV(Ee,{form:t,set:W},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:154,columnNumber:28},this),x===3&&e.jsxDEV(ke,{form:t,set:W},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:155,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:152,columnNumber:11},this),(j||n.error)&&e.jsxDEV("p",{className:"text-xs text-status-error mt-4",children:j||n.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:159,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsxDEV("div",{children:x>1&&e.jsxDEV("button",{onClick:()=>S(x-1),className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:168,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:166,columnNumber:13},this),e.jsxDEV("div",{className:"flex gap-3",children:[e.jsxDEV("button",{onClick:()=>l("/workflows/registry"),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:177,columnNumber:15},this),Y?e.jsxDEV("button",{onClick:H,disabled:!L(x,t)||n.isPending,className:"btn-primary text-xs",children:n.isPending?"Saving...":m?"Save":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:181,columnNumber:17},this):e.jsxDEV("button",{onClick:()=>S(x+1),disabled:!L(x,t),className:"btn-primary text-xs",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:189,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:176,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:165,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:149,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/registry/WorkflowConfigDetailPage.tsx",lineNumber:146,columnNumber:5},this)}export{Qe as WorkflowConfigDetailPage,Be as WorkflowConfigsPage};
|
|
15
|
-
//# sourceMappingURL=index-
|
|
15
|
+
//# sourceMappingURL=index-Dh0PCbR-.js.map
|