flujo-ai 3.16.0 → 3.18.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 +202 -187
- package/.next/app-path-routes-manifest.json +9 -7
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +6 -6
- package/.next/react-loadable-manifest.json +6 -6
- 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 +1 -1
- package/.next/server/app/api/backup/route.js +1 -1
- package/.next/server/app/api/backup/route.js.nft.json +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/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js.nft.json +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]/route.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route.js +1 -1
- package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route.js +1 -17
- package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route.js +1 -0
- package/.next/server/app/api/flow/improve/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
- package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +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.js +1 -0
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/flow/route.js +1 -1
- package/.next/server/app/api/flow/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/init/route.js.nft.json +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/cancel/route.js +1 -1
- package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route.js +1 -1
- package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route.js +1 -1
- package/.next/server/app/api/model/route.js.nft.json +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route.js +1 -1
- package/.next/server/app/api/model/test/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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/route.js +1 -1
- package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route.js +1 -1
- package/.next/server/app/api/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/restore/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/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +9 -9
- package/.next/server/app/chat/page.js.nft.json +1 -1
- 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 +2 -2
- package/.next/server/app/docs/page.js +7 -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 +2 -2
- package/.next/server/app/executions/page.js +2 -2
- 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 +2 -2
- package/.next/server/app/flows/page.js +3 -39
- 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 +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/mcp/page.js +23 -27
- 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 +3 -3
- package/.next/server/app/mcp-flows/route.js.nft.json +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.js.nft.json +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 +2 -2
- package/.next/server/app/models/page.js +3 -3
- package/.next/server/app/models/page.js.nft.json +1 -1
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- 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.js.nft.json +1 -1
- 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 +2 -2
- package/.next/server/app/v1/chat/completions/route.js +1 -2
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +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.js +2 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +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]/respond/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +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]/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route.js +1 -1
- package/.next/server/app/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +9 -7
- package/.next/server/chunks/1403.js +4 -2
- package/.next/server/chunks/1912.js +38 -0
- package/.next/server/chunks/2350.js +1 -0
- package/.next/server/chunks/{7531.js → 2439.js} +2 -2
- package/.next/server/chunks/{5504.js → 264.js} +2 -2
- package/.next/server/chunks/2859.js +5 -5
- package/.next/server/chunks/3304.js +1 -1
- package/.next/server/chunks/3310.js +35 -0
- package/.next/server/chunks/453.js +1 -0
- package/.next/server/chunks/4681.js +1 -1
- package/.next/server/chunks/5311.js +1 -0
- package/.next/server/chunks/6037.js +41 -0
- package/.next/server/chunks/6069.js +6 -0
- package/.next/server/chunks/6201.js +5 -0
- package/.next/server/chunks/6826.js +1 -0
- package/.next/server/chunks/6936.js +9 -7
- package/.next/server/chunks/701.js +1 -1
- package/.next/server/chunks/7186.js +2 -0
- package/.next/server/chunks/7214.js +2 -2
- package/.next/server/chunks/724.js +1 -1
- package/.next/server/chunks/7362.js +8 -8
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7635.js +2 -2
- package/.next/server/chunks/7821.js +1 -0
- package/.next/server/chunks/7982.js +1 -0
- package/.next/server/chunks/8227.js +2 -0
- package/.next/server/chunks/8342.js +1 -0
- package/.next/server/chunks/8739.js +1 -1
- package/.next/server/chunks/906.js +35 -0
- package/.next/server/chunks/{5888.js → 9314.js} +3 -3
- package/.next/server/chunks/9687.js +1 -0
- package/.next/server/chunks/9880.js +1 -0
- package/.next/server/chunks/9938.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +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/pages-manifest.json +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/Fdh7zqKv38txmpLAxepeR/_buildManifest.js +1 -0
- package/.next/static/chunks/1374-e084b3c40554288a.js +1 -0
- package/.next/static/chunks/1892-359187893bbc7f3a.js +1 -0
- package/.next/static/chunks/{7126-2bafddf1b09cacac.js → 2084-2463e1d781bad2a6.js} +1 -1
- package/.next/static/chunks/4105-8fddb00196bf3c6d.js +1 -0
- package/.next/static/chunks/4244-6f399c7ff9980207.js +1 -0
- package/.next/static/chunks/4809-423a2a4a90d02f2c.js +1 -0
- package/.next/static/chunks/6084-68908a197e957e5f.js +1 -0
- package/.next/static/chunks/6509-3380826fd7c82b4e.js +1 -0
- package/.next/static/chunks/7290-fd5bb2c94fd7f605.js +1 -0
- package/.next/static/chunks/{7583.8a518353bd072db9.js → 7583.b6c2f8874b6b89cd.js} +1 -1
- package/.next/static/chunks/8098-297bf477152a565b.js +1 -0
- package/.next/static/chunks/{8187.5d6523f30e705998.js → 8187.15bf331f5318c00f.js} +1 -1
- package/.next/static/chunks/{9164-36fedeb944fa71e9.js → 9164-a56181e5e93cc47e.js} +1 -1
- package/.next/static/chunks/924-64f908860caf1a35.js +1 -0
- package/.next/static/chunks/9286-6ea909e5bf70a97e.js +1 -0
- package/.next/static/chunks/9747-ffb8be5e59700c27.js +8 -0
- package/.next/static/chunks/app/api/backup/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/browse/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/env/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/flow/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/git/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/init/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/model/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/restore/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/storage/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/update/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/chat/page-6486974f4a6c7b57.js +1 -0
- package/.next/static/chunks/app/docs/page-5da72cc6db51f238.js +1 -0
- package/.next/static/chunks/app/executions/page-fe19f6a1bd3fe05c.js +1 -0
- package/.next/static/chunks/app/flows/page-3b84093cdf2aee84.js +1 -0
- package/.next/static/chunks/app/mcp/page-355386ec2a542e42.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/models/page-20c80d398bf83fc5.js +1 -0
- package/.next/static/chunks/app/settings/page-9430dfdaff87d70c.js +1 -0
- package/.next/static/chunks/app/v1/chat/completions/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/app/v1/models/route-1691635994fcddb5.js +1 -0
- package/.next/static/chunks/{webpack-4015bd6f241940a1.js → webpack-4880945dd240d429.js} +1 -1
- package/.next/trace +7 -7
- package/.next/types/app/api/flow/improve/route.ts +347 -0
- package/.next/types/app/api/flow/quick-chat/route.ts +347 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/.next/server/chunks/117.js +0 -1
- package/.next/server/chunks/1877.js +0 -31
- package/.next/server/chunks/1905.js +0 -2
- package/.next/server/chunks/3243.js +0 -1
- package/.next/server/chunks/5558.js +0 -1
- package/.next/server/chunks/5587.js +0 -1
- package/.next/server/chunks/5838.js +0 -1
- package/.next/server/chunks/5935.js +0 -2
- package/.next/server/chunks/6195.js +0 -37
- package/.next/server/chunks/6283.js +0 -2
- package/.next/server/chunks/6523.js +0 -1
- package/.next/server/chunks/7328.js +0 -1
- package/.next/server/chunks/8126.js +0 -1
- package/.next/server/chunks/8312.js +0 -5
- package/.next/server/chunks/8434.js +0 -1
- package/.next/server/chunks/9188.js +0 -1
- package/.next/server/chunks/9688.js +0 -2
- package/.next/server/chunks/9989.js +0 -1
- package/.next/static/chunks/1226-af62e7a89fa9032e.js +0 -1
- package/.next/static/chunks/1979-e2d922370ecef69f.js +0 -1
- package/.next/static/chunks/2158-0d6bb5a428ed0688.js +0 -1
- package/.next/static/chunks/510-e39ad4e1fae6dd1f.js +0 -1
- package/.next/static/chunks/539-8ddf886986877cfc.js +0 -1
- package/.next/static/chunks/5781-4328d17aad13f908.js +0 -8
- package/.next/static/chunks/5961-828f4f7efc3e1381.js +0 -1
- package/.next/static/chunks/687-98ba5f5043866f48.js +0 -1
- package/.next/static/chunks/6902-cba4e59c4295b4a0.js +0 -1
- package/.next/static/chunks/8862-1170dad1d6f3cd39.js +0 -1
- package/.next/static/chunks/8867-3f7163974605427b.js +0 -1
- package/.next/static/chunks/8989-401559d9f3bc80a0.js +0 -1
- package/.next/static/chunks/9414-3cd5c3976cba66b2.js +0 -1
- package/.next/static/chunks/app/api/backup/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/browse/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/env/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/flow/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/git/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/init/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/model/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/restore/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/storage/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/update/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/chat/page-c759cf382bcabd77.js +0 -1
- package/.next/static/chunks/app/docs/page-1d349e2d82f7b104.js +0 -1
- package/.next/static/chunks/app/executions/page-4155f9f682ee6f84.js +0 -1
- package/.next/static/chunks/app/flows/page-375150edff9134a3.js +0 -1
- package/.next/static/chunks/app/mcp/page-5234695929980171.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/models/page-4fc4d100a8b1d4b4.js +0 -1
- package/.next/static/chunks/app/settings/page-9a2bfb8d5bdba29e.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-7248529e02c31012.js +0 -1
- package/.next/static/chunks/app/v1/models/route-7248529e02c31012.js +0 -1
- package/.next/static/z7fsG7kblb_yxkUhOxn-G/_buildManifest.js +0 -1
- /package/.next/static/{z7fsG7kblb_yxkUhOxn-G → Fdh7zqKv38txmpLAxepeR}/_ssgManifest.js +0 -0
|
@@ -1,15 +1,10 @@
|
|
|
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")},578:(a,b,c)=>{Promise.resolve().then(c.bind(c,51016))},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")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},15059:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2m6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56M12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96M4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2s.06 1.34.14 2zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56m2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8M12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96M14.34 14H9.66c-.09-.66-.16-1.32-.16-2s.07-1.35.16-2h4.68c.09.65.16 1.32.16 2s-.07 1.34-.16 2m.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56M16.36 14c.08-.66.14-1.32.14-2s-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2z"}),"Language")},18730:(a,b,c)=>{Promise.resolve().then(c.bind(c,77048))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},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")},31411:(a,b,c)=>{"use strict";c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(79515),g=c(81637),h=c(95587),i=c(67191),j=c(82605),k=c(98256),l=c(7675),m=c(94367),n=c(37674);let o=({schema:a,values:b,onChange:c,size:o="small"})=>{let[p,q]=(0,e.useState)({}),r=a?.properties??{},s=Array.isArray(a?.required)?a.required:[],t=Object.keys(r);if(0===t.length)return(0,d.jsx)(f.default,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let u=(a,d)=>{let e={...b};void 0===d?delete e[a]:e[a]=d,c(e)};return(0,d.jsx)(g.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:t.map(a=>{let c=r[a]??{},e=s.includes(a)?`${a} *`:a,t="string"==typeof c.description?c.description:"";if("boolean"===c.type)return(0,d.jsx)(h.A,{control:(0,d.jsx)(i.A,{size:o,checked:!0===b[a],onChange:b=>u(a,b.target.checked)}),label:(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.default,{variant:"body2",children:e}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",children:t})]})},a);if(Array.isArray(c.enum)&&c.enum.length>0){let g=b[a];return(0,d.jsxs)(j.A,{size:o,fullWidth:!0,children:[(0,d.jsx)(k.A,{id:`schema-param-${a}`,children:e}),(0,d.jsx)(l.A,{labelId:`schema-param-${a}`,label:e,value:c.enum.includes(g)?g:"",onChange:b=>u(a,b.target.value),children:c.enum.map(a=>(0,d.jsx)(m.A,{value:a,children:String(a)},String(a)))}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:t})]},a)}if("number"===c.type||"integer"===c.type)return(0,d.jsx)(n.A,{fullWidth:!0,size:o,type:"number",label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>{let d=b.target.value;if(""===d)return void u(a,void 0);let e="integer"===c.type?parseInt(d,10):parseFloat(d);u(a,Number.isNaN(e)?void 0:e)},helperText:t},a);if("object"===c.type||"array"===c.type){let f=p[a]??(void 0!==b[a]?JSON.stringify(b[a],null,2):""),g=null;if(f.trim())try{JSON.parse(f)}catch{g="Not valid JSON yet"}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,multiline:!0,minRows:2,label:`${e} (JSON ${c.type})`,value:f,error:!!g,helperText:g??t,onChange:b=>{let c=b.target.value;if(q(b=>({...b,[a]:c})),!c.trim())return void u(a,void 0);try{u(a,JSON.parse(c))}catch{}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},a)}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>u(a,""===b.target.value?void 0:b.target.value),helperText:t},a)})})}},33873:a=>{"use strict";a.exports=require("path")},35406:(a,b,c)=>{"use strict";c.d(b,{A:()=>x});var d=c(38301),e=c(43249),f=c(37489),g=c(2783),h=c(4007),i=c(6638),j=c(18168),k=c(60839),l=c(68333),m=c(54716),n=c(6636),o=c(79515),p=c(29565),q=c(33105);function r(a){return(0,q.Ay)("MuiLink",a)}let s=(0,p.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var t=c(97287),u=c(21124);let v={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},w=(0,j.Ay)(o.default,{name:"MuiLink",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[`underline${(0,i.A)(c.underline)}`],"button"===c.component&&b.button]}})((0,l.A)(({theme:a})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:a,ownerState:b})=>"always"===a&&"inherit"!==b.color,style:{textDecorationColor:"var(--Link-underlineColor)"}},...Object.entries(a.palette).filter((0,m.A)()).map(([b])=>({props:{underline:"always",color:b},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.4)`:(0,f.X4)(a.palette[b].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.secondaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(a.vars||a).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${s.focusVisible}`]:{outline:"auto"}}}]}))),x=d.forwardRef(function(a,b){let c=(0,n.b)({props:a,name:"MuiLink"}),j=(0,k.A)(),{className:l,color:m="primary",component:o="a",onBlur:p,onFocus:q,TypographyClasses:s,underline:x="always",variant:y="inherit",sx:z,...A}=c,[B,C]=d.useState(!1),D={...c,color:m,component:o,focusVisible:B,underline:x,variant:y},E=(a=>{let{classes:b,component:c,focusVisible:d,underline:e}=a,f={root:["root",`underline${(0,i.A)(e)}`,"button"===c&&"button",d&&"focusVisible"]};return(0,g.A)(f,r,b)})(D);return(0,u.jsx)(w,{color:m,className:(0,e.A)(E.root,l),classes:s,component:o,onBlur:a=>{(0,h.A)(a.target)||C(!1),p&&p(a)},onFocus:a=>{(0,h.A)(a.target)&&C(!0),q&&q(a)},ref:b,ownerState:D,variant:y,...A,sx:[...void 0===v[m]?[{color:m}]:[],...Array.isArray(z)?z:[z]],style:{...A.style,..."always"===x&&"inherit"!==m&&!v[m]&&{"--Link-underlineColor":(({theme:a,ownerState:b})=>{let c=b.color,d=(0,t.Yn)(a,`palette.${c}.main`,!1)||(0,t.Yn)(a,`palette.${c}`,!1)||b.color,e=(0,t.Yn)(a,`palette.${c}.mainChannel`)||(0,t.Yn)(a,`palette.${c}Channel`);return"vars"in a&&e?`rgba(${e} / 0.4)`:(0,f.X4)(d,.4)})({theme:j,ownerState:D})}}})})},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},49066:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M8 5v14l11-7z"}),"PlayArrow")},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\\\\MarioAndreschak\\\\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\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx","default")},55511:a=>{"use strict";a.exports=require("crypto")},61615:(a,b,c)=>{"use strict";c.d(b,{default:()=>g});var d=c(21124);c(38301);var e=c(81637),f=c(8521);let g=({size:a="medium",color:b="primary",className:c="",sx:g={}})=>{let h="white"===b?{color:"#fff",...g}:g;return(0,d.jsxs)(e.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...h},className:c,role:"status",children:[(0,d.jsx)(f.default,{size:{small:16,medium:24,large:36}[a],color:"white"===b?"inherit":b,"aria-hidden":"true"}),(0,d.jsx)(e.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},65343:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),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")},71472:(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\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\MarioAndreschak\\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\\MarioAndreschak\\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}`:""}
|
|
2
|
-
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}}},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},77048:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>dr});var d=c(21124),e=c(81637),f=c(38301),g=c.n(f),h=c(19815),i=c(84040),j=c(8165),k=c(93083),l=c(65343),m=c(53222),n=c(12033),o=c(91034),p=c(27080);let q=(0,p.A)((0,d.jsx)("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2m-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2m3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1z"}),"Lock"),r=(0,p.A)((0,d.jsx)("path",{d:"M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z"}),"Login"),s=(0,p.A)((0,d.jsx)("path",{d:"M16.91 14.09 17 14l2 2 4-4.04L21 10h-8.17zM3.98 6.81C2.2 7.85 1 9.79 1 12c0 3.31 2.69 6 6 6 2.21 0 4.15-1.2 5.18-2.99l7.59 7.59 1.41-1.41L2.81 2.81 1.39 4.22zm5.93 5.93C9.58 14.03 8.4 15 7 15c-1.65 0-3-1.35-3-3 0-1.4.97-2.58 2.26-2.91z"}),"KeyOff"),t=(0,p.A)((0,d.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39"}),"Public");var u=c(38941),v=c(1312);let w=(0,p.A)((0,d.jsx)("path",{d:"m12 16.5 4-4h-3v-9h-2v9H8zm9-13h-6v1.99h6v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1.1-.9-2-2-2"}),"SystemUpdateAlt");var x=c(61615),y=c(78352),z=c(28055),A=c(41893),B=c(56685);let C=(0,p.A)((0,d.jsx)("path",{d:"m1 9 2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9m8 8 3 3 3-3c-1.65-1.66-4.34-1.66-6 0m-4-4 2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13"}),"Wifi"),D=(0,p.A)([(0,d.jsx)("circle",{cx:"20",cy:"12",r:"2"},"0"),(0,d.jsx)("circle",{cx:"4",cy:"12",r:"2"},"1"),(0,d.jsx)("circle",{cx:"12",cy:"20",r:"2"},"2"),(0,d.jsx)("path",{d:"M10.05 8.59 6.03 4.55h-.01l-.31-.32-1.42 1.41 4.02 4.05.01-.01.31.32zm3.893.027 4.405-4.392L19.76 5.64l-4.405 4.393zM10.01 15.36l-1.42-1.41-4.03 4.01-.32.33 1.41 1.41 4.03-4.02zm9.75 2.94-3.99-4.01-.36-.35L14 15.35l3.99 4.01.35.35z"},"3"),(0,d.jsx)("circle",{cx:"12",cy:"4",r:"2"},"4")],"Stream"),E=(0,p.A)((0,d.jsx)("path",{d:"M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5zm2.5-.5h1.5V15H10v-4.5h1.5V9H7zm5.5 0H14V15h1.5v-4.5H17V9h-4.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5m0 2.5h-2v-1h2z"}),"Http"),F=({transport:a,size:b="small"})=>{let c=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(B.A,{fontSize:"small"}),color:"#1976d2",bgColor:"#e3f2fd"};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(C,{fontSize:"small"}),color:"#2e7d32",bgColor:"#e8f5e8"};case"sse":return{label:"SSE",icon:(0,d.jsx)(D,{fontSize:"small"}),color:"#f57c00",bgColor:"#fff3e0"};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(E,{fontSize:"small"}),color:"#00796b",bgColor:"#e0f2f1"};default:return{label:"UNKNOWN",icon:(0,d.jsx)(B.A,{fontSize:"small"}),color:"#757575",bgColor:"#f5f5f5"}}})();return(0,d.jsx)(A.A,{icon:c.icon,label:c.label,size:b,sx:{backgroundColor:c.bgColor,color:c.color,fontWeight:500,fontSize:"small"===b?"0.75rem":"0.875rem",height:"small"===b?24:32,"& .MuiChip-icon":{color:c.color}}})};var G=c(40512),H=c(83899),I=c(52327),J=c(19925),K=c(20830),L=c(79515),M=c(88745),N=c(95587),O=c(77028),P=c(89490),Q=c(71439),R=c(50553),S=c(84233);let T=(0,p.A)((0,d.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8"}),"RadioButtonUnchecked"),U=(0,h.h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),V=new Map;async function W(a,b=!1){let c=Date.now(),d={},e=[];for(let f of new Set(a.filter(Boolean))){let a=V.get(f);!b&&a&&c-a.at<6e5?d[f]=a.info:e.push(f)}if(e.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:e})}),b=await a.json();if(a.ok&&b.results)for(let[a,e]of Object.entries(b.results))V.set(a,{at:c,info:e}),d[a]=e;else U.warn("Batch update check failed",b.error)}catch(a){U.warn("Batch update check request failed",a)}return d}async function X(a){try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pullUpdates",savePath:a})}),c=await b.json();if(!b.ok)return{success:!1,error:c.error||"Failed to pull updates"};return{success:!0,oldSha:c.oldSha,newSha:c.newSha,updated:c.updated}}catch(a){return{success:!1,error:a.message||"Failed to pull updates"}}}async function Y(a,b,c){let d=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!d)return null;try{let a=await fetch(`https://api.github.com/repos/${d[1]}/${d[2]}/compare/${b}...${c}`);if(!a.ok)return null;let e=await a.json(),f=Array.isArray(e.commits)?e.commits:[];return{behindBy:"number"==typeof e.total_commits?e.total_commits:null,commits:f.slice(-10).reverse().map(a=>({sha:(a.sha||"").slice(0,7),message:(a.commit?.message||"").split("\n")[0]}))}}catch(a){return U.debug("GitHub compare preview failed (non-fatal)",a),null}}function Z(a){return a?a.slice(0,7):""}var $=c(50648);async function _(a,b){try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return null;let d=null;return await (0,$.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(d={success:a.success,output:a.commandOutput??""})}),d}catch(a){return console.error("Error streaming git command:",a),null}}let aa=async(a,b,c)=>{if(c){let d=await _({action:"installStream",savePath:a,installCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Dependencies installed successfully. You can now build the server."}:{type:"error",text:"Error installing dependencies. You can still try to build the server."},output:d.output||"No output was returned from the installation process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:a,installCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to install dependencies");return{success:!0,message:{type:"success",text:"Dependencies installed successfully. You can now build the server."},output:d.commandOutput||"No output was returned from the installation process."}}catch(a){return console.error("Error installing dependencies:",a),{success:!1,message:{type:"error",text:`Error installing dependencies: ${a.message||"Unknown error"}. You can still try to build the server.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},ab=async(a,b,c)=>{if(c){let d=await _({action:"buildStream",savePath:a,buildCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Server built successfully."}:{type:"error",text:"Error building server."},output:d.output||"No output was returned from the build process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:a,buildCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to build repository");return{success:!0,message:{type:"success",text:"Server built successfully."},output:d.commandOutput||"No output was returned from the build process."}}catch(a){return console.error("Error building server:",a),{success:!1,message:{type:"error",text:`Error building server: ${a.message||"Unknown error"}.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},ac=(0,h.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),ad=({open:a,onClose:b,serverName:c,rootPath:g,installCommand:h,buildCommand:i,enabled:k,updateInfo:m,onToggle:n,onUpdated:o})=>{let[p,q]=(0,f.useState)(null),[r,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)(!1),[v,y]=(0,f.useState)(!1),[z,B]=(0,f.useState)(null),[C,D]=(0,f.useState)({}),[E,F]=(0,f.useState)(""),U=!!(h&&h.trim()),V=!!(i&&i.trim()),W=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${h})`,active:U},{key:"build",label:`Build (${i})`,active:V},{key:"restart",label:"Restart server",active:k}];(0,f.useEffect)(()=>{a&&(s(!1),u(!1),y(!1),B(null),D({}),F(""))},[a,c]),(0,f.useEffect)(()=>{if(a&&m.remoteUrl&&m.localSha&&m.remoteSha){let a=!1;return Y(m.remoteUrl,m.localSha,m.remoteSha).then(b=>{a||q(b)}),()=>{a=!0}}q(null)},[a,m.remoteUrl,m.localSha,m.remoteSha]);let $=(0,f.useCallback)((a,b)=>{D(c=>({...c,[a]:b}))},[]),_=(0,f.useCallback)((a,b)=>{F(c=>c+(c?"\n":"")+`--- ${a} ---
|
|
3
|
-
`+(b||"").trim()+"\n")},[]),ad=async()=>{u(!0),B(null),ac.info(`Starting update for server ${c}`);let a=(a,b)=>{$(a,"error"),B(b),u(!1)};try{k&&($("stop","running"),await Promise.resolve(n(!1)),$("stop","done")),$("pull","running");let b=await X(g);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${Z(b.oldSha)} -> ${Z(b.newSha)}`),$("pull","done"),U){$("install","running");let b=await aa(g,h.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);$("install","done")}if(V){$("build","running");let b=await ab(g,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);$("build","done")}k&&($("restart","running"),await Promise.resolve(n(!0)),$("restart","done")),ac.info(`Update completed for server ${c}`),y(!0),u(!1),o?.()}catch(a){ac.error(`Update failed for server ${c}`,a),B(a.message||"Update failed"),u(!1)}},ae=t||v||Object.keys(C).length>0,af=m.hasLocalChanges&&!r;return(0,d.jsxs)(G.A,{open:a,onClose:t?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(H.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(w,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(I.A,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(A.A,{size:"small",label:Z(m.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(A.A,{size:"small",color:"primary",label:Z(m.remoteSha),sx:{fontFamily:"monospace"}}),m.branch&&"HEAD"!==m.branch&&(0,d.jsxs)(L.default,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:m.branch})]}),p?.behindBy!=null&&(0,d.jsxs)(L.default,{variant:"body2",color:"text.secondary",children:["(",p.behindBy," commit",1===p.behindBy?"":"s"," behind)"]})]}),m.repoRoot&&m.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==g.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(L.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:m.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),p&&p.commits.length>0&&!ae&&(0,d.jsx)(e.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:p.commits.map(a=>(0,d.jsxs)(L.default,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),m.hasLocalChanges&&!ae&&(0,d.jsxs)(M.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(L.default,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(e.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:m.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(L.default,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(N.A,{sx:{mt:1},control:(0,d.jsx)(O.A,{size:"small",checked:r,onChange:a=>s(a.target.checked)}),label:(0,d.jsx)(L.default,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(P.A,{dense:!0,disablePadding:!0,children:W.filter(a=>a.active).map(a=>(0,d.jsxs)(Q.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(R.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(x.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(j.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(l.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(T,{color:"disabled",fontSize:"small"})}})(C[a.key])}),(0,d.jsx)(S.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),z&&(0,d.jsxs)(M.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[z,k&&(0,d.jsx)(L.default,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),v&&(0,d.jsxs)(M.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),E&&(0,d.jsx)(e.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:E})]}),(0,d.jsxs)(J.A,{children:[(0,d.jsx)(K.A,{onClick:b,disabled:t,children:v?"Close":"Cancel"}),!v&&(0,d.jsx)(K.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(w,{}),onClick:ad,disabled:t||af,children:t?"Updating…":z?"Retry Update":"Update"})]})]})};var ae=c(2783),af=c(74846),ag=c(62383),ah=c(69979);let ai=function(a={}){let{autoHideDuration:b=null,disableWindowBlurListener:c=!1,onClose:d,open:e,resumeHideDuration:g}=a,h=(0,af.A)();f.useEffect(()=>{if(e)return document.addEventListener("keydown",a),()=>{document.removeEventListener("keydown",a)};function a(a){a.defaultPrevented||"Escape"!==a.key||d?.(a,"escapeKeyDown")}},[e,d]);let i=(0,ag.A)((a,b)=>{d?.(a,b)}),j=(0,ag.A)(a=>{d&&null!=a&&h.start(a,()=>{i(null,"timeout")})});f.useEffect(()=>(e&&j(b),h.clear),[e,b,j,h]);let k=h.clear,l=f.useCallback(()=>{null!=b&&j(null!=g?g:.5*b)},[b,g,j]);return f.useEffect(()=>{if(!c&&e)return window.addEventListener("focus",l),window.addEventListener("blur",k),()=>{window.removeEventListener("focus",l),window.removeEventListener("blur",k)}},[c,e,l,k]),{getRootProps:(b={})=>{let c={...(0,ah.A)(a),...(0,ah.A)(b)};return{role:"presentation",...b,...c,onBlur:a=>{let b=c.onBlur;b?.(a),l()},onFocus:a=>{let b=c.onFocus;b?.(a),k()},onMouseEnter:a=>{let b=c.onMouseEnter;b?.(a),k()},onMouseLeave:a=>{let b=c.onMouseLeave;b?.(a),l()}}},onClickAway:a=>{d?.(a,"clickaway")}}};var aj=c(67943),ak=c(46757),al=c(51939);function am(a){return a.substring(2).toLowerCase()}function an(a){let{children:b,disableReactTree:c=!1,mouseEvent:d="onClick",onClickAway:e,touchEvent:g="onTouchEnd"}=a,h=f.useRef(!1),i=f.useRef(null),j=f.useRef(!1),k=f.useRef(!1);f.useEffect(()=>(setTimeout(()=>{j.current=!0},0),()=>{j.current=!1}),[]);let l=(0,aj.A)((0,al.A)(b),i),m=(0,ag.A)(a=>{let b=k.current;k.current=!1;let d=(0,ak.A)(i.current);if(!(!j.current||!i.current||"clientX"in a&&(d.documentElement.clientWidth<a.clientX||d.documentElement.clientHeight<a.clientY))){if(h.current){h.current=!1;return}(a.composedPath?a.composedPath().includes(i.current):!d.documentElement.contains(a.target)||i.current.contains(a.target))||!c&&b||e(a)}}),n=a=>c=>{k.current=!0;let d=b.props[a];d&&d(c)},o={ref:l};return!1!==g&&(o[g]=n(g)),f.useEffect(()=>{if(!1!==g){let a=am(g),b=(0,ak.A)(i.current),c=()=>{h.current=!0};return b.addEventListener(a,m),b.addEventListener("touchmove",c),()=>{b.removeEventListener(a,m),b.removeEventListener("touchmove",c)}}},[m,g]),!1!==d&&(o[d]=n(d)),f.useEffect(()=>{if(!1!==d){let a=am(d),b=(0,ak.A)(i.current);return b.addEventListener(a,m),()=>{b.removeEventListener(a,m)}}},[m,d]),f.cloneElement(b,o)}var ao=c(18168),ap=c(60839),aq=c(68333),ar=c(6636),as=c(6638),at=c(4927),au=c(43249),av=c(37489),aw=c(54573),ax=c(29565),ay=c(33105);function az(a){return(0,ay.Ay)("MuiSnackbarContent",a)}(0,ax.A)("MuiSnackbarContent",["root","message","action"]);let aA=(0,ao.Ay)(aw.A,{name:"MuiSnackbarContent",slot:"Root",overridesResolver:(a,b)=>b.root})((0,aq.A)(({theme:a})=>{let b="light"===a.palette.mode?.8:.98,c=(0,av.tL)(a.palette.background.default,b);return{...a.typography.body2,color:a.vars?a.vars.palette.SnackbarContent.color:a.palette.getContrastText(c),backgroundColor:a.vars?a.vars.palette.SnackbarContent.bg:c,display:"flex",alignItems:"center",flexWrap:"wrap",padding:"6px 16px",borderRadius:(a.vars||a).shape.borderRadius,flexGrow:1,[a.breakpoints.up("sm")]:{flexGrow:"initial",minWidth:288}}})),aB=(0,ao.Ay)("div",{name:"MuiSnackbarContent",slot:"Message",overridesResolver:(a,b)=>b.message})({padding:"8px 0"}),aC=(0,ao.Ay)("div",{name:"MuiSnackbarContent",slot:"Action",overridesResolver:(a,b)=>b.action})({display:"flex",alignItems:"center",marginLeft:"auto",paddingLeft:16,marginRight:-8}),aD=f.forwardRef(function(a,b){let c=(0,ar.b)({props:a,name:"MuiSnackbarContent"}),{action:e,className:f,message:g,role:h="alert",...i}=c,j=(a=>{let{classes:b}=a;return(0,ae.A)({root:["root"],action:["action"],message:["message"]},az,b)})(c);return(0,d.jsxs)(aA,{role:h,square:!0,elevation:6,className:(0,au.A)(j.root,f),ownerState:c,ref:b,...i,children:[(0,d.jsx)(aB,{className:j.message,ownerState:c,children:g}),e?(0,d.jsx)(aC,{className:j.action,ownerState:c,children:e}):null]})});function aE(a){return(0,ay.Ay)("MuiSnackbar",a)}(0,ax.A)("MuiSnackbar",["root","anchorOriginTopCenter","anchorOriginBottomCenter","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft"]);var aF=c(20385);let aG=(0,ao.Ay)("div",{name:"MuiSnackbar",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[`anchorOrigin${(0,as.A)(c.anchorOrigin.vertical)}${(0,as.A)(c.anchorOrigin.horizontal)}`]]}})((0,aq.A)(({theme:a})=>({zIndex:(a.vars||a).zIndex.snackbar,position:"fixed",display:"flex",left:8,right:8,justifyContent:"center",alignItems:"center",variants:[{props:({ownerState:a})=>"top"===a.anchorOrigin.vertical,style:{top:8,[a.breakpoints.up("sm")]:{top:24}}},{props:({ownerState:a})=>"top"!==a.anchorOrigin.vertical,style:{bottom:8,[a.breakpoints.up("sm")]:{bottom:24}}},{props:({ownerState:a})=>"left"===a.anchorOrigin.horizontal,style:{justifyContent:"flex-start",[a.breakpoints.up("sm")]:{left:24,right:"auto"}}},{props:({ownerState:a})=>"right"===a.anchorOrigin.horizontal,style:{justifyContent:"flex-end",[a.breakpoints.up("sm")]:{right:24,left:"auto"}}},{props:({ownerState:a})=>"center"===a.anchorOrigin.horizontal,style:{[a.breakpoints.up("sm")]:{left:"50%",right:"auto",transform:"translateX(-50%)"}}}]}))),aH=f.forwardRef(function(a,b){let c=(0,ar.b)({props:a,name:"MuiSnackbar"}),e=(0,ap.A)(),g={enter:e.transitions.duration.enteringScreen,exit:e.transitions.duration.leavingScreen},{action:h,anchorOrigin:{vertical:i,horizontal:j}={vertical:"bottom",horizontal:"left"},autoHideDuration:k=null,children:l,className:m,ClickAwayListenerProps:n,ContentProps:o,disableWindowBlurListener:p=!1,message:q,onBlur:r,onClose:s,onFocus:t,onMouseEnter:u,onMouseLeave:v,open:w,resumeHideDuration:x,slots:y={},slotProps:z={},TransitionComponent:A,transitionDuration:B=g,TransitionProps:{onEnter:C,onExited:D,...E}={},...F}=c,G={...c,anchorOrigin:{vertical:i,horizontal:j},autoHideDuration:k,disableWindowBlurListener:p,TransitionComponent:A,transitionDuration:B},H=(a=>{let{classes:b,anchorOrigin:c}=a,d={root:["root",`anchorOrigin${(0,as.A)(c.vertical)}${(0,as.A)(c.horizontal)}`]};return(0,ae.A)(d,aE,b)})(G),{getRootProps:I,onClickAway:J}=ai({...G}),[K,L]=f.useState(!0),M={slots:{transition:A,...y},slotProps:{content:o,clickAwayListener:n,transition:E,...z}},[N,O]=(0,aF.A)("root",{ref:b,className:[H.root,m],elementType:aG,getSlotProps:I,externalForwardedProps:{...M,...F},ownerState:G}),[P,{ownerState:Q,...R}]=(0,aF.A)("clickAwayListener",{elementType:an,externalForwardedProps:M,getSlotProps:a=>({onClickAway:(...b)=>{a.onClickAway?.(...b),J(...b)}}),ownerState:G}),[S,T]=(0,aF.A)("content",{elementType:aD,shouldForwardComponentProp:!0,externalForwardedProps:M,additionalProps:{message:q,action:h},ownerState:G}),[U,V]=(0,aF.A)("transition",{elementType:at.A,externalForwardedProps:M,getSlotProps:a=>({onEnter:(...b)=>{a.onEnter?.(...b),((a,b)=>{L(!1),C&&C(a,b)})(...b)},onExited:(...b)=>{a.onExited?.(...b),(a=>{L(!0),D&&D(a)})(...b)}}),additionalProps:{appear:!0,in:w,timeout:B,direction:"top"===i?"down":"up"},ownerState:G});return!w&&K?null:(0,d.jsx)(P,{...R,...y.clickAwayListener&&{ownerState:Q},children:(0,d.jsx)(N,{...O,children:(0,d.jsx)(U,{...V,children:l||(0,d.jsx)(S,{...T})})})})});var aI=c(30818),aJ=c(27114),aK=c(43312),aL=c(44079),aM=c(67191),aN=c(98463);let aO=(0,h.h)("frontend/components/mcp/MCPServerManager/ServerCard"),aP=({name:a,status:b,path:g,enabled:h,transport:p,onToggle:B,onRetry:C,onDelete:D,onClick:E,onEdit:N,onAuthenticate:P,error:Q,stderrOutput:R,authorizationUrl:S,selected:T=!1,onSelect:U,selectionMode:V=!1,hasOAuthTokens:W=!1,exposeAsMcpServer:X=!1,updateInfo:Y,installCommand:$,buildCommand:_,onUpdated:aa,folder:ab,folders:ac=[],onSetFolder:ae,builtIn:af=!1})=>{let[ag,ah]=(0,f.useState)(!1),[ai,aj]=(0,f.useState)(null),[ak,al]=(0,f.useState)(!1),[am,an]=(0,f.useState)(!1),[ao,aq]=(0,f.useState)(""),[ar,as]=(0,f.useState)("success"),[at,au]=(0,f.useState)(!1),[av,aw]=(0,f.useState)(!1),[ax,ay]=(0,f.useState)(X);(0,ap.A)(),(0,f.useEffect)(()=>{ay(X)},[X]);let az=async b=>{ay(b);let c=await z.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aq(b?"Server is now exposed to external apps.":"Server is no longer exposed."),as("success")):(ay(!b),aq("Failed to update exposure setting."),as("error")),an(!0)},aA=()=>{navigator.clipboard.writeText(""),aq("Endpoint URL copied to clipboard."),as("success"),an(!0)},aB={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,f.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&h){au(!0);let b=setTimeout(()=>{aO.debug(`Polling status for server: ${a}`),C()},2e3);return()=>{clearTimeout(b),au(!1)}}"connecting"!==b&&"initialization"!==b&&au(!1)},[b,h,a,C]);let[aC,aD]=(0,f.useState)(null);(0,f.useEffect)(()=>()=>{aC&&clearTimeout(aC)},[aC]);let aE=async b=>{b.stopPropagation(),aO.debug(`Reset OAuth tokens button clicked for server: ${a}`),aw(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();aO.info(`OAuth tokens reset successfully for ${a}`,c),aq("OAuth tokens reset successfully. Server will require re-authentication."),as("success"),an(!0),setTimeout(()=>{C()},500)}catch(b){aO.error(`Failed to reset OAuth tokens for ${a}`,b),aq(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),as("error"),an(!0)}finally{aw(!1)}},{getThemeValue:aF,getThemeColor:aG,colors:aP}=(0,i.Ic)(),aQ=()=>{aO.debug(`Server restart initiated for: ${a}`),B(!1),setTimeout(()=>{B(!0),aO.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(aI.A,{sx:{cursor:"pointer",transition:"box-shadow 0.3s ease","&:hover":{boxShadow:3}},onClick:()=>{aO.debug(`Server card clicked: ${a}`),E()},children:[(0,d.jsxs)(aJ.A,{sx:{pb:1},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[V&&U&&(0,d.jsx)(O.A,{checked:T,onClick:a=>a.stopPropagation(),onChange:a=>U(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(L.default,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[Y?.updateAvailable&&(0,d.jsx)(aK.A,{title:`Update available: ${Z(Y.localSha)} → ${Z(Y.remoteSha)}. Click to update.`,children:(0,d.jsx)(A.A,{icon:(0,d.jsx)(w,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),aO.debug(`Update badge clicked for server: ${a}`),al(!0)}})}),af?(0,d.jsx)(aK.A,{title:"FLUJO's built-in server — always available, cannot be edited or removed.",children:(0,d.jsx)(A.A,{label:"Built-in",color:"primary",size:"small"})}):(0,d.jsx)(F,{transport:p,size:"small"})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(j.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(k.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(l.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(q,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(x.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(L.default,{variant:"body2",color:aB,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:af?void 0:g,children:af?"FLUJO's own backend API — flow authoring, execution and server management as MCP tools.":g}),af&&(0,d.jsxs)(e.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(t,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(aK.A,{title:"External MCP clients (Claude Code, Claude Desktop, Cursor, …) can drive FLUJO through this local endpoint.",children:(0,d.jsx)(L.default,{variant:"body2",sx:{fontWeight:500},children:"Exposed to external apps"})})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(L.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(aK.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aL.A,{size:"small",onClick:aA,children:(0,d.jsx)(u.A,{fontSize:"small"})})})]})]}),!af&&(0,d.jsxs)(e.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(t,{fontSize:"small",sx:{mr:.5,color:ax?"primary.main":"text.disabled"}}),(0,d.jsx)(aM.A,{checked:ax,onChange:a=>az(a.target.checked),size:"small"}),(0,d.jsx)(aK.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(L.default,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),ax&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(L.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(aK.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aL.A,{size:"small",onClick:aA,children:(0,d.jsx)(u.A,{fontSize:"small"})})})]})]}),"error"===b&&(0,d.jsxs)(e.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(L.default,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(K.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),aO.debug(`View full error clicked for server: ${a}`),ah(!0)},children:"View Full Error"})]}),(0,d.jsx)(e.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>aG("error.background"),color:a=>aG("error.text"),border:"1px solid",borderColor:a=>aG("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:Q||"Unknown error"})]}),"requires_authentication"===b&&(0,d.jsxs)(e.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(L.default,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(K.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(r,{}),onClick:async b=>{if(b.stopPropagation(),aO.debug(`Authenticate button clicked for server: ${a}`),P)P();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){aO.info(`Server ${a} already authorized, no popup needed`),aQ();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{aO.info(`OAuth authentication successful for ${a}`,b),aO.info(`Automatically restarting server ${a} after OAuth completion`),aQ()},onError:b=>{aO.error(`OAuth authentication failed for ${a}`,b),aq("OAuth authentication failed"),as("error"),an(!0)}})}catch(b){aO.error(`Failed to start OAuth authentication for ${a}`,b),aq("Failed to start OAuth authentication"),as("error"),an(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),!af&&(0,d.jsxs)(aN.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(aM.A,{checked:h,onClick:a=>a.stopPropagation(),onChange:b=>{aO.debug(`Server ${a} toggle changed to: ${b.target.checked}`),B(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(L.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:h?"primary.main":"text.secondary"},children:h?"Enabled":"Disabled"}),h&&(0,d.jsx)(aK.A,{title:"Restart server",children:(0,d.jsx)(aL.A,{size:"small",onClick:b=>{b.stopPropagation(),aO.debug(`Restart button clicked for server: ${a}`),aQ()},sx:{ml:1},children:(0,d.jsx)(m.A,{fontSize:"small"})})})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(aK.A,{title:"Retry connection",children:(0,d.jsx)(aL.A,{color:"primary",onClick:c=>{c.stopPropagation(),aO.debug(`Retry button clicked for server: ${a}`),aC&&clearTimeout(aC),au(!0),C();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&au(!1),aD(null)},1e4);aD(d)},disabled:at,size:"small",children:at?(0,d.jsx)(x.default,{size:"small",color:"primary"}):(0,d.jsx)(m.A,{})})}),"streamable"===p&&W&&(0,d.jsx)(aK.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(aL.A,{color:"warning",onClick:aE,disabled:av,size:"small",children:av?(0,d.jsx)(x.default,{size:"small",color:"primary"}):(0,d.jsx)(s,{})})}),ae&&(0,d.jsx)(aK.A,{title:ab?`Folder: ${ab}`:"Move to folder",children:(0,d.jsx)(aL.A,{color:ab?"primary":"default",onClick:a=>{a.stopPropagation(),aj(a.currentTarget)},size:"small",children:(0,d.jsx)(v.A,{})})}),(0,d.jsx)(aK.A,{title:"Edit server",children:(0,d.jsx)(aL.A,{color:"primary",onClick:a=>{a.stopPropagation(),N()},size:"small",children:(0,d.jsx)(n.A,{})})}),(0,d.jsx)(aK.A,{title:"Delete server",children:(0,d.jsx)(aL.A,{color:"error",onClick:a=>{a.stopPropagation(),D()},size:"small",children:(0,d.jsx)(o.A,{})})})]})]}),ae&&(0,d.jsx)(y.A,{anchorEl:ai,open:!!ai,currentFolder:ab,folders:ac,onClose:()=>aj(null),onAssign:a=>ae(a)}),(0,d.jsxs)(G.A,{open:ag,onClose:()=>{aO.debug(`Error modal closed for server: ${a}`),ah(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(H.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(I.A,{children:[(0,d.jsx)(e.default,{sx:{p:2,borderRadius:1,bgcolor:a=>aG("error.background"),color:a=>aG("error.text"),border:"1px solid",borderColor:a=>aG("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:Q||"Unknown error"}),R&&(0,d.jsxs)(e.default,{sx:{mt:2},children:[(0,d.jsx)(L.default,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(e.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:R})]})]}),(0,d.jsxs)(J.A,{children:[(0,d.jsx)(K.A,{onClick:()=>ah(!1),children:"Close"}),(0,d.jsx)(K.A,{onClick:()=>{let b=[Q||"Unknown error",R?`
|
|
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")},578:(a,b,c)=>{Promise.resolve().then(c.bind(c,51016))},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(27080),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(27080),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")},15059:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2m6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56M12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96M4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2s.06 1.34.14 2zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56m2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8M12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96M14.34 14H9.66c-.09-.66-.16-1.32-.16-2s.07-1.35.16-2h4.68c.09.65.16 1.32.16 2s-.07 1.34-.16 2m.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56M16.36 14c.08-.66.14-1.32.14-2s-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2z"}),"Language")},18730:(a,b,c)=>{Promise.resolve().then(c.bind(c,42262))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},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")},31411:(a,b,c)=>{"use strict";c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(79515),g=c(81637),h=c(95587),i=c(67191),j=c(82605),k=c(98256),l=c(7675),m=c(94367),n=c(37674);let o=({schema:a,values:b,onChange:c,size:o="small"})=>{let[p,q]=(0,e.useState)({}),r=a?.properties??{},s=Array.isArray(a?.required)?a.required:[],t=Object.keys(r);if(0===t.length)return(0,d.jsx)(f.default,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let u=(a,d)=>{let e={...b};void 0===d?delete e[a]:e[a]=d,c(e)};return(0,d.jsx)(g.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:t.map(a=>{let c=r[a]??{},e=s.includes(a)?`${a} *`:a,t="string"==typeof c.description?c.description:"";if("boolean"===c.type)return(0,d.jsx)(h.A,{control:(0,d.jsx)(i.A,{size:o,checked:!0===b[a],onChange:b=>u(a,b.target.checked)}),label:(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.default,{variant:"body2",children:e}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",children:t})]})},a);if(Array.isArray(c.enum)&&c.enum.length>0){let g=b[a];return(0,d.jsxs)(j.A,{size:o,fullWidth:!0,children:[(0,d.jsx)(k.A,{id:`schema-param-${a}`,children:e}),(0,d.jsx)(l.A,{labelId:`schema-param-${a}`,label:e,value:c.enum.includes(g)?g:"",onChange:b=>u(a,b.target.value),children:c.enum.map(a=>(0,d.jsx)(m.A,{value:a,children:String(a)},String(a)))}),t&&(0,d.jsx)(f.default,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:t})]},a)}if("number"===c.type||"integer"===c.type)return(0,d.jsx)(n.A,{fullWidth:!0,size:o,type:"number",label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>{let d=b.target.value;if(""===d)return void u(a,void 0);let e="integer"===c.type?parseInt(d,10):parseFloat(d);u(a,Number.isNaN(e)?void 0:e)},helperText:t},a);if("object"===c.type||"array"===c.type){let f=p[a]??(void 0!==b[a]?JSON.stringify(b[a],null,2):""),g=null;if(f.trim())try{JSON.parse(f)}catch{g="Not valid JSON yet"}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,multiline:!0,minRows:2,label:`${e} (JSON ${c.type})`,value:f,error:!!g,helperText:g??t,onChange:b=>{let c=b.target.value;if(q(b=>({...b,[a]:c})),!c.trim())return void u(a,void 0);try{u(a,JSON.parse(c))}catch{}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},a)}return(0,d.jsx)(n.A,{fullWidth:!0,size:o,label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>u(a,""===b.target.value?void 0:b.target.value),helperText:t},a)})})}},33873:a=>{"use strict";a.exports=require("path")},35406:(a,b,c)=>{"use strict";c.d(b,{A:()=>x});var d=c(38301),e=c(43249),f=c(37489),g=c(2783),h=c(4007),i=c(6638),j=c(18168),k=c(60839),l=c(68333),m=c(54716),n=c(6636),o=c(79515),p=c(29565),q=c(33105);function r(a){return(0,q.Ay)("MuiLink",a)}let s=(0,p.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var t=c(97287),u=c(21124);let v={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},w=(0,j.Ay)(o.default,{name:"MuiLink",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[`underline${(0,i.A)(c.underline)}`],"button"===c.component&&b.button]}})((0,l.A)(({theme:a})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:a,ownerState:b})=>"always"===a&&"inherit"!==b.color,style:{textDecorationColor:"var(--Link-underlineColor)"}},...Object.entries(a.palette).filter((0,m.A)()).map(([b])=>({props:{underline:"always",color:b},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.4)`:(0,f.X4)(a.palette[b].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.secondaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(a.vars||a).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${s.focusVisible}`]:{outline:"auto"}}}]}))),x=d.forwardRef(function(a,b){let c=(0,n.b)({props:a,name:"MuiLink"}),j=(0,k.A)(),{className:l,color:m="primary",component:o="a",onBlur:p,onFocus:q,TypographyClasses:s,underline:x="always",variant:y="inherit",sx:z,...A}=c,[B,C]=d.useState(!1),D={...c,color:m,component:o,focusVisible:B,underline:x,variant:y},E=(a=>{let{classes:b,component:c,focusVisible:d,underline:e}=a,f={root:["root",`underline${(0,i.A)(e)}`,"button"===c&&"button",d&&"focusVisible"]};return(0,g.A)(f,r,b)})(D);return(0,u.jsx)(w,{color:m,className:(0,e.A)(E.root,l),classes:s,component:o,onBlur:a=>{(0,h.A)(a.target)||C(!1),p&&p(a)},onFocus:a=>{(0,h.A)(a.target)&&C(!0),q&&q(a)},ref:b,ownerState:D,variant:y,...A,sx:[...void 0===v[m]?[{color:m}]:[],...Array.isArray(z)?z:[z]],style:{...A.style,..."always"===x&&"inherit"!==m&&!v[m]&&{"--Link-underlineColor":(({theme:a,ownerState:b})=>{let c=b.color,d=(0,t.Yn)(a,`palette.${c}.main`,!1)||(0,t.Yn)(a,`palette.${c}`,!1)||b.color,e=(0,t.Yn)(a,`palette.${c}.mainChannel`)||(0,t.Yn)(a,`palette.${c}Channel`);return"vars"in a&&e?`rgba(${e} / 0.4)`:(0,f.X4)(d,.4)})({theme:j,ownerState:D})}}})})},40973:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"}),"Search")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},42262:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>cK});var d=c(21124),e=c(81637),f=c(38301),g=c.n(f),h=c(46393),i=c(61615),j=c(19815),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})=>(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.default,{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.default,{color:"error",children:c})})):0===a.length?(0,d.jsx)(l.A,{sx:{p:3,textAlign:"center",borderRadius:1},children:(0,d.jsx)(k.default,{color:"text.secondary",children:'No servers configured. Click "Add Server" to get started.'})}):(0,d.jsx)(m.Ay,{container:!0,spacing:2,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&&!a.builtIn?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&&!a.builtIn?b=>w(a.name,b):void 0,builtIn:a.builtIn})},a.name)})});var p=c(88745),q=c(30717),r=c(53773),s=c(37674),t=c(20830),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.default,{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.default,{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"}`}}}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.default,{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.default,{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.default,{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.default,{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.default,{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.default,{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.default,{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.default,{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.default,{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:([^}]+)\}$/,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.default,{variant:"subtitle2",gutterBottom:!0,children:"Custom HTTP Headers"}),(0,d.jsxs)(k.default,{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.default,{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=>{var c;return c=a.target.value,void p(f.map((a,d)=>d===b?{...a,value:c,isMasked:!1,showWarning:!1}:a))},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.default,{variant:"h6",sx:{mb:2},children:"Bind Header to Global Variable"}),0===Object.keys(c).length?(0,d.jsx)(k.default,{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.default,{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.default,{variant:"subtitle2",gutterBottom:!0,children:["OAuth Client Credentials"," ",(0,d.jsx)(k.default,{component:"span",variant:"caption",color:"text.secondary",children:"(optional)"})]}),(0,d.jsxs)(k.default,{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.default,{variant:"caption",color:"text.secondary",children:"Redirect URI to register in the provider's app:"}),(0,d.jsx)(k.default,{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.default,{variant:"h6",component:"h2",sx:{mb:2},children:"Bind Client Secret to Global Variable"}),0===Object.keys(h).length?(0,d.jsx)(k.default,{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.default,{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);let aM=new Set(["npx","bunx","uvx","pipx","dlx"]),aN=new Set(["pnpm","yarn","bun","npm"]),aO=new Set(["dlx","exec","x"]);function aP(a,b=[]){let c=((a||"").split(/[\\/]/).filter(Boolean).pop()||"").toLowerCase().replace(/\.(cmd|exe|bat|ps1)$/i,"");if(aM.has(c))return!0;if(aN.has(c)){let a=(b[0]||"").toLowerCase();return aO.has(a)}return!1}function aQ(a){return"stdio"===a.transport&&aP(a.command,a.args??[])}let aR=({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})=>{(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 F="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),G="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),H="websocket"===c&&F&&(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),I=a.trim().split(/\s+/).filter(Boolean),J="stdio"===c&&I.length>0&&aP(I[0],I.slice(1)),K=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.default,{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.default,{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:!F,helperText:!F&&"Please enter a valid WebSocket URL (starting with ws:// or wss://)"}),H&&(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.default,{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:!G,helperText:!G&&"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.default,{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}),J&&(0,d.jsxs)(aL.A,{children:["npx/uvx may download the package on the first run — the Test Run waits up to ",K,"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&&!F||("sse"===c||"streamable"===c)&&!G,title:"stdio"!==c||a.trim()?"websocket"!==c||F?"sse"!==c&&"streamable"!==c||G?"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"})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(ao.A,{serverName:B,initialEnv:q,onSave:async a=>(u(a),Promise.resolve())})})]})};var aS=c(95345);let aT=({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.default,{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)(aS.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)(aS.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 aU=c(2173),aV=c(67191),aW=c(82605),aX=c(98256),aY=c(7675),aZ=c(94367),a$=c(27080);let a_=(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 a0=c(83434);let a1=(0,j.h)("frontend/components/mcp/.../SamplingManager"),a2=({policy:a,onChange:b})=>{let[c,g]=(0,f.useState)([]),h=!!a?.enabled;(0,f.useEffect)(()=>{let a=!1;return a0.N.loadModels().then(b=>{a||g(Array.isArray(b)?b:[])}).catch(a=>a1.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.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(a_,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(k.default,{variant:"subtitle1",children:"Let this tool use your AI"}),(0,d.jsx)(aV.A,{checked:h,onChange:a=>i({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(k.default,{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)(aW.A,{size:"small",sx:{minWidth:260},error:!a?.modelId,children:[(0,d.jsx)(aX.A,{id:"sampling-model-label",children:"Model"}),(0,d.jsxs)(aY.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)(aZ.A,{value:"",disabled:!0,children:"No models configured"}),c.map(a=>(0,d.jsx)(aZ.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."})]})]})};var a3=c(32720),a4=c(33799),a5=c(28055);let a6=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))},a7=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)}},a8=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}
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
${R}`:""].join("");navigator.clipboard.writeText(b),aO.debug(`Error copied to clipboard for server: ${a}`),aq("Error message copied to clipboard"),as("success"),an(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),Y&&(0,d.jsx)(ad,{open:ak,onClose:()=>al(!1),serverName:a,rootPath:g,installCommand:$,buildCommand:_,enabled:h,updateInfo:Y,onToggle:B,onUpdated:aa}),(0,d.jsx)(aH,{open:am,autoHideDuration:3e3,onClose:()=>an(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(M.A,{onClose:()=>an(!1),severity:ar,sx:{width:"100%"},children:ao||"Error message copied to clipboard"})})]})};var aQ=c(82666);let aR=(0,h.h)("frontend/components/mcp/MCPServerManager/ServerList"),aS=({servers:a,isLoading:b,loadError:c,onServerSelect:f,onServerToggle:g,onServerRetry:h,onServerDelete:i,onServerEdit:j,selectionMode:k=!1,selectedServers:l=new Set,onServerSelectionChange:m,updates:n,onServerUpdated:o,folders:p=[],onServerSetFolder:q})=>(aR.debug("Rendering ServerList",{serverCount:a.length,isLoading:b,hasError:!!c}),b)?(aR.debug("Servers are loading"),(0,d.jsxs)(e.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4},children:[(0,d.jsx)(x.default,{size:"large",color:"primary"}),(0,d.jsx)(L.default,{sx:{mt:2,color:"text.secondary"},children:"Loading servers..."})]})):c?(aR.warn("Error loading servers:",c),(0,d.jsx)(aw.A,{sx:{p:3,bgcolor:"error.light",color:"error.contrastText",borderRadius:1},children:(0,d.jsx)(L.default,{color:"error",children:c})})):0===a.length?(0,d.jsx)(aw.A,{sx:{p:3,textAlign:"center",borderRadius:1},children:(0,d.jsx)(L.default,{color:"text.secondary",children:'No servers configured. Click "Add Server" to get started.'})}):(0,d.jsx)(aQ.Ay,{container:!0,spacing:2,children:a.map(a=>{let b="streamable"===a.transport&&void 0!==a.oauthTokens;return(0,d.jsx)(aQ.Ay,{item:!0,xs:12,md:6,lg:4,children:(0,d.jsx)(aP,{name:a.name,status:a.status,path:a.rootPath,enabled:!a.disabled,transport:a.transport,onToggle:b=>g(a.name,b),onRetry:()=>h(a.name),onDelete:()=>i(a.name),onClick:()=>f(a.name),onEdit:()=>j(a),error:a.error,stderrOutput:a.stderrOutput,exposeAsMcpServer:a.exposeAsMcpServer,selectionMode:k,selected:l.has(a.name),onSelect:m&&!a.builtIn?b=>m(a.name,b):void 0,hasOAuthTokens:b,updateInfo:a.rootPath?n?.[a.rootPath]:void 0,installCommand:a._installCommand,buildCommand:a._buildCommand,onUpdated:o?()=>o(a.name,a.rootPath):void 0,folder:a.folder,folders:p,onSetFolder:q&&!a.builtIn?b=>q(a.name,b):void 0,builtIn:a.builtIn})},a.name)})});var aT=c(30717),aU=c(53773),aV=c(37674),aW=c(67101);let aX=({githubUrl:a,setGithubUrl:b,savePath:c,setSavePath:g,repoInfo:h,isValidating:j,parseCompleted:k,onValidate:l})=>{let[m,n]=(0,f.useState)(""),{getThemeColor:o}=(0,i.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)(aU.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"GitHub Repository URL"}),(0,d.jsx)(aV.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)(K.A,{variant:"contained",color:k?"success":"primary",onClick:l,disabled:j,children:j?"Validating...":"1) Parse"})})]}),h?.valid&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Where to save the repository?"}),(0,d.jsx)(aV.A,{fullWidth:!0,value:c,onChange:a=>g(a.target.value),variant:"outlined",size:"small",InputProps:{endAdornment:(0,d.jsx)(aW.A,{position:"end",children:(0,d.jsx)(aL.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)(aT.A,{})})})}})]})]})},aY=({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)(K.A,{variant:"outlined",color:"warning",onClick:()=>{h(!0)},disabled:b||!f,children:b?"Processing...":"Re-clone (Force)"}),(0,d.jsx)(K.A,{variant:"contained",color:c?"success":"primary",onClick:()=>{h(!1)},disabled:b||!f,children:b?"Processing...":g?"Use Existing":"2) Clone Repository"})]}):null,aZ=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}}},a_=(0,h.h)("utils/mcp/processPathLikeArgument");function a0(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(a_.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 a_.debug(`processPathLikeArgument: Detected scoped npm package, leaving unchanged: ${a}`),a;a_.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),a_.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"),a_.debug(`processPathLikeArgument: Removed server name "${b}": ${c}`),c=c.replace(/\/\//g,"/"))}return(c.startsWith("/")||c.startsWith("\\"))&&(c=c.substring(1),a_.debug(`processPathLikeArgument: Removed leading slash: ${c}`)),c||(c=".",a_.debug('processPathLikeArgument: Empty result, replaced with "."')),a_.debug(`processPathLikeArgument: Final result: ${c}`),c})(a,C));console.log("parseServerConfig: Final args (after path processing):",D);let E={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(E,null,2)),console.log("parseServerConfig: Preparing return message"),o)return console.log(`parseServerConfig: Returning success - config found in ${p}`),{config:E,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:E,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:E,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,h.h)("utils/mcp/parseServerConfigFromClipboard");let a1=(0,h.h)("utils/mcp/configparse/utils");async function a2(a,b,c=!1){try{a1.debug(`Checking if file exists: ${a}/${b}`);let d=a.endsWith("/")||a.endsWith("\\")?`${a}${b}`:`${a}/${b}`;a1.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 a1.debug(`File does not exist: ${a}/${b}`),{exists:!1};let f=await e.json();if(!f.content&&c)return a1.debug(`File exists but is empty: ${a}/${b}`),{exists:!0,content:""};return a1.debug(`File exists: ${a}/${b}`),{exists:!0,content:c?f.content:void 0}}catch(c){return a1.error(`Error checking if file exists: ${a}/${b}`,c),{exists:!1}}}async function a3(a,b){try{let c=await a2(a,b,!0);return c.exists&&c.content?c.content:null}catch(c){return a1.error(`Error reading file: ${a}/${b}`,c),null}}let a4=(0,h.h)("utils/mcp/configparse/typescript");async function a5(a){let{repoPath:b,repoName:c}=a;a4.debug(`Parsing TypeScript configuration for ${b}`);let d=await a2(b,"package.json",!0);if(!d.exists||!d.content)return a4.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);a4.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 a6(a,b),i=await a7(b),j=((await a2(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 a4.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 a6(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],a4.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],a4.debug(`Extracted output directory from webpack/rollup/vite build script: ${f}`)),(a.includes("build/")||a.includes("build\\"))&&(f="build",a4.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 a4.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 a4.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 a2(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 a2(b,a)).exists)return e.push(a),e;return e.push(`${f}/index.js`),e}async function a7(a){let b=await a3(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 a8=(0,h.h)("utils/mcp/configparse/python");async function a9(a){var b;let{repoPath:c,repoName:d}=a;a8.debug(`Parsing Python configuration for ${c}`);let e=await a2(c,"requirements.txt"),f=await a2(c,"pyproject.toml",!0),g=await a2(c,"setup.py",!0);if(!e.exists&&!f.exists&&!g.exists)return a8.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 ba(c,f.content,g.content),k=await bb(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 ba(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 a2(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){a8.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){a8.error("Error parsing setup.py:",a)}return 2===d.length&&d.push("main.py"),{runCommand:"uv",args:d}}async function bb(a){let b=await a3(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 bc=(0,h.h)("utils/mcp/configparse/java");async function bd(a){var b,c,d,e,f,g,h,i;let{repoPath:j,repoName:k}=a;bc.debug(`Parsing Java configuration for ${j}`);let l=await a2(j,"pom.xml",!0),m=await a2(j,"build.gradle",!0),n=await a2(j,"gradlew"),o=await a2(j,"mvnw");if(!l.exists&&!m.exists)return bc.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 be(j,p,q,l.content,m.content),x=await bf(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 be(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){bc.error("Error determining Maven JAR path:",a)}else if(c)try{let b="build/libs/*-all.jar";if((await a2(a,b)).exists)return g.push(b),{runCommand:f,args:g};let c="build/libs/*-fat.jar";if((await a2(a,c)).exists)return g.push(c),{runCommand:f,args:g};return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){bc.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 a2(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("target/*.jar")}return{runCommand:f,args:g}}async function bf(a){let b=await a3(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 bg=(0,h.h)("utils/mcp/configparse/kotlin");async function bh(a){var b,c,d,e,f,g;let{repoPath:h,repoName:i}=a;bg.debug(`Parsing Kotlin configuration for ${h}`);let j=await a2(h,"build.gradle.kts",!0),k=await a2(h,"build.gradle",!0),l=await a2(h,"gradlew"),m=await bi(h);if(!j.exists&&!m){if(!k.exists)return bg.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 bg.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 bj(h,n,o,j.content,k.content),u=await bk(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 bi(a){for(let b of["src/main/kotlin","src/test/kotlin","src"])if((await a2(a,b)).exists)return!0;return!1}async function bj(a,b,c,d,e){let f="java",g=[];g.push("-jar");try{let h="build/libs/*-all.jar";if((await a2(a,h)).exists)return g.push(h),{runCommand:f,args:g};let i="build/libs/*-fat.jar";if((await a2(a,i)).exists)return g.push(i),{runCommand:f,args:g};let j="build/libs/*-with-dependencies.jar";if((await a2(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 a2(a,d)).exists)return g.push(d),{runCommand:f,args:g}}return g.push("build/libs/*.jar"),{runCommand:f,args:g}}catch(a){bg.error("Error determining Kotlin JAR path:",a)}if(1===g.length){for(let b of["build/libs/*.jar","out/artifacts/*/*.jar"])if((await a2(a,b)).exists)return g.push(b),{runCommand:f,args:g};g.push("build/libs/*.jar")}return{runCommand:f,args:g}}async function bk(a){let b=await a3(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 bl=(0,h.h)("utils/mcp/configparse/index");async function bm(a){let{repoPath:b,repoName:c}=a;bl.debug(`Parsing repository configuration for ${b}`);let d=await bn(b,c);if(d.detected&&d.foundExplicitConfig&&d.runCommand)return bl.debug(`Explicit configuration found in README for ${b}`),d;bl.debug(`Trying TypeScript/JavaScript parser for ${b}`);let e=await a5(a);if(e.detected)return bl.debug(`TypeScript/JavaScript configuration detected for ${b}`),e;bl.debug(`Trying Python parser for ${b}`);let f=await a9(a);if(f.detected)return bl.debug(`Python configuration detected for ${b}`),f;bl.debug(`Trying Java parser for ${b}`);let g=await bd(a);if(g.detected)return bl.debug(`Java configuration detected for ${b}`),g;bl.debug(`Trying Kotlin parser for ${b}`);let h=await bh(a);return h.detected?(bl.debug(`Kotlin configuration detected for ${b}`),h):d.detected?(bl.debug(`Configuration extracted from README for ${b}`),d):(bl.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 bn(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 bl.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 bl.debug(`README file is empty in ${a}`),{detected:!1,language:"unknown",message:{type:"warning",text:"README file is empty."}};let f=await bp(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 bl.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 bo(a){return"stdio"===a.transport}let bp=async(a,b,c)=>{try{let d=c||b.name,e=a0(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:bo(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"}`}}}},bq=async(a,b)=>{try{let c=b||a.name,d=await window.navigator.clipboard.readText().then(a=>a0(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:bo(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"}`}}}},br=(0,h.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/configDetection");async function bs(a,b,c){try{br.debug(`Detecting configuration for repository: ${a}`);let d=await bm({repoPath:a,repoName:b,owner:c});if(d.detected&&d.config)return br.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 br.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 br.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,h.h)("frontend/components/mcp/MCPServerManager/Modals/ServerModal/utils/errorHandling");var bt=c(33873),bu=c.n(bt);let bv=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,setActiveTab:h,initialGitHubUrl:i})=>{let[j,k]=(0,f.useState)(i||""),[l,m]=(0,f.useState)(null),[n,o]=(0,f.useState)(""),[p,q]=(0,f.useState)(!1),[r,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)(!1),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(!1),[z,A]=(0,f.useState)(null),[B,C]=(0,f.useState)(""),[D,E]=(0,f.useState)(null),[F,G]=(0,f.useState)(""),[H,I]=(0,f.useState)(!1);(0,f.useEffect)(()=>{(async()=>{try{let a=await fetch("/api/cwd"),b=await a.json();b.success&&b.mcpServersDir?G(b.mcpServersDir):console.error("Failed to get mcp-servers directory:",b.error)}catch(a){console.error("Error fetching cwd information:",a)}})()},[]);let J=async()=>{s(!0),A(null),I(!1);let a=await aZ(j);if(m(a.repoInfo),A(a.message),q(a.showCloneButton),a.repoInfo){if(F){let b=bu().join(F,a.repoInfo.repo);o(b),await K(b)}else try{let b=await fetch("/api/cwd"),c=await b.json();if(c.success&&c.mcpServersDir){G(c.mcpServersDir);let b=bu().join(c.mcpServersDir,a.repoInfo.repo);o(b),await K(b)}else console.error("Failed to get mcp-servers directory:",c.error),o(`./mcp-servers/${a.repoInfo.repo}`)}catch(b){console.error("Error fetching cwd information:",b),o(`./mcp-servers/${a.repoInfo.repo}`)}w(!0)}s(!1)},K=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?(I(!0),A({type:"warning",text:`Repository already exists at ${a}. You can re-clone to get the latest version.`})):I(!1)}catch(a){console.error("Error checking if repository exists:",a),I(!1)}},N=async(a=!1)=>{if(l){u(!0),A({type:"success",text:a?"Re-cloning repository...":"Cloning repository..."});try{let b=await a$(j,l,n,a);if(!b.success||!b.clonedRepoPath){A(b.message),u(!1);return}let d=b.clonedRepoPath;C(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 bs(d,l.repo,l.owner);A(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:l.repo,transport:"stdio",command:"",args:[],env:e,disabled:!1,autoApprove:[],rootPath:d,_buildCommand:"",_installCommand:""};try{let b=bu().join(l.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=a0(h.content,!0,l.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"}`}}}E(g),A(i),c&&g.name&&c(g),h&&h("local"),y(!0)}catch(a){console.error("Error during repository cloning or configuration detection:",a),A({type:"error",text:`Error processing repository: ${a instanceof Error?a.message:"Unknown error"}`})}finally{u(!1)}}};return(0,d.jsx)(aw.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsx)(L.default,{variant:"h6",gutterBottom:!0,children:"Import from GitHub or MCP Platform"}),(0,d.jsx)(aX,{githubUrl:j,setGithubUrl:k,savePath:n,setSavePath:o,repoInfo:l,isValidating:r,parseCompleted:v,onValidate:J}),(0,d.jsx)(aY,{showCloneButton:p,isCloning:t,cloneCompleted:x,repoInfo:l,repoExists:H,onClone:N}),z&&(0,d.jsx)(e.default,{children:(0,d.jsx)(M.A,{severity:z.type,children:z.text})})]})})};var bw=c(22813),bx=c(92812);let by=({output:a,isVisible:b,toggleVisibility:c,title:f="Command Output"})=>{let g=(0,ap.A)();return(0,d.jsxs)(aw.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)(L.default,{variant:"h6",children:f}),(0,d.jsx)(aL.A,{onClick:c,size:"small",title:b?"Hide console":"Show console",color:"inherit",sx:{color:"text.secondary"},children:b?(0,d.jsx)(bx.A,{}):(0,d.jsx)(bw.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)(L.default,{variant:"body2",sx:{fontStyle:"italic",color:"text.secondary"},children:"No output to display"})})]})},bz=()=>{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)}}},bA=({name:a,setName:b,rootPath:c,setRootPath:f,onRootPathSelect:g})=>(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Server Name"}),(0,d.jsx)(aV.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)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"MCP Server Root Path"}),(0,d.jsx)(aV.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)(aW.A,{position:"end",children:(0,d.jsx)(aL.A,{onClick:g,edge:"end",children:(0,d.jsx)(aT.A,{})})})}})]})]});var bB=c(8521);let bC=({installCommand:a,setinstallCommand:b,buildCommand:c,setBuildCommand:g,onInstall:h,onBuild:i,isInstalling:j,isBuilding:k,installCompleted:l,buildCompleted:m,buildMessage:n})=>{let o=["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..."],p=[...o,"Installing dependencies...","NPM install in progress...","Fetching packages from registry..."],q=[...o,"Building server...","Compiling source code...","Bundling files..."],[r,s]=(0,f.useState)(0),[t,u]=(0,f.useState)(0);return(0,f.useEffect)(()=>{let a;return j&&(a=setInterval(()=>{s(a=>(a+1)%p.length)},3e3)),()=>{a&&clearInterval(a)}},[j,p.length]),(0,f.useEffect)(()=>{let a;return k&&(a=setInterval(()=>{u(a=>(a+1)%q.length)},3e3)),()=>{a&&clearInterval(a)}},[k,q.length]),(0,d.jsxs)(aU.A,{spacing:3,children:[n&&"error"===n.type&&(0,d.jsx)(M.A,{severity:"error",sx:{mb:2},children:n.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Install Script"}),(0,d.jsx)(aV.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)(aw.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(bB.default,{size:20,color:"info"}),(0,d.jsx)(L.default,{variant:"body2",color:"info.dark",fontWeight:"medium",children:p[r]})]}),(0,d.jsx)(K.A,{variant:"contained",color:l?"success":"primary",onClick:h,disabled:j,children:j?"Installing...":"1) Install Dependencies"})]})]}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Build Command"}),(0,d.jsx)(aV.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:[k&&(0,d.jsxs)(aw.A,{elevation:3,sx:{p:2,mb:2,width:"100%",bgcolor:"info.lighter",display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(bB.default,{size:20,color:"info"}),(0,d.jsx)(L.default,{variant:"body2",color:"info.dark",fontWeight:"medium",children:q[t]})]}),(0,d.jsx)(K.A,{variant:"contained",color:m?"success":"primary",onClick:i,disabled:k,children:k?"Building...":"2) Build Server"})]})]})]})};var bD=c(38296),bE=c(6537),bF=c(47902),bG=c(85557),bH=c(49938),bI=c(82571),bJ=c(92173);let bK=/^\$\{global:([^}]+)\}$/,bL=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,bI.Hm)(a),f=d.match(bK);if(f)return{key:a,value:d,isSecret:e,isBound:!0,boundTo:f[1]};let g=d===bJ.RJ||d===bJ.gF;return{key:a,value:d,isSecret:e,isMasked:g}}),bM=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},bN=({headers:a,onChange:b})=>{let{globalEnvVars:c}=(0,bH.rX)(),[f,h]=g().useState(()=>bL(a)),[i,j]=g().useState(!1),[l,m]=g().useState(null),n=JSON.stringify(a||{}),p=g().useRef(n);g().useEffect(()=>{p.current!==n&&n!==JSON.stringify(bM(f))&&(h(bL(a)),p.current=n)},[n]);let q=a=>{h(a);let c=bM(a);p.current=JSON.stringify(c),b(c)};return(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Custom HTTP Headers"}),(0,d.jsxs)(L.default,{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)(aU.A,{spacing:1.5,children:[0===f.length&&(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",children:"No custom headers configured."}),f.map((a,b)=>(0,d.jsxs)(aU.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,d.jsx)(aV.A,{size:"small",label:"Header",placeholder:"Authorization",value:a.key,onChange:a=>((a,b)=>{q(f.map((c,d)=>{if(d!==a)return c;let e=c.isSecret||(0,bI.Hm)(b);return{...c,key:b,isSecret:e}}))})(b,a.target.value),sx:{flex:"0 0 32%"}}),(0,d.jsx)(aV.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=>{var c;return c=a.target.value,void q(f.map((a,d)=>d===b?{...a,value:c,isMasked:!1,showWarning:!1}:a))},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)(aW.A,{position:"end",children:(0,d.jsx)(A.A,{size:"small",label:`Bound: ${a.boundTo}`,color:"primary",variant:"outlined",onDelete:()=>{q(f.map((a,c)=>c===b?{...a,isBound:!1,boundTo:void 0,value:""}:a))},deleteIcon:(0,d.jsx)(k.A,{fontSize:"small"})})}):null},sx:{flex:1}}),(0,d.jsx)(N.A,{control:(0,d.jsx)(O.A,{checked:a.isSecret,onChange:a=>((a,b)=>{q(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)(aK.A,{title:"Bind to a global variable",children:(0,d.jsx)(aL.A,{"aria-label":"bind header to global variable",size:"small",color:"primary",onClick:()=>{m(b),j(!0)},sx:{mt:.25},children:(0,d.jsx)(bG.A,{fontSize:"small"})})}),(0,d.jsx)(aK.A,{title:"Remove header",children:(0,d.jsx)(aL.A,{"aria-label":"remove header",onClick:()=>{q(f.filter((a,c)=>c!==b))},size:"small",sx:{mt:.25},children:(0,d.jsx)(o.A,{fontSize:"small"})})})]},b)),(0,d.jsx)(e.default,{children:(0,d.jsx)(K.A,{startIcon:(0,d.jsx)(bF.A,{}),onClick:()=>{h(a=>[...a,{key:"",value:"",isSecret:!1}])},size:"small",variant:"outlined",children:"Add Header"})})]}),(0,d.jsx)(bE.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)(L.default,{variant:"h6",sx:{mb:2},children:"Bind Header to Global Variable"}),0===Object.keys(c).length?(0,d.jsx)(L.default,{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)(K.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{null!==l&&(q(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)(L.default,{variant:"body2",children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(K.A,{variant:"outlined",onClick:()=>{j(!1),m(null)},children:"Cancel"})})]})})]})};var bO=c(35406);let bP=/^\$\{global:([^}]+)\}$/,bQ=({clientId:a,clientSecret:b,onClientIdChange:c,onClientSecretChange:g})=>{let{globalEnvVars:h}=(0,bH.rX)(),[i,j]=(0,f.useState)(!1),l=b.match(bP),m=!!l,n=l?.[1]??null,o="/api/oauth/callback";return(0,d.jsxs)(e.default,{sx:{position:"relative"},children:[(0,d.jsxs)(L.default,{variant:"subtitle2",gutterBottom:!0,children:["OAuth Client Credentials"," ",(0,d.jsx)(L.default,{component:"span",variant:"caption",color:"text.secondary",children:"(optional)"})]}),(0,d.jsxs)(L.default,{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)(bO.A,{href:"https://modelcontextprotocol.io/specification/draft/basic/authorization",target:"_blank",rel:"noopener",children:"MCP authorization spec"}),"."]}),(0,d.jsx)(aV.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)(aV.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)(aK.A,{title:"Unbind from global variable",children:(0,d.jsx)(aL.A,{size:"small",onClick:()=>g(""),children:(0,d.jsx)(k.A,{fontSize:"small"})})}):(0,d.jsx)(aK.A,{title:"Bind to a global variable",children:(0,d.jsx)(aL.A,{size:"small",onClick:()=>j(!0),children:(0,d.jsx)(bG.A,{fontSize:"small"})})})},helperText:m?`Bound to global variable "${n}"`:b===bJ.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)(L.default,{variant:"caption",color:"text.secondary",children:"Redirect URI to register in the provider's app:"}),(0,d.jsx)(L.default,{variant:"caption",sx:{fontFamily:"monospace"},children:o}),(0,d.jsx)(aK.A,{title:"Copy redirect URI",children:(0,d.jsx)(aL.A,{size:"small",onClick:()=>navigator.clipboard.writeText(o),children:(0,d.jsx)(u.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)(L.default,{variant:"h6",component:"h2",sx:{mb:2},children:"Bind Client Secret to Global Variable"}),0===Object.keys(h).length?(0,d.jsx)(L.default,{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)(K.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)(L.default,{children:a})},a))}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(K.A,{onClick:()=>j(!1),children:"Cancel"})})]})]})};var bR=c(22042),bS=c(34304),bT=c(38233);let bU=new Set(["npx","bunx","uvx","pipx","dlx"]),bV=new Set(["pnpm","yarn","bun","npm"]),bW=new Set(["dlx","exec","x"]);function bX(a,b=[]){let c=((a||"").split(/[\\/]/).filter(Boolean).pop()||"").toLowerCase().replace(/\.(cmd|exe|bat|ps1)$/i,"");if(bU.has(c))return!0;if(bV.has(c)){let a=(b[0]||"").toLowerCase();return bW.has(a)}return!1}function bY(a){return"stdio"===a.transport&&bX(a.command,a.args??[])}let bZ=({command:a,setCommand:b,transport:c,setTransport:g,websocketUrl:h,setWebsocketUrl:i,serverUrl:j,setServerUrl:k,onRun:l,isRunning:m,runCompleted:n,env:o,onEnvChange:p,headers:q={},onHeadersChange:r,oauthClientId:s="",oauthClientSecret:t="",onOAuthClientIdChange:u,onOAuthClientSecretChange:v,serverName:w,consoleOutput:x,message:y,setMessage:z})=>{(0,f.useEffect)(()=>{x.includes("MODULE_NOT_FOUND")&&z({type:"error",text:"Module not found error detected. Please check the paths defined in the Arguments!"})},[x,z]);let A="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),B="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),C="websocket"===c&&A&&(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),D=a.trim().split(/\s+/).filter(Boolean),E="stdio"===c&&D.length>0&&bX(D[0],D.slice(1)),F=Math.round(90);return(0,d.jsxs)(aU.A,{spacing:3,children:[y&&"error"===y.type&&(0,d.jsx)(M.A,{severity:"error",sx:{mb:2},children:y.text}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Transport Type"}),(0,d.jsxs)(bR.A,{value:c,onChange:(a,b)=>g(b),sx:{borderBottom:1,borderColor:"divider",mb:2},variant:"scrollable",scrollButtons:"auto",children:[(0,d.jsx)(bS.A,{label:"Standard IO",value:"stdio"}),(0,d.jsx)(bS.A,{label:"WebSocket",value:"websocket"}),(0,d.jsx)(bS.A,{label:"SSE",value:"sse"}),(0,d.jsx)(bS.A,{label:"Streamable HTTP",value:"streamable"})]})]}),"websocket"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"WebSocket URL"}),(0,d.jsx)(aV.A,{fullWidth:!0,size:"small",value:h,onChange:a=>i(a.target.value),placeholder:"ws://localhost:3000",variant:"outlined",required:!0,error:!A,helperText:!A&&"Please enter a valid WebSocket URL (starting with ws:// or wss://)"}),C&&(0,d.jsx)(M.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)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Server URL"}),(0,d.jsx)(aV.A,{fullWidth:!0,size:"small",value:j,onChange:a=>k(a.target.value),placeholder:"https://localhost:3000",variant:"outlined",required:!0,error:!B,helperText:!B&&"Please enter a valid HTTP URL (starting with http:// or https://)"})]}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(bN,{headers:q,onChange:r||(()=>{})})}),("sse"===c||"streamable"===c)&&(0,d.jsx)(e.default,{children:(0,d.jsx)(bQ,{clientId:s,clientSecret:t,onClientIdChange:u||(()=>{}),onClientSecretChange:v||(()=>{})})}),"stdio"===c&&(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Run Command"}),(0,d.jsx)(aV.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(a.target.value),placeholder:"npm start",variant:"outlined",required:!0}),E&&(0,d.jsxs)(bT.A,{children:["npx/uvx may download the package on the first run — the Test Run waits up to ",F,"s before timing out."]})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",mt:1},children:(0,d.jsx)(K.A,{variant:"contained",color:n?"success":"primary",onClick:l,startIcon:m?(0,d.jsx)(bB.default,{size:16,color:"inherit"}):void 0,disabled:m||"stdio"===c&&!a.trim()||"websocket"===c&&!A||("sse"===c||"streamable"===c)&&!B,title:"stdio"!==c||a.trim()?"websocket"!==c||A?"sse"!==c&&"streamable"!==c||B?"Test the run command":"Please enter a valid Server URL":"Please enter a valid WebSocket URL":"Please enter a run command first",children:m?"Running...":"3) Test Run"})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(bD.A,{serverName:w,initialEnv:o,onSave:async a=>(p(a),Promise.resolve())})})]})};var b$=c(95345);let b_=({args:a,onArgChange:b,onAddArg:c,onRemoveArg:f,onFolderSelect:g,onParseReadme:h,onParseClipboard:j,isParsingReadme:k})=>{let{getThemeColor:l}=(0,i.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)(L.default,{variant:"subtitle2",children:"Arguments"}),(0,d.jsxs)(aU.A,{direction:"row",spacing:1,children:[(0,d.jsx)(K.A,{size:"small",startIcon:(0,d.jsx)(b$.A,{}),onClick:h,disabled:k,color:"inherit",sx:{color:"text.secondary"},children:"Parse README"}),(0,d.jsx)(K.A,{size:"small",startIcon:(0,d.jsx)(b$.A,{}),onClick:j,color:"inherit",sx:{color:"text.secondary"},children:"Parse from Clipboard"})]})]}),(0,d.jsxs)(aU.A,{spacing:1,children:[a.map((a,c)=>(0,d.jsxs)(aU.A,{direction:"row",spacing:1,children:[(0,d.jsx)(aV.A,{fullWidth:!0,size:"small",value:a,onChange:a=>b(c,a.target.value),variant:"outlined"}),(0,d.jsx)(aK.A,{title:"Select folder",children:(0,d.jsx)(aL.A,{onClick:()=>g(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(aT.A,{})})}),(0,d.jsx)(aK.A,{title:"Remove argument",children:(0,d.jsx)(aL.A,{onClick:()=>f(c),size:"small",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(o.A,{})})})]},c)),(0,d.jsx)(K.A,{startIcon:(0,d.jsx)(bF.A,{}),onClick:c,color:"primary",sx:{alignSelf:"flex-start",mt:1},children:"Add Argument"})]})]})};var b0=c(2173),b1=c(82605),b2=c(98256),b3=c(7675),b4=c(94367);let b5=(0,p.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 b6=c(83434);let b7=(0,h.h)("frontend/components/mcp/.../SamplingManager"),b8=({policy:a,onChange:b})=>{let[c,g]=(0,f.useState)([]),h=!!a?.enabled;(0,f.useEffect)(()=>{let a=!1;return b6.N.loadModels().then(b=>{a||g(Array.isArray(b)?b:[])}).catch(a=>b7.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.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(b5,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(L.default,{variant:"subtitle1",children:"Let this tool use your AI"}),(0,d.jsx)(aM.A,{checked:h,onChange:a=>i({enabled:a.target.checked}),size:"small",sx:{ml:1}})]}),(0,d.jsx)(L.default,{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)(b1.A,{size:"small",sx:{minWidth:260},error:!a?.modelId,children:[(0,d.jsx)(b2.A,{id:"sampling-model-label",children:"Model"}),(0,d.jsxs)(b3.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)(b4.A,{value:"",disabled:!0,children:"No models configured"}),c.map(a=>(0,d.jsx)(b4.A,{value:a.id,children:a.displayName||a.name},a.id))]})]}),(0,d.jsx)(aV.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)(M.A,{severity:"warning",sx:{width:"100%"},children:"Pick a model — sampling requests will be rejected until one is selected."})]})]})};var b9=c(32720);let ca=async(a,b,c,d,e,f,g)=>{let h=await bq(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))},cb=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 bp(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)}},cc=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}
|
|
3
|
+
`),console.log("DEBUG - Installing dependencies for server:",a.name);let i=a.rootPath||`mcp-servers/${a.name}`,j=!1,k=await (0,a4.b)(i,b,a=>{j=!0,g(b=>b+a)});j||g(a=>a+(k.output||"Command completed successfully, but no output was returned.")),k.success?(h(!0),d({type:"success",text:"Dependencies installed successfully. Check the console for more information."})):d({type:"error",text:"Failed to install dependencies. Check the console for more information."}),c(!1)},a9=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:"Building server..."}),e("Build Server Output"),f(!0),g(`Executing: ${b}
|
|
7
4
|
|
|
8
|
-
`),console.log("DEBUG -
|
|
9
|
-
|
|
10
|
-
`),console.log("DEBUG - Building server:",a.name);let i=a.rootPath||`mcp-servers/${a.name}`,j=!1,k=await ab(i,b,a=>{j=!0,g(b=>b+a)});j||g(a=>a+(k.output||"Command completed successfully, but no output was returned.")),k.success?(h(!0),d({type:"success",text:"Server built successfully. Check the console for more information."})):d({type:"error",text:"Failed to build server. Check the console for more information."}),c(!1)},ce=async(a,b,c,d,e,f,g,h,i)=>{if(!a.name)return void h({type:"error",text:"Please specify a server name first"});if("stdio"===a.transport&&!a.command)return void h({type:"error",text:"Please specify a run command first"});if("websocket"===a.transport&&!b)return void h({type:"error",text:"Please enter a valid WebSocket URL"});if(("sse"===a.transport||"streamable"===a.transport)&&!c)return void h({type:"error",text:"Please enter a valid Server URL"});d(!0),e("Test Server Connection"),f("Testing server connection...\n"),g(!0),h({type:"success",text:"Testing server connection..."});let j=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+`Attempting to connect (via FLUJO backend) to: ${c}
|
|
5
|
+
`),console.log("DEBUG - Building server:",a.name);let i=a.rootPath||`mcp-servers/${a.name}`,j=!1,k=await (0,a4.c)(i,b,a=>{j=!0,g(b=>b+a)});j||g(a=>a+(k.output||"Command completed successfully, but no output was returned.")),k.success?(h(!0),d({type:"success",text:"Server built successfully. Check the console for more information."})):d({type:"error",text:"Failed to build server. Check the console for more information."}),c(!1)},ba=async(a,b,c,d,e,f,g,h,i)=>{if(!a.name)return void h({type:"error",text:"Please specify a server name first"});if("stdio"===a.transport&&!a.command)return void h({type:"error",text:"Please specify a run command first"});if("websocket"===a.transport&&!b)return void h({type:"error",text:"Please enter a valid WebSocket URL"});if(("sse"===a.transport||"streamable"===a.transport)&&!c)return void h({type:"error",text:"Please enter a valid Server URL"});d(!0),e("Test Server Connection"),f("Testing server connection...\n"),g(!0),h({type:"success",text:"Testing server connection..."});let j=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+`Attempting to connect (via FLUJO backend) to: ${c}
|
|
11
6
|
`);let b={...a,serverUrl:c},d=Object.keys(a.headers||{}).length;d>0&&f(a=>a+`Sending ${d} custom header(s).
|
|
12
|
-
`);let e=await
|
|
7
|
+
`);let e=await a5.S.testConnectionStreaming(b,j);if(e.success){i(!0);let a=e.data?.toolCount;h({type:"success",text:"Connection test successful! Server is reachable."}),f(b=>b+`Connection test result: MCP handshake successful${"number"==typeof a?` (${a} tool${1===a?"":"s"} discovered)`:""}
|
|
13
8
|
`),f(a=>a+"\n✅ Server connection test passed!\n")}else e.requiresAuthentication?(h({type:"warning",text:"Server reachable but requires authentication."}),f(a=>a+`Connection test result: authentication required
|
|
14
9
|
`),e.error&&f(a=>a+`Details: ${e.error}
|
|
15
10
|
`),f(a=>a+"\n⚠️ Server requires authentication. Add the required headers (e.g. Authorization) and test again.\n")):(h({type:"error",text:"Connection test failed. Check the console for details."}),f(a=>a+`Connection test result: Connection failed
|
|
@@ -17,7 +12,7 @@ ${R}`:""].join("");navigator.clipboard.writeText(b),aO.debug(`Error copied to cl
|
|
|
17
12
|
`),f(a=>a+"\n❌ Server connection test failed.\n"))}catch(a){console.error("Error testing connection:",a),f(b=>b+`
|
|
18
13
|
Error during connection test: ${a.message}
|
|
19
14
|
`),h({type:"error",text:"Connection test failed with an error."})}finally{d(!1)}return}if("websocket"===a.transport){try{f(a=>a+`Attempting to connect (via FLUJO backend) to: ${b}
|
|
20
|
-
`);let c={...a,websocketUrl:b},d=await
|
|
15
|
+
`);let c={...a,websocketUrl:b},d=await a5.S.testConnectionStreaming(c,j);if(d.success){i(!0);let a=d.data?.toolCount;h({type:"success",text:"Connection test successful! Server completed the MCP handshake."}),f(b=>b+`Connection test result: MCP handshake successful${"number"==typeof a?` (${a} tool${1===a?"":"s"} discovered)`:""}
|
|
21
16
|
`),f(a=>a+"\n✅ Server connection test passed!\n")}else d.requiresAuthentication?(h({type:"warning",text:"Server reachable but requires authentication."}),f(a=>a+`Connection test result: authentication required
|
|
22
17
|
`),d.error&&f(a=>a+`Details: ${d.error}
|
|
23
18
|
`),f(a=>a+"\n⚠️ Server requires authentication. Add the required credentials and test again.\n")):(h({type:"error",text:"Connection test failed. Check the console for details."}),f(a=>a+`Connection test result: Connection failed
|
|
@@ -25,26 +20,27 @@ Error during connection test: ${a.message}
|
|
|
25
20
|
`),f(a=>a+"\n❌ Server connection test failed.\n"))}catch(a){console.error("Error testing WebSocket connection:",a),f(b=>b+`
|
|
26
21
|
Error during connection test: ${a.message}
|
|
27
22
|
`),h({type:"error",text:"Connection test failed with an error."})}finally{d(!1)}return}try{if("stdio"===a.transport){let b=(a.args||[]).join(" ");if(f(c=>c+`Launching (via FLUJO backend): ${a.command}${b?" "+b:""}
|
|
28
|
-
`),
|
|
29
|
-
`)}}let b=await
|
|
23
|
+
`),aQ(a)){let b=Math.round((aQ(a)?9e4:15e3)/1e3);f(a=>a+"This looks like a package-runner command (npx/uvx). The first run may need to download the package, "+`so the test waits up to ${b}s before timing out — please wait...
|
|
24
|
+
`)}}let b=await a5.S.testConnectionStreaming(a,j);if(b.success){i(!0);let a=b.data?.toolCount;h({type:"success",text:"Connection test successful! Server started and completed the MCP handshake."}),f(b=>b+`Connection test result: MCP handshake successful${"number"==typeof a?` (${a} tool${1===a?"":"s"} discovered)`:""}
|
|
30
25
|
`),f(a=>a+"\n✅ Server connection test passed!\n")}else b.requiresAuthentication?(h({type:"warning",text:"Server started but requires authentication."}),f(a=>a+`Connection test result: authentication required
|
|
31
26
|
`),b.error&&f(a=>a+`Details: ${b.error}
|
|
32
27
|
`),f(a=>a+"\n⚠️ Server requires authentication. Add the required credentials (env/headers) and test again.\n")):(h({type:"error",text:"Connection test failed. Check the console for details."}),f(a=>a+`Connection test result: Connection failed
|
|
33
28
|
`),f(a=>a+`Details: ${b.error||"Unknown error"}
|
|
34
29
|
`),f(a=>a+"\n❌ Server connection test failed.\n"))}catch(a){console.error("Error testing stdio connection:",a),f(b=>b+`
|
|
35
30
|
Error during connection test: ${a.message}
|
|
36
|
-
`),h({type:"error",text:"Connection test failed with an error."})}finally{d(!1)}};var cf=c(61628),cg=c(19787),ch=c(95803),ci=c(17332);let cj=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,autoTestRun:h})=>{let{localConfig:i,setLocalConfig:j,websocketUrl:k,setWebsocketUrl:l,serverUrl:m,setServerUrl:n,buildCommand:o,setBuildCommand:p,installCommand:q,setInstallCommand:r,message:s,setMessage:t,buildMessage:u,setBuildMessage:v,isBuilding:w,setIsBuilding:x,isInstalling:y,setIsInstalling:z,buildCompleted:A,setBuildCompleted:B,installCompleted:C,setInstallCompleted:D,isParsingReadme:E,setIsParsingReadme:F,isParsingEnv:G,setIsParsingEnv:H,isRunning:I,setIsRunning:J,runCompleted:N,setRunCompleted:O,expandedSections:P,setExpandedSections:Q,handleTransportChange:R,handleArgChange:S,addArgField:T,removeArgField:U,handleEnvChange:V}=(({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)&&(t({type:"warning",text:"Configuration detection was not successful. Please configure the server manually."}),Q({define:!0,build:!0,run:!0}))},[a]);let[W,X]=(0,f.useState)(!1),[Y,Z]=(0,f.useState)(null),$=async()=>{X(!0)},_=async a=>{Z(a)},aa=async()=>{await ca(i,j,t,p,r,l,k)},ab=async()=>{await cb(i,j,t,F,p,r,l,k)},ac=async()=>{await cc(i,q,z,v,ai,ak,an,D)},ad=async()=>{await cd(i,o,x,v,ai,ak,an,B)},ae=async()=>{await ce(i,k,m,J,ai,an,ak,t,O)},{consoleOutput:af,isConsoleVisible:ag,consoleTitle:ah,setConsoleTitle:ai,toggleConsoleVisibility:aj,setIsConsoleVisible:ak,appendToConsole:al,clearConsole:am,updateConsole:an}=bz(),ao=(0,f.useRef)(!1);(0,f.useEffect)(()=>{h&&!ao.current&&a?.name&&i.name===a.name&&(ao.current=!0,Q({define:!1,build:!1,run:!0}),D(!0),B(!0),ae())},[h,a,i.name]);let ap=a=>(b,c)=>{Q({...P,[a]:c})},aq=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)=>{let l;return a.preventDefault(),b.name&&("stdio"!==b.transport||b.command)?"websocket"!==b.transport||c?"sse"!==b.transport&&"streamable"!==b.transport||d?(l="websocket"===b.transport?{...b,transport:"websocket",websocketUrl:c,_buildCommand:e,_installCommand:f}:"sse"===b.transport?{...b,transport:"sse",serverUrl:d,_buildCommand:e,_installCommand:f}:"streamable"===b.transport?{...b,transport:"streamable",serverUrl:d,_buildCommand:e,_installCommand:f}:{...b,transport:"stdio",_buildCommand:e,_installCommand:f},j&&i?i(l):h(l),k&&k()):g({type:"error",text:"Please enter a valid Server URL"}):g({type:"error",text:"Please enter a valid WebSocket URL"}):g({type:"error",text:"Please fill in all required fields"})})(d,i,k,m,o,q,t,b,c,a,g)},sx:{width:"100%"},children:[(0,d.jsxs)(aQ.Ay,{container:!0,spacing:2,children:[(0,d.jsx)(aQ.Ay,{item:!0,xs:ag?8:12,children:(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsxs)(cf.A,{expanded:P.define,onChange:ap("define"),sx:{border:1,borderColor:i.name&&i.rootPath?h?"success.main":"divider":"error.main",bgcolor:i.name&&i.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)(cg.A,{expandIcon:(0,d.jsx)(ci.A,{}),"aria-controls":"define-server-content",id:"define-server-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(L.default,{variant:"h6",sx:{color:aq(i.name&&i.rootPath?h?"success":"default":"error"),fontWeight:500},children:"First, define your server"})}),(0,d.jsx)(ch.A,{sx:{px:3,py:2},children:(0,d.jsx)(bA,{name:i.name,setName:a=>j({...i,name:a}),rootPath:i.rootPath||"",setRootPath:a=>j({...i,rootPath:a}),onRootPathSelect:$})})]}),(0,d.jsxs)(cf.A,{expanded:P.build,onChange:ap("build"),sx:{border:1,borderColor:u?.type==="error"?"error.main":C&&A?"success.main":C||A?"warning.main":y||w?"info.main":"divider",bgcolor:u?.type==="error"?"error.lighter":C&&A?"success.lighter":C||A?"warning.lighter":y||w?"info.lighter":"background.paper","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(cg.A,{expandIcon:(0,d.jsx)(ci.A,{}),"aria-controls":"build-content",id:"build-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(L.default,{variant:"h6",sx:{color:aq(u?.type==="error"?"error":C&&A?"success":C||A?"warning":y||w?"loading":"default"),fontWeight:500},children:"Second, install and build"})}),(0,d.jsx)(ch.A,{sx:{px:3,py:2},children:(0,d.jsx)(bC,{installCommand:q,setinstallCommand:r,buildCommand:o,setBuildCommand:p,onInstall:ac,onBuild:ad,isInstalling:y,isBuilding:w,installCompleted:C,buildCompleted:A,buildMessage:u})})]}),(0,d.jsxs)(cf.A,{expanded:P.run,onChange:ap("run"),sx:{border:1,borderColor:s?.type!=="error"||I?N?"success.main":I?"info.main":"divider":"error.main",bgcolor:s?.type!=="error"||I?N?"success.lighter":I?"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)(cg.A,{expandIcon:(0,d.jsx)(ci.A,{}),"aria-controls":"run-content",id:"run-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(L.default,{variant:"h6",sx:{color:aq(s?.type!=="error"||I?N?"success":I?"loading":"default":"error"),fontWeight:500},children:"Third, define how to run your server"})}),(0,d.jsx)(ch.A,{sx:{px:3,py:2},children:(0,d.jsxs)(aU.A,{spacing:4,children:[(0,d.jsx)(bZ,{command:"stdio"===i.transport?i.command:"",setCommand:a=>{"stdio"===i.transport&&j(b=>"stdio"===b.transport?{...b,command:a}:b)},transport:i.transport,setTransport:R,websocketUrl:k,setWebsocketUrl:l,serverUrl:m,setServerUrl:n,onRun:ae,isRunning:I,runCompleted:N,env:i.env,onEnvChange:V,headers:("sse"===i.transport||"streamable"===i.transport)&&i.headers||{},onHeadersChange:a=>j(b=>({...b,headers:a})),oauthClientId:i.oauthClientId||"",oauthClientSecret:i.oauthClientSecret||"",onOAuthClientIdChange:a=>j(b=>({...b,oauthClientId:a})),onOAuthClientSecretChange:a=>j(b=>({...b,oauthClientSecret:a})),serverName:i.name,consoleOutput:af,message:s,setMessage:t}),(0,d.jsx)(e.default,{children:(0,d.jsx)(b_,{args:"stdio"===i.transport&&i.args||[],onArgChange:S,onAddArg:T,onRemoveArg:U,onFolderSelect:_,onParseReadme:ab,onParseClipboard:aa,isParsingReadme:E})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(b0.A,{roots:i.roots||[],onChange:a=>j(b=>({...b,roots:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(b8,{policy:i.sampling,onChange:a=>j(b=>({...b,sampling:a}))})})]})})]})]})}),ag&&(0,d.jsx)(aQ.Ay,{item:!0,xs:4,children:(0,d.jsx)(by,{output:af,isVisible:!0,toggleVisibility:aj,title:ah})})]}),s&&(0,d.jsx)(e.default,{sx:{mt:2,mb:2},children:(0,d.jsx)(M.A,{severity:s.type,children:s.text})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(K.A,{variant:"outlined",onClick:g,children:"Cancel"}),(0,d.jsx)(K.A,{type:"submit",variant:"contained",color:"primary",children:a?"Update Server":"Add Server"})]}),(0,d.jsx)(b9.A,{open:W,title:"Choose the server folder",initialPath:i.rootPath||void 0,onClose:()=>X(!1),onSelect:a=>j({...i,rootPath:a})}),(0,d.jsx)(b9.A,{open:null!==Y,title:"Choose a folder or file",selectFiles:!0,onClose:()=>Z(null),onSelect:a=>{null!==Y&&S(Y,a)}})]})},ck={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},cl={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function cm(a){var b;let c=[];for(let d of a.packages??[])(function(a){if(!a.identifier||!ck[a.registryType]&&!a.runtimeHint)return!1;let b=a.transport?.type;return!b||"stdio"===b})(d)&&c.push({kind:"package",label:`${cl[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 cn=new Set(["mcp","server","mcp-server","mcpserver"]);function co(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!cn.has(d.toLowerCase())||!c)return d;let e=c.split(".").pop()||"";return e?`${e}-${d}`:d}function cp(a){return a.title?a.title:co(a.name)}function cq(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 cr(a){return(a??[]).flatMap(cq)}function cs(a){return{name:co(a.name).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server",disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:""}}function ct(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function cu(a,b){return"package"===b.kind?function(a,b){let c,d=b.runtimeHint||ck[b.registryType],e=cr(b.packageArguments),f=cr(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",ct(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,ct(b),"--yes",...e];break;default:c=[...f,ct(b),...e]}return{...cs(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=cs(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote)}function cv(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)).map(a=>a.name)}var cw=c(423);let cx=(0,p.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");function cy(a){return(0,ay.Ay)("MuiAvatar",a)}(0,ax.A)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);let cz=(0,ao.Ay)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],c.colorDefault&&b.colorDefault]}})((0,aq.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]})}}}]}))),cA=(0,ao.Ay)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(a,b)=>b.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),cB=(0,ao.Ay)(cx,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(a,b)=>b.fallback})({width:"75%",height:"75%"}),cC=f.forwardRef(function(a,b){let c=(0,ar.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,ae.A)({root:["root",c,d&&"colorDefault"],img:["img"],fallback:["fallback"]},cy,b)})(s),[x,y]=(0,aF.A)("img",{className:w.img,elementType:cA,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)(cB,{ownerState:s,className:w.fallback}),(0,d.jsx)(cz,{as:i,className:(0,au.A)(w.root,h),ref:b,...q,ownerState:s,children:r})});var cD=c(75983),cE=c(40973);let cF=(0,p.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 cG=c(15059);let cH=(0,p.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"),cI=(0,p.A)((0,d.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"),cJ=({onClose:a,setActiveTab:b,onUpdate:c,onOpenInGitHubTab:g})=>{let h=(0,ap.A)(),[i,j]=(0,f.useState)(""),[k,l]=(0,f.useState)(""),[m,n]=(0,f.useState)([]),[o,p]=(0,f.useState)(null),[q,r]=(0,f.useState)(!1),[s,t]=(0,f.useState)(!1),[u,v]=(0,f.useState)(null),[w,x]=(0,f.useState)(null),y=(0,f.useRef)(0),z=(0,f.useCallback)(async(a,b)=>{let c=++y.current,d=!b;d?r(!0):t(!0),v(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!==y.current)return;if(!f.ok||!1===g.success)throw Error(g.error||`Request failed with status ${f.status}`);let h=g.servers??[];n(a=>d?h:[...a,...h]),p(h.length>0?g.metadata?.nextCursor??null:null)}catch(a){if(c!==y.current)return;console.error("Error fetching from MCP Registry:",a),v({type:"error",text:`Could not load servers from the MCP Registry: ${a instanceof Error?a.message:"Unknown error"}`})}finally{c===y.current&&(r(!1),t(!1))}},[]);(0,f.useEffect)(()=>{k&&z(k)},[k,z]);let C=()=>{j(""),l(""),y.current++,r(!1),t(!1),n([]),p(null),v(null)},D=(a,d)=>{let e=cu(a,d),f=cv(d);c&&c(e,{autoTestRun:!0}),x(null),b&&b("local"),v({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=>{let b=a.repository?.url;if(!b)return null;try{return"github.com"===new URL(b).hostname?b:null}catch{return null}},F=w?cm(w):[];return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsx)(L.default,{variant:"h6",gutterBottom:!0,children:"MCP Marketplace"}),(0,d.jsxs)(L.default,{variant:"body2",color:"text.secondary",children:["Search the official"," ",(0,d.jsx)(bO.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)(aV.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===k?z(b):l(b):C()}},placeholder:"Search servers by name and press Enter (e.g. github, filesystem, postgres)…",variant:"outlined",InputProps:{startAdornment:(0,d.jsx)(aW.A,{position:"start",children:(0,d.jsx)(cE.A,{})}),endAdornment:i?(0,d.jsx)(aW.A,{position:"end",children:(0,d.jsx)(aL.A,{size:"small",onClick:C,"aria-label":"clear search",children:(0,d.jsx)(cI,{fontSize:"small"})})}):void 0}}),u&&(0,d.jsx)(M.A,{severity:u.type,onClose:()=>v(null),children:u.text}),q?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(bB.default,{})}):(0,d.jsxs)(d.Fragment,{children:[0===m.length&&!u&&(0,d.jsx)(L.default,{variant:"body1",color:"text.secondary",sx:{textAlign:"center",my:4},children:k?(0,d.jsxs)(d.Fragment,{children:['No servers found for "',k,'". 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)(aQ.Ay,{container:!0,spacing:2,children:m.map(a=>{let b=a.server,c=cm(b).length>0;return(0,d.jsx)(aQ.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(aI.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)(cw.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>(a=>{let b=cm(a);1===b.length?D(a,b[0]):x(a)})(b),children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",alignItems:"center",borderBottom:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(cC,{sx:{bgcolor:h.palette.primary.main,color:"#fff",mr:2,boxShadow:1},children:cp(b).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(L.default,{variant:"subtitle1",component:"div",noWrap:!0,title:cp(b),children:cp(b)}),(0,d.jsx)(L.default,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(aJ.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(L.default,{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:[(a=>{let b=[],c=new Set;for(let e of a.packages??[]){let a=function(a){return cl[a]||a}(e.registryType);c.has(a)||(c.add(a),b.push((0,d.jsx)(A.A,{size:"small",icon:(0,d.jsx)(B.A,{}),label:a},`pkg-${a}`)))}return(a.remotes??[]).length>0&&b.push((0,d.jsx)(A.A,{size:"small",icon:(0,d.jsx)(cH,{}),label:"Remote"},"remote")),b})(b),b.version&&(0,d.jsx)(A.A,{size:"small",variant:"outlined",label:`v${b.version}`}),!c&&(0,d.jsx)(A.A,{size:"small",color:"warning",variant:"outlined",label:"Manual setup"})]})]})]})})},b.name)})}),o&&m.length>0&&(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsx)(K.A,{variant:"outlined",onClick:()=>z(k,o),disabled:s,startIcon:s?(0,d.jsx)(bB.default,{size:20,color:"inherit"}):void 0,children:s?"Loading…":"Load more"})})]}),(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1},children:(0,d.jsx)(K.A,{variant:"outlined",onClick:a,children:"Cancel"})})]}),(0,d.jsx)(G.A,{open:null!==w,onClose:()=>x(null),maxWidth:"sm",fullWidth:!0,children:w&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(H.A,{children:cp(w)}),(0,d.jsxs)(I.A,{children:[(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:w.description||"No description provided."}),F.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Choose how to install this server:"}),(0,d.jsx)(P.A,{children:F.map((a,b)=>{let c=cv(a);return(0,d.jsxs)(cD.A,{onClick:()=>D(w,a),children:[(0,d.jsx)(R.A,{children:"package"===a.kind?(0,d.jsx)(B.A,{}):(0,d.jsx)(cH,{})}),(0,d.jsx)(S.A,{primary:a.label,secondary:c.length>0?`Requires: ${c.join(", ")}`:"package"===a.kind?"Runs locally":"Hosted remotely",primaryTypographyProps:{sx:{wordBreak:"break-all"}}})]},b)})})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(M.A,{severity:"info",children:["This server does not offer an installation method FLUJO can set up automatically. Check its documentation for manual setup instructions.",E(w)&&g&&(0,d.jsx)(d.Fragment,{children:" You can still try to clone it directly from GitHub, but additional steps might still be required."})]}),E(w)&&g&&(0,d.jsx)(K.A,{variant:"contained",startIcon:(0,d.jsx)(cF,{}),onClick:()=>(a=>{let b=E(a);b&&g&&(x(null),g(b))})(w),sx:{mt:2},children:"Try manual installation"})]}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1,mt:1},children:[w.repository?.url&&(0,d.jsx)(K.A,{size:"small",startIcon:(0,d.jsx)(cF,{}),component:"a",href:w.repository.url,target:"_blank",rel:"noopener noreferrer",children:"Repository"}),w.websiteUrl&&(0,d.jsx)(K.A,{size:"small",startIcon:(0,d.jsx)(cG.A,{}),component:"a",href:w.websiteUrl,target:"_blank",rel:"noopener noreferrer",children:"Website"})]})]}),(0,d.jsx)(J.A,{children:(0,d.jsx)(K.A,{onClick:()=>x(null),children:"Close"})})]})})]})},cK=(0,p.A)((0,d.jsx)("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}),"Star"),cL=({onClose:a,setActiveTab:b,onUpdate:c})=>{let g=(0,ap.A)(),[h,i]=(0,f.useState)(null),[j,k]=(0,f.useState)(!0),[l,n]=(0,f.useState)(!1),[o,p]=(0,f.useState)(null),[q,r]=(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||p({type:"error",text:`Could not load spotlight servers: ${b instanceof Error?b.message:"Unknown error"}`})}finally{a||k(!1)}})(),()=>{a=!0}},[]);let s=async()=>{n(!0),p(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){p({type:"error",text:`Refresh failed: ${a instanceof Error?a.message:"Unknown error"}`})}finally{n(!1)}},t=(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}}(cu(a.server,d),a.env);r(null),c&&c(e,{autoTestRun:!0}),b&&b("local")},u=(h?.entries??[]).filter(a=>a.result).map(a=>({server:a.result.server,env:a.env})),v=(h?.entries??[]).filter(a=>!a.result),w=q?cm(q.server):[],x=w.find(a=>"package"===a.kind),y=w.find(a=>"remote"===a.kind);return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,d.jsx)(L.default,{variant:"h6",children:"Spotlight"}),(0,d.jsx)(K.A,{variant:"outlined",size:"small",onClick:s,disabled:l,startIcon:l?(0,d.jsx)(bB.default,{size:16,color:"inherit"}):(0,d.jsx)(m.A,{}),children:l?"Refreshing…":"Refresh"})]}),(0,d.jsxs)(L.default,{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(),"."]})]}),o&&(0,d.jsx)(M.A,{severity:o.type,onClose:()=>p(null),children:o.text}),j?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(bB.default,{})}):0===u.length?(0,d.jsx)(L.default,{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)(aQ.Ay,{container:!0,spacing:2,children:u.map(a=>{let{server:b}=a,c=cm(b),f=c.some(a=>"package"===a.kind),h=c.some(a=>"remote"===a.kind);return(0,d.jsx)(aQ.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(aI.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)(cw.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>(a=>{let b=cm(a.server);if(0===b.length)return void p({type:"warning",text:`${cp(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 r(a);t(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)(cC,{sx:{bgcolor:g.palette.warning.main,color:"#fff",mr:2,boxShadow:1},children:(0,d.jsx)(cK,{fontSize:"small"})}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(L.default,{variant:"subtitle1",component:"div",noWrap:!0,title:cp(b),children:cp(b)}),(0,d.jsx)(L.default,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(aJ.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(L.default,{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)(A.A,{size:"small",icon:(0,d.jsx)(B.A,{}),label:"Local"}),h&&(0,d.jsx)(A.A,{size:"small",icon:(0,d.jsx)(cH,{}),label:"Remote"}),b.version&&(0,d.jsx)(A.A,{size:"small",variant:"outlined",label:`v${b.version}`})]})]})]})})},b.name)})}),v.length>0&&!j&&(0,d.jsxs)(M.A,{severity:"warning",children:[v.length," spotlight ",1===v.length?"entry":"entries"," could not be resolved against the MCP Registry:",v.map(a=>(0,d.jsxs)(L.default,{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)(K.A,{variant:"outlined",onClick:a,children:"Cancel"})})]}),(0,d.jsx)(G.A,{open:null!==q,onClose:()=>r(null),maxWidth:"xs",fullWidth:!0,children:q&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(H.A,{children:cp(q.server)}),(0,d.jsxs)(I.A,{children:[(0,d.jsx)(L.default,{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)(P.A,{children:[x&&(0,d.jsxs)(cD.A,{onClick:()=>t(q,x),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(B.A,{})}),(0,d.jsx)(S.A,{primary:"Local",secondary:"Runs on your machine"})]}),y&&(0,d.jsxs)(cD.A,{onClick:()=>t(q,y),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(cH,{})}),(0,d.jsx)(S.A,{primary:"Remote",secondary:"Connects to a hosted endpoint"})]})]})]}),(0,d.jsx)(J.A,{children:(0,d.jsx)(K.A,{onClick:()=>r(null),children:"Cancel"})})]})})]})},cM=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let h=(0,ap.A)(),[i,j]=(0,f.useState)(!1),[k,l]=(0,f.useState)(!1),[n,o]=(0,f.useState)(!1),[p,q]=(0,f.useState)(null),[r,s]=(0,f.useState)([]),[t,u]=(0,f.useState)(""),[v,w]=(0,f.useState)(!1),{consoleOutput:x,isConsoleVisible:y,setIsConsoleVisible:z,updateConsole:B,clearConsole:C}=bz();(0,f.useEffect)(()=>{(async()=>{j(!0);try{let a=await fetch("/api/cwd"),b=await a.json();if(b.success){u(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();w(d.exists),d.exists?await E(a):q({type:"warning",text:'ModelContextProtocol servers repository not found. Click "Refresh" to clone it.'})}}catch(a){console.error("Error initializing Reference Servers tab:",a),q({type:"error",text:`Failed to initialize: ${a instanceof Error?a.message:"Unknown error"}`})}finally{j(!1)}})()},[]);let D=async()=>{l(!0),C(),z(!0),B("Starting repository refresh...\n");try{let a="https://github.com/modelcontextprotocol/servers.git",b=`${t}/servers`;if(v){B("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?B(`Pull successful: ${c.output||"Repository updated"}
|
|
37
|
-
`):(
|
|
38
|
-
`),
|
|
39
|
-
`),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)
|
|
40
|
-
`),
|
|
41
|
-
`),
|
|
42
|
-
`):
|
|
43
|
-
`)}else
|
|
44
|
-
`);await
|
|
45
|
-
`),
|
|
46
|
-
`);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);
|
|
47
|
-
`)}catch(a){throw console.error("Error fetching server info:",a),
|
|
48
|
-
`),a}},F=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}},G=async a=>{try{let b=await F(`${a.directory}/package.json`),d=await F(`${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 F(`${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};g&&g(j),c&&c("local")}catch(a){console.error("Error configuring server:",a),q({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)(aU.A,{spacing:3,children:[(0,d.jsx)(L.default,{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)(L.default,{variant:"body1",children:v?`${r.length} servers available from the ModelContextProtocol repository`:'Repository not yet cloned. Click "Refresh" to get started.'}),(0,d.jsx)(K.A,{variant:"contained",color:"primary",startIcon:k?(0,d.jsx)(bB.default,{size:20,color:"inherit"}):(0,d.jsx)(m.A,{}),onClick:D,disabled:k,children:k?"Refreshing...":"Refresh"})]}),p&&(0,d.jsx)(M.A,{severity:p.type,sx:{mb:2},children:p.text}),i?(0,d.jsx)(e.default,{sx:{display:"flex",justifyContent:"center",my:4},children:(0,d.jsx)(bB.default,{})}):(0,d.jsxs)(d.Fragment,{children:[y&&(0,d.jsx)(aw.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:x})}),(0,d.jsx)(aQ.Ay,{container:!0,spacing:2,children:r.map(a=>(0,d.jsx)(aQ.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,d.jsx)(aI.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)(cw.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>G(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)(cC,{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)(L.default,{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)(A.A,{size:"small",icon:(0,d.jsx)(cF,{}),label:"MCP",sx:{mr:1,bgcolor:"rgba(255,255,255,0.2)",color:"#fff","& .MuiChip-icon":{color:"#fff"}}}),(0,d.jsx)(L.default,{variant:"caption",sx:{color:"rgba(255,255,255,0.8)"},children:"Reference Server"})]})]})]}),(0,d.jsx)(aJ.A,{sx:{flexGrow:1,pt:2},children:(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:a.description||`MCP Reference Server for ${a.name.replace(/-/g," ")}`})})]})})},a.name))})]})]})})},cN=({onAdd:a,onClose:b,setActiveTab:c,onUpdate:g})=>{let[h,i]=(0,f.useState)(""),[j,k]=(0,f.useState)(!1),[l,m]=(0,f.useState)(null),n=(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(h),o=async()=>{if(!n)return void m({type:"error",text:"Please enter a valid HTTP or HTTPS URL"});k(!0),m({type:"success",text:"Validating URL..."});try{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:""};g&&g(b),c&&c("local"),m({type:"success",text:"Switching to Local Server tab with pre-filled configuration..."})}catch(a){console.error("Error processing remote URL:",a),m({type:"error",text:`Error processing URL: ${a instanceof Error?a.message:"Unknown error"}`})}finally{k(!1)}};return(0,d.jsx)(aw.A,{elevation:0,sx:{p:0},children:(0,d.jsxs)(aU.A,{spacing:3,children:[(0,d.jsx)(L.default,{variant:"h6",gutterBottom:!0,children:"Connect to Remote MCP Server"}),(0,d.jsx)(L.default,{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)(L.default,{variant:"subtitle2",gutterBottom:!0,children:"Server URL"}),(0,d.jsx)(aV.A,{fullWidth:!0,size:"small",value:h,onChange:a=>{i(a.target.value),l&&m(null)},placeholder:"https://example.com/mcp",variant:"outlined",required:!0,error:h.length>0&&!n,helperText:h.length>0&&!n?"Please enter a valid HTTP or HTTPS URL":"Enter the full URL to the MCP server endpoint",disabled:j})]}),l&&(0,d.jsx)(e.default,{children:(0,d.jsx)(M.A,{severity:l.type,children:l.text})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:3},children:[(0,d.jsx)(K.A,{variant:"outlined",onClick:b,disabled:j,children:"Cancel"}),(0,d.jsx)(K.A,{variant:"contained",color:"primary",onClick:o,disabled:!n||j,children:j?"Connecting...":"Connect"})]})]})})};var cO=c(30137);let cP=({isOpen:a,onClose:b,onAdd:c,initialConfig:g,onUpdate:h,onRestartAfterUpdate:j})=>{let[k,l]=(0,f.useState)("spotlight"),[m,n]=(0,f.useState)(null),[o,p]=(0,f.useState)(!1),[q,r]=(0,f.useState)(""),[s,t]=(0,f.useState)({spotlight:!1,marketplace:!1,github:!1,local:!1,reference:!1,remote:!1});(0,f.useEffect)(()=>{g||s[k]||t(a=>({...a,[k]:!0}))},[k,g,s]);let{getThemeValue:u}=(0,i.Ic)(),v=()=>{n(null),p(!1),r(""),l("spotlight"),b()};return(0,d.jsxs)(G.A,{open:a,onClose:v,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{width:"95vw",maxWidth:"95vw",maxHeight:"95vh",height:"auto"}},children:[(0,d.jsxs)(H.A,{component:"div",sx:{display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider",pb:1},children:[(0,d.jsx)(L.default,{variant:"h6",children:g?`Edit MCP Server: ${g.name}`:"Add MCP Server"}),(0,d.jsx)(aL.A,{edge:"end",color:"inherit",onClick:v,"aria-label":"close",children:(0,d.jsx)(cO.A,{})})]}),(0,d.jsxs)(I.A,{sx:{p:0},children:[g?null:(0,d.jsx)(e.default,{sx:{borderBottom:1,borderColor:"divider"},children:(0,d.jsxs)(bR.A,{value:k,onChange:(a,b)=>{p(!1),r(""),l(b)},"aria-label":"server configuration tabs",sx:{px:2},children:[(0,d.jsx)(bS.A,{label:"Spotlight",value:"spotlight"}),(0,d.jsx)(bS.A,{label:"Marketplace",value:"marketplace"}),(0,d.jsx)(bS.A,{label:"GitHub",value:"github"}),(0,d.jsx)(bS.A,{label:"Local Server",value:"local"}),(0,d.jsx)(bS.A,{label:"Remote",value:"remote"}),(0,d.jsx)(bS.A,{label:"Reference Servers",value:"reference"})]})}),(0,d.jsx)(e.default,{sx:{p:3},children:g?(0,d.jsx)(cj,{initialConfig:g,onAdd:c,onUpdate:h,onClose:b,onRestartAfterUpdate:j}):"spotlight"===k?(0,d.jsx)(cL,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:(a,b)=>{n(a),p(!!b?.autoTestRun)}}):"marketplace"===k?(0,d.jsx)(cJ,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:(a,b)=>{n(a),p(!!b?.autoTestRun)},onOpenInGitHubTab:a=>{r(a),l("github")}}):"github"===k?(0,d.jsx)(bv,{onAdd:c,onClose:b,setActiveTab:l,initialGitHubUrl:q,onUpdate:a=>{n(a),p(!1)}}):"local"===k?(0,d.jsx)(cj,{initialConfig:m,onAdd:c,onClose:b,autoTestRun:o}):"remote"===k?(0,d.jsx)(cN,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:a=>{n(a),p(!1)}}):(0,d.jsx)(cM,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:a=>{n(a),p(!1)}})})]})]})};var cQ=c(91059),cR=c(42387),cS=c(45798),cT=c(18954),cU=c(31411);let cV=(0,h.h)("frontend/components/mcp/MCPToolManager/ToolTester"),cW=({serverName:a,tools:b=[],onTestTool:c,onClose:g})=>{cV.debug("Props:",{serverName:a,toolsCount:b?.length});let h=Array.isArray(b)?b:[];cV.debug("Tools array:",{count:h.length});let[j,k]=(0,f.useState)(""),[l,m]=(0,f.useState)({}),[n,o]=(0,f.useState)(null),[p,q]=(0,f.useState)(!1),[r,s]=(0,f.useState)(60),[t,u]=(0,f.useState)(null),[v,w]=(0,f.useState)(null),[y,z]=(0,f.useState)(null),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(!1),E=async()=>{cV.debug(`Testing tool: ${j} with params:`,JSON.stringify(l)),cV.debug(`Timeout: ${r} seconds`),w(null),z(null),q(!0);try{let a={},b=h.find(a=>a.name===j);b?.inputSchema?.properties?Object.entries(l).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,l),cV.debug("Sending typed params:",JSON.stringify(a));let d=await c(j,a,r);cV.debug("Test result:",JSON.stringify(d)),d&&d.progressToken&&z(d.progressToken),o(d)}catch(a){cV.error("Error testing tool:",a),o({success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"})}q(!1)},F=async()=>{if(!A){B(!0),cV.debug("Cancelling tool execution");try{let b=y?`/api/mcp/cancel?token=${y}&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)cV.info("Successfully sent cancellation request"),u("Cancellation request sent. The operation should stop shortly.");else{let a=await c.json();cV.warn("Failed to cancel operation:",a),u(`Failed to cancel: ${a.error||"Unknown error"}`)}}catch(a){cV.error("Error cancelling tool:",a),u(`Error cancelling: ${a instanceof Error?a.message:"Unknown error"}`)}finally{B(!1)}}},G=h.find(a=>a.name===j);cV.debug("Selected tool data:",{name:G?.name,hasSchema:!!G?.inputSchema});let{getThemeValue:H}=(0,i.Ic)();return(0,d.jsxs)(aw.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)(L.default,{variant:"h6",sx:{fontWeight:"semibold"},children:["Tool Tester - ",a]}),g&&(0,d.jsx)(aK.A,{title:"Close tool tester",children:(0,d.jsx)(aL.A,{size:"small",onClick:g,"aria-label":"Close tool tester",children:(0,d.jsx)(cO.A,{fontSize:"small"})})})]}),t&&(0,d.jsx)(M.A,{severity:"error",sx:{mb:2},children:t}),(0,d.jsxs)(e.default,{sx:{mb:2},children:[(0,d.jsx)(L.default,{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)(b3.A,{fullWidth:!0,value:j,onChange:a=>{k(a.target.value),m({}),o(null)},displayEmpty:!0,sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}},children:[(0,d.jsx)(b4.A,{value:"",children:"Choose a tool..."}),h.map(a=>(0,d.jsx)(b4.A,{value:a.name,children:a.name},a.name))]})]}),G?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.default,{sx:{mb:2},children:(0,d.jsx)(L.default,{variant:"body2",sx:{color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:G.description})}),(0,d.jsxs)(e.default,{sx:{mb:2,display:"flex",flexDirection:"column",gap:2},children:[(0,d.jsx)(cU.A,{schema:G.inputSchema,values:l,onChange:m}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(L.default,{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)(aV.A,{type:"number",fullWidth:!0,size:"small",value:60===r?"":r,onChange:a=>(a=>{let b=parseInt(a,10);""===a||isNaN(b)||b<-1||0===b?s(60):s(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)(L.default,{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)(K.A,{variant:"contained",color:"primary",onClick:E,disabled:p,startIcon:p&&(0,d.jsx)(x.default,{size:"small",color:"white"}),children:p?"Testing...":"Test Tool"}),p&&(0,d.jsx)(K.A,{variant:"contained",color:"error",onClick:F,disabled:A,startIcon:A?(0,d.jsx)(x.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:A?"Cancelling...":"Cancel"})]}),p&&(0,d.jsxs)(e.default,{sx:{mt:2},children:[!v&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsx)(x.default,{size:"small",color:"primary"}),(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",children:"Processing request..."})]}),v&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:.5},children:[(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",children:"Progress:"}),(0,d.jsx)(L.default,{variant:"body2",color:"text.secondary",children:v.total?`${Math.round(v.current)}/${Math.round(v.total)} (${Math.round(v.current/v.total*100)}%)`:`${Math.round(v.current)}%`})]}),(0,d.jsx)(cR.A,{variant:"determinate",value:v.total?Math.min(100,v.current/v.total*100):Math.min(100,v.current)})]})]})]}):(0,d.jsx)(L.default,{color:"text.secondary",children:"No tool selected or tool details not found."}),n&&(0,d.jsxs)(aw.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)(L.default,{variant:"subtitle1",sx:{fontWeight:"medium"},children:"Result:"}),(0,d.jsx)(N.A,{control:(0,d.jsx)(aM.A,{checked:C,onChange:a=>D(a.target.checked),size:"small"}),label:"Show Raw",sx:{mr:0}})]}),C?(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:n.success?n.output:`Error: ${n.error}`}):n.success?(()=>{try{let a=JSON.parse(n.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)(cS.oz,{remarkPlugins:[cT.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:n.output})}})():(0,d.jsxs)(L.default,{color:"error.main",children:["Error: ",n.error]})]})]})};var cX=c(88117);let cY=(0,h.h)("frontend/components/mcp/MCPToolManager"),cZ=({serverName:a,onClose:b})=>{let{tools:c,isLoading:e,error:g,loadTools:h,retryLoadTools:j,isRetrying:k,retryCount:l,testTool:m}=(0,cX.O)(a),n=async(a,b,c)=>(cY.debug(`Testing tool ${a} with params:`,b),void 0!==c&&cY.debug(`Using timeout: ${c} seconds`),await m(a,b,c));(0,f.useEffect)(()=>{if(a){let b=setInterval(()=>{cY.debug("Periodic tool refresh"),z.S.clearToolsCache(a),h(!0)},3e4);return()=>clearInterval(b)}},[h,a]);let{getThemeValue:o}=(0,i.Ic)();return g&&(!c||0===c.length)?(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:o("#fef2f2","#3a2222"),borderColor:o("#fecaca","#5a3333"),color:o("#333","#f0f0f0")},children:[(0,d.jsxs)("h3",{className:"text-lg font-semibold mb-4",style:{color:o("#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: ",g]}),(0,d.jsx)("button",{onClick:()=>{a&&z.S.clearToolsCache(a),j()},className:"mt-2 px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:k,children:k?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(x.default,{size:"small",color:"white",className:"mr-2"}),"Retrying..."]}):"Retry"}),l>0&&(0,d.jsxs)("p",{className:"text-sm mt-1",children:["Retry attempt: ",l]})]})]}):a?(0,d.jsxs)("div",{className:"mt-8",style:{color:o("#333","#f0f0f0")},children:[(0,d.jsx)(cW,{serverName:a,tools:c,onTestTool:n,onClose:b}),e&&(0,d.jsxs)("div",{className:"mt-4 flex items-center space-x-2 text-blue-500",children:[(0,d.jsx)(x.default,{size:"small",color:"primary"}),(0,d.jsx)("p",{children:"Loading tools..."})]}),g&&c&&c.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-yellow-500",children:[(0,d.jsxs)("p",{children:["Warning: ",g]}),(0,d.jsx)("p",{className:"text-sm",children:"Using cached tools. Some tools may be unavailable."}),(0,d.jsx)("button",{onClick:()=>{a&&z.S.clearToolsCache(a),j()},className:"mt-1 px-2 py-1 text-xs bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:k,children:k?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(x.default,{size:"small",color:"white",className:"mr-1"}),(0,d.jsx)("span",{className:"text-xs",children:"Retrying..."})]}):"Retry"}),l>0&&(0,d.jsxs)("p",{className:"text-xs mt-1",children:["Retry attempt: ",l]})]})]}):(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:o("white","#2a2a2a"),borderColor:o("#e5e7eb","#3a3a3a"),color:o("#333","#f0f0f0")},children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",style:{color:o("#111","#f8f8f8")},children:"Tool Manager"}),(0,d.jsx)("p",{style:{color:o("#6b7280","#9ca3af")},children:"Please select a server to view and test tools."})]})},c$=(0,h.h)("frontend/components/mcp/MCPCapabilitiesManager"),c_=({serverName:a,show:b="both"})=>{let c="both"===b||"resources"===b,g="both"===b||"prompts"===b,[h,i]=(0,f.useState)([]),[j,k]=(0,f.useState)([]),[l,m]=(0,f.useState)([]),[n,o]=(0,f.useState)(!1),[p,q]=(0,f.useState)(),[r,s]=(0,f.useState)(null),[t,u]=(0,f.useState)(""),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(),[B,C]=(0,f.useState)({}),D=(0,f.useCallback)(async()=>{if(a){o(!0),q(void 0);try{let[b,d]=await Promise.all([c?z.S.listServerResources(a):Promise.resolve(null),g?z.S.listServerPrompts(a):Promise.resolve(null)]);b&&(i(b.resources||[]),k(b.resourceTemplates||[])),d&&m(d.prompts||[]),q(b?.error||d?.error)}catch(a){c$.warn("Failed to load capabilities",a),q(a instanceof Error?a.message:"Failed to load capabilities")}finally{o(!1)}}},[a,c,g]);(0,f.useEffect)(()=>{s(null),u(""),y(void 0),D()},[D]);let E=async(b,c)=>{s(`Resource: ${c}`),u(""),y(void 0),w(!0);try{let c=await z.S.readResource(a,b);c.success?u(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)):y(c.error||"Failed to read resource")}finally{w(!1)}},F=async b=>{s(`Prompt: ${b.name}`),u(""),y(void 0),w(!0);try{let c=await z.S.getPrompt(a,b.name,B[b.name]);c.success?u(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}]
|
|
49
|
-
${b}`}).join("\n\n"):"(no messages)"}(c.data)):y(c.error||"Failed to get prompt")}finally{w(!1)}},G=!n&&!p&&(!c||0===h.length&&0===j.length)&&(!g||0===l.length);return(0,d.jsxs)(aw.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)(L.default,{variant:"h6",children:"resources"===b?"Resources":"prompts"===b?"Prompts":"Resources & Prompts"}),(0,d.jsx)(K.A,{size:"small",onClick:()=>{z.S.clearCapabilitiesCache(a),D()},disabled:n,children:"Refresh"})]}),n&&(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(bB.default,{size:18}),(0,d.jsx)(L.default,{variant:"body2",children:"Loading capabilities…"})]}),p&&(0,d.jsx)(M.A,{severity:"warning",sx:{mb:2},children:p}),G&&(0,d.jsx)(L.default,{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)(L.default,{variant:"subtitle2",sx:{mt:1},children:"Resources"}),(0,d.jsx)(P.A,{dense:!0,disablePadding:!0,children:h.map(a=>(0,d.jsxs)(cD.A,{onClick:()=>E(a.uri,a.name||a.uri),children:[(0,d.jsx)(S.A,{primary:a.name||a.uri,secondary:a.description||a.uri,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}}),a.mimeType&&(0,d.jsx)(A.A,{size:"small",label:a.mimeType,sx:{ml:1}})]},a.uri))}),j.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(L.default,{variant:"caption",color:"text.secondary",sx:{mt:1,display:"block"},children:"Templates (parameterized URIs)"}),(0,d.jsx)(P.A,{dense:!0,disablePadding:!0,children:j.map(a=>(0,d.jsx)(S.A,{sx:{pl:2,py:.5},primary:a.name||a.uriTemplate,secondary:a.uriTemplate,slotProps:{secondary:{sx:{wordBreak:"break-all"}}}},a.uriTemplate))})]})]}),g&&l.length>0&&(0,d.jsxs)(d.Fragment,{children:["both"===b&&(0,d.jsx)(cQ.A,{sx:{my:1}}),(0,d.jsx)(L.default,{variant:"subtitle2",children:"Prompts"}),(0,d.jsx)(aU.A,{spacing:1,sx:{mt:.5},children:l.map(a=>(0,d.jsxs)(e.default,{sx:{border:"1px solid",borderColor:"divider",borderRadius:1,p:1},children:[(0,d.jsx)(L.default,{variant:"body2",sx:{fontWeight:600},children:a.name}),a.description&&(0,d.jsx)(L.default,{variant:"caption",color:"text.secondary",children:a.description}),(a.arguments||[]).map(b=>(0,d.jsx)(aV.A,{size:"small",fullWidth:!0,margin:"dense",label:`${b.name}${b.required?" *":""}`,placeholder:b.description||"",value:B[a.name]?.[b.name]||"",onChange:c=>((a,b,c)=>{C(d=>({...d,[a]:{...d[a]||{},[b]:c}}))})(a.name,b.name,c.target.value)},b.name)),(0,d.jsx)(K.A,{size:"small",sx:{mt:.5},onClick:()=>F(a),children:"Preview"})]},a.name))})]})]}),r&&(0,d.jsxs)(e.default,{sx:{flex:"1 1 360px",minWidth:280},children:[(0,d.jsx)(L.default,{variant:"subtitle2",children:r}),v?(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(bB.default,{size:16}),(0,d.jsx)(L.default,{variant:"body2",children:"Loading…"})]}):x?(0,d.jsx)(M.A,{severity:"error",sx:{mt:1},children:x}):(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:t||"(empty)"})]})]})]})},c0=(0,h.h)("frontend/components/mcp/MCPServerManager/ServerDetailsModal"),c1=({server:a,onClose:b,onSaveEnv:c,onServerRestart:g})=>{let[h,i]=(0,f.useState)("tools");(0,f.useEffect)(()=>{a&&i("tools")},[a?.name]);let j=null!==a,k=a?.name||"",l=async b=>{a&&(c0.debug(`Saving env for ${a.name}`),await c(a.name,b))};return(0,d.jsxs)(G.A,{open:j,onClose:b,maxWidth:"lg",fullWidth:!0,PaperProps:{sx:{height:"85vh",maxHeight:"85vh"}},children:[(0,d.jsxs)(H.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)(L.default,{variant:"h6",children:k}),a&&(0,d.jsx)(L.default,{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)(aL.A,{edge:"end",onClick:b,"aria-label":"close",children:(0,d.jsx)(cO.A,{})})]}),(0,d.jsxs)(bR.A,{value:h,onChange:(a,b)=>i(b),sx:{mt:1},children:[(0,d.jsx)(bS.A,{label:"Tools",value:"tools"}),(0,d.jsx)(bS.A,{label:"Resources",value:"resources"}),(0,d.jsx)(bS.A,{label:"Prompts",value:"prompts"}),(0,d.jsx)(bS.A,{label:"Environment Variables",value:"env"})]})]}),(0,d.jsx)(cQ.A,{}),(0,d.jsxs)(I.A,{sx:{overflow:"auto"},children:[j&&"tools"===h&&(0,d.jsx)(cZ,{serverName:k}),j&&"resources"===h&&(0,d.jsx)(c_,{serverName:k,show:"resources"}),j&&"prompts"===h&&(0,d.jsx)(c_,{serverName:k,show:"prompts"}),j&&"env"===h&&(0,d.jsx)(e.default,{sx:{mt:1},children:(0,d.jsx)(bD.A,{serverName:k,initialEnv:a?.env||{},onSave:l,onServerRestart:async a=>{await g(a)}})})]})]})};var c2=c(63650);function c3(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a))b[c]=d&&"object"==typeof d&&"value"in d?d.value:"string"==typeof d?d:"";return b}function c4(a){let b,c=[],d=[];if("string"==typeof a)try{b=JSON.parse(a)}catch(a){return{servers:d,errors:[`Invalid JSON: ${a.message}`]}}else b=a;if(!b||"object"!=typeof b)return{servers:d,errors:["Expected a JSON object."]};let e=b,f=e.mcpServers&&"object"==typeof e.mcpServers?e.mcpServers:e;if(0===Object.keys(f).length)return{servers:d,errors:['No servers found. Expected an "mcpServers" object.']};for(let[a,b]of Object.entries(f)){if(!b||"object"!=typeof b){c.push(`"${a}": entry is not an object.`);continue}let e=function(a){let b=(a.transport||a.type||"").toString().toLowerCase().trim();if(!b)return"stdio";switch(b){case"stdio":return"stdio";case"http":case"streamable-http":case"streamable":case"streamablehttp":return"streamable";case"sse":return"sse";case"ws":case"websocket":return"websocket";default:return null}}(b);if(!e){c.push(`"${a}": unknown transport type "${b.type||b.transport}".`);continue}let f={};if(b.env&&"object"==typeof b.env)for(let[a,c]of Object.entries(b.env))f[a]="string"==typeof c?c:String(c??"");let g={name:a,env:f,disabled:b.disabled??!1,autoApprove:Array.isArray(b.autoApprove)?b.autoApprove:[],rootPath:"",_buildCommand:"",_installCommand:""};if("stdio"===e){if(!b.command||"string"!=typeof b.command){c.push(`"${a}": stdio server is missing a "command".`);continue}d.push({...g,transport:"stdio",command:b.command,args:Array.isArray(b.args)?b.args:[]})}else if("websocket"===e){let e=b.url||b.websocketUrl;if(!e){c.push(`"${a}": websocket server is missing a "url".`);continue}d.push({...g,transport:"websocket",websocketUrl:e})}else{let f=b.url||b.serverUrl;if(!f){c.push(`"${a}": ${e} server is missing a "url".`);continue}let h=b.headers&&"object"==typeof b.headers?b.headers:void 0;d.push({...g,transport:e,serverUrl:f,...h?{headers:h}:{}})}}return{servers:d,errors:c}}let c5=[{id:"claude",label:"Claude",fileName:"mcp_config.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),d={};for(let b of a){if(b.exposeAsMcpServer){d[b.name]={type:"http",url:`${c}/mcp-proxy/${b.name}`};continue}let a={},e=c3(b.env);switch(b.transport){case"stdio":a.command=b.command,a.args=b.args||[],Object.keys(e).length>0&&(a.env=e);break;case"streamable":a.type="http",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=c3(b.headers)),Object.keys(e).length>0&&(a.env=e);break;case"sse":a.type="sse",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=c3(b.headers)),Object.keys(e).length>0&&(a.env=e);break;case"websocket":a.type="ws",a.url=b.websocketUrl,Object.keys(e).length>0&&(a.env=e);break;default:Object.keys(e).length>0&&(a.env=e)}d[b.name]=a}return{mcpServers:d}},import:c4},{id:"cline",label:"Cline",fileName:"cline_mcp_settings.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),d={};for(let b of a){let a={disabled:b.disabled??!1,autoApprove:b.autoApprove??[],timeout:60};if(b.exposeAsMcpServer){d[b.name]={...a,type:"streamableHttp",url:`${c}/mcp-proxy/${b.name}`};continue}let e=c3(b.env),f={...a};switch(b.transport){case"stdio":f.command=b.command,f.args=b.args||[],Object.keys(e).length>0&&(f.env=e);break;case"streamable":f.type="streamableHttp",f.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(f.headers=c3(b.headers));break;case"sse":f.type="sse",f.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(f.headers=c3(b.headers));break;case"websocket":f.type="ws",f.url=b.websocketUrl;break;default:Object.keys(e).length>0&&(f.env=e)}d[b.name]=f}return{mcpServers:d}},import:function(a){return c4(a)}}];function c6(a){return c5.find(b=>b.id===a)??c5[0]}var c7=c(7118),c8=c(7503);let c9=(0,p.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download"),da=(0,p.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zm0-10h4v6h6v-6h4l-7-7z"}),"Upload"),db=(0,p.A)((0,d.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");var dc=c(63757),dd=c(11402),de=c(49066);let df=(0,p.A)((0,d.jsx)("path",{d:"M6 6h12v12H6z"}),"Stop"),dg=(0,p.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 dh=c(9863),di=c(81310),dj=c(18467),dk=c(59737),dl=c(7329);let dm=(0,h.h)("frontend/components/mcp/MCPServerManager"),dn=({onServerModalToggle:a})=>{let{servers:b,isLoading:c,loadError:g,connectingServers:h,toggleServer:i,retryServer:l,deleteServer:m,addServer:n,updateServer:o,setServerFolder:p,saveEnv:q}=(0,c2.v)(),[r,s]=(0,f.useState)(!1),[t,u]=(0,f.useState)(null),[v,w]=(0,f.useState)(!1),[x,y]=(0,f.useState)(""),[z,A]=(0,f.useState)(null),[C,D]=(0,f.useState)(!1),[E,F]=(0,f.useState)("claude"),[M,N]=(0,f.useState)(null),[O,P]=(0,f.useState)(null),[Q,T]=(0,f.useState)(null),[U,V]=(0,f.useState)({}),X=(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=X.split("|").filter(Boolean);if(0===a.length)return;let b=!1;return W(a).then(a=>{b||V(b=>({...b,...a}))}).catch(a=>dm.warn("Server update check failed",a)),()=>{b=!0}},[X]);let Y=async(a,b)=>{dm.info(`Server ${a} updated from git, refreshing update status`);let c=X.split("|").filter(Boolean),d=await W(c.length>0?c:[b],!0);V(a=>({...a,...d}))},Z=a=>{let c=b.find(b=>b.name===a);if(!c||c.disabled)return void dm.debug(`Not opening details for ${a} (missing or disabled)`);T(a)},$=async a=>{await i(a,!1),await i(a,!0)},_=Q&&b.find(a=>a.name===Q)||null,[aa,ab]=(0,f.useState)(""),[ac,ad]=(0,f.useState)("name-asc"),[ae,af]=(0,f.useState)("all"),[ag,ah]=(0,f.useState)(null),[ai,aj]=(0,f.useState)("none"),[ak,al]=(0,f.useState)(null),[am,an]=(0,f.useState)(new Set),[ao,aq]=(0,f.useState)(!1),[ar,as]=(0,f.useState)(new Set),[at,au]=(0,f.useState)({open:!1,action:null}),av=(0,ap.A)(),ax=async(a,b)=>{dm.debug(`Toggling server ${a} to ${b?"enabled":"disabled"}`),await i(a,b)},ay=async a=>{dm.debug(`Retrying pulling server status for server: ${a}`),await l(a)},az=async a=>{dm.debug(`Deleting server: ${a}`),await m(a)},aA=b=>{dm.debug(`Editing server: ${b.name}`),u(b),s(!0),a?.(!0)},aB=async b=>{dm.debug(`Adding server: ${b.name}`),await n(b),s(!1),u(null),a?.(!1)},aC=async b=>{let c=t?.name;dm.debug(`Updating server: ${c??b.name}`+(c&&c!==b.name?` -> ${b.name}`:"")),await o(b,c),s(!1),u(null),a?.(!1)},aD=async()=>{let a=c6(E);dm.debug(`Importing server configurations from ${a.label} format`),A(null);let{servers:c,errors:d}=a.import(x);if(0===c.length)return void A(d.length>0?d.join("\n"):"No servers found in the pasted configuration.");D(!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 o(a),g++):(await n(a),e.add(a.name),f++)}catch(b){h.push(`"${a.name}": ${b.message||"failed to import"}`)}D(!1);let i=[...d,...h];if(0===f&&0===g)return void A(i.length>0?i.join("\n"):"No servers could be imported.");dm.info(`Imported MCP servers: ${f} added, ${g} updated`),i.length>0?A(`Imported ${f} added / ${g} updated. Some entries were skipped:
|
|
50
|
-
${i.join("\n")}`):(w(!1),y(""))},aE=()=>{w(!1),y(""),A(null)},aF=(0,f.useMemo)(()=>{dm.debug("Filtering and sorting servers",{searchTerm:aa,sortOption:ac,filterOption:ae});let a=b;if(""!==aa.trim()){let c=aa.toLowerCase();a=b.filter(a=>a.name.toLowerCase().includes(c)||a.rootPath?.toLowerCase().includes(c))}return"all"!==ae&&(a=a.filter(a=>{switch(ae){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===ae;default:return!0}})),[...a].sort((a,b)=>{switch(ac){case"name-asc":return a.name.localeCompare(b.name);case"name-desc":return b.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==b.status)return -1;if("connected"!==a.status&&"connected"===b.status)return 1;return a.name.localeCompare(b.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==b.status)return -1;if("disconnected"!==a.status&&"disconnected"===b.status)return 1;return a.name.localeCompare(b.name);case"transport":let c=["stdio","websocket","sse","streamable"],d=c.indexOf(a.transport),e=c.indexOf(b.transport);if(d!==e)return d-e;return a.name.localeCompare(b.name);default:return 0}})},[b,aa,ac,ae]),aG=(0,f.useMemo)(()=>(0,dl.yF)(b,a=>a.folder),[b]),aH=(0,f.useMemo)(()=>"folder"===ai?(0,dl.Je)(aF,a=>a.folder):"sort"===ai?(0,dl.Az)(aF,a=>(function(a,b){switch(b){case"name-asc":case"name-desc":return(0,dl.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"}}})(a,ac)):[],[ai,aF,ac]),aI=a=>{aj(a),al(null)},aJ=async()=>{dm.debug("Bulk enabling servers",{selectedServers:Array.from(ar)});let a=Array.from(ar).map(a=>ax(a,!0));await Promise.all(a),as(new Set),au({open:!1,action:null})},aK=async()=>{dm.debug("Bulk disabling servers",{selectedServers:Array.from(ar)});let a=Array.from(ar).map(a=>ax(a,!1));await Promise.all(a),as(new Set),au({open:!1,action:null})},aM=(a,b)=>{let c=new Set(ar);b?c.add(a):c.delete(a),as(c)},aN=()=>{ah(null)},aO=a=>{ad(a),aN()},aP=a=>(0,d.jsx)(aS,{servers:a.map(a=>({...a,tools:[]})),isLoading:c,loadError:g,onServerSelect:Z,onServerToggle:ax,onServerRetry:ay,onServerDelete:az,onServerEdit:aA,selectionMode:ao,selectedServers:ar,onServerSelectionChange:aM,updates:U,onServerUpdated:Y,folders:aG,onServerSetFolder:p});return(0,d.jsxs)(e.default,{sx:{color:"text.primary"},children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(L.default,{variant:"h5",children:"MCP"}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1},children:[(0,d.jsx)(K.A,{variant:"outlined",color:"primary",onClick:a=>P(a.currentTarget),startIcon:(0,d.jsx)(da,{}),endIcon:(0,d.jsx)(db,{}),sx:{textTransform:"none",fontWeight:500},children:"Import"}),(0,d.jsx)(c7.A,{anchorEl:O,open:!!O,onClose:()=>P(null),children:c5.map(a=>(0,d.jsx)(b4.A,{onClick:()=>{F(a.id),y(""),A(null),P(null),w(!0)},children:(0,d.jsx)(S.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(K.A,{variant:"contained",color:"primary",onClick:a=>N(a.currentTarget),startIcon:(0,d.jsx)(c9,{}),endIcon:(0,d.jsx)(db,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:"Export"}),(0,d.jsx)(c7.A,{anchorEl:M,open:!!M,onClose:()=>N(null),children:c5.map(a=>(0,d.jsx)(b4.A,{onClick:()=>(a=>{let c=c6(a);dm.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)(S.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(K.A,{variant:"contained",color:"primary","data-tour":"add-mcp-server",onClick:()=>{u(null),s(!0),a?.(!0)},startIcon:(0,d.jsx)(bF.A,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:"Add Server"})]})]}),(0,d.jsx)(aw.A,{elevation:1,sx:{m:2,mb:1,p:1},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)(aV.A,{placeholder:"Search servers...",variant:"outlined",size:"small",fullWidth:!0,value:aa,onChange:a=>ab(a.target.value),InputProps:{startAdornment:(0,d.jsx)(aW.A,{position:"start",children:(0,d.jsx)(cE.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)(K.A,{size:"small",variant:ao?"contained":"outlined",onClick:()=>{aq(!ao),ao&&as(new Set)},startIcon:(0,d.jsx)(dg,{}),children:"Select"}),ao&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(K.A,{size:"small",onClick:()=>{let a=aF.filter(a=>!a.builtIn);ar.size===a.length?as(new Set):as(new Set(a.map(a=>a.name)))},disabled:0===aF.filter(a=>!a.builtIn).length,children:ar.size===aF.filter(a=>!a.builtIn).length&&ar.size>0?"Deselect All":"Select All"}),ar.size>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(K.A,{size:"small",variant:"contained",color:"success",onClick:()=>au({open:!0,action:"enable"}),startIcon:(0,d.jsx)(de.A,{}),children:["Enable (",ar.size,")"]}),(0,d.jsxs)(K.A,{size:"small",variant:"contained",color:"error",onClick:()=>au({open:!0,action:"disable"}),startIcon:(0,d.jsx)(df,{}),children:["Disable (",ar.size,")"]})]})]}),(0,d.jsx)(aL.A,{size:"small",onClick:a=>al(a.currentTarget),color:"none"!==ai?"primary":"default",sx:{border:`1px solid ${av.palette.divider}`,backgroundColor:av.palette.background.default},title:"Group cards",children:(0,d.jsx)(dh.A,{fontSize:"small"})}),(0,d.jsx)(aL.A,{size:"small",onClick:a=>{ah(a.currentTarget)},sx:{border:`1px solid ${av.palette.divider}`,backgroundColor:av.palette.background.default},children:(0,d.jsx)(dc.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:3},children:[(0,d.jsxs)(L.default,{variant:"body2",color:"textSecondary",children:[aF.length," of ",b.length," servers",aa&&` matching "${aa}"`,"all"!==ae&&` (filtered by ${ae})`]}),(0,d.jsxs)(L.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===ac?"Name (A-Z)":"name-desc"===ac?"Name (Z-A)":"status-connected"===ac?"Connected first":"status-disconnected"===ac?"Disconnected first":"Transport type"]})]}),(0,d.jsx)(e.default,{sx:{px:2,flex:1,overflow:"auto"},children:"none"===ai||c||g||0===aF.length?aP(aF):aH.map(a=>(0,d.jsx)(dk.A,{label:a.label,count:a.items.length,expanded:!am.has(a.key),onToggle:()=>(a=>{an(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),showFolderIcon:"folder"===ai,children:aP(a.items)},a.key))}),(0,d.jsxs)(c7.A,{anchorEl:ak,open:!!ak,onClose:()=>al(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(b4.A,{selected:"none"===ai,onClick:()=>aI("none"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(di.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"No grouping"})]}),(0,d.jsxs)(b4.A,{selected:"folder"===ai,onClick:()=>aI("folder"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(dj.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"By folder"})]}),(0,d.jsxs)(b4.A,{selected:"sort"===ai,onClick:()=>aI("sort"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(dh.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(c7.A,{anchorEl:ag,open:!!ag,onClose:aN,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(b4.A,{onClick:()=>aO("name-asc"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(dd.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(b4.A,{onClick:()=>aO("name-desc"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(dd.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(S.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(cQ.A,{}),(0,d.jsxs)(b4.A,{onClick:()=>aO("status-connected"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(j.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"Connected first"})]}),(0,d.jsxs)(b4.A,{onClick:()=>aO("status-disconnected"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(k.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"Disconnected first"})]}),(0,d.jsx)(cQ.A,{}),(0,d.jsxs)(b4.A,{onClick:()=>aO("transport"),children:[(0,d.jsx)(R.A,{children:(0,d.jsx)(B.A,{fontSize:"small"})}),(0,d.jsx)(S.A,{primary:"Transport type"})]})]}),(0,d.jsxs)(G.A,{open:at.open,onClose:()=>au({open:!1,action:null}),children:[(0,d.jsx)(H.A,{children:"enable"===at.action?"Enable Servers":"Disable Servers"}),(0,d.jsxs)(I.A,{children:[(0,d.jsxs)(c8.A,{children:["Are you sure you want to ",at.action," ",ar.size," server",ar.size>1?"s":"","?"]}),(0,d.jsx)(e.default,{sx:{mt:2},children:Array.from(ar).map(a=>(0,d.jsxs)(L.default,{variant:"body2",sx:{ml:2},children:["• ",a]},a))})]}),(0,d.jsxs)(J.A,{children:[(0,d.jsx)(K.A,{onClick:()=>au({open:!1,action:null}),children:"Cancel"}),(0,d.jsx)(K.A,{onClick:"enable"===at.action?aJ:aK,variant:"contained",color:"enable"===at.action?"success":"error",children:"enable"===at.action?"Enable":"Disable"})]})]}),(0,d.jsxs)(G.A,{open:v,onClose:aE,maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(H.A,{children:["Import MCP Servers — ",c6(E).label," format"]}),(0,d.jsxs)(I.A,{children:[(0,d.jsxs)(c8.A,{sx:{mb:2},children:["Paste a ",c6(E).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)(aV.A,{multiline:!0,minRows:10,maxRows:20,fullWidth:!0,value:x,onChange:a=>{y(a.target.value),z&&A(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:C}),z&&(0,d.jsx)(c8.A,{component:"pre",sx:{mt:2,color:"error.main",whiteSpace:"pre-wrap",fontSize:"0.85rem"},children:z})]}),(0,d.jsxs)(J.A,{children:[(0,d.jsx)(K.A,{onClick:aE,disabled:C,children:"Cancel"}),(0,d.jsx)(K.A,{onClick:aD,variant:"contained",color:"primary",disabled:C||""===x.trim(),startIcon:(0,d.jsx)(da,{}),children:C?"Importing...":"Import"})]})]}),(0,d.jsx)(cP,{isOpen:r,onAdd:aB,onClose:()=>{s(!1),u(null),a?.(!1)},initialConfig:t,onUpdate:aC,onRestartAfterUpdate:ay}),(0,d.jsx)(c1,{server:_?{name:_.name,status:_.status,env:_.env}:null,onClose:()=>{T(null),Q&&l(Q)},onSaveEnv:q,onServerRestart:$})]})},dp=()=>(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(dn,{})}),dq=(0,h.h)("app/mcp/page");function dr(){return dq.debug("Rendering MCPPage"),(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(dp,{})})}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,3984,8445,6760,6390,1746,1050,1690,2666,8572,5558,7328,7531,5888,8434,2776,9938,8460,1905,117],()=>b(b.s=71472));module.exports=c})();
|
|
31
|
+
`),h({type:"error",text:"Connection test failed with an error."})}finally{d(!1)}};var bb=c(61628),bc=c(19787),bd=c(95803),be=c(17332);let bf=({initialConfig:a,onAdd:b,onUpdate:c,onClose:g,autoTestRun:h})=>{let{localConfig:i,setLocalConfig:j,websocketUrl:l,setWebsocketUrl:n,serverUrl:o,setServerUrl:q,buildCommand:s,setBuildCommand:u,installCommand:v,setInstallCommand:w,message:x,setMessage:y,buildMessage:z,setBuildMessage:A,isBuilding:B,setIsBuilding:C,isInstalling:D,setIsInstalling:E,buildCompleted:F,setBuildCompleted:G,installCompleted:H,setInstallCompleted:I,isParsingReadme:J,setIsParsingReadme:K,isParsingEnv:L,setIsParsingEnv:M,isRunning:N,setIsRunning:O,runCompleted:P,setRunCompleted:Q,expandedSections:R,setExpandedSections:S,handleTransportChange:T,handleArgChange:U,addArgField:V,removeArgField:W,handleEnvChange:X}=(({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)&&(y({type:"warning",text:"Configuration detection was not successful. Please configure the server manually."}),S({define:!0,build:!0,run:!0}))},[a]);let[Y,Z]=(0,f.useState)(!1),[$,_]=(0,f.useState)(null),aa=async()=>{Z(!0)},ab=async a=>{_(a)},ac=async()=>{await a6(i,j,y,u,w,n,l)},ad=async()=>{await a7(i,j,y,K,u,w,n,l)},ae=async()=>{await a8(i,v,E,A,ao,aq,at,I)},af=async()=>{await a9(i,s,C,A,ao,aq,at,G)},ag=async()=>{await ba(i,l,o,O,ao,at,aq,y,Q)},{consoleOutput:ah,isConsoleVisible:ai,consoleTitle:am,setConsoleTitle:ao,toggleConsoleVisibility:ap,setIsConsoleVisible:aq,appendToConsole:ar,clearConsole:as,updateConsole:at}=ak(),au=(0,f.useRef)(!1);(0,f.useEffect)(()=>{h&&!au.current&&a?.name&&i.name===a.name&&(au.current=!0,S({define:!1,build:!1,run:!0}),I(!0),G(!0),ag())},[h,a,i.name]);let av=a=>(b,c)=>{S({...R,[a]:c})},aw=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)=>{let l;return a.preventDefault(),b.name&&("stdio"!==b.transport||b.command)?"websocket"!==b.transport||c?"sse"!==b.transport&&"streamable"!==b.transport||d?(l="websocket"===b.transport?{...b,transport:"websocket",websocketUrl:c,_buildCommand:e,_installCommand:f}:"sse"===b.transport?{...b,transport:"sse",serverUrl:d,_buildCommand:e,_installCommand:f}:"streamable"===b.transport?{...b,transport:"streamable",serverUrl:d,_buildCommand:e,_installCommand:f}:{...b,transport:"stdio",_buildCommand:e,_installCommand:f},j&&i?i(l):h(l),k&&k()):g({type:"error",text:"Please enter a valid Server URL"}):g({type:"error",text:"Please enter a valid WebSocket URL"}):g({type:"error",text:"Please fill in all required fields"})})(d,i,l,o,s,v,y,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:ai?8:12,children:(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsxs)(bb.A,{expanded:R.define,onChange:av("define"),sx:{border:1,borderColor:i.name&&i.rootPath?h?"success.main":"divider":"error.main",bgcolor:i.name&&i.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)(bc.A,{expandIcon:(0,d.jsx)(be.A,{}),"aria-controls":"define-server-content",id:"define-server-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.default,{variant:"h6",sx:{color:aw(i.name&&i.rootPath?h?"success":"default":"error"),fontWeight:500},children:"First, define your server"})}),(0,d.jsx)(bd.A,{sx:{px:3,py:2},children:(0,d.jsx)(al,{name:i.name,setName:a=>j({...i,name:a}),rootPath:i.rootPath||"",setRootPath:a=>j({...i,rootPath:a}),onRootPathSelect:aa})})]}),(0,d.jsxs)(bb.A,{expanded:R.build,onChange:av("build"),sx:{border:1,borderColor:z?.type==="error"?"error.main":H&&F?"success.main":H||F?"warning.main":D||B?"info.main":"divider",bgcolor:z?.type==="error"?"error.lighter":H&&F?"success.lighter":H||F?"warning.lighter":D||B?"info.lighter":"background.paper","&:before":{display:"none"},borderRadius:1,boxShadow:a=>+("dark"===a.palette.mode),mb:2,overflow:"hidden"},children:[(0,d.jsx)(bc.A,{expandIcon:(0,d.jsx)(be.A,{}),"aria-controls":"build-content",id:"build-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.default,{variant:"h6",sx:{color:aw(z?.type==="error"?"error":H&&F?"success":H||F?"warning":D||B?"loading":"default"),fontWeight:500},children:"Second, install and build"})}),(0,d.jsx)(bd.A,{sx:{px:3,py:2},children:(0,d.jsx)(an,{installCommand:v,setinstallCommand:w,buildCommand:s,setBuildCommand:u,onInstall:ae,onBuild:af,isInstalling:D,isBuilding:B,installCompleted:H,buildCompleted:F,buildMessage:z})})]}),(0,d.jsxs)(bb.A,{expanded:R.run,onChange:av("run"),sx:{border:1,borderColor:x?.type!=="error"||N?P?"success.main":N?"info.main":"divider":"error.main",bgcolor:x?.type!=="error"||N?P?"success.lighter":N?"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)(bc.A,{expandIcon:(0,d.jsx)(be.A,{}),"aria-controls":"run-content",id:"run-header",sx:{"& .MuiAccordionSummary-content":{alignItems:"center"},minHeight:56,px:2},children:(0,d.jsx)(k.default,{variant:"h6",sx:{color:aw(x?.type!=="error"||N?P?"success":N?"loading":"default":"error"),fontWeight:500},children:"Third, define how to run your server"})}),(0,d.jsx)(bd.A,{sx:{px:3,py:2},children:(0,d.jsxs)(r.A,{spacing:4,children:[(0,d.jsx)(aR,{command:"stdio"===i.transport?i.command:"",setCommand:a=>{"stdio"===i.transport&&j(b=>"stdio"===b.transport?{...b,command:a}:b)},transport:i.transport,setTransport:T,websocketUrl:l,setWebsocketUrl:n,serverUrl:o,setServerUrl:q,onRun:ag,isRunning:N,runCompleted:P,env:i.env,onEnvChange:X,headers:("sse"===i.transport||"streamable"===i.transport)&&i.headers||{},onHeadersChange:a=>j(b=>({...b,headers:a})),oauthClientId:i.oauthClientId||"",oauthClientSecret:i.oauthClientSecret||"",onOAuthClientIdChange:a=>j(b=>({...b,oauthClientId:a})),onOAuthClientSecretChange:a=>j(b=>({...b,oauthClientSecret:a})),serverName:i.name,consoleOutput:ah,message:x,setMessage:y}),(0,d.jsx)(e.default,{children:(0,d.jsx)(aT,{args:"stdio"===i.transport&&i.args||[],onArgChange:U,onAddArg:V,onRemoveArg:W,onFolderSelect:ab,onParseReadme:ad,onParseClipboard:ac,isParsingReadme:J})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(aU.A,{roots:i.roots||[],onChange:a=>j(b=>({...b,roots:a}))})}),(0,d.jsx)(e.default,{children:(0,d.jsx)(a2,{policy:i.sampling,onChange:a=>j(b=>({...b,sampling:a}))})})]})})]})]})}),ai&&(0,d.jsx)(m.Ay,{item:!0,xs:4,children:(0,d.jsx)(aj,{output:ah,isVisible:!0,toggleVisibility:ap,title:am})})]}),x&&(0,d.jsx)(e.default,{sx:{mt:2,mb:2},children:(0,d.jsx)(p.A,{severity:x.type,children:x.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)(a3.A,{open:Y,title:"Choose the server folder",initialPath:i.rootPath||void 0,onClose:()=>Z(!1),onSelect:a=>j({...i,rootPath:a})}),(0,d.jsx)(a3.A,{open:null!==$,title:"Choose a folder or file",selectFiles:!0,onClose:()=>_(null),onSelect:a=>{null!==$&&U($,a)}})]})},bg={npm:"npx",pypi:"uvx",oci:"docker",nuget:"dnx"},bh={npm:"npm",pypi:"PyPI",oci:"Docker",nuget:"NuGet",mcpb:"MCPB",cargo:"Cargo"};function bi(a){var b;let c=[];for(let d of a.packages??[])(function(a){if(!a.identifier||!bg[a.registryType]&&!a.runtimeHint)return!1;let b=a.transport?.type;return!b||"stdio"===b})(d)&&c.push({kind:"package",label:`${bh[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 bj=new Set(["mcp","server","mcp-server","mcpserver"]);function bk(a){let b=a.indexOf("/"),c=b>=0?a.slice(0,b):"",d=b>=0?a.slice(b+1):a;if(!bj.has(d.toLowerCase())||!c)return d;let e=c.split(".").pop()||"";return e?`${e}-${d}`:d}function bl(a){return a.title?a.title:bk(a.name)}function bm(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 bn(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 bo(a){return(a??[]).flatMap(bn)}function bp(a){return{name:bk(a.name).replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"mcp-server",disabled:!1,autoApprove:[],env:{},_buildCommand:"",_installCommand:""}}function bq(a){return a.version?`${a.identifier}@${a.version}`:a.identifier}function br(a,b){return"package"===b.kind?function(a,b){let c,d=b.runtimeHint||bg[b.registryType],e=bo(b.packageArguments),f=bo(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",bq(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,bq(b),"--yes",...e];break;default:c=[...f,bq(b),...e]}return{...bp(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=bp(a);return{...d,transport:"sse"===b.type?"sse":"streamable",serverUrl:b.url,headers:c,rootPath:`mcp-servers/${d.name}`}}(a,b.remote)}function bs(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)).map(a=>a.name)}var bt=c(30818),bu=c(423),bv=c(43249),bw=c(2783),bx=c(18168),by=c(68333),bz=c(6636);let bA=(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 bB=c(29565),bC=c(33105);function bD(a){return(0,bC.Ay)("MuiAvatar",a)}(0,bB.A)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);var bE=c(20385);let bF=(0,bx.Ay)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[c.variant],c.colorDefault&&b.colorDefault]}})((0,by.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]})}}}]}))),bG=(0,bx.Ay)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(a,b)=>b.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),bH=(0,bx.Ay)(bA,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(a,b)=>b.fallback})({width:"75%",height:"75%"}),bI=f.forwardRef(function(a,b){let c=(0,bz.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,bw.A)({root:["root",c,d&&"colorDefault"],img:["img"],fallback:["fallback"]},bD,b)})(s),[x,y]=(0,bE.A)("img",{className:w.img,elementType:bG,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)(bH,{ownerState:s,className:w.fallback}),(0,d.jsx)(bF,{as:i,className:(0,bv.A)(w.root,h),ref:b,...q,ownerState:s,children:r})});var bJ=c(27114),bK=c(40512),bL=c(83899),bM=c(52327),bN=c(89490),bO=c(75983),bP=c(50553),bQ=c(84233),bR=c(19925),bS=c(40973);let bT=(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 bU=c(15059),bV=c(56685);let bW=(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"),bX=(0,a$.A)((0,d.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 bY=c(21358);let bZ=({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?bi(E):[];return(0,d.jsxs)(e.default,{sx:{width:"100%"},children:[(0,d.jsxs)(r.A,{spacing:3,children:[(0,d.jsx)(k.default,{variant:"h6",gutterBottom:!0,children:"MCP Marketplace"}),(0,d.jsxs)(k.default,{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)(bS.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)(bX,{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.default,{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=bi(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)(bt.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)(bu.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)(bI,{src:bm(b,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",mr:2,boxShadow:1},children:bl(b).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.default,{variant:"subtitle1",component:"div",noWrap:!0,title:bl(b),children:bl(b)}),(0,d.jsx)(k.default,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bJ.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.default,{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:[(a=>{let b=[],c=new Set;for(let e of a.packages??[]){let a=function(a){return bh[a]||a}(e.registryType);c.has(a)||(c.add(a),b.push((0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bV.A,{}),label:a},`pkg-${a}`)))}return(a.remotes??[]).length>0&&b.push((0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bW,{}),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)(bY.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)(bK.A,{open:null!==E,onClose:K,maxWidth:"sm",fullWidth:!0,children:E&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bL.A,{component:"div",children:(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1.5,minWidth:0},children:[(0,d.jsx)(bI,{src:bm(E,h.palette.mode)??void 0,sx:{bgcolor:h.palette.primary.main,color:"#fff",width:40,height:40},children:bl(E).charAt(0).toUpperCase()}),(0,d.jsxs)(e.default,{sx:{minWidth:0},children:[(0,d.jsx)(k.default,{variant:"h6",noWrap:!0,title:bl(E),children:bl(E)}),(0,d.jsx)(k.default,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:E.name,children:E.name})]})]})}),(0,d.jsxs)(bM.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)(bT,{}),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)(bU.A,{}),component:"a",href:E.websiteUrl,target:"_blank",rel:"noopener noreferrer",children:"Website"})]}),(0,d.jsx)(k.default,{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)(bY.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.default,{variant:"subtitle2",gutterBottom:!0,children:"Choose how to install this server:"}),(0,d.jsx)(bN.A,{children:O.map((a,e)=>{let f=bs(a);return(0,d.jsxs)(bO.A,{disabled:!G,onClick:()=>((a,d)=>{let e=br(a,d),f=bs(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)(bP.A,{children:"package"===a.kind?(0,d.jsx)(bV.A,{}):(0,d.jsx)(bW,{})}),(0,d.jsx)(bQ.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)(bT,{}),disabled:!G,onClick:()=>(a=>{let b=N(a);b&&g&&(K(),g(b))})(E),sx:{mt:2},children:"Try manual installation"})]})]}),(0,d.jsx)(bR.A,{children:(0,d.jsx)(t.A,{onClick:K,children:"Close"})})]})})]})};var b$=c(53222);let b_=(0,a$.A)((0,d.jsx)("path",{d:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"}),"Star"),b0=({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}}(br(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?bi(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.default,{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)(b$.A,{}),children:n?"Refreshing…":"Refresh"})]}),(0,d.jsxs)(k.default,{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.default,{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=bi(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)(bt.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)(bu.A,{sx:{flexGrow:1,display:"flex",flexDirection:"column",alignItems:"stretch"},onClick:()=>(a=>{let b=bi(a.server);if(0===b.length)return void s({type:"warning",text:`${bl(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)(bI,{sx:{bgcolor:g.palette.warning.main,color:"#fff",mr:2,boxShadow:1},children:(0,d.jsx)(b_,{fontSize:"small"})}),(0,d.jsxs)(e.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsx)(k.default,{variant:"subtitle1",component:"div",noWrap:!0,title:bl(b),children:bl(b)}),(0,d.jsx)(k.default,{variant:"caption",color:"text.secondary",noWrap:!0,component:"div",title:b.name,children:b.name})]})]}),(0,d.jsxs)(bJ.A,{sx:{flexGrow:1,pt:2,width:"100%"},children:[(0,d.jsx)(k.default,{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)(bV.A,{}),label:"Local"}),h&&(0,d.jsx)(ap.A,{size:"small",icon:(0,d.jsx)(bW,{}),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.default,{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)(bK.A,{open:null!==u,onClose:()=>v(null),maxWidth:"xs",fullWidth:!0,children:u&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bL.A,{children:bl(u.server)}),(0,d.jsxs)(bM.A,{children:[(0,d.jsx)(k.default,{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)(bN.A,{children:[B&&(0,d.jsxs)(bO.A,{onClick:()=>x(u,B),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(bV.A,{})}),(0,d.jsx)(bQ.A,{primary:"Local",secondary:"Runs on your machine"})]}),C&&(0,d.jsxs)(bO.A,{onClick:()=>x(u,C),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(bW,{})}),(0,d.jsx)(bQ.A,{primary:"Remote",secondary:"Connects to a hosted endpoint"})]})]})]}),(0,d.jsx)(bR.A,{children:(0,d.jsx)(t.A,{onClick:()=>v(null),children:"Cancel"})})]})})]})},b1=({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
|
+
`):(F(`Warning: Failed to pull latest changes: ${c.error}
|
|
33
|
+
`),F("Continuing with existing repository...\n"))}else{s(!0),F(`Cloning repository from ${a}...
|
|
34
|
+
`),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)F(`Clone successful: ${d.output||"Repository cloned"}
|
|
35
|
+
`),B(!0);else throw Error(`Failed to clone repository: ${d.error}`);s(!1)}F("Installing dependencies... (This can take up to several MINUTES, please be patient, do not close this window.) \n");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){F(`${d.output||"Dependencies installed successfully"}
|
|
36
|
+
`),F("Building servers...\n");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?F(`${c.output||"Build completed successfully"}
|
|
37
|
+
`):F(`Build warning: ${c.error}
|
|
38
|
+
`)}else F(`Install warning: ${d.error}
|
|
39
|
+
`);await I(b),v({type:"success",text:"Repository refreshed successfully"})}catch(a){console.error("Error refreshing repository:",a),F(`Error: ${a instanceof Error?a.message:"Unknown error"}
|
|
40
|
+
`),v({type:"error",text:`Failed to refresh repository: ${a instanceof Error?a.message:"Unknown error"}`})}finally{o(!1)}},I=async a=>{F("Fetching server information...\n");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(`Failed to list directories: ${d.error}`);let e=d.items.filter(a=>"directory"===a.type&&!a.isHidden).map(a=>({name:a.name,type:a.type}));F(`Found ${e.length} server directories
|
|
41
|
+
`);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);x(g),F(`Found ${g.length} servers in the repository
|
|
42
|
+
`)}catch(a){throw console.error("Error fetching server info:",a),F(`Error fetching server info: ${a instanceof Error?a.message:"Unknown error"}
|
|
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};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.default,{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.default,{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)(b$.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)(bt.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)(bu.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)(bI,{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.default,{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)(bT,{}),label:"MCP",sx:{mr:1,bgcolor:"rgba(255,255,255,0.2)",color:"#fff","& .MuiChip-icon":{color:"#fff"}}}),(0,d.jsx)(k.default,{variant:"caption",sx:{color:"rgba(255,255,255,0.8)"},children:"Reference Server"})]})]})]}),(0,d.jsx)(bJ.A,{sx:{flexGrow:1,pt:2},children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:a.description||`MCP Reference Server for ${a.name.replace(/-/g," ")}`})})]})})},a.name))})]})]})})},b2=({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=(a=>{if(!a)return!1;try{let b=new URL(a);return"http:"===b.protocol||"https:"===b.protocol}catch(a){return!1}})(h),u=async()=>{if(!q)return void o({type:"error",text:"Please enter a valid HTTP or HTTPS URL"});m(!0),o({type:"success",text:"Validating URL..."});try{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:""};g&&g(b),c&&c("local"),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.default,{variant:"h6",gutterBottom:!0,children:"Connect to Remote MCP Server"}),(0,d.jsx)(k.default,{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.default,{variant:"subtitle2",gutterBottom:!0,children:"Server URL"}),(0,d.jsx)(s.A,{fullWidth:!0,size:"small",value:h,onChange:a=>{i(a.target.value),n&&o(null)},placeholder:"https://example.com/mcp",variant:"outlined",required:!0,error:h.length>0&&!q,helperText:h.length>0&&!q?"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.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:u,disabled:!q||j,children:j?"Connecting...":"Connect"})]})]})})};var b3=c(30137);let b4=({isOpen:a,onClose:b,onAdd:c,initialConfig:g,onUpdate:h,onRestartAfterUpdate:i})=>{let[j,l]=(0,f.useState)("spotlight"),[m,n]=(0,f.useState)(null),[o,p]=(0,f.useState)(!1),[q,r]=(0,f.useState)(""),[s,t]=(0,f.useState)({spotlight:!1,marketplace:!1,github:!1,local:!1,reference:!1,remote:!1});(0,f.useEffect)(()=>{g||s[j]||t(a=>({...a,[j]:!0}))},[j,g,s]);let{getThemeValue:u}=(0,w.Ic)(),x=()=>{n(null),p(!1),r(""),l("spotlight"),b()};return(0,d.jsxs)(bK.A,{open:a,onClose:x,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{width:"95vw",maxWidth:"95vw",maxHeight:"95vh",height:"auto"}},children:[(0,d.jsxs)(bL.A,{component:"div",sx:{display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider",pb:1},children:[(0,d.jsx)(k.default,{variant:"h6",children:g?`Edit MCP Server: ${g.name}`:"Add MCP Server"}),(0,d.jsx)(v.A,{edge:"end",color:"inherit",onClick:x,"aria-label":"close",children:(0,d.jsx)(b3.A,{})})]}),(0,d.jsxs)(bM.A,{sx:{p:0},children:[g?null:(0,d.jsx)(e.default,{sx:{borderBottom:1,borderColor:"divider"},children:(0,d.jsxs)(aJ.A,{value:j,onChange:(a,b)=>{p(!1),r(""),l(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)(bf,{initialConfig:g,onAdd:c,onUpdate:h,onClose:b,onRestartAfterUpdate:i}):"spotlight"===j?(0,d.jsx)(b0,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:(a,b)=>{n(a),p(!!b?.autoTestRun)}}):"marketplace"===j?(0,d.jsx)(bZ,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:(a,b)=>{n(a),p(!!b?.autoTestRun)},onOpenInGitHubTab:a=>{r(a),l("github")}}):"github"===j?(0,d.jsx)(af,{onAdd:c,onClose:b,setActiveTab:l,initialGitHubUrl:q,onUpdate:a=>{n(a),p(!1)}}):"local"===j?(0,d.jsx)(bf,{initialConfig:m,onAdd:c,onClose:b,autoTestRun:o}):"remote"===j?(0,d.jsx)(b2,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:a=>{n(a),p(!1)}}):(0,d.jsx)(b1,{onAdd:c,onClose:b,setActiveTab:l,onUpdate:a=>{n(a),p(!1)}})})]})]})};var b5=c(91059),b6=c(42387),b7=c(45798),b8=c(18954),b9=c(31411);let ca=(0,j.h)("frontend/components/mcp/MCPToolManager/ToolTester"),cb=({serverName:a,tools:b=[],onTestTool:c,onClose:g})=>{ca.debug("Props:",{serverName:a,toolsCount:b?.length});let h=Array.isArray(b)?b:[];ca.debug("Tools array:",{count:h.length});let[j,m]=(0,f.useState)(""),[n,o]=(0,f.useState)({}),[q,r]=(0,f.useState)(null),[u,x]=(0,f.useState)(!1),[y,z]=(0,f.useState)(60),[A,B]=(0,f.useState)(null),[C,D]=(0,f.useState)(null),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!1),[I,J]=(0,f.useState)(!1),K=async()=>{ca.debug(`Testing tool: ${j} with params:`,JSON.stringify(n)),ca.debug(`Timeout: ${y} seconds`),D(null),F(null),x(!0);try{let a={},b=h.find(a=>a.name===j);b?.inputSchema?.properties?Object.entries(n).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,n),ca.debug("Sending typed params:",JSON.stringify(a));let d=await c(j,a,y);ca.debug("Test result:",JSON.stringify(d)),d&&d.progressToken&&F(d.progressToken),r(d)}catch(a){ca.error("Error testing tool:",a),r({success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"})}x(!1)},L=async()=>{if(!G){H(!0),ca.debug("Cancelling tool execution");try{let b=E?`/api/mcp/cancel?token=${E}&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)ca.info("Successfully sent cancellation request"),B("Cancellation request sent. The operation should stop shortly.");else{let a=await c.json();ca.warn("Failed to cancel operation:",a),B(`Failed to cancel: ${a.error||"Unknown error"}`)}}catch(a){ca.error("Error cancelling tool:",a),B(`Error cancelling: ${a instanceof Error?a.message:"Unknown error"}`)}finally{H(!1)}}},M=h.find(a=>a.name===j);ca.debug("Selected tool data:",{name:M?.name,hasSchema:!!M?.inputSchema});let{getThemeValue:N}=(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.default,{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)(b3.A,{fontSize:"small"})})})]}),A&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:A}),(0,d.jsxs)(e.default,{sx:{mb:2},children:[(0,d.jsx)(k.default,{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)(aY.A,{fullWidth:!0,value:j,onChange:a=>{m(a.target.value),o({}),r(null)},displayEmpty:!0,sx:{bgcolor:a=>a.palette.background.paper,"& .MuiOutlinedInput-notchedOutline":{borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"}},children:[(0,d.jsx)(aZ.A,{value:"",children:"Choose a tool..."}),h.map(a=>(0,d.jsx)(aZ.A,{value:a.name,children:a.name},a.name))]})]}),M?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(e.default,{sx:{mb:2},children:(0,d.jsx)(k.default,{variant:"body2",sx:{color:a=>"dark"===a.palette.mode?"#9ca3af":"#6b7280"},children:M.description})}),(0,d.jsxs)(e.default,{sx:{mb:2,display:"flex",flexDirection:"column",gap:2},children:[(0,d.jsx)(b9.A,{schema:M.inputSchema,values:n,onChange:o}),(0,d.jsxs)(e.default,{children:[(0,d.jsx)(k.default,{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===y?"":y,onChange:a=>(a=>{let b=parseInt(a,10);""===a||isNaN(b)||b<-1||0===b?z(60):z(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.default,{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:K,disabled:u,startIcon:u&&(0,d.jsx)(i.default,{size:"small",color:"white"}),children:u?"Testing...":"Test Tool"}),u&&(0,d.jsx)(t.A,{variant:"contained",color:"error",onClick:L,disabled:G,startIcon:G?(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:G?"Cancelling...":"Cancel"})]}),u&&(0,d.jsxs)(e.default,{sx:{mt:2},children:[!C&&(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.default,{variant:"body2",color:"text.secondary",children:"Processing request..."})]}),C&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:.5},children:[(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:"Progress:"}),(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:C.total?`${Math.round(C.current)}/${Math.round(C.total)} (${Math.round(C.current/C.total*100)}%)`:`${Math.round(C.current)}%`})]}),(0,d.jsx)(b6.A,{variant:"determinate",value:C.total?Math.min(100,C.current/C.total*100):Math.min(100,C.current)})]})]})]}):(0,d.jsx)(k.default,{color:"text.secondary",children:"No tool selected or tool details not found."}),q&&(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.default,{variant:"subtitle1",sx:{fontWeight:"medium"},children:"Result:"}),(0,d.jsx)(aq.A,{control:(0,d.jsx)(aV.A,{checked:I,onChange:a=>J(a.target.checked),size:"small"}),label:"Show Raw",sx:{mr:0}})]}),I?(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:q.success?q.output:`Error: ${q.error}`}):q.success?(()=>{try{let a=JSON.parse(q.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)(b7.oz,{remarkPlugins:[b8.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:q.output})}})():(0,d.jsxs)(k.default,{color:"error.main",children:["Error: ",q.error]})]})]})};var cc=c(88117);let cd=(0,j.h)("frontend/components/mcp/MCPToolManager"),ce=({serverName:a,onClose:b})=>{let{tools:c,isLoading:e,error:g,loadTools:h,retryLoadTools:j,isRetrying:k,retryCount:l,testTool:m}=(0,cc.O)(a),n=async(a,b,c)=>(cd.debug(`Testing tool ${a} with params:`,b),void 0!==c&&cd.debug(`Using timeout: ${c} seconds`),await m(a,b,c));(0,f.useEffect)(()=>{if(a){let b=setInterval(()=>{cd.debug("Periodic tool refresh"),a5.S.clearToolsCache(a),h(!0)},3e4);return()=>clearInterval(b)}},[h,a]);let{getThemeValue:o}=(0,w.Ic)();return g&&(!c||0===c.length)?(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:o("#fef2f2","#3a2222"),borderColor:o("#fecaca","#5a3333"),color:o("#333","#f0f0f0")},children:[(0,d.jsxs)("h3",{className:"text-lg font-semibold mb-4",style:{color:o("#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: ",g]}),(0,d.jsx)("button",{onClick:()=>{a&&a5.S.clearToolsCache(a),j()},className:"mt-2 px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:k,children:k?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.default,{size:"small",color:"white",className:"mr-2"}),"Retrying..."]}):"Retry"}),l>0&&(0,d.jsxs)("p",{className:"text-sm mt-1",children:["Retry attempt: ",l]})]})]}):a?(0,d.jsxs)("div",{className:"mt-8",style:{color:o("#333","#f0f0f0")},children:[(0,d.jsx)(cb,{serverName:a,tools:c,onTestTool:n,onClose:b}),e&&(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..."})]}),g&&c&&c.length>0&&(0,d.jsxs)("div",{className:"mt-2 text-yellow-500",children:[(0,d.jsxs)("p",{children:["Warning: ",g]}),(0,d.jsx)("p",{className:"text-sm",children:"Using cached tools. Some tools may be unavailable."}),(0,d.jsx)("button",{onClick:()=>{a&&a5.S.clearToolsCache(a),j()},className:"mt-1 px-2 py-1 text-xs bg-blue-500 text-white rounded hover:bg-blue-600 flex items-center",disabled:k,children:k?(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"}),l>0&&(0,d.jsxs)("p",{className:"text-xs mt-1",children:["Retry attempt: ",l]})]})]}):(0,d.jsxs)("div",{className:"mt-8 border rounded-lg p-4",style:{backgroundColor:o("white","#2a2a2a"),borderColor:o("#e5e7eb","#3a3a3a"),color:o("#333","#f0f0f0")},children:[(0,d.jsx)("h3",{className:"text-lg font-semibold mb-4",style:{color:o("#111","#f8f8f8")},children:"Tool Manager"}),(0,d.jsx)("p",{style:{color:o("#6b7280","#9ca3af")},children:"Please select a server to view and test tools."})]})},cf=(0,j.h)("frontend/components/mcp/MCPCapabilitiesManager"),cg=({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?a5.S.listServerResources(a):Promise.resolve(null),g?a5.S.listServerPrompts(a):Promise.resolve(null)]);b&&(i(b.resources||[]),m(b.resourceTemplates||[])),d&&o(d.prompts||[]),w(b?.error||d?.error)}catch(a){cf.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]);let I=async(b,c)=>{y(`Resource: ${c}`),A(""),E(void 0),C(!0);try{let c=await a5.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 a5.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.default,{variant:"h6",children:"resources"===b?"Resources":"prompts"===b?"Prompts":"Resources & Prompts"}),(0,d.jsx)(t.A,{size:"small",onClick:()=>{a5.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.default,{variant:"body2",children:"Loading capabilities…"})]}),v&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:2},children:v}),K&&(0,d.jsx)(k.default,{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.default,{variant:"subtitle2",sx:{mt:1},children:"Resources"}),(0,d.jsx)(bN.A,{dense:!0,disablePadding:!0,children:h.map(a=>(0,d.jsxs)(bO.A,{onClick:()=>I(a.uri,a.name||a.uri),children:[(0,d.jsx)(bQ.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.default,{variant:"caption",color:"text.secondary",sx:{mt:1,display:"block"},children:"Templates (parameterized URIs)"}),(0,d.jsx)(bN.A,{dense:!0,disablePadding:!0,children:j.map(a=>(0,d.jsx)(bQ.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)(b5.A,{sx:{my:1}}),(0,d.jsx)(k.default,{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.default,{variant:"body2",sx:{fontWeight:600},children:a.name}),a.description&&(0,d.jsx)(k.default,{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.default,{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.default,{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)"})]})]})]})},ch=(0,j.h)("frontend/components/mcp/MCPServerManager/ServerDetailsModal"),ci=({server:a,onClose:b,onSaveEnv:c,onServerRestart:g})=>{let[h,i]=(0,f.useState)("tools");(0,f.useEffect)(()=>{a&&i("tools")},[a?.name]);let j=null!==a,l=a?.name||"",m=async b=>{a&&(ch.debug(`Saving env for ${a.name}`),await c(a.name,b))};return(0,d.jsxs)(bK.A,{open:j,onClose:b,maxWidth:"lg",fullWidth:!0,PaperProps:{sx:{height:"85vh",maxHeight:"85vh"}},children:[(0,d.jsxs)(bL.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.default,{variant:"h6",children:l}),a&&(0,d.jsx)(k.default,{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)(b3.A,{})})]}),(0,d.jsxs)(aJ.A,{value:h,onChange:(a,b)=>i(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)(b5.A,{}),(0,d.jsxs)(bM.A,{sx:{overflow:"auto"},children:[j&&"tools"===h&&(0,d.jsx)(ce,{serverName:l}),j&&"resources"===h&&(0,d.jsx)(cg,{serverName:l,show:"resources"}),j&&"prompts"===h&&(0,d.jsx)(cg,{serverName:l,show:"prompts"}),j&&"env"===h&&(0,d.jsx)(e.default,{sx:{mt:1},children:(0,d.jsx)(ao.A,{serverName:l,initialEnv:a?.env||{},onSave:m,onServerRestart:async a=>{await g(a)}})})]})]})};var cj=c(53455),ck=c(63650);function cl(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a))b[c]=d&&"object"==typeof d&&"value"in d?d.value:"string"==typeof d?d:"";return b}function cm(a){let b,c=[],d=[];if("string"==typeof a)try{b=JSON.parse(a)}catch(a){return{servers:d,errors:[`Invalid JSON: ${a.message}`]}}else b=a;if(!b||"object"!=typeof b)return{servers:d,errors:["Expected a JSON object."]};let e=b,f=e.mcpServers&&"object"==typeof e.mcpServers?e.mcpServers:e;if(0===Object.keys(f).length)return{servers:d,errors:['No servers found. Expected an "mcpServers" object.']};for(let[a,b]of Object.entries(f)){if(!b||"object"!=typeof b){c.push(`"${a}": entry is not an object.`);continue}let e=function(a){let b=(a.transport||a.type||"").toString().toLowerCase().trim();if(!b)return"stdio";switch(b){case"stdio":return"stdio";case"http":case"streamable-http":case"streamable":case"streamablehttp":return"streamable";case"sse":return"sse";case"ws":case"websocket":return"websocket";default:return null}}(b);if(!e){c.push(`"${a}": unknown transport type "${b.type||b.transport}".`);continue}let f={};if(b.env&&"object"==typeof b.env)for(let[a,c]of Object.entries(b.env))f[a]="string"==typeof c?c:String(c??"");let g={name:a,env:f,disabled:b.disabled??!1,autoApprove:Array.isArray(b.autoApprove)?b.autoApprove:[],rootPath:"",_buildCommand:"",_installCommand:""};if("stdio"===e){if(!b.command||"string"!=typeof b.command){c.push(`"${a}": stdio server is missing a "command".`);continue}d.push({...g,transport:"stdio",command:b.command,args:Array.isArray(b.args)?b.args:[]})}else if("websocket"===e){let e=b.url||b.websocketUrl;if(!e){c.push(`"${a}": websocket server is missing a "url".`);continue}d.push({...g,transport:"websocket",websocketUrl:e})}else{let f=b.url||b.serverUrl;if(!f){c.push(`"${a}": ${e} server is missing a "url".`);continue}let h=b.headers&&"object"==typeof b.headers?b.headers:void 0;d.push({...g,transport:e,serverUrl:f,...h?{headers:h}:{}})}}return{servers:d,errors:c}}let cn=[{id:"claude",label:"Claude",fileName:"mcp_config.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),d={};for(let b of a){if(b.exposeAsMcpServer){d[b.name]={type:"http",url:`${c}/mcp-proxy/${b.name}`};continue}let a={},e=cl(b.env);switch(b.transport){case"stdio":a.command=b.command,a.args=b.args||[],Object.keys(e).length>0&&(a.env=e);break;case"streamable":a.type="http",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=cl(b.headers)),Object.keys(e).length>0&&(a.env=e);break;case"sse":a.type="sse",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=cl(b.headers)),Object.keys(e).length>0&&(a.env=e);break;case"websocket":a.type="ws",a.url=b.websocketUrl,Object.keys(e).length>0&&(a.env=e);break;default:Object.keys(e).length>0&&(a.env=e)}d[b.name]=a}return{mcpServers:d}},import:cm},{id:"cline",label:"Cline",fileName:"cline_mcp_settings.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),d={};for(let b of a){let a={disabled:b.disabled??!1,autoApprove:b.autoApprove??[],timeout:60};if(b.exposeAsMcpServer){d[b.name]={...a,type:"streamableHttp",url:`${c}/mcp-proxy/${b.name}`};continue}let e=cl(b.env),f={...a};switch(b.transport){case"stdio":f.command=b.command,f.args=b.args||[],Object.keys(e).length>0&&(f.env=e);break;case"streamable":f.type="streamableHttp",f.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(f.headers=cl(b.headers));break;case"sse":f.type="sse",f.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(f.headers=cl(b.headers));break;case"websocket":f.type="ws",f.url=b.websocketUrl;break;default:Object.keys(e).length>0&&(f.env=e)}d[b.name]=f}return{mcpServers:d}},import:function(a){return cm(a)}}];function co(a){return cn.find(b=>b.id===a)??cn[0]}var cp=c(7118),cq=c(7503);let cr=(0,a$.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download"),cs=(0,a$.A)((0,d.jsx)("path",{d:"M5 20h14v-2H5zm0-10h4v6h6v-6h4l-7-7z"}),"Upload"),ct=(0,a$.A)((0,d.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");var cu=c(63757),cv=c(11402),cw=c(8165),cx=c(49066);let cy=(0,a$.A)((0,d.jsx)("path",{d:"M6 6h12v12H6z"}),"Stop"),cz=(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 cA=c(9863),cB=c(81310),cC=c(18467),cD=c(59737),cE=c(7329),cF=c(2560);let cG=(0,j.h)("frontend/components/mcp/MCPServerManager"),cH=({onServerModalToggle:a})=>{let{servers:b,isLoading:c,loadError:g,connectingServers:h,toggleServer:i,retryServer:j,deleteServer:m,addServer:n,updateServer:p,setServerFolder:q,saveEnv:r}=(0,ck.v)(),[w,x]=(0,f.useState)(!1),[y,z]=(0,f.useState)(null),[A,B]=(0,f.useState)(!1),[C,D]=(0,f.useState)(""),[E,F]=(0,f.useState)(null),[G,H]=(0,f.useState)(!1),[I,J]=(0,f.useState)("claude"),[K,L]=(0,f.useState)(null),[M,N]=(0,f.useState)(null),[O,P]=(0,f.useState)(null),[Q,R]=(0,f.useState)({}),S=(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=S.split("|").filter(Boolean);if(0===a.length)return;let b=!1;return(0,cj.M8)(a).then(a=>{b||R(b=>({...b,...a}))}).catch(a=>cG.warn("Server update check failed",a)),()=>{b=!0}},[S]);let T=async(a,b)=>{cG.info(`Server ${a} updated from git, refreshing update status`);let c=S.split("|").filter(Boolean),d=await (0,cj.M8)(c.length>0?c:[b],!0);R(a=>({...a,...d}))},U=a=>{let c=b.find(b=>b.name===a);if(!c||c.disabled)return void cG.debug(`Not opening details for ${a} (missing or disabled)`);P(a)},V=async a=>{await i(a,!1),await i(a,!0)},W=O&&b.find(a=>a.name===O)||null,[X,Y]=(0,f.useState)(""),[Z,$]=(0,cF.Xk)("flujo-ui:mcp:sort","name-asc"),[_,aa]=(0,cF.Xk)("flujo-ui:mcp:filter","all"),[ab,ac]=(0,f.useState)(null),[ad,ae]=(0,cF.Xk)("flujo-ui:mcp:group","none"),[af,ag]=(0,f.useState)(null),[ah,aj]=(0,cF.Xk)("flujo-ui:mcp:collapsed",[]),ak=(0,f.useMemo)(()=>new Set(ah),[ah]),[al,am]=(0,f.useState)(!1),[an,ao]=(0,f.useState)(new Set),[ap,aq]=(0,f.useState)({open:!1,action:null}),ar=(0,ai.A)(),as=async(a,b)=>{cG.debug(`Toggling server ${a} to ${b?"enabled":"disabled"}`),await i(a,b)},at=async a=>{cG.debug(`Retrying pulling server status for server: ${a}`),await j(a)},av=async a=>{cG.debug(`Deleting server: ${a}`),await m(a)},aw=b=>{cG.debug(`Editing server: ${b.name}`),z(b),x(!0),a?.(!0)},ay=async b=>{cG.debug(`Adding server: ${b.name}`),await n(b),x(!1),z(null),a?.(!1)},az=async b=>{let c=y?.name;cG.debug(`Updating server: ${c??b.name}`+(c&&c!==b.name?` -> ${b.name}`:"")),await p(b,c),x(!1),z(null),a?.(!1)},aA=async()=>{let a=co(I);cG.debug(`Importing server configurations from ${a.label} format`),F(null);let{servers:c,errors:d}=a.import(C);if(0===c.length)return void F(d.length>0?d.join("\n"):"No servers found in the pasted configuration.");H(!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 p(a),g++):(await n(a),e.add(a.name),f++)}catch(b){h.push(`"${a.name}": ${b.message||"failed to import"}`)}H(!1);let i=[...d,...h];if(0===f&&0===g)return void F(i.length>0?i.join("\n"):"No servers could be imported.");cG.info(`Imported MCP servers: ${f} added, ${g} updated`),i.length>0?F(`Imported ${f} added / ${g} updated. Some entries were skipped:
|
|
45
|
+
${i.join("\n")}`):(B(!1),D(""))},aB=()=>{B(!1),D(""),F(null)},aC=(0,f.useMemo)(()=>{cG.debug("Filtering and sorting servers",{searchTerm:X,sortOption:Z,filterOption:_});let a=b;if(""!==X.trim()){let c=X.toLowerCase();a=b.filter(a=>a.name.toLowerCase().includes(c)||a.rootPath?.toLowerCase().includes(c))}return"all"!==_&&(a=a.filter(a=>{switch(_){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===_;default:return!0}})),[...a].sort((a,b)=>{switch(Z){case"name-asc":return a.name.localeCompare(b.name);case"name-desc":return b.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==b.status)return -1;if("connected"!==a.status&&"connected"===b.status)return 1;return a.name.localeCompare(b.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==b.status)return -1;if("disconnected"!==a.status&&"disconnected"===b.status)return 1;return a.name.localeCompare(b.name);case"transport":let c=["stdio","websocket","sse","streamable"],d=c.indexOf(a.transport),e=c.indexOf(b.transport);if(d!==e)return d-e;return a.name.localeCompare(b.name);default:return 0}})},[b,X,Z,_]),aD=(0,f.useMemo)(()=>(0,cE.yF)(b,a=>a.folder),[b]),aE=(0,f.useMemo)(()=>"folder"===ad?(0,cE.Je)(aC,a=>a.folder):"sort"===ad?(0,cE.Az)(aC,a=>(function(a,b){switch(b){case"name-asc":case"name-desc":return(0,cE.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"}}})(a,Z)):[],[ad,aC,Z]),aF=a=>{ae(a),ag(null)},aG=async()=>{cG.debug("Bulk enabling servers",{selectedServers:Array.from(an)});let a=Array.from(an).map(a=>as(a,!0));await Promise.all(a),ao(new Set),aq({open:!1,action:null})},aH=async()=>{cG.debug("Bulk disabling servers",{selectedServers:Array.from(an)});let a=Array.from(an).map(a=>as(a,!1));await Promise.all(a),ao(new Set),aq({open:!1,action:null})},aI=(a,b)=>{let c=new Set(an);b?c.add(a):c.delete(a),ao(c)},aJ=()=>{ac(null)},aK=a=>{$(a),aJ()},aL=a=>(0,d.jsx)(o,{servers:a.map(a=>({...a,tools:[]})),isLoading:c,loadError:g,onServerSelect:U,onServerToggle:as,onServerRetry:at,onServerDelete:av,onServerEdit:aw,selectionMode:al,selectedServers:an,onServerSelectionChange:aI,updates:Q,onServerUpdated:T,folders:aD,onServerSetFolder:q});return(0,d.jsxs)(e.default,{sx:{color:"text.primary"},children:[(0,d.jsxs)(e.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(k.default,{variant:"h5",children:"MCP"}),(0,d.jsxs)(e.default,{sx:{display:"flex",gap:1},children:[(0,d.jsx)(t.A,{variant:"outlined",color:"primary",onClick:a=>N(a.currentTarget),startIcon:(0,d.jsx)(cs,{}),endIcon:(0,d.jsx)(ct,{}),sx:{textTransform:"none",fontWeight:500},children:"Import"}),(0,d.jsx)(cp.A,{anchorEl:M,open:!!M,onClose:()=>N(null),children:cn.map(a=>(0,d.jsx)(aZ.A,{onClick:()=>{J(a.id),D(""),F(null),N(null),B(!0)},children:(0,d.jsx)(bQ.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(t.A,{variant:"contained",color:"primary",onClick:a=>L(a.currentTarget),startIcon:(0,d.jsx)(cr,{}),endIcon:(0,d.jsx)(ct,{}),sx:{textTransform:"none",fontWeight:500,boxShadow:1},children:"Export"}),(0,d.jsx)(cp.A,{anchorEl:K,open:!!K,onClose:()=>L(null),children:cn.map(a=>(0,d.jsx)(aZ.A,{onClick:()=>(a=>{let c=co(a);cG.debug(`Exporting server configurations in ${c.label} format`),L(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)(bQ.A,{primary:`${a.label} format`})},a.id))}),(0,d.jsx)(t.A,{variant:"contained",color:"primary","data-tour":"add-mcp-server",onClick:()=>{z(null),x(!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:1,sx:{m:2,mb:1,p:1},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:X,onChange:a=>Y(a.target.value),InputProps:{startAdornment:(0,d.jsx)(u.A,{position:"start",children:(0,d.jsx)(bS.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:al?"contained":"outlined",onClick:()=>{am(!al),al&&ao(new Set)},startIcon:(0,d.jsx)(cz,{}),children:"Select"}),al&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{size:"small",onClick:()=>{let a=aC.filter(a=>!a.builtIn);an.size===a.length?ao(new Set):ao(new Set(a.map(a=>a.name)))},disabled:0===aC.filter(a=>!a.builtIn).length,children:an.size===aC.filter(a=>!a.builtIn).length&&an.size>0?"Deselect All":"Select All"}),an.size>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(t.A,{size:"small",variant:"contained",color:"success",onClick:()=>aq({open:!0,action:"enable"}),startIcon:(0,d.jsx)(cx.A,{}),children:["Enable (",an.size,")"]}),(0,d.jsxs)(t.A,{size:"small",variant:"contained",color:"error",onClick:()=>aq({open:!0,action:"disable"}),startIcon:(0,d.jsx)(cy,{}),children:["Disable (",an.size,")"]})]})]}),(0,d.jsx)(v.A,{size:"small",onClick:a=>ag(a.currentTarget),color:"none"!==ad?"primary":"default",sx:{border:`1px solid ${ar.palette.divider}`,backgroundColor:ar.palette.background.default},title:"Group cards",children:(0,d.jsx)(cA.A,{fontSize:"small"})}),(0,d.jsx)(v.A,{size:"small",onClick:a=>{ac(a.currentTarget)},sx:{border:`1px solid ${ar.palette.divider}`,backgroundColor:ar.palette.background.default},children:(0,d.jsx)(cu.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(e.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:3},children:[(0,d.jsxs)(k.default,{variant:"body2",color:"textSecondary",children:[aC.length," of ",b.length," servers",X&&` matching "${X}"`,"all"!==_&&` (filtered by ${_})`]}),(0,d.jsxs)(k.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===Z?"Name (A-Z)":"name-desc"===Z?"Name (Z-A)":"status-connected"===Z?"Connected first":"status-disconnected"===Z?"Disconnected first":"Transport type"]})]}),(0,d.jsx)(e.default,{sx:{px:2,flex:1,overflow:"auto"},children:"none"===ad||c||g||0===aC.length?aL(aC):aE.map(a=>(0,d.jsx)(cD.A,{label:a.label,count:a.items.length,expanded:!ak.has(a.key),onToggle:()=>(a=>{aj(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])})(a.key),showFolderIcon:"folder"===ad,children:aL(a.items)},a.key))}),(0,d.jsxs)(cp.A,{anchorEl:af,open:!!af,onClose:()=>ag(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(aZ.A,{selected:"none"===ad,onClick:()=>aF("none"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cB.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"No grouping"})]}),(0,d.jsxs)(aZ.A,{selected:"folder"===ad,onClick:()=>aF("folder"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cC.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"By folder"})]}),(0,d.jsxs)(aZ.A,{selected:"sort"===ad,onClick:()=>aF("sort"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cA.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(cp.A,{anchorEl:ab,open:!!ab,onClose:aJ,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(aZ.A,{onClick:()=>aK("name-asc"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cv.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(aZ.A,{onClick:()=>aK("name-desc"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cv.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(bQ.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(b5.A,{}),(0,d.jsxs)(aZ.A,{onClick:()=>aK("status-connected"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(cw.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"Connected first"})]}),(0,d.jsxs)(aZ.A,{onClick:()=>aK("status-disconnected"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(ax.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"Disconnected first"})]}),(0,d.jsx)(b5.A,{}),(0,d.jsxs)(aZ.A,{onClick:()=>aK("transport"),children:[(0,d.jsx)(bP.A,{children:(0,d.jsx)(bV.A,{fontSize:"small"})}),(0,d.jsx)(bQ.A,{primary:"Transport type"})]})]}),(0,d.jsxs)(bK.A,{open:ap.open,onClose:()=>aq({open:!1,action:null}),children:[(0,d.jsx)(bL.A,{children:"enable"===ap.action?"Enable Servers":"Disable Servers"}),(0,d.jsxs)(bM.A,{children:[(0,d.jsxs)(cq.A,{children:["Are you sure you want to ",ap.action," ",an.size," server",an.size>1?"s":"","?"]}),(0,d.jsx)(e.default,{sx:{mt:2},children:Array.from(an).map(a=>(0,d.jsxs)(k.default,{variant:"body2",sx:{ml:2},children:["• ",a]},a))})]}),(0,d.jsxs)(bR.A,{children:[(0,d.jsx)(t.A,{onClick:()=>aq({open:!1,action:null}),children:"Cancel"}),(0,d.jsx)(t.A,{onClick:"enable"===ap.action?aG:aH,variant:"contained",color:"enable"===ap.action?"success":"error",children:"enable"===ap.action?"Enable":"Disable"})]})]}),(0,d.jsxs)(bK.A,{open:A,onClose:aB,maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(bL.A,{children:["Import MCP Servers — ",co(I).label," format"]}),(0,d.jsxs)(bM.A,{children:[(0,d.jsxs)(cq.A,{sx:{mb:2},children:["Paste a ",co(I).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:C,onChange:a=>{D(a.target.value),E&&F(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:G}),E&&(0,d.jsx)(cq.A,{component:"pre",sx:{mt:2,color:"error.main",whiteSpace:"pre-wrap",fontSize:"0.85rem"},children:E})]}),(0,d.jsxs)(bR.A,{children:[(0,d.jsx)(t.A,{onClick:aB,disabled:G,children:"Cancel"}),(0,d.jsx)(t.A,{onClick:aA,variant:"contained",color:"primary",disabled:G||""===C.trim(),startIcon:(0,d.jsx)(cs,{}),children:G?"Importing...":"Import"})]})]}),(0,d.jsx)(b4,{isOpen:w,onAdd:ay,onClose:()=>{x(!1),z(null),a?.(!1)},initialConfig:y,onUpdate:az,onRestartAfterUpdate:at}),(0,d.jsx)(ci,{server:W?{name:W.name,status:W.status,env:W.env}:null,onClose:()=>{P(null),O&&j(O)},onSaveEnv:r,onServerRestart:V})]})},cI=()=>(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(cH,{})}),cJ=(0,j.h)("app/mcp/page");function cK(){return cJ.debug("Rendering MCPPage"),(0,d.jsx)(e.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,d.jsx)(cI,{})})}},49066:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(27080),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M8 5v14l11-7z"}),"PlayArrow")},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\\\\MarioAndreschak\\\\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\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx","default")},55511:a=>{"use strict";a.exports=require("crypto")},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(27080),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(27080),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")},71472:(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\\MarioAndreschak\\Documents\\GitHub\\FLUJO\\src\\app\\mcp\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\MarioAndreschak\\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\\MarioAndreschak\\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
|
+
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}}},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(27080),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")}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,3984,8445,6760,6390,1746,2666,1050,1690,8572,8342,2439,9314,453,2776,8460,9938,6201,7186],()=>b(b.s=71472));module.exports=c})();
|