@hotmeshio/long-tail 0.1.12 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/build/api/files.d.ts +13 -0
- package/build/api/files.js +44 -0
- package/build/api/mcp-runs.d.ts +2 -0
- package/build/api/mcp-runs.js +2 -0
- package/build/api/workflow-sets.d.ts +11 -0
- package/build/api/workflow-sets.js +62 -0
- package/build/api/yaml-workflows.d.ts +9 -0
- package/build/api/yaml-workflows.js +40 -11
- package/build/examples/seed.js +50 -0
- package/build/lib/db/schemas/001_schema.sql +281 -106
- package/build/lib/db/schemas/002_seed.sql +56 -39
- package/build/lib/storage/local.d.ts +15 -0
- package/build/lib/storage/local.js +63 -0
- package/build/lib/storage/mime.d.ts +4 -0
- package/build/lib/storage/mime.js +31 -0
- package/build/lib/storage/s3.d.ts +16 -0
- package/build/lib/storage/s3.js +70 -0
- package/build/lib/storage/types.d.ts +18 -0
- package/build/modules/utils.d.ts +73 -0
- package/build/modules/utils.js +84 -0
- package/build/routes/file-browser.d.ts +2 -0
- package/build/routes/file-browser.js +112 -0
- package/build/routes/files.js +25 -17
- package/build/routes/index.js +2 -0
- package/build/routes/mcp-runs.js +2 -0
- package/build/routes/workflow-sets.js +9 -0
- package/build/routes/yaml-workflows/deployment.js +8 -0
- package/build/services/insight/index.d.ts +13 -0
- package/build/services/insight/index.js +4 -7
- package/build/services/insight/prompts.d.ts +1 -1
- package/build/services/insight/prompts.js +1 -1
- package/build/services/mcp/server.js +31 -0
- package/build/services/mcp-runs/queries.d.ts +2 -0
- package/build/services/mcp-runs/queries.js +11 -1
- package/build/services/mcp-runs/sql.d.ts +1 -1
- package/build/services/mcp-runs/sql.js +2 -2
- package/build/services/workflow-sets/db.d.ts +1 -0
- package/build/services/workflow-sets/db.js +6 -0
- package/build/services/workflow-sets/index.d.ts +1 -1
- package/build/services/workflow-sets/index.js +2 -1
- package/build/services/workflow-sets/sql.d.ts +1 -0
- package/build/services/workflow-sets/sql.js +6 -1
- package/build/services/yaml-workflow/db.d.ts +12 -0
- package/build/services/yaml-workflow/db.js +18 -0
- package/build/services/yaml-workflow/generator.js +4 -4
- package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
- package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
- package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
- package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
- package/build/services/yaml-workflow/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +10 -3
- package/build/system/activities/schema-exchange.d.ts +50 -0
- package/build/system/activities/schema-exchange.js +210 -0
- package/build/system/activities/sql.d.ts +1 -1
- package/build/system/activities/sql.js +12 -1
- package/build/system/index.js +1 -0
- package/build/system/mcp-servers/human-queue.js +31 -0
- package/build/system/mcp-servers/knowledge.js +35 -6
- package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
- package/build/system/mcp-servers/schema-exchange.js +93 -0
- package/build/system/seed/server-definitions.d.ts +112 -1
- package/build/system/seed/server-definitions.js +37 -0
- package/build/system/seed/tool-manifests-data.d.ts +87 -0
- package/build/system/seed/tool-manifests-data.js +37 -1
- package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
- package/build/system/seed/tool-manifests-knowledge.js +6 -5
- package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +3 -3
- package/build/system/workflows/mcp-workflow-planner/index.js +39 -5
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
- package/build/tsconfig.tsbuildinfo +1 -1
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-Cngijp4Q.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-Cngijp4Q.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js → AvailableEscalationsPage-CpBfGV1h.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js.map → AvailableEscalationsPage-CpBfGV1h.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-B8Uvw9Si.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-B8Uvw9Si.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-DiFPuWOY.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-DiFPuWOY.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-CpXG9uyu.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-CpXG9uyu.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DKsTR9lK.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DKsTR9lK.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-DlS7Kf40.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-DlS7Kf40.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-B-9eW3pm.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-B-9eW3pm.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DkOokbtL.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DkOokbtL.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-DVtHqM-5.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-DVtHqM-5.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-C7KIMIbE.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-C7KIMIbE.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-BMKBlkPx.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-BMKBlkPx.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BYZ5OVdQ.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BYZ5OVdQ.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-C5r3n6YO.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-C5r3n6YO.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-BGUajIsW.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-BGUajIsW.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-B_kJYHea.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-B_kJYHea.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-BgAq_bQg.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-BgAq_bQg.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js +2 -0
- package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js.map +1 -0
- package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js.map +1 -0
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-E1yRnCeW.js} +2 -2
- package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-E1yRnCeW.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-C8MSTzey.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-C8MSTzey.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-Cm5HBQF_.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-Cm5HBQF_.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-CNmWJFSN.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-CNmWJFSN.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-HSI4RVhs.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-HSI4RVhs.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-Dln8622H.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-Dln8622H.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-bIsd9N_h.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-bIsd9N_h.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-BVUp2bF0.js} +2 -2
- package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-BVUp2bF0.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-kH-Njt25.js +2 -0
- package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-kH-Njt25.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DbUJPfaW.js} +2 -2
- package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DbUJPfaW.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-Bs3JbyAz.js} +2 -2
- package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-Bs3JbyAz.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-CakDdsCw.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-CakDdsCw.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Cd_SG_yA.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Cd_SG_yA.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-Bz0C18nC.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-Bz0C18nC.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js → SwimlaneTimeline-Cfe-xQRX.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js.map → SwimlaneTimeline-Cfe-xQRX.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-ClFhXG-U.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-ClFhXG-U.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-SuMBdARt.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-SuMBdARt.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-lJR1JW_W.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-lJR1JW_W.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-Dkq1Vtbt.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-Dkq1Vtbt.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-DgfDZ1pl.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-DgfDZ1pl.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-MpHZ1hMD.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-MpHZ1hMD.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-DqsosA4B.js} +2 -2
- package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-DqsosA4B.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CVlg38C3.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CVlg38C3.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js +2 -0
- package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js.map +1 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-Ugzbs8mV.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-Ugzbs8mV.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-CIp_lTNl.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-CIp_lTNl.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +1 -0
- package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-DPfUpVqI.js} +2 -2
- package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-DPfUpVqI.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-RrCDbMC3.js} +2 -2
- package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-RrCDbMC3.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-CDGa9wsD.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-CDGa9wsD.js.map} +1 -1
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-ZSKqdkdS.js} +2 -2
- package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-ZSKqdkdS.js.map} +1 -1
- package/dashboard/dist/assets/helpers-rMEcLwKs.js +2 -0
- package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +1 -0
- package/dashboard/dist/assets/{index-DDYFpi4l.js → index-ABcJHHlN.js} +2 -2
- package/dashboard/dist/assets/{index-DDYFpi4l.js.map → index-ABcJHHlN.js.map} +1 -1
- package/dashboard/dist/assets/{index-D1wVX50Z.js → index-B91h_jZ0.js} +2 -2
- package/dashboard/dist/assets/{index-D1wVX50Z.js.map → index-B91h_jZ0.js.map} +1 -1
- package/dashboard/dist/assets/{index-BcR6PfpY.js → index-BbI2dzhJ.js} +2 -2
- package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-BbI2dzhJ.js.map} +1 -1
- package/dashboard/dist/assets/{index-BizfauqT.js → index-BmVCyB6C.js} +4 -4
- package/dashboard/dist/assets/{index-BizfauqT.js.map → index-BmVCyB6C.js.map} +1 -1
- package/dashboard/dist/assets/index-C1E5GTs9.js +2 -0
- package/dashboard/dist/assets/index-C1E5GTs9.js.map +1 -0
- package/dashboard/dist/assets/{index-Cf60K3x9.js → index-C90ZPzXk.js} +2 -2
- package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-C90ZPzXk.js.map} +1 -1
- package/dashboard/dist/assets/{index-BYZX9tOb.js → index-Cmgrk7PQ.js} +58 -58
- package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +1 -0
- package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-DNytWfSZ.js} +2 -2
- package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-DNytWfSZ.js.map} +1 -1
- package/dashboard/dist/assets/index-DX6zxr6t.js +2 -0
- package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-DX6zxr6t.js.map} +1 -1
- package/dashboard/dist/assets/index-DeX-ezqf.css +1 -0
- package/dashboard/dist/assets/index-K40Qw1tk.js +2 -0
- package/dashboard/dist/assets/{index-Di12t56M.js.map → index-K40Qw1tk.js.map} +1 -1
- package/dashboard/dist/assets/{index-BUK3qR-1.js → index-lCyNr5Xk.js} +2 -2
- package/dashboard/dist/assets/{index-BUK3qR-1.js.map → index-lCyNr5Xk.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-CNE44TSp.js} +2 -2
- package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-CNE44TSp.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-RQX0uN-5.js +2 -0
- package/dashboard/dist/assets/mcp-query-RQX0uN-5.js.map +1 -0
- package/dashboard/dist/assets/mcp-runs-0w40bdz-.js +2 -0
- package/dashboard/dist/assets/mcp-runs-0w40bdz-.js.map +1 -0
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-BbmdXuPp.js} +2 -2
- package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-BbmdXuPp.js.map} +1 -1
- package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-DoHYlhWH.js} +2 -2
- package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-DoHYlhWH.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-BAiJiCHS.js} +2 -2
- package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-BAiJiCHS.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CvroqHtm.js} +2 -2
- package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CvroqHtm.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js → useEventHooks-BHMbzR_y.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BHMbzR_y.js.map} +1 -1
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
- package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +2 -0
- package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js.map +1 -0
- package/dashboard/dist/assets/{users-CFcxB4v6.js → users-CxIMy_xw.js} +2 -2
- package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-CxIMy_xw.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-AFGxSeQS.js} +132 -82
- package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-yR9yais7.js} +2 -2
- package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-yR9yais7.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js.map +1 -0
- package/dashboard/dist/index.html +3 -3
- package/docs/schema-exchange.md +173 -0
- package/docs/self-test.md +106 -0
- package/package.json +4 -2
- package/build/lib/db/schemas/003_workflow_discovery.sql +0 -39
- package/build/lib/db/schemas/004_query_router.sql +0 -38
- package/build/lib/db/schemas/004_workflow_sets.sql +0 -29
- package/build/lib/db/schemas/005_triage_router.sql +0 -37
- package/build/lib/db/schemas/005_unique_graph_topic.sql +0 -7
- package/build/lib/db/schemas/006_oauth.sql +0 -50
- package/build/lib/db/schemas/007_security.sql +0 -27
- package/build/lib/db/schemas/008_bot_accounts.sql +0 -30
- package/build/lib/db/schemas/009_audit_trail.sql +0 -7
- package/build/lib/db/schemas/010_credential_providers.sql +0 -4
- package/build/lib/db/schemas/011_system_workflow_configs.sql +0 -37
- package/build/lib/db/schemas/012_drop_modality.sql +0 -6
- package/build/lib/db/schemas/013_execute_as.sql +0 -9
- package/build/lib/db/schemas/014_ephemeral_credentials.sql +0 -16
- package/build/lib/db/schemas/015_knowledge.sql +0 -23
- package/build/lib/db/schemas/016_streamable_http.sql +0 -7
- package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
- package/dashboard/dist/assets/RolesPage-SMedMuqa.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
- package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
- package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
- package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
- package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
- package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
- package/dashboard/dist/assets/index-Di12t56M.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
- package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
- package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
- package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
- package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-BYZX9tOb.js";import{a as v}from"./vendor-query-DLp59M9_.js";import{f as B,g as H,h as $,i as O}from"./mcp-B_xbczAt.js";import{S as U}from"./StepIndicator-B9ps2SvM.js";import{P as z}from"./PageHeader-BcTVF9ul.js";import{T as J}from"./TagInput-CdNUuqk4.js";import{X as Y,w as q,ae as K,af as X}from"./vendor-icons-T4r2DSPD.js";import{e as G,c as W,f as Q}from"./vendor-react-Co3Y8ikm.js";const _={name:"",description:"",mode:"network",transport_type:"sse",command:"",args:"",env_vars:"{}",url:"",auto_connect:!1,tags:[],compile_hints:"",credential_providers:[],discovered_tools:null};function Z(s){const a=s.transport_config??{},t=!!a.builtin;let r="network";return t?r="in-process":s.transport_type==="stdio"&&(r="local-process"),{name:s.name,description:s.description??"",mode:r,transport_type:s.transport_type,command:a.command??"",args:(a.args??[]).join(", "),env_vars:a.env?JSON.stringify(a.env,null,2):"{}",url:a.url??"",auto_connect:s.auto_connect,tags:s.tags??[],compile_hints:s.compile_hints??"",credential_providers:s.credential_providers??[],discovered_tools:s.tool_manifest??null}}function R(s){let a={};return s.mode==="local-process"?a={command:s.command.trim(),args:s.args.split(",").map(t=>t.trim()).filter(Boolean),env:s.env_vars.trim()?JSON.parse(s.env_vars):void 0}:s.mode==="network"&&(a={url:s.url.trim()}),{name:s.name.trim(),description:s.description.trim()||void 0,transport_type:s.mode==="local-process"?"stdio":s.transport_type,transport_config:a,auto_connect:s.auto_connect,tags:s.tags,compile_hints:s.compile_hints.trim()||void 0,credential_providers:s.credential_providers.length>0?s.credential_providers:void 0}}const P=["Transport","Discovery","Test","Review"];function C(s,a){return s===1?!(!a.name.trim()||a.mode==="network"&&!a.url.trim()||a.mode==="local-process"&&!a.command.trim()):!0}const p="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",N="text-[10px] text-text-tertiary mt-2 leading-relaxed",ee=[{value:"in-process",label:"In-Process",hint:"Built-in server running inside the app"},{value:"network",label:"Network Service",hint:"Remote server via SSE or Streamable HTTP"},{value:"local-process",label:"Local Process",hint:"Spawn a local command via stdio"}];function se({form:s,set:a,isBuiltin:t}){return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Connection Mode"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-3 gap-3 mt-1",children:ee.map(r=>{const n=s.mode===r.value,l=t&&r.value!=="in-process";return e.jsxDEV("button",{type:"button",disabled:l,onClick:()=>{a("mode",r.value),r.value==="local-process"&&a("transport_type","stdio"),r.value==="network"&&a("transport_type","sse")},className:`text-left p-3 rounded-md border transition-colors ${n?"border-accent bg-accent/5":l?"border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed":"border-surface-border hover:border-text-tertiary cursor-pointer"}`,children:[e.jsxDEV("span",{className:`text-xs font-medium ${n?"text-accent":"text-text-primary"}`,children:r.label},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:44,columnNumber:17},this),e.jsxDEV("span",{className:"block text-[10px] text-text-tertiary mt-0.5",children:r.hint},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:47,columnNumber:17},this)]},r.value,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:27,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:20,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:57,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:s.name,onChange:r=>a("name",r.target.value),placeholder:"e.g., vision-server",className:"input text-xs w-full",disabled:t},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:56,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:68,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:s.description,onChange:r=>a("description",r.target.value),placeholder:"Optional description",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:55,columnNumber:7},this),s.mode==="in-process"&&e.jsxDEV("div",{children:e.jsxDEV("p",{className:N,children:"This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:82,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:81,columnNumber:9},this),s.mode==="network"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Server URL"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:92,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.url,onChange:r=>a("url",r.target.value),placeholder:"https://mcp-server.example.com/sse",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:93,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:91,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Transport Protocol"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:102,columnNumber:13},this),e.jsxDEV("div",{className:"flex gap-2 mt-1",children:["sse","streamable-http"].map(r=>e.jsxDEV("button",{type:"button",onClick:()=>a("transport_type",r),className:`px-3 py-1.5 text-xs rounded-md border transition-colors ${s.transport_type===r?"border-accent bg-accent/5 text-accent font-medium":"border-surface-border text-text-secondary hover:border-text-tertiary"}`,children:r==="sse"?"SSE":"Streamable HTTP"},r,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:105,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:103,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:101,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:90,columnNumber:9},this),s.mode==="local-process"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Command"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:127,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.command,onChange:r=>a("command",r.target.value),placeholder:"e.g., npx",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:128,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Arguments (comma-separated)"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:137,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.args,onChange:r=>a("args",r.target.value),placeholder:"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:138,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:136,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Environment Variables (JSON)"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:147,columnNumber:13},this),e.jsxDEV("textarea",{value:s.env_vars,onChange:r=>a("env_vars",r.target.value),className:"input font-mono text-[11px] w-full leading-relaxed",rows:3,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:148,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:146,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:125,columnNumber:9},this),e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:s.auto_connect,onChange:r=>a("auto_connect",r.target.checked),className:"w-4 h-4 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:161,columnNumber:9},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:"Auto-connect on startup"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:167,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:160,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:18,columnNumber:5},this)}function ae({form:s,set:a}){const[t,r]=v.useState(""),n=i=>{const c=i.trim().toLowerCase();c&&!s.credential_providers.includes(c)&&a("credential_providers",[...s.credential_providers,c]),r("")},l=i=>{a("credential_providers",s.credential_providers.filter(c=>c!==i))},d=i=>{i.key==="Enter"||i.key===","?(i.preventDefault(),n(t)):i.key==="Backspace"&&!t&&s.credential_providers.length>0&&l(s.credential_providers[s.credential_providers.length-1])};return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:40,columnNumber:9},this),e.jsxDEV(J,{tags:s.tags,onChange:i=>a("tags",i),placeholder:"Add tag (e.g., database, analytics)..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:39,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Compile Hints"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:53,columnNumber:9},this),e.jsxDEV("textarea",{value:s.compile_hints,onChange:i=>a("compile_hints",i.target.value),placeholder:"Guidance for the workflow compiler when generating YAML from this server's tools...",className:"input text-xs w-full leading-relaxed",rows:4,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:54,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:62,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:52,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Credential Providers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:69,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary",children:[s.credential_providers.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[i,e.jsxDEV("button",{type:"button",onClick:()=>l(i),className:"hover:text-status-error transition-colors",children:e.jsxDEV(Y,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:82,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:77,columnNumber:15},this)]},i,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:72,columnNumber:13},this)),e.jsxDEV("input",{type:"text",value:t,onChange:i=>r(i.target.value),onKeyDown:d,onBlur:()=>{t.trim()&&n(t)},placeholder:s.credential_providers.length===0?"Add provider (e.g., github, slack)...":"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:86,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:70,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:96,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:68,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:37,columnNumber:5},this)}function re({form:s,set:a}){const t=B(),r=s.mode==="in-process",n=()=>{const i=R(s);t.mutate({transport_type:i.transport_type,transport_config:i.transport_config},{onSuccess:c=>{c.success&&a("discovered_tools",c.tools)}})},l=t.data,d=s.discovered_tools??(l==null?void 0:l.tools)??[];return e.jsxDEV("div",{className:"space-y-5",children:r?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"In-process servers connect lazily on first tool call. No connection test needed."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:37,columnNumber:11},this),s.discovered_tools&&s.discovered_tools.length>0&&e.jsxDEV("div",{className:"mt-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-2",children:[s.discovered_tools.length," tool",s.discovered_tools.length!==1?"s":""," cached from last connection"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:42,columnNumber:15},this),e.jsxDEV(k,{tools:s.discovered_tools},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:45,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:41,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:36,columnNumber:9},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("button",{type:"button",onClick:n,disabled:t.isPending,className:"btn-primary text-xs",children:t.isPending?e.jsxDEV("span",{className:"flex items-center gap-1.5",children:[e.jsxDEV(q,{className:"w-3 h-3 animate-spin"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:60,columnNumber:19},this),"Connecting..."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:59,columnNumber:17},this):"Test Connection"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:52,columnNumber:13},this),(l==null?void 0:l.success)&&e.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-status-success",children:[e.jsxDEV(K,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:69,columnNumber:17},this),"Connected — ",d.length," tool",d.length!==1?"s":""," discovered"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:68,columnNumber:15},this),l&&!l.success&&e.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-status-error",children:[e.jsxDEV(X,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:75,columnNumber:17},this),l.error||"Connection failed"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:74,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:51,columnNumber:11},this),d.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-2",children:"Discovered tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:83,columnNumber:15},this),e.jsxDEV(k,{tools:d},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:84,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("p",{className:N,children:"Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:50,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:34,columnNumber:5},this)}function k({tools:s}){return e.jsxDEV("div",{className:"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border",children:s.map(a=>e.jsxDEV("div",{className:"px-3 py-2",children:[e.jsxDEV("span",{className:"text-xs font-medium text-text-primary font-mono",children:a.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:102,columnNumber:11},this),a.description&&e.jsxDEV("span",{className:"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:104,columnNumber:13},this)]},a.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:101,columnNumber:9},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:99,columnNumber:5},this)}const te={"in-process":"In-Process",network:"Network Service","local-process":"Local Process"},ie={stdio:"stdio",sse:"SSE","streamable-http":"Streamable HTTP"};function le({form:s}){const a=s.discovered_tools??[];return e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV(m,{label:"Name",value:s.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:25,columnNumber:7},this),s.description&&e.jsxDEV(m,{label:"Description",value:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:26,columnNumber:28},this),e.jsxDEV(m,{label:"Mode",value:te[s.mode]??s.mode},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:27,columnNumber:7},this),s.mode==="network"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(m,{label:"Transport",value:ie[s.transport_type]??s.transport_type},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:31,columnNumber:11},this),e.jsxDEV(m,{label:"URL",value:s.url,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:32,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:30,columnNumber:9},this),s.mode==="local-process"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(m,{label:"Command",value:s.command,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:37,columnNumber:11},this),s.args&&e.jsxDEV(m,{label:"Args",value:s.args,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:38,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV(m,{label:"Auto-connect",value:s.auto_connect?"Yes":"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:42,columnNumber:7},this),s.tags.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:46,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.tags.map(t=>e.jsxDEV("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:t},t,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:49,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:45,columnNumber:9},this),s.credential_providers.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Credential Providers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:59,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.credential_providers.map(t=>e.jsxDEV("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:t},t,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:62,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:58,columnNumber:9},this),s.compile_hints&&e.jsxDEV(m,{label:"Compile Hints",value:s.compile_hints},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:70,columnNumber:30},this),a.length>0&&e.jsxDEV(m,{label:"Discovered Tools",value:`${a.length} tool${a.length!==1?"s":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:24,columnNumber:5},this)}function m({label:s,value:a,mono:t}){return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:82,columnNumber:7},this),e.jsxDEV("p",{className:`text-xs text-text-primary mt-0.5 ${t?"font-mono":""}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:83,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:81,columnNumber:5},this)}function be(){var y,T,w;const{serverId:s}=G(),a=!s,t=W(),{data:r,isLoading:n}=H(s??""),l=$(),d=O(),[i,c]=v.useState(_),[f,S]=v.useState(!1),[M,D]=v.useState(""),[L,E]=Q(),o=parseInt(L.get("step")||"1",10),x=v.useCallback(u=>{E(b=>{const h=new URLSearchParams(b);return h.set("step",String(u)),h},{replace:!1})},[E]);v.useEffect(()=>{if(!f){if(a){c(_),S(!0);return}r&&(c(Z(r)),S(!0))}},[r,a,f]);const g=(u,b)=>c(h=>({...h,[u]:b})),I=!!((y=r==null?void 0:r.transport_config)!=null&&y.builtin),A=()=>{D("");const u=R(i);r?d.mutate({id:r.id,...u},{onSuccess:()=>t("/mcp/servers")}):l.mutate(u,{onSuccess:()=>t("/mcp/servers"),onError:b=>D(b.message)})};if(!a&&n)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/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:82,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:83,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:81,columnNumber:7},this);if(!a&&!r&&!n)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Server not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:89,columnNumber:12},this);const F=o===P.length,j=l.isPending||d.isPending,V=M||((T=l.error)==null?void 0:T.message)||((w=d.error)==null?void 0:w.message);return e.jsxDEV("div",{children:[e.jsxDEV(z,{title:a?"Register MCP Server":(r==null?void 0:r.name)??""},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:98,columnNumber:7},this),e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV(U,{steps:P,currentStep:o-1,onStepClick:u=>x(u+1)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:101,columnNumber:9},this),e.jsxDEV("div",{className:"min-h-[360px] py-2",children:[o===1&&e.jsxDEV(se,{form:i,set:g,isBuiltin:I},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:104,columnNumber:26},this),o===2&&e.jsxDEV(ae,{form:i,set:g},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:105,columnNumber:26},this),o===3&&e.jsxDEV(re,{form:i,set:g},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:106,columnNumber:26},this),o===4&&e.jsxDEV(le,{form:i},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:107,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:103,columnNumber:9},this),V&&e.jsxDEV("p",{className:"text-xs text-status-error mt-4",children:V},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:111,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsxDEV("div",{children:o>1&&e.jsxDEV("button",{onClick:()=>x(o-1),className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:118,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:116,columnNumber:11},this),e.jsxDEV("div",{className:"flex gap-3",children:[e.jsxDEV("button",{onClick:()=>t("/mcp/servers"),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:124,columnNumber:13},this),F?e.jsxDEV("button",{onClick:A,disabled:!C(o,i)||j,className:"btn-primary text-xs",children:j?"Saving...":r?"Save":"Register"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:128,columnNumber:15},this):e.jsxDEV("button",{onClick:()=>x(o+1),disabled:!C(o,i),className:"btn-primary text-xs",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:136,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:115,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:100,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:97,columnNumber:5},this)}export{be as McpServerDetailPage};
|
|
2
|
-
//# sourceMappingURL=index-
|
|
1
|
+
import{j as e}from"./index-Cmgrk7PQ.js";import{a as v}from"./vendor-query-DLp59M9_.js";import{f as B,g as H,h as $,i as O}from"./mcp-CNE44TSp.js";import{S as U}from"./StepIndicator-Cd_SG_yA.js";import{P as z}from"./PageHeader-Cm5HBQF_.js";import{T as J}from"./TagInput-ClFhXG-U.js";import{X as Y,x as q,af as K,ag as X}from"./vendor-icons-AFGxSeQS.js";import{e as G,c as W,f as Q}from"./vendor-react-Co3Y8ikm.js";const _={name:"",description:"",mode:"network",transport_type:"sse",command:"",args:"",env_vars:"{}",url:"",auto_connect:!1,tags:[],compile_hints:"",credential_providers:[],discovered_tools:null};function Z(s){const a=s.transport_config??{},t=!!a.builtin;let r="network";return t?r="in-process":s.transport_type==="stdio"&&(r="local-process"),{name:s.name,description:s.description??"",mode:r,transport_type:s.transport_type,command:a.command??"",args:(a.args??[]).join(", "),env_vars:a.env?JSON.stringify(a.env,null,2):"{}",url:a.url??"",auto_connect:s.auto_connect,tags:s.tags??[],compile_hints:s.compile_hints??"",credential_providers:s.credential_providers??[],discovered_tools:s.tool_manifest??null}}function R(s){let a={};return s.mode==="local-process"?a={command:s.command.trim(),args:s.args.split(",").map(t=>t.trim()).filter(Boolean),env:s.env_vars.trim()?JSON.parse(s.env_vars):void 0}:s.mode==="network"&&(a={url:s.url.trim()}),{name:s.name.trim(),description:s.description.trim()||void 0,transport_type:s.mode==="local-process"?"stdio":s.transport_type,transport_config:a,auto_connect:s.auto_connect,tags:s.tags,compile_hints:s.compile_hints.trim()||void 0,credential_providers:s.credential_providers.length>0?s.credential_providers:void 0}}const P=["Transport","Discovery","Test","Review"];function C(s,a){return s===1?!(!a.name.trim()||a.mode==="network"&&!a.url.trim()||a.mode==="local-process"&&!a.command.trim()):!0}const p="block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",N="text-[10px] text-text-tertiary mt-2 leading-relaxed",ee=[{value:"in-process",label:"In-Process",hint:"Built-in server running inside the app"},{value:"network",label:"Network Service",hint:"Remote server via SSE or Streamable HTTP"},{value:"local-process",label:"Local Process",hint:"Spawn a local command via stdio"}];function se({form:s,set:a,isBuiltin:t}){return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Connection Mode"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-3 gap-3 mt-1",children:ee.map(r=>{const n=s.mode===r.value,l=t&&r.value!=="in-process";return e.jsxDEV("button",{type:"button",disabled:l,onClick:()=>{a("mode",r.value),r.value==="local-process"&&a("transport_type","stdio"),r.value==="network"&&a("transport_type","sse")},className:`text-left p-3 rounded-md border transition-colors ${n?"border-accent bg-accent/5":l?"border-surface-border bg-surface-sunken opacity-50 cursor-not-allowed":"border-surface-border hover:border-text-tertiary cursor-pointer"}`,children:[e.jsxDEV("span",{className:`text-xs font-medium ${n?"text-accent":"text-text-primary"}`,children:r.label},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:44,columnNumber:17},this),e.jsxDEV("span",{className:"block text-[10px] text-text-tertiary mt-0.5",children:r.hint},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:47,columnNumber:17},this)]},r.value,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:27,columnNumber:15},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:20,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:57,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:s.name,onChange:r=>a("name",r.target.value),placeholder:"e.g., vision-server",className:"input text-xs w-full",disabled:t},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:56,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:68,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:s.description,onChange:r=>a("description",r.target.value),placeholder:"Optional description",className:"input text-xs w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:67,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:55,columnNumber:7},this),s.mode==="in-process"&&e.jsxDEV("div",{children:e.jsxDEV("p",{className:N,children:"This server runs in-process via InMemoryTransport. Transport is managed automatically — no configuration needed."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:82,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:81,columnNumber:9},this),s.mode==="network"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Server URL"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:92,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.url,onChange:r=>a("url",r.target.value),placeholder:"https://mcp-server.example.com/sse",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:93,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:91,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Transport Protocol"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:102,columnNumber:13},this),e.jsxDEV("div",{className:"flex gap-2 mt-1",children:["sse","streamable-http"].map(r=>e.jsxDEV("button",{type:"button",onClick:()=>a("transport_type",r),className:`px-3 py-1.5 text-xs rounded-md border transition-colors ${s.transport_type===r?"border-accent bg-accent/5 text-accent font-medium":"border-surface-border text-text-secondary hover:border-text-tertiary"}`,children:r==="sse"?"SSE":"Streamable HTTP"},r,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:105,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:103,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:101,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:90,columnNumber:9},this),s.mode==="local-process"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Command"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:127,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.command,onChange:r=>a("command",r.target.value),placeholder:"e.g., npx",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:128,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Arguments (comma-separated)"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:137,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:s.args,onChange:r=>a("args",r.target.value),placeholder:"e.g., -y, @modelcontextprotocol/server-filesystem, /tmp",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:138,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:136,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Environment Variables (JSON)"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:147,columnNumber:13},this),e.jsxDEV("textarea",{value:s.env_vars,onChange:r=>a("env_vars",r.target.value),className:"input font-mono text-[11px] w-full leading-relaxed",rows:3,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:148,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:146,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:125,columnNumber:9},this),e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:s.auto_connect,onChange:r=>a("auto_connect",r.target.checked),className:"w-4 h-4 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:161,columnNumber:9},this),e.jsxDEV("span",{className:"text-xs text-text-primary",children:"Auto-connect on startup"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:167,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:160,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TransportStep.tsx",lineNumber:18,columnNumber:5},this)}function ae({form:s,set:a}){const[t,r]=v.useState(""),n=i=>{const c=i.trim().toLowerCase();c&&!s.credential_providers.includes(c)&&a("credential_providers",[...s.credential_providers,c]),r("")},l=i=>{a("credential_providers",s.credential_providers.filter(c=>c!==i))},d=i=>{i.key==="Enter"||i.key===","?(i.preventDefault(),n(t)):i.key==="Backspace"&&!t&&s.credential_providers.length>0&&l(s.credential_providers[s.credential_providers.length-1])};return e.jsxDEV("div",{className:"space-y-5",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:40,columnNumber:9},this),e.jsxDEV(J,{tags:s.tags,onChange:i=>a("tags",i),placeholder:"Add tag (e.g., database, analytics)..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"Tags enable tool discovery. Workflows filter available MCP servers by tags to find relevant tools."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:39,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Compile Hints"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:53,columnNumber:9},this),e.jsxDEV("textarea",{value:s.compile_hints,onChange:i=>a("compile_hints",i.target.value),placeholder:"Guidance for the workflow compiler when generating YAML from this server's tools...",className:"input text-xs w-full leading-relaxed",rows:4,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:54,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"Free-form text that guides the workflow compiler. Describe how tools should be composed, sequenced, or parameterized."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:62,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:52,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Credential Providers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:69,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap items-center gap-1.5 bg-surface-sunken border border-surface-border rounded-md px-2 py-1.5 focus-within:ring-1 focus-within:ring-accent-primary",children:[s.credential_providers.map(i=>e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:[i,e.jsxDEV("button",{type:"button",onClick:()=>l(i),className:"hover:text-status-error transition-colors",children:e.jsxDEV(Y,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:82,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:77,columnNumber:15},this)]},i,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:72,columnNumber:13},this)),e.jsxDEV("input",{type:"text",value:t,onChange:i=>r(i.target.value),onKeyDown:d,onBlur:()=>{t.trim()&&n(t)},placeholder:s.credential_providers.length===0?"Add provider (e.g., github, slack)...":"",className:"flex-1 min-w-[80px] bg-transparent text-xs text-text-primary outline-none placeholder:text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:86,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:70,columnNumber:9},this),e.jsxDEV("p",{className:N,children:"IAM credential providers required by this server's tools. Users will be prompted to connect these before tool execution."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:96,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:68,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/DiscoveryStep.tsx",lineNumber:37,columnNumber:5},this)}function re({form:s,set:a}){const t=B(),r=s.mode==="in-process",n=()=>{const i=R(s);t.mutate({transport_type:i.transport_type,transport_config:i.transport_config},{onSuccess:c=>{c.success&&a("discovered_tools",c.tools)}})},l=t.data,d=s.discovered_tools??(l==null?void 0:l.tools)??[];return e.jsxDEV("div",{className:"space-y-5",children:r?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"In-process servers connect lazily on first tool call. No connection test needed."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:37,columnNumber:11},this),s.discovered_tools&&s.discovered_tools.length>0&&e.jsxDEV("div",{className:"mt-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-2",children:[s.discovered_tools.length," tool",s.discovered_tools.length!==1?"s":""," cached from last connection"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:42,columnNumber:15},this),e.jsxDEV(k,{tools:s.discovered_tools},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:45,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:41,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:36,columnNumber:9},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("button",{type:"button",onClick:n,disabled:t.isPending,className:"btn-primary text-xs",children:t.isPending?e.jsxDEV("span",{className:"flex items-center gap-1.5",children:[e.jsxDEV(q,{className:"w-3 h-3 animate-spin"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:60,columnNumber:19},this),"Connecting..."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:59,columnNumber:17},this):"Test Connection"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:52,columnNumber:13},this),(l==null?void 0:l.success)&&e.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-status-success",children:[e.jsxDEV(K,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:69,columnNumber:17},this),"Connected — ",d.length," tool",d.length!==1?"s":""," discovered"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:68,columnNumber:15},this),l&&!l.success&&e.jsxDEV("span",{className:"flex items-center gap-1 text-xs text-status-error",children:[e.jsxDEV(X,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:75,columnNumber:17},this),l.error||"Connection failed"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:74,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:51,columnNumber:11},this),d.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary mb-2",children:"Discovered tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:83,columnNumber:15},this),e.jsxDEV(k,{tools:d},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:84,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("p",{className:N,children:"Tests connectivity by connecting to the server and listing available tools. The server must be reachable from this machine."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:50,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:34,columnNumber:5},this)}function k({tools:s}){return e.jsxDEV("div",{className:"max-h-[280px] overflow-y-auto border border-surface-border rounded-md divide-y divide-surface-border",children:s.map(a=>e.jsxDEV("div",{className:"px-3 py-2",children:[e.jsxDEV("span",{className:"text-xs font-medium text-text-primary font-mono",children:a.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:102,columnNumber:11},this),a.description&&e.jsxDEV("span",{className:"block text-[10px] text-text-tertiary mt-0.5 line-clamp-2",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:104,columnNumber:13},this)]},a.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:101,columnNumber:9},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/TestStep.tsx",lineNumber:99,columnNumber:5},this)}const te={"in-process":"In-Process",network:"Network Service","local-process":"Local Process"},ie={stdio:"stdio",sse:"SSE","streamable-http":"Streamable HTTP"};function le({form:s}){const a=s.discovered_tools??[];return e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV(m,{label:"Name",value:s.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:25,columnNumber:7},this),s.description&&e.jsxDEV(m,{label:"Description",value:s.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:26,columnNumber:28},this),e.jsxDEV(m,{label:"Mode",value:te[s.mode]??s.mode},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:27,columnNumber:7},this),s.mode==="network"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(m,{label:"Transport",value:ie[s.transport_type]??s.transport_type},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:31,columnNumber:11},this),e.jsxDEV(m,{label:"URL",value:s.url,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:32,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:30,columnNumber:9},this),s.mode==="local-process"&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV(m,{label:"Command",value:s.command,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:37,columnNumber:11},this),s.args&&e.jsxDEV(m,{label:"Args",value:s.args,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:38,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:36,columnNumber:9},this),e.jsxDEV(m,{label:"Auto-connect",value:s.auto_connect?"Yes":"No"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:42,columnNumber:7},this),s.tags.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:46,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.tags.map(t=>e.jsxDEV("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:t},t,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:49,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:45,columnNumber:9},this),s.credential_providers.length>0&&e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:"Credential Providers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:59,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-1",children:s.credential_providers.map(t=>e.jsxDEV("span",{className:"px-2 py-0.5 rounded-full bg-accent/10 text-accent text-[11px] font-medium",children:t},t,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:62,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:58,columnNumber:9},this),s.compile_hints&&e.jsxDEV(m,{label:"Compile Hints",value:s.compile_hints},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:70,columnNumber:30},this),a.length>0&&e.jsxDEV(m,{label:"Discovered Tools",value:`${a.length} tool${a.length!==1?"s":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:73,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:24,columnNumber:5},this)}function m({label:s,value:a,mono:t}){return e.jsxDEV("div",{children:[e.jsxDEV("label",{className:p,children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:82,columnNumber:7},this),e.jsxDEV("p",{className:`text-xs text-text-primary mt-0.5 ${t?"font-mono":""}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:83,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/ReviewStep.tsx",lineNumber:81,columnNumber:5},this)}function be(){var y,T,w;const{serverId:s}=G(),a=!s,t=W(),{data:r,isLoading:n}=H(s??""),l=$(),d=O(),[i,c]=v.useState(_),[f,S]=v.useState(!1),[M,D]=v.useState(""),[L,E]=Q(),o=parseInt(L.get("step")||"1",10),x=v.useCallback(u=>{E(b=>{const h=new URLSearchParams(b);return h.set("step",String(u)),h},{replace:!1})},[E]);v.useEffect(()=>{if(!f){if(a){c(_),S(!0);return}r&&(c(Z(r)),S(!0))}},[r,a,f]);const g=(u,b)=>c(h=>({...h,[u]:b})),I=!!((y=r==null?void 0:r.transport_config)!=null&&y.builtin),A=()=>{D("");const u=R(i);r?d.mutate({id:r.id,...u},{onSuccess:()=>t("/mcp/servers")}):l.mutate(u,{onSuccess:()=>t("/mcp/servers"),onError:b=>D(b.message)})};if(!a&&n)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/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:82,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:83,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:81,columnNumber:7},this);if(!a&&!r&&!n)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Server not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:89,columnNumber:12},this);const F=o===P.length,j=l.isPending||d.isPending,V=M||((T=l.error)==null?void 0:T.message)||((w=d.error)==null?void 0:w.message);return e.jsxDEV("div",{children:[e.jsxDEV(z,{title:a?"Register MCP Server":(r==null?void 0:r.name)??""},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:98,columnNumber:7},this),e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV(U,{steps:P,currentStep:o-1,onStepClick:u=>x(u+1)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:101,columnNumber:9},this),e.jsxDEV("div",{className:"min-h-[360px] py-2",children:[o===1&&e.jsxDEV(se,{form:i,set:g,isBuiltin:I},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:104,columnNumber:26},this),o===2&&e.jsxDEV(ae,{form:i,set:g},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:105,columnNumber:26},this),o===3&&e.jsxDEV(re,{form:i,set:g},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:106,columnNumber:26},this),o===4&&e.jsxDEV(le,{form:i},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:107,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:103,columnNumber:9},this),V&&e.jsxDEV("p",{className:"text-xs text-status-error mt-4",children:V},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:111,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-between items-center pt-4 border-t border-surface-border mt-4",children:[e.jsxDEV("div",{children:o>1&&e.jsxDEV("button",{onClick:()=>x(o-1),className:"btn-secondary text-xs",children:"Back"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:118,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:116,columnNumber:11},this),e.jsxDEV("div",{className:"flex gap-3",children:[e.jsxDEV("button",{onClick:()=>t("/mcp/servers"),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:124,columnNumber:13},this),F?e.jsxDEV("button",{onClick:A,disabled:!C(o,i)||j,className:"btn-primary text-xs",children:j?"Saving...":r?"Save":"Register"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:128,columnNumber:15},this):e.jsxDEV("button",{onClick:()=>x(o+1),disabled:!C(o,i),className:"btn-primary text-xs",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:136,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:115,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:100,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/detail/McpServerDetailPage.tsx",lineNumber:97,columnNumber:5},this)}export{be as McpServerDetailPage};
|
|
2
|
+
//# sourceMappingURL=index-DNytWfSZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-Ds0JoXS2.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-DNytWfSZ.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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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as r}from"./index-Cmgrk7PQ.js";import{a as l}from"./vendor-query-DLp59M9_.js";import{h as b}from"./workflows-yR9yais7.js";import{D as g}from"./DataTable-DkOokbtL.js";import{F as N,b as x}from"./FilterBar-C5r3n6YO.js";import{R as v,a as m}from"./RowActions-DbUJPfaW.js";import{u as P}from"./useFilterParams-CGRYFw_A.js";import{P as W}from"./PageHeader-Cm5HBQF_.js";import{T as y}from"./TaskQueuePill-lJR1JW_W.js";import{W as D}from"./WorkflowPill-CRpZhjGR.js";import{a3 as E,aa as j,D as C}from"./vendor-icons-AFGxSeQS.js";import{c as q}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-C7KIMIbE.js";function B(){const a=q(),{data:u,isLoading:c}=b(),{filters:s,setFilter:i}=P({filters:{search:"",queue:""}}),[o,p]=l.useState(s.search);l.useEffect(()=>{if(o===s.search)return;const e=setTimeout(()=>i("search",o),300);return()=>clearTimeout(e)},[o,i,s.search]);const t=u??[],f=l.useMemo(()=>[...new Set(t.map(e=>e.task_queue).filter(Boolean))].sort(),[t]),k=l.useMemo(()=>{let e=t;if(s.search){const n=s.search.toLowerCase();e=e.filter(h=>h.name.toLowerCase().includes(n))}return s.queue&&(e=e.filter(n=>n.task_queue===s.queue)),e},[t,s]),d=[{key:"name",label:"Workflow",render:e=>r.jsxDEV(D,{type:e.name},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:52,columnNumber:24},this)},{key:"task_queue",label:"Queue",render:e=>r.jsxDEV(y,{queue:e.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:57,columnNumber:24},this),className:"whitespace-nowrap"},{key:"registered",label:"Status",render:e=>e.registered?r.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:[r.jsxDEV(E,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:131},this),"Certified"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:64,columnNumber:11},this):r.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/workers/WorkersPage.tsx",lineNumber:65,columnNumber:11},this),className:"whitespace-nowrap"},{key:"actions",label:"",render:e=>r.jsxDEV(v,{children:e.registered?r.jsxDEV(m,{icon:j,title:"View config",onClick:()=>a(`/workflows/registry/${encodeURIComponent(e.name)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:74,columnNumber:13},this):r.jsxDEV(m,{icon:C,title:"Register workflow",onClick:()=>a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:80,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:72,columnNumber:9},this),className:"w-16 text-right"}],w=e=>{e.registered?a(`/workflows/registry/${encodeURIComponent(e.name)}`):a(`/workflows/registry/new?workflow_type=${encodeURIComponent(e.name)}&task_queue=${encodeURIComponent(e.task_queue)}`)};return r.jsxDEV("div",{children:[r.jsxDEV(W,{title:"Workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:102,columnNumber:7},this),r.jsxDEV(N,{children:[r.jsxDEV("input",{type:"text",placeholder:"Search workers...",value:o,onChange:e=>p(e.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:105,columnNumber:9},this),r.jsxDEV(x,{label:"Queue",value:s.queue,onChange:e=>i("queue",e),options:f.map(e=>({value:e,label:e}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:104,columnNumber:7},this),r.jsxDEV(g,{columns:d,data:k,keyFn:e=>e.name,onRowClick:w,isLoading:c,emptyMessage:"No active workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workers/WorkersPage.tsx",lineNumber:101,columnNumber:5},this)}export{B as WorkersPage};
|
|
2
|
+
//# sourceMappingURL=index-DX6zxr6t.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-DX6zxr6t.js","sources":["../../src/pages/workflows/workers/WorkersPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Plus, Eye, ShieldCheck } from 'lucide-react';\nimport { useActiveWorkers } from '../../../api/workflows';\nimport { DataTable, type Column } from '../../../components/common/data/DataTable';\nimport { FilterBar, FilterSelect } from '../../../components/common/data/FilterBar';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport type { ActiveWorker } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { TaskQueuePill } from '../../../components/common/display/TaskQueuePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkersPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useActiveWorkers();\n const { filters, setFilter } = useFilterParams({\n filters: { search: '', queue: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const allWorkers = data ?? [];\n\n const queues = useMemo(\n () => [...new Set(allWorkers.map((w) => w.task_queue).filter(Boolean))].sort(),\n [allWorkers],\n );\n\n const workers = useMemo(() => {\n let result = allWorkers;\n if (filters.search) {\n const q = filters.search.toLowerCase();\n result = result.filter((w) => w.name.toLowerCase().includes(q));\n }\n if (filters.queue) result = result.filter((w) => w.task_queue === filters.queue);\n return result;\n }, [allWorkers, filters]);\n\n const columns: Column<ActiveWorker>[] = [\n {\n key: 'name',\n label: 'Workflow',\n render: (row) => <WorkflowPill type={row.name} />,\n },\n {\n key: 'task_queue',\n label: 'Queue',\n render: (row) => <TaskQueuePill queue={row.task_queue} />,\n className: 'whitespace-nowrap',\n },\n {\n key: 'registered',\n label: 'Status',\n render: (row) => row.registered\n ? <span className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-accent/10 text-accent\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>\n : <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium bg-surface-sunken text-text-tertiary\">Durable</span>,\n className: 'whitespace-nowrap',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n {row.registered ? (\n <RowAction\n icon={Eye}\n title=\"View config\"\n onClick={() => navigate(`/workflows/registry/${encodeURIComponent(row.name)}`)}\n />\n ) : (\n <RowAction\n icon={Plus}\n title=\"Register workflow\"\n onClick={() => navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`)}\n />\n )}\n </RowActionGroup>\n ),\n className: 'w-16 text-right',\n },\n ];\n\n const handleRowClick = (row: ActiveWorker) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.name)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.name)}&task_queue=${encodeURIComponent(row.task_queue)}`);\n }\n };\n\n return (\n <div>\n <PageHeader title=\"Workers\" />\n\n <FilterBar>\n <input\n type=\"text\"\n placeholder=\"Search workers...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Queue\"\n value={filters.queue}\n onChange={(v) => setFilter('queue', v)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={workers}\n keyFn={(row) => row.name}\n onRowClick={handleRowClick}\n isLoading={isLoading}\n emptyMessage=\"No active workers\"\n />\n </div>\n );\n}\n"],"names":["WorkersPage","navigate","useNavigate","data","isLoading","useActiveWorkers","filters","setFilter","useFilterParams","searchInput","setSearchInput","useState","useEffect","timer","allWorkers","queues","useMemo","w","workers","result","q","columns","row","WorkflowPill","TaskQueuePill","jsxDEV","ShieldCheck","RowActionGroup","RowAction","Eye","Plus","handleRowClick","PageHeader","FilterBar","FilterSelect","v","DataTable"],"mappings":"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"}
|