flujo-ai 3.40.0 → 3.41.0
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/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +400 -384
- package/.next/app-path-routes-manifest.json +53 -53
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +33 -33
- package/.next/react-loadable-manifest.json +9 -9
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers/page.js +1 -1
- package/.next/server/app/automation/triggers/page.js.nft.json +1 -1
- package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers.html +1 -1
- package/.next/server/app/automation/triggers.rsc +4 -4
- package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/waves.html +1 -1
- package/.next/server/app/automation/waves.rsc +4 -4
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +4 -4
- package/.next/server/app/docs/page.js +3 -3
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +4 -4
- package/.next/server/app/executions/page.js +1 -1
- package/.next/server/app/executions/page.js.nft.json +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +4 -4
- package/.next/server/app/flows/page.js +5 -3
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +4 -4
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/mcp/page.js +73 -44
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +4 -4
- package/.next/server/app/models/page.js +7 -7
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +1 -1
- package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages.html +1 -1
- package/.next/server/app/packages.rsc +4 -4
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +4 -4
- package/.next/server/app/statistics/page.js +2 -2
- package/.next/server/app/statistics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/statistics.html +1 -1
- package/.next/server/app/statistics.rsc +4 -4
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +4 -4
- package/.next/server/app-paths-manifest.json +53 -53
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/1403.js +2 -2
- package/.next/server/chunks/1539.js +1 -1
- package/.next/server/chunks/2069.js +1 -1
- package/.next/server/chunks/2372.js +1 -1
- package/.next/server/chunks/2828.js +2 -2
- package/.next/server/chunks/3422.js +1 -0
- package/.next/server/chunks/3945.js +3 -3
- package/.next/server/chunks/519.js +2 -2
- package/.next/server/chunks/5444.js +2 -2
- package/.next/server/chunks/5750.js +1 -1
- package/.next/server/chunks/5918.js +10 -10
- package/.next/server/chunks/6226.js +2 -2
- package/.next/server/chunks/9088.js +2 -2
- package/.next/server/chunks/9490.js +5 -0
- package/.next/server/chunks/9543.js +3 -3
- package/.next/server/chunks/9624.js +8 -8
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1161-19176c3e7c655121.js → 1161-563a8028f59f00de.js} +1 -1
- package/.next/static/chunks/1521-9ad145dcb8e3abfc.js +1 -0
- package/.next/static/chunks/1576.06797b29a19fa26c.js +1 -0
- package/.next/static/chunks/{4386-e9621d3c94969a68.js → 2005-f9d38c39f10c321f.js} +1 -1
- package/.next/static/chunks/2493-da85c47ef972c066.js +1 -0
- package/.next/static/chunks/361.c88d43436e974006.js +1 -0
- package/.next/static/chunks/3731-c18f48522b159d7f.js +1 -0
- package/.next/static/chunks/3781.5086bce03aa281f7.js +1 -0
- package/.next/static/chunks/3969-15a32253b112652c.js +1 -0
- package/.next/static/chunks/4167.2ce97ca450815df1.js +1 -0
- package/.next/static/chunks/4814-52b7254ab573a455.js +1 -0
- package/.next/static/chunks/4965.d401547984d71b7a.js +1 -0
- package/.next/static/chunks/5148-9174ba300221fd1b.js +1 -0
- package/.next/static/chunks/5417-fb7d3760cc288ab1.js +1 -0
- package/.next/static/chunks/5967-34735763d1b03ccc.js +1 -0
- package/.next/static/chunks/7260-743e4b0cc4211dcb.js +1 -0
- package/.next/static/chunks/7711-7323dabe7dc02311.js +1 -0
- package/.next/static/chunks/8124-f99060fe1dfc119e.js +1 -0
- package/.next/static/chunks/8135-7fe07a34a8c49967.js +1 -0
- package/.next/static/chunks/8529.6187e01de8e9a692.js +1 -0
- package/.next/static/chunks/9136-e9ee57cc581ddd50.js +1 -0
- package/.next/static/chunks/9140.9180b569c4b26168.js +1 -0
- package/.next/static/chunks/9195-6a18a5867bb76c64.js +1 -0
- package/.next/static/chunks/app/automation/triggers/{page-594a6294c58344bf.js → page-34b9a8a2e6f28c2f.js} +1 -1
- package/.next/static/chunks/app/automation/waves/{page-ce2fef4996cad8e6.js → page-fd4929ea308183b2.js} +1 -1
- package/.next/static/chunks/app/chat/page-fb8a33db7628ecd0.js +1 -0
- package/.next/static/chunks/app/docs/page-3e21583b1cd5d7ca.js +1 -0
- package/.next/static/chunks/app/executions/{page-fcc848de86714386.js → page-56ecca56c17c05d7.js} +1 -1
- package/.next/static/chunks/app/flows/page-8c1a656197b15894.js +1 -0
- package/.next/static/chunks/app/layout-6e2756704ddc9f39.js +1 -0
- package/.next/static/chunks/app/mcp/page-4c4390354fdd94c8.js +1 -0
- package/.next/static/chunks/app/models/error-ea477f0ad52f4dcb.js +1 -0
- package/.next/static/chunks/app/models/page-e237ac64a0f62c3d.js +1 -0
- package/.next/static/chunks/app/packages/page-8680e4bea6b7ea45.js +1 -0
- package/.next/static/chunks/app/page-6dca06b6b7667181.js +1 -0
- package/.next/static/chunks/app/settings/page-a5f7fedcbf9e3a7f.js +1 -0
- package/.next/static/chunks/app/statistics/page-f9f9627d1c1ff963.js +1 -0
- package/.next/static/chunks/app/waves/{page-5b53af3eb9409414.js → page-7529febc48eb473d.js} +1 -1
- package/.next/static/chunks/{webpack-9fbd3587b9ef4dca.js → webpack-f3df493faa0bd612.js} +1 -1
- package/.next/static/css/{400b1b927c3ffaf6.css → 9f9b7f1374ac2d01.css} +1 -1
- package/.next/trace +11 -11
- package/README.md +1 -1
- package/mcp-servers/bash/package.json +1 -1
- package/mcp-servers/browser/package.json +1 -1
- package/mcp-servers/filesystem/package.json +1 -1
- package/mcp-servers/flujo/package.json +1 -1
- package/package.json +5 -5
- package/.next/server/chunks/7508.js +0 -5
- package/.next/server/chunks/8598.js +0 -1
- package/.next/static/chunks/1521-1c98c9a56726e053.js +0 -1
- package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +0 -1
- package/.next/static/chunks/2005.300528b5119c2d38.js +0 -1
- package/.next/static/chunks/2499-92cd97ce4993999f.js +0 -1
- package/.next/static/chunks/361.51d642c530c84295.js +0 -1
- package/.next/static/chunks/3731-64070760ae44448f.js +0 -1
- package/.next/static/chunks/4814-31eb5f3b10c651c1.js +0 -1
- package/.next/static/chunks/4965.39e24b54c3c6ca58.js +0 -1
- package/.next/static/chunks/5967-59fde8c214c9ca9f.js +0 -1
- package/.next/static/chunks/6417.70056fe81ca21682.js +0 -1
- package/.next/static/chunks/7711-4b017720ec49c96d.js +0 -1
- package/.next/static/chunks/8124-94140ee1dd8ed87c.js +0 -1
- package/.next/static/chunks/8135-5b975b9014f8920b.js +0 -1
- package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +0 -1
- package/.next/static/chunks/9001-4c27a608feddb878.js +0 -1
- package/.next/static/chunks/9136-9c415453ec02519c.js +0 -1
- package/.next/static/chunks/9140.6502327a2c098d33.js +0 -1
- package/.next/static/chunks/9195-3c9c4300e7505d9e.js +0 -1
- package/.next/static/chunks/9524-b9d2c7e4426edd07.js +0 -1
- package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +0 -1
- package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +0 -1
- package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +0 -1
- package/.next/static/chunks/app/layout-a6ca531683a518a7.js +0 -1
- package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +0 -1
- package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +0 -1
- package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +0 -1
- package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +0 -1
- package/.next/static/chunks/app/page-04189aa1b1318c2d.js +0 -1
- package/.next/static/chunks/app/settings/page-906c229c87011ead.js +0 -1
- package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +0 -1
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_buildManifest.js +0 -0
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_ssgManifest.js +0 -0
|
@@ -1,46 +1,75 @@
|
|
|
1
|
-
(()=>{var a={};a.id=313,a.ids=[313],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},9863:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m11.99 18.54-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27z"}),"Layers")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11402:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M14.94 4.66h-4.72l2.36-2.36zm-4.69 14.71h4.66l-2.33 2.33zM6.1 6.27 1.6 17.73h1.84l.92-2.45h5.11l.92 2.45h1.84L7.74 6.27zm-1.13 7.37 1.94-5.18 1.94 5.18zm10.76 2.5h6.12v1.59h-8.53v-1.29l5.92-8.56h-5.88v-1.6h8.3v1.26z"}),"SortByAlpha")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},21820:a=>{"use strict";a.exports=require("os")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},27409:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown")},28354:a=>{"use strict";a.exports=require("util")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},29866:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>cZ});var d=c(21124),e=c(81637),f=c(38301),g=c.n(f),h=c(68774),i=c(61615),j=c(42819),k=c(79515),l=c(54573),m=c(82666);let n=(0,j.h)("frontend/components/mcp/MCPServerManager/ServerList"),o=({servers:a,isLoading:b,loadError:c,onServerSelect:f,onServerToggle:g,onServerRetry:j,onServerDelete:o,onServerEdit:p,selectionMode:q=!1,selectedServers:r=new Set,onServerSelectionChange:s,updates:t,onServerUpdated:u,folders:v=[],onServerSetFolder:w,onServerToggleFavorite:x})=>(n.debug("Rendering ServerList",{serverCount:a.length,isLoading:b,hasError:!!c}),b)?(n.debug("Servers are loading"),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4},children:[(0,d.jsx)(i.default,{size:"large",color:"primary"}),(0,d.jsx)(k.A,{sx:{mt:2,color:"text.secondary"},children:"Loading servers..."})]})):c?(n.warn("Error loading servers:",c),(0,d.jsx)(l.A,{sx:{p:3,bgcolor:"error.light",color:"error.contrastText",borderRadius:1},children:(0,d.jsx)(k.A,{color:"error",children:c})})):0===a.length?(0,d.jsx)(l.A,{sx:{p:3,textAlign:"center",borderRadius:1},children:(0,d.jsx)(k.A,{color:"text.secondary",children:'No servers configured. Click "Add Server" to get started.'})}):(0,d.jsx)(m.Ay,{container:!0,spacing:2.5,children:a.map(a=>{let b="streamable"===a.transport&&void 0!==a.oauthTokens;return(0,d.jsx)(m.Ay,{item:!0,xs:12,md:6,lg:4,children:(0,d.jsx)(h.A,{name:a.name,status:a.status,path:a.rootPath,enabled:!a.disabled,transport:a.transport,onToggle:b=>g(a.name,b),onRetry:()=>j(a.name),onDelete:()=>o(a.name),onClick:()=>f(a.name),onEdit:()=>p(a),error:a.error,stderrOutput:a.stderrOutput,exposeAsMcpServer:a.exposeAsMcpServer,enableMcpApps:a.enableMcpApps,selectionMode:q,selected:r.has(a.name),onSelect:s?b=>s(a.name,b):void 0,hasOAuthTokens:b,updateInfo:a.rootPath?t?.[a.rootPath]:void 0,installCommand:a._installCommand,buildCommand:a._buildCommand,onUpdated:u?()=>u(a.name,a.rootPath):void 0,folder:a.folder,folders:v,onSetFolder:w?b=>w(a.name,b):void 0,favorite:a.favorite,onToggleFavorite:x?()=>x(a.name,!a.favorite):void 0,serverConfig:a})},a.name)})});var p=c(88745),q=c(30717),r=c(53773),s=c(37674),t=c(68730),u=c(67101),v=c(44079),w=c(84040);let x=({githubUrl:a,setGithubUrl:b,savePath:c,setSavePath:g,repoInfo:h,isValidating:i,parseCompleted:j,onValidate:l})=>{let[m,n]=(0,f.useState)(""),{getThemeColor:o}=(0,w.Ic)();return(0,f.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/cwd"),b=await a.json();b.success&&b.mcpServersDir?n(b.mcpServersDir):console.error("Failed to get mcp-servers directory path:",b.error)}catch(a){console.error("Error fetching current working directory:",a)}})()},[]),(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"GitHub Repository URL"}),(0,d.jsx)(s.A,{fullWidth:!0,value:a,onChange:a=>b(a.target.value),placeholder:"GitHub repository URL",helperText:"Paste a GitHub repository URL",variant:"outlined",size:"small"}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",mt:1},children:(0,d.jsx)(t.A,{variant:"contained",color:j?"success":"primary",onClick:l,disabled:i,children:i?"Validating...":"1) Parse"})})]}),h?.valid&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Where to save the repository?"}),(0,d.jsx)(s.A,{fullWidth:!0,value:c,onChange:a=>g(a.target.value),variant:"outlined",size:"small",InputProps:{endAdornment:(0,d.jsx)(u.A,{position:"end",children:(0,d.jsx)(v.A,{onClick:async()=>{try{let a=await window.showDirectoryPicker(),b=(m?`${m}/${a.name}`:`${a.name}`).replace(/\\/g,"/");g(b)}catch(a){console.error("Failed to select folder:",a)}},edge:"end",children:(0,d.jsx)(q.A,{})})})}})]})]})},y=({showCloneButton:a,isCloning:b,cloneCompleted:c,repoInfo:f,repoExists:g,onClone:h})=>a?(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:2},children:[g&&(0,d.jsx)(t.A,{variant:"outlined",color:"warning",onClick:()=>{h(!0)},disabled:b||!f,children:b?"Processing...":"Re-clone (Force)"}),(0,d.jsx)(t.A,{variant:"contained",color:c?"success":"primary",onClick:()=>{h(!1)},disabled:b||!f,children:b?"Processing...":g?"Use Existing":"2) Clone Repository"})]}):null,z=async a=>{try{let b,c,d=new URL(a);if("github.com"!==d.hostname)throw Error("Not a GitHub URL");let e=a.match(/^https:\/\/github\.com\/([^\/]+)\/([^\/]+)\/(?:blob|tree)\/.*$/);if(e)b=e[1],c=e[2];else{let a=d.pathname.split("/").filter(Boolean);if(a.length>=2)b=a[0],c=a[1];else throw Error("Invalid repository path")}let f=await fetch(`https://api.github.com/repos/${b}/${c}`);if(!f.ok)throw Error("Repository not found or not accessible");await f.json();let g=await fetch(`https://api.github.com/repos/${b}/${c}/contents`);if(!g.ok)throw Error("Could not fetch repository contents");let h=await g.json();return{repoInfo:{owner:b,repo:c,valid:!0,contents:h},message:{type:"success",text:`Valid repository: ${b}/${c}`},showCloneButton:!0}}catch(a){return console.error("GitHub parsing error:",a),{repoInfo:null,message:{type:"error",text:a.message||"Invalid GitHub URL. Please enter a valid repository URL."},showCloneButton:!1}}},A=async(a,b,c,d=!1)=>{try{let b=a,e=b.match(/^(https:\/\/github\.com\/[^\/]+\/[^\/]+)\/(?:blob|tree)\/.*$/);e&&(b=e[1]);let f=b.endsWith(".git")?b:`${b.replace(/\/$/,"")}.git`,g=c.replace(/\\/g,"/"),h=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clone",repoUrl:f,savePath:g,branch:void 0,forceClone:d})}),i=await h.json();if(!h.ok&&!("exists"in i))throw Error(i.error||"Failed to clone repository");let j=i.relativePath.replace(/\\/g,"/");return{success:!0,message:{type:"success",text:"Repository cloned successfully."},clonedRepoPath:j,envExample:i.envExample}}catch(b){console.error("Error cloning repository:",b);let a=b.message||"";if(a.includes("directory already exist")){let b=a.match(/directory already exist: (.+?)(,|\.|$)/);return{success:!0,message:{type:"warning",text:a},clonedRepoPath:(b?b[1]:c).replace(/\\/g,"/"),envExample:void 0}}return{success:!1,message:{type:"error",text:a||"Error cloning repository. Please try again or configure manually."},envExample:void 0}}},B=(0,j.h)("utils/mcp/processPathLikeArgument");function C(a,b=!0,c){console.log("parseServerConfig: Starting with text length:",a.length);try{let d,e,f;console.log("parseServerConfig: Unescaping markdown characters");let g=a.replace(/\\#/g,"#").replace(/\\\[/g,"[").replace(/\\\]/g,"]").replace(/\\`\\`\\`/g,"```").replace(/\\`/g,"`");console.log("parseServerConfig: Unescaped text length:",g.length),console.log("parseServerConfig: Setting up command patterns"),console.log("parseServerConfig: Extracting code blocks");let h=[...g.matchAll(/```(?:bash|sh|cmd|powershell|batch)?\s*([\s\S]*?)```/gm)].map(a=>a[1]);console.log("parseServerConfig: Found",h.length,"code blocks");let i=[];console.log("parseServerConfig: Looking for build/install commands in main text");let j=g.match(/(?:^|\n)\s*(?:build|\.\/build|build\.bat|\.\/build\.bat|build\.sh|\.\/build\.sh|npm run build|npx build|yarn build|pnpm build|vite build|webpack build|gradle build|mvn build|cargo build)\s*(?:$|\n)/m);j&&(d=j[0].trim(),console.log("parseServerConfig: Found build command in main text:",d));let k=g.match(/(?:^|\n)\s*(?:install|\.\/install|install\.bat|\.\/install\.bat|install\.sh|\.\/install\.sh|setup|\.\/setup|setup\.bat|\.\/setup\.bat|setup\.sh|\.\/setup\.sh|npm install|pip install|yarn install|pnpm install|uv install|gem install|cargo install|apt install|apt-get install|brew install)\s*(?:$|\n)/m);k&&(e=k[0].trim(),console.log("parseServerConfig: Found install command in main text:",e)),console.log("parseServerConfig: Checking code blocks for commands");for(let a=0;a<h.length;a++){let b=h[a];console.log(`parseServerConfig: Processing code block ${a+1}/${h.length}, length: ${b.length}`);let c=b.split("\n");console.log(`parseServerConfig: Code block has ${c.length} lines`);for(let a=0;a<c.length;a++){let b=c[a];if(console.log(`parseServerConfig: Processing line ${a+1}: "${b}"`),!d){let a=b.match(/^[ \t]*(build\.bat|\.\/build\.bat|build\.sh|\.\/build\.sh|npm run build|npx build|yarn build|pnpm build|vite build|webpack build|gradle build|mvn build|cargo build)(?: [\w-]+)*[ \t]*$/);a&&(d=a[1].trim(),console.log(`parseServerConfig: Found build command in code block: ${d}`))}if(!e){let a=b.match(/^[ \t]*((?:install\.bat|\.\/install\.bat|install\.sh|\.\/install\.sh|setup\.bat|\.\/setup\.bat|setup\.sh|\.\/setup\.sh|npm install|pip install|yarn install|pnpm install|uv install|gem install|cargo install|apt install|apt-get install|brew install)(?: [\w\.-]+)*)[ \t]*$/);a&&(e=a[1].trim(),console.log(`parseServerConfig: Found install command in code block: ${e}`))}console.log(`parseServerConfig: Checking for run command in line: "${b}"`);let g=b.match(/(run\.bat|\.\/run\.bat|run\.sh|\.\/run\.sh|npm start|yarn start|pnpm start|python|node|vite)(?:\s+(.+))?/);if(g&&(console.log(`parseServerConfig: Found potential run command: ${g[0]}`),!f)&&(f=g[1].trim(),console.log(`parseServerConfig: Set extracted command to: ${f}`),g[2])){let a=g[2].trim().split(/\s+/);console.log(`parseServerConfig: Extracted args: ${a.join(", ")}`),i=a}}}console.log("parseServerConfig: Cleaning text for JSON parsing");let l=a.replace(/\/\/.*$/gm,""),m="",n="",o=!1,p="";console.log("parseServerConfig: Attempting to extract server config"),console.log("parseServerConfig: Trying to match mcpServers structure");let q=l.match(/"mcpServers"\s*:\s*{\s*"([^"]+)"\s*:\s*({[^}]+})/);if(q)[,m,n]=q,o=!0,p="mcpServers structure",console.log("parseServerConfig: Found server config in mcpServers structure for:",m);else{console.log("parseServerConfig: No mcpServers structure found, trying direct structure");let a=l.match(/"([^"]+)"\s*:\s*({[^{]*"command"\s*:[^{]*"args"\s*:[^}]*})/);a?([,m,n]=a,o=!0,p="direct structure",console.log("parseServerConfig: Found direct server configuration for:",m)):(console.log("parseServerConfig: No valid configuration found in either structure"),n=l,console.log("parseServerConfig: Will attempt to extract any available information"),o=!1,p="extracted information")}console.log("parseServerConfig: Extracting command and args from config");let r=n.match(/"command"\s*:\s*"([^"]+)"/),s=r?r[1]:"";console.log("parseServerConfig: Extracted command:",s);let t=n.match(/"args"\s*:\s*\[([\s\S]*?)\]/),u=t?t[1].split(",").map(a=>a.trim()).map(a=>a.replace(/^"(.*)"$/,"$1")).filter(a=>a.length>0):[];console.log("parseServerConfig: Extracted args:",u),console.log("parseServerConfig: Extracting disabled and autoApprove settings");let v=n.match(/"disabled"\s*:\s*(true|false)/),w=!!v&&"true"===v[1];console.log("parseServerConfig: Extracted disabled:",w);let x=n.match(/"autoApprove"\s*:\s*\[([\s\S]*?)\]/),y=x?x[1].split(",").map(a=>a.trim()).map(a=>a.replace(/^"(.*)"$/,"$1")).filter(a=>a.length>0):[];console.log("parseServerConfig: Extracted autoApprove:",y);let z={};if(console.log("parseServerConfig: Parsing environment variables, parseEnvVars =",b),b){for(let a of(console.log("parseServerConfig: Extracting env vars with standard pattern"),g.matchAll(/^\ *(\w+)=["']?([^"'\r\n#]*)["']?(?:\s*#[^\r\n]*)?(?=\r?\n|$)/gm))){let b=a[1],c=a[2].trim();b&&void 0!==c&&(z[b]=c,console.log(`parseServerConfig: Found env var (standard): ${b}=${c}`))}for(let a of(console.log("parseServerConfig: Extracting env vars with README pattern"),g.matchAll(/(?:^|\n)[-*]?\s*`?(\w+)`?(?:\s*:|=)\s*[`"']?([^`"'\r\n#]*)(?:[`"'])?(?:\s*#[^\r\n]*)?(?=\r?\n|$)/gm))){let b=a[1],c=a[2].trim();b&&void 0!==c&&!z[b]&&(z[b]=c,console.log(`parseServerConfig: Found env var (README): ${b}=${c}`))}}console.log("parseServerConfig: Building final config object");let A=s||f||"";console.log("parseServerConfig: Final command:",A);let C=s&&u.length>0?u:f&&i.length>0?i:u,D=c||m,E=C.map(a=>(function(a,b){if(B.debug("processPathLikeArgument: Entering method",{arg:a,serverName:b}),!a||"string"!=typeof a||!a.includes("/")&&!a.includes("\\"))return a;if(/^@[^/\s]+\/[^/\s@]+(?:@[^/\s]+)?$/.test(a))return B.debug(`processPathLikeArgument: Detected scoped npm package, leaving unchanged: ${a}`),a;B.debug(`processPathLikeArgument: Processing argument: ${a}`);let c=a;for(let a of["/path/to","PATH_TO","path/to","PATH/TO","/PATH/TO","/PATH_TO","path_to"]){let b=c.indexOf(a);if(-1!==b){c=c.substring(b+a.length),B.debug(`processPathLikeArgument: Stripped path pattern "${a}": ${c}`);break}}if(b&&c.includes(b)){let a=RegExp(`(^|[\\/\\\\])${b}([\\/\\\\]|$)`);a.test(c)&&(c=c.replace(a,"$1$2"),B.debug(`processPathLikeArgument: Removed server name "${b}": ${c}`),c=c.replace(/\/\//g,"/"))}return(c.startsWith("/")||c.startsWith("\\"))&&(c=c.substring(1),B.debug(`processPathLikeArgument: Removed leading slash: ${c}`)),c||(c=".",B.debug('processPathLikeArgument: Empty result, replaced with "."')),B.debug(`processPathLikeArgument: Final result: ${c}`),c})(a,D));console.log("parseServerConfig: Final args (after path processing):",E);let F={name:m||"",command:A,args:E,env:z,disabled:w,autoApprove:y,_buildCommand:d,_installCommand:e};if(console.log("parseServerConfig: Config object created:",JSON.stringify(F,null,2)),console.log("parseServerConfig: Preparing return message"),o)return console.log(`parseServerConfig: Returning success - config found in ${p}`),{config:F,foundExplicitConfig:!0,message:{type:"success",text:`Configuration for "${m}" extracted successfully from ${p}.`}};{let a=[];if(s&&a.push("command"),u.length>0&&a.push("arguments"),Object.keys(z).length>0&&a.push("environment variables"),a.length>0)return console.log(`parseServerConfig: Returning warning - partial data extracted: ${a.join(", ")}`),{config:F,foundExplicitConfig:!1,message:{type:"warning",text:`No complete server configuration found, but extracted: ${a.join(", ")}.`}};return console.log("parseServerConfig: Returning error - no data found"),{config:F,foundExplicitConfig:!1,message:{type:"error",text:"No server configuration data found."}}}}catch(a){return console.error("parseServerConfig: Exception occurred:",a),{config:{},foundExplicitConfig:!1,message:{type:"error",text:"Failed to extract server configuration. Please check the content format."}}}}(0,j.h)("utils/mcp/parseServerConfigFromClipboard");let D=(0,j.h)("utils/mcp/configparse/utils");async function E(a,b,c=!1){try{D.debug(`Checking if file exists: ${a}/${b}`);let d=a.endsWith("/")||a.endsWith("\\")?`${a}${b}`:`${a}/${b}`;D.debug(`Constructed full path: ${d}`);let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:d})});if(!e.ok)return D.debug(`File does not exist: ${a}/${b}`),{exists:!1};let f=await e.json();if(!f.content&&c)return D.debug(`File exists but is empty: ${a}/${b}`),{exists:!0,content:""};return D.debug(`File exists: ${a}/${b}`),{exists:!0,content:c?f.content:void 0}}catch(c){return D.error(`Error checking if file exists: ${a}/${b}`,c),{exists:!1}}}async function F(a,b){try{let c=await E(a,b,!0);return c.exists&&c.content?c.content:null}catch(c){return D.error(`Error reading file: ${a}/${b}`,c),null}}let G=(0,j.h)("utils/mcp/configparse/typescript");async function H(a){let{repoPath:b,repoName:c}=a;G.debug(`Parsing TypeScript configuration for ${b}`);let d=await E(b,"package.json",!0);if(!d.exists||!d.content)return G.debug(`No package.json found in ${b}`),{detected:!1,language:"typescript",message:{type:"warning",text:"No package.json found in the repository."}};try{let a=JSON.parse(d.content);G.debug(`Successfully parsed package.json for ${b}`);let e=function(a){if(a.packageManager){if(a.packageManager.startsWith("yarn"))return"yarn install";else if(a.packageManager.startsWith("pnpm"))return"pnpm install"}return"npm install --include=dev"}(a),f=function(a){let b=a.scripts||{};return b.build?"npm run build":b.compile?"npm run compile":b.dist?"npm run dist":b.prepare&&b.prepare.includes("build")?"npm run prepare":""}(a),g="node",h=await I(a,b),i=await J(b),j=((await E(b,"tsconfig.json")).exists,"typescript");return{detected:!0,language:j,installCommand:e,buildCommand:f,runCommand:g,args:h,env:i,message:{type:"success",text:"TypeScript/JavaScript configuration detected successfully."},config:{name:c,transport:"stdio",command:g,args:h,env:i,_buildCommand:f,_installCommand:e}}}catch(a){return G.error(`Error parsing package.json for ${b}:`,a),{detected:!1,language:"typescript",message:{type:"error",text:`Error parsing package.json: ${a instanceof Error?a.message:"Unknown error"}`}}}}async function I(a,b){let c=a.scripts||{},d=a.main||"",e=[],f="dist";if(c.build){let a=c.build,b=a.match(/tsc\s+.*(?:--outDir\s+|--outDir=|--outDir\s*=\s*|--out-dir\s+|--out-dir=|--out-dir\s*=\s*|--out\s+|--out=|--out\s*=\s*|-d\s+|-d=|-d\s*=\s*)["']?([^"'\s]+)["']?/);b&&b[1]&&(f=b[1],G.debug(`Extracted output directory from build script: ${f}`));let d=a.match(/(?:webpack|rollup|vite).*(?:--output\s+|--output=|--output\s*=\s*|-o\s+|-o=|-o\s*=\s*)["']?([^"'\s]+)["']?/);d&&d[1]&&(f=d[1],G.debug(`Extracted output directory from webpack/rollup/vite build script: ${f}`)),(a.includes("build/")||a.includes("build\\"))&&(f="build",G.debug("Found 'build' directory reference in build script"))}if(c.start){let a=c.start,b=a.match(/node\s+(?:--[^\s]+=?[^\s]*\s+)*([^\s]+)/);if(b&&b[1])return G.debug(`Extracted entry point from start script: ${b[1]}`),e.push(b[1]),e;let d=a.match(/\b((?:\.\/)?(?:[\w\-\.\/]+)\.js)\b/);if(d&&d[1])return G.debug(`Found .js file in start script: ${d[1]}`),e.push(d[1]),e;let g=a.match(/ts-node\s+([^\s]+)/);if(g&&g[1]){let a=g[1].replace(/\.ts$/,".js").replace(/^src\//,`${f}/`);return e.push(a),e}}if(d&&!d.endsWith(".ts"))return e.push(d),e;let g=`${f}/index.js`;if((await E(b,g)).exists)return e.push(g),e;for(let a of["dist/index.js","build/index.js","lib/index.js","out/index.js"])if((await E(b,a)).exists)return e.push(a),e;return e.push(`${f}/index.js`),e}async function J(a){let b=await F(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let K=(0,j.h)("utils/mcp/configparse/python");async function L(a){var b;let{repoPath:c,repoName:d}=a;K.debug(`Parsing Python configuration for ${c}`);let e=await E(c,"requirements.txt"),f=await E(c,"pyproject.toml",!0),g=await E(c,"setup.py",!0);if(!e.exists&&!f.exists&&!g.exists)return K.debug(`No Python project files found in ${c}`),{detected:!1,language:"python",message:{type:"warning",text:"No Python project files found in the repository."}};let h=(b=e.exists,f.exists?"uv sync":b?"uv venv && uv pip install -r requirements.txt":"uv venv && uv pip install -e ."),{runCommand:i,args:j}=await M(c,f.content,g.content),k=await N(c);return{detected:!0,language:"python",installCommand:h,buildCommand:"",runCommand:i,args:j,env:k,message:{type:"success",text:"Python configuration detected successfully."},config:{name:d,transport:"stdio",command:i,args:j,env:k,_buildCommand:"",_installCommand:h}}}async function M(a,b,c){let d=["run","python"];for(let b of["main.py","app.py","server.py","run.py","index.py","src/main.py","src/app.py","src/server.py","src/run.py","src/index.py"])if((await E(a,b)).exists)return d.push(b),{runCommand:"uv",args:d};if(b)try{let a=b.match(/\[tool\.poetry\.scripts\]([\s\S]*?)(\[|$)/);if(a){let b=a[1].match(/(\w+)\s*=\s*["']([^"']+)['"]/);if(b){let a=b[2].split(":")[0];return d.push("-m"),d.push(a),{runCommand:"uv",args:d}}}let c=b.match(/\[project\][\s\S]*?name\s*=\s*["']([^"']+)['"]/);if(c){let a=c[1].replace(/-/g,"_");return d.push("-m"),d.push(a),{runCommand:"uv",args:d}}}catch(a){K.error("Error parsing pyproject.toml:",a)}if(c)try{let a=c.match(/name\s*=\s*["']([^"']+)['"]/);if(a){let b=a[1].replace(/-/g,"_");return d.push("-m"),d.push(b),{runCommand:"uv",args:d}}}catch(a){K.error("Error parsing setup.py:",a)}return 2===d.length&&d.push("main.py"),{runCommand:"uv",args:d}}async function N(a){let b=await F(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let O=(0,j.h)("utils/mcp/configparse/java");async function P(a){var b,c,d,e,f,g,h,i;let{repoPath:j,repoName:k}=a;O.debug(`Parsing Java configuration for ${j}`);let l=await E(j,"pom.xml",!0),m=await E(j,"build.gradle",!0),n=await E(j,"gradlew"),o=await E(j,"mvnw");if(!l.exists&&!m.exists)return O.debug(`No Java project files found in ${j}`),{detected:!1,language:"java",message:{type:"warning",text:"No Java project files found in the repository."}};let p=l.exists,q=m.exists,r=n.exists,s=o.exists,t=(b=p,c=q,d=s,e=r,b?d?"./mvnw install -DskipTests":"mvn install -DskipTests":c?e?"./gradlew dependencies":"gradle dependencies":""),u=(f=p,g=q,h=s,i=r,f?h?"./mvnw package -DskipTests":"mvn package -DskipTests":g?i?"./gradlew build":"gradle build":""),{runCommand:v,args:w}=await Q(j,p,q,l.content,m.content),x=await R(j);return{detected:!0,language:"java",installCommand:t,buildCommand:u,runCommand:v,args:w,env:x,message:{type:"success",text:"Java configuration detected successfully."},config:{name:k,transport:"stdio",command:v,args:w,env:x,_buildCommand:u,_installCommand:t}}}async function Q(a,b,c,d,e){let f="java",g=[];if(g.push("-jar"),b)try{if(d){let a=d.match(/<artifactId>([^<]+)<\/artifactId>/);if(a){let b=a[1],c=`target/${b}*.jar`;return g.push(c),{runCommand:f,args:g}}}return g.push("target/*.jar"),{runCommand:f,args:g}}catch(a){O.error("Error determining Maven JAR path:",a)}else if(c)try{let b="build/libs/*-all.jar";if((await E(a,b)).exists)return g.push(b),{runCommand:f,args:g};let c="build/libs/*-fat.jar";if((await E(a,c)).exists)return g.push(c),{runCommand:f,args:g};return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){O.error("Error determining Gradle JAR path:",a)}if(1===g.length){for(let b of["target/*.jar","build/libs/*.jar","out/artifacts/*/*.jar"])if((await E(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("target/*.jar")}return{runCommand:f,args:g}}async function R(a){let b=await F(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let S=(0,j.h)("utils/mcp/configparse/kotlin");async function T(a){var b,c,d,e,f,g;let{repoPath:h,repoName:i}=a;S.debug(`Parsing Kotlin configuration for ${h}`);let j=await E(h,"build.gradle.kts",!0),k=await E(h,"build.gradle",!0),l=await E(h,"gradlew"),m=await U(h);if(!j.exists&&!m){if(!k.exists)return S.debug(`No Kotlin project files found in ${h}`),{detected:!1,language:"kotlin",message:{type:"warning",text:"No Kotlin project files found in the repository."}};else if(!(k.content&&(k.content.includes("kotlin")||k.content.includes("org.jetbrains.kotlin"))))return S.debug(`No Kotlin project files found in ${h}`),{detected:!1,language:"kotlin",message:{type:"warning",text:"No Kotlin project files found in the repository."}}}let n=j.exists,o=k.exists,p=l.exists,q=(b=n,c=o,d=p,b||c?d?"./gradlew dependencies":"gradle dependencies":""),r=(e=n,f=o,g=p,e||f?g?"./gradlew build":"gradle build":""),{runCommand:s,args:t}=await V(h,n,o,j.content,k.content),u=await W(h);return{detected:!0,language:"kotlin",installCommand:q,buildCommand:r,runCommand:s,args:t,env:u,message:{type:"success",text:"Kotlin configuration detected successfully."},config:{name:i,transport:"stdio",command:s,args:t,env:u,_buildCommand:r,_installCommand:q}}}async function U(a){for(let b of["src/main/kotlin","src/test/kotlin","src"])if((await E(a,b)).exists)return!0;return!1}async function V(a,b,c,d,e){let f="java",g=[];g.push("-jar");try{let h="build/libs/*-all.jar";if((await E(a,h)).exists)return g.push(h),{runCommand:f,args:g};let i="build/libs/*-fat.jar";if((await E(a,i)).exists)return g.push(i),{runCommand:f,args:g};let j="build/libs/*-with-dependencies.jar";if((await E(a,j)).exists)return g.push(j),{runCommand:f,args:g};let k="";if(b&&d){let a=d.match(/mainClass\.set\(["']([^"']+)["']\)/);a&&(k=a[1])}else if(c&&e){let a=e.match(/mainClassName\s*=\s*['"]([^'"]+)['"]/);a&&(k=a[1])}if(k){let b=k.split("."),c=b[b.length-1].toLowerCase(),d=`build/libs/*${c}*.jar`;if((await E(a,d)).exists)return g.push(d),{runCommand:f,args:g}}return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){S.error("Error determining Kotlin JAR path:",a)}if(1===g.length){for(let b of["build/libs/*.jar","out/artifacts/*/*.jar"])if((await E(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("build/libs/*.jar")}return{runCommand:f,args:g}}async function W(a){let b=await F(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let X=(0,j.h)("utils/mcp/configparse/index");async function Y(a){let{repoPath:b,repoName:c}=a;X.debug(`Parsing repository configuration for ${b}`);let d=await Z(b,c);if(d.detected&&d.foundExplicitConfig&&d.runCommand)return X.debug(`Explicit configuration found in README for ${b}`),d;X.debug(`Trying TypeScript/JavaScript parser for ${b}`);let e=await H(a);if(e.detected)return X.debug(`TypeScript/JavaScript configuration detected for ${b}`),e;X.debug(`Trying Python parser for ${b}`);let f=await L(a);if(f.detected)return X.debug(`Python configuration detected for ${b}`),f;X.debug(`Trying Java parser for ${b}`);let g=await P(a);if(g.detected)return X.debug(`Java configuration detected for ${b}`),g;X.debug(`Trying Kotlin parser for ${b}`);let h=await T(a);return h.detected?(X.debug(`Kotlin configuration detected for ${b}`),h):d.detected?(X.debug(`Configuration extracted from README for ${b}`),d):(X.debug(`No configuration detected for ${b}, returning default configuration`),{detected:!1,language:"unknown",message:{type:"error",text:"Could not detect repository configuration. Please configure manually."},config:{name:c,transport:"stdio",command:"",args:[],env:{},_buildCommand:"",_installCommand:""}})}async function Z(a,b){try{let c=`${a}/README.md`,d=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:c})});if(!d.ok)return X.debug(`Failed to read README file from ${a}`),{detected:!1,language:"unknown",message:{type:"warning",text:"No README file found in the repository."}};let e=await d.json();if(!e.content)return X.debug(`README file is empty in ${a}`),{detected:!1,language:"unknown",message:{type:"warning",text:"README file is empty."}};let f=await _(e.content,{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},b);if(f.config&&("stdio"===f.config.transport&&f.config.command||f.config._buildCommand||f.config._installCommand))return{detected:!0,language:"unknown",foundExplicitConfig:f.foundExplicitConfig,installCommand:f.config._installCommand||"",buildCommand:f.config._buildCommand||"",runCommand:"stdio"===f.config.transport&&f.config.command||"",args:"stdio"===f.config.transport&&f.config.args||[],env:f.config.env?Object.fromEntries(Object.entries(f.config.env).map(([a,b])=>[a,"string"==typeof b?b:b.value])):{},message:f.message||{type:"success",text:"Configuration extracted from README."},config:f.config};return{detected:!1,language:"unknown",message:{type:"warning",text:"No configuration found in README."}}}catch(b){return X.error(`Error parsing README from ${a}:`,b),{detected:!1,language:"unknown",message:{type:"error",text:`Error parsing README: ${b instanceof Error?b.message:"Unknown error"}`}}}}function $(a){return"stdio"===a.transport}let _=async(a,b,c)=>{try{let d=c||b.name,e=C(a,!1,d);if(!e.config||!(Object.keys(e.config).length>0))return{config:b,foundExplicitConfig:!1,message:{type:"warning",text:"No server configuration found in README."}};{let a={...b,...e.config,name:b.name,env:{...b.env,...e.config.env}},c="command"in e.config;return{config:$(a)||c?{...a,command:c&&e.config.command||"",transport:a.transport||"stdio"}:{...a,transport:a.transport||"websocket",websocketUrl:a.websocketUrl||""},foundExplicitConfig:e.foundExplicitConfig,message:{type:"success",text:"Server configuration extracted from README."}}}}catch(a){return console.error("Error parsing README:",a),{config:b,message:{type:"error",text:`Error parsing README: ${a.message||"Unknown error"}`}}}},aa=async(a,b)=>{try{let c=b||a.name,d=await window.navigator.clipboard.readText().then(a=>C(a,!1,c));if(!d.config||!(Object.keys(d.config).length>0))return{config:a,message:d.message||{type:"warning",text:"No valid configuration found in clipboard."}};{let b={...a,...d.config,name:a.name,env:{...a.env,...d.config.env}},c="command"in d.config;return{config:$(b)||c?{...b,command:c&&d.config.command||"",transport:b.transport||"stdio"}:{...b,transport:b.transport||"websocket",websocketUrl:b.websocketUrl||""},message:d.message||{type:"success",text:"Configuration parsed from clipboard."}}}}catch(b){return console.error("Error parsing clipboard:",b),{config:a,message:{type:"error",text:`Error parsing clipboard: ${b.message||"Unknown error"}`}}}},ab=(0,j.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/configDetection");async function ac(a,b,c){try{ab.debug(`Detecting configuration for repository: ${a}`);let d=await Y({repoPath:a,repoName:b,owner:c});if(d.detected&&d.config)return ab.debug(`Configuration detected for ${a}`,{language:d.language}),{config:d.config,message:d.message||{type:"success",text:"Configuration detected successfully."},success:!0,language:d.language};return ab.debug(`No configuration detected for ${a}`),{config:{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},message:d.message||{type:"warning",text:"Could not detect repository configuration. Please configure manually."},success:!1,language:d.language}}catch(c){return ab.error(`Error detecting configuration for ${a}:`,c),{config:{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},message:{type:"error",text:`Error detecting configuration: ${c instanceof Error?c.message:"Unknown error"}`},success:!1}}}(0,j.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/errorHandling");var ad=c(33873),ae=c.n(ad);let af=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,setActiveTab:h,initialGitHubUrl:i})=>{let[j,m]=(0,f.useState)(i||""),[n,o]=(0,f.useState)(null),[q,s]=(0,f.useState)(""),[t,u]=(0,f.useState)(!1),[v,w]=(0,f.useState)(!1),[B,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(!1),[G,H]=(0,f.useState)(!1),[I,J]=(0,f.useState)(null),[K,L]=(0,f.useState)(""),[M,N]=(0,f.useState)(null),[O,P]=(0,f.useState)(""),[Q,R]=(0,f.useState)(!1);(0,f.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/cwd"),b=await a.json();b.success&&b.mcpServersDir?P(b.mcpServersDir):console.error("Failed to get mcp-servers directory:",b.error)}catch(a){console.error("Error fetching cwd information:",a)}})()},[]);let S=async()=>{w(!0),J(null),R(!1);let a=await z(j);if(o(a.repoInfo),J(a.message),u(a.showCloneButton),a.repoInfo){if(O){let b=ae().join(O,a.repoInfo.repo);s(b),await T(b)}else try{let b=await fetch("/api/cwd"),c=await b.json();if(c.success&&c.mcpServersDir){P(c.mcpServersDir);let b=ae().join(c.mcpServersDir,a.repoInfo.repo);s(b),await T(b)}else console.error("Failed to get mcp-servers directory:",c.error),s(`./mcp-servers/${a.repoInfo.repo}`)}catch(b){console.error("Error fetching cwd information:",b),s(`./mcp-servers/${a.repoInfo.repo}`)}F(!0)}w(!1)},T=async a=>{try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"exists",savePath:a})}),c=await b.json();c.success&&c.exists?(R(!0),J({type:"warning",text:`Repository already exists at ${a}. You can re-clone to get the latest version.`})):R(!1)}catch(a){console.error("Error checking if repository exists:",a),R(!1)}},U=async(a=!1)=>{if(n){D(!0),J({type:"success",text:a?"Re-cloning repository...":"Cloning repository..."});try{let b=await A(j,n,q,a);if(!b.success||!b.clonedRepoPath){J(b.message),D(!1);return}let d=b.clonedRepoPath;L(d);let e={};b.envExample&&"string"==typeof b.envExample&&(e=(a=>{try{return a.split("\n").filter(a=>""!==a.trim()).reduce((a,b)=>{let[c,d]=b.split("=").map(a=>a.trim());return c&&d&&(a[c]=d),a},{})}catch(a){return console.error("Failed to parse env variables:",a),{}}})(b.envExample),console.log("Parsed environment variables from .env.example:",e));let f=await ac(d,n.repo,n.owner);J(f.message);let g={},i=f.message;if(f.success&&f.config)console.log("GitHubTab: Initial detection successful. Merging config."),g={...f.config,rootPath:d,env:{...f.config.env||{},...e}},i=f.message;else{console.log("GitHubTab: Initial detection failed. Attempting README parsing fallback.");let a={name:n.repo,transport:"stdio",command:"",args:[],env:e,disabled:!1,autoApprove:[],rootPath:d,_buildCommand:"",_installCommand:""};try{let b=ae().join(n.repo,"README.md");console.log(`GitHubTab: Reading README.md from relative path: ${b}`);let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:b})}),h=await c.json();if(h.success&&h.content){console.log("GitHubTab: README.md read successfully. Parsing content.");let b=C(h.content,!0,n.repo);console.log("GitHubTab: README parse result:",b),g={...a,...b.config,rootPath:d,env:{...a.env||{},...b.config?.env||{},...e},_buildCommand:b.config?._buildCommand||a._buildCommand,_installCommand:b.config?._installCommand||a._installCommand},i=b.message||{type:"warning",text:"Configuration partially extracted from README.md. Please review."}}else console.log("GitHubTab: Failed to read or parse README.md. Using default config."),g=a,i=function(a){let b=a?` for ${a}`:"";return{type:"warning",text:`No configuration detected${b}. Please configure manually.`}}(f.language)}catch(b){console.error("GitHubTab: Error reading or parsing README.md:",b),g=a,i={type:"error",text:`Error processing README.md: ${b instanceof Error?b.message:"Unknown error"}`}}}g={...g,source:{type:"github",repositoryUrl:j}},N(g),J(i),c&&g.name&&c(g),h&&h("local"),H(!0)}catch(a){console.error("Error during repository cloning or configuration detection:",a),J({type:"error",text:`Error processing repository: ${a instanceof Error?a.message:"Unknown error"}`})}finally{D(!1)}}};return(0,d.jsx)(l.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:"Import from GitHub or MCP Platform"}),(0,d.jsx)(x,{githubUrl:j,setGithubUrl:m,savePath:q,setSavePath:s,repoInfo:n,isValidating:v,parseCompleted:E,onValidate:S}),(0,d.jsx)(y,{showCloneButton:t,isCloning:B,cloneCompleted:G,repoInfo:n,repoExists:Q,onClone:U}),I&&(0,d.jsx)(e.default,{children:(0,d.jsx)(p.A,{severity:I.type,children:I.text})})]})})};var ag=c(22813),ah=c(92812),ai=c(60839);let aj=({output:a,isVisible:b,toggleVisibility:c,title:f="Command Output"})=>{let g=(0,ai.A)();return(0,d.jsxs)(l.A,{variant:"outlined",sx:{p:2,height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(k.A,{variant:"h6",children:f}),(0,d.jsx)(v.A,{onClick:c,size:"small",title:b?"Hide console":"Show console",color:"inherit",sx:{color:"text.secondary"},children:b?(0,d.jsx)(ah.A,{}):(0,d.jsx)(ag.A,{})})]}),(0,d.jsx)(e.default,{sx:{fontFamily:"monospace",p:2,borderRadius:1,bgcolor:"dark"===g.palette.mode?"#121212":"#1a1a1a",color:"#4ade80",flex:1,overflow:"auto"},children:a?(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",m:0},children:a}):(0,d.jsx)(k.A,{variant:"body2",sx:{fontStyle:"italic",color:"text.secondary"},children:"No output to display"})})]})},ak=()=>{let[a,b]=(0,f.useState)(""),[c,d]=(0,f.useState)(!1),[e,g]=(0,f.useState)("Command Output");return{consoleOutput:a,isConsoleVisible:c,consoleTitle:e,setConsoleTitle:g,toggleConsoleVisibility:()=>{d(a=>!a)},setIsConsoleVisible:d,appendToConsole:a=>{b(b=>b+a)},clearConsole:()=>{b("")},updateConsole:a=>{b(a)}}},al=({name:a,setName:b,rootPath:c,setRootPath:f,onRootPathSelect:g})=>(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Server Name"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),placeholder:"my-mcp-server",variant:"outlined",required:!0})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"MCP Server Root Path"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:c,onChange:a=>f(a.target.value),placeholder:"/path/to/server/root",variant:"outlined",InputProps:{endAdornment:(0,d.jsx)(u.A,{position:"end",children:(0,d.jsx)(v.A,{onClick:g,edge:"end",children:(0,d.jsx)(q.A,{})})})}})]})]});var am=c(8521);let an=({installCommand:a,setinstallCommand:b,buildCommand:c,setBuildCommand:g,onInstall:h,onBuild:i,isInstalling:j,isBuilding:m,installCompleted:n,buildCompleted:o,buildMessage:q})=>{let u=["Still working on it...","Don't close this window!","This can take some time...","Backend is processing your request...","Almost there, please wait...","Processing in progress..."],v=[...u,"Installing dependencies...","NPM install in progress...","Fetching packages from registry..."],w=[...u,"Building server...","Compiling source code...","Bundling files..."],[x,y]=(0,f.useState)(0),[z,A]=(0,f.useState)(0);return(0,f.useEffect)(()=>{let a;return j&&(a=setInterval(()=>{y(a=>(a+1)%v.length)},3e3)),()=>{a&&clearInterval(a)}},[j,v.length]),(0,f.useEffect)(()=>{let a;return m&&(a=setInterval(()=>{A(a=>(a+1)%w.length)},3e3)),()=>{a&&clearInterval(a)}},[m,w.length]),(0,d.jsxs)(r.A,{spacing:3,children:[q&&"error"===q.type&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:q.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Install Script"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),variant:"outlined"}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:1},children:[j&&(0,d.jsxs)(l.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(am.default,{size:20,color:"info"}),(0,d.jsx)(k.A,{variant:"body2",color:"info.dark",fontWeight:"medium",children:v[x]})]}),(0,d.jsx)(t.A,{variant:"contained",color:n?"success":"primary",onClick:h,disabled:j,children:j?"Installing...":"1) Install Dependencies"})]})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Build Command"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:c,onChange:a=>g(a.target.value),variant:"outlined"}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:1},children:[m&&(0,d.jsxs)(l.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(am.default,{size:20,color:"info"}),(0,d.jsx)(k.A,{variant:"body2",color:"info.dark",fontWeight:"medium",children:w[z]})]}),(0,d.jsx)(t.A,{variant:"contained",color:o?"success":"primary",onClick:i,disabled:m,children:m?"Building...":"2) Build Server"})]})]})]})};var ao=c(38296),ap=c(41893),aq=c(95587),ar=c(77028),as=c(43312),at=c(6537),au=c(47902),av=c(91034),aw=c(85557),ax=c(93083),ay=c(49938),az=c(82571),aA=c(92173);let aB=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,aC=a=>Object.entries(a||{}).map(([a,b])=>{let c=null!==b&&"object"==typeof b&&"value"in b,d=c?b.value??"":b??"",e=c?!!b.metadata?.isSecret:(0,az.Hm)(a),f=d.match(aB);if(f)return{key:a,value:d,isSecret:e,isBound:!0,boundTo:f[1]};let g=d===aA.RJ||d===aA.gF;return{key:a,value:d,isSecret:e,isMasked:g}}),aD=a=>{let b={};return a.forEach(({key:a,value:c,isSecret:d,isBound:e,boundTo:f})=>{let g=a.trim();g&&(e&&f?b[g]={value:"${global:"+f+"}",metadata:{isSecret:!!d}}:b[g]={value:c,metadata:{isSecret:!!d}})}),b},aE=({headers:a,onChange:b})=>{let{globalEnvVars:c}=(0,ay.rX)(),[f,h]=g().useState(()=>aC(a)),[i,j]=g().useState(!1),[l,m]=g().useState(null),n=JSON.stringify(a||{}),o=g().useRef(n);g().useEffect(()=>{o.current!==n&&n!==JSON.stringify(aD(f))&&(h(aC(a)),o.current=n)},[n]);let p=a=>{h(a);let c=aD(a);o.current=JSON.stringify(c),b(c)};return(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Custom HTTP Headers"}),(0,d.jsxs)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Sent on every request to the server (e.g. an ",(0,d.jsx)("code",{children:"Authorization"})," header or any custom headers the server requires). Values can be marked ",(0,d.jsx)("strong",{children:"secret"})," (masked in the UI, encrypted at rest) or bound to a global variable."]}),(0,d.jsxs)(r.A,{spacing:1.5,children:[0===f.length&&(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:"No custom headers configured."}),f.map((a,b)=>(0,d.jsxs)(r.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,d.jsx)(s.A,{size:"small",label:"Header",placeholder:"Authorization",value:a.key,onChange:a=>((a,b)=>{p(f.map((c,d)=>{if(d!==a)return c;let e=c.isSecret||(0,az.Hm)(b);return{...c,key:b,isSecret:e}}))})(b,a.target.value),sx:{flex:"0 0 32%"}}),(0,d.jsx)(s.A,{size:"small",label:"Value",type:a.isSecret&&!a.isBound?"password":"text",placeholder:a.showWarning?"Re-enter value":a.isMasked?"(unchanged)":"Basic dXNlcjpwYXNz",value:a.isBound?"":a.value,onChange:a=>((a,b)=>{let c=b.match(aB);p(f.map((d,e)=>e===a?{...d,value:b,isBound:!!c,boundTo:c?.[1],isMasked:!1,showWarning:!1}:d))})(b,a.target.value),error:a.showWarning,helperText:a.showWarning?'Re-enter the value after turning off "Secret".':a.isMasked?"A secret is stored. Type to replace it, or bind to a global variable.":"",InputProps:{readOnly:a.isBound,endAdornment:a.isBound?(0,d.jsx)(u.A,{position:"end",children:(0,d.jsx)(ap.A,{size:"small",label:`Bound: ${a.boundTo}`,color:"primary",variant:"outlined",onDelete:()=>{p(f.map((a,c)=>c===b?{...a,isBound:!1,boundTo:void 0,value:""}:a))},deleteIcon:(0,d.jsx)(ax.A,{fontSize:"small"})})}):null},sx:{flex:1}}),(0,d.jsx)(aq.A,{control:(0,d.jsx)(ar.A,{checked:a.isSecret,onChange:a=>((a,b)=>{p(f.map((c,d)=>d!==a?c:c.isSecret&&!b&&c.isMasked?{...c,isSecret:b,value:"",isMasked:!1,showWarning:!0}:{...c,isSecret:b}))})(b,a.target.checked),size:"small"}),label:"Secret",sx:{mr:0,mt:.25}}),!a.isBound&&(0,d.jsx)(as.A,{title:"Bind to a global variable",children:(0,d.jsx)(v.A,{"aria-label":"bind header to global variable",size:"small",color:"primary",onClick:()=>{m(b),j(!0)},sx:{mt:.25},children:(0,d.jsx)(aw.A,{fontSize:"small"})})}),(0,d.jsx)(as.A,{title:"Remove header",children:(0,d.jsx)(v.A,{"aria-label":"remove header",onClick:()=>{p(f.filter((a,c)=>c!==b))},size:"small",sx:{mt:.25},children:(0,d.jsx)(av.A,{fontSize:"small"})})})]},b)),(0,d.jsx)(e.default,{children:(0,d.jsx)(t.A,{startIcon:(0,d.jsx)(au.A,{}),onClick:()=>{h(a=>[...a,{key:"",value:"",isSecret:!1}])},size:"small",variant:"outlined",children:"Add Header"})})]}),(0,d.jsx)(at.A,{open:i,onClose:()=>{j(!1),m(null)},children:(0,d.jsxs)(e.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(k.A,{variant:"h6",sx:{mb:2},children:"Bind Header to Global Variable"}),0===Object.keys(c).length?(0,d.jsx)(k.A,{color:"text.secondary",sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,d.jsx)(e.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.keys(c).map(a=>(0,d.jsx)(t.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{null!==l&&(p(f.map((b,c)=>c===l?{...b,isBound:!0,boundTo:a,value:"${global:"+a+"}",isMasked:!1,showWarning:!1}:b)),j(!1),m(null))})(a),sx:{justifyContent:"flex-start",textAlign:"left",mb:1,p:1,borderRadius:1},children:(0,d.jsx)(k.A,{variant:"body2",children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(t.A,{variant:"outlined",onClick:()=>{j(!1),m(null)},children:"Cancel"})})]})})]})};var aF=c(35406),aG=c(38941);let aH=/^\$\{global:([^}]+)\}$/,aI=({clientId:a,clientSecret:b,onClientIdChange:c,onClientSecretChange:g})=>{let{globalEnvVars:h}=(0,ay.rX)(),[i,j]=(0,f.useState)(!1),l=b.match(aH),m=!!l,n=l?.[1]??null,o="/api/oauth/callback";return(0,d.jsxs)(e.default,{sx:{position:"relative"},children:[(0,d.jsxs)(k.A,{variant:"subtitle2",gutterBottom:!0,children:["OAuth Client Credentials"," ",(0,d.jsx)(k.A,{component:"span",variant:"caption",color:"text.secondary",children:"(optional)"})]}),(0,d.jsxs)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Leave blank for servers that support automatic registration — just click Authenticate. Only fill these in if the server requires a pre-registered app (it will report that dynamic client registration is not supported). See the"," ",(0,d.jsx)(aF.A,{href:"https://modelcontextprotocol.io/specification/draft/basic/authorization",target:"_blank",rel:"noopener",children:"MCP authorization spec"}),"."]}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",label:"Client ID",value:a,onChange:a=>c(a.target.value),placeholder:"e.g. 1234567890abcdef",variant:"outlined",sx:{mb:1.5}}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",label:"Client Secret",type:m?"text":"password",value:b,onChange:a=>g(a.target.value),placeholder:"Only if the server requires it",variant:"outlined",autoComplete:"off",InputProps:{readOnly:m,endAdornment:m?(0,d.jsx)(as.A,{title:"Unbind from global variable",children:(0,d.jsx)(v.A,{size:"small",onClick:()=>g(""),children:(0,d.jsx)(ax.A,{fontSize:"small"})})}):(0,d.jsx)(as.A,{title:"Bind to a global variable",children:(0,d.jsx)(v.A,{size:"small",onClick:()=>j(!0),children:(0,d.jsx)(aw.A,{fontSize:"small"})})})},helperText:m?`Bound to global variable "${n}"`:b===aA.RJ?"A secret is stored. Type a new one to replace it, or bind it to a global variable.":void 0}),(0,d.jsxs)(e.default,{sx:{mt:1.5,display:"flex",alignItems:"center",gap:.5},children:[(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",children:"Redirect URI to register in the provider's app:"}),(0,d.jsx)(k.A,{variant:"caption",sx:{fontFamily:"monospace"},children:o}),(0,d.jsx)(as.A,{title:"Copy redirect URI",children:(0,d.jsx)(v.A,{size:"small",onClick:()=>navigator.clipboard.writeText(o),children:(0,d.jsx)(aG.A,{sx:{fontSize:14}})})})]}),i&&(0,d.jsxs)(e.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,bgcolor:"background.paper",boxShadow:24,p:3,borderRadius:1,zIndex:9999},children:[(0,d.jsx)(k.A,{variant:"h6",component:"h2",sx:{mb:2},children:"Bind Client Secret to Global Variable"}),0===Object.keys(h).length?(0,d.jsx)(k.A,{sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,d.jsx)(e.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.keys(h).map(a=>(0,d.jsx)(t.A,{onClick:()=>{g(`\${global:${a}}`),j(!1)},fullWidth:!0,sx:{justifyContent:"flex-start",textAlign:"left",mb:1,p:1,"&:hover":{bgcolor:"action.hover"}},children:(0,d.jsx)(k.A,{children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(t.A,{onClick:()=>j(!1),children:"Cancel"})})]})]})};var aJ=c(22042),aK=c(34304),aL=c(38233),aM=c(64956);let aN=new Set(["npx","bunx","uvx","pipx","dlx"]),aO=new Set(["pnpm","yarn","bun","npm"]),aP=new Set(["dlx","exec","x"]);function aQ(a,b=[]){let c=((a||"").split(/[\\/]/).filter(Boolean).pop()||"").toLowerCase().replace(/\.(cmd|exe|bat|ps1)$/i,"");if(aN.has(c))return!0;if(aO.has(c)){let a=(b[0]||"").toLowerCase();return aP.has(a)}return!1}function aR(a){return"stdio"===a.transport&&aQ(a.command,a.args??[])}let aS=({command:a,setCommand:b,transport:c,setTransport:g,websocketUrl:h,setWebsocketUrl:i,serverUrl:j,setServerUrl:l,onRun:m,isRunning:n,runCompleted:o,env:q,onEnvChange:u,headers:v={},onHeadersChange:w,oauthClientId:x="",oauthClientSecret:y="",onOAuthClientIdChange:z,onOAuthClientSecretChange:A,serverName:B,consoleOutput:C,message:D,setMessage:E,oauthCapable:F=!1,onSaveAndAuthenticate:G,isAuthenticating:H=!1})=>{(0,f.useEffect)(()=>{C.includes("MODULE_NOT_FOUND")&&E({type:"error",text:"Module not found error detected. Please check the paths defined in the Arguments!"})},[C,E]);let I="websocket"!==c||(a=>{if(!a)return!1;try{let b=new URL(a);return"ws:"===b.protocol||"wss:"===b.protocol}catch(a){return!1}})(h),J="sse"!==c&&"streamable"!==c||(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(j),K="websocket"===c&&I&&(a=>{try{let b=new URL(a);return"ws:"===b.protocol&&!(a=>{let b=a.toLowerCase();return"localhost"===b||"127.0.0.1"===b||"::1"===b||"[::1]"===b||b.endsWith(".localhost")})(b.hostname)}catch(a){return!1}})(h),L=a.trim().split(/\s+/).filter(Boolean),M="stdio"===c&&L.length>0&&aQ(L[0],L.slice(1)),N=Math.round(90);return(0,d.jsxs)(r.A,{spacing:3,children:[D&&"error"===D.type&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:D.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Transport Type"}),(0,d.jsxs)(aJ.A,{value:c,onChange:(a,b)=>g(b),sx:{borderBottom:1,borderColor:"divider",mb:2},variant:"scrollable",scrollButtons:"auto",children:[(0,d.jsx)(aK.A,{label:"Standard IO",value:"stdio"}),(0,d.jsx)(aK.A,{label:"WebSocket",value:"websocket"}),(0,d.jsx)(aK.A,{label:"SSE",value:"sse"}),(0,d.jsx)(aK.A,{label:"Streamable HTTP",value:"streamable"})]})]}),"websocket"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"WebSocket URL"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:h,onChange:a=>i(a.target.value),placeholder:"ws://localhost:3000",variant:"outlined",required:!0,error:!I,helperText:!I&&"Please enter a valid WebSocket URL (starting with ws:// or wss://)"}),K&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:"This URL uses unencrypted ws:// to a non-localhost host. Consider using wss:// for remote servers so credentials and data are encrypted in transit."})]}),("sse"===c||"streamable"===c)&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Server URL"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:j,onChange:a=>l(a.target.value),placeholder:"https://localhost:3000",variant:"outlined",required:!0,error:!J,helperText:!J&&"Please enter a valid HTTP URL (starting with http:// or https://)"})]}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(aE,{headers:v,onChange:w||(()=>{})})}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(aI,{clientId:x,clientSecret:y,onClientIdChange:z||(()=>{}),onClientSecretChange:A||(()=>{})})}),"stdio"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Run Command"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),placeholder:"npm start",variant:"outlined",required:!0}),M&&(0,d.jsxs)(aL.A,{children:["npx/uvx may download the package on the first run — the Test Run waits up to ",N,"s before timing out."]})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",mt:1},children:(0,d.jsx)(t.A,{variant:"contained",color:o?"success":"primary",onClick:m,startIcon:n?(0,d.jsx)(am.default,{size:16,color:"inherit"}):void 0,disabled:n||"stdio"===c&&!a.trim()||"websocket"===c&&!I||("sse"===c||"streamable"===c)&&!J,title:"stdio"!==c||a.trim()?"websocket"!==c||I?"sse"!==c&&"streamable"!==c||J?"Test the run command":"Please enter a valid Server URL":"Please enter a valid WebSocket URL":"Please enter a run command first",children:n?"Running...":"3) Test Run"})}),F&&("sse"===c||"streamable"===c)&&G&&(0,d.jsx)(p.A,{severity:"info",action:(0,d.jsx)(t.A,{color:"inherit",size:"small",variant:"outlined",startIcon:H?(0,d.jsx)(am.default,{size:16,color:"inherit"}):(0,d.jsx)(aM.A,{}),onClick:()=>{G()},disabled:H||!J,children:H?"Authenticating…":"Save & Authenticate"}),children:"This server uses OAuth. Saving it and signing in will complete the connection."}),(0,d.jsx)(e.default,{children:(0,d.jsx)(ao.A,{serverName:B,initialEnv:q,onSave:async a=>(u(a),Promise.resolve())})})]})};var aT=c(95345);let aU=({args:a,onArgChange:b,onAddArg:c,onRemoveArg:f,onFolderSelect:g,onParseReadme:h,onParseClipboard:i,isParsingReadme:j})=>{let{getThemeColor:l}=(0,w.Ic)();return(0,d.jsxs)(e.default,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:"Arguments"}),(0,d.jsxs)(r.A,{direction:"row",spacing:1,children:[(0,d.jsx)(t.A,{size:"small",startIcon:(0,d.jsx)(aT.A,{}),onClick:h,disabled:j,color:"inherit",sx:{color:"text.secondary"},children:"Parse README"}),(0,d.jsx)(t.A,{size:"small",startIcon:(0,d.jsx)(aT.A,{}),onClick:i,color:"inherit",sx:{color:"text.secondary"},children:"Parse from Clipboard"})]})]}),(0,d.jsxs)(r.A,{spacing:1,children:[a.map((a,c)=>(0,d.jsxs)(r.A,{direction:"row",spacing:1,children:[(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(c,a.target.value),variant:"outlined"}),(0,d.jsx)(as.A,{title:"Select folder",children:(0,d.jsx)(v.A,{onClick:()=>g(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(q.A,{})})}),(0,d.jsx)(as.A,{title:"Remove argument",children:(0,d.jsx)(v.A,{onClick:()=>f(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(av.A,{})})})]},c)),(0,d.jsx)(t.A,{startIcon:(0,d.jsx)(au.A,{}),onClick:c,color:"primary",sx:{alignSelf:"flex-start",mt:1},children:"Add Argument"})]})]})};var aV=c(2173),aW=c(67191),aX=c(82605),aY=c(50062),aZ=c(7675),a$=c(94367),a_=c(11801);let a0=(0,a_.A)((0,d.jsx)("path",{d:"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3M7.5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S9.83 13 9 13s-1.5-.67-1.5-1.5M16 17H8v-2h8zm-1-4c-.83 0-1.5-.67-1.5-1.5S14.17 10 15 10s1.5.67 1.5 1.5S15.83 13 15 13"}),"SmartToy");var a1=c(83434);let a2=(0,j.h)("frontend/components/mcp/.../SamplingManager"),a3=({policy:a,onChange:b})=>{let[c,g]=(0,f.useState)([]),h=!!a?.enabled;(0,f.useEffect)(()=>{let a=!1;return a1.N.loadModels().then(b=>{a||g(Array.isArray(b)?b:[])}).catch(a=>a2.warn("Failed to load models for sampling policy",a)),()=>{a=!0}},[]);let i=c=>{b({enabled:h,modelId:a?.modelId,maxCallsPerMinute:a?.maxCallsPerMinute,...c})};return(0,d.jsxs)(e.default,{children:[(0,d.jsx)(p.A,{severity:"warning",sx:{mb:2},children:"MCP sampling is deprecated in the 2026-07-28 spec. FLUJO's implementation (routing through your configured model) already matches the recommended replacement pattern — no action is required until server support is removed (estimated mid-2027)."}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(a0,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(k.A,{variant:"subtitle1",children:"Let this tool use your AI"}),(0,d.jsx)(aW.A,{checked:h,onChange:a=>i({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:"Allows this server to ask FLUJO to run AI calls on its behalf (MCP sampling). Off by default. When on, the server can spend the selected model's API budget — only enable it for servers you trust."}),h&&(0,d.jsxs)(e.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,d.jsxs)(aX.A,{size:"small",sx:{minWidth:260},error:!a?.modelId,children:[(0,d.jsx)(aY.A,{id:"sampling-model-label",children:"Model"}),(0,d.jsxs)(aZ.A,{labelId:"sampling-model-label",label:"Model",value:c.some(b=>b.id===a?.modelId)?a?.modelId:"",onChange:a=>i({modelId:a.target.value||void 0}),children:[0===c.length&&(0,d.jsx)(a$.A,{value:"",disabled:!0,children:"No models configured"}),c.map(a=>(0,d.jsx)(a$.A,{value:a.id,children:a.displayName||a.name},a.id))]})]}),(0,d.jsx)(s.A,{size:"small",type:"number",label:"Max calls / minute",sx:{width:160},value:a?.maxCallsPerMinute??"",placeholder:"10",onChange:a=>{let b=parseInt(a.target.value,10);i({maxCallsPerMinute:Number.isFinite(b)&&b>0?b:void 0})},helperText:"Default 10"}),!a?.modelId&&(0,d.jsx)(p.A,{severity:"warning",sx:{width:"100%"},children:"Pick a model — sampling requests will be rejected until one is selected."})]})]})},a4=(0,a_.A)([(0,d.jsx)("path",{d:"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4z"},"0"),(0,d.jsx)("path",{d:"M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-5.99 13c-.59 0-1.05-.47-1.05-1.05 0-.59.47-1.04 1.05-1.04.59 0 1.04.45 1.04 1.04-.01.58-.45 1.05-1.04 1.05m2.5-6.17c-.63.93-1.23 1.21-1.56 1.81-.13.24-.18.4-.18 1.18h-1.52c0-.41-.06-1.08.26-1.65.41-.73 1.18-1.16 1.63-1.8.48-.68.21-1.94-1.14-1.94-.88 0-1.32.67-1.5 1.23l-1.37-.57C11.51 5.96 12.52 5 13.99 5c1.23 0 2.08.56 2.51 1.26.37.61.58 1.73.01 2.57"},"1")],"Quiz"),a5=({policy:a,onChange:b})=>{let c=!!a?.enabled;return(0,d.jsxs)(e.default,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(a4,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(k.A,{variant:"subtitle1",children:"Allow this tool to ask you questions"}),(0,d.jsx)(aW.A,{checked:c,onChange:a=>b({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:"Allows this server to request additional information from you mid-tool-call (MCP elicitation). Off by default. Only enable for servers you trust. Unattended (scheduled) runs auto-cancel elicitation requests. URL-mode is not yet supported."}),c&&(0,d.jsx)(p.A,{severity:"info",sx:{mt:.5},children:"When enabled, this server may pause execution and display a form asking for your input. You can cancel at any time."})]})};var a6=c(32720),a7=c(33799),a8=c(28055);let a9=(a,b,c,d,e)=>{let f;return{...f="websocket"===a.transport?{...a,transport:"websocket",websocketUrl:b,_buildCommand:d,_installCommand:e}:"sse"===a.transport?{...a,transport:"sse",serverUrl:c,_buildCommand:d,_installCommand:e}:"streamable"===a.transport?{...a,transport:"streamable",serverUrl:c,_buildCommand:d,_installCommand:e}:{...a,transport:"stdio",_buildCommand:d,_installCommand:e},source:f.source??{type:"local"}}},ba=async(a,b,c,d,e,f,g)=>{let h=await aa(a,a.name);h.message&&c(h.message),h.config&&(b("websocket"===h.config.transport?{...h.config,env:a.env,transport:"websocket",websocketUrl:h.config.websocketUrl||g}:{...h.config,env:a.env,transport:"stdio",command:h.config.command||"",args:h.config.args||[]}),h.config._buildCommand&&d(h.config._buildCommand),h.config._installCommand&&e(h.config._installCommand))},bb=async(a,b,c,d,e,f,g,h)=>{d(!0),c({type:"success",text:"Parsing README.md from repository root..."});try{if(!a.name)throw Error("Please specify a server name first");let d=a.name,i=`${d}/README.md`,j=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:i})});if(console.log("DEBUG - API response status:",j.status),!j.ok)throw Error("Failed to read README file from repository root");let k=await j.json();if(!k.content)throw Error("README file is empty");let l=await _(k.content,a,a.name);console.log("DEBUG - Parsing README content with repository root path:",a.name),l.message&&c(l.message),l.config&&("websocket"===l.config.transport?(b({...l.config,transport:"websocket",websocketUrl:l.config.websocketUrl||h}),l.config.websocketUrl&&g(l.config.websocketUrl)):b({...l.config,transport:"stdio",command:l.config.command||"",args:l.config.args||[]}),l.config._buildCommand&&e(l.config._buildCommand),l.config._installCommand&&f(l.config._installCommand))}catch(a){console.error("Error parsing README:",a),c({type:"error",text:`Error parsing README: ${a.message||"Unknown error"}`})}finally{d(!1)}},bc=async(a,b,c,d,e,f,g,h)=>{if(!a.name)return void d({type:"error",text:"Please specify a server name first"});c(!0),d({type:"success",text:"Installing dependencies..."}),e("Install Dependencies Output"),f(!0),g(`Executing: ${b}
|
|
1
|
+
(()=>{var a={};a.id=313,a.ids=[313],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},9863:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m11.99 18.54-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27z"}),"Layers")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11402:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M14.94 4.66h-4.72l2.36-2.36zm-4.69 14.71h4.66l-2.33 2.33zM6.1 6.27 1.6 17.73h1.84l.92-2.45h5.11l.92 2.45h1.84L7.74 6.27zm-1.13 7.37 1.94-5.18 1.94 5.18zm10.76 2.5h6.12v1.59h-8.53v-1.29l5.92-8.56h-5.88v-1.6h8.3v1.26z"}),"SortByAlpha")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},21820:a=>{"use strict";a.exports=require("os")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},27409:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown")},28354:a=>{"use strict";a.exports=require("util")},29021:a=>{"use strict";a.exports=require("fs")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},29866:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>c3});var d=c(21124),e=c(81637),f=c(38301),g=c.n(f),h=c(68774),i=c(61615),j=c(42819),k=c(79515),l=c(54573),m=c(82666),n=c(18305);let o=(0,j.h)("frontend/components/mcp/MCPServerManager/ServerList"),p=({servers:a,isLoading:b,loadError:c,onServerSelect:f,onServerToggle:g,onServerRetry:j,onServerDelete:p,onServerEdit:q,selectionMode:r=!1,selectedServers:s=new Set,onServerSelectionChange:t,updates:u,onServerUpdated:v,folders:w=[],onServerSetFolder:x,onServerToggleFavorite:y})=>{let{t:z}=(0,n.s9)();return(o.debug("Rendering ServerList",{serverCount:a.length,isLoading:b,hasError:!!c}),b)?(o.debug("Servers are loading"),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4},children:[(0,d.jsx)(i.default,{size:"large",color:"primary"}),(0,d.jsx)(k.A,{sx:{mt:2,color:"text.secondary"},children:z("mcp.list.loading")})]})):c?(o.warn("Error loading servers:",c),(0,d.jsx)(l.A,{sx:{p:3,bgcolor:"error.light",color:"error.contrastText",borderRadius:1},children:(0,d.jsx)(k.A,{color:"error",children:c})})):0===a.length?(0,d.jsx)(l.A,{sx:{p:3,textAlign:"center",borderRadius:1},children:(0,d.jsx)(k.A,{color:"text.secondary",children:z("mcp.list.empty")})}):(0,d.jsx)(m.Ay,{container:!0,spacing:2.5,children:a.map(a=>{let b="streamable"===a.transport&&void 0!==a.oauthTokens;return(0,d.jsx)(m.Ay,{item:!0,xs:12,md:6,lg:4,children:(0,d.jsx)(h.A,{name:a.name,status:a.status,path:a.rootPath,enabled:!a.disabled,transport:a.transport,onToggle:b=>g(a.name,b),onRetry:()=>j(a.name),onDelete:()=>p(a.name),onClick:()=>f(a.name),onEdit:()=>q(a),error:a.error,stderrOutput:a.stderrOutput,exposeAsMcpServer:a.exposeAsMcpServer,enableMcpApps:a.enableMcpApps,selectionMode:r,selected:s.has(a.name),onSelect:t?b=>t(a.name,b):void 0,hasOAuthTokens:b,updateInfo:a.rootPath?u?.[a.rootPath]:void 0,installCommand:a._installCommand,buildCommand:a._buildCommand,onUpdated:v?()=>v(a.name,a.rootPath):void 0,folder:a.folder,folders:w,onSetFolder:x?b=>x(a.name,b):void 0,favorite:a.favorite,onToggleFavorite:y?()=>y(a.name,!a.favorite):void 0,serverConfig:a})},a.name)})})};var q=c(88745),r=c(30717),s=c(53773),t=c(37674),u=c(68730),v=c(67101),w=c(44079),x=c(84040);let y=({githubUrl:a,setGithubUrl:b,savePath:c,setSavePath:g,repoInfo:h,isValidating:i,parseCompleted:j,onValidate:l})=>{let[m,o]=(0,f.useState)(""),{getThemeColor:p}=(0,x.Ic)(),{t:q}=(0,n.s9)();return(0,f.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/cwd"),b=await a.json();b.success&&b.mcpServersDir?o(b.mcpServersDir):console.error("Failed to get mcp-servers directory path:",b.error)}catch(a){console.error("Error fetching current working directory:",a)}})()},[]),(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:q("mcp.github.repositoryUrl")}),(0,d.jsx)(t.A,{fullWidth:!0,value:a,onChange:a=>b(a.target.value),placeholder:q("mcp.github.repositoryUrl"),helperText:q("mcp.github.pasteUrl"),variant:"outlined",size:"small"}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",mt:1},children:(0,d.jsx)(u.A,{variant:"contained",color:j?"success":"primary",onClick:l,disabled:i,children:q(i?"mcp.github.validating":"mcp.github.parse")})})]}),h?.valid&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:q("mcp.github.saveWhere")}),(0,d.jsx)(t.A,{fullWidth:!0,value:c,onChange:a=>g(a.target.value),variant:"outlined",size:"small",InputProps:{endAdornment:(0,d.jsx)(v.A,{position:"end",children:(0,d.jsx)(w.A,{onClick:async()=>{try{let a=await window.showDirectoryPicker(),b=(m?`${m}/${a.name}`:`${a.name}`).replace(/\\/g,"/");g(b)}catch(a){console.error("Failed to select folder:",a)}},edge:"end","aria-label":q("mcp.github.selectFolder"),children:(0,d.jsx)(r.A,{})})})}})]})]})},z=({showCloneButton:a,isCloning:b,cloneCompleted:c,repoInfo:f,repoExists:g,onClone:h})=>{let{t:i}=(0,n.s9)();return a?(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:2},children:[g&&(0,d.jsx)(u.A,{variant:"outlined",color:"warning",onClick:()=>{h(!0)},disabled:b||!f,children:i(b?"mcp.github.processing":"mcp.github.reclone")}),(0,d.jsx)(u.A,{variant:"contained",color:c?"success":"primary",onClick:()=>{h(!1)},disabled:b||!f,children:i(b?"mcp.github.processing":g?"mcp.github.useExisting":"mcp.github.clone")})]}):null};var A=c(64560);let B=(a,b)=>(0,A.Tl)("en",a,b),C=async(a,b=B)=>{try{let c,d,e=new URL(a);if("github.com"!==e.hostname)throw Error(b("mcp.github.notGithub"));let f=a.match(/^https:\/\/github\.com\/([^\/]+)\/([^\/]+)\/(?:blob|tree)\/.*$/);if(f)c=f[1],d=f[2];else{let a=e.pathname.split("/").filter(Boolean);if(a.length>=2)c=a[0],d=a[1];else throw Error(b("mcp.github.invalidPath"))}let g=await fetch(`https://api.github.com/repos/${c}/${d}`);if(!g.ok)throw Error(b("mcp.github.notFound"));await g.json();let h=await fetch(`https://api.github.com/repos/${c}/${d}/contents`);if(!h.ok)throw Error(b("mcp.github.contentsFailed"));let i=await h.json();return{repoInfo:{owner:c,repo:d,valid:!0,contents:i},message:{type:"success",text:b("mcp.github.validRepository",{repository:`${c}/${d}`})},showCloneButton:!0}}catch(a){return console.error("GitHub parsing error:",a),{repoInfo:null,message:{type:"error",text:a.message||b("mcp.github.invalidUrl")},showCloneButton:!1}}},D=async(a,b,c,d=!1,e=B)=>{try{let b=a,f=b.match(/^(https:\/\/github\.com\/[^\/]+\/[^\/]+)\/(?:blob|tree)\/.*$/);f&&(b=f[1]);let g=b.endsWith(".git")?b:`${b.replace(/\/$/,"")}.git`,h=c.replace(/\\/g,"/"),i=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clone",repoUrl:g,savePath:h,branch:void 0,forceClone:d})}),j=await i.json();if(!i.ok&&!("exists"in j))throw Error(j.error||e("mcp.github.cloneFailed"));let k=j.relativePath.replace(/\\/g,"/");return{success:!0,message:{type:"success",text:e("mcp.github.cloned")},clonedRepoPath:k,envExample:j.envExample}}catch(b){console.error("Error cloning repository:",b);let a=b.message||"";if(a.includes("directory already exist")){let b=a.match(/directory already exist: (.+?)(,|\.|$)/),d=b?b[1]:c;return{success:!0,message:{type:"warning",text:e("mcp.github.exists",{path:d})},clonedRepoPath:d.replace(/\\/g,"/"),envExample:void 0}}return{success:!1,message:{type:"error",text:e("mcp.github.cloneError",{error:a||e("mcp.server.unknownError")})},envExample:void 0}}},E=(0,j.h)("utils/mcp/processPathLikeArgument");function F(a,b=!0,c){console.log("parseServerConfig: Starting with text length:",a.length);try{let d,e,f;console.log("parseServerConfig: Unescaping markdown characters");let g=a.replace(/\\#/g,"#").replace(/\\\[/g,"[").replace(/\\\]/g,"]").replace(/\\`\\`\\`/g,"```").replace(/\\`/g,"`");console.log("parseServerConfig: Unescaped text length:",g.length),console.log("parseServerConfig: Setting up command patterns"),console.log("parseServerConfig: Extracting code blocks");let h=[...g.matchAll(/```(?:bash|sh|cmd|powershell|batch)?\s*([\s\S]*?)```/gm)].map(a=>a[1]);console.log("parseServerConfig: Found",h.length,"code blocks");let i=[];console.log("parseServerConfig: Looking for build/install commands in main text");let j=g.match(/(?:^|\n)\s*(?:build|\.\/build|build\.bat|\.\/build\.bat|build\.sh|\.\/build\.sh|npm run build|npx build|yarn build|pnpm build|vite build|webpack build|gradle build|mvn build|cargo build)\s*(?:$|\n)/m);j&&(d=j[0].trim(),console.log("parseServerConfig: Found build command in main text:",d));let k=g.match(/(?:^|\n)\s*(?:install|\.\/install|install\.bat|\.\/install\.bat|install\.sh|\.\/install\.sh|setup|\.\/setup|setup\.bat|\.\/setup\.bat|setup\.sh|\.\/setup\.sh|npm install|pip install|yarn install|pnpm install|uv install|gem install|cargo install|apt install|apt-get install|brew install)\s*(?:$|\n)/m);k&&(e=k[0].trim(),console.log("parseServerConfig: Found install command in main text:",e)),console.log("parseServerConfig: Checking code blocks for commands");for(let a=0;a<h.length;a++){let b=h[a];console.log(`parseServerConfig: Processing code block ${a+1}/${h.length}, length: ${b.length}`);let c=b.split("\n");console.log(`parseServerConfig: Code block has ${c.length} lines`);for(let a=0;a<c.length;a++){let b=c[a];if(console.log(`parseServerConfig: Processing line ${a+1}: "${b}"`),!d){let a=b.match(/^[ \t]*(build\.bat|\.\/build\.bat|build\.sh|\.\/build\.sh|npm run build|npx build|yarn build|pnpm build|vite build|webpack build|gradle build|mvn build|cargo build)(?: [\w-]+)*[ \t]*$/);a&&(d=a[1].trim(),console.log(`parseServerConfig: Found build command in code block: ${d}`))}if(!e){let a=b.match(/^[ \t]*((?:install\.bat|\.\/install\.bat|install\.sh|\.\/install\.sh|setup\.bat|\.\/setup\.bat|setup\.sh|\.\/setup\.sh|npm install|pip install|yarn install|pnpm install|uv install|gem install|cargo install|apt install|apt-get install|brew install)(?: [\w\.-]+)*)[ \t]*$/);a&&(e=a[1].trim(),console.log(`parseServerConfig: Found install command in code block: ${e}`))}console.log(`parseServerConfig: Checking for run command in line: "${b}"`);let g=b.match(/(run\.bat|\.\/run\.bat|run\.sh|\.\/run\.sh|npm start|yarn start|pnpm start|python|node|vite)(?:\s+(.+))?/);if(g&&(console.log(`parseServerConfig: Found potential run command: ${g[0]}`),!f)&&(f=g[1].trim(),console.log(`parseServerConfig: Set extracted command to: ${f}`),g[2])){let a=g[2].trim().split(/\s+/);console.log(`parseServerConfig: Extracted args: ${a.join(", ")}`),i=a}}}console.log("parseServerConfig: Cleaning text for JSON parsing");let l=a.replace(/\/\/.*$/gm,""),m="",n="",o=!1,p="";console.log("parseServerConfig: Attempting to extract server config"),console.log("parseServerConfig: Trying to match mcpServers structure");let q=l.match(/"mcpServers"\s*:\s*{\s*"([^"]+)"\s*:\s*({[^}]+})/);if(q)[,m,n]=q,o=!0,p="mcpServers structure",console.log("parseServerConfig: Found server config in mcpServers structure for:",m);else{console.log("parseServerConfig: No mcpServers structure found, trying direct structure");let a=l.match(/"([^"]+)"\s*:\s*({[^{]*"command"\s*:[^{]*"args"\s*:[^}]*})/);a?([,m,n]=a,o=!0,p="direct structure",console.log("parseServerConfig: Found direct server configuration for:",m)):(console.log("parseServerConfig: No valid configuration found in either structure"),n=l,console.log("parseServerConfig: Will attempt to extract any available information"),o=!1,p="extracted information")}console.log("parseServerConfig: Extracting command and args from config");let r=n.match(/"command"\s*:\s*"([^"]+)"/),s=r?r[1]:"";console.log("parseServerConfig: Extracted command:",s);let t=n.match(/"args"\s*:\s*\[([\s\S]*?)\]/),u=t?t[1].split(",").map(a=>a.trim()).map(a=>a.replace(/^"(.*)"$/,"$1")).filter(a=>a.length>0):[];console.log("parseServerConfig: Extracted args:",u),console.log("parseServerConfig: Extracting disabled and autoApprove settings");let v=n.match(/"disabled"\s*:\s*(true|false)/),w=!!v&&"true"===v[1];console.log("parseServerConfig: Extracted disabled:",w);let x=n.match(/"autoApprove"\s*:\s*\[([\s\S]*?)\]/),y=x?x[1].split(",").map(a=>a.trim()).map(a=>a.replace(/^"(.*)"$/,"$1")).filter(a=>a.length>0):[];console.log("parseServerConfig: Extracted autoApprove:",y);let z={};if(console.log("parseServerConfig: Parsing environment variables, parseEnvVars =",b),b){for(let a of(console.log("parseServerConfig: Extracting env vars with standard pattern"),g.matchAll(/^\ *(\w+)=["']?([^"'\r\n#]*)["']?(?:\s*#[^\r\n]*)?(?=\r?\n|$)/gm))){let b=a[1],c=a[2].trim();b&&void 0!==c&&(z[b]=c,console.log(`parseServerConfig: Found env var (standard): ${b}=${c}`))}for(let a of(console.log("parseServerConfig: Extracting env vars with README pattern"),g.matchAll(/(?:^|\n)[-*]?\s*`?(\w+)`?(?:\s*:|=)\s*[`"']?([^`"'\r\n#]*)(?:[`"'])?(?:\s*#[^\r\n]*)?(?=\r?\n|$)/gm))){let b=a[1],c=a[2].trim();b&&void 0!==c&&!z[b]&&(z[b]=c,console.log(`parseServerConfig: Found env var (README): ${b}=${c}`))}}console.log("parseServerConfig: Building final config object");let A=s||f||"";console.log("parseServerConfig: Final command:",A);let B=s&&u.length>0?u:f&&i.length>0?i:u,C=c||m,D=B.map(a=>(function(a,b){if(E.debug("processPathLikeArgument: Entering method",{arg:a,serverName:b}),!a||"string"!=typeof a||!a.includes("/")&&!a.includes("\\"))return a;if(/^@[^/\s]+\/[^/\s@]+(?:@[^/\s]+)?$/.test(a))return E.debug(`processPathLikeArgument: Detected scoped npm package, leaving unchanged: ${a}`),a;E.debug(`processPathLikeArgument: Processing argument: ${a}`);let c=a;for(let a of["/path/to","PATH_TO","path/to","PATH/TO","/PATH/TO","/PATH_TO","path_to"]){let b=c.indexOf(a);if(-1!==b){c=c.substring(b+a.length),E.debug(`processPathLikeArgument: Stripped path pattern "${a}": ${c}`);break}}if(b&&c.includes(b)){let a=RegExp(`(^|[\\/\\\\])${b}([\\/\\\\]|$)`);a.test(c)&&(c=c.replace(a,"$1$2"),E.debug(`processPathLikeArgument: Removed server name "${b}": ${c}`),c=c.replace(/\/\//g,"/"))}return(c.startsWith("/")||c.startsWith("\\"))&&(c=c.substring(1),E.debug(`processPathLikeArgument: Removed leading slash: ${c}`)),c||(c=".",E.debug('processPathLikeArgument: Empty result, replaced with "."')),E.debug(`processPathLikeArgument: Final result: ${c}`),c})(a,C));console.log("parseServerConfig: Final args (after path processing):",D);let F={name:m||"",command:A,args:D,env:z,disabled:w,autoApprove:y,_buildCommand:d,_installCommand:e};if(console.log("parseServerConfig: Config object created:",JSON.stringify(F,null,2)),console.log("parseServerConfig: Preparing return message"),o)return console.log(`parseServerConfig: Returning success - config found in ${p}`),{config:F,foundExplicitConfig:!0,message:{type:"success",text:`Configuration for "${m}" extracted successfully from ${p}.`}};{let a=[];if(s&&a.push("command"),u.length>0&&a.push("arguments"),Object.keys(z).length>0&&a.push("environment variables"),a.length>0)return console.log(`parseServerConfig: Returning warning - partial data extracted: ${a.join(", ")}`),{config:F,foundExplicitConfig:!1,message:{type:"warning",text:`No complete server configuration found, but extracted: ${a.join(", ")}.`}};return console.log("parseServerConfig: Returning error - no data found"),{config:F,foundExplicitConfig:!1,message:{type:"error",text:"No server configuration data found."}}}}catch(a){return console.error("parseServerConfig: Exception occurred:",a),{config:{},foundExplicitConfig:!1,message:{type:"error",text:"Failed to extract server configuration. Please check the content format."}}}}(0,j.h)("utils/mcp/parseServerConfigFromClipboard");let G=(0,j.h)("utils/mcp/configparse/utils");async function H(a,b,c=!1){try{G.debug(`Checking if file exists: ${a}/${b}`);let d=a.endsWith("/")||a.endsWith("\\")?`${a}${b}`:`${a}/${b}`;G.debug(`Constructed full path: ${d}`);let e=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:d})});if(!e.ok)return G.debug(`File does not exist: ${a}/${b}`),{exists:!1};let f=await e.json();if(!f.content&&c)return G.debug(`File exists but is empty: ${a}/${b}`),{exists:!0,content:""};return G.debug(`File exists: ${a}/${b}`),{exists:!0,content:c?f.content:void 0}}catch(c){return G.error(`Error checking if file exists: ${a}/${b}`,c),{exists:!1}}}async function I(a,b){try{let c=await H(a,b,!0);return c.exists&&c.content?c.content:null}catch(c){return G.error(`Error reading file: ${a}/${b}`,c),null}}let J=(0,j.h)("utils/mcp/configparse/typescript");async function K(a){let{repoPath:b,repoName:c}=a;J.debug(`Parsing TypeScript configuration for ${b}`);let d=await H(b,"package.json",!0);if(!d.exists||!d.content)return J.debug(`No package.json found in ${b}`),{detected:!1,language:"typescript",message:{type:"warning",text:"No package.json found in the repository."}};try{let a=JSON.parse(d.content);J.debug(`Successfully parsed package.json for ${b}`);let e=function(a){if(a.packageManager){if(a.packageManager.startsWith("yarn"))return"yarn install";else if(a.packageManager.startsWith("pnpm"))return"pnpm install"}return"npm install --include=dev"}(a),f=function(a){let b=a.scripts||{};return b.build?"npm run build":b.compile?"npm run compile":b.dist?"npm run dist":b.prepare&&b.prepare.includes("build")?"npm run prepare":""}(a),g="node",h=await L(a,b),i=await M(b),j=((await H(b,"tsconfig.json")).exists,"typescript");return{detected:!0,language:j,installCommand:e,buildCommand:f,runCommand:g,args:h,env:i,message:{type:"success",text:"TypeScript/JavaScript configuration detected successfully."},config:{name:c,transport:"stdio",command:g,args:h,env:i,_buildCommand:f,_installCommand:e}}}catch(a){return J.error(`Error parsing package.json for ${b}:`,a),{detected:!1,language:"typescript",message:{type:"error",text:`Error parsing package.json: ${a instanceof Error?a.message:"Unknown error"}`}}}}async function L(a,b){let c=a.scripts||{},d=a.main||"",e=[],f="dist";if(c.build){let a=c.build,b=a.match(/tsc\s+.*(?:--outDir\s+|--outDir=|--outDir\s*=\s*|--out-dir\s+|--out-dir=|--out-dir\s*=\s*|--out\s+|--out=|--out\s*=\s*|-d\s+|-d=|-d\s*=\s*)["']?([^"'\s]+)["']?/);b&&b[1]&&(f=b[1],J.debug(`Extracted output directory from build script: ${f}`));let d=a.match(/(?:webpack|rollup|vite).*(?:--output\s+|--output=|--output\s*=\s*|-o\s+|-o=|-o\s*=\s*)["']?([^"'\s]+)["']?/);d&&d[1]&&(f=d[1],J.debug(`Extracted output directory from webpack/rollup/vite build script: ${f}`)),(a.includes("build/")||a.includes("build\\"))&&(f="build",J.debug("Found 'build' directory reference in build script"))}if(c.start){let a=c.start,b=a.match(/node\s+(?:--[^\s]+=?[^\s]*\s+)*([^\s]+)/);if(b&&b[1])return J.debug(`Extracted entry point from start script: ${b[1]}`),e.push(b[1]),e;let d=a.match(/\b((?:\.\/)?(?:[\w\-\.\/]+)\.js)\b/);if(d&&d[1])return J.debug(`Found .js file in start script: ${d[1]}`),e.push(d[1]),e;let g=a.match(/ts-node\s+([^\s]+)/);if(g&&g[1]){let a=g[1].replace(/\.ts$/,".js").replace(/^src\//,`${f}/`);return e.push(a),e}}if(d&&!d.endsWith(".ts"))return e.push(d),e;let g=`${f}/index.js`;if((await H(b,g)).exists)return e.push(g),e;for(let a of["dist/index.js","build/index.js","lib/index.js","out/index.js"])if((await H(b,a)).exists)return e.push(a),e;return e.push(`${f}/index.js`),e}async function M(a){let b=await I(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let N=(0,j.h)("utils/mcp/configparse/python");async function O(a){var b;let{repoPath:c,repoName:d}=a;N.debug(`Parsing Python configuration for ${c}`);let e=await H(c,"requirements.txt"),f=await H(c,"pyproject.toml",!0),g=await H(c,"setup.py",!0);if(!e.exists&&!f.exists&&!g.exists)return N.debug(`No Python project files found in ${c}`),{detected:!1,language:"python",message:{type:"warning",text:"No Python project files found in the repository."}};let h=(b=e.exists,f.exists?"uv sync":b?"uv venv && uv pip install -r requirements.txt":"uv venv && uv pip install -e ."),{runCommand:i,args:j}=await P(c,f.content,g.content),k=await Q(c);return{detected:!0,language:"python",installCommand:h,buildCommand:"",runCommand:i,args:j,env:k,message:{type:"success",text:"Python configuration detected successfully."},config:{name:d,transport:"stdio",command:i,args:j,env:k,_buildCommand:"",_installCommand:h}}}async function P(a,b,c){let d=["run","python"];for(let b of["main.py","app.py","server.py","run.py","index.py","src/main.py","src/app.py","src/server.py","src/run.py","src/index.py"])if((await H(a,b)).exists)return d.push(b),{runCommand:"uv",args:d};if(b)try{let a=b.match(/\[tool\.poetry\.scripts\]([\s\S]*?)(\[|$)/);if(a){let b=a[1].match(/(\w+)\s*=\s*["']([^"']+)['"]/);if(b){let a=b[2].split(":")[0];return d.push("-m"),d.push(a),{runCommand:"uv",args:d}}}let c=b.match(/\[project\][\s\S]*?name\s*=\s*["']([^"']+)['"]/);if(c){let a=c[1].replace(/-/g,"_");return d.push("-m"),d.push(a),{runCommand:"uv",args:d}}}catch(a){N.error("Error parsing pyproject.toml:",a)}if(c)try{let a=c.match(/name\s*=\s*["']([^"']+)['"]/);if(a){let b=a[1].replace(/-/g,"_");return d.push("-m"),d.push(b),{runCommand:"uv",args:d}}}catch(a){N.error("Error parsing setup.py:",a)}return 2===d.length&&d.push("main.py"),{runCommand:"uv",args:d}}async function Q(a){let b=await I(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let R=(0,j.h)("utils/mcp/configparse/java");async function S(a){var b,c,d,e,f,g,h,i;let{repoPath:j,repoName:k}=a;R.debug(`Parsing Java configuration for ${j}`);let l=await H(j,"pom.xml",!0),m=await H(j,"build.gradle",!0),n=await H(j,"gradlew"),o=await H(j,"mvnw");if(!l.exists&&!m.exists)return R.debug(`No Java project files found in ${j}`),{detected:!1,language:"java",message:{type:"warning",text:"No Java project files found in the repository."}};let p=l.exists,q=m.exists,r=n.exists,s=o.exists,t=(b=p,c=q,d=s,e=r,b?d?"./mvnw install -DskipTests":"mvn install -DskipTests":c?e?"./gradlew dependencies":"gradle dependencies":""),u=(f=p,g=q,h=s,i=r,f?h?"./mvnw package -DskipTests":"mvn package -DskipTests":g?i?"./gradlew build":"gradle build":""),{runCommand:v,args:w}=await T(j,p,q,l.content,m.content),x=await U(j);return{detected:!0,language:"java",installCommand:t,buildCommand:u,runCommand:v,args:w,env:x,message:{type:"success",text:"Java configuration detected successfully."},config:{name:k,transport:"stdio",command:v,args:w,env:x,_buildCommand:u,_installCommand:t}}}async function T(a,b,c,d,e){let f="java",g=[];if(g.push("-jar"),b)try{if(d){let a=d.match(/<artifactId>([^<]+)<\/artifactId>/);if(a){let b=a[1],c=`target/${b}*.jar`;return g.push(c),{runCommand:f,args:g}}}return g.push("target/*.jar"),{runCommand:f,args:g}}catch(a){R.error("Error determining Maven JAR path:",a)}else if(c)try{let b="build/libs/*-all.jar";if((await H(a,b)).exists)return g.push(b),{runCommand:f,args:g};let c="build/libs/*-fat.jar";if((await H(a,c)).exists)return g.push(c),{runCommand:f,args:g};return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){R.error("Error determining Gradle JAR path:",a)}if(1===g.length){for(let b of["target/*.jar","build/libs/*.jar","out/artifacts/*/*.jar"])if((await H(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("target/*.jar")}return{runCommand:f,args:g}}async function U(a){let b=await I(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let V=(0,j.h)("utils/mcp/configparse/kotlin");async function W(a){var b,c,d,e,f,g;let{repoPath:h,repoName:i}=a;V.debug(`Parsing Kotlin configuration for ${h}`);let j=await H(h,"build.gradle.kts",!0),k=await H(h,"build.gradle",!0),l=await H(h,"gradlew"),m=await X(h);if(!j.exists&&!m){if(!k.exists)return V.debug(`No Kotlin project files found in ${h}`),{detected:!1,language:"kotlin",message:{type:"warning",text:"No Kotlin project files found in the repository."}};else if(!(k.content&&(k.content.includes("kotlin")||k.content.includes("org.jetbrains.kotlin"))))return V.debug(`No Kotlin project files found in ${h}`),{detected:!1,language:"kotlin",message:{type:"warning",text:"No Kotlin project files found in the repository."}}}let n=j.exists,o=k.exists,p=l.exists,q=(b=n,c=o,d=p,b||c?d?"./gradlew dependencies":"gradle dependencies":""),r=(e=n,f=o,g=p,e||f?g?"./gradlew build":"gradle build":""),{runCommand:s,args:t}=await Y(h,n,o,j.content,k.content),u=await Z(h);return{detected:!0,language:"kotlin",installCommand:q,buildCommand:r,runCommand:s,args:t,env:u,message:{type:"success",text:"Kotlin configuration detected successfully."},config:{name:i,transport:"stdio",command:s,args:t,env:u,_buildCommand:r,_installCommand:q}}}async function X(a){for(let b of["src/main/kotlin","src/test/kotlin","src"])if((await H(a,b)).exists)return!0;return!1}async function Y(a,b,c,d,e){let f="java",g=[];g.push("-jar");try{let h="build/libs/*-all.jar";if((await H(a,h)).exists)return g.push(h),{runCommand:f,args:g};let i="build/libs/*-fat.jar";if((await H(a,i)).exists)return g.push(i),{runCommand:f,args:g};let j="build/libs/*-with-dependencies.jar";if((await H(a,j)).exists)return g.push(j),{runCommand:f,args:g};let k="";if(b&&d){let a=d.match(/mainClass\.set\(["']([^"']+)["']\)/);a&&(k=a[1])}else if(c&&e){let a=e.match(/mainClassName\s*=\s*['"]([^'"]+)['"]/);a&&(k=a[1])}if(k){let b=k.split("."),c=b[b.length-1].toLowerCase(),d=`build/libs/*${c}*.jar`;if((await H(a,d)).exists)return g.push(d),{runCommand:f,args:g}}return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){V.error("Error determining Kotlin JAR path:",a)}if(1===g.length){for(let b of["build/libs/*.jar","out/artifacts/*/*.jar"])if((await H(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("build/libs/*.jar")}return{runCommand:f,args:g}}async function Z(a){let b=await I(a,".env.example");if(!b)return{};let c={};for(let a of b.split("\n")){let b=a.trim();if(b.startsWith("#")||""===b)continue;let d=b.match(/^([^=]+)=(.*)$/);if(d){let a=d[1].trim(),b=d[2].trim().replace(/^["'](.*)["']$/,"$1");c[a]=b}}return c}let $=(0,j.h)("utils/mcp/configparse/index");async function _(a){let{repoPath:b,repoName:c}=a;$.debug(`Parsing repository configuration for ${b}`);let d=await aa(b,c);if(d.detected&&d.foundExplicitConfig&&d.runCommand)return $.debug(`Explicit configuration found in README for ${b}`),d;$.debug(`Trying TypeScript/JavaScript parser for ${b}`);let e=await K(a);if(e.detected)return $.debug(`TypeScript/JavaScript configuration detected for ${b}`),e;$.debug(`Trying Python parser for ${b}`);let f=await O(a);if(f.detected)return $.debug(`Python configuration detected for ${b}`),f;$.debug(`Trying Java parser for ${b}`);let g=await S(a);if(g.detected)return $.debug(`Java configuration detected for ${b}`),g;$.debug(`Trying Kotlin parser for ${b}`);let h=await W(a);return h.detected?($.debug(`Kotlin configuration detected for ${b}`),h):d.detected?($.debug(`Configuration extracted from README for ${b}`),d):($.debug(`No configuration detected for ${b}, returning default configuration`),{detected:!1,language:"unknown",message:{type:"error",text:"Could not detect repository configuration. Please configure manually."},config:{name:c,transport:"stdio",command:"",args:[],env:{},_buildCommand:"",_installCommand:""}})}async function aa(a,b){try{let c=`${a}/README.md`,d=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:c})});if(!d.ok)return $.debug(`Failed to read README file from ${a}`),{detected:!1,language:"unknown",message:{type:"warning",text:"No README file found in the repository."}};let e=await d.json();if(!e.content)return $.debug(`README file is empty in ${a}`),{detected:!1,language:"unknown",message:{type:"warning",text:"README file is empty."}};let f=await ad(e.content,{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},b);if(f.config&&("stdio"===f.config.transport&&f.config.command||f.config._buildCommand||f.config._installCommand))return{detected:!0,language:"unknown",foundExplicitConfig:f.foundExplicitConfig,installCommand:f.config._installCommand||"",buildCommand:f.config._buildCommand||"",runCommand:"stdio"===f.config.transport&&f.config.command||"",args:"stdio"===f.config.transport&&f.config.args||[],env:f.config.env?Object.fromEntries(Object.entries(f.config.env).map(([a,b])=>[a,"string"==typeof b?b:b.value])):{},message:f.message||{type:"success",text:"Configuration extracted from README."},config:f.config};return{detected:!1,language:"unknown",message:{type:"warning",text:"No configuration found in README."}}}catch(b){return $.error(`Error parsing README from ${a}:`,b),{detected:!1,language:"unknown",message:{type:"error",text:`Error parsing README: ${b instanceof Error?b.message:"Unknown error"}`}}}}let ab=(a,b)=>(0,A.Tl)("en",a,b);function ac(a){return"stdio"===a.transport}let ad=async(a,b,c,d=ab)=>{try{let e=c||b.name,f=F(a,!1,e);if(!f.config||!(Object.keys(f.config).length>0))return{config:b,foundExplicitConfig:!1,message:{type:"warning",text:d("mcp.local.messages.readmeMissingConfig")}};{let a={...b,...f.config,name:b.name,env:{...b.env,...f.config.env}},c="command"in f.config;return{config:ac(a)||c?{...a,command:c&&f.config.command||"",transport:a.transport||"stdio"}:{...a,transport:a.transport||"websocket",websocketUrl:a.websocketUrl||""},foundExplicitConfig:f.foundExplicitConfig,message:{type:"success",text:d("mcp.local.messages.readmeExtracted")}}}}catch(a){return console.error("Error parsing README:",a),{config:b,message:{type:"error",text:d("mcp.local.messages.readmeError",{error:a.message||d("mcp.server.unknownError")})}}}},ae=async(a,b,c=ab)=>{try{let d=b||a.name,e=await window.navigator.clipboard.readText().then(a=>F(a,!1,d));if(!e.config||!(Object.keys(e.config).length>0))return{config:a,message:{type:"warning",text:c("mcp.local.messages.clipboardNoConfig")}};{let b={...a,...e.config,name:a.name,env:{...a.env,...e.config.env}},d="command"in e.config;return{config:ac(b)||d?{...b,command:d&&e.config.command||"",transport:b.transport||"stdio"}:{...b,transport:b.transport||"websocket",websocketUrl:b.websocketUrl||""},message:{type:"success",text:c("mcp.local.messages.clipboardParsed")}}}}catch(b){return console.error("Error parsing clipboard:",b),{config:a,message:{type:"error",text:c("mcp.local.messages.clipboardError",{error:b.message||c("mcp.server.unknownError")})}}}},af=(0,j.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/configDetection"),ag=(a,b)=>(0,A.Tl)("en",a,b);async function ah(a,b,c,d=ag){try{af.debug(`Detecting configuration for repository: ${a}`);let e=await _({repoPath:a,repoName:b,owner:c});if(e.detected&&e.config)return af.debug(`Configuration detected for ${a}`,{language:e.language}),{config:e.config,message:{type:"success",text:d("mcp.github.detectionSuccess")},success:!0,language:e.language};return af.debug(`No configuration detected for ${a}`),{config:{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},message:{type:"warning",text:d("mcp.github.detectionFailed")},success:!1,language:e.language}}catch(c){return af.error(`Error detecting configuration for ${a}:`,c),{config:{name:b,transport:"stdio",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:a,_buildCommand:"",_installCommand:""},message:{type:"error",text:d("mcp.github.detectionError",{error:c instanceof Error?c.message:d("mcp.server.unknownError")})},success:!1}}}(0,j.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/errorHandling");var ai=c(33873),aj=c.n(ai);let ak=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,setActiveTab:h,initialGitHubUrl:i})=>{let{t:j}=(0,n.s9)(),[m,o]=(0,f.useState)(i||""),[p,r]=(0,f.useState)(null),[t,u]=(0,f.useState)(""),[v,w]=(0,f.useState)(!1),[x,B]=(0,f.useState)(!1),[E,G]=(0,f.useState)(!1),[H,I]=(0,f.useState)(!1),[J,K]=(0,f.useState)(!1),[L,M]=(0,f.useState)(null),[N,O]=(0,f.useState)(""),[P,Q]=(0,f.useState)(null),[R,S]=(0,f.useState)(""),[T,U]=(0,f.useState)(!1);(0,f.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/cwd"),b=await a.json();b.success&&b.mcpServersDir?S(b.mcpServersDir):console.error("Failed to get mcp-servers directory:",b.error)}catch(a){console.error("Error fetching cwd information:",a)}})()},[]);let V=async()=>{B(!0),M(null),U(!1);let a=await C(m,j);if(r(a.repoInfo),M(a.message),w(a.showCloneButton),a.repoInfo){if(R){let b=aj().join(R,a.repoInfo.repo);u(b),await W(b)}else try{let b=await fetch("/api/cwd"),c=await b.json();if(c.success&&c.mcpServersDir){S(c.mcpServersDir);let b=aj().join(c.mcpServersDir,a.repoInfo.repo);u(b),await W(b)}else console.error("Failed to get mcp-servers directory:",c.error),u(`./mcp-servers/${a.repoInfo.repo}`)}catch(b){console.error("Error fetching cwd information:",b),u(`./mcp-servers/${a.repoInfo.repo}`)}I(!0)}B(!1)},W=async a=>{try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"exists",savePath:a})}),c=await b.json();c.success&&c.exists?(U(!0),M({type:"warning",text:j("mcp.github.exists",{path:a})})):U(!1)}catch(a){console.error("Error checking if repository exists:",a),U(!1)}},X=async(a=!1)=>{if(p){G(!0),M({type:"success",text:a?j("mcp.github.recloning"):j("mcp.github.cloning")});try{let b=await D(m,p,t,a,j);if(!b.success||!b.clonedRepoPath){M(b.message),G(!1);return}let d=b.clonedRepoPath;O(d);let e={};b.envExample&&"string"==typeof b.envExample&&(e=(a=>{try{return a.split("\n").filter(a=>""!==a.trim()).reduce((a,b)=>{let[c,d]=b.split("=").map(a=>a.trim());return c&&d&&(a[c]=d),a},{})}catch(a){return console.error("Failed to parse env variables:",a),{}}})(b.envExample),console.log("Parsed environment variables from .env.example:",e));let f=await ah(d,p.repo,p.owner,j);M(f.message);let g={},i=f.message;if(f.success&&f.config)console.log("GitHubTab: Initial detection successful. Merging config."),g={...f.config,rootPath:d,env:{...f.config.env||{},...e}},i=f.message;else{console.log("GitHubTab: Initial detection failed. Attempting README parsing fallback.");let a={name:p.repo,transport:"stdio",command:"",args:[],env:e,disabled:!1,autoApprove:[],rootPath:d,_buildCommand:"",_installCommand:""};try{let b=aj().join(p.repo,"README.md");console.log(`GitHubTab: Reading README.md from relative path: ${b}`);let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:b})}),h=await c.json();if(h.success&&h.content){console.log("GitHubTab: README.md read successfully. Parsing content.");let b=F(h.content,!0,p.repo);console.log("GitHubTab: README parse result:",b),g={...a,...b.config,rootPath:d,env:{...a.env||{},...b.config?.env||{},...e},_buildCommand:b.config?._buildCommand||a._buildCommand,_installCommand:b.config?._installCommand||a._installCommand},i={type:"warning",text:j("mcp.github.partialReadme")}}else console.log("GitHubTab: Failed to read or parse README.md. Using default config."),g=a,i=function(a,b=(a,b)=>(0,A.Tl)("en",a,b)){return{type:"warning",text:a?b("mcp.github.noConfigLanguage",{language:a}):b("mcp.github.noConfig")}}(f.language,j)}catch(b){console.error("GitHubTab: Error reading or parsing README.md:",b),g=a,i={type:"error",text:j("mcp.github.readmeError",{error:b instanceof Error?b.message:j("mcp.server.unknownError")})}}}g={...g,source:{type:"github",repositoryUrl:m}},Q(g),M(i),c&&g.name&&c(g),h&&h("local"),K(!0)}catch(a){console.error("Error during repository cloning or configuration detection:",a),M({type:"error",text:j("mcp.github.repositoryError",{error:a instanceof Error?a.message:j("mcp.server.unknownError")})})}finally{G(!1)}}};return(0,d.jsx)(l.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:j("mcp.github.title")}),(0,d.jsx)(y,{githubUrl:m,setGithubUrl:o,savePath:t,setSavePath:u,repoInfo:p,isValidating:x,parseCompleted:H,onValidate:V}),(0,d.jsx)(z,{showCloneButton:v,isCloning:E,cloneCompleted:J,repoInfo:p,repoExists:T,onClone:X}),L&&(0,d.jsx)(e.default,{children:(0,d.jsx)(q.A,{severity:L.type,children:L.text})})]})})};var al=c(22813),am=c(92812),an=c(60839);let ao=({output:a,isVisible:b,toggleVisibility:c,title:f})=>{let g=(0,an.A)(),{t:h}=(0,n.s9)();return(0,d.jsxs)(l.A,{variant:"outlined",sx:{p:2,height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(k.A,{variant:"h6",children:f??h("mcp.local.console.output")}),(0,d.jsx)(w.A,{onClick:c,size:"small",title:h(b?"mcp.local.console.hide":"mcp.local.console.show"),color:"inherit",sx:{color:"text.secondary"},children:b?(0,d.jsx)(am.A,{}):(0,d.jsx)(al.A,{})})]}),(0,d.jsx)(e.default,{sx:{fontFamily:"monospace",p:2,borderRadius:1,bgcolor:"dark"===g.palette.mode?"#121212":"#1a1a1a",color:"#4ade80",flex:1,overflow:"auto"},children:a?(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",m:0},children:a}):(0,d.jsx)(k.A,{variant:"body2",sx:{fontStyle:"italic",color:"text.secondary"},children:h("mcp.local.console.empty")})})]})},ap=()=>{let{t:a}=(0,n.s9)(),[b,c]=(0,f.useState)(""),[d,e]=(0,f.useState)(!1),[g,h]=(0,f.useState)(()=>a("mcp.local.console.output"));return{consoleOutput:b,isConsoleVisible:d,consoleTitle:g,setConsoleTitle:h,toggleConsoleVisibility:()=>{e(a=>!a)},setIsConsoleVisible:e,appendToConsole:a=>{c(b=>b+a)},clearConsole:()=>{c("")},updateConsole:a=>{c(a)}}},aq=({name:a,setName:b,rootPath:c,setRootPath:f,onRootPathSelect:g})=>{let{t:h}=(0,n.s9)();return(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:h("mcp.local.form.name")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),placeholder:"my-mcp-server",variant:"outlined",required:!0})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:h("mcp.local.form.rootPath")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:c,onChange:a=>f(a.target.value),placeholder:"/path/to/server/root",variant:"outlined",InputProps:{endAdornment:(0,d.jsx)(v.A,{position:"end",children:(0,d.jsx)(w.A,{onClick:g,edge:"end","aria-label":h("mcp.local.form.selectRoot"),children:(0,d.jsx)(r.A,{})})})}})]})]})};var ar=c(8521);let as=({installCommand:a,setinstallCommand:b,buildCommand:c,setBuildCommand:g,onInstall:h,onBuild:i,isInstalling:j,isBuilding:m,installCompleted:o,buildCompleted:p,buildMessage:r})=>{let{t:v}=(0,n.s9)(),w=[v("mcp.local.progress.stillWorking"),v("mcp.local.progress.keepOpen"),v("mcp.local.progress.mayTakeTime"),v("mcp.local.progress.backend"),v("mcp.local.progress.almostThere"),v("mcp.local.progress.processing")],x=[...w,v("mcp.local.progress.installingDependencies"),v("mcp.local.progress.npmInstall"),v("mcp.local.progress.fetchingPackages")],y=[...w,v("mcp.local.progress.buildingServer"),v("mcp.local.progress.compiling"),v("mcp.local.progress.bundling")],[z,A]=(0,f.useState)(0),[B,C]=(0,f.useState)(0);return(0,f.useEffect)(()=>{let a;return j&&(a=setInterval(()=>{A(a=>(a+1)%x.length)},3e3)),()=>{a&&clearInterval(a)}},[j,x.length]),(0,f.useEffect)(()=>{let a;return m&&(a=setInterval(()=>{C(a=>(a+1)%y.length)},3e3)),()=>{a&&clearInterval(a)}},[m,y.length]),(0,d.jsxs)(s.A,{spacing:3,children:[r&&"error"===r.type&&(0,d.jsx)(q.A,{severity:"error",sx:{mb:2},children:r.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:v("mcp.local.installScript")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),variant:"outlined"}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:1},children:[j&&(0,d.jsxs)(l.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(ar.default,{size:20,color:"info"}),(0,d.jsx)(k.A,{variant:"body2",color:"info.dark",fontWeight:"medium",children:x[z]})]}),(0,d.jsx)(u.A,{variant:"contained",color:o?"success":"primary",onClick:h,disabled:j,children:v(j?"mcp.local.installing":"mcp.local.installDependencies")})]})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:v("mcp.local.buildCommand")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:c,onChange:a=>g(a.target.value),variant:"outlined"}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:1},children:[m&&(0,d.jsxs)(l.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(ar.default,{size:20,color:"info"}),(0,d.jsx)(k.A,{variant:"body2",color:"info.dark",fontWeight:"medium",children:y[B]})]}),(0,d.jsx)(u.A,{variant:"contained",color:p?"success":"primary",onClick:i,disabled:m,children:v(m?"mcp.local.building":"mcp.local.buildServer")})]})]})]})};var at=c(38296),au=c(41893),av=c(95587),aw=c(77028),ax=c(43312),ay=c(6537),az=c(47902),aA=c(91034),aB=c(85557),aC=c(93083),aD=c(49938),aE=c(82571),aF=c(92173),aG=c(24166);let aH=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,aI=a=>Object.entries(a||{}).map(([a,b])=>{let c=null!==b&&"object"==typeof b&&"value"in b,d=c?b.value??"":b??"",e=c?!!b.metadata?.isSecret:(0,aE.Hm)(a),f=d.match(aH);if(f)return{key:a,value:d,isSecret:e,isBound:!0,boundTo:f[1]};let g=d===aF.RJ||d===aF.gF;return{key:a,value:d,isSecret:e,isMasked:g}}),aJ=a=>{let b={};return a.forEach(({key:a,value:c,isSecret:d,isBound:e,boundTo:f})=>{let g=a.trim();g&&(e&&f?b[g]={value:"${global:"+f+"}",metadata:{isSecret:!!d}}:b[g]={value:c,metadata:{isSecret:!!d}})}),b},aK=({headers:a,onChange:b})=>{let{globalEnvVars:c}=(0,aD.rX)(),{t:f}=(0,n.s9)(),[h,i]=g().useState(()=>aI(a)),[j,l]=g().useState(!1),[m,o]=g().useState(null),p=JSON.stringify(a||{}),q=g().useRef(p);g().useEffect(()=>{q.current!==p&&p!==JSON.stringify(aJ(h))&&(i(aI(a)),q.current=p)},[p]);let r=a=>{i(a);let c=aJ(a);q.current=JSON.stringify(c),b(c)};return(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:f("mcp.local.headers.title")}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:(0,d.jsx)(aG.A,{message:"mcp.local.headers.help",values:{authorization:(0,d.jsx)("code",{children:"Authorization"}),secret:(0,d.jsx)("strong",{children:f("mcp.local.headers.secretTerm")})}})}),(0,d.jsxs)(s.A,{spacing:1.5,children:[0===h.length&&(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:f("mcp.local.headers.empty")}),h.map((a,b)=>(0,d.jsxs)(s.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,d.jsx)(t.A,{size:"small",label:f("mcp.local.headers.header"),placeholder:"Authorization",value:a.key,onChange:a=>((a,b)=>{r(h.map((c,d)=>{if(d!==a)return c;let e=c.isSecret||(0,aE.Hm)(b);return{...c,key:b,isSecret:e}}))})(b,a.target.value),sx:{flex:"0 0 32%"}}),(0,d.jsx)(t.A,{size:"small",label:f("mcp.local.headers.value"),type:a.isSecret&&!a.isBound?"password":"text",placeholder:a.showWarning?f("mcp.local.headers.reenter"):a.isMasked?f("mcp.local.headers.unchanged"):"Basic dXNlcjpwYXNz",value:a.isBound?"":a.value,onChange:a=>((a,b)=>{let c=b.match(aH);r(h.map((d,e)=>e===a?{...d,value:b,isBound:!!c,boundTo:c?.[1],isMasked:!1,showWarning:!1}:d))})(b,a.target.value),error:a.showWarning,helperText:a.showWarning?f("mcp.local.headers.reenterHelp"):a.isMasked?f("mcp.local.headers.storedSecret"):"",InputProps:{readOnly:a.isBound,endAdornment:a.isBound?(0,d.jsx)(v.A,{position:"end",children:(0,d.jsx)(au.A,{size:"small",label:f("mcp.local.headers.bound",{variable:a.boundTo??""}),color:"primary",variant:"outlined",onDelete:()=>{r(h.map((a,c)=>c===b?{...a,isBound:!1,boundTo:void 0,value:""}:a))},deleteIcon:(0,d.jsx)(aC.A,{fontSize:"small"})})}):null},sx:{flex:1}}),(0,d.jsx)(av.A,{control:(0,d.jsx)(aw.A,{checked:a.isSecret,onChange:a=>((a,b)=>{r(h.map((c,d)=>d!==a?c:c.isSecret&&!b&&c.isMasked?{...c,isSecret:b,value:"",isMasked:!1,showWarning:!0}:{...c,isSecret:b}))})(b,a.target.checked),size:"small"}),label:f("mcp.local.headers.secret"),sx:{mr:0,mt:.25}}),!a.isBound&&(0,d.jsx)(ax.A,{title:f("mcp.local.headers.bind"),children:(0,d.jsx)(w.A,{"aria-label":f("mcp.local.headers.bind"),size:"small",color:"primary",onClick:()=>{o(b),l(!0)},sx:{mt:.25},children:(0,d.jsx)(aB.A,{fontSize:"small"})})}),(0,d.jsx)(ax.A,{title:f("mcp.local.headers.remove"),children:(0,d.jsx)(w.A,{"aria-label":f("mcp.local.headers.remove"),onClick:()=>{r(h.filter((a,c)=>c!==b))},size:"small",sx:{mt:.25},children:(0,d.jsx)(aA.A,{fontSize:"small"})})})]},b)),(0,d.jsx)(e.default,{children:(0,d.jsx)(u.A,{startIcon:(0,d.jsx)(az.A,{}),onClick:()=>{i(a=>[...a,{key:"",value:"",isSecret:!1}])},size:"small",variant:"outlined",children:f("mcp.local.headers.add")})})]}),(0,d.jsx)(ay.A,{open:j,onClose:()=>{l(!1),o(null)},children:(0,d.jsxs)(e.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(k.A,{variant:"h6",sx:{mb:2},children:f("mcp.local.headers.bindTitle")}),0===Object.keys(c).length?(0,d.jsx)(k.A,{color:"text.secondary",sx:{mb:2},children:f("mcp.local.headers.noGlobals")}):(0,d.jsx)(e.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.keys(c).map(a=>(0,d.jsx)(u.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{null!==m&&(r(h.map((b,c)=>c===m?{...b,isBound:!0,boundTo:a,value:"${global:"+a+"}",isMasked:!1,showWarning:!1}:b)),l(!1),o(null))})(a),sx:{justifyContent:"flex-start",textAlign:"left",mb:1,p:1,borderRadius:1},children:(0,d.jsx)(k.A,{variant:"body2",children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(u.A,{variant:"outlined",onClick:()=>{l(!1),o(null)},children:f("mcp.local.cancel")})})]})})]})};var aL=c(35406),aM=c(38941);let aN=/^\$\{global:([^}]+)\}$/,aO=({clientId:a,clientSecret:b,onClientIdChange:c,onClientSecretChange:g})=>{let{globalEnvVars:h}=(0,aD.rX)(),{t:i}=(0,n.s9)(),[j,l]=(0,f.useState)(!1),m=b.match(aN),o=!!m,p=m?.[1]??null,q="/api/oauth/callback";return(0,d.jsxs)(e.default,{sx:{position:"relative"},children:[(0,d.jsxs)(k.A,{variant:"subtitle2",gutterBottom:!0,children:[i("mcp.local.oauth.title")," ",(0,d.jsx)(k.A,{component:"span",variant:"caption",color:"text.secondary",children:i("mcp.local.optional")})]}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:(0,d.jsx)(aG.A,{message:"mcp.local.oauth.help",values:{specLink:(0,d.jsx)(aL.A,{href:"https://modelcontextprotocol.io/specification/draft/basic/authorization",target:"_blank",rel:"noopener",children:i("mcp.local.oauth.spec")})}})}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",label:i("mcp.local.oauth.clientId"),value:a,onChange:a=>c(a.target.value),placeholder:"e.g. 1234567890abcdef",variant:"outlined",sx:{mb:1.5}}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",label:i("mcp.local.oauth.clientSecret"),type:o?"text":"password",value:b,onChange:a=>g(a.target.value),placeholder:i("mcp.local.oauth.secretPlaceholder"),variant:"outlined",autoComplete:"off",InputProps:{readOnly:o,endAdornment:o?(0,d.jsx)(ax.A,{title:i("mcp.local.oauth.unbind"),children:(0,d.jsx)(w.A,{size:"small",onClick:()=>g(""),children:(0,d.jsx)(aC.A,{fontSize:"small"})})}):(0,d.jsx)(ax.A,{title:i("mcp.local.headers.bind"),children:(0,d.jsx)(w.A,{size:"small",onClick:()=>l(!0),children:(0,d.jsx)(aB.A,{fontSize:"small"})})})},helperText:o?i("mcp.local.oauth.bound",{variable:p??""}):b===aF.RJ?i("mcp.local.oauth.storedSecret"):void 0}),(0,d.jsxs)(e.default,{sx:{mt:1.5,display:"flex",alignItems:"center",gap:.5},children:[(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",children:i("mcp.local.oauth.redirect")}),(0,d.jsx)(k.A,{variant:"caption",sx:{fontFamily:"monospace"},children:q}),(0,d.jsx)(ax.A,{title:i("mcp.local.oauth.copyRedirect"),children:(0,d.jsx)(w.A,{size:"small",onClick:()=>navigator.clipboard.writeText(q),children:(0,d.jsx)(aM.A,{sx:{fontSize:14}})})})]}),j&&(0,d.jsxs)(e.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,bgcolor:"background.paper",boxShadow:24,p:3,borderRadius:1,zIndex:9999},children:[(0,d.jsx)(k.A,{variant:"h6",component:"h2",sx:{mb:2},children:i("mcp.local.oauth.bindTitle")}),0===Object.keys(h).length?(0,d.jsx)(k.A,{sx:{mb:2},children:i("mcp.local.headers.noGlobals")}):(0,d.jsx)(e.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.keys(h).map(a=>(0,d.jsx)(u.A,{onClick:()=>{g(`\${global:${a}}`),l(!1)},fullWidth:!0,sx:{justifyContent:"flex-start",textAlign:"left",mb:1,p:1,"&:hover":{bgcolor:"action.hover"}},children:(0,d.jsx)(k.A,{children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(u.A,{onClick:()=>l(!1),children:i("mcp.local.cancel")})})]})]})};var aP=c(22042),aQ=c(34304),aR=c(38233),aS=c(64956);let aT=new Set(["npx","bunx","uvx","pipx","dlx"]),aU=new Set(["pnpm","yarn","bun","npm"]),aV=new Set(["dlx","exec","x"]);function aW(a,b=[]){let c=((a||"").split(/[\\/]/).filter(Boolean).pop()||"").toLowerCase().replace(/\.(cmd|exe|bat|ps1)$/i,"");if(aT.has(c))return!0;if(aU.has(c)){let a=(b[0]||"").toLowerCase();return aV.has(a)}return!1}function aX(a){return"stdio"===a.transport&&aW(a.command,a.args??[])}let aY=({command:a,setCommand:b,transport:c,setTransport:g,websocketUrl:h,setWebsocketUrl:i,serverUrl:j,setServerUrl:l,onRun:m,isRunning:o,runCompleted:p,env:r,onEnvChange:v,headers:w={},onHeadersChange:x,oauthClientId:y="",oauthClientSecret:z="",onOAuthClientIdChange:A,onOAuthClientSecretChange:B,serverName:C,consoleOutput:D,message:E,setMessage:F,oauthCapable:G=!1,onSaveAndAuthenticate:H,isAuthenticating:I=!1})=>{let{t:J,formatNumber:K}=(0,n.s9)();(0,f.useEffect)(()=>{D.includes("MODULE_NOT_FOUND")&&F({type:"error",text:J("mcp.local.run.moduleNotFound")})},[D,F,J]);let L="websocket"!==c||(a=>{if(!a)return!1;try{let b=new URL(a);return"ws:"===b.protocol||"wss:"===b.protocol}catch(a){return!1}})(h),M="sse"!==c&&"streamable"!==c||(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(j),N="websocket"===c&&L&&(a=>{try{let b=new URL(a);return"ws:"===b.protocol&&!(a=>{let b=a.toLowerCase();return"localhost"===b||"127.0.0.1"===b||"::1"===b||"[::1]"===b||b.endsWith(".localhost")})(b.hostname)}catch(a){return!1}})(h),O=a.trim().split(/\s+/).filter(Boolean),P="stdio"===c&&O.length>0&&aW(O[0],O.slice(1)),Q=Math.round(90);return(0,d.jsxs)(s.A,{spacing:3,children:[E&&"error"===E.type&&(0,d.jsx)(q.A,{severity:"error",sx:{mb:2},children:E.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:J("mcp.local.run.transport")}),(0,d.jsxs)(aP.A,{value:c,onChange:(a,b)=>g(b),sx:{borderBottom:1,borderColor:"divider",mb:2},variant:"scrollable",scrollButtons:"auto",children:[(0,d.jsx)(aQ.A,{label:J("mcp.server.transport.stdio"),value:"stdio"}),(0,d.jsx)(aQ.A,{label:J("mcp.server.transport.websocket"),value:"websocket"}),(0,d.jsx)(aQ.A,{label:J("mcp.server.transport.sse"),value:"sse"}),(0,d.jsx)(aQ.A,{label:J("mcp.server.transport.streamable"),value:"streamable"})]})]}),"websocket"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:J("mcp.local.run.websocketUrl")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:h,onChange:a=>i(a.target.value),placeholder:"ws://localhost:3000",variant:"outlined",required:!0,error:!L,helperText:!L&&J("mcp.local.run.invalidWebsocket")}),N&&(0,d.jsx)(q.A,{severity:"warning",sx:{mt:1},children:J("mcp.local.run.insecureWebsocket")})]}),("sse"===c||"streamable"===c)&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:J("mcp.local.run.serverUrl")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:j,onChange:a=>l(a.target.value),placeholder:"https://localhost:3000",variant:"outlined",required:!0,error:!M,helperText:!M&&J("mcp.local.run.invalidHttp")})]}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(aK,{headers:w,onChange:x||(()=>{})})}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(aO,{clientId:y,clientSecret:z,onClientIdChange:A||(()=>{}),onClientSecretChange:B||(()=>{})})}),"stdio"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:J("mcp.local.run.command")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),placeholder:"npm start",variant:"outlined",required:!0}),P&&(0,d.jsx)(aR.A,{children:J("mcp.local.run.runnerTimeout",{seconds:K(Q)})})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",mt:1},children:(0,d.jsx)(u.A,{variant:"contained",color:p?"success":"primary",onClick:m,startIcon:o?(0,d.jsx)(ar.default,{size:16,color:"inherit"}):void 0,disabled:o||"stdio"===c&&!a.trim()||"websocket"===c&&!L||("sse"===c||"streamable"===c)&&!M,title:"stdio"!==c||a.trim()?"websocket"!==c||L?"sse"!==c&&"streamable"!==c||M?J("mcp.local.run.testHelp"):J("mcp.local.run.validServer"):J("mcp.local.run.validWebsocket"):J("mcp.local.run.enterCommand"),children:o?J("mcp.local.run.running"):J("mcp.local.run.test")})}),G&&("sse"===c||"streamable"===c)&&H&&(0,d.jsx)(q.A,{severity:"info",action:(0,d.jsx)(u.A,{color:"inherit",size:"small",variant:"outlined",startIcon:I?(0,d.jsx)(ar.default,{size:16,color:"inherit"}):(0,d.jsx)(aS.A,{}),onClick:()=>{H()},disabled:I||!M,children:I?J("mcp.local.run.authenticating"):J("mcp.local.run.saveAuthenticate")}),children:J("mcp.local.run.oauthHelp")}),(0,d.jsx)(e.default,{children:(0,d.jsx)(at.A,{serverName:C,initialEnv:r,onSave:async a=>(v(a),Promise.resolve())})})]})};var aZ=c(95345);let a$=({args:a,onArgChange:b,onAddArg:c,onRemoveArg:f,onFolderSelect:g,onParseReadme:h,onParseClipboard:i,isParsingReadme:j})=>{let{getThemeColor:l}=(0,x.Ic)(),{t:m}=(0,n.s9)();return(0,d.jsxs)(e.default,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:m("mcp.local.arguments")}),(0,d.jsxs)(s.A,{direction:"row",spacing:1,children:[(0,d.jsx)(u.A,{size:"small",startIcon:(0,d.jsx)(aZ.A,{}),onClick:h,disabled:j,color:"inherit",sx:{color:"text.secondary"},children:m("mcp.local.parseReadme")}),(0,d.jsx)(u.A,{size:"small",startIcon:(0,d.jsx)(aZ.A,{}),onClick:i,color:"inherit",sx:{color:"text.secondary"},children:m("mcp.local.parseClipboard")})]})]}),(0,d.jsxs)(s.A,{spacing:1,children:[a.map((a,c)=>(0,d.jsxs)(s.A,{direction:"row",spacing:1,children:[(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(c,a.target.value),variant:"outlined"}),(0,d.jsx)(ax.A,{title:m("mcp.local.selectFolder"),children:(0,d.jsx)(w.A,{onClick:()=>g(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(r.A,{})})}),(0,d.jsx)(ax.A,{title:m("mcp.local.removeArgument"),children:(0,d.jsx)(w.A,{onClick:()=>f(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(aA.A,{})})})]},c)),(0,d.jsx)(u.A,{startIcon:(0,d.jsx)(az.A,{}),onClick:c,color:"primary",sx:{alignSelf:"flex-start",mt:1},children:m("mcp.local.addArgument")})]})]})};var a_=c(2173),a0=c(67191),a1=c(82605),a2=c(50062),a3=c(7675),a4=c(94367),a5=c(11801);let a6=(0,a5.A)((0,d.jsx)("path",{d:"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3M7.5 11.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5S9.83 13 9 13s-1.5-.67-1.5-1.5M16 17H8v-2h8zm-1-4c-.83 0-1.5-.67-1.5-1.5S14.17 10 15 10s1.5.67 1.5 1.5S15.83 13 15 13"}),"SmartToy");var a7=c(83434);let a8=(0,j.h)("frontend/components/mcp/.../SamplingManager"),a9=({policy:a,onChange:b})=>{let[c,g]=(0,f.useState)([]),{t:h}=(0,n.s9)(),i=!!a?.enabled;(0,f.useEffect)(()=>{let a=!1;return a7.N.loadModels().then(b=>{a||g(Array.isArray(b)?b:[])}).catch(a=>a8.warn("Failed to load models for sampling policy",a)),()=>{a=!0}},[]);let j=c=>{b({enabled:i,modelId:a?.modelId,maxCallsPerMinute:a?.maxCallsPerMinute,...c})};return(0,d.jsxs)(e.default,{children:[(0,d.jsx)(q.A,{severity:"warning",sx:{mb:2},children:h("mcp.local.sampling.deprecated")}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(a6,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(k.A,{variant:"subtitle1",children:h("mcp.local.sampling.title")}),(0,d.jsx)(a0.A,{checked:i,onChange:a=>j({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:h("mcp.local.sampling.help")}),i&&(0,d.jsxs)(e.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,d.jsxs)(a1.A,{size:"small",sx:{minWidth:260},error:!a?.modelId,children:[(0,d.jsx)(a2.A,{id:"sampling-model-label",children:h("mcp.local.sampling.model")}),(0,d.jsxs)(a3.A,{labelId:"sampling-model-label",label:h("mcp.local.sampling.model"),value:c.some(b=>b.id===a?.modelId)?a?.modelId:"",onChange:a=>j({modelId:a.target.value||void 0}),children:[0===c.length&&(0,d.jsx)(a4.A,{value:"",disabled:!0,children:h("mcp.local.sampling.noModels")}),c.map(a=>(0,d.jsx)(a4.A,{value:a.id,children:a.displayName||a.name},a.id))]})]}),(0,d.jsx)(t.A,{size:"small",type:"number",label:h("mcp.local.sampling.maxCalls"),sx:{width:160},value:a?.maxCallsPerMinute??"",placeholder:"10",onChange:a=>{let b=parseInt(a.target.value,10);j({maxCallsPerMinute:Number.isFinite(b)&&b>0?b:void 0})},helperText:h("mcp.local.sampling.defaultCalls")}),!a?.modelId&&(0,d.jsx)(q.A,{severity:"warning",sx:{width:"100%"},children:h("mcp.local.sampling.selectModel")})]})]})},ba=(0,a5.A)([(0,d.jsx)("path",{d:"M4 6H2v14c0 1.1.9 2 2 2h14v-2H4z"},"0"),(0,d.jsx)("path",{d:"M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m-5.99 13c-.59 0-1.05-.47-1.05-1.05 0-.59.47-1.04 1.05-1.04.59 0 1.04.45 1.04 1.04-.01.58-.45 1.05-1.04 1.05m2.5-6.17c-.63.93-1.23 1.21-1.56 1.81-.13.24-.18.4-.18 1.18h-1.52c0-.41-.06-1.08.26-1.65.41-.73 1.18-1.16 1.63-1.8.48-.68.21-1.94-1.14-1.94-.88 0-1.32.67-1.5 1.23l-1.37-.57C11.51 5.96 12.52 5 13.99 5c1.23 0 2.08.56 2.51 1.26.37.61.58 1.73.01 2.57"},"1")],"Quiz"),bb=({policy:a,onChange:b})=>{let c=!!a?.enabled,{t:f}=(0,n.s9)();return(0,d.jsxs)(e.default,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(ba,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(k.A,{variant:"subtitle1",children:f("mcp.local.elicitation.title")}),(0,d.jsx)(a0.A,{checked:c,onChange:a=>b({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1},children:f("mcp.local.elicitation.help")}),c&&(0,d.jsx)(q.A,{severity:"info",sx:{mt:.5},children:f("mcp.local.elicitation.enabled")})]})};var bc=c(32720),bd=c(33799),be=c(28055);let bf=(a,b)=>(0,A.Tl)("en",a,b),bg=(a,b,c,d,e)=>{let f;return{...f="websocket"===a.transport?{...a,transport:"websocket",websocketUrl:b,_buildCommand:d,_installCommand:e}:"sse"===a.transport?{...a,transport:"sse",serverUrl:c,_buildCommand:d,_installCommand:e}:"streamable"===a.transport?{...a,transport:"streamable",serverUrl:c,_buildCommand:d,_installCommand:e}:{...a,transport:"stdio",_buildCommand:d,_installCommand:e},source:f.source??{type:"local"}}},bh=async(a,b,c,d,e,f,g,h=bf)=>{let i=await ae(a,a.name,h);i.message&&c(i.message),i.config&&(b("websocket"===i.config.transport?{...i.config,env:a.env,transport:"websocket",websocketUrl:i.config.websocketUrl||g}:{...i.config,env:a.env,transport:"stdio",command:i.config.command||"",args:i.config.args||[]}),i.config._buildCommand&&d(i.config._buildCommand),i.config._installCommand&&e(i.config._installCommand))},bi=async(a,b,c,d,e,f,g,h,i=bf)=>{d(!0),c({type:"success",text:i("mcp.local.messages.parsingReadme")});try{if(!a.name)throw Error(i("mcp.local.messages.serverNameFirst"));let d=a.name,j=`${d}/README.md`,k=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:j})});if(console.log("DEBUG - API response status:",k.status),!k.ok)throw Error(i("mcp.local.messages.readmeReadFailed"));let l=await k.json();if(!l.content)throw Error(i("mcp.local.messages.readmeEmpty"));let m=await ad(l.content,a,a.name,i);console.log("DEBUG - Parsing README content with repository root path:",a.name),m.message&&c(m.message),m.config&&("websocket"===m.config.transport?(b({...m.config,transport:"websocket",websocketUrl:m.config.websocketUrl||h}),m.config.websocketUrl&&g(m.config.websocketUrl)):b({...m.config,transport:"stdio",command:m.config.command||"",args:m.config.args||[]}),m.config._buildCommand&&e(m.config._buildCommand),m.config._installCommand&&f(m.config._installCommand))}catch(a){console.error("Error parsing README:",a),c({type:"error",text:i("mcp.local.messages.readmeError",{error:a.message||i("mcp.server.unknownError")})})}finally{d(!1)}},bj=async(a,b,c,d,e,f,g,h,i=bf)=>{if(!a.name)return void d({type:"error",text:i("mcp.local.messages.serverNameFirst")});c(!0),d({type:"success",text:i("mcp.local.progress.installingDependencies")}),e(i("mcp.local.console.installTitle")),f(!0),g(`${i("mcp.local.console.executing",{command:b})}
|
|
2
2
|
|
|
3
|
-
`),console.log("DEBUG - Installing dependencies for server:",a.name);let
|
|
3
|
+
`),console.log("DEBUG - Installing dependencies for server:",a.name);let j=a.rootPath||`mcp-servers/${a.name}`,k=!1,l=await (0,bd.b)(j,b,a=>{k=!0,g(b=>b+a)},i);k||g(a=>a+(l.output||i("mcp.local.console.noCommandOutput"))),l.success?(h(!0),d({type:"success",text:i("mcp.local.messages.installSuccess")})):d({type:"error",text:i("mcp.local.messages.installFailed")}),c(!1)},bk=async(a,b,c,d,e,f,g,h,i=bf)=>{if(!a.name)return void d({type:"error",text:i("mcp.local.messages.serverNameFirst")});c(!0),d({type:"success",text:i("mcp.local.progress.buildingServer")}),e(i("mcp.local.console.buildTitle")),f(!0),g(`${i("mcp.local.console.executing",{command:b})}
|
|
4
4
|
|
|
5
|
-
`),console.log("DEBUG - Building server:",a.name);let
|
|
6
|
-
`);let
|
|
7
|
-
`);let
|
|
8
|
-
`),
|
|
9
|
-
`),
|
|
10
|
-
`),
|
|
11
|
-
|
|
12
|
-
`)
|
|
13
|
-
|
|
14
|
-
`),h({type:"
|
|
15
|
-
|
|
16
|
-
`)
|
|
17
|
-
|
|
18
|
-
`)
|
|
19
|
-
`),f(a=>a
|
|
20
|
-
`),f(a=>a
|
|
21
|
-
|
|
22
|
-
`)
|
|
23
|
-
|
|
24
|
-
`)
|
|
25
|
-
`),
|
|
26
|
-
`),
|
|
27
|
-
`),f(a=>a
|
|
28
|
-
|
|
29
|
-
`),
|
|
30
|
-
|
|
31
|
-
`),h({type:"error",text:"Connection test failed with an error."})}finally{d(!1)}};var bf=c(61628),bg=c(19787),bh=c(95803),bi=c(17332);let bj=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,autoTestRun:h,onSaveAndAuthenticate:i})=>{let{localConfig:j,setLocalConfig:l,websocketUrl:n,setWebsocketUrl:o,serverUrl:q,setServerUrl:s,buildCommand:u,setBuildCommand:v,installCommand:w,setInstallCommand:x,message:y,setMessage:z,buildMessage:A,setBuildMessage:B,isBuilding:C,setIsBuilding:D,isInstalling:E,setIsInstalling:F,buildCompleted:G,setBuildCompleted:H,installCompleted:I,setInstallCompleted:J,isParsingReadme:K,setIsParsingReadme:L,isParsingEnv:M,setIsParsingEnv:N,isRunning:O,setIsRunning:P,runCompleted:Q,setRunCompleted:R,expandedSections:S,setExpandedSections:T,handleTransportChange:U,handleArgChange:V,addArgField:W,removeArgField:X,handleEnvChange:Y}=(({initialConfig:a,isOpen:b=!0})=>{let[c,d]=(0,f.useState)({define:!0,build:!0,run:!0}),[e,g]=(0,f.useState)({name:"",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:"",transport:"stdio",_buildCommand:"",_installCommand:""}),[h,i]=(0,f.useState)(""),[j,k]=(0,f.useState)(""),[l,m]=(0,f.useState)(""),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(null),[r,s]=(0,f.useState)(null),[t,u]=(0,f.useState)(!1),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(!1),[z,A]=(0,f.useState)(!1),[B,C]=(0,f.useState)(!1),[D,E]=(0,f.useState)(!1),[F,G]=(0,f.useState)(""),[H,I]=(0,f.useState)(!1),[J,K]=(0,f.useState)(!1),[L,M]=(0,f.useState)(!1),[N,O]=(0,f.useState)("Command Output");return(0,f.useEffect)(()=>{if(b)if(a){let b=a.rootPath||"";g({...a,rootPath:b}),m(a._buildCommand||""),o(a._installCommand||""),"websocket"===a.transport?(i(a.websocketUrl||""),k("")):"sse"===a.transport||"streamable"===a.transport?(k(a.serverUrl||""),i("")):(i(""),k(""))}else g({name:"",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:"",transport:"stdio",_buildCommand:"",_installCommand:""}),m(""),o(""),i(""),q(null),s(null),u(!1),w(!1),y(!1),A(!1),C(!1),E(!1),G(""),I(!1),K(!1),M(!1),O("Command Output"),d({define:!0,build:!0,run:!0})},[b,a]),{localConfig:e,setLocalConfig:g,websocketUrl:h,setWebsocketUrl:i,serverUrl:j,setServerUrl:k,buildCommand:l,setBuildCommand:m,installCommand:n,setInstallCommand:o,message:p,setMessage:q,buildMessage:r,setBuildMessage:s,isBuilding:t,setIsBuilding:u,isInstalling:v,setIsInstalling:w,buildCompleted:x,setBuildCompleted:y,installCompleted:z,setInstallCompleted:A,isParsingReadme:B,setIsParsingReadme:C,isParsingEnv:D,setIsParsingEnv:E,consoleOutput:F,setConsoleOutput:G,isConsoleVisible:H,setIsConsoleVisible:I,isRunning:J,setIsRunning:K,runCompleted:L,setRunCompleted:M,consoleTitle:N,setConsoleTitle:O,expandedSections:c,setExpandedSections:d,handleTransportChange:a=>{"websocket"===a?g(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"websocket",websocketUrl:h})):"sse"===a?g(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"sse",serverUrl:j,headers:a.headers||{}})):"streamable"===a?g(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"streamable",serverUrl:j,headers:a.headers||{}})):g(a=>({name:a.name,command:"stdio"===a.transport?a.command:"",args:"stdio"===a.transport?a.args:[],disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"stdio"}))},handleArgChange:(a,b)=>{"stdio"===e.transport&&g(c=>"stdio"===c.transport&&c.args?{...c,args:c.args.map((c,d)=>d===a?b:c)}:c)},addArgField:()=>{"stdio"===e.transport&&g(a=>{if("stdio"===a.transport){let b=a.args||[];return{...a,args:[...b,""]}}return a})},removeArgField:a=>{"stdio"===e.transport&&g(b=>"stdio"===b.transport&&b.args?{...b,args:b.args.filter((b,c)=>c!==a)}:b)},handleEnvChange:a=>{g(b=>{let c={...b,env:a};return"stdio"===b.transport||"websocket"===b.transport?c:b})}}})({initialConfig:a,isOpen:!0});(0,f.useEffect)(()=>{a&&a.name&&a.rootPath&&"stdio"===a.transport&&(!a.command||""===a.command)&&(!a._buildCommand||""===a._buildCommand)&&(!a._installCommand||""===a._installCommand)&&(z({type:"warning",text:"Configuration detection was not successful. Please configure the server manually."}),T({define:!0,build:!0,run:!0}))},[a]);let[Z,$]=(0,f.useState)(!1),[_,aa]=(0,f.useState)(null),ab=async()=>{$(!0)},ac=async a=>{aa(a)},ad=async()=>{await ba(j,l,z,v,x,o,n)},ae=async()=>{await bb(j,l,z,L,v,x,o,n)},af=async()=>{await bc(j,w,F,B,au,aw,az,J)},ag=async()=>{await bd(j,u,D,B,au,aw,az,H)},[ah,ai]=(0,f.useState)(!1),[am,ao]=(0,f.useState)(!1),ap=async()=>{await be(j,n,q,P,au,az,aw,z,R,a?.name,ai)},aq=async()=>{if(!i)return;if(!j.name||!q)return void z({type:"error",text:"Please provide a server name and URL before authenticating."});let a=a9(j,n,q,u,w);ao(!0),z({type:"success",text:`Saving ${a.name} and starting OAuth…`});try{let b=await i(a);"needs_client_credentials"===b.status?z({type:"warning",text:b.error||"This server needs an OAuth Client ID and Secret. Enter them above, then authenticate again."}):"error"===b.status&&z({type:"error",text:b.error||"OAuth authentication failed."})}catch(a){z({type:"error",text:`OAuth authentication failed: ${a instanceof Error?a.message:"Unknown error"}`})}finally{ao(!1)}},{consoleOutput:ar,isConsoleVisible:as,consoleTitle:at,setConsoleTitle:au,toggleConsoleVisibility:av,setIsConsoleVisible:aw,appendToConsole:ax,clearConsole:ay,updateConsole:az}=ak(),aA=(0,f.useRef)(!1);(0,f.useEffect)(()=>{h&&!aA.current&&a?.name&&j.name===a.name&&(aA.current=!0,T({define:!1,build:!1,run:!0}),J(!0),H(!0),ap())},[h,a,j.name]);let aB=a=>(b,c)=>{T({...S,[a]:c})},aC=a=>{switch(a){case"error":return"error.main";case"success":return"success.main";case"warning":return"warning.main";case"loading":return"info.main";default:return"text.primary"}};return(0,d.jsxs)(e.default,{component:"form",onSubmit:d=>{((a,b,c,d,e,f,g,h,i,j,k)=>{if(a.preventDefault(),!b.name||"stdio"===b.transport&&!b.command)return g({type:"error",text:"Please fill in all required fields"});if("websocket"===b.transport&&!c)return g({type:"error",text:"Please enter a valid WebSocket URL"});if(("sse"===b.transport||"streamable"===b.transport)&&!d)return g({type:"error",text:"Please enter a valid Server URL"});let l=a9(b,c,d,e,f);j&&i?i(l):h(l),k&&k()})(d,j,n,q,u,w,z,b,c,a,g)},sx:{width:"100%"},children:[(0,d.jsxs)(m.Ay,{container:!0,spacing:2,children:[(0,d.jsx)(m.Ay,{item:!0,xs:as?8:12,children:(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsxs)(bf.A,{expanded:S.define,onChange:aB("define"),sx:{border:1,borderColor:j.name&&j.rootPath?h?"success.main":"divider":"error.main",bgcolor:j.name&&j.rootPath?h?"success.lighter":"background.paper":"error.lighter","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bg.A,{expandIcon:(0,d.jsx)(bi.A,{}),"aria-controls":"define-server-content",id:"define-server-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aC(j.name&&j.rootPath?h?"success":"default":"error"),fontWeight:500},children:"First, define your server"})}),(0,d.jsx)(bh.A,{sx:{px:3,py:2},children:(0,d.jsx)(al,{name:j.name,setName:a=>l({...j,name:a}),rootPath:j.rootPath||"",setRootPath:a=>l({...j,rootPath:a}),onRootPathSelect:ab})})]}),(0,d.jsxs)(bf.A,{expanded:S.build,onChange:aB("build"),sx:{border:1,borderColor:A?.type==="error"?"error.main":I&&G?"success.main":I||G?"warning.main":E||C?"info.main":"divider",bgcolor:A?.type==="error"?"error.lighter":I&&G?"success.lighter":I||G?"warning.lighter":E||C?"info.lighter":"background.paper","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bg.A,{expandIcon:(0,d.jsx)(bi.A,{}),"aria-controls":"build-content",id:"build-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aC(A?.type==="error"?"error":I&&G?"success":I||G?"warning":E||C?"loading":"default"),fontWeight:500},children:"Second, install and build"})}),(0,d.jsx)(bh.A,{sx:{px:3,py:2},children:(0,d.jsx)(an,{installCommand:w,setinstallCommand:x,buildCommand:u,setBuildCommand:v,onInstall:af,onBuild:ag,isInstalling:E,isBuilding:C,installCompleted:I,buildCompleted:G,buildMessage:A})})]}),(0,d.jsxs)(bf.A,{expanded:S.run,onChange:aB("run"),sx:{border:1,borderColor:y?.type!=="error"||O?Q?"success.main":O?"info.main":"divider":"error.main",bgcolor:y?.type!=="error"||O?Q?"success.lighter":O?"info.lighter":"background.paper":"error.lighter","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bg.A,{expandIcon:(0,d.jsx)(bi.A,{}),"aria-controls":"run-content",id:"run-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aC(y?.type!=="error"||O?Q?"success":O?"loading":"default":"error"),fontWeight:500},children:"Third, define how to run your server"})}),(0,d.jsx)(bh.A,{sx:{px:3,py:2},children:(0,d.jsxs)(r.A,{spacing:4,children:[(0,d.jsx)(aS,{command:"stdio"===j.transport?j.command:"",setCommand:a=>{"stdio"===j.transport&&l(b=>"stdio"===b.transport?{...b,command:a}:b)},transport:j.transport,setTransport:U,websocketUrl:n,setWebsocketUrl:o,serverUrl:q,setServerUrl:s,onRun:ap,isRunning:O,runCompleted:Q,env:j.env,onEnvChange:Y,headers:("sse"===j.transport||"streamable"===j.transport)&&j.headers||{},onHeadersChange:a=>l(b=>({...b,headers:a})),oauthClientId:j.oauthClientId||"",oauthClientSecret:j.oauthClientSecret||"",onOAuthClientIdChange:a=>l(b=>({...b,oauthClientId:a})),onOAuthClientSecretChange:a=>l(b=>({...b,oauthClientSecret:a})),serverName:j.name,consoleOutput:ar,message:y,setMessage:z,oauthCapable:ah,onSaveAndAuthenticate:i?aq:void 0,isAuthenticating:am}),(0,d.jsx)(e.default,{children:(0,d.jsx)(aU,{args:"stdio"===j.transport&&j.args||[],onArgChange:V,onAddArg:W,onRemoveArg:X,onFolderSelect:ac,onParseReadme:ae,onParseClipboard:ad,isParsingReadme:K})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(aV.A,{roots:j.roots||[],onChange:a=>l(b=>({...b,roots:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a3,{policy:j.sampling,onChange:a=>l(b=>({...b,sampling:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a5,{policy:j.elicitation,onChange:a=>l(b=>({...b,elicitation:a}))})})]})})]})]})}),as&&(0,d.jsx)(m.Ay,{item:!0,xs:4,children:(0,d.jsx)(aj,{output:ar,isVisible:!0,toggleVisibility:av,title:at})})]}),y&&(0,d.jsx)(e.default,{sx:{mt:2,mb:2},children:(0,d.jsx)(p.A,{severity:y.type,children:y.text})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(t.A,{variant:"outlined",onClick:g,children:"Cancel"}),(0,d.jsx)(t.A,{type:"submit",variant:"contained",color:"primary",children:a?"Update Server":"Add Server"})]}),(0,d.jsx)(a6.A,{open:Z,title:"Choose the server folder",initialPath:j.rootPath||void 0,onClose:()=>$(!1),onSelect:a=>l({...j,rootPath:a})}),(0,d.jsx)(a6.A,{open:null!==_,title:"Choose a folder or file",selectFiles:!0,onClose:()=>aa(null),onSelect:a=>{null!==_&&V(_,a)}})]})},bk={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},bl={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function bm(a){var b;let c=[];for(let d of a.packages??[])(function(a){if(!a.identifier||!bk[a.registryType]&&!a.runtimeHint)return!1;let b=a.transport?.type;return!b||"stdio"===b})(d)&&c.push({kind:"package",label:`${bl[b=d.registryType]||b}: ${d.identifier}`,pkg:d});for(let b of a.remotes??[])b.url&&("streamable-http"===b.type||"sse"===b.type)&&c.push({kind:"remote",label:`Remote (${"sse"===b.type?"SSE":"Streamable HTTP"}): ${b.url}`,remote:b});return c}let bn=new Set(["mcp","server","mcp-server","mcpserver"]);function bo(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!bn.has(d.toLowerCase())||!c)return d;let e=c.split(".").pop()||"";return e?`${e}-${d}`:d}function bp(a){return a.title?a.title:bo(a.name)}function bq(a,b){let c=a.icons;if(!c||0===c.length)return null;let d=c.filter(a=>{if(!a?.src)return!1;try{return/^https?:$/.test(new URL(a.src).protocol)}catch{return!1}});return 0===d.length?null:((b?d.find(a=>a.theme===b):void 0)??d[0]).src}function br(a){let b=a.value??a.default;return"named"===a.type?a.name?void 0!==b&&""!==b?[a.name,b]:a.isRequired&&a.valueHint?[a.name,`<${a.valueHint}>`]:a.isRequired?[a.name]:[]:[]:void 0!==b&&""!==b?[b]:a.isRequired?[`<${a.valueHint||"value"}>`]:[]}function bs(a){return(a??[]).flatMap(br)}function bt(a){return{name:bo(a.name).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server",disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:""}}function bu(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function bv(a,b){let c="package"===b.kind?function(a,b){let c,d=b.runtimeHint||bk[b.registryType],e=bs(b.packageArguments),f=bs(b.runtimeArguments),g=function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default??"";b[c.name]=c.isSecret?{value:a,metadata:{isSecret:!0}}:a}return b}(b.environmentVariables);switch(b.registryType){case"npm":c=[...f,"-y",bu(b),...e];break;case"pypi":c=[...f,b.version?`${b.identifier}==${b.version}`:b.identifier,...e];break;case"oci":{let a=Object.keys(g).flatMap(a=>["-e",a]);c=[..."run"===f[0]?[]:["run","-i","--rm"],...f,...a,function(a){let b=a.identifier.split("/").pop()||a.identifier;return!(b.includes(":")||b.includes("@"))&&a.version?`${a.identifier}:${a.version}`:a.identifier}(b),...e];break}case"nuget":c=[...f,bu(b),"--yes",...e];break;default:c=[...f,bu(b),...e]}return{...bt(a),transport:"stdio",command:d,args:c,env:g,rootPath:"."}}(a,b.pkg):function(a,b){let c={};for(let a of b.headers??[])a.name&&(c[a.name]=a.value??a.default??"");let d=bt(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote),d="package"===b.kind?b.pkg.version??a.version:a.version,e={type:"registry",registryName:a.name,...d?{version:d}:{}};return{...c,source:e}}function bw(a,b){return"package"===a.kind?(a.pkg.environmentVariables??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name):(a.remote.headers??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name)}var bx=c(30818),by=c(423),bz=c(43249),bA=c(2783),bB=c(18168),bC=c(68333),bD=c(6636);let bE=(0,a_.A)((0,d.jsx)("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}),"Person");var bF=c(29565),bG=c(33105);function bH(a){return(0,bG.Ay)("MuiAvatar",a)}(0,bF.A)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);var bI=c(20385);let bJ=(0,bB.Ay)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],c.colorDefault&&b.colorDefault]}})((0,bC.A)(({theme:a})=>({position:"relative",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:40,height:40,fontFamily:a.typography.fontFamily,fontSize:a.typography.pxToRem(20),lineHeight:1,borderRadius:"50%",overflow:"hidden",userSelect:"none",variants:[{props:{variant:"rounded"},style:{borderRadius:(a.vars||a).shape.borderRadius}},{props:{variant:"square"},style:{borderRadius:0}},{props:{colorDefault:!0},style:{color:(a.vars||a).palette.background.default,...a.vars?{backgroundColor:a.vars.palette.Avatar.defaultBg}:{backgroundColor:a.palette.grey[400],...a.applyStyles("dark",{backgroundColor:a.palette.grey[600]})}}}]}))),bK=(0,bB.Ay)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(a,b)=>b.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),bL=(0,bB.Ay)(bE,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(a,b)=>b.fallback})({width:"75%",height:"75%"}),bM=f.forwardRef(function(a,b){let c=(0,bD.b)({props:a,name:"MuiAvatar"}),{alt:e,children:g,className:h,component:i="div",slots:j={},slotProps:k={},imgProps:l,sizes:m,src:n,srcSet:o,variant:p="circular",...q}=c,r=null,s={...c,component:i,variant:p},t=function({crossOrigin:a,referrerPolicy:b,src:c,srcSet:d}){let[e,g]=f.useState(!1);return f.useEffect(()=>{if(!c&&!d)return;g(!1);let e=!0,f=new Image;return f.onload=()=>{e&&g("loaded")},f.onerror=()=>{e&&g("error")},f.crossOrigin=a,f.referrerPolicy=b,f.src=c,d&&(f.srcset=d),()=>{e=!1}},[a,b,c,d]),e}({...l,..."function"==typeof k.img?k.img(s):k.img,src:n,srcSet:o}),u=n||o,v=u&&"error"!==t;s.colorDefault=!v,delete s.ownerState;let w=(a=>{let{classes:b,variant:c,colorDefault:d}=a;return(0,bA.A)({root:["root",c,d&&"colorDefault"],img:["img"],fallback:["fallback"]},bH,b)})(s),[x,y]=(0,bI.A)("img",{className:w.img,elementType:bK,externalForwardedProps:{slots:j,slotProps:{img:{...l,...k.img}}},additionalProps:{alt:e,src:n,srcSet:o,sizes:m},ownerState:s});return r=v?(0,d.jsx)(x,{...y}):g||0===g?g:u&&e?e[0]:(0,d.jsx)(bL,{ownerState:s,className:w.fallback}),(0,d.jsx)(bJ,{as:i,className:(0,bz.A)(w.root,h),ref:b,...q,ownerState:s,children:r})});var bN=c(27114),bO=c(40512),bP=c(83899),bQ=c(52327),bR=c(89490),bS=c(75983),bT=c(50553),bU=c(84233),bV=c(19925),bW=c(40973);let bX=(0,a_.A)((0,d.jsx)("path",{d:"M12 1.27a11 11 0 00-3.48 21.46c.55.09.73-.28.73-.55v-1.84c-3.03.64-3.67-1.46-3.67-1.46-.55-1.29-1.28-1.65-1.28-1.65-.92-.65.1-.65.1-.65 1.1 0 1.73 1.1 1.73 1.1.92 1.65 2.57 1.2 3.21.92a2 2 0 01.64-1.47c-2.47-.27-5.04-1.19-5.04-5.5 0-1.1.46-2.1 1.2-2.84a3.76 3.76 0 010-2.93s.91-.28 3.11 1.1c1.8-.49 3.7-.49 5.5 0 2.1-1.38 3.02-1.1 3.02-1.1a3.76 3.76 0 010 2.93c.83.74 1.2 1.74 1.2 2.94 0 4.21-2.57 5.13-5.04 5.4.45.37.82.92.82 2.02v3.03c0 .27.1.64.73.55A11 11 0 0012 1.27"}),"GitHub");var bY=c(15059),bZ=c(56685);let b$=(0,a_.A)((0,d.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96"}),"Cloud");var b_=c(87104),b0=c(21358),b1=c(5501),b2=c(33253);let b3=a=>a>=1e6?`${(a/1e6).toFixed(1).replace(/\.0$/,"")}M`:a>=1e3?`${(a/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(a),b4=({onClose:a,setActiveTab:b,onUpdate:c,onOpenInGitHubTab:g})=>{let h=(0,ai.A)(),[i,j]=(0,f.useState)(""),[l,n]=(0,f.useState)(""),[o,q]=(0,f.useState)([]),[w,x]=(0,f.useState)(null),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(null),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!1),I=(0,f.useRef)(0),J=(0,f.useCallback)(a=>{H(!1),F(a)},[]),K=(0,f.useCallback)(()=>{F(null),H(!1)},[]),L=(0,f.useCallback)(async(a,b)=>{let c=++I.current,d=!b;d?z(!0):B(!0),D(null);try{let e=new URLSearchParams({limit:String(30)});a&&e.set("search",a),b&&e.set("cursor",b);let f=await fetch(`/api/mcp-registry?${e.toString()}`),g=await f.json();if(c!==I.current)return;if(!f.ok||!1===g.success)throw Error(g.error||`Request failed with status ${f.status}`);let h=g.servers??[];q(a=>d?h:[...a,...h]),x(h.length>0?g.metadata?.nextCursor??null:null)}catch(a){if(c!==I.current)return;console.error("Error fetching from MCP Registry:",a),D({type:"error",text:`Could not load servers from the MCP Registry: ${a instanceof Error?a.message:"Unknown error"}`})}finally{c===I.current&&(z(!1),B(!1))}},[]);(0,f.useEffect)(()=>{l&&L(l)},[l,L]);let M=()=>{j(""),n(""),I.current++,z(!1),B(!1),q([]),x(null),D(null)},N=a=>{let b=a.repository?.url;if(!b)return null;try{return"github.com"===new URL(b).hostname?b:null}catch{return null}},O=E?bm(E):[];return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:"MCP Marketplace"}),(0,d.jsxs)(k.A,{variant:"body2",color:"text.secondary",children:["Search the official"," ",(0,d.jsx)(aF.A,{href:"https://registry.modelcontextprotocol.io",target:"_blank",rel:"noopener noreferrer",children:"MCP Registry"})," ","and install servers with one click. Local packages run via npx, uvx or Docker; remote servers connect directly."]}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:i,onChange:a=>j(a.target.value),onKeyDown:a=>{if("Enter"===a.key){a.preventDefault();let b=i.trim();b?b===l?L(b):n(b):M()}},placeholder:"Search servers by name and press Enter (e.g. github, filesystem, postgres)…",variant:"outlined",InputProps:{startAdornment:(0,d.jsx)(u.A,{position:"start",children:(0,d.jsx)(bW.A,{})}),endAdornment:i?(0,d.jsx)(u.A,{position:"end",children:(0,d.jsx)(v.A,{size:"small",onClick:M,"aria-label":"clear search",children:(0,d.jsx)(b_.A,{fontSize:"small"})})}):void 0}}),C&&(0,d.jsx)(p.A,{severity:C.type,onClose:()=>D(null),children:C.text}),y?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(am.default,{})}):(0,d.jsxs)(d.Fragment,{children:[0===o.length&&!C&&(0,d.jsx)(k.A,{variant:"body1",color:"text.secondary",sx:{textAlign:"center",my:4},children:l?(0,d.jsxs)(d.Fragment,{children:['No servers found for "',l,'". The registry matches on server names — try a shorter term.']}):(0,d.jsx)(d.Fragment,{children:"Search the MCP Registry to get started — type a term and press Enter."})}),(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:o.map(a=>{let b=a.server,c=bm(b).length>0,f="active"===function(a){let b=a?._meta?.["io.modelcontextprotocol.registry/official"]?.status;return"string"==typeof b&&b.length>0?b:"unverified"}(a);return(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bx.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(by.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>{J(b)},children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(bM,{src:bq(b,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",mr:2,boxShadow:1},children:bp(b).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.A,{variant:"subtitle1",component:"div",noWrap:!0,title:bp(b),children:bp(b)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bN.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:b.description||"No description provided."}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexWrap:"wrap",gap:.5,alignItems:"center"},children:["number"==typeof a.quality?.stars&&(0,d.jsx)(ap.A,{size:"small",variant:"outlined",icon:(0,d.jsx)(b1.A,{}),label:b3(a.quality.stars),title:`${a.quality.stars.toLocaleString()} GitHub stars`}),"number"==typeof a.quality?.weeklyDownloads&&(0,d.jsx)(ap.A,{size:"small",variant:"outlined",icon:(0,d.jsx)(b2.A,{}),label:`${b3(a.quality.weeklyDownloads)}/wk`,title:`${a.quality.weeklyDownloads.toLocaleString()} npm downloads last week`}),(a=>{let b=[],c=new Set;for(let e of a.packages??[]){let a=function(a){return bl[a]||a}(e.registryType);c.has(a)||(c.add(a),b.push((0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bZ.A,{}),label:a},`pkg-${a}`)))}return(a.remotes??[]).length>0&&b.push((0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(b$,{}),label:"Remote"},"remote")),b})(b),b.version&&(0,d.jsx)(ap.A,{size:"small",variant:"outlined",label:`v${b.version}`}),!c&&(0,d.jsx)(ap.A,{size:"small",color:"warning",variant:"outlined",label:"Manual setup"}),c&&!f&&(0,d.jsx)(ap.A,{size:"small",color:"warning",variant:"outlined",icon:(0,d.jsx)(b0.A,{}),label:"Unverified",title:"Self-asserted registry entry — review the command before installing."})]})]})]})})},b.name)})}),w&&o.length>0&&(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsx)(t.A,{variant:"outlined",onClick:()=>L(l,w),disabled:A,startIcon:A?(0,d.jsx)(am.default,{size:20,color:"inherit"}):void 0,children:A?"Loading…":"Load more"})})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1},children:(0,d.jsx)(t.A,{variant:"outlined",onClick:a,children:"Cancel"})})]}),(0,d.jsx)(bO.A,{open:null!==E,onClose:K,maxWidth:"sm",fullWidth:!0,children:E&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bP.A,{component:"div",children:(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1.5,minWidth:0},children:[(0,d.jsx)(bM,{src:bq(E,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",width:40,height:40},children:bp(E).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{minWidth:0},children:[(0,d.jsx)(k.A,{variant:"h6",noWrap:!0,title:bp(E),children:bp(E)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:E.name,children:E.name})]})]})}),(0,d.jsxs)(bQ.A,{children:[(E.repository?.url||E.websiteUrl)&&(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1,mb:2,flexWrap:"wrap"},children:[E.repository?.url&&(0,d.jsx)(t.A,{size:"small",startIcon:(0,d.jsx)(bX,{}),component:"a",href:E.repository.url,target:"_blank",rel:"noopener noreferrer",children:"Repository"}),E.websiteUrl&&(0,d.jsx)(t.A,{size:"small",startIcon:(0,d.jsx)(bY.A,{}),component:"a",href:E.websiteUrl,target:"_blank",rel:"noopener noreferrer",children:"Website"})]}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:E.description||"No description provided."}),(0,d.jsx)(p.A,{severity:"warning",icon:(0,d.jsx)(b0.A,{}),sx:{mb:1},children:"MCP servers run code or connect to external services on your machine. Only install servers you trust — review the repository and the command it runs first."}),(0,d.jsx)(aq.A,{sx:{mb:1},control:(0,d.jsx)(ar.A,{checked:G,onChange:a=>H(a.target.checked)}),label:"I understand the risk and trust this server"}),O.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Choose how to install this server:"}),(0,d.jsx)(bR.A,{children:O.map((a,e)=>{let f=bw(a);return(0,d.jsxs)(bS.A,{disabled:!G,onClick:()=>((a,d)=>{let e=bv(a,d),f=bw(d);c&&c(e,{autoTestRun:!0}),K(),b&&b("local"),D({type:f.length>0?"warning":"success",text:f.length>0?`Configuration prepared. Fill in the required value(s) before saving: ${f.join(", ")}`:"Configuration prepared. Review and save it in the Local Server tab."})})(E,a),children:[(0,d.jsx)(bT.A,{children:"package"===a.kind?(0,d.jsx)(bZ.A,{}):(0,d.jsx)(b$,{})}),(0,d.jsx)(bU.A,{primary:a.label,secondary:f.length>0?`Requires: ${f.join(", ")}`:"package"===a.kind?"Runs locally":"Hosted remotely",primaryTypographyProps:{sx:{wordBreak:"break-all"}}})]},e)})})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(p.A,{severity:"info",children:["This server does not offer an installation method FLUJO can set up automatically. Check its documentation for manual setup instructions.",N(E)&&g&&(0,d.jsx)(d.Fragment,{children:" You can still try to clone it directly from GitHub, but additional steps might still be required."})]}),N(E)&&g&&(0,d.jsx)(t.A,{variant:"contained",startIcon:(0,d.jsx)(bX,{}),disabled:!G,onClick:()=>(a=>{let b=N(a);b&&g&&(K(),g(b))})(E),sx:{mt:2},children:"Try manual installation"})]})]}),(0,d.jsx)(bV.A,{children:(0,d.jsx)(t.A,{onClick:K,children:"Close"})})]})})]})};var b5=c(53222);let b6=({onClose:a,setActiveTab:b,onUpdate:c})=>{let g=(0,ai.A)(),[h,i]=(0,f.useState)(null),[j,l]=(0,f.useState)(!0),[n,o]=(0,f.useState)(!1),[q,s]=(0,f.useState)(null),[u,v]=(0,f.useState)(null);(0,f.useEffect)(()=>{let a=!1;return(async()=>{try{let b=await fetch("/api/mcp-registry/spotlight"),c=await b.json();if(a)return;if(!b.ok||!1===c.success)throw Error(c.error||`Request failed with status ${b.status}`);i(c.cache??null)}catch(b){a||s({type:"error",text:`Could not load spotlight servers: ${b instanceof Error?b.message:"Unknown error"}`})}finally{a||l(!1)}})(),()=>{a=!0}},[]);let w=async()=>{o(!0),s(null);try{let a=await fetch("/api/mcp-registry/spotlight",{method:"POST"}),b=await a.json();if(!a.ok||!1===b.success)throw Error(b.error||`Request failed with status ${a.status}`);i(b.cache??null)}catch(a){s({type:"error",text:`Refresh failed: ${a instanceof Error?a.message:"Unknown error"}`})}finally{o(!1)}},x=(a,d)=>{let e=function(a,b){if(!b||0===Object.keys(b).length)return a;let c={...a.env??{}};for(let[a,d]of Object.entries(b)){let b=c[a];b&&"object"==typeof b&&b.metadata?.isSecret?c[a]={value:d,metadata:{isSecret:!0}}:c[a]=d}return{...a,env:c}}(bv(a.server,d),a.env);v(null),c&&c(e,{autoTestRun:!0}),b&&b("local")},y=(h?.entries??[]).filter(a=>a.result).map(a=>({server:a.result.server,env:a.env})),z=(h?.entries??[]).filter(a=>!a.result),A=u?bm(u.server):[],B=A.find(a=>"package"===a.kind),C=A.find(a=>"remote"===a.kind);return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,d.jsx)(k.A,{variant:"h6",children:"Spotlight"}),(0,d.jsx)(t.A,{variant:"outlined",size:"small",onClick:w,disabled:n,startIcon:n?(0,d.jsx)(am.default,{size:16,color:"inherit"}):(0,d.jsx)(b5.A,{}),children:n?"Refreshing…":"Refresh"})]}),(0,d.jsxs)(k.A,{variant:"body2",color:"text.secondary",children:["Hand-picked MCP servers that work well with FLUJO — installed with a single click.",h?.updatedAt&&(0,d.jsxs)(d.Fragment,{children:[" Catalog updated ",new Date(h.updatedAt).toLocaleString(),"."]})]}),q&&(0,d.jsx)(p.A,{severity:q.type,onClose:()=>s(null),children:q.text}),j?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(am.default,{})}):0===y.length?(0,d.jsx)(k.A,{variant:"body1",color:"text.secondary",sx:{textAlign:"center",my:4},children:"No spotlight servers cached yet. They are fetched when FLUJO starts — click Refresh to fetch them now."}):(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:y.map(a=>{let{server:b}=a,c=bm(b),f=c.some(a=>"package"===a.kind),h=c.some(a=>"remote"===a.kind);return(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bx.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(by.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>(a=>{let b=bm(a.server);if(0===b.length)return void s({type:"warning",text:`${bp(a.server)} does not offer an installation method FLUJO can set up automatically.`});let c=b.filter(a=>"package"===a.kind),d=b.filter(a=>"remote"===a.kind);if(c.length>0&&d.length>0)return void v(a);x(a,b[0])})(a),children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(bM,{sx:{bgcolor:g.palette.warning.main,color:"#fff",mr:2,boxShadow:1},children:(0,d.jsx)(b1.A,{fontSize:"small"})}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.A,{variant:"subtitle1",component:"div",noWrap:!0,title:bp(b),children:bp(b)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bN.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:b.description||"No description provided."}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexWrap:"wrap",gap:.5,alignItems:"center"},children:[f&&(0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bZ.A,{}),label:"Local"}),h&&(0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(b$,{}),label:"Remote"}),b.version&&(0,d.jsx)(ap.A,{size:"small",variant:"outlined",label:`v${b.version}`})]})]})]})})},b.name)})}),z.length>0&&!j&&(0,d.jsxs)(p.A,{severity:"warning",children:[z.length," spotlight ",1===z.length?"entry":"entries"," could not be resolved against the MCP Registry:",z.map(a=>(0,d.jsxs)(k.A,{variant:"caption",component:"div",sx:{wordBreak:"break-all"},children:[a.url," — ",a.error||"unknown error"]},a.url))]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1},children:(0,d.jsx)(t.A,{variant:"outlined",onClick:a,children:"Cancel"})})]}),(0,d.jsx)(bO.A,{open:null!==u,onClose:()=>v(null),maxWidth:"xs",fullWidth:!0,children:u&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bP.A,{children:bp(u.server)}),(0,d.jsxs)(bQ.A,{children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"This server can run locally on your machine or connect to a hosted endpoint."}),(0,d.jsxs)(bR.A,{children:[B&&(0,d.jsxs)(bS.A,{onClick:()=>x(u,B),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(bZ.A,{})}),(0,d.jsx)(bU.A,{primary:"Local",secondary:"Runs on your machine"})]}),C&&(0,d.jsxs)(bS.A,{onClick:()=>x(u,C),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(b$,{})}),(0,d.jsx)(bU.A,{primary:"Remote",secondary:"Connects to a hosted endpoint"})]})]})]}),(0,d.jsx)(bV.A,{children:(0,d.jsx)(t.A,{onClick:()=>v(null),children:"Cancel"})})]})})]})},b7=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let h=(0,ai.A)(),[i,j]=(0,f.useState)(!1),[n,o]=(0,f.useState)(!1),[q,s]=(0,f.useState)(!1),[u,v]=(0,f.useState)(null),[w,x]=(0,f.useState)([]),[y,z]=(0,f.useState)(""),[A,B]=(0,f.useState)(!1),{consoleOutput:C,isConsoleVisible:D,setIsConsoleVisible:E,updateConsole:F,clearConsole:G}=ak();(0,f.useEffect)(()=>{(async()=>{j(!0);try{let a=await fetch("/api/cwd"),b=await a.json();if(b.success){z(b.mcpServersDir);let a=`${b.mcpServersDir}/servers`,c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"exists",savePath:a})}),d=await c.json();B(d.exists),d.exists?await I(a):v({type:"warning",text:'ModelContextProtocol servers repository not found. Click "Refresh" to clone it.'})}}catch(a){console.error("Error initializing Reference Servers tab:",a),v({type:"error",text:`Failed to initialize: ${a instanceof Error?a.message:"Unknown error"}`})}finally{j(!1)}})()},[]);let H=async()=>{o(!0),G(),E(!0),F("Starting repository refresh...\n");try{let a="https://github.com/modelcontextprotocol/servers.git",b=`${y}/servers`;if(A){F("Repository already exists. Pulling latest changes...\n");let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"run",savePath:b,runCommand:"git pull"})}),c=await a.json();c.success?F(`Pull successful: ${c.output||"Repository updated"}
|
|
32
|
-
|
|
33
|
-
`),
|
|
34
|
-
`),
|
|
35
|
-
`),
|
|
36
|
-
|
|
37
|
-
`)
|
|
38
|
-
|
|
39
|
-
`)
|
|
40
|
-
`),
|
|
41
|
-
`)
|
|
42
|
-
`)
|
|
43
|
-
`),a}},J=async a=>{try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:a})});return(await b.json()).success}catch{return!1}},K=async a=>{try{let b=await J(`${a.directory}/package.json`),d=await J(`${a.directory}/pyproject.toml`),e="",f=[],h="",i="";if(b){e="node",f=["dist/index.js"],h="npm run build",i="npm install --include=dev";try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:`${a.directory}/package.json`})}),c=await b.json();if(c.success){let b=JSON.parse(c.content);if(b.bin){let c="";if("string"==typeof b.bin)c=b.bin;else{let d=`mcp-server-${a.name}`;b.bin[d]&&(c=b.bin[d])}c&&(f=[c])}}}catch(a){console.error("Error reading package.json:",a)}}else if(d){e="python";let b=a.name.replace(/-/g,"_"),c=`mcp_server_${b}`;f=["-m",c],await J(`${a.directory}/requirements.txt`)?(i="pip install -r requirements.txt",h=d?"pip install -e .":""):(i="pip install -e .",h="");try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:`${a.directory}/pyproject.toml`})}),c=await b.json();if(c.success){let a=c.content.match(/\[project\.scripts\][\s\S]*?mcp-server-[^=]+=\s*"([^:]+):/);a&&a[1]&&(f=["-m",a[1]])}}catch(a){console.error("Error reading pyproject.toml:",a)}}else e=a.command||"npx -y @modelcontextprotocol/server-"+a.name,f=[],h=a.buildCommand||"npm run build",i=a.installCommand||"npm install";let j={name:a.name,rootPath:a.directory,command:e,args:f,env:{},disabled:!1,autoApprove:[],transport:"stdio",_buildCommand:h,_installCommand:i,source:{type:"github",repositoryUrl:"https://github.com/modelcontextprotocol/servers.git",subdirectory:`src/${a.name}`}};g&&g(j),c&&c("local")}catch(a){console.error("Error configuring server:",a),v({type:"error",text:`Error configuring server: ${a instanceof Error?a.message:"Unknown error"}`})}};return(0,d.jsx)(e.default,{sx:{width:"100%"},children:(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:"MCP Reference Servers"}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(k.A,{variant:"body1",children:A?`${w.length} servers available from the ModelContextProtocol repository`:'Repository not yet cloned. Click "Refresh" to get started.'}),(0,d.jsx)(t.A,{variant:"contained",color:"primary",startIcon:n?(0,d.jsx)(am.default,{size:20,color:"inherit"}):(0,d.jsx)(b5.A,{}),onClick:H,disabled:n,children:n?"Refreshing...":"Refresh"})]}),u&&(0,d.jsx)(p.A,{severity:u.type,sx:{mb:2},children:u.text}),i?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(am.default,{})}):(0,d.jsxs)(d.Fragment,{children:[D&&(0,d.jsx)(l.A,{variant:"outlined",sx:{p:2,mb:3,maxHeight:"200px",overflow:"auto",fontFamily:"monospace",fontSize:"0.9rem",bgcolor:"dark"===h.palette.mode?"#121212":"#f5f5f5"},children:(0,d.jsx)(e.default,{component:"pre",sx:{m:0,whiteSpace:"pre-wrap"},children:C})}),(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:w.map(a=>(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bx.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s",position:"relative",overflow:"visible","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(by.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>K(a),children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider",background:(a=>{let b="dark"===a.palette.mode?"#424242":"#607d8b",c="dark"===a.palette.mode?"#303030":"#455a64";return`linear-gradient(135deg, ${b} 0%, ${c} 100%)`})(h)},children:[(0,d.jsx)(bM,{sx:{bgcolor:"dark"===h.palette.mode?"#424242":"#607d8b",color:"#fff",mr:2,boxShadow:1},children:a.name.charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1},children:[(0,d.jsx)(k.A,{variant:"h6",component:"div",sx:{textTransform:"capitalize",color:"#fff",textShadow:"0px 1px 2px rgba(0,0,0,0.2)"},children:a.name.replace(/-/g," ")}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bX,{}),label:"MCP",sx:{mr:1,bgcolor:"rgba(255,255,255,0.2)",color:"#fff","& .MuiChip-icon":{color:"#fff"}}}),(0,d.jsx)(k.A,{variant:"caption",sx:{color:"rgba(255,255,255,0.8)"},children:"Reference Server"})]})]})]}),(0,d.jsx)(bN.A,{sx:{flexGrow:1,pt:2},children:(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:a.description||`MCP Reference Server for ${a.name.replace(/-/g," ")}`})})]})})},a.name))})]})]})})};var b8=c(91059);let b9=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let[h,i]=(0,f.useState)(""),[j,m]=(0,f.useState)(!1),[n,o]=(0,f.useState)(null),[q,u]=(0,f.useState)(!1),[v,w]=(0,f.useState)(void 0),x=(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(h),y=()=>{let a=(a=>{try{return new URL(a).hostname.replace(/\./g,"-")}catch(a){return"remote-server"}})(h),b={name:a,transport:"streamable",serverUrl:h,rootPath:`mcp-servers/${a}`,disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:"",source:{type:"remote"},...v?{sampling:v}:{}};g&&g(b),c&&c("local")},z=async()=>{if(!x)return void o({type:"error",text:"Please enter a valid HTTP or HTTPS URL"});if(q)return void y();m(!0),o({type:"success",text:"Checking the server…"});try{if((await a8.S.probeOAuthCapability(h)).oauthCapable){u(!0),o({type:"success",text:'This server uses OAuth. Continue to setup, then run Test Run and click "Save & Authenticate" to sign in.'}),m(!1);return}y(),o({type:"success",text:"Switching to Local Server tab with pre-filled configuration..."})}catch(a){console.error("Error processing remote URL:",a),o({type:"error",text:`Error processing URL: ${a instanceof Error?a.message:"Unknown error"}`})}finally{m(!1)}};return(0,d.jsx)(l.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:"Connect to Remote MCP Server"}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:"Enter the URL of a remote MCP server that supports HTTP streaming. The server configuration will be automatically set up for you."}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Server URL"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:h,onChange:a=>{i(a.target.value),u(!1),n&&o(null)},placeholder:"https://example.com/mcp",variant:"outlined",required:!0,error:h.length>0&&!x,helperText:h.length>0&&!x?"Please enter a valid HTTP or HTTPS URL":"Enter the full URL to the MCP server endpoint",disabled:j})]}),n&&(0,d.jsx)(e.default,{children:(0,d.jsx)(p.A,{severity:n.type,children:n.text})}),(0,d.jsx)(b8.A,{}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:"Sampling (optional)"}),(0,d.jsx)(a3,{policy:v,onChange:w})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(t.A,{variant:"outlined",onClick:b,disabled:j,children:"Cancel"}),(0,d.jsx)(t.A,{variant:"contained",color:"primary",onClick:z,disabled:!x||j,children:j?"Checking…":q?"Continue to setup":"Connect"})]})]})})};var ca=c(30137);let cb=({isOpen:a,onClose:b,onAdd:c,initialConfig:g,onUpdate:h,onRestartAfterUpdate:i,onSaveAndAuthenticate:j})=>{let[l,m]=(0,f.useState)("spotlight"),[n,o]=(0,f.useState)(null),[p,q]=(0,f.useState)(!1),[r,s]=(0,f.useState)(""),[t,u]=(0,f.useState)({spotlight:!1,marketplace:!1,github:!1,local:!1,reference:!1,remote:!1});(0,f.useEffect)(()=>{g||t[l]||u(a=>({...a,[l]:!0}))},[l,g,t]);let{getThemeValue:x}=(0,w.Ic)(),y=()=>{o(null),q(!1),s(""),m("spotlight"),b()};return(0,d.jsxs)(bO.A,{open:a,onClose:y,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{width:"95vw",maxWidth:"95vw",maxHeight:"95vh",height:"auto"}},children:[(0,d.jsxs)(bP.A,{component:"div",sx:{display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider",pb:1},children:[(0,d.jsx)(k.A,{variant:"h6",children:g?`Edit MCP Server: ${g.name}`:"Add MCP Server"}),(0,d.jsx)(v.A,{edge:"end",color:"inherit",onClick:y,"aria-label":"close",children:(0,d.jsx)(ca.A,{})})]}),(0,d.jsxs)(bQ.A,{sx:{p:0},children:[g?null:(0,d.jsx)(e.default,{sx:{borderBottom:1,borderColor:"divider"},children:(0,d.jsxs)(aJ.A,{value:l,onChange:(a,b)=>{q(!1),s(""),m(b)},"aria-label":"server configuration tabs",sx:{px:2},children:[(0,d.jsx)(aK.A,{label:"Spotlight",value:"spotlight"}),(0,d.jsx)(aK.A,{label:"Marketplace",value:"marketplace"}),(0,d.jsx)(aK.A,{label:"GitHub",value:"github"}),(0,d.jsx)(aK.A,{label:"Local Server",value:"local"}),(0,d.jsx)(aK.A,{label:"Remote",value:"remote"}),(0,d.jsx)(aK.A,{label:"Reference Servers",value:"reference"})]})}),(0,d.jsx)(e.default,{sx:{p:3},children:g?(0,d.jsx)(bj,{initialConfig:g,onAdd:c,onUpdate:h,onClose:b,onRestartAfterUpdate:i,onSaveAndAuthenticate:j}):"spotlight"===l?(0,d.jsx)(b6,{onAdd:c,onClose:b,setActiveTab:m,onUpdate:(a,b)=>{o(a),q(!!b?.autoTestRun)}}):"marketplace"===l?(0,d.jsx)(b4,{onAdd:c,onClose:b,setActiveTab:m,onUpdate:(a,b)=>{o(a),q(!!b?.autoTestRun)},onOpenInGitHubTab:a=>{s(a),m("github")}}):"github"===l?(0,d.jsx)(af,{onAdd:c,onClose:b,setActiveTab:m,initialGitHubUrl:r,onUpdate:a=>{o(a),q(!1)}}):"local"===l?(0,d.jsx)(bj,{initialConfig:n,onAdd:c,onClose:b,autoTestRun:p,onSaveAndAuthenticate:j}):"remote"===l?(0,d.jsx)(b9,{onAdd:c,onClose:b,setActiveTab:m,onUpdate:a=>{o(a),q(!1)}}):(0,d.jsx)(b7,{onAdd:c,onClose:b,setActiveTab:m,onUpdate:a=>{o(a),q(!1)}})})]})]})};var cc=c(42387),cd=c(45798),ce=c(18954),cf=c(31411),cg=c(59060),ch=c(34641);let ci=(0,j.h)("frontend/components/mcp/MCPToolManager/ToolTester"),cj=({serverName:a,tools:b=[],onTestTool:c,onClose:g,prefill:h})=>{ci.debug("Props:",{serverName:a,toolsCount:b?.length});let j=Array.isArray(b)?b:[];ci.debug("Tools array:",{count:j.length});let[m,n]=(0,f.useState)(""),[o,q]=(0,f.useState)({}),[r,u]=(0,f.useState)(null),[x,y]=(0,f.useState)(!1),[z,A]=(0,f.useState)(60),[B,C]=(0,f.useState)(null),[D,E]=(0,f.useState)(null),[F,G]=(0,f.useState)(null),[H,I]=(0,f.useState)(!1),[J,K]=(0,f.useState)(!1);(0,f.useEffect)(()=>{h&&j.some(a=>a.name===h.toolName)&&(n(h.toolName),q({...h.arguments}),u(null),E(null),G(null),C(null))},[h,b]);let L=async()=>{ci.debug(`Testing tool: ${m} with params:`,JSON.stringify(o)),ci.debug(`Timeout: ${z} seconds`),E(null),G(null),y(!0);try{let a={},b=j.find(a=>a.name===m);b?.inputSchema?.properties?Object.entries(o).forEach(([c,d])=>{let e=b.inputSchema.properties[c];if(!e){a[c]=d;return}if("number"===e.type||"integer"===e.type){let b="string"==typeof d?parseFloat(d):d;a[c]=isNaN(b)?0:b}else"boolean"===e.type?a[c]=!!d:a[c]=d}):Object.assign(a,o),ci.debug("Sending typed params:",JSON.stringify(a));let d=await c(m,a,z);ci.debug("Test result:",JSON.stringify(d)),d&&d.progressToken&&G(d.progressToken),u(d)}catch(a){ci.error("Error testing tool:",a),u({success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"})}y(!1)},M=async()=>{if(!H){I(!0),ci.debug("Cancelling tool execution");try{let b=F?`/api/mcp/cancel?token=${F}&serverName=${encodeURIComponent(a)}`:`/api/mcp/cancel?serverName=${encodeURIComponent(a)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reason:"User cancelled operation"})});if(c.ok)ci.info("Successfully sent cancellation request"),C("Cancellation request sent. The operation should stop shortly.");else{let a=await c.json();ci.warn("Failed to cancel operation:",a),C(`Failed to cancel: ${a.error||"Unknown error"}`)}}catch(a){ci.error("Error cancelling tool:",a),C(`Error cancelling: ${a instanceof Error?a.message:"Unknown error"}`)}finally{I(!1)}}},N=j.find(a=>a.name===m);ci.debug("Selected tool data:",{name:N?.name,hasSchema:!!N?.inputSchema});let{getThemeValue:O}=(0,w.Ic)();return(0,d.jsxs)(l.A,{sx:{p:2,bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,d.jsxs)(k.A,{variant:"h6",sx:{fontWeight:"semibold"},children:["Tool Tester - ",a]}),g&&(0,d.jsx)(as.A,{title:"Close tool tester",children:(0,d.jsx)(v.A,{size:"small",onClick:g,"aria-label":"Close tool tester",children:(0,d.jsx)(ca.A,{fontSize:"small"})})})]}),B&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:B}),(0,d.jsxs)(e.default,{sx:{mb:2},children:[(0,d.jsx)(k.A,{component:"label",variant:"body2",sx:{display:"block",mb:1,fontWeight:"medium",color:a=>"dark"===a.palette.mode?"#d1d5db":"#4b5563"},children:"Select Tool"}),(0,d.jsxs)(aZ.A,{fullWidth:!0,value:m,onChange:a=>{n(a.target.value),q({}),u(null)},displayEmpty:!0,sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}},children:[(0,d.jsx)(a$.A,{value:"",children:"Choose a tool..."}),j.map(a=>(0,d.jsx)(a$.A,{value:a.name,children:a.name},a.name))]})]}),N?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.default,{sx:{mb:2},children:(0,d.jsx)(k.A,{variant:"body2",sx:{color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:N.description})}),(0,d.jsxs)(e.default,{sx:{mb:2,display:"flex",flexDirection:"column",gap:2},children:[(0,d.jsx)(cf.A,{schema:N.inputSchema,values:o,onChange:q}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{component:"label",variant:"body2",sx:{display:"block",mb:.5,fontWeight:"medium",color:a=>"dark"===a.palette.mode?"#d1d5db":"#4b5563"},children:"Timeout (seconds)"}),(0,d.jsx)(s.A,{type:"number",fullWidth:!0,size:"small",value:60===z?"":z,onChange:a=>(a=>{let b=parseInt(a,10);""===a||isNaN(b)||b<-1||0===b?A(60):A(b)})(a.target.value),placeholder:"Default: 60 seconds, -1 for no timeout",sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}}}),(0,d.jsx)(k.A,{variant:"caption",sx:{display:"block",mt:.5,color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:"Default: 60 seconds. Use -1 for no timeout. Value of 0 will be treated as 60."})]})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1},children:[(0,d.jsx)(t.A,{variant:"contained",color:"primary",onClick:L,disabled:x,startIcon:x&&(0,d.jsx)(i.default,{size:"small",color:"white"}),children:x?"Testing...":"Test Tool"}),x&&(0,d.jsx)(t.A,{variant:"contained",color:"error",onClick:M,disabled:H,startIcon:H?(0,d.jsx)(i.default,{size:"small",color:"white"}):(0,d.jsx)(e.default,{component:"span",sx:{display:"flex",alignItems:"center",justifyContent:"center",width:16,height:16},children:(0,d.jsx)("svg",{width:"16",height:"16",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M6 18L18 6M6 6l12 12"})})}),children:H?"Cancelling...":"Cancel"})]}),x&&(0,d.jsxs)(e.default,{sx:{mt:2},children:[!D&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsx)(i.default,{size:"small",color:"primary"}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:"Processing request..."})]}),D&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:.5},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:"Progress:"}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:D.total?`${Math.round(D.current)}/${Math.round(D.total)} (${Math.round(D.current/D.total*100)}%)`:`${Math.round(D.current)}%`})]}),(0,d.jsx)(cc.A,{variant:"determinate",value:D.total?Math.min(100,D.current/D.total*100):Math.min(100,D.current)})]})]})]}):(0,d.jsx)(k.A,{color:"text.secondary",children:"No tool selected or tool details not found."}),r&&(0,d.jsxs)(l.A,{sx:{mt:2,p:2,bgcolor:a=>"dark"===a.palette.mode?"#1a1a1a":"#f9fafb"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[(0,d.jsx)(k.A,{variant:"subtitle1",sx:{fontWeight:"medium"},children:"Result:"}),(0,d.jsx)(aq.A,{control:(0,d.jsx)(aW.A,{checked:J,onChange:a=>K(a.target.checked),size:"small"}),label:"Show Raw",sx:{mr:0}})]}),J?(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto",maxHeight:"400px"},children:r.success?r.output:`Error: ${r.error}`}):r.success?(()=>{try{let a=JSON.parse(r.output);if(a&&a.data&&Array.isArray(a.data.content))return(0,d.jsx)(e.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:a.data.content.map((a,b)=>"text"===a.type?(0,d.jsx)(cd.oz,{remarkPlugins:[ce.A],children:a.text},b):"image"===a.type&&a.data&&a.mimeType?(0,d.jsx)("img",{src:`data:${a.mimeType};base64,${a.data}`,alt:`Tool Result Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}},b):"audio"===a.type&&a.data&&a.mimeType?(0,d.jsx)("audio",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{width:"100%"},children:"Your browser does not support the audio element."},b):(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto"},children:JSON.stringify(a,null,2)},b))});throw Error("Output is valid JSON but not in the expected MCP 'data.content' format.")}catch(a){return(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto"},children:r.output})}})():(0,d.jsxs)(k.A,{color:"error.main",children:["Error: ",r.error]})]}),r?.success&&(()=>{let b,c=(0,cg.Gt)(N?._meta);if(!c)return null;try{let a=JSON.parse(r.output);b=JSON.stringify(a?.data??a)}catch{b=void 0}return(0,d.jsx)(ch.Ay,{serverName:a,uri:c,toolName:m,toolArgs:JSON.stringify(o),toolResultContent:b})})()]})};var ck=c(88117);let cl=(0,j.h)("frontend/components/mcp/MCPToolManager"),cm=({serverName:a,onClose:b,prefill:c})=>{let{tools:e,isLoading:g,error:h,loadTools:j,retryLoadTools:k,isRetrying:l,retryCount:m,testTool:n}=(0,ck.O)(a),o=async(a,b,c)=>(cl.debug(`Testing tool ${a} with params:`,b),void 0!==c&&cl.debug(`Using timeout: ${c} seconds`),await n(a,b,c));(0,f.useEffect)(()=>{if(a){let b=setInterval(()=>{cl.debug("Periodic tool refresh"),a8.S.clearToolsCache(a),j(!0)},3e4);return()=>clearInterval(b)}},[j,a]);let{getThemeValue:p}=(0,w.Ic)();return h&&(!e||0===e.length)?(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:p("#fef2f2","#3a2222"),borderColor:p("#fecaca","#5a3333"),color:p("#333","#f0f0f0")},children:[(0,d.jsxs)("h3",{className:"text-lg font-semibold mb-4",style:{color:p("#111","#f8f8f8")},children:["Tool Manager - ",a||"No Server Selected"]}),(0,d.jsxs)("div",{className:"text-red-500",children:[(0,d.jsxs)("p",{children:["Error loading tools: ",h]}),(0,d.jsx)("button",{onClick:()=>{a&&a8.S.clearToolsCache(a),k()},className:"mt-2 px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:l,children:l?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.default,{size:"small",color:"white",className:"mr-2"}),"Retrying..."]}):"Retry"}),m>0&&(0,d.jsxs)("p",{className:"text-sm mt-1",children:["Retry attempt: ",m]})]})]}):a?(0,d.jsxs)("div",{className:"mt-8",style:{color:p("#333","#f0f0f0")},children:[(0,d.jsx)(cj,{serverName:a,tools:e,onTestTool:o,onClose:b,prefill:c}),g&&(0,d.jsxs)("div",{className:"mt-4 flex items-center space-x-2 text-blue-500",children:[(0,d.jsx)(i.default,{size:"small",color:"primary"}),(0,d.jsx)("p",{children:"Loading tools..."})]}),h&&e&&e.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-yellow-500",children:[(0,d.jsxs)("p",{children:["Warning: ",h]}),(0,d.jsx)("p",{className:"text-sm",children:"Using cached tools. Some tools may be unavailable."}),(0,d.jsx)("button",{onClick:()=>{a&&a8.S.clearToolsCache(a),k()},className:"mt-1 px-2 py-1 text-xs bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:l,children:l?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.default,{size:"small",color:"white",className:"mr-1"}),(0,d.jsx)("span",{className:"text-xs",children:"Retrying..."})]}):"Retry"}),m>0&&(0,d.jsxs)("p",{className:"text-xs mt-1",children:["Retry attempt: ",m]})]})]}):(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:p("white","#2a2a2a"),borderColor:p("#e5e7eb","#3a3a3a"),color:p("#333","#f0f0f0")},children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",style:{color:p("#111","#f8f8f8")},children:"Tool Manager"}),(0,d.jsx)("p",{style:{color:p("#6b7280","#9ca3af")},children:"Please select a server to view and test tools."})]})},cn=(0,j.h)("frontend/components/mcp/MCPCapabilitiesManager"),co=({serverName:a,show:b="both"})=>{let c="both"===b||"resources"===b,g="both"===b||"prompts"===b,[h,i]=(0,f.useState)([]),[j,m]=(0,f.useState)([]),[n,o]=(0,f.useState)([]),[q,u]=(0,f.useState)(!1),[v,w]=(0,f.useState)(),[x,y]=(0,f.useState)(null),[z,A]=(0,f.useState)(""),[B,C]=(0,f.useState)(!1),[D,E]=(0,f.useState)(),[F,G]=(0,f.useState)({}),H=(0,f.useCallback)(async()=>{if(a){u(!0),w(void 0);try{let[b,d]=await Promise.all([c?a8.S.listServerResources(a):Promise.resolve(null),g?a8.S.listServerPrompts(a):Promise.resolve(null)]);b&&(i(b.resources||[]),m(b.resourceTemplates||[])),d&&o(d.prompts||[]),w(b?.error||d?.error)}catch(a){cn.warn("Failed to load capabilities",a),w(a instanceof Error?a.message:"Failed to load capabilities")}finally{u(!1)}}},[a,c,g]);(0,f.useEffect)(()=>{y(null),A(""),E(void 0),H()},[H]),(0,f.useEffect)(()=>{if(!a||!c)return;let b=setInterval(async()=>{try{let b=(await a8.S.getServerStatus(a)).resourceListVersion??0;a8.S.checkResourceListVersion(a,b)&&(cn.debug(`MCPCapabilitiesManager: resource list changed for ${a} — auto-refreshing`),await H())}catch{}},1e4);return()=>clearInterval(b)},[a,c,H]);let I=async(b,c)=>{y(`Resource: ${c}`),A(""),E(void 0),C(!0);try{let c=await a8.S.readResource(a,b);c.success?A(function(a){let b=a?.contents;return Array.isArray(b)&&0!==b.length?b.map(a=>"string"==typeof a.text?a.text:"string"==typeof a.blob?`[binary ${a.mimeType||"data"}: ${a.blob.length} base64 chars]`:JSON.stringify(a,null,2)).join("\n\n---\n\n"):"(no contents)"}(c.data)):E(c.error||"Failed to read resource")}finally{C(!1)}},J=async b=>{y(`Prompt: ${b.name}`),A(""),E(void 0),C(!0);try{let c=await a8.S.getPrompt(a,b.name,F[b.name]);c.success?A(function(a){let b=a?.messages;return Array.isArray(b)&&0!==b.length?b.map(a=>{let b,c=a.role||"user",d=a.content;return b="string"==typeof d?.text?d.text:d?.type==="resource"?`[embedded resource: ${d.resource?.uri||""}]`:JSON.stringify(d,null,2),`[${c}]
|
|
44
|
-
${b}`}).join("\n\n"):"(no messages)"}(c.data)):E(c.error||"Failed to get prompt")}finally{C(!1)}},K=!q&&!v&&(!c||0===h.length&&0===j.length)&&(!g||0===n.length);return(0,d.jsxs)(l.A,{variant:"outlined",sx:{p:2},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1},children:[(0,d.jsx)(k.A,{variant:"h6",children:"resources"===b?"Resources":"prompts"===b?"Prompts":"Resources & Prompts"}),(0,d.jsx)(t.A,{size:"small",onClick:()=>{a8.S.clearCapabilitiesCache(a),H()},disabled:q,children:"Refresh"})]}),q&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(am.default,{size:18}),(0,d.jsx)(k.A,{variant:"body2",children:"Loading capabilities…"})]}),v&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:2},children:v}),K&&(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{py:1},children:"resources"===b?"This server doesn't publish any resources.":"prompts"===b?"This server doesn't publish any prompts.":"This server doesn't publish any resources or prompts."}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,d.jsxs)(e.default,{sx:{flex:"1 1 360px",minWidth:280},children:[c&&(h.length>0||j.length>0)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",sx:{mt:1},children:"Resources"}),(0,d.jsx)(bR.A,{dense:!0,disablePadding:!0,children:h.map(a=>(0,d.jsxs)(bS.A,{onClick:()=>I(a.uri,a.name||a.uri),children:[(0,d.jsx)(bU.A,{primary:a.name||a.uri,secondary:a.description||a.uri,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}}),a.mimeType&&(0,d.jsx)(ap.A,{size:"small",label:a.mimeType,sx:{ml:1}})]},a.uri))}),j.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{mt:1,display:"block"},children:"Templates (parameterized URIs)"}),(0,d.jsx)(bR.A,{dense:!0,disablePadding:!0,children:j.map(a=>(0,d.jsx)(bU.A,{sx:{pl:2,py:.5},primary:a.name||a.uriTemplate,secondary:a.uriTemplate,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}},a.uriTemplate))})]})]}),g&&n.length>0&&(0,d.jsxs)(d.Fragment,{children:["both"===b&&(0,d.jsx)(b8.A,{sx:{my:1}}),(0,d.jsx)(k.A,{variant:"subtitle2",children:"Prompts"}),(0,d.jsx)(r.A,{spacing:1,sx:{mt:.5},children:n.map(a=>(0,d.jsxs)(e.default,{sx:{border:"1px solid",borderColor:"divider",borderRadius:1,p:1},children:[(0,d.jsx)(k.A,{variant:"body2",sx:{fontWeight:600},children:a.name}),a.description&&(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",children:a.description}),(a.arguments||[]).map(b=>(0,d.jsx)(s.A,{size:"small",fullWidth:!0,margin:"dense",label:`${b.name}${b.required?" *":""}`,placeholder:b.description||"",value:F[a.name]?.[b.name]||"",onChange:c=>((a,b,c)=>{G(d=>({...d,[a]:{...d[a]||{},[b]:c}}))})(a.name,b.name,c.target.value)},b.name)),(0,d.jsx)(t.A,{size:"small",sx:{mt:.5},onClick:()=>J(a),children:"Preview"})]},a.name))})]})]}),x&&(0,d.jsxs)(e.default,{sx:{flex:"1 1 360px",minWidth:280},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:x}),B?(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(am.default,{size:16}),(0,d.jsx)(k.A,{variant:"body2",children:"Loading…"})]}):D?(0,d.jsx)(p.A,{severity:"error",sx:{mt:1},children:D}):(0,d.jsx)(e.default,{component:"pre",sx:{mt:1,p:1,bgcolor:"action.hover",borderRadius:1,maxHeight:360,overflow:"auto",fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:z||"(empty)"})]})]})]})},cp=(0,j.h)("frontend/components/mcp/MCPServerManager/ServerDetailsModal"),cq=({server:a,onClose:b,onSaveEnv:c,onServerRestart:g,toolPrefill:h})=>{let[i,j]=(0,f.useState)("tools");(0,f.useEffect)(()=>{a&&j("tools")},[a?.name]);let l=null!==a,m=a?.name||"",n=async b=>{a&&(cp.debug(`Saving env for ${a.name}`),await c(a.name,b))};return(0,d.jsxs)(bO.A,{open:l,onClose:b,maxWidth:"lg",fullWidth:!0,PaperProps:{sx:{height:"85vh",maxHeight:"85vh"}},children:[(0,d.jsxs)(bP.A,{component:"div",sx:{pb:0},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"baseline",gap:1.5},children:[(0,d.jsx)(k.A,{variant:"h6",children:m}),a&&(0,d.jsx)(k.A,{variant:"body2",sx:{color:(a=>"connected"===a?"success.main":"error"===a?"error.main":"connecting"===a||"initialization"===a?"info.main":"text.secondary")(a.status)},children:a.status})]}),(0,d.jsx)(v.A,{edge:"end",onClick:b,"aria-label":"close",children:(0,d.jsx)(ca.A,{})})]}),(0,d.jsxs)(aJ.A,{value:i,onChange:(a,b)=>j(b),sx:{mt:1},children:[(0,d.jsx)(aK.A,{label:"Tools",value:"tools"}),(0,d.jsx)(aK.A,{label:"Resources",value:"resources"}),(0,d.jsx)(aK.A,{label:"Prompts",value:"prompts"}),(0,d.jsx)(aK.A,{label:"Environment Variables",value:"env"})]})]}),(0,d.jsx)(b8.A,{}),(0,d.jsxs)(bQ.A,{sx:{overflow:"auto"},children:[l&&"tools"===i&&(0,d.jsx)(cm,{serverName:m,prefill:h}),l&&"resources"===i&&(0,d.jsx)(co,{serverName:m,show:"resources"}),l&&"prompts"===i&&(0,d.jsx)(co,{serverName:m,show:"prompts"}),l&&"env"===i&&(0,d.jsx)(e.default,{sx:{mt:1},children:(0,d.jsx)(ao.A,{serverName:m,initialEnv:a?.env||{},onSave:n,onServerRestart:async a=>{await g(a)}})})]})]})},cr=(0,a_.A)((0,d.jsx)("path",{d:"M4 8h4V4H4zm6 12h4v-4h-4zm-6 0h4v-4H4zm0-6h4v-4H4zm6 0h4v-4h-4zm6-10v4h4V4zm-6 4h4V4h-4zm6 6h4v-4h-4zm0 6h4v-4h-4z"}),"Apps"),cs=(0,a_.A)((0,d.jsx)("path",{d:"m22.7 19-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4"}),"Build"),ct=(a,b)=>`${a}\u0000${b}`,cu=a=>{let b=a.replace(/^ui:\/\//i,"").split("/").filter(Boolean).at(-1);if(!b)return a;try{return decodeURIComponent(b).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}catch{return b.replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}},cv=(a,b)=>"string"==typeof a&&a.trim()?a:a instanceof Error&&a.message.trim()?a.message:b,cw=({open:a,onClose:b,onOpenToolTester:c})=>{let[g,h]=(0,f.useState)([]),[i,j]=(0,f.useState)(null),[l,m]=(0,f.useState)(!1),[n,o]=(0,f.useState)(!1),[q,s]=(0,f.useState)(null),u=(0,f.useRef)(0),w=(0,f.useCallback)(async(a=!1)=>{let b=++u.current;j(null),s(null),a?o(!0):m(!0);try{let c=await a8.S.loadServerConfigs();if(b!==u.current)return;if(!Array.isArray(c)){h([]),s(cv(c?.error,"Failed to load MCP server configurations."));return}let d=c.filter(a=>!0!==a.disabled&&!0===a.enableMcpApps),e=await Promise.all(d.map(async b=>{a&&(a8.S.clearCapabilitiesCache(b.name),a8.S.clearToolsCache(b.name));let[c,d]=await Promise.all([a8.S.listServerResources(b.name),a8.S.listServerTools(b.name)]),e=new Map;for(let a of Array.isArray(d?.tools)?d.tools:[]){let b=(0,cg.Gt)(a?._meta);b&&"string"==typeof a?.name&&a.name.trim()&&e.set(b,[...e.get(b)||[],a.name])}if(c?.error&&0===e.size)return{name:b.name,apps:[],error:cv(c.error,"Resource discovery is unavailable.")};let f=new Map;for(let a of Array.isArray(c?.resources)?c.resources:[]){if(!(0,cg.DG)(a?.uri)||!(0,cg.q$)(a?.mimeType))continue;let c="string"==typeof a.title&&a.title.trim()?a.title.trim():"string"==typeof a.name&&a.name.trim()?a.name.trim():a.uri;f.set(a.uri,{serverName:b.name,uri:a.uri,name:c,description:"string"==typeof a.description&&a.description.trim()?a.description.trim():void 0,mimeType:a.mimeType,toolNames:e.get(a.uri)||[],listedResource:!0})}for(let[a,c]of e)f.has(a)||f.set(a,{serverName:b.name,uri:a,name:cu(a),mimeType:"text/html;profile=mcp-app",toolNames:c,listedResource:!1});return{name:b.name,apps:Array.from(f.values())}}));b===u.current&&h(e)}catch(a){b===u.current&&(h([]),s(cv(a,"Failed to discover MCP Apps.")))}finally{b===u.current&&(m(!1),o(!1))}},[]);(0,f.useEffect)(()=>{if(!a){u.current+=1,j(null);return}w(!1)},[w,a]),(0,f.useEffect)(()=>{if(!a)return;let b=a=>{let b=a.detail;if(!b?.serverName)return;let c=g.find(a=>i?.startsWith(`${a.name}\u0000`)),d=b.config?.disabled===!0||b.config?.enableMcpApps===!1;c?.name===b.serverName&&d&&j(null),a8.S.clearCapabilitiesCache(b.serverName),a8.S.clearToolsCache(b.serverName),w(!0)};return window.addEventListener("flujo:mcp-server-config-changed",b),()=>window.removeEventListener("flujo:mcp-server-config-changed",b)},[w,a,i,g]);let x=(0,f.useMemo)(()=>g.flatMap(a=>a.apps),[g]),y=(0,f.useMemo)(()=>x.find(a=>ct(a.serverName,a.uri)===i),[x,i]),z=g.filter(a=>a.error),A=g.length;return(0,d.jsxs)(bO.A,{open:a,onClose:b,fullWidth:!0,maxWidth:"xl","aria-labelledby":"mcp-apps-dashboard-title",children:[(0,d.jsxs)(bP.A,{id:"mcp-apps-dashboard-title",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(cr,{color:"primary"}),"MCP Apps Dashboard",(0,d.jsx)(e.default,{sx:{flex:1}}),(0,d.jsx)(as.A,{title:"Refresh apps",children:(0,d.jsx)("span",{children:(0,d.jsx)(v.A,{"aria-label":"Refresh apps",onClick:()=>void w(!0),disabled:l||n,size:"small",children:n?(0,d.jsx)(am.default,{size:20}):(0,d.jsx)(b5.A,{fontSize:"small"})})})}),(0,d.jsx)(v.A,{"aria-label":"Close MCP Apps Dashboard",onClick:b,size:"small",children:(0,d.jsx)(ca.A,{fontSize:"small"})})]}),(0,d.jsx)(b8.A,{}),(0,d.jsx)(bQ.A,{sx:{p:0,minHeight:{xs:480,md:620}},children:l?(0,d.jsxs)(r.A,{alignItems:"center",justifyContent:"center",spacing:2,sx:{minHeight:420},children:[(0,d.jsx)(am.default,{}),(0,d.jsx)(k.A,{color:"text.secondary",children:"Discovering MCP Apps…"})]}):q?(0,d.jsx)(p.A,{severity:"error",sx:{m:3},children:q}):0===A?(0,d.jsxs)(r.A,{alignItems:"center",justifyContent:"center",spacing:1,sx:{minHeight:420,p:3},children:[(0,d.jsx)(cr,{color:"disabled",sx:{fontSize:48}}),(0,d.jsx)(k.A,{variant:"h6",children:"No MCP Apps-capable servers are enabled"}),(0,d.jsx)(k.A,{color:"text.secondary",textAlign:"center",children:"Enable a server and opt in to MCP Apps from its configuration to discover interactive resources."})]}):(0,d.jsxs)(e.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",md:"minmax(300px, 38%) 1fr"},minHeight:620},children:[(0,d.jsxs)(e.default,{sx:{borderRight:{md:"1px solid"},borderColor:{md:"divider"},p:2,overflow:"auto"},children:[(0,d.jsxs)(k.A,{variant:"subtitle2",color:"text.secondary",sx:{mb:1},children:[x.length," ",1===x.length?"app":"apps"," from ",A," ",1===A?"server":"servers"]}),g.map(a=>(0,d.jsxs)(e.default,{sx:{mb:2.5},children:[(0,d.jsx)(k.A,{variant:"subtitle1",fontWeight:600,sx:{mb:1},children:a.name}),a.error?(0,d.jsxs)(p.A,{severity:"warning",children:[(0,d.jsx)(k.A,{variant:"body2",fontWeight:600,children:"Unavailable or disconnected"}),(0,d.jsx)(k.A,{variant:"body2",children:a.error})]}):0===a.apps.length?(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:"No eligible apps discovered for this server."}):(0,d.jsx)(r.A,{spacing:1,children:a.apps.map(a=>{let b=ct(a.serverName,a.uri);return(0,d.jsx)(bx.A,{variant:"outlined",sx:{borderColor:i===b?"primary.main":"divider"},children:(0,d.jsx)(by.A,{onClick:()=>j(b),"aria-pressed":i===b,children:(0,d.jsxs)(bN.A,{sx:{py:1.5},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:a.name}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",overflowWrap:"anywhere"},children:a.uri}),a.toolNames.length>0&&(0,d.jsx)(ap.A,{icon:(0,d.jsx)(cs,{}),label:`${a.toolNames.length} linked tool${1===a.toolNames.length?"":"s"}`,size:"small",sx:{mt:1}}),!a.listedResource&&(0,d.jsx)(ap.A,{label:"Tool-discovered",size:"small",variant:"outlined",sx:{mt:1,ml:+(a.toolNames.length>0)}})]})})},b)})})]},a.name)),0===x.length&&0===z.length&&(0,d.jsx)(p.A,{severity:"info",children:"No eligible MCP App resources were discovered."})]}),(0,d.jsx)(e.default,{sx:{p:{xs:2,md:3},minWidth:0,overflow:"auto"},children:y?(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"h6",children:y.name}),y.description&&(0,d.jsx)(k.A,{color:"text.secondary",sx:{mt:.5},children:y.description}),(0,d.jsxs)(r.A,{direction:"row",gap:1,flexWrap:"wrap",sx:{mt:1},children:[(0,d.jsx)(ap.A,{label:y.serverName,size:"small"}),(0,d.jsx)(ap.A,{label:y.mimeType,size:"small",variant:"outlined"})]}),y.toolNames.length>0&&(0,d.jsxs)(p.A,{severity:"info",sx:{mt:2},children:[(0,d.jsx)(k.A,{variant:"body2",sx:{mb:1},children:"This app is linked to a tool. Use Tool Tester when it needs invocation arguments or a tool result."}),(0,d.jsx)(r.A,{direction:"row",gap:1,flexWrap:"wrap",children:y.toolNames.map(a=>(0,d.jsxs)(t.A,{size:"small",variant:"outlined",startIcon:(0,d.jsx)(cs,{}),onClick:()=>c(y.serverName,a),children:["Test ",a]},a))})]}),(0,d.jsx)(ch.Ay,{serverName:y.serverName,uri:y.uri},ct(y.serverName,y.uri))]}):(0,d.jsxs)(r.A,{alignItems:"center",justifyContent:"center",spacing:1,sx:{minHeight:360},children:[(0,d.jsx)(cr,{color:"disabled",sx:{fontSize:44}}),(0,d.jsx)(k.A,{variant:"h6",children:"Select an app to preview"}),(0,d.jsx)(k.A,{color:"text.secondary",textAlign:"center",children:"Apps run through FLUJO's existing isolated MCP App sandbox."})]})})]})}),(0,d.jsx)(b8.A,{}),(0,d.jsx)(bV.A,{children:(0,d.jsx)(t.A,{onClick:b,children:"Close"})})]})};var cx=c(53455),cy=c(63650),cz=c(44920),cA=c(7118),cB=c(7503);let cC=(0,a_.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zm0-10h4v6h6v-6h4l-7-7z"}),"Upload");var cD=c(27409),cE=c(63757),cF=c(11402),cG=c(8165),cH=c(49066);let cI=(0,a_.A)((0,d.jsx)("path",{d:"M6 6h12v12H6z"}),"Stop"),cJ=(0,a_.A)((0,d.jsx)("path",{d:"M3 5h2V3c-1.1 0-2 .9-2 2m0 8h2v-2H3zm4 8h2v-2H7zM3 9h2V7H3zm10-6h-2v2h2zm6 0v2h2c0-1.1-.9-2-2-2M5 21v-2H3c0 1.1.9 2 2 2m-2-4h2v-2H3zM9 3H7v2h2zm2 18h2v-2h-2zm8-8h2v-2h-2zm0 8c1.1 0 2-.9 2-2h-2zm0-12h2V7h-2zm0 8h2v-2h-2zm-4 4h2v-2h-2zm0-16h2V3h-2zM7 17h10V7H7zm2-8h6v6H9z"}),"SelectAll");var cK=c(9863),cL=c(81310),cM=c(18467),cN=c(58585),cO=c(59737),cP=c(58156),cQ=c(7329),cR=c(61160),cS=c(2560),cT=c(61560),cU=c(49351);let cV=(0,j.h)("frontend/components/mcp/MCPServerManager"),cW=({onServerModalToggle:a})=>{let{servers:b,isLoading:g,loadError:h,connectingServers:i,toggleServer:j,retryServer:m,deleteServer:n,addServer:p,updateServer:q,setServerFolder:r,setServerFavorite:w,saveEnv:x}=(0,cy.v)(),[y,z]=(0,f.useState)(!1),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(""),[G,H]=(0,f.useState)(null),[I,J]=(0,f.useState)(!1),[K,L]=(0,f.useState)("claude"),[M,N]=(0,f.useState)(null),[O,P]=(0,f.useState)(null),[Q,R]=(0,f.useState)(null),[S,T]=(0,f.useState)(),[U,V]=(0,f.useState)(!1),[W,X]=(0,f.useState)({}),Y=(0,f.useMemo)(()=>Array.from(new Set(b.filter(a=>"stdio"===a.transport&&a.rootPath).map(a=>a.rootPath))).join("|"),[b]);(0,f.useEffect)(()=>{let a=Y.split("|").filter(Boolean);if(0===a.length)return;let b=!1;return(0,cx.M8)(a).then(a=>{b||X(b=>({...b,...a}))}).catch(a=>cV.warn("Server update check failed",a)),()=>{b=!0}},[Y]);let Z=async(a,b)=>{cV.info(`Server ${a} updated from git, refreshing update status`);let c=Y.split("|").filter(Boolean),d=await (0,cx.M8)(c.length>0?c:[b],!0);X(a=>({...a,...d}))},$=a=>{let c=b.find(b=>b.name===a);if(!c||c.disabled)return void cV.debug(`Not opening details for ${a} (missing or disabled)`);R(a)};(0,f.useEffect)(()=>{},[b]);let _=async a=>{await j(a,!1),await j(a,!0)},aa=Q&&b.find(a=>a.name===Q)||null,[ab,ac]=(0,f.useState)(""),[ad,ae]=(0,cS.Xk)("flujo-ui:mcp:sort","name-asc"),[af,ag]=(0,cS.Xk)("flujo-ui:mcp:filter","all"),[ah,aj]=(0,f.useState)(null),[ak,al]=(0,cS.Xk)("flujo-ui:mcp:group",cQ.FM),[am,an]=(0,f.useState)(null),[ao,ap]=(0,cS.Xk)("flujo-ui:mcp:collapsed",[]),aq=(0,f.useMemo)(()=>new Set(ao),[ao]),[ar,at]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(new Set),[ay,az]=(0,f.useState)({open:!1,action:null}),aA=(0,ai.A)(),aB=async(a,b)=>{cV.debug(`Toggling server ${a} to ${b?"enabled":"disabled"}`),await j(a,b)},aC=async a=>{cV.debug(`Retrying pulling server status for server: ${a}`),await m(a)},aD=async a=>{cV.debug(`Deleting server: ${a}`),await n(a)},aE=b=>{cV.debug(`Editing server: ${b.name}`),B(b),z(!0),a?.(!0)},aF=async b=>{cV.debug(`Adding server: ${b.name}`),await p(b),z(!1),B(null),a?.(!1)},aG=async b=>{let c=A?.name;cV.debug(`Updating server: ${c??b.name}`+(c&&c!==b.name?` -> ${b.name}`:"")),await q(b,c),z(!1),B(null),a?.(!1)},aH=async b=>{cV.debug(`Save & Authenticate for server: ${b.name}`);let d=()=>{z(!1),B(null),a?.(!1)};try{A?await q(b,A.name):await p(b);let a=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:b.name})}),e=await a.json();if(!a.ok){if(e.needsClientCredentials)return{status:"needs_client_credentials",error:e.error};return{status:"error",error:e.error||"Failed to start OAuth authentication."}}if(e.alreadyAuthorized||!e.authorizationUrl)return d(),await m(b.name),{status:"authorized"};let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));return await f({url:e.authorizationUrl,windowName:`oauth_${b.name}`}),d(),await m(b.name),{status:"authorized"}}catch(a){return cV.warn(`Save & Authenticate failed for ${b.name}:`,a),{status:"error",error:a instanceof Error?a.message:"Unknown error"}}},aI=async()=>{let a=(0,cz.Kt)(K);cV.debug(`Importing server configurations from ${a.label} format`),H(null);let{servers:c,errors:d}=a.import(E);if(0===c.length)return void H(d.length>0?d.join("\n"):"No servers found in the pasted configuration.");J(!0);let e=new Set(b.map(a=>a.name)),f=0,g=0,h=[];for(let a of c)try{e.has(a.name)?(await q(a),g++):(await p(a),e.add(a.name),f++)}catch(b){h.push(`"${a.name}": ${b.message||"failed to import"}`)}J(!1);let i=[...d,...h];if(0===f&&0===g)return void H(i.length>0?i.join("\n"):"No servers could be imported.");cV.info(`Imported MCP servers: ${f} added, ${g} updated`),i.length>0?H(`Imported ${f} added / ${g} updated. Some entries were skipped:
|
|
45
|
-
${i.join("\n")}`):(D(!1),F(""))},aJ=()=>{D(!1),F(""),H(null)},aK=(0,f.useMemo)(()=>{cV.debug("Filtering and sorting servers",{searchTerm:ab,sortOption:ad,filterOption:af});let a=b;if(""!==ab.trim()){let c=ab.toLowerCase();a=b.filter(a=>a.name.toLowerCase().includes(c)||a.rootPath?.toLowerCase().includes(c))}return"all"!==af&&(a=a.filter(a=>{switch(af){case"connected":return"connected"===a.status;case"disconnected":return"disconnected"===a.status;case"error":return"error"===a.status;case"enabled":return!a.disabled;case"disabled":return a.disabled;case"stdio":case"websocket":case"sse":case"streamable":return a.transport===af;default:return!0}})),(0,cR.oO)(a,ad)},[b,ab,ad,af]),{ref:aL,showBackToTop:aM,scrollToTop:aN}=(0,cT.R)("flujo-ui:scroll:mcp",{deps:[g,aK.length]}),aO=(0,f.useMemo)(()=>(0,cQ.yF)(b,a=>a.folder),[b]),aP=(0,f.useMemo)(()=>"folder"===ak?(0,cQ.Je)(aK,a=>a.folder):"sort"===ak?(0,cQ.Az)(aK,a=>(0,cR.mO)(a,ad)):[],[ak,aK,ad]),aQ=a=>{al(a),an(null)},aR=async()=>{cV.debug("Bulk enabling servers",{selectedServers:Array.from(av)});let a=Array.from(av).map(a=>aB(a,!0));await Promise.all(a),aw(new Set),az({open:!1,action:null})},aS=async()=>{cV.debug("Bulk disabling servers",{selectedServers:Array.from(av)});let a=Array.from(av).map(a=>aB(a,!1));await Promise.all(a),aw(new Set),az({open:!1,action:null})},aT=(a,b)=>{let c=new Set(av);b?c.add(a):c.delete(a),aw(c)},aU=()=>{aj(null)},aV=a=>{ae(a),aU()},aW=a=>(0,d.jsx)(o,{servers:a.map(a=>({...a,tools:[]})),isLoading:g,loadError:h,onServerSelect:$,onServerToggle:aB,onServerRetry:aC,onServerDelete:aD,onServerEdit:aE,selectionMode:ar,selectedServers:av,onServerSelectionChange:aT,updates:W,onServerUpdated:Z,folders:aO,onServerSetFolder:r,onServerToggleFavorite:w});return(0,d.jsxs)(e.default,{sx:{color:"text.primary"},children:[(0,d.jsx)(cP.default,{eyebrow:"Connect",title:"MCP servers",description:"Equip your agents with secure tools, resources, and live capabilities.",icon:cN.A,actions:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{variant:"outlined",color:"primary",onClick:a=>P(a.currentTarget),startIcon:(0,d.jsx)(cC,{}),endIcon:(0,d.jsx)(cD.A,{}),sx:{textTransform:"none",fontWeight:500},children:"Import"}),(0,d.jsx)(cA.A,{anchorEl:O,open:!!O,onClose:()=>P(null),children:cz._i.map(a=>(0,d.jsx)(a$.A,{onClick:()=>{L(a.id),F(""),H(null),P(null),D(!0)},children:(0,d.jsx)(bU.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(t.A,{variant:"contained",color:"primary",onClick:a=>N(a.currentTarget),startIcon:(0,d.jsx)(b2.A,{}),endIcon:(0,d.jsx)(cD.A,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:"Export"}),(0,d.jsx)(cA.A,{anchorEl:M,open:!!M,onClose:()=>N(null),children:cz._i.map(a=>(0,d.jsx)(a$.A,{onClick:()=>(a=>{let c=(0,cz.Kt)(a);cV.debug(`Exporting server configurations in ${c.label} format`),N(null);let d=new Blob([JSON.stringify(c.export(b,{proxyBaseUrl:""}),null,2)],{type:"application/json"}),e=URL.createObjectURL(d),f=document.createElement("a");f.href=e,f.download=c.fileName,document.body.appendChild(f),f.click(),document.body.removeChild(f),URL.revokeObjectURL(e)})(a.id),children:(0,d.jsx)(bU.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(t.A,{variant:"contained",color:"primary","data-tour":"add-mcp-server",onClick:()=>{B(null),z(!0),a?.(!0)},startIcon:(0,d.jsx)(au.A,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:"Add Server"})]})}),(0,d.jsx)(l.A,{elevation:0,variant:"outlined",sx:{mx:{xs:2,md:3,lg:4},mt:3,mb:1.5,p:1.2,borderRadius:3},children:(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(s.A,{placeholder:"Search servers...",variant:"outlined",size:"small",fullWidth:!0,value:ab,onChange:a=>ac(a.target.value),InputProps:{startAdornment:(0,d.jsx)(u.A,{position:"start",children:(0,d.jsx)(bW.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1,alignItems:"center",flexWrap:"wrap"},children:[(0,d.jsx)(t.A,{size:"small",variant:ar?"contained":"outlined",onClick:()=>{at(!ar),ar&&aw(new Set)},startIcon:(0,d.jsx)(cJ,{}),children:"Select"}),ar&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{size:"small",onClick:()=>{av.size===aK.length?aw(new Set):aw(new Set(aK.map(a=>a.name)))},disabled:0===aK.length,children:av.size===aK.length&&av.size>0?"Deselect All":"Select All"}),av.size>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(t.A,{size:"small",variant:"contained",color:"success",onClick:()=>az({open:!0,action:"enable"}),startIcon:(0,d.jsx)(cH.A,{}),children:["Enable (",av.size,")"]}),(0,d.jsxs)(t.A,{size:"small",variant:"contained",color:"error",onClick:()=>az({open:!0,action:"disable"}),startIcon:(0,d.jsx)(cI,{}),children:["Disable (",av.size,")"]})]})]}),(0,d.jsx)(as.A,{title:"Open MCP Apps Dashboard",children:(0,d.jsx)(v.A,{size:"small","aria-label":"Open MCP Apps Dashboard",onClick:()=>V(!0),color:U?"primary":"default",sx:{border:`1px solid ${aA.palette.divider}`,backgroundColor:aA.palette.background.default},children:(0,d.jsx)(cr,{fontSize:"small"})})}),(0,d.jsx)(v.A,{size:"small",onClick:a=>an(a.currentTarget),color:"none"!==ak?"primary":"default",sx:{border:`1px solid ${aA.palette.divider}`,backgroundColor:aA.palette.background.default},title:"Group cards",children:(0,d.jsx)(cK.A,{fontSize:"small"})}),(0,d.jsx)(v.A,{size:"small",onClick:a=>{aj(a.currentTarget)},sx:{border:`1px solid ${aA.palette.divider}`,backgroundColor:aA.palette.background.default},children:(0,d.jsx)(cE.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:3},children:[(0,d.jsxs)(k.A,{variant:"body2",color:"textSecondary",children:[aK.length," of ",b.length," servers",ab&&` matching "${ab}"`,"all"!==af&&` (filtered by ${af})`]}),(0,d.jsxs)(k.A,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===ad?"Name (A-Z)":"name-desc"===ad?"Name (Z-A)":"status-connected"===ad?"Connected first":"status-disconnected"===ad?"Disconnected first":"Transport type"]})]}),(0,d.jsx)(e.default,{ref:aL,sx:{px:2,flex:1,overflow:"auto"},children:"none"===ak||g||h||0===aK.length?aW(aK):aP.map(a=>(0,d.jsx)(cO.A,{label:a.label,count:a.items.length,expanded:!aq.has(a.key),onToggle:()=>(a=>{ap(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])})(a.key),showFolderIcon:"folder"===ak,children:aW(a.items)},a.key))}),(0,d.jsxs)(cA.A,{anchorEl:am,open:!!am,onClose:()=>an(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(a$.A,{selected:"none"===ak,onClick:()=>aQ("none"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cL.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"No grouping"})]}),(0,d.jsxs)(a$.A,{selected:"folder"===ak,onClick:()=>aQ("folder"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cM.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"By folder"})]}),(0,d.jsxs)(a$.A,{selected:"sort"===ak,onClick:()=>aQ("sort"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cK.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(cA.A,{anchorEl:ah,open:!!ah,onClose:aU,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(a$.A,{onClick:()=>aV("name-asc"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cF.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(a$.A,{onClick:()=>aV("name-desc"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cF.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(bU.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(b8.A,{}),(0,d.jsxs)(a$.A,{onClick:()=>aV("status-connected"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(cG.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"Connected first"})]}),(0,d.jsxs)(a$.A,{onClick:()=>aV("status-disconnected"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(ax.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"Disconnected first"})]}),(0,d.jsx)(b8.A,{}),(0,d.jsxs)(a$.A,{onClick:()=>aV("transport"),children:[(0,d.jsx)(bT.A,{children:(0,d.jsx)(bZ.A,{fontSize:"small"})}),(0,d.jsx)(bU.A,{primary:"Transport type"})]})]}),(0,d.jsxs)(bO.A,{open:ay.open,onClose:()=>az({open:!1,action:null}),children:[(0,d.jsx)(bP.A,{children:"enable"===ay.action?"Enable Servers":"Disable Servers"}),(0,d.jsxs)(bQ.A,{children:[(0,d.jsxs)(cB.A,{children:["Are you sure you want to ",ay.action," ",av.size," server",av.size>1?"s":"","?"]}),(0,d.jsx)(e.default,{sx:{mt:2},children:Array.from(av).map(a=>(0,d.jsxs)(k.A,{variant:"body2",sx:{ml:2},children:["• ",a]},a))})]}),(0,d.jsxs)(bV.A,{children:[(0,d.jsx)(t.A,{onClick:()=>az({open:!1,action:null}),children:"Cancel"}),(0,d.jsx)(t.A,{onClick:"enable"===ay.action?aR:aS,variant:"contained",color:"enable"===ay.action?"success":"error",children:"enable"===ay.action?"Enable":"Disable"})]})]}),(0,d.jsxs)(bO.A,{open:C,onClose:aJ,maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(bP.A,{children:["Import MCP Servers — ",(0,cz.Kt)(K).label," format"]}),(0,d.jsxs)(bQ.A,{children:[(0,d.jsxs)(cB.A,{sx:{mb:2},children:["Paste a ",(0,cz.Kt)(K).label,"-style MCP configuration (the"," ",(0,d.jsx)("code",{children:'{ "mcpServers": { ... } }'})," JSON). FLUJO adds each server, preserving commands, args, environment variables, URLs and custom headers. A server whose name already exists is updated."]}),(0,d.jsx)(s.A,{multiline:!0,minRows:10,maxRows:20,fullWidth:!0,value:E,onChange:a=>{F(a.target.value),G&&H(null)},placeholder:'{\n "mcpServers": {\n "my-server": {\n "command": "npx",\n "args": ["-y", "my-mcp-server"],\n "env": { "API_KEY": "..." }\n }\n }\n}',variant:"outlined",spellCheck:!1,InputProps:{sx:{fontFamily:"monospace",fontSize:"0.85rem"}},disabled:I}),G&&(0,d.jsx)(cB.A,{component:"pre",sx:{mt:2,color:"error.main",whiteSpace:"pre-wrap",fontSize:"0.85rem"},children:G})]}),(0,d.jsxs)(bV.A,{children:[(0,d.jsx)(t.A,{onClick:aJ,disabled:I,children:"Cancel"}),(0,d.jsx)(t.A,{onClick:aI,variant:"contained",color:"primary",disabled:I||""===E.trim(),startIcon:(0,d.jsx)(cC,{}),children:I?"Importing...":"Import"})]})]}),(0,d.jsx)(cb,{isOpen:y,onAdd:aF,onClose:()=>{z(!1),B(null),a?.(!1)},initialConfig:A,onUpdate:aG,onRestartAfterUpdate:aC,onSaveAndAuthenticate:aH}),(0,d.jsx)(cq,{server:aa?{name:aa.name,status:aa.status,env:aa.env}:null,onClose:()=>{R(null),T(void 0),Q&&m(Q)},onSaveEnv:x,onServerRestart:_,toolPrefill:S}),(0,d.jsx)(cw,{open:U,onClose:()=>V(!1),onOpenToolTester:(a,b)=>{V(!1),T({toolName:b,arguments:{}}),R(a)}}),(0,d.jsx)(cU.A,{show:aM,onClick:aN})]})},cX=()=>(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(cW,{})}),cY=(0,j.h)("app/mcp/page");function cZ(){return cY.debug("Rendering MCPPage"),(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(cX,{})})}},32939:(a,b,c)=>{Promise.resolve().then(c.bind(c,29866))},33253:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},51016:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Moe\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\mcp\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx","default")},55511:a=>{"use strict";a.exports=require("crypto")},58585:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M8.4 18.2c.38.5.6 1.12.6 1.8 0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3c.44 0 .85.09 1.23.26l1.41-1.77c-.92-1.03-1.29-2.39-1.09-3.69l-2.03-.68c-.54.83-1.46 1.38-2.52 1.38-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3c0 .07 0 .14-.01.21l2.03.68c.64-1.21 1.82-2.09 3.22-2.32V5.91C9.96 5.57 9 4.4 9 3c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.4-.96 2.57-2.25 2.91v2.16c1.4.23 2.58 1.11 3.22 2.32L18 9.71V9.5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3c-1.06 0-1.98-.55-2.52-1.37l-2.03.68c.2 1.29-.16 2.65-1.09 3.69l1.41 1.77Q17.34 17 18 17c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3c0-.68.22-1.3.6-1.8l-1.41-1.77c-1.35.75-3.01.76-4.37 0z"}),"HubRounded")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},63757:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z"}),"Sort")},65343:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error")},72691:(a,b,c)=>{Promise.resolve().then(c.bind(c,51016))},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},81310:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m19.81 14.99 1.19-.92-1.43-1.43-1.19.92zm-.45-4.72L21 9l-9-7-2.91 2.27 7.87 7.88zM3.27 1 2 2.27l4.22 4.22L3 9l1.63 1.27L12 16l2.1-1.63 1.43 1.43L12 18.54l-7.37-5.73L3 14.07l9 7 4.95-3.85L20.73 21 22 19.73z"}),"LayersClear")},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},86971:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["mcp",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,51016)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/mcp/page",pathname:"/mcp",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/mcp/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
46
|
-
|
|
5
|
+
`),console.log("DEBUG - Building server:",a.name);let j=a.rootPath||`mcp-servers/${a.name}`,k=!1,l=await (0,bd.c)(j,b,a=>{k=!0,g(b=>b+a)},i);k||g(a=>a+(l.output||i("mcp.local.console.noCommandOutput"))),l.success?(h(!0),d({type:"success",text:i("mcp.local.messages.buildSuccess")})):d({type:"error",text:i("mcp.local.messages.buildFailed")}),c(!1)},bl=async(a,b,c,d,e,f,g,h,i,j,k,l=bf)=>{if(k?.(!1),!a.name)return void h({type:"error",text:l("mcp.local.messages.serverNameFirst")});if("stdio"===a.transport&&!a.command)return void h({type:"error",text:l("mcp.local.run.enterCommand")});if("websocket"===a.transport&&!b)return void h({type:"error",text:l("mcp.local.run.validWebsocket")});if(("sse"===a.transport||"streamable"===a.transport)&&!c)return void h({type:"error",text:l("mcp.local.run.validServer")});d(!0),e(l("mcp.local.console.testTitle")),f(`${l("mcp.local.messages.testing")}
|
|
6
|
+
`),g(!0),h({type:"success",text:l("mcp.local.messages.testing")});let m=a=>{"stderr"===a.type||"stdout"===a.type?f(b=>b+a.data):"status"===a.type&&a.message&&f(b=>b+a.message+"\n")};if("sse"===a.transport||"streamable"===a.transport){try{f(a=>a+`${l("mcp.local.console.attempting",{url:c})}
|
|
7
|
+
`);let b={...a,serverUrl:c},d=Object.keys(a.headers||{}).length;d>0&&f(a=>a+`${l("mcp.local.console.headerCount",{count:d})}
|
|
8
|
+
`);let e=await be.S.testConnectionStreaming(b,m,j);if(e.success){i(!0);let a=e.data?.toolCount;h({type:"success",text:l("mcp.local.messages.testSuccessReachable")}),f(a=>a+`${l("mcp.local.console.handshake")}
|
|
9
|
+
`),"number"==typeof a&&f(b=>b+`${l("mcp.local.console.toolsFound",{count:a})}
|
|
10
|
+
`),f(a=>a+`
|
|
11
|
+
✅ ${l("mcp.local.console.passed")}
|
|
12
|
+
`)}else e.requiresAuthentication?(f(a=>a+`${l("mcp.local.console.authRequired")}
|
|
13
|
+
`),e.error&&f(a=>a+`${l("mcp.local.console.details",{details:e.error??""})}
|
|
14
|
+
`),e.oauthCapable&&"streamable"===a.transport?(k?.(!0),h({type:"warning",text:l("mcp.local.messages.oauthReachable")}),f(a=>a+`
|
|
15
|
+
🔑 ${l("mcp.local.console.oauthAction")}
|
|
16
|
+
`)):(h({type:"warning",text:l("mcp.local.messages.authReachable")}),f(a=>a+`
|
|
17
|
+
⚠️ ${l("mcp.local.console.authHeaders")}
|
|
18
|
+
`))):(h({type:"error",text:l("mcp.local.messages.testFailed")}),f(a=>a+`${l("mcp.local.console.failed")}
|
|
19
|
+
`),f(a=>a+`${l("mcp.local.console.details",{details:e.error||l("mcp.server.unknownError")})}
|
|
20
|
+
`),f(a=>a+`
|
|
21
|
+
❌ ${l("mcp.local.messages.testFailed")}
|
|
22
|
+
`))}catch(a){console.error("Error testing connection:",a),f(b=>b+`
|
|
23
|
+
${l("mcp.local.console.testError",{error:a.message||l("mcp.server.unknownError")})}
|
|
24
|
+
`),h({type:"error",text:l("mcp.local.messages.testError")})}finally{d(!1)}return}if("websocket"===a.transport){try{f(a=>a+`${l("mcp.local.console.attempting",{url:b})}
|
|
25
|
+
`);let c={...a,websocketUrl:b},d=await be.S.testConnectionStreaming(c,m);if(d.success){i(!0);let a=d.data?.toolCount;h({type:"success",text:l("mcp.local.messages.testSuccessHandshake")}),f(a=>a+`${l("mcp.local.console.handshake")}
|
|
26
|
+
`),"number"==typeof a&&f(b=>b+`${l("mcp.local.console.toolsFound",{count:a})}
|
|
27
|
+
`),f(a=>a+`
|
|
28
|
+
✅ ${l("mcp.local.console.passed")}
|
|
29
|
+
`)}else d.requiresAuthentication?(h({type:"warning",text:l("mcp.local.messages.authReachable")}),f(a=>a+`${l("mcp.local.console.authRequired")}
|
|
30
|
+
`),d.error&&f(a=>a+`${l("mcp.local.console.details",{details:d.error??""})}
|
|
31
|
+
`),f(a=>a+`
|
|
32
|
+
⚠️ ${l("mcp.local.console.authCredentials")}
|
|
33
|
+
`)):(h({type:"error",text:l("mcp.local.messages.testFailed")}),f(a=>a+`${l("mcp.local.console.failed")}
|
|
34
|
+
`),f(a=>a+`${l("mcp.local.console.details",{details:d.error||l("mcp.server.unknownError")})}
|
|
35
|
+
`),f(a=>a+`
|
|
36
|
+
❌ ${l("mcp.local.messages.testFailed")}
|
|
37
|
+
`))}catch(a){console.error("Error testing WebSocket connection:",a),f(b=>b+`
|
|
38
|
+
${l("mcp.local.console.testError",{error:a.message||l("mcp.server.unknownError")})}
|
|
39
|
+
`),h({type:"error",text:l("mcp.local.messages.testError")})}finally{d(!1)}return}try{if("stdio"===a.transport){let b=(a.args||[]).join(" ");if(f(c=>c+`${l("mcp.local.console.launching",{command:`${a.command}${b?" "+b:""}`})}
|
|
40
|
+
`),aX(a)){let b=Math.round((aX(a)?9e4:15e3)/1e3);f(a=>a+`${l("mcp.local.console.runnerWait",{seconds:b})}
|
|
41
|
+
`)}}let b=await be.S.testConnectionStreaming(a,m);if(b.success){i(!0);let a=b.data?.toolCount;h({type:"success",text:l("mcp.local.messages.testSuccessStarted")}),f(a=>a+`${l("mcp.local.console.handshake")}
|
|
42
|
+
`),"number"==typeof a&&f(b=>b+`${l("mcp.local.console.toolsFound",{count:a})}
|
|
43
|
+
`),f(a=>a+`
|
|
44
|
+
✅ ${l("mcp.local.console.passed")}
|
|
45
|
+
`)}else b.requiresAuthentication?(h({type:"warning",text:l("mcp.local.messages.authStarted")}),f(a=>a+`${l("mcp.local.console.authRequired")}
|
|
46
|
+
`),b.error&&f(a=>a+`${l("mcp.local.console.details",{details:b.error??""})}
|
|
47
|
+
`),f(a=>a+`
|
|
48
|
+
⚠️ ${l("mcp.local.console.authEnvHeaders")}
|
|
49
|
+
`)):(h({type:"error",text:l("mcp.local.messages.testFailed")}),f(a=>a+`${l("mcp.local.console.failed")}
|
|
50
|
+
`),f(a=>a+`${l("mcp.local.console.details",{details:b.error||l("mcp.server.unknownError")})}
|
|
51
|
+
`),f(a=>a+`
|
|
52
|
+
❌ ${l("mcp.local.messages.testFailed")}
|
|
53
|
+
`))}catch(a){console.error("Error testing stdio connection:",a),f(b=>b+`
|
|
54
|
+
${l("mcp.local.console.testError",{error:a.message||l("mcp.server.unknownError")})}
|
|
55
|
+
`),h({type:"error",text:l("mcp.local.messages.testError")})}finally{d(!1)}};var bm=c(61628),bn=c(19787),bo=c(95803),bp=c(17332);let bq=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,autoTestRun:h,onSaveAndAuthenticate:i})=>{let{t:j}=(0,n.s9)(),{localConfig:l,setLocalConfig:o,websocketUrl:p,setWebsocketUrl:r,serverUrl:t,setServerUrl:v,buildCommand:w,setBuildCommand:x,installCommand:y,setInstallCommand:z,message:A,setMessage:B,buildMessage:C,setBuildMessage:D,isBuilding:E,setIsBuilding:F,isInstalling:G,setIsInstalling:H,buildCompleted:I,setBuildCompleted:J,installCompleted:K,setInstallCompleted:L,isParsingReadme:M,setIsParsingReadme:N,isParsingEnv:O,setIsParsingEnv:P,isRunning:Q,setIsRunning:R,runCompleted:S,setRunCompleted:T,expandedSections:U,setExpandedSections:V,handleTransportChange:W,handleArgChange:X,addArgField:Y,removeArgField:Z,handleEnvChange:$}=(({initialConfig:a,isOpen:b=!0})=>{let{t:c}=(0,n.s9)(),[d,e]=(0,f.useState)({define:!0,build:!0,run:!0}),[g,h]=(0,f.useState)({name:"",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:"",transport:"stdio",_buildCommand:"",_installCommand:""}),[i,j]=(0,f.useState)(""),[k,l]=(0,f.useState)(""),[m,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(""),[r,s]=(0,f.useState)(null),[t,u]=(0,f.useState)(null),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(!1),[z,A]=(0,f.useState)(!1),[B,C]=(0,f.useState)(!1),[D,E]=(0,f.useState)(!1),[F,G]=(0,f.useState)(!1),[H,I]=(0,f.useState)(""),[J,K]=(0,f.useState)(!1),[L,M]=(0,f.useState)(!1),[N,O]=(0,f.useState)(!1),[P,Q]=(0,f.useState)(()=>c("mcp.local.console.output"));return(0,f.useEffect)(()=>{if(b)if(a){let b=a.rootPath||"";h({...a,rootPath:b}),o(a._buildCommand||""),q(a._installCommand||""),"websocket"===a.transport?(j(a.websocketUrl||""),l("")):"sse"===a.transport||"streamable"===a.transport?(l(a.serverUrl||""),j("")):(j(""),l(""))}else h({name:"",command:"",args:[],env:{},disabled:!1,autoApprove:[],rootPath:"",transport:"stdio",_buildCommand:"",_installCommand:""}),o(""),q(""),j(""),s(null),u(null),w(!1),y(!1),A(!1),C(!1),E(!1),G(!1),I(""),K(!1),M(!1),O(!1),Q(c("mcp.local.console.output")),e({define:!0,build:!0,run:!0})},[b,a,c]),{localConfig:g,setLocalConfig:h,websocketUrl:i,setWebsocketUrl:j,serverUrl:k,setServerUrl:l,buildCommand:m,setBuildCommand:o,installCommand:p,setInstallCommand:q,message:r,setMessage:s,buildMessage:t,setBuildMessage:u,isBuilding:v,setIsBuilding:w,isInstalling:x,setIsInstalling:y,buildCompleted:z,setBuildCompleted:A,installCompleted:B,setInstallCompleted:C,isParsingReadme:D,setIsParsingReadme:E,isParsingEnv:F,setIsParsingEnv:G,consoleOutput:H,setConsoleOutput:I,isConsoleVisible:J,setIsConsoleVisible:K,isRunning:L,setIsRunning:M,runCompleted:N,setRunCompleted:O,consoleTitle:P,setConsoleTitle:Q,expandedSections:d,setExpandedSections:e,handleTransportChange:a=>{"websocket"===a?h(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"websocket",websocketUrl:i})):"sse"===a?h(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"sse",serverUrl:k,headers:a.headers||{}})):"streamable"===a?h(a=>({name:a.name,disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"streamable",serverUrl:k,headers:a.headers||{}})):h(a=>({name:a.name,command:"stdio"===a.transport?a.command:"",args:"stdio"===a.transport?a.args:[],disabled:a.disabled,autoApprove:a.autoApprove,rootPath:a.rootPath,env:a.env,_buildCommand:a._buildCommand,_installCommand:a._installCommand,roots:a.roots,exposeAsMcpServer:a.exposeAsMcpServer,sampling:a.sampling,transport:"stdio"}))},handleArgChange:(a,b)=>{"stdio"===g.transport&&h(c=>"stdio"===c.transport&&c.args?{...c,args:c.args.map((c,d)=>d===a?b:c)}:c)},addArgField:()=>{"stdio"===g.transport&&h(a=>{if("stdio"===a.transport){let b=a.args||[];return{...a,args:[...b,""]}}return a})},removeArgField:a=>{"stdio"===g.transport&&h(b=>"stdio"===b.transport&&b.args?{...b,args:b.args.filter((b,c)=>c!==a)}:b)},handleEnvChange:a=>{h(b=>{let c={...b,env:a};return"stdio"===b.transport||"websocket"===b.transport?c:b})}}})({initialConfig:a,isOpen:!0});(0,f.useEffect)(()=>{a&&a.name&&a.rootPath&&"stdio"===a.transport&&(!a.command||""===a.command)&&(!a._buildCommand||""===a._buildCommand)&&(!a._installCommand||""===a._installCommand)&&(B({type:"warning",text:j("mcp.local.detectionFailed")}),V({define:!0,build:!0,run:!0}))},[a,V,B,j]);let[_,aa]=(0,f.useState)(!1),[ab,ac]=(0,f.useState)(null),ad=async()=>{aa(!0)},ae=async a=>{ac(a)},af=async()=>{await bh(l,o,B,x,z,r,p,j)},ag=async()=>{await bi(l,o,B,N,x,z,r,p,j)},ah=async()=>{await bj(l,y,H,D,aw,ay,aB,L,j)},ai=async()=>{await bk(l,w,F,D,aw,ay,aB,J,j)},[aj,ak]=(0,f.useState)(!1),[al,am]=(0,f.useState)(!1),an=async()=>{await bl(l,p,t,R,aw,aB,ay,B,T,a?.name,ak,j)},ar=async()=>{if(!i)return;if(!l.name||!t)return void B({type:"error",text:j("mcp.local.auth.missingDetails")});let a=bg(l,p,t,w,y);am(!0),B({type:"success",text:j("mcp.local.auth.starting",{server:a.name})});try{let b=await i(a);"needs_client_credentials"===b.status?B({type:"warning",text:b.error||j("mcp.local.auth.credentialsRequired")}):"error"===b.status&&B({type:"error",text:b.error||j("mcp.local.auth.failed")})}catch(a){B({type:"error",text:j("mcp.local.auth.failedWithError",{error:a instanceof Error?a.message:j("mcp.server.unknownError")})})}finally{am(!1)}},{consoleOutput:at,isConsoleVisible:au,consoleTitle:av,setConsoleTitle:aw,toggleConsoleVisibility:ax,setIsConsoleVisible:ay,appendToConsole:az,clearConsole:aA,updateConsole:aB}=ap(),aC=(0,f.useRef)(!1);(0,f.useEffect)(()=>{h&&!aC.current&&a?.name&&l.name===a.name&&(aC.current=!0,V({define:!1,build:!1,run:!0}),L(!0),J(!0),an())},[h,a,l.name]);let aD=a=>(b,c)=>{V({...U,[a]:c})},aE=a=>{switch(a){case"error":return"error.main";case"success":return"success.main";case"warning":return"warning.main";case"loading":return"info.main";default:return"text.primary"}};return(0,d.jsxs)(e.default,{component:"form",onSubmit:d=>{((a,b,c,d,e,f,g,h,i,j,k,l=bf)=>{if(a.preventDefault(),!b.name||"stdio"===b.transport&&!b.command)return g({type:"error",text:l("mcp.local.messages.required")});if("websocket"===b.transport&&!c)return g({type:"error",text:l("mcp.local.run.validWebsocket")});if(("sse"===b.transport||"streamable"===b.transport)&&!d)return g({type:"error",text:l("mcp.local.run.validServer")});let m=bg(b,c,d,e,f);j&&i?i(m):h(m),k&&k()})(d,l,p,t,w,y,B,b,c,a,g,j)},sx:{width:"100%"},children:[(0,d.jsxs)(m.Ay,{container:!0,spacing:2,children:[(0,d.jsx)(m.Ay,{item:!0,xs:au?8:12,children:(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsxs)(bm.A,{expanded:U.define,onChange:aD("define"),sx:{border:1,borderColor:l.name&&l.rootPath?h?"success.main":"divider":"error.main",bgcolor:l.name&&l.rootPath?h?"success.lighter":"background.paper":"error.lighter","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bn.A,{expandIcon:(0,d.jsx)(bp.A,{}),"aria-controls":"define-server-content",id:"define-server-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aE(l.name&&l.rootPath?h?"success":"default":"error"),fontWeight:500},children:j("mcp.local.section.define")})}),(0,d.jsx)(bo.A,{sx:{px:3,py:2},children:(0,d.jsx)(aq,{name:l.name,setName:a=>o({...l,name:a}),rootPath:l.rootPath||"",setRootPath:a=>o({...l,rootPath:a}),onRootPathSelect:ad})})]}),(0,d.jsxs)(bm.A,{expanded:U.build,onChange:aD("build"),sx:{border:1,borderColor:C?.type==="error"?"error.main":K&&I?"success.main":K||I?"warning.main":G||E?"info.main":"divider",bgcolor:C?.type==="error"?"error.lighter":K&&I?"success.lighter":K||I?"warning.lighter":G||E?"info.lighter":"background.paper","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bn.A,{expandIcon:(0,d.jsx)(bp.A,{}),"aria-controls":"build-content",id:"build-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aE(C?.type==="error"?"error":K&&I?"success":K||I?"warning":G||E?"loading":"default"),fontWeight:500},children:j("mcp.local.section.build")})}),(0,d.jsx)(bo.A,{sx:{px:3,py:2},children:(0,d.jsx)(as,{installCommand:y,setinstallCommand:z,buildCommand:w,setBuildCommand:x,onInstall:ah,onBuild:ai,isInstalling:G,isBuilding:E,installCompleted:K,buildCompleted:I,buildMessage:C})})]}),(0,d.jsxs)(bm.A,{expanded:U.run,onChange:aD("run"),sx:{border:1,borderColor:A?.type!=="error"||Q?S?"success.main":Q?"info.main":"divider":"error.main",bgcolor:A?.type!=="error"||Q?S?"success.lighter":Q?"info.lighter":"background.paper":"error.lighter","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bn.A,{expandIcon:(0,d.jsx)(bp.A,{}),"aria-controls":"run-content",id:"run-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.A,{variant:"h6",sx:{color:aE(A?.type!=="error"||Q?S?"success":Q?"loading":"default":"error"),fontWeight:500},children:j("mcp.local.section.run")})}),(0,d.jsx)(bo.A,{sx:{px:3,py:2},children:(0,d.jsxs)(s.A,{spacing:4,children:[(0,d.jsx)(aY,{command:"stdio"===l.transport?l.command:"",setCommand:a=>{"stdio"===l.transport&&o(b=>"stdio"===b.transport?{...b,command:a}:b)},transport:l.transport,setTransport:W,websocketUrl:p,setWebsocketUrl:r,serverUrl:t,setServerUrl:v,onRun:an,isRunning:Q,runCompleted:S,env:l.env,onEnvChange:$,headers:("sse"===l.transport||"streamable"===l.transport)&&l.headers||{},onHeadersChange:a=>o(b=>({...b,headers:a})),oauthClientId:l.oauthClientId||"",oauthClientSecret:l.oauthClientSecret||"",onOAuthClientIdChange:a=>o(b=>({...b,oauthClientId:a})),onOAuthClientSecretChange:a=>o(b=>({...b,oauthClientSecret:a})),serverName:l.name,consoleOutput:at,message:A,setMessage:B,oauthCapable:aj,onSaveAndAuthenticate:i?ar:void 0,isAuthenticating:al}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a$,{args:"stdio"===l.transport&&l.args||[],onArgChange:X,onAddArg:Y,onRemoveArg:Z,onFolderSelect:ae,onParseReadme:ag,onParseClipboard:af,isParsingReadme:M})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a_.A,{roots:l.roots||[],onChange:a=>o(b=>({...b,roots:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a9,{policy:l.sampling,onChange:a=>o(b=>({...b,sampling:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(bb,{policy:l.elicitation,onChange:a=>o(b=>({...b,elicitation:a}))})})]})})]})]})}),au&&(0,d.jsx)(m.Ay,{item:!0,xs:4,children:(0,d.jsx)(ao,{output:at,isVisible:!0,toggleVisibility:ax,title:av})})]}),A&&(0,d.jsx)(e.default,{sx:{mt:2,mb:2},children:(0,d.jsx)(q.A,{severity:A.type,children:A.text})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(u.A,{variant:"outlined",onClick:g,children:j("mcp.local.cancel")}),(0,d.jsx)(u.A,{type:"submit",variant:"contained",color:"primary",children:a?j("mcp.local.updateServer"):j("mcp.local.addServer")})]}),(0,d.jsx)(bc.A,{open:_,title:j("mcp.local.chooseServerFolder"),initialPath:l.rootPath||void 0,onClose:()=>aa(!1),onSelect:a=>o({...l,rootPath:a})}),(0,d.jsx)(bc.A,{open:null!==ab,title:j("mcp.local.chooseFolderOrFile"),selectFiles:!0,onClose:()=>ac(null),onSelect:a=>{null!==ab&&X(ab,a)}})]})},br={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},bs={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function bt(a){var b;let c=[];for(let d of a.packages??[])(function(a){if(!a.identifier||!br[a.registryType]&&!a.runtimeHint)return!1;let b=a.transport?.type;return!b||"stdio"===b})(d)&&c.push({kind:"package",label:`${bs[b=d.registryType]||b}: ${d.identifier}`,pkg:d});for(let b of a.remotes??[])b.url&&("streamable-http"===b.type||"sse"===b.type)&&c.push({kind:"remote",label:`Remote (${"sse"===b.type?"SSE":"Streamable HTTP"}): ${b.url}`,remote:b});return c}let bu=new Set(["mcp","server","mcp-server","mcpserver"]);function bv(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!bu.has(d.toLowerCase())||!c)return d;let e=c.split(".").pop()||"";return e?`${e}-${d}`:d}function bw(a){return a.title?a.title:bv(a.name)}function bx(a,b){let c=a.icons;if(!c||0===c.length)return null;let d=c.filter(a=>{if(!a?.src)return!1;try{return/^https?:$/.test(new URL(a.src).protocol)}catch{return!1}});return 0===d.length?null:((b?d.find(a=>a.theme===b):void 0)??d[0]).src}function by(a){let b=a.value??a.default;return"named"===a.type?a.name?void 0!==b&&""!==b?[a.name,b]:a.isRequired&&a.valueHint?[a.name,`<${a.valueHint}>`]:a.isRequired?[a.name]:[]:[]:void 0!==b&&""!==b?[b]:a.isRequired?[`<${a.valueHint||"value"}>`]:[]}function bz(a){return(a??[]).flatMap(by)}function bA(a){return{name:bv(a.name).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server",disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:""}}function bB(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function bC(a,b){let c="package"===b.kind?function(a,b){let c,d=b.runtimeHint||br[b.registryType],e=bz(b.packageArguments),f=bz(b.runtimeArguments),g=function(a){let b={};for(let c of a??[]){if(!c.name)continue;let a=c.value??c.default??"";b[c.name]=c.isSecret?{value:a,metadata:{isSecret:!0}}:a}return b}(b.environmentVariables);switch(b.registryType){case"npm":c=[...f,"-y",bB(b),...e];break;case"pypi":c=[...f,b.version?`${b.identifier}==${b.version}`:b.identifier,...e];break;case"oci":{let a=Object.keys(g).flatMap(a=>["-e",a]);c=[..."run"===f[0]?[]:["run","-i","--rm"],...f,...a,function(a){let b=a.identifier.split("/").pop()||a.identifier;return!(b.includes(":")||b.includes("@"))&&a.version?`${a.identifier}:${a.version}`:a.identifier}(b),...e];break}case"nuget":c=[...f,bB(b),"--yes",...e];break;default:c=[...f,bB(b),...e]}return{...bA(a),transport:"stdio",command:d,args:c,env:g,rootPath:"."}}(a,b.pkg):function(a,b){let c={};for(let a of b.headers??[])a.name&&(c[a.name]=a.value??a.default??"");let d=bA(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote),d="package"===b.kind?b.pkg.version??a.version:a.version,e={type:"registry",registryName:a.name,...d?{version:d}:{}};return{...c,source:e}}function bD(a,b){return"package"===a.kind?(a.pkg.environmentVariables??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name):(a.remote.headers??[]).filter(a=>a.isRequired&&!(a.value??a.default)&&!b?.[a.name]).map(a=>a.name)}var bE=c(30818),bF=c(423),bG=c(43249),bH=c(2783),bI=c(18168),bJ=c(68333),bK=c(6636);let bL=(0,a5.A)((0,d.jsx)("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}),"Person");var bM=c(29565),bN=c(33105);function bO(a){return(0,bN.Ay)("MuiAvatar",a)}(0,bM.A)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);var bP=c(20385);let bQ=(0,bI.Ay)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],c.colorDefault&&b.colorDefault]}})((0,bJ.A)(({theme:a})=>({position:"relative",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:40,height:40,fontFamily:a.typography.fontFamily,fontSize:a.typography.pxToRem(20),lineHeight:1,borderRadius:"50%",overflow:"hidden",userSelect:"none",variants:[{props:{variant:"rounded"},style:{borderRadius:(a.vars||a).shape.borderRadius}},{props:{variant:"square"},style:{borderRadius:0}},{props:{colorDefault:!0},style:{color:(a.vars||a).palette.background.default,...a.vars?{backgroundColor:a.vars.palette.Avatar.defaultBg}:{backgroundColor:a.palette.grey[400],...a.applyStyles("dark",{backgroundColor:a.palette.grey[600]})}}}]}))),bR=(0,bI.Ay)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(a,b)=>b.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),bS=(0,bI.Ay)(bL,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(a,b)=>b.fallback})({width:"75%",height:"75%"}),bT=f.forwardRef(function(a,b){let c=(0,bK.b)({props:a,name:"MuiAvatar"}),{alt:e,children:g,className:h,component:i="div",slots:j={},slotProps:k={},imgProps:l,sizes:m,src:n,srcSet:o,variant:p="circular",...q}=c,r=null,s={...c,component:i,variant:p},t=function({crossOrigin:a,referrerPolicy:b,src:c,srcSet:d}){let[e,g]=f.useState(!1);return f.useEffect(()=>{if(!c&&!d)return;g(!1);let e=!0,f=new Image;return f.onload=()=>{e&&g("loaded")},f.onerror=()=>{e&&g("error")},f.crossOrigin=a,f.referrerPolicy=b,f.src=c,d&&(f.srcset=d),()=>{e=!1}},[a,b,c,d]),e}({...l,..."function"==typeof k.img?k.img(s):k.img,src:n,srcSet:o}),u=n||o,v=u&&"error"!==t;s.colorDefault=!v,delete s.ownerState;let w=(a=>{let{classes:b,variant:c,colorDefault:d}=a;return(0,bH.A)({root:["root",c,d&&"colorDefault"],img:["img"],fallback:["fallback"]},bO,b)})(s),[x,y]=(0,bP.A)("img",{className:w.img,elementType:bR,externalForwardedProps:{slots:j,slotProps:{img:{...l,...k.img}}},additionalProps:{alt:e,src:n,srcSet:o,sizes:m},ownerState:s});return r=v?(0,d.jsx)(x,{...y}):g||0===g?g:u&&e?e[0]:(0,d.jsx)(bS,{ownerState:s,className:w.fallback}),(0,d.jsx)(bQ,{as:i,className:(0,bG.A)(w.root,h),ref:b,...q,ownerState:s,children:r})});var bU=c(27114),bV=c(40512),bW=c(83899),bX=c(52327),bY=c(89490),bZ=c(75983),b$=c(50553),b_=c(84233),b0=c(19925),b1=c(40973);let b2=(0,a5.A)((0,d.jsx)("path",{d:"M12 1.27a11 11 0 00-3.48 21.46c.55.09.73-.28.73-.55v-1.84c-3.03.64-3.67-1.46-3.67-1.46-.55-1.29-1.28-1.65-1.28-1.65-.92-.65.1-.65.1-.65 1.1 0 1.73 1.1 1.73 1.1.92 1.65 2.57 1.2 3.21.92a2 2 0 01.64-1.47c-2.47-.27-5.04-1.19-5.04-5.5 0-1.1.46-2.1 1.2-2.84a3.76 3.76 0 010-2.93s.91-.28 3.11 1.1c1.8-.49 3.7-.49 5.5 0 2.1-1.38 3.02-1.1 3.02-1.1a3.76 3.76 0 010 2.93c.83.74 1.2 1.74 1.2 2.94 0 4.21-2.57 5.13-5.04 5.4.45.37.82.92.82 2.02v3.03c0 .27.1.64.73.55A11 11 0 0012 1.27"}),"GitHub");var b3=c(15059),b4=c(56685);let b5=(0,a5.A)((0,d.jsx)("path",{d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96"}),"Cloud");var b6=c(87104),b7=c(21358),b8=c(5501),b9=c(33253);let ca=({onClose:a,setActiveTab:b,onUpdate:c,onOpenInGitHubTab:g})=>{let h=(0,an.A)(),{t:i,formatNumber:j,formatList:l}=(0,n.s9)(),[o,p]=(0,f.useState)(""),[r,x]=(0,f.useState)(""),[y,z]=(0,f.useState)([]),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(!1),[G,H]=(0,f.useState)(null),[I,J]=(0,f.useState)(null),[K,L]=(0,f.useState)(!1),M=(0,f.useRef)(0),N=(0,f.useCallback)(a=>{L(!1),J(a)},[]),O=(0,f.useCallback)(()=>{J(null),L(!1)},[]),P=(0,f.useCallback)(async(a,b)=>{let c=++M.current,d=!b;d?D(!0):F(!0),H(null);try{let e=new URLSearchParams({limit:String(30)});a&&e.set("search",a),b&&e.set("cursor",b);let f=await fetch(`/api/mcp-registry?${e.toString()}`),g=await f.json();if(c!==M.current)return;if(!f.ok||!1===g.success)throw Error(g.error||String(f.status));let h=g.servers??[];z(a=>d?h:[...a,...h]),B(h.length>0?g.metadata?.nextCursor??null:null)}catch(a){if(c!==M.current)return;console.error("Error fetching from MCP Registry:",a),H({type:"error",text:i("mcp.marketplace.loadError",{error:a instanceof Error?a.message:i("mcp.server.unknownError")})})}finally{c===M.current&&(D(!1),F(!1))}},[i]);(0,f.useEffect)(()=>{r&&P(r)},[r,P]);let Q=()=>{p(""),x(""),M.current++,D(!1),F(!1),z([]),B(null),H(null)},R=a=>{let b=a.repository?.url;if(!b)return null;try{return"github.com"===new URL(b).hostname?b:null}catch{return null}},S=I?bt(I):[];return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:i("mcp.marketplace.title")}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:(0,d.jsx)(aG.A,{message:"mcp.marketplace.help",values:{registryLink:(0,d.jsx)(aL.A,{href:"https://registry.modelcontextprotocol.io",target:"_blank",rel:"noopener noreferrer",children:i("mcp.marketplace.registry")})}})}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:o,onChange:a=>p(a.target.value),onKeyDown:a=>{if("Enter"===a.key){a.preventDefault();let b=o.trim();b?b===r?P(b):x(b):Q()}},placeholder:i("mcp.marketplace.search"),variant:"outlined",InputProps:{startAdornment:(0,d.jsx)(v.A,{position:"start",children:(0,d.jsx)(b1.A,{})}),endAdornment:o?(0,d.jsx)(v.A,{position:"end",children:(0,d.jsx)(w.A,{size:"small",onClick:Q,"aria-label":i("mcp.marketplace.clearSearch"),children:(0,d.jsx)(b6.A,{fontSize:"small"})})}):void 0}}),G&&(0,d.jsx)(q.A,{severity:G.type,onClose:()=>H(null),children:G.text}),C?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(ar.default,{})}):(0,d.jsxs)(d.Fragment,{children:[0===y.length&&!G&&(0,d.jsx)(k.A,{variant:"body1",color:"text.secondary",sx:{textAlign:"center",my:4},children:r?(0,d.jsx)(d.Fragment,{children:i("mcp.marketplace.noResults",{search:r})}):(0,d.jsx)(d.Fragment,{children:i("mcp.marketplace.startSearch")})}),(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:y.map(a=>{let b=a.server,c=bt(b).length>0,f="active"===function(a){let b=a?._meta?.["io.modelcontextprotocol.registry/official"]?.status;return"string"==typeof b&&b.length>0?b:"unverified"}(a);return(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bE.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(bF.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>{N(b)},children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(bT,{src:bx(b,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",mr:2,boxShadow:1},children:bw(b).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.A,{variant:"subtitle1",component:"div",noWrap:!0,title:bw(b),children:bw(b)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bU.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:b.description||i("mcp.spotlight.noDescription")}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexWrap:"wrap",gap:.5,alignItems:"center"},children:["number"==typeof a.quality?.stars&&(0,d.jsx)(au.A,{size:"small",variant:"outlined",icon:(0,d.jsx)(b8.A,{}),label:j(a.quality.stars,{notation:"compact",maximumFractionDigits:1}),title:i("mcp.marketplace.stars",{count:j(a.quality.stars)})}),"number"==typeof a.quality?.weeklyDownloads&&(0,d.jsx)(au.A,{size:"small",variant:"outlined",icon:(0,d.jsx)(b9.A,{}),label:i("mcp.marketplace.weeklyCompact",{count:j(a.quality.weeklyDownloads,{notation:"compact",maximumFractionDigits:1})}),title:i("mcp.marketplace.weeklyDownloads",{count:j(a.quality.weeklyDownloads)})}),(a=>{let b=[],c=new Set;for(let e of a.packages??[]){let a=function(a){return bs[a]||a}(e.registryType);c.has(a)||(c.add(a),b.push((0,d.jsx)(au.A,{size:"small",icon:(0,d.jsx)(b4.A,{}),label:a},`pkg-${a}`)))}return(a.remotes??[]).length>0&&b.push((0,d.jsx)(au.A,{size:"small",icon:(0,d.jsx)(b5,{}),label:i("mcp.marketplace.remote")},"remote")),b})(b),b.version&&(0,d.jsx)(au.A,{size:"small",variant:"outlined",label:`v${b.version}`}),!c&&(0,d.jsx)(au.A,{size:"small",color:"warning",variant:"outlined",label:i("mcp.marketplace.manualSetup")}),c&&!f&&(0,d.jsx)(au.A,{size:"small",color:"warning",variant:"outlined",icon:(0,d.jsx)(b7.A,{}),label:i("mcp.marketplace.unverified"),title:i("mcp.marketplace.unverifiedHelp")})]})]})]})})},b.name)})}),A&&y.length>0&&(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsx)(u.A,{variant:"outlined",onClick:()=>P(r,A),disabled:E,startIcon:E?(0,d.jsx)(ar.default,{size:20,color:"inherit"}):void 0,children:E?i("mcp.marketplace.loading"):i("mcp.marketplace.loadMore")})})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1},children:(0,d.jsx)(u.A,{variant:"outlined",onClick:a,children:i("mcp.local.cancel")})})]}),(0,d.jsx)(bV.A,{open:null!==I,onClose:O,maxWidth:"sm",fullWidth:!0,children:I&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bW.A,{component:"div",children:(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1.5,minWidth:0},children:[(0,d.jsx)(bT,{src:bx(I,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",width:40,height:40},children:bw(I).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{minWidth:0},children:[(0,d.jsx)(k.A,{variant:"h6",noWrap:!0,title:bw(I),children:bw(I)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:I.name,children:I.name})]})]})}),(0,d.jsxs)(bX.A,{children:[(I.repository?.url||I.websiteUrl)&&(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1,mb:2,flexWrap:"wrap"},children:[I.repository?.url&&(0,d.jsx)(u.A,{size:"small",startIcon:(0,d.jsx)(b2,{}),component:"a",href:I.repository.url,target:"_blank",rel:"noopener noreferrer",children:i("mcp.marketplace.repository")}),I.websiteUrl&&(0,d.jsx)(u.A,{size:"small",startIcon:(0,d.jsx)(b3.A,{}),component:"a",href:I.websiteUrl,target:"_blank",rel:"noopener noreferrer",children:i("mcp.marketplace.website")})]}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:I.description||i("mcp.spotlight.noDescription")}),(0,d.jsx)(q.A,{severity:"warning",icon:(0,d.jsx)(b7.A,{}),sx:{mb:1},children:i("mcp.marketplace.securityWarning")}),(0,d.jsx)(av.A,{sx:{mb:1},control:(0,d.jsx)(aw.A,{checked:K,onChange:a=>L(a.target.checked)}),label:i("mcp.marketplace.trust")}),S.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:i("mcp.marketplace.chooseInstall")}),(0,d.jsx)(bY.A,{children:S.map((a,e)=>{let f=bD(a);return(0,d.jsxs)(bZ.A,{disabled:!K,onClick:()=>((a,d)=>{let e=bC(a,d),f=bD(d);c&&c(e,{autoTestRun:!0}),O(),b&&b("local"),H({type:f.length>0?"warning":"success",text:f.length>0?i("mcp.marketplace.preparedMissing",{values:l(f)}):i("mcp.marketplace.prepared")})})(I,a),children:[(0,d.jsx)(b$.A,{children:"package"===a.kind?(0,d.jsx)(b4.A,{}):(0,d.jsx)(b5,{})}),(0,d.jsx)(b_.A,{primary:a.label,secondary:f.length>0?i("mcp.marketplace.requires",{values:l(f)}):"package"===a.kind?i("mcp.marketplace.runsLocal"):i("mcp.marketplace.hostedRemote"),primaryTypographyProps:{sx:{wordBreak:"break-all"}}})]},e)})})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(q.A,{severity:"info",children:[i("mcp.marketplace.noAutomatic"),R(I)&&g&&(0,d.jsxs)(d.Fragment,{children:[" ",i("mcp.marketplace.githubFallback")]})]}),R(I)&&g&&(0,d.jsx)(u.A,{variant:"contained",startIcon:(0,d.jsx)(b2,{}),disabled:!K,onClick:()=>(a=>{let b=R(a);b&&g&&(O(),g(b))})(I),sx:{mt:2},children:i("mcp.marketplace.tryManual")})]})]}),(0,d.jsx)(b0.A,{children:(0,d.jsx)(u.A,{onClick:O,children:i("mcp.marketplace.close")})})]})})]})};var cb=c(53222);let cc=({onClose:a,setActiveTab:b,onUpdate:c})=>{let g=(0,an.A)(),{t:h,tp:i,formatDate:j}=(0,n.s9)(),[l,o]=(0,f.useState)(null),[p,r]=(0,f.useState)(!0),[t,v]=(0,f.useState)(!1),[w,x]=(0,f.useState)(null),[y,z]=(0,f.useState)(null);(0,f.useEffect)(()=>{let a=!1;return(async()=>{try{let b=await fetch("/api/mcp-registry/spotlight"),c=await b.json();if(a)return;if(!b.ok||!1===c.success)throw Error(c.error||String(b.status));o(c.cache??null)}catch(b){a||x({type:"error",text:h("mcp.spotlight.loadError",{error:b instanceof Error?b.message:h("mcp.server.unknownError")})})}finally{a||r(!1)}})(),()=>{a=!0}},[h]);let A=async()=>{v(!0),x(null);try{let a=await fetch("/api/mcp-registry/spotlight",{method:"POST"}),b=await a.json();if(!a.ok||!1===b.success)throw Error(b.error||String(a.status));o(b.cache??null)}catch(a){x({type:"error",text:h("mcp.spotlight.refreshError",{error:a instanceof Error?a.message:h("mcp.server.unknownError")})})}finally{v(!1)}},B=(a,d)=>{let e=function(a,b){if(!b||0===Object.keys(b).length)return a;let c={...a.env??{}};for(let[a,d]of Object.entries(b)){let b=c[a];b&&"object"==typeof b&&b.metadata?.isSecret?c[a]={value:d,metadata:{isSecret:!0}}:c[a]=d}return{...a,env:c}}(bC(a.server,d),a.env);z(null),c&&c(e,{autoTestRun:!0}),b&&b("local")},C=(l?.entries??[]).filter(a=>a.result).map(a=>({server:a.result.server,env:a.env})),D=(l?.entries??[]).filter(a=>!a.result),E=y?bt(y.server):[],F=E.find(a=>"package"===a.kind),G=E.find(a=>"remote"===a.kind);return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,d.jsx)(k.A,{variant:"h6",children:h("mcp.spotlight.title")}),(0,d.jsx)(u.A,{variant:"outlined",size:"small",onClick:A,disabled:t,startIcon:t?(0,d.jsx)(ar.default,{size:16,color:"inherit"}):(0,d.jsx)(cb.A,{}),children:t?h("mcp.spotlight.refreshing"):h("mcp.spotlight.refresh")})]}),(0,d.jsxs)(k.A,{variant:"body2",color:"text.secondary",children:[h("mcp.spotlight.help"),l?.updatedAt&&(0,d.jsxs)(d.Fragment,{children:[" ",h("mcp.spotlight.updated",{date:j(l.updatedAt,{dateStyle:"medium",timeStyle:"short"})})]})]}),w&&(0,d.jsx)(q.A,{severity:w.type,onClose:()=>x(null),children:w.text}),p?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(ar.default,{})}):0===C.length?(0,d.jsx)(k.A,{variant:"body1",color:"text.secondary",sx:{textAlign:"center",my:4},children:h("mcp.spotlight.empty")}):(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:C.map(a=>{let{server:b}=a,c=bt(b),f=c.some(a=>"package"===a.kind),i=c.some(a=>"remote"===a.kind);return(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bE.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(bF.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>(a=>{let b=bt(a.server);if(0===b.length)return void x({type:"warning",text:h("mcp.spotlight.noInstall",{server:bw(a.server)})});let c=b.filter(a=>"package"===a.kind),d=b.filter(a=>"remote"===a.kind);if(c.length>0&&d.length>0)return void z(a);B(a,b[0])})(a),children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(bT,{sx:{bgcolor:g.palette.warning.main,color:"#fff",mr:2,boxShadow:1},children:(0,d.jsx)(b8.A,{fontSize:"small"})}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.A,{variant:"subtitle1",component:"div",noWrap:!0,title:bw(b),children:bw(b)}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bU.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:b.description||h("mcp.spotlight.noDescription")}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexWrap:"wrap",gap:.5,alignItems:"center"},children:[f&&(0,d.jsx)(au.A,{size:"small",icon:(0,d.jsx)(b4.A,{}),label:h("mcp.spotlight.local")}),i&&(0,d.jsx)(au.A,{size:"small",icon:(0,d.jsx)(b5,{}),label:h("mcp.spotlight.remote")}),b.version&&(0,d.jsx)(au.A,{size:"small",variant:"outlined",label:`v${b.version}`})]})]})]})})},b.name)})}),D.length>0&&!p&&(0,d.jsxs)(q.A,{severity:"warning",children:[i("mcp.spotlight.failures",D.length),D.map(a=>(0,d.jsxs)(k.A,{variant:"caption",component:"div",sx:{wordBreak:"break-all"},children:[a.url," — ",a.error||h("mcp.server.unknownError")]},a.url))]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1},children:(0,d.jsx)(u.A,{variant:"outlined",onClick:a,children:h("mcp.local.cancel")})})]}),(0,d.jsx)(bV.A,{open:null!==y,onClose:()=>z(null),maxWidth:"xs",fullWidth:!0,children:y&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bW.A,{children:bw(y.server)}),(0,d.jsxs)(bX.A,{children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:h("mcp.spotlight.chooseHelp")}),(0,d.jsxs)(bY.A,{children:[F&&(0,d.jsxs)(bZ.A,{onClick:()=>B(y,F),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(b4.A,{})}),(0,d.jsx)(b_.A,{primary:h("mcp.spotlight.local"),secondary:h("mcp.spotlight.localHelp")})]}),G&&(0,d.jsxs)(bZ.A,{onClick:()=>B(y,G),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(b5,{})}),(0,d.jsx)(b_.A,{primary:h("mcp.spotlight.remote"),secondary:h("mcp.spotlight.remoteHelp")})]})]})]}),(0,d.jsx)(b0.A,{children:(0,d.jsx)(u.A,{onClick:()=>z(null),children:h("mcp.local.cancel")})})]})})]})},cd=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let h=(0,an.A)(),{t:i,tp:j}=(0,n.s9)(),[o,p]=(0,f.useState)(!1),[r,t]=(0,f.useState)(!1),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(null),[z,A]=(0,f.useState)([]),[B,C]=(0,f.useState)(""),[D,E]=(0,f.useState)(!1),{consoleOutput:F,isConsoleVisible:G,setIsConsoleVisible:H,updateConsole:I,clearConsole:J}=ap();(0,f.useEffect)(()=>{(async()=>{p(!0);try{let a=await fetch("/api/cwd"),b=await a.json();if(b.success){C(b.mcpServersDir);let a=`${b.mcpServersDir}/servers`,c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"exists",savePath:a})}),d=await c.json();E(d.exists),d.exists?await L(a):y({type:"warning",text:i("mcp.reference.repoMissing")})}}catch(a){console.error("Error initializing Reference Servers tab:",a),y({type:"error",text:i("mcp.reference.initializeError",{error:a instanceof Error?a.message:i("mcp.server.unknownError")})})}finally{p(!1)}})()},[i]);let K=async()=>{t(!0),J(),H(!0),I(`${i("mcp.reference.refreshStart")}
|
|
56
|
+
`);try{let a="https://github.com/modelcontextprotocol/servers.git",b=`${B}/servers`;if(D){I(`${i("mcp.reference.repoPulling")}
|
|
57
|
+
`);let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"run",savePath:b,runCommand:"git pull"})}),c=await a.json();c.success?I(`${i("mcp.reference.pullSuccess",{output:c.output||i("mcp.reference.repoUpdated")})}
|
|
58
|
+
`):(I(`${i("mcp.reference.pullWarning",{error:c.error||i("mcp.server.unknownError")})}
|
|
59
|
+
`),I(`${i("mcp.reference.continuing")}
|
|
60
|
+
`))}else{w(!0),I(`${i("mcp.reference.cloning",{url:a})}
|
|
61
|
+
`),b.substring(0,b.lastIndexOf("/"));let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clone",repoUrl:a,savePath:b})}),d=await c.json();if(d.success)I(`${i("mcp.reference.cloneSuccess",{output:d.output||i("mcp.reference.repoCloned")})}
|
|
62
|
+
`),E(!0);else throw Error(i("mcp.reference.cloneFailed",{error:d.error||i("mcp.server.unknownError")}));w(!1)}I(`${i("mcp.reference.installing")}
|
|
63
|
+
`);let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:b,installCommand:"npm install --include=dev"})}),d=await c.json();if(d.success){I(`${d.output||i("mcp.reference.dependenciesInstalled")}
|
|
64
|
+
`),I(`${i("mcp.reference.building")}
|
|
65
|
+
`);let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:b,buildCommand:"npm run build"})}),c=await a.json();c.success?I(`${c.output||i("mcp.reference.buildComplete")}
|
|
66
|
+
`):I(`${i("mcp.reference.buildWarning",{error:c.error||i("mcp.server.unknownError")})}
|
|
67
|
+
`)}else I(`${i("mcp.reference.installWarning",{error:d.error||i("mcp.server.unknownError")})}
|
|
68
|
+
`);await L(b),y({type:"success",text:i("mcp.reference.refreshed")})}catch(a){console.error("Error refreshing repository:",a),I(`${i("mcp.local.console.details",{details:a instanceof Error?a.message:i("mcp.server.unknownError")})}
|
|
69
|
+
`),y({type:"error",text:i("mcp.reference.refreshFailed",{error:a instanceof Error?a.message:i("mcp.server.unknownError")})})}finally{t(!1)}},L=async a=>{I(`${i("mcp.reference.fetching")}
|
|
70
|
+
`);try{let b=`${a}/src`,c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"listDir",savePath:b})}),d=await c.json();if(!d.success)throw Error(i("mcp.reference.listFailed",{error:d.error||i("mcp.server.unknownError")}));let e=d.items.filter(a=>"directory"===a.type&&!a.isHidden).map(a=>({name:a.name,type:a.type}));I(`${i("mcp.reference.directoriesFound",{count:e.length})}
|
|
71
|
+
`);let f=e.map(async a=>{let c=`${b}/${a.name}`,d=`${c}/README.md`,e="",f=!1;try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:d})}),b=await a.json();b.success&&b.content&&(e=b.content,f=!0)}catch(a){console.error("Error reading README with readFile action:",a)}let g={name:a.name,description:"",directory:c,repoUrl:`https://github.com/modelcontextprotocol/servers/tree/main/src/${a.name}`};if(f&&e){g.readmeContent=e;let a=e.match(/# ([^\n]+)|^([^\n#][^\n]*)/);a&&(g.description=a[1]||a[2]);let b=e.match(/npm install|yarn install/);b&&(g.installCommand=b[0]);let c=e.match(/npm (start|run dev|run serve)|node [\w\/\.-]+|npx -y @modelcontextprotocol\/[a-zA-Z0-9-_]+/);c&&(g.command=c[0])}return g}),g=await Promise.all(f);A(g),I(`${i("mcp.reference.serversFound",{count:g.length})}
|
|
72
|
+
`)}catch(a){throw console.error("Error fetching server info:",a),I(`${i("mcp.reference.fetchError",{error:a instanceof Error?a.message:i("mcp.server.unknownError")})}
|
|
73
|
+
`),a}},M=async a=>{try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:a})});return(await b.json()).success}catch{return!1}},N=async a=>{try{let b=await M(`${a.directory}/package.json`),d=await M(`${a.directory}/pyproject.toml`),e="",f=[],h="",i="";if(b){e="node",f=["dist/index.js"],h="npm run build",i="npm install --include=dev";try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:`${a.directory}/package.json`})}),c=await b.json();if(c.success){let b=JSON.parse(c.content);if(b.bin){let c="";if("string"==typeof b.bin)c=b.bin;else{let d=`mcp-server-${a.name}`;b.bin[d]&&(c=b.bin[d])}c&&(f=[c])}}}catch(a){console.error("Error reading package.json:",a)}}else if(d){e="python";let b=a.name.replace(/-/g,"_"),c=`mcp_server_${b}`;f=["-m",c],await M(`${a.directory}/requirements.txt`)?(i="pip install -r requirements.txt",h=d?"pip install -e .":""):(i="pip install -e .",h="");try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"readFile",savePath:`${a.directory}/pyproject.toml`})}),c=await b.json();if(c.success){let a=c.content.match(/\[project\.scripts\][\s\S]*?mcp-server-[^=]+=\s*"([^:]+):/);a&&a[1]&&(f=["-m",a[1]])}}catch(a){console.error("Error reading pyproject.toml:",a)}}else e=a.command||"npx -y @modelcontextprotocol/server-"+a.name,f=[],h=a.buildCommand||"npm run build",i=a.installCommand||"npm install";let j={name:a.name,rootPath:a.directory,command:e,args:f,env:{},disabled:!1,autoApprove:[],transport:"stdio",_buildCommand:h,_installCommand:i,source:{type:"github",repositoryUrl:"https://github.com/modelcontextprotocol/servers.git",subdirectory:`src/${a.name}`}};g&&g(j),c&&c("local")}catch(a){console.error("Error configuring server:",a),y({type:"error",text:i("mcp.reference.configureError",{error:a instanceof Error?a.message:i("mcp.server.unknownError")})})}};return(0,d.jsx)(e.default,{sx:{width:"100%"},children:(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:i("mcp.reference.title")}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,d.jsx)(k.A,{variant:"body1",children:D?j("mcp.reference.available",z.length):i("mcp.reference.notCloned")}),(0,d.jsx)(u.A,{variant:"contained",color:"primary",startIcon:r?(0,d.jsx)(ar.default,{size:20,color:"inherit"}):(0,d.jsx)(cb.A,{}),onClick:K,disabled:r,children:r?i("mcp.spotlight.refreshing"):i("mcp.spotlight.refresh")})]}),x&&(0,d.jsx)(q.A,{severity:x.type,sx:{mb:2},children:x.text}),o?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(ar.default,{})}):(0,d.jsxs)(d.Fragment,{children:[G&&(0,d.jsx)(l.A,{variant:"outlined",sx:{p:2,mb:3,maxHeight:"200px",overflow:"auto",fontFamily:"monospace",fontSize:"0.9rem",bgcolor:"dark"===h.palette.mode?"#121212":"#f5f5f5"},children:(0,d.jsx)(e.default,{component:"pre",sx:{m:0,whiteSpace:"pre-wrap"},children:F})}),(0,d.jsx)(m.Ay,{container:!0,spacing:2,children:z.map(a=>(0,d.jsx)(m.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(bE.A,{sx:{height:"100%",display:"flex",flexDirection:"column",transition:"transform 0.2s, box-shadow 0.2s",position:"relative",overflow:"visible","&:hover":{transform:"translateY(-4px)",boxShadow:6}},children:(0,d.jsxs)(bF.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>N(a),children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider",background:(a=>{let b="dark"===a.palette.mode?"#424242":"#607d8b",c="dark"===a.palette.mode?"#303030":"#455a64";return`linear-gradient(135deg, ${b} 0%, ${c} 100%)`})(h)},children:[(0,d.jsx)(bT,{sx:{bgcolor:"dark"===h.palette.mode?"#424242":"#607d8b",color:"#fff",mr:2,boxShadow:1},children:a.name.charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1},children:[(0,d.jsx)(k.A,{variant:"h6",component:"div",sx:{textTransform:"capitalize",color:"#fff",textShadow:"0px 1px 2px rgba(0,0,0,0.2)"},children:a.name.replace(/-/g," ")}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(au.A,{size:"small",icon:(0,d.jsx)(b2,{}),label:"MCP",sx:{mr:1,bgcolor:"rgba(255,255,255,0.2)",color:"#fff","& .MuiChip-icon":{color:"#fff"}}}),(0,d.jsx)(k.A,{variant:"caption",sx:{color:"rgba(255,255,255,0.8)"},children:i("mcp.reference.label")})]})]})]}),(0,d.jsx)(bU.A,{sx:{flexGrow:1,pt:2},children:(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:a.description||i("mcp.reference.description",{server:a.name.replace(/-/g," ")})})})]})})},a.name))})]})]})})};var ce=c(91059);let cf=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let{t:h}=(0,n.s9)(),[i,j]=(0,f.useState)(""),[m,o]=(0,f.useState)(!1),[p,r]=(0,f.useState)(null),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(void 0),z=(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(i),A=()=>{let a=(a=>{try{return new URL(a).hostname.replace(/\./g,"-")}catch(a){return"remote-server"}})(i),b={name:a,transport:"streamable",serverUrl:i,rootPath:`mcp-servers/${a}`,disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:"",source:{type:"remote"},...x?{sampling:x}:{}};g&&g(b),c&&c("local")},B=async()=>{if(!z)return void r({type:"error",text:h("mcp.remote.invalidUrl")});if(v)return void A();o(!0),r({type:"success",text:h("mcp.remote.checkingServer")});try{if((await be.S.probeOAuthCapability(i)).oauthCapable){w(!0),r({type:"success",text:h("mcp.remote.oauthDetected")}),o(!1);return}A(),r({type:"success",text:h("mcp.remote.switching")})}catch(a){console.error("Error processing remote URL:",a),r({type:"error",text:h("mcp.remote.processingError",{error:a instanceof Error?a.message:h("mcp.server.unknownError")})})}finally{o(!1)}};return(0,d.jsx)(l.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(s.A,{spacing:3,children:[(0,d.jsx)(k.A,{variant:"h6",gutterBottom:!0,children:h("mcp.remote.title")}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:h("mcp.remote.help")}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:h("mcp.remote.url")}),(0,d.jsx)(t.A,{fullWidth:!0,size:"small",value:i,onChange:a=>{j(a.target.value),w(!1),p&&r(null)},placeholder:"https://example.com/mcp",variant:"outlined",required:!0,error:i.length>0&&!z,helperText:i.length>0&&!z?h("mcp.remote.invalidUrl"):h("mcp.remote.urlHelp"),disabled:m})]}),p&&(0,d.jsx)(e.default,{children:(0,d.jsx)(q.A,{severity:p.type,children:p.text})}),(0,d.jsx)(ce.A,{}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",gutterBottom:!0,children:h("mcp.remote.sampling")}),(0,d.jsx)(a9,{policy:x,onChange:y})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(u.A,{variant:"outlined",onClick:b,disabled:m,children:h("mcp.remote.cancel")}),(0,d.jsx)(u.A,{variant:"contained",color:"primary",onClick:B,disabled:!z||m,children:m?h("mcp.remote.checking"):v?h("mcp.remote.continue"):h("mcp.remote.connect")})]})]})})};var cg=c(30137);let ch=({isOpen:a,onClose:b,onAdd:c,initialConfig:g,onUpdate:h,onRestartAfterUpdate:i,onSaveAndAuthenticate:j})=>{let{t:l}=(0,n.s9)(),[m,o]=(0,f.useState)("spotlight"),[p,q]=(0,f.useState)(null),[r,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)(""),[v,y]=(0,f.useState)({spotlight:!1,marketplace:!1,github:!1,local:!1,reference:!1,remote:!1});(0,f.useEffect)(()=>{g||v[m]||y(a=>({...a,[m]:!0}))},[m,g,v]);let{getThemeValue:z}=(0,x.Ic)(),A=()=>{q(null),s(!1),u(""),o("spotlight"),b()};return(0,d.jsxs)(bV.A,{open:a,onClose:A,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{width:"95vw",maxWidth:"95vw",maxHeight:"95vh",height:"auto"}},children:[(0,d.jsxs)(bW.A,{component:"div",sx:{display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider",pb:1},children:[(0,d.jsx)(k.A,{variant:"h6",children:g?l("mcp.modal.editTitle",{name:g.name}):l("mcp.modal.addTitle")}),(0,d.jsx)(w.A,{edge:"end",color:"inherit",onClick:A,"aria-label":l("mcp.modal.close"),children:(0,d.jsx)(cg.A,{})})]}),(0,d.jsxs)(bX.A,{sx:{p:0},children:[g?null:(0,d.jsx)(e.default,{sx:{borderBottom:1,borderColor:"divider"},children:(0,d.jsxs)(aP.A,{value:m,onChange:(a,b)=>{s(!1),u(""),o(b)},"aria-label":l("mcp.modal.tabsAria"),sx:{px:2},children:[(0,d.jsx)(aQ.A,{label:l("mcp.modal.spotlight"),value:"spotlight"}),(0,d.jsx)(aQ.A,{label:l("mcp.modal.marketplace"),value:"marketplace"}),(0,d.jsx)(aQ.A,{label:l("mcp.modal.github"),value:"github"}),(0,d.jsx)(aQ.A,{label:l("mcp.modal.local"),value:"local"}),(0,d.jsx)(aQ.A,{label:l("mcp.modal.remote"),value:"remote"}),(0,d.jsx)(aQ.A,{label:l("mcp.modal.reference"),value:"reference"})]})}),(0,d.jsx)(e.default,{sx:{p:3},children:g?(0,d.jsx)(bq,{initialConfig:g,onAdd:c,onUpdate:h,onClose:b,onRestartAfterUpdate:i,onSaveAndAuthenticate:j}):"spotlight"===m?(0,d.jsx)(cc,{onAdd:c,onClose:b,setActiveTab:o,onUpdate:(a,b)=>{q(a),s(!!b?.autoTestRun)}}):"marketplace"===m?(0,d.jsx)(ca,{onAdd:c,onClose:b,setActiveTab:o,onUpdate:(a,b)=>{q(a),s(!!b?.autoTestRun)},onOpenInGitHubTab:a=>{u(a),o("github")}}):"github"===m?(0,d.jsx)(ak,{onAdd:c,onClose:b,setActiveTab:o,initialGitHubUrl:t,onUpdate:a=>{q(a),s(!1)}}):"local"===m?(0,d.jsx)(bq,{initialConfig:p,onAdd:c,onClose:b,autoTestRun:r,onSaveAndAuthenticate:j}):"remote"===m?(0,d.jsx)(cf,{onAdd:c,onClose:b,setActiveTab:o,onUpdate:a=>{q(a),s(!1)}}):(0,d.jsx)(cd,{onAdd:c,onClose:b,setActiveTab:o,onUpdate:a=>{q(a),s(!1)}})})]})]})};var ci=c(42387),cj=c(45798),ck=c(18954),cl=c(31411),cm=c(59060),cn=c(34641);let co=(0,j.h)("frontend/components/mcp/MCPToolManager/ToolTester"),cp=({serverName:a,tools:b=[],onTestTool:c,onClose:g,prefill:h})=>{let{t:j,formatNumber:m}=(0,n.s9)();co.debug("Props:",{serverName:a,toolsCount:b?.length});let o=Array.isArray(b)?b:[];co.debug("Tools array:",{count:o.length});let[p,r]=(0,f.useState)(""),[s,v]=(0,f.useState)({}),[y,z]=(0,f.useState)(null),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(60),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(null),[I,J]=(0,f.useState)(null),[K,L]=(0,f.useState)(!1),[M,N]=(0,f.useState)(!1);(0,f.useEffect)(()=>{h&&o.some(a=>a.name===h.toolName)&&(r(h.toolName),v({...h.arguments}),z(null),H(null),J(null),F(null))},[h,b]);let O=async()=>{co.debug(`Testing tool: ${p} with params:`,JSON.stringify(s)),co.debug(`Timeout: ${C} seconds`),H(null),J(null),B(!0);try{let a={},b=o.find(a=>a.name===p);b?.inputSchema?.properties?Object.entries(s).forEach(([c,d])=>{let e=b.inputSchema.properties[c];if(!e){a[c]=d;return}if("number"===e.type||"integer"===e.type){let b="string"==typeof d?parseFloat(d):d;a[c]=isNaN(b)?0:b}else"boolean"===e.type?a[c]=!!d:a[c]=d}):Object.assign(a,s),co.debug("Sending typed params:",JSON.stringify(a));let d=await c(p,a,C);co.debug("Test result:",JSON.stringify(d)),d&&d.progressToken&&J(d.progressToken),z(d)}catch(a){co.error("Error testing tool:",a),z({success:!1,output:"",error:a instanceof Error?a.message:j("mcp.tester.unknownError")})}B(!1)},P=async()=>{if(!K){L(!0),co.debug("Cancelling tool execution");try{let b=I?`/api/mcp/cancel?token=${I}&serverName=${encodeURIComponent(a)}`:`/api/mcp/cancel?serverName=${encodeURIComponent(a)}`,c=await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reason:j("mcp.tester.cancel")})});if(c.ok)co.info("Successfully sent cancellation request"),F(j("mcp.tester.cancelSent"));else{let a=await c.json();co.warn("Failed to cancel operation:",a),F(j("mcp.tester.cancelFailed",{error:a.error||j("mcp.tester.unknownError")}))}}catch(a){co.error("Error cancelling tool:",a),F(j("mcp.tester.cancelError",{error:a instanceof Error?a.message:j("mcp.tester.unknownError")}))}finally{L(!1)}}},Q=o.find(a=>a.name===p);co.debug("Selected tool data:",{name:Q?.name,hasSchema:!!Q?.inputSchema});let{getThemeValue:R}=(0,x.Ic)();return(0,d.jsxs)(l.A,{sx:{p:2,bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,d.jsx)(k.A,{variant:"h6",sx:{fontWeight:"semibold"},children:j("mcp.tester.title",{server:a})}),g&&(0,d.jsx)(ax.A,{title:j("mcp.tester.close"),children:(0,d.jsx)(w.A,{size:"small",onClick:g,"aria-label":j("mcp.tester.close"),children:(0,d.jsx)(cg.A,{fontSize:"small"})})})]}),E&&(0,d.jsx)(q.A,{severity:"error",sx:{mb:2},children:E}),(0,d.jsxs)(e.default,{sx:{mb:2},children:[(0,d.jsx)(k.A,{component:"label",variant:"body2",sx:{display:"block",mb:1,fontWeight:"medium",color:a=>"dark"===a.palette.mode?"#d1d5db":"#4b5563"},children:j("mcp.tester.select")}),(0,d.jsxs)(a3.A,{fullWidth:!0,value:p,onChange:a=>{r(a.target.value),v({}),z(null)},displayEmpty:!0,sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}},children:[(0,d.jsx)(a4.A,{value:"",children:j("mcp.tester.choose")}),o.map(a=>(0,d.jsx)(a4.A,{value:a.name,children:a.name},a.name))]})]}),Q?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.default,{sx:{mb:2},children:(0,d.jsx)(k.A,{variant:"body2",sx:{color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:Q.description})}),(0,d.jsxs)(e.default,{sx:{mb:2,display:"flex",flexDirection:"column",gap:2},children:[(0,d.jsx)(cl.A,{schema:Q.inputSchema,values:s,onChange:v}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{component:"label",variant:"body2",sx:{display:"block",mb:.5,fontWeight:"medium",color:a=>"dark"===a.palette.mode?"#d1d5db":"#4b5563"},children:j("mcp.tester.timeout")}),(0,d.jsx)(t.A,{type:"number",fullWidth:!0,size:"small",value:60===C?"":C,onChange:a=>(a=>{let b=parseInt(a,10);""===a||isNaN(b)||b<-1||0===b?D(60):D(b)})(a.target.value),placeholder:j("mcp.tester.timeoutPlaceholder"),sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}}}),(0,d.jsx)(k.A,{variant:"caption",sx:{display:"block",mt:.5,color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:j("mcp.tester.timeoutHelp")})]})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1},children:[(0,d.jsx)(u.A,{variant:"contained",color:"primary",onClick:O,disabled:A,startIcon:A&&(0,d.jsx)(i.default,{size:"small",color:"white"}),children:A?j("mcp.tester.testing"):j("mcp.tester.test")}),A&&(0,d.jsx)(u.A,{variant:"contained",color:"error",onClick:P,disabled:K,startIcon:K?(0,d.jsx)(i.default,{size:"small",color:"white"}):(0,d.jsx)(e.default,{component:"span",sx:{display:"flex",alignItems:"center",justifyContent:"center",width:16,height:16},children:(0,d.jsx)("svg",{width:"16",height:"16",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,d.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M6 18L18 6M6 6l12 12"})})}),children:K?j("mcp.tester.cancelling"):j("mcp.tester.cancel")})]}),A&&(0,d.jsxs)(e.default,{sx:{mt:2},children:[!G&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsx)(i.default,{size:"small",color:"primary"}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:j("mcp.tester.processing")})]}),G&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:.5},children:[(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:j("mcp.tester.progress")}),(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:G.total?`${m(Math.round(G.current))}/${m(Math.round(G.total))} (${m(G.current/G.total,{style:"percent",maximumFractionDigits:0})})`:m(G.current/100,{style:"percent",maximumFractionDigits:0})})]}),(0,d.jsx)(ci.A,{variant:"determinate",value:G.total?Math.min(100,G.current/G.total*100):Math.min(100,G.current)})]})]})]}):(0,d.jsx)(k.A,{color:"text.secondary",children:j("mcp.tester.noSelection")}),y&&(0,d.jsxs)(l.A,{sx:{mt:2,p:2,bgcolor:a=>"dark"===a.palette.mode?"#1a1a1a":"#f9fafb"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:[(0,d.jsx)(k.A,{variant:"subtitle1",sx:{fontWeight:"medium"},children:j("mcp.tester.result")}),(0,d.jsx)(av.A,{control:(0,d.jsx)(a0.A,{checked:M,onChange:a=>N(a.target.checked),size:"small"}),label:j("mcp.tester.showRaw"),sx:{mr:0}})]}),M?(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto",maxHeight:"400px"},children:y.success?y.output:j("mcp.tester.error",{error:y.error??""})}):y.success?(()=>{try{let a=JSON.parse(y.output);if(a&&a.data&&Array.isArray(a.data.content))return(0,d.jsx)(e.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:a.data.content.map((a,b)=>"text"===a.type?(0,d.jsx)(cj.oz,{remarkPlugins:[ck.A],children:a.text},b):"image"===a.type&&a.data&&a.mimeType?(0,d.jsx)("img",{src:`data:${a.mimeType};base64,${a.data}`,alt:j("mcp.tester.imageAlt",{number:m(b+1)}),style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}},b):"audio"===a.type&&a.data&&a.mimeType?(0,d.jsx)("audio",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{width:"100%"},children:j("mcp.tester.audioUnsupported")},b):(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto"},children:JSON.stringify(a,null,2)},b))});throw Error("Output is valid JSON but not in the expected MCP 'data.content' format.")}catch(a){return(0,d.jsx)(e.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.875rem",p:1,borderRadius:1,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb",bgcolor:a=>a.palette.background.paper,color:a=>a.palette.text.primary,overflow:"auto"},children:y.output})}})():(0,d.jsx)(k.A,{color:"error.main",children:j("mcp.tester.error",{error:y.error??""})})]}),y?.success&&(()=>{let b,c=(0,cm.Gt)(Q?._meta);if(!c)return null;try{let a=JSON.parse(y.output);b=JSON.stringify(a?.data??a)}catch{b=void 0}return(0,d.jsx)(cn.Ay,{serverName:a,uri:c,toolName:p,toolArgs:JSON.stringify(s),toolResultContent:b})})()]})};var cq=c(88117);let cr=(0,j.h)("frontend/components/mcp/MCPToolManager"),cs=({serverName:a,onClose:b,prefill:c})=>{let{t:e,formatNumber:g}=(0,n.s9)(),{tools:h,isLoading:j,error:k,loadTools:l,retryLoadTools:m,isRetrying:o,retryCount:p,testTool:q}=(0,cq.O)(a),r=async(a,b,c)=>(cr.debug(`Testing tool ${a} with params:`,b),void 0!==c&&cr.debug(`Using timeout: ${c} seconds`),await q(a,b,c));(0,f.useEffect)(()=>{if(a){let b=setInterval(()=>{cr.debug("Periodic tool refresh"),be.S.clearToolsCache(a),l(!0)},3e4);return()=>clearInterval(b)}},[l,a]);let{getThemeValue:s}=(0,x.Ic)();return k&&(!h||0===h.length)?(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:s("#fef2f2","#3a2222"),borderColor:s("#fecaca","#5a3333"),color:s("#333","#f0f0f0")},children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",style:{color:s("#111","#f8f8f8")},children:e("mcp.tools.managerServer",{server:a||e("mcp.tools.noServer")})}),(0,d.jsxs)("div",{className:"text-red-500",children:[(0,d.jsx)("p",{children:e("mcp.tools.errorLoading",{error:k})}),(0,d.jsx)("button",{onClick:()=>{a&&be.S.clearToolsCache(a),m()},className:"mt-2 px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:o,children:o?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.default,{size:"small",color:"white",className:"mr-2"}),e("mcp.tools.retrying")]}):e("mcp.tools.retry")}),p>0&&(0,d.jsx)("p",{className:"text-sm mt-1",children:e("mcp.tools.retryAttempt",{count:g(p)})})]})]}):a?(0,d.jsxs)("div",{className:"mt-8",style:{color:s("#333","#f0f0f0")},children:[(0,d.jsx)(cp,{serverName:a,tools:h,onTestTool:r,onClose:b,prefill:c}),j&&(0,d.jsxs)("div",{className:"mt-4 flex items-center space-x-2 text-blue-500",children:[(0,d.jsx)(i.default,{size:"small",color:"primary"}),(0,d.jsx)("p",{children:e("mcp.tools.loading")})]}),k&&h&&h.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-yellow-500",children:[(0,d.jsx)("p",{children:e("mcp.tools.warning",{error:k})}),(0,d.jsx)("p",{className:"text-sm",children:e("mcp.tools.cached")}),(0,d.jsx)("button",{onClick:()=>{a&&be.S.clearToolsCache(a),m()},className:"mt-1 px-2 py-1 text-xs bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:o,children:o?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.default,{size:"small",color:"white",className:"mr-1"}),(0,d.jsx)("span",{className:"text-xs",children:e("mcp.tools.retrying")})]}):e("mcp.tools.retry")}),p>0&&(0,d.jsx)("p",{className:"text-xs mt-1",children:e("mcp.tools.retryAttempt",{count:g(p)})})]})]}):(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:s("white","#2a2a2a"),borderColor:s("#e5e7eb","#3a3a3a"),color:s("#333","#f0f0f0")},children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",style:{color:s("#111","#f8f8f8")},children:e("mcp.tools.manager")}),(0,d.jsx)("p",{style:{color:s("#6b7280","#9ca3af")},children:e("mcp.tools.selectServer")})]})},ct=(0,j.h)("frontend/components/mcp/MCPCapabilitiesManager"),cu=({serverName:a,show:b="both"})=>{let{t:c,formatNumber:g}=(0,n.s9)(),h="both"===b||"resources"===b,i="both"===b||"prompts"===b,[j,m]=(0,f.useState)([]),[o,p]=(0,f.useState)([]),[r,v]=(0,f.useState)([]),[w,x]=(0,f.useState)(!1),[y,z]=(0,f.useState)(),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(""),[E,F]=(0,f.useState)(!1),[G,H]=(0,f.useState)(),[I,J]=(0,f.useState)({}),K=(0,f.useCallback)(async()=>{if(a){x(!0),z(void 0);try{let[b,c]=await Promise.all([h?be.S.listServerResources(a):Promise.resolve(null),i?be.S.listServerPrompts(a):Promise.resolve(null)]);b&&(m(b.resources||[]),p(b.resourceTemplates||[])),c&&v(c.prompts||[]),z(b?.error||c?.error)}catch(a){ct.warn("Failed to load capabilities",a),z(a instanceof Error?a.message:c("mcp.capabilities.loadFailed"))}finally{x(!1)}}},[a,h,i,c]);(0,f.useEffect)(()=>{B(null),D(""),H(void 0),K()},[K]),(0,f.useEffect)(()=>{if(!a||!h)return;let b=setInterval(async()=>{try{let b=(await be.S.getServerStatus(a)).resourceListVersion??0;be.S.checkResourceListVersion(a,b)&&(ct.debug(`MCPCapabilitiesManager: resource list changed for ${a} — auto-refreshing`),await K())}catch{}},1e4);return()=>clearInterval(b)},[a,h,K]);let L=async(b,d)=>{B(c("mcp.capabilities.resourceTitle",{name:d})),D(""),H(void 0),F(!0);try{let d=await be.S.readResource(a,b);d.success?D(function(a,b,c){let d=a?.contents;return Array.isArray(d)&&0!==d.length?d.map(a=>"string"==typeof a.text?a.text:"string"==typeof a.blob?b("mcp.capabilities.binary",{type:a.mimeType||b("mcp.capabilities.data"),count:c(a.blob.length)}):JSON.stringify(a,null,2)).join("\n\n---\n\n"):b("mcp.capabilities.noContents")}(d.data,c,g)):H(d.error||c("mcp.capabilities.readFailed"))}finally{F(!1)}},M=async b=>{B(c("mcp.capabilities.promptTitle",{name:b.name})),D(""),H(void 0),F(!0);try{let d=await be.S.getPrompt(a,b.name,I[b.name]);d.success?D(function(a,b){let c=a?.messages;return Array.isArray(c)&&0!==c.length?c.map(a=>{let c,d=a.role||"user",e=a.content;return c="string"==typeof e?.text?e.text:e?.type==="resource"?b("mcp.capabilities.embedded",{uri:e.resource?.uri||""}):JSON.stringify(e,null,2),`[${d}]
|
|
74
|
+
${c}`}).join("\n\n"):b("mcp.capabilities.noMessages")}(d.data,c)):H(d.error||c("mcp.capabilities.promptFailed"))}finally{F(!1)}},N=!w&&!y&&(!h||0===j.length&&0===o.length)&&(!i||0===r.length),O="resources"===b?c("mcp.capabilities.resources"):"prompts"===b?c("mcp.capabilities.prompts"):c("mcp.capabilities.both"),P="resources"===b?c("mcp.capabilities.noResources"):"prompts"===b?c("mcp.capabilities.noPrompts"):c("mcp.capabilities.none");return(0,d.jsxs)(l.A,{variant:"outlined",sx:{p:2},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1},children:[(0,d.jsx)(k.A,{variant:"h6",children:O}),(0,d.jsx)(u.A,{size:"small",onClick:()=>{be.S.clearCapabilitiesCache(a),K()},disabled:w,children:c("mcp.capabilities.refresh")})]}),w&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(ar.default,{size:18}),(0,d.jsx)(k.A,{variant:"body2",children:c("mcp.capabilities.loading")})]}),y&&(0,d.jsx)(q.A,{severity:"warning",sx:{mb:2},children:y}),N&&(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",sx:{py:1},children:P}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,d.jsxs)(e.default,{sx:{flex:"1 1 360px",minWidth:280},children:[h&&(j.length>0||o.length>0)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"subtitle2",sx:{mt:1},children:c("mcp.capabilities.resources")}),(0,d.jsx)(bY.A,{dense:!0,disablePadding:!0,children:j.map(a=>(0,d.jsxs)(bZ.A,{onClick:()=>L(a.uri,a.name||a.uri),children:[(0,d.jsx)(b_.A,{primary:a.name||a.uri,secondary:a.description||a.uri,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}}),a.mimeType&&(0,d.jsx)(au.A,{size:"small",label:a.mimeType,sx:{ml:1}})]},a.uri))}),o.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{mt:1,display:"block"},children:c("mcp.capabilities.templates")}),(0,d.jsx)(bY.A,{dense:!0,disablePadding:!0,children:o.map(a=>(0,d.jsx)(b_.A,{sx:{pl:2,py:.5},primary:a.name||a.uriTemplate,secondary:a.uriTemplate,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}},a.uriTemplate))})]})]}),i&&r.length>0&&(0,d.jsxs)(d.Fragment,{children:["both"===b&&(0,d.jsx)(ce.A,{sx:{my:1}}),(0,d.jsx)(k.A,{variant:"subtitle2",children:c("mcp.capabilities.prompts")}),(0,d.jsx)(s.A,{spacing:1,sx:{mt:.5},children:r.map(a=>(0,d.jsxs)(e.default,{sx:{border:"1px solid",borderColor:"divider",borderRadius:1,p:1},children:[(0,d.jsx)(k.A,{variant:"body2",sx:{fontWeight:600},children:a.name}),a.description&&(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",children:a.description}),(a.arguments||[]).map(b=>(0,d.jsx)(t.A,{size:"small",fullWidth:!0,margin:"dense",label:`${b.name}${b.required?" *":""}`,placeholder:b.description||"",value:I[a.name]?.[b.name]||"",onChange:c=>((a,b,c)=>{J(d=>({...d,[a]:{...d[a]||{},[b]:c}}))})(a.name,b.name,c.target.value)},b.name)),(0,d.jsx)(u.A,{size:"small",sx:{mt:.5},onClick:()=>M(a),children:c("mcp.capabilities.preview")})]},a.name))})]})]}),A&&(0,d.jsxs)(e.default,{sx:{flex:"1 1 360px",minWidth:280},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:A}),E?(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(ar.default,{size:16}),(0,d.jsx)(k.A,{variant:"body2",children:c("mcp.capabilities.loadingPreview")})]}):G?(0,d.jsx)(q.A,{severity:"error",sx:{mt:1},children:G}):(0,d.jsx)(e.default,{component:"pre",sx:{mt:1,p:1,bgcolor:"action.hover",borderRadius:1,maxHeight:360,overflow:"auto",fontSize:12,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:C||c("mcp.capabilities.empty")})]})]})]})},cv=(0,j.h)("frontend/components/mcp/MCPServerManager/ServerDetailsModal"),cw=({server:a,onClose:b,onSaveEnv:c,onServerRestart:g,toolPrefill:h})=>{let{t:i}=(0,n.s9)(),[j,l]=(0,f.useState)("tools");(0,f.useEffect)(()=>{a&&l("tools")},[a?.name]);let m=null!==a,o=a?.name||"",p=async b=>{a&&(cv.debug(`Saving env for ${a.name}`),await c(a.name,b))};return(0,d.jsxs)(bV.A,{open:m,onClose:b,maxWidth:"lg",fullWidth:!0,PaperProps:{sx:{height:"85vh",maxHeight:"85vh"}},children:[(0,d.jsxs)(bW.A,{component:"div",sx:{pb:0},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"baseline",gap:1.5},children:[(0,d.jsx)(k.A,{variant:"h6",children:o}),a&&(0,d.jsx)(k.A,{variant:"body2",sx:{color:(a=>"connected"===a?"success.main":"error"===a?"error.main":"connecting"===a||"initialization"===a?"info.main":"text.secondary")(a.status)},children:(a=>{switch(a){case"connected":return i("mcp.status.connected");case"error":return i("mcp.status.error");case"connecting":return i("mcp.status.connecting");case"initialization":return i("mcp.status.initialization");default:return i("mcp.status.disconnected")}})(a.status)})]}),(0,d.jsx)(w.A,{edge:"end",onClick:b,"aria-label":i("mcp.details.close"),children:(0,d.jsx)(cg.A,{})})]}),(0,d.jsxs)(aP.A,{value:j,onChange:(a,b)=>l(b),sx:{mt:1},children:[(0,d.jsx)(aQ.A,{label:i("mcp.details.tools"),value:"tools"}),(0,d.jsx)(aQ.A,{label:i("mcp.details.resources"),value:"resources"}),(0,d.jsx)(aQ.A,{label:i("mcp.details.prompts"),value:"prompts"}),(0,d.jsx)(aQ.A,{label:i("mcp.details.env"),value:"env"})]})]}),(0,d.jsx)(ce.A,{}),(0,d.jsxs)(bX.A,{sx:{overflow:"auto"},children:[m&&"tools"===j&&(0,d.jsx)(cs,{serverName:o,prefill:h}),m&&"resources"===j&&(0,d.jsx)(cu,{serverName:o,show:"resources"}),m&&"prompts"===j&&(0,d.jsx)(cu,{serverName:o,show:"prompts"}),m&&"env"===j&&(0,d.jsx)(e.default,{sx:{mt:1},children:(0,d.jsx)(at.A,{serverName:o,initialEnv:a?.env||{},onSave:p,onServerRestart:async a=>{await g(a)}})})]})]})},cx=(0,a5.A)((0,d.jsx)("path",{d:"M4 8h4V4H4zm6 12h4v-4h-4zm-6 0h4v-4H4zm0-6h4v-4H4zm6 0h4v-4h-4zm6-10v4h4V4zm-6 4h4V4h-4zm6 6h4v-4h-4zm0 6h4v-4h-4z"}),"Apps"),cy=(0,a5.A)((0,d.jsx)("path",{d:"m22.7 19-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4"}),"Build"),cz=(a,b)=>`${a}\u0000${b}`,cA=a=>{let b=a.replace(/^ui:\/\//i,"").split("/").filter(Boolean).at(-1);if(!b)return a;try{return decodeURIComponent(b).replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}catch{return b.replace(/[-_]+/g," ").replace(/\b\w/g,a=>a.toUpperCase())}},cB=(a,b)=>"string"==typeof a&&a.trim()?a:a instanceof Error&&a.message.trim()?a.message:b,cC=({open:a,onClose:b,onOpenToolTester:c})=>{let{t:g,tp:h}=(0,n.s9)(),[i,j]=(0,f.useState)([]),[l,m]=(0,f.useState)(null),[o,p]=(0,f.useState)(!1),[r,t]=(0,f.useState)(!1),[v,x]=(0,f.useState)(null),y=(0,f.useRef)(0),z=(0,f.useCallback)(async(a=!1)=>{let b=++y.current;m(null),x(null),a?t(!0):p(!0);try{let c=await be.S.loadServerConfigs();if(b!==y.current)return;if(!Array.isArray(c)){j([]),x(cB(c?.error,g("mcp.apps.configFailed")));return}let d=c.filter(a=>!0!==a.disabled&&!0===a.enableMcpApps),e=await Promise.all(d.map(async b=>{a&&(be.S.clearCapabilitiesCache(b.name),be.S.clearToolsCache(b.name));let[c,d]=await Promise.all([be.S.listServerResources(b.name),be.S.listServerTools(b.name)]),e=new Map;for(let a of Array.isArray(d?.tools)?d.tools:[]){let b=(0,cm.Gt)(a?._meta);b&&"string"==typeof a?.name&&a.name.trim()&&e.set(b,[...e.get(b)||[],a.name])}if(c?.error&&0===e.size)return{name:b.name,apps:[],error:cB(c.error,g("mcp.apps.discoveryUnavailable"))};let f=new Map;for(let a of Array.isArray(c?.resources)?c.resources:[]){if(!(0,cm.DG)(a?.uri)||!(0,cm.q$)(a?.mimeType))continue;let c="string"==typeof a.title&&a.title.trim()?a.title.trim():"string"==typeof a.name&&a.name.trim()?a.name.trim():a.uri;f.set(a.uri,{serverName:b.name,uri:a.uri,name:c,description:"string"==typeof a.description&&a.description.trim()?a.description.trim():void 0,mimeType:a.mimeType,toolNames:e.get(a.uri)||[],listedResource:!0})}for(let[a,c]of e)f.has(a)||f.set(a,{serverName:b.name,uri:a,name:cA(a),mimeType:"text/html;profile=mcp-app",toolNames:c,listedResource:!1});return{name:b.name,apps:Array.from(f.values())}}));b===y.current&&j(e)}catch(a){b===y.current&&(j([]),x(cB(a,g("mcp.apps.discoveryFailed"))))}finally{b===y.current&&(p(!1),t(!1))}},[g]);(0,f.useEffect)(()=>{if(!a){y.current+=1,m(null);return}z(!1)},[z,a]),(0,f.useEffect)(()=>{if(!a)return;let b=a=>{let b=a.detail;if(!b?.serverName)return;let c=i.find(a=>l?.startsWith(`${a.name}\u0000`)),d=b.config?.disabled===!0||b.config?.enableMcpApps===!1;c?.name===b.serverName&&d&&m(null),be.S.clearCapabilitiesCache(b.serverName),be.S.clearToolsCache(b.serverName),z(!0)};return window.addEventListener("flujo:mcp-server-config-changed",b),()=>window.removeEventListener("flujo:mcp-server-config-changed",b)},[z,a,l,i]);let A=(0,f.useMemo)(()=>i.flatMap(a=>a.apps),[i]),B=(0,f.useMemo)(()=>A.find(a=>cz(a.serverName,a.uri)===l),[A,l]),C=i.filter(a=>a.error),D=i.length;return(0,d.jsxs)(bV.A,{open:a,onClose:b,fullWidth:!0,maxWidth:"xl","aria-labelledby":"mcp-apps-dashboard-title",children:[(0,d.jsxs)(bW.A,{id:"mcp-apps-dashboard-title",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(cx,{color:"primary"}),g("mcp.apps.title"),(0,d.jsx)(e.default,{sx:{flex:1}}),(0,d.jsx)(ax.A,{title:g("mcp.apps.refresh"),children:(0,d.jsx)("span",{children:(0,d.jsx)(w.A,{"aria-label":g("mcp.apps.refresh"),onClick:()=>void z(!0),disabled:o||r,size:"small",children:r?(0,d.jsx)(ar.default,{size:20}):(0,d.jsx)(cb.A,{fontSize:"small"})})})}),(0,d.jsx)(w.A,{"aria-label":g("mcp.apps.closeAria"),onClick:b,size:"small",children:(0,d.jsx)(cg.A,{fontSize:"small"})})]}),(0,d.jsx)(ce.A,{}),(0,d.jsx)(bX.A,{sx:{p:0,minHeight:{xs:480,md:620}},children:o?(0,d.jsxs)(s.A,{alignItems:"center",justifyContent:"center",spacing:2,sx:{minHeight:420},children:[(0,d.jsx)(ar.default,{}),(0,d.jsx)(k.A,{color:"text.secondary",children:g("mcp.apps.discovering")})]}):v?(0,d.jsx)(q.A,{severity:"error",sx:{m:3},children:v}):0===D?(0,d.jsxs)(s.A,{alignItems:"center",justifyContent:"center",spacing:1,sx:{minHeight:420,p:3},children:[(0,d.jsx)(cx,{color:"disabled",sx:{fontSize:48}}),(0,d.jsx)(k.A,{variant:"h6",children:g("mcp.apps.noServers")}),(0,d.jsx)(k.A,{color:"text.secondary",textAlign:"center",children:g("mcp.apps.noServersHelp")})]}):(0,d.jsxs)(e.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",md:"minmax(300px, 38%) 1fr"},minHeight:620},children:[(0,d.jsxs)(e.default,{sx:{borderRight:{md:"1px solid"},borderColor:{md:"divider"},p:2,overflow:"auto"},children:[(0,d.jsx)(k.A,{variant:"subtitle2",color:"text.secondary",sx:{mb:1},children:g("mcp.apps.summary",{apps:h("mcp.apps.app",A.length),servers:h("mcp.apps.server",D)})}),i.map(a=>(0,d.jsxs)(e.default,{sx:{mb:2.5},children:[(0,d.jsx)(k.A,{variant:"subtitle1",fontWeight:600,sx:{mb:1},children:a.name}),a.error?(0,d.jsxs)(q.A,{severity:"warning",children:[(0,d.jsx)(k.A,{variant:"body2",fontWeight:600,children:g("mcp.apps.unavailable")}),(0,d.jsx)(k.A,{variant:"body2",children:a.error})]}):0===a.apps.length?(0,d.jsx)(k.A,{variant:"body2",color:"text.secondary",children:g("mcp.apps.noneForServer")}):(0,d.jsx)(s.A,{spacing:1,children:a.apps.map(a=>{let b=cz(a.serverName,a.uri);return(0,d.jsx)(bE.A,{variant:"outlined",sx:{borderColor:l===b?"primary.main":"divider"},children:(0,d.jsx)(bF.A,{onClick:()=>m(b),"aria-pressed":l===b,children:(0,d.jsxs)(bU.A,{sx:{py:1.5},children:[(0,d.jsx)(k.A,{variant:"subtitle2",children:a.name}),(0,d.jsx)(k.A,{variant:"caption",color:"text.secondary",sx:{display:"block",overflowWrap:"anywhere"},children:a.uri}),a.toolNames.length>0&&(0,d.jsx)(au.A,{icon:(0,d.jsx)(cy,{}),label:h("mcp.apps.tools",a.toolNames.length),size:"small",sx:{mt:1}}),!a.listedResource&&(0,d.jsx)(au.A,{label:g("mcp.apps.toolDiscovered"),size:"small",variant:"outlined",sx:{mt:1,ml:+(a.toolNames.length>0)}})]})})},b)})})]},a.name)),0===A.length&&0===C.length&&(0,d.jsx)(q.A,{severity:"info",children:g("mcp.apps.none")})]}),(0,d.jsx)(e.default,{sx:{p:{xs:2,md:3},minWidth:0,overflow:"auto"},children:B?(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.A,{variant:"h6",children:B.name}),B.description&&(0,d.jsx)(k.A,{color:"text.secondary",sx:{mt:.5},children:B.description}),(0,d.jsxs)(s.A,{direction:"row",gap:1,flexWrap:"wrap",sx:{mt:1},children:[(0,d.jsx)(au.A,{label:B.serverName,size:"small"}),(0,d.jsx)(au.A,{label:B.mimeType,size:"small",variant:"outlined"})]}),B.toolNames.length>0&&(0,d.jsxs)(q.A,{severity:"info",sx:{mt:2},children:[(0,d.jsx)(k.A,{variant:"body2",sx:{mb:1},children:g("mcp.apps.linkedHelp")}),(0,d.jsx)(s.A,{direction:"row",gap:1,flexWrap:"wrap",children:B.toolNames.map(a=>(0,d.jsx)(u.A,{size:"small",variant:"outlined",startIcon:(0,d.jsx)(cy,{}),onClick:()=>c(B.serverName,a),children:g("mcp.apps.test",{tool:a})},a))})]}),(0,d.jsx)(cn.Ay,{serverName:B.serverName,uri:B.uri},cz(B.serverName,B.uri))]}):(0,d.jsxs)(s.A,{alignItems:"center",justifyContent:"center",spacing:1,sx:{minHeight:360},children:[(0,d.jsx)(cx,{color:"disabled",sx:{fontSize:44}}),(0,d.jsx)(k.A,{variant:"h6",children:g("mcp.apps.select")}),(0,d.jsx)(k.A,{color:"text.secondary",textAlign:"center",children:g("mcp.apps.sandbox")})]})})]})}),(0,d.jsx)(ce.A,{}),(0,d.jsx)(b0.A,{children:(0,d.jsx)(u.A,{onClick:b,children:g("mcp.apps.close")})})]})};var cD=c(53455),cE=c(63650),cF=c(44920),cG=c(7118),cH=c(7503);let cI=(0,a5.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zm0-10h4v6h6v-6h4l-7-7z"}),"Upload");var cJ=c(27409),cK=c(63757),cL=c(11402),cM=c(8165),cN=c(49066);let cO=(0,a5.A)((0,d.jsx)("path",{d:"M6 6h12v12H6z"}),"Stop"),cP=(0,a5.A)((0,d.jsx)("path",{d:"M3 5h2V3c-1.1 0-2 .9-2 2m0 8h2v-2H3zm4 8h2v-2H7zM3 9h2V7H3zm10-6h-2v2h2zm6 0v2h2c0-1.1-.9-2-2-2M5 21v-2H3c0 1.1.9 2 2 2m-2-4h2v-2H3zM9 3H7v2h2zm2 18h2v-2h-2zm8-8h2v-2h-2zm0 8c1.1 0 2-.9 2-2h-2zm0-12h2V7h-2zm0 8h2v-2h-2zm-4 4h2v-2h-2zm0-16h2V3h-2zM7 17h10V7H7zm2-8h6v6H9z"}),"SelectAll");var cQ=c(9863),cR=c(81310),cS=c(18467),cT=c(58585),cU=c(59737),cV=c(58156),cW=c(7329),cX=c(61160),cY=c(2560),cZ=c(61560),c$=c(49351);let c_=(0,j.h)("frontend/components/mcp/MCPServerManager"),c0=({onServerModalToggle:a})=>{let{t:b,tp:g,formatNumber:h}=(0,n.s9)(),{servers:i,isLoading:j,loadError:m,connectingServers:o,toggleServer:q,retryServer:r,deleteServer:s,addServer:x,updateServer:y,setServerFolder:z,setServerFavorite:A,saveEnv:B}=(0,cE.v)(),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!1),[I,J]=(0,f.useState)(""),[K,L]=(0,f.useState)(null),[M,N]=(0,f.useState)(!1),[O,P]=(0,f.useState)("claude"),[Q,R]=(0,f.useState)(null),[S,T]=(0,f.useState)(null),[U,V]=(0,f.useState)(null),[W,X]=(0,f.useState)(),[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)({}),aa=(0,f.useMemo)(()=>Array.from(new Set(i.filter(a=>"stdio"===a.transport&&a.rootPath).map(a=>a.rootPath))).join("|"),[i]);(0,f.useEffect)(()=>{let a=aa.split("|").filter(Boolean);if(0===a.length)return;let b=!1;return(0,cD.M8)(a).then(a=>{b||_(b=>({...b,...a}))}).catch(a=>c_.warn("Server update check failed",a)),()=>{b=!0}},[aa]);let ab=async(a,b)=>{c_.info(`Server ${a} updated from git, refreshing update status`);let c=aa.split("|").filter(Boolean),d=await (0,cD.M8)(c.length>0?c:[b],!0);_(a=>({...a,...d}))},ac=a=>{let b=i.find(b=>b.name===a);if(!b||b.disabled)return void c_.debug(`Not opening details for ${a} (missing or disabled)`);V(a)};(0,f.useEffect)(()=>{},[i]);let ad=async a=>{await q(a,!1),await q(a,!0)},ae=U&&i.find(a=>a.name===U)||null,[af,ag]=(0,f.useState)(""),[ah,ai]=(0,cY.Xk)("flujo-ui:mcp:sort","name-asc"),[aj,ak]=(0,cY.Xk)("flujo-ui:mcp:filter","all"),[al,am]=(0,f.useState)(null),[ao,ap]=(0,cY.Xk)("flujo-ui:mcp:group",cW.FM),[aq,ar]=(0,f.useState)(null),[as,at]=(0,cY.Xk)("flujo-ui:mcp:collapsed",[]),au=(0,f.useMemo)(()=>new Set(as),[as]),[av,aw]=(0,f.useState)(!1),[ay,aA]=(0,f.useState)(new Set),[aB,aD]=(0,f.useState)({open:!1,action:null}),aE=(0,an.A)(),aF=async(a,b)=>{c_.debug(`Toggling server ${a} to ${b?"enabled":"disabled"}`),await q(a,b)},aG=async a=>{c_.debug(`Retrying pulling server status for server: ${a}`),await r(a)},aH=async a=>{c_.debug(`Deleting server: ${a}`),await s(a)},aI=b=>{c_.debug(`Editing server: ${b.name}`),F(b),D(!0),a?.(!0)},aJ=async b=>{c_.debug(`Adding server: ${b.name}`),await x(b),D(!1),F(null),a?.(!1)},aK=async b=>{let c=E?.name;c_.debug(`Updating server: ${c??b.name}`+(c&&c!==b.name?` -> ${b.name}`:"")),await y(b,c),D(!1),F(null),a?.(!1)},aL=async d=>{c_.debug(`Save & Authenticate for server: ${d.name}`);let e=()=>{D(!1),F(null),a?.(!1)};try{E?await y(d,E.name):await x(d);let a=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:d.name})}),f=await a.json();if(!a.ok){if(f.needsClientCredentials)return{status:"needs_client_credentials",error:f.error};return{status:"error",error:f.error||b("mcp.server.oauthFailed")}}if(f.alreadyAuthorized||!f.authorizationUrl)return e(),await r(d.name),{status:"authorized"};let{openOAuthPopup:g}=await c.e(558).then(c.bind(c,60558));return await g({url:f.authorizationUrl,windowName:`oauth_${d.name}`}),e(),await r(d.name),{status:"authorized"}}catch(a){return c_.warn(`Save & Authenticate failed for ${d.name}:`,a),{status:"error",error:a instanceof Error?a.message:b("mcp.server.unknownError")}}},aM=async()=>{let a=(0,cF.Kt)(O);c_.debug(`Importing server configurations from ${a.label} format`),L(null);let{servers:c,errors:d}=a.import(I);if(0===c.length)return void L(d.length>0?d.join("\n"):b("mcp.server.noImportServers"));N(!0);let e=new Set(i.map(a=>a.name)),f=0,g=0,j=[];for(let a of c)try{e.has(a.name)?(await y(a),g++):(await x(a),e.add(a.name),f++)}catch(c){j.push(c.message?`“${a.name}”: ${c.message}`:b("mcp.server.importEntryFailed",{name:a.name}))}N(!1);let k=[...d,...j];if(0===f&&0===g)return void L(k.length>0?k.join("\n"):b("mcp.server.noneImported"));c_.info(`Imported MCP servers: ${f} added, ${g} updated`),k.length>0?L(b("mcp.server.partialImport",{added:h(f),updated:h(g),problems:k.join("\n")})):(H(!1),J(""))},aN=()=>{H(!1),J(""),L(null)},aO=(0,f.useMemo)(()=>{c_.debug("Filtering and sorting servers",{searchTerm:af,sortOption:ah,filterOption:aj});let a=i;if(""!==af.trim()){let b=af.toLowerCase();a=i.filter(a=>a.name.toLowerCase().includes(b)||a.rootPath?.toLowerCase().includes(b))}return"all"!==aj&&(a=a.filter(a=>{switch(aj){case"connected":return"connected"===a.status;case"disconnected":return"disconnected"===a.status;case"error":return"error"===a.status;case"enabled":return!a.disabled;case"disabled":return a.disabled;case"stdio":case"websocket":case"sse":case"streamable":return a.transport===aj;default:return!0}})),(0,cX.oO)(a,ah)},[i,af,ah,aj]),{ref:aP,showBackToTop:aQ,scrollToTop:aR}=(0,cZ.R)("flujo-ui:scroll:mcp",{deps:[j,aO.length]}),aS=(0,f.useMemo)(()=>(0,cW.yF)(i,a=>a.folder),[i]),aT=a=>b(`mcp.server.sort.${a}`),aU=(0,f.useMemo)(()=>"folder"===ao?(0,cW.Je)(aO,a=>a.folder,b("mcp.server.ungrouped")):"sort"===ao?(0,cW.Az)(aO,a=>{let c=(0,cX.mO)(a,ah);return"status:connected"===c.key?{...c,label:b("mcp.status.connected")}:"status:error"===c.key?{...c,label:b("mcp.status.error")}:"status:auth"===c.key?{...c,label:b("mcp.server.requiresAuth")}:"status:disconnected"===c.key?{...c,label:b("mcp.status.disconnected")}:"transport:stdio"===c.key?{...c,label:b("mcp.server.transport.stdio")}:"transport:websocket"===c.key?{...c,label:b("mcp.server.transport.websocket")}:"transport:sse"===c.key?{...c,label:b("mcp.server.transport.sse")}:"transport:streamable"===c.key?{...c,label:b("mcp.server.transport.streamable")}:c}):[],[ao,aO,ah,b]),aV=a=>{ap(a),ar(null)},aW=async()=>{c_.debug("Bulk enabling servers",{selectedServers:Array.from(ay)});let a=Array.from(ay).map(a=>aF(a,!0));await Promise.all(a),aA(new Set),aD({open:!1,action:null})},aX=async()=>{c_.debug("Bulk disabling servers",{selectedServers:Array.from(ay)});let a=Array.from(ay).map(a=>aF(a,!1));await Promise.all(a),aA(new Set),aD({open:!1,action:null})},aY=(a,b)=>{let c=new Set(ay);b?c.add(a):c.delete(a),aA(c)},aZ=()=>{am(null)},a$=a=>{ai(a),aZ()},a_=a=>(0,d.jsx)(p,{servers:a.map(a=>({...a,tools:[]})),isLoading:j,loadError:m,onServerSelect:ac,onServerToggle:aF,onServerRetry:aG,onServerDelete:aH,onServerEdit:aI,selectionMode:av,selectedServers:ay,onServerSelectionChange:aY,updates:$,onServerUpdated:ab,folders:aS,onServerSetFolder:z,onServerToggleFavorite:A});return(0,d.jsxs)(e.default,{sx:{color:"text.primary"},children:[(0,d.jsx)(cV.default,{eyebrowKey:"mcp.server.eyebrow",titleKey:"mcp.server.title",descriptionKey:"mcp.server.description",icon:cT.A,actions:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.A,{variant:"outlined",color:"primary",onClick:a=>T(a.currentTarget),startIcon:(0,d.jsx)(cI,{}),endIcon:(0,d.jsx)(cJ.A,{}),sx:{textTransform:"none",fontWeight:500},children:b("mcp.server.import")}),(0,d.jsx)(cG.A,{anchorEl:S,open:!!S,onClose:()=>T(null),children:cF._i.map(a=>(0,d.jsx)(a4.A,{onClick:()=>{P(a.id),J(""),L(null),T(null),H(!0)},children:(0,d.jsx)(b_.A,{primary:b("mcp.server.format",{name:a.label})})},a.id))}),(0,d.jsx)(u.A,{variant:"contained",color:"primary",onClick:a=>R(a.currentTarget),startIcon:(0,d.jsx)(b9.A,{}),endIcon:(0,d.jsx)(cJ.A,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:b("mcp.server.export")}),(0,d.jsx)(cG.A,{anchorEl:Q,open:!!Q,onClose:()=>R(null),children:cF._i.map(a=>(0,d.jsx)(a4.A,{onClick:()=>(a=>{let b=(0,cF.Kt)(a);c_.debug(`Exporting server configurations in ${b.label} format`),R(null);let c=new Blob([JSON.stringify(b.export(i,{proxyBaseUrl:""}),null,2)],{type:"application/json"}),d=URL.createObjectURL(c),e=document.createElement("a");e.href=d,e.download=b.fileName,document.body.appendChild(e),e.click(),document.body.removeChild(e),URL.revokeObjectURL(d)})(a.id),children:(0,d.jsx)(b_.A,{primary:b("mcp.server.format",{name:a.label})})},a.id))}),(0,d.jsx)(u.A,{variant:"contained",color:"primary","data-tour":"add-mcp-server",onClick:()=>{F(null),D(!0),a?.(!0)},startIcon:(0,d.jsx)(az.A,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:b("mcp.server.add")})]})}),(0,d.jsx)(l.A,{elevation:0,variant:"outlined",sx:{mx:{xs:2,md:3,lg:4},mt:3,mb:1.5,p:1.2,borderRadius:3},children:(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(t.A,{placeholder:b("mcp.server.search"),variant:"outlined",size:"small",fullWidth:!0,value:af,onChange:a=>ag(a.target.value),InputProps:{startAdornment:(0,d.jsx)(v.A,{position:"start",children:(0,d.jsx)(b1.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1,alignItems:"center",flexWrap:"wrap"},children:[(0,d.jsx)(u.A,{size:"small",variant:av?"contained":"outlined",onClick:()=>{aw(!av),av&&aA(new Set)},startIcon:(0,d.jsx)(cP,{}),children:b("mcp.server.select")}),av&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.A,{size:"small",onClick:()=>{ay.size===aO.length?aA(new Set):aA(new Set(aO.map(a=>a.name)))},disabled:0===aO.length,children:ay.size===aO.length&&ay.size>0?b("mcp.server.deselectAll"):b("mcp.server.selectAll")}),ay.size>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(u.A,{size:"small",variant:"contained",color:"success",onClick:()=>aD({open:!0,action:"enable"}),startIcon:(0,d.jsx)(cN.A,{}),children:b("mcp.server.enableCount",{count:h(ay.size)})}),(0,d.jsx)(u.A,{size:"small",variant:"contained",color:"error",onClick:()=>aD({open:!0,action:"disable"}),startIcon:(0,d.jsx)(cO,{}),children:b("mcp.server.disableCount",{count:h(ay.size)})})]})]}),(0,d.jsx)(ax.A,{title:b("mcp.server.openApps"),children:(0,d.jsx)(w.A,{size:"small","aria-label":b("mcp.server.openApps"),onClick:()=>Z(!0),color:Y?"primary":"default",sx:{border:`1px solid ${aE.palette.divider}`,backgroundColor:aE.palette.background.default},children:(0,d.jsx)(cx,{fontSize:"small"})})}),(0,d.jsx)(w.A,{size:"small",onClick:a=>ar(a.currentTarget),color:"none"!==ao?"primary":"default",sx:{border:`1px solid ${aE.palette.divider}`,backgroundColor:aE.palette.background.default},title:b("mcp.server.groupCards"),"aria-label":b("mcp.server.groupCards"),children:(0,d.jsx)(cQ.A,{fontSize:"small"})}),(0,d.jsx)(w.A,{size:"small",onClick:a=>{am(a.currentTarget)},"aria-label":b("mcp.server.sort"),sx:{border:`1px solid ${aE.palette.divider}`,backgroundColor:aE.palette.background.default},children:(0,d.jsx)(cK.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:3},children:[(0,d.jsxs)(k.A,{variant:"body2",color:"textSecondary",children:[g("mcp.server.count",i.length,{shown:h(aO.length),total:h(i.length)}),af&&b("mcp.server.matching",{search:af}),"all"!==aj&&b("mcp.server.filtered",{filter:(a=>{switch(a){case"connected":return b("mcp.status.connected");case"disconnected":return b("mcp.status.disconnected");case"error":return b("mcp.status.error");case"enabled":return b("mcp.server.enable");case"disabled":return b("mcp.server.disable");case"stdio":return b("mcp.server.transport.stdio");case"websocket":return b("mcp.server.transport.websocket");case"sse":return b("mcp.server.transport.sse");case"streamable":return b("mcp.server.transport.streamable");default:return a}})(aj)})]}),(0,d.jsx)(k.A,{variant:"body2",color:"textSecondary",children:b("mcp.server.sortedBy",{sort:aT(ah)})})]}),(0,d.jsx)(e.default,{ref:aP,sx:{px:2,flex:1,overflow:"auto"},children:"none"===ao||j||m||0===aO.length?a_(aO):aU.map(a=>(0,d.jsx)(cU.A,{label:a.label,count:a.items.length,expanded:!au.has(a.key),onToggle:()=>(a=>{at(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])})(a.key),showFolderIcon:"folder"===ao,children:a_(a.items)},a.key))}),(0,d.jsxs)(cG.A,{anchorEl:aq,open:!!aq,onClose:()=>ar(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(a4.A,{selected:"none"===ao,onClick:()=>aV("none"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cR.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:b("mcp.server.group.none")})]}),(0,d.jsxs)(a4.A,{selected:"folder"===ao,onClick:()=>aV("folder"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cS.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:b("mcp.server.group.folder")})]}),(0,d.jsxs)(a4.A,{selected:"sort"===ao,onClick:()=>aV("sort"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cQ.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:b("mcp.server.group.sort")})]})]}),(0,d.jsxs)(cG.A,{anchorEl:al,open:!!al,onClose:aZ,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(a4.A,{onClick:()=>a$("name-asc"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cL.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:aT("name-asc")})]}),(0,d.jsxs)(a4.A,{onClick:()=>a$("name-desc"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cL.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(b_.A,{primary:aT("name-desc")})]}),(0,d.jsx)(ce.A,{}),(0,d.jsxs)(a4.A,{onClick:()=>a$("status-connected"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(cM.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:aT("status-connected")})]}),(0,d.jsxs)(a4.A,{onClick:()=>a$("status-disconnected"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(aC.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:aT("status-disconnected")})]}),(0,d.jsx)(ce.A,{}),(0,d.jsxs)(a4.A,{onClick:()=>a$("transport"),children:[(0,d.jsx)(b$.A,{children:(0,d.jsx)(b4.A,{fontSize:"small"})}),(0,d.jsx)(b_.A,{primary:aT("transport")})]})]}),(0,d.jsxs)(bV.A,{open:aB.open,onClose:()=>aD({open:!1,action:null}),children:[(0,d.jsx)(bW.A,{children:"enable"===aB.action?b("mcp.server.enableTitle"):b("mcp.server.disableTitle")}),(0,d.jsxs)(bX.A,{children:[(0,d.jsx)(cH.A,{children:"enable"===aB.action?g("mcp.server.confirmEnable",ay.size):g("mcp.server.confirmDisable",ay.size)}),(0,d.jsx)(e.default,{sx:{mt:2},children:Array.from(ay).map(a=>(0,d.jsxs)(k.A,{variant:"body2",sx:{ml:2},children:["• ",a]},a))})]}),(0,d.jsxs)(b0.A,{children:[(0,d.jsx)(u.A,{onClick:()=>aD({open:!1,action:null}),children:b("mcp.server.cancel")}),(0,d.jsx)(u.A,{onClick:"enable"===aB.action?aW:aX,variant:"contained",color:"enable"===aB.action?"success":"error",children:"enable"===aB.action?b("mcp.server.enable"):b("mcp.server.disable")})]})]}),(0,d.jsxs)(bV.A,{open:G,onClose:aN,maxWidth:"md",fullWidth:!0,children:[(0,d.jsx)(bW.A,{children:b("mcp.server.importTitle",{format:(0,cF.Kt)(O).label})}),(0,d.jsxs)(bX.A,{children:[(0,d.jsx)(cH.A,{sx:{mb:2},children:b("mcp.server.importHelp",{format:(0,cF.Kt)(O).label,example:'{ "mcpServers": { ... } }'})}),(0,d.jsx)(t.A,{multiline:!0,minRows:10,maxRows:20,fullWidth:!0,value:I,onChange:a=>{J(a.target.value),K&&L(null)},placeholder:'{\n "mcpServers": {\n "my-server": {\n "command": "npx",\n "args": ["-y", "my-mcp-server"],\n "env": { "API_KEY": "..." }\n }\n }\n}',variant:"outlined",spellCheck:!1,InputProps:{sx:{fontFamily:"monospace",fontSize:"0.85rem"}},disabled:M}),K&&(0,d.jsx)(cH.A,{component:"pre",sx:{mt:2,color:"error.main",whiteSpace:"pre-wrap",fontSize:"0.85rem"},children:K})]}),(0,d.jsxs)(b0.A,{children:[(0,d.jsx)(u.A,{onClick:aN,disabled:M,children:b("mcp.server.cancel")}),(0,d.jsx)(u.A,{onClick:aM,variant:"contained",color:"primary",disabled:M||""===I.trim(),startIcon:(0,d.jsx)(cI,{}),children:M?b("mcp.server.importing"):b("mcp.server.import")})]})]}),(0,d.jsx)(ch,{isOpen:C,onAdd:aJ,onClose:()=>{D(!1),F(null),a?.(!1)},initialConfig:E,onUpdate:aK,onRestartAfterUpdate:aG,onSaveAndAuthenticate:aL}),(0,d.jsx)(cw,{server:ae?{name:ae.name,status:ae.status,env:ae.env}:null,onClose:()=>{V(null),X(void 0),U&&r(U)},onSaveEnv:B,onServerRestart:ad,toolPrefill:W}),(0,d.jsx)(cC,{open:Y,onClose:()=>Z(!1),onOpenToolTester:(a,b)=>{Z(!1),X({toolName:b,arguments:{}}),V(a)}}),(0,d.jsx)(c$.A,{show:aQ,onClick:aR})]})},c1=()=>(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(c0,{})}),c2=(0,j.h)("app/mcp/page");function c3(){return c2.debug("Rendering MCPPage"),(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(c1,{})})}},32939:(a,b,c)=>{Promise.resolve().then(c.bind(c,29866))},33253:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},51016:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Moe\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\mcp\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx","default")},55511:a=>{"use strict";a.exports=require("crypto")},61160:(a,b,c)=>{"use strict";c.d(b,{mO:()=>f,oO:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},63757:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z"}),"Sort")},65343:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error")},72691:(a,b,c)=>{Promise.resolve().then(c.bind(c,51016))},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},81310:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m19.81 14.99 1.19-.92-1.43-1.43-1.19.92zm-.45-4.72L21 9l-9-7-2.91 2.27 7.87 7.88zM3.27 1 2 2.27l4.22 4.22L3 9l1.63 1.27L12 16l2.1-1.63 1.43 1.43L12 18.54l-7.37-5.73L3 14.07l9 7 4.95-3.85L20.73 21 22 19.73z"}),"LayersClear")},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},86971:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["mcp",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,51016)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/mcp/page",pathname:"/mcp",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/mcp/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
75
|
+
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}},87104:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Clear")}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,773,3954,8745,7674,8730,5642,3418,7147,8897,6607,7883,5494,5807,5446,3262,1532,5444,1314,2069,9490,1227,1403,3422],()=>b(b.s=86971));module.exports=c})();
|