flujo-ai 3.18.0 → 3.20.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 +252 -231
- package/.next/app-path-routes-manifest.json +13 -11
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +21 -21
- package/.next/react-loadable-manifest.json +11 -11
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page.js +2 -2
- 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 +2 -2
- 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.js +2 -2
- 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 -1
- 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 -1
- package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.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 -1
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route.js +1 -0
- package/.next/server/app/api/flow/repair/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/repair/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.js +4 -4
- 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 +2 -2
- 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.js +2 -1
- package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route.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 +2 -2
- 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 +2 -2
- 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.js +2 -2
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route.js +2 -2
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +8 -7
- 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 +3 -3
- package/.next/server/app/docs/page.js +37 -6
- package/.next/server/app/docs/page.js.nft.json +1 -1
- 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 +3 -3
- package/.next/server/app/executions/page.js +3 -5
- package/.next/server/app/executions/page.js.nft.json +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +3 -3
- package/.next/server/app/flows/page.js +3 -3
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/mcp/page.js +6 -6
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -5
- 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 +3 -3
- package/.next/server/app/models/page.js +2 -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.js +3 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +4 -3
- 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 +3 -3
- package/.next/server/app/v1/chat/completions/route.js +1 -1
- 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 -2
- 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 -2
- 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 +3 -3
- 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]/resources/route.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -0
- 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 +2 -2
- 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 +13 -11
- package/.next/server/chunks/{2776.js → 1083.js} +2 -3
- package/.next/server/chunks/1119.js +1 -0
- package/.next/server/chunks/{7731.js → 1152.js} +2 -2
- package/.next/server/chunks/1197.js +2 -0
- package/.next/server/chunks/1373.js +1 -1
- package/.next/server/chunks/1491.js +1 -0
- package/.next/server/chunks/{8460.js → 1991.js} +1 -1
- package/.next/server/chunks/2246.js +1 -0
- package/.next/server/chunks/2261.js +1 -0
- package/.next/server/chunks/227.js +5 -0
- package/.next/server/chunks/2350.js +1 -1
- package/.next/server/chunks/2430.js +1 -0
- package/.next/server/chunks/264.js +1 -1
- package/.next/server/chunks/2859.js +3 -7
- package/.next/server/chunks/289.js +1 -0
- package/.next/server/chunks/3511.js +1 -0
- package/.next/server/chunks/{6069.js → 3574.js} +2 -2
- package/.next/server/chunks/3778.js +42 -0
- package/.next/server/chunks/{8367.js → 38.js} +2 -2
- package/.next/server/chunks/3953.js +1 -0
- package/.next/server/chunks/3984.js +4 -4
- package/.next/server/chunks/4028.js +1 -0
- package/.next/server/chunks/4045.js +1 -0
- package/.next/server/chunks/4265.js +1 -0
- package/.next/server/chunks/4436.js +1 -0
- package/.next/server/chunks/{8227.js → 4456.js} +2 -2
- package/.next/server/chunks/4498.js +40 -0
- package/.next/server/chunks/4637.js +70 -0
- package/.next/server/chunks/4671.js +1 -0
- package/.next/server/chunks/{1912.js → 4690.js} +2 -2
- package/.next/server/chunks/4949.js +1 -0
- package/.next/server/chunks/5625.js +28 -0
- package/.next/server/chunks/{805.js → 5662.js} +2 -2
- package/.next/server/chunks/5708.js +64 -0
- package/.next/server/chunks/5734.js +4 -4
- package/.next/server/chunks/62.js +1 -0
- package/.next/server/chunks/6532.js +52 -0
- package/.next/server/chunks/{6760.js → 6772.js} +1 -1
- package/.next/server/chunks/{6201.js → 6901.js} +3 -2
- package/.next/server/chunks/{9314.js → 6908.js} +3 -3
- package/.next/server/chunks/6981.js +1 -0
- package/.next/server/chunks/6996.js +3 -3
- package/.next/server/chunks/701.js +1 -1
- package/.next/server/chunks/7101.js +64 -0
- package/.next/server/chunks/7214.js +3 -3
- package/.next/server/chunks/724.js +3 -3
- package/.next/server/chunks/7362.js +4 -4
- package/.next/server/chunks/7463.js +6 -0
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7635.js +1 -1
- package/.next/server/chunks/7821.js +1 -1
- package/.next/server/chunks/8739.js +2 -2
- package/.next/server/chunks/9509.js +2 -2
- package/.next/server/chunks/9632.js +1 -0
- package/.next/server/chunks/9957.js +1 -1
- package/.next/server/functions-config-manifest.json +3 -3
- 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/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1161-970b105d0ab11425.js +1 -0
- package/.next/static/chunks/1620-0d8ecd877f123f7b.js +1 -0
- package/.next/static/chunks/1871-14c3e63ca865d85e.js +1 -0
- package/.next/static/chunks/{1892-359187893bbc7f3a.js → 1892-5c1e38d89e0a5a9c.js} +1 -1
- package/.next/static/chunks/3217.058098140ec3f563.js +1 -0
- package/.next/static/chunks/3381-5fd2417957ca0881.js +1 -0
- package/.next/static/chunks/{3545.d3a512315a9fce3e.js → 3545.353a62a68d3b7fd1.js} +1 -1
- package/.next/static/chunks/{2084-2463e1d781bad2a6.js → 3648-733cf7ca4a5d1f19.js} +1 -1
- package/.next/static/chunks/3736-5e2b3f6cda1bb923.js +1 -0
- package/.next/static/chunks/3930-cc8d73c953811b97.js +1 -0
- package/.next/static/chunks/422-268783d9ad5897e1.js +1 -0
- package/.next/static/chunks/4365-5d0e3d01c1bc0fdc.js +1 -0
- package/.next/static/chunks/5134-e21bd33daaf14ecf.js +1 -0
- package/.next/static/chunks/5501-c400aaeaf57e6297.js +1 -0
- package/.next/static/chunks/5619-82fc5c3133837739.js +1 -0
- package/.next/static/chunks/6013-cb423bc438256acb.js +1 -0
- package/.next/static/chunks/6920-a83ad5c0d5a54cf3.js +1 -0
- package/.next/static/chunks/7258-e27017c1b98f43f9.js +1 -0
- package/.next/static/chunks/{7583.b6c2f8874b6b89cd.js → 7583.26a8c1f6e6823daf.js} +1 -1
- package/.next/static/chunks/7687-7edf1a6e1f063b08.js +1 -0
- package/.next/static/chunks/8066-c202a83aef15143a.js +1 -0
- package/.next/static/chunks/{8187.15bf331f5318c00f.js → 8187.fd653767df53db87.js} +1 -1
- package/.next/static/chunks/8755-9f375ec8740fecac.js +1 -0
- package/.next/static/chunks/{9164-a56181e5e93cc47e.js → 9164-f54d3531ca1df5f7.js} +1 -1
- package/.next/static/chunks/{9747-ffb8be5e59700c27.js → 9587-706bfd1a692c4660.js} +3 -3
- package/.next/static/chunks/app/api/backup/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/browse/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/env/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/repair/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/git/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/init/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/restore/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/storage/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/update/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/chat/page-a67ad3683443e7ad.js +1 -0
- package/.next/static/chunks/app/docs/page-097827ec4dae1d30.js +1 -0
- package/.next/static/chunks/app/executions/page-cb0dcc66d84c9bf8.js +1 -0
- package/.next/static/chunks/app/flows/page-abdd0642e378c5da.js +1 -0
- package/.next/static/chunks/app/{layout-2878f13d7e253503.js → layout-64fc0ae7efe81e3c.js} +1 -1
- package/.next/static/chunks/app/mcp/page-7d3a269dce68b529.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/models/{error-2b00c98abf1e02cf.js → error-5732fbb053e182c5.js} +1 -1
- package/.next/static/chunks/app/models/page-616950f93a1e0027.js +1 -0
- package/.next/static/chunks/app/{page-6e18a8cd78b2050e.js → page-77e1ba238b0ee1d0.js} +1 -1
- package/.next/static/chunks/app/settings/{page-9430dfdaff87d70c.js → page-199d0ffae9ec7263.js} +1 -1
- package/.next/static/chunks/app/v1/chat/completions/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/models/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/webpack-ef5b2cef70829f42.js +1 -0
- package/.next/static/dvSaKx6-EfRNi7Xj-cSv_/_buildManifest.js +1 -0
- package/.next/trace +9 -7
- package/.next/types/app/api/flow/repair/route.ts +347 -0
- package/.next/types/app/v1/chat/conversations/[conversationId]/resources/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/1050.js +0 -1
- package/.next/server/chunks/1403.js +0 -8
- package/.next/server/chunks/2439.js +0 -52
- package/.next/server/chunks/2666.js +0 -1
- package/.next/server/chunks/3310.js +0 -35
- package/.next/server/chunks/453.js +0 -1
- package/.next/server/chunks/4681.js +0 -1
- package/.next/server/chunks/5311.js +0 -1
- package/.next/server/chunks/6037.js +0 -41
- package/.next/server/chunks/6390.js +0 -28
- package/.next/server/chunks/6936.js +0 -37
- package/.next/server/chunks/7186.js +0 -2
- package/.next/server/chunks/7982.js +0 -1
- package/.next/server/chunks/8342.js +0 -1
- package/.next/server/chunks/906.js +0 -35
- package/.next/server/chunks/9687.js +0 -1
- package/.next/server/chunks/9880.js +0 -1
- package/.next/server/chunks/9938.js +0 -1
- package/.next/static/Fdh7zqKv38txmpLAxepeR/_buildManifest.js +0 -1
- package/.next/static/chunks/1374-e084b3c40554288a.js +0 -1
- package/.next/static/chunks/2380-5696e0dc0469f6a5.js +0 -1
- package/.next/static/chunks/2709-29f91a54eef90221.js +0 -1
- package/.next/static/chunks/3217.1a7e24fd70294370.js +0 -1
- package/.next/static/chunks/4105-8fddb00196bf3c6d.js +0 -1
- package/.next/static/chunks/4244-6f399c7ff9980207.js +0 -1
- package/.next/static/chunks/4809-423a2a4a90d02f2c.js +0 -1
- package/.next/static/chunks/6084-68908a197e957e5f.js +0 -1
- package/.next/static/chunks/6509-3380826fd7c82b4e.js +0 -1
- package/.next/static/chunks/6582-6735fdd6b42b5c35.js +0 -1
- package/.next/static/chunks/690-391bc0f482a9f67c.js +0 -1
- package/.next/static/chunks/7290-fd5bb2c94fd7f605.js +0 -1
- package/.next/static/chunks/8098-297bf477152a565b.js +0 -1
- package/.next/static/chunks/924-64f908860caf1a35.js +0 -1
- package/.next/static/chunks/9286-6ea909e5bf70a97e.js +0 -1
- package/.next/static/chunks/9562-93cc45aef3630781.js +0 -1
- package/.next/static/chunks/9984-1ed094ea9f5b1f17.js +0 -1
- package/.next/static/chunks/app/api/backup/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/browse/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/env/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/improve/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/quick-chat/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/git/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/init/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/restore/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/storage/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/update/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/chat/page-6486974f4a6c7b57.js +0 -1
- package/.next/static/chunks/app/docs/page-5da72cc6db51f238.js +0 -1
- package/.next/static/chunks/app/executions/page-fe19f6a1bd3fe05c.js +0 -1
- package/.next/static/chunks/app/flows/page-3b84093cdf2aee84.js +0 -1
- package/.next/static/chunks/app/mcp/page-355386ec2a542e42.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/models/page-20c80d398bf83fc5.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/models/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/webpack-4880945dd240d429.js +0 -1
- /package/.next/static/{Fdh7zqKv38txmpLAxepeR → dvSaKx6-EfRNi7Xj-cSv_}/_ssgManifest.js +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
"use strict";exports.id=6201,exports.ids=[6201],exports.modules={2173:(a,b,c)=>{c.d(b,{A:()=>r});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(53773),i=c(37674),j=c(43312),k=c(44079),l=c(20830),m=c(47902),n=c(91034),o=c(30717),p=c(46410),q=c(32720);let r=({roots:a,onChange:b})=>{let c=Array.isArray(a)?a:[],[r,s]=(0,e.useState)(null),t=(a,d)=>{b(c.map((b,c)=>c===a?d:b))};return(0,d.jsxs)(f.default,{children:[(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(o.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"subtitle1",children:"Workspace folders"})]}),(0,d.jsxs)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Limit which folders this server may work in. Advisory only — the server is told these paths via MCP roots; it is not a hard sandbox. Leave empty to default to the server's own root dir. Supports ",(0,d.jsx)("code",{children:"${global:VAR}"}),"."]}),(0,d.jsx)(h.A,{spacing:1,children:c.map((a,e)=>(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(i.A,{size:"small",fullWidth:!0,placeholder:"/path/to/folder or file:///path",value:a,onChange:a=>t(e,a.target.value)}),(0,d.jsx)(j.A,{title:"Browse folders (on the FLUJO machine)",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>s(e),"aria-label":"browse for folder",children:(0,d.jsx)(p.A,{fontSize:"small"})})}),(0,d.jsx)(j.A,{title:"Remove",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>b(c.filter((a,b)=>b!==e)),"aria-label":"remove workspace folder",children:(0,d.jsx)(n.A,{fontSize:"small"})})})]},e))}),(0,d.jsx)(l.A,{size:"small",startIcon:(0,d.jsx)(m.A,{}),onClick:()=>b([...c,""]),sx:{mt:1},children:"Add folder"}),(0,d.jsx)(q.A,{open:null!==r,title:"Choose a workspace folder",initialPath:null!==r&&c[r]||void 0,onClose:()=>s(null),onSelect:a=>{null!==r&&t(r,a)}})]})}},2560:(a,b,c)=>{c.d(b,{Xk:()=>e});var d=c(38301);function e(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(a=>{e(b=>"function"==typeof a?a(b):a)},[a])]}},7329:(a,b,c)=>{function d(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function e(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function f(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let g=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&g.push({key:"folder:__ungrouped__",label:c,items:e}),g}function g(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}c.d(b,{Az:()=>d,Je:()=>f,po:()=>e,yF:()=>g})},32631:(a,b,c)=>{c.d(b,{D:()=>h}),c(21124);var d=c(38301),e=c(19815);c(84040),c(9718);let f=(0,e.h)("frontend/contexts/ThemeContext"),g=(0,d.createContext)(void 0),h=()=>{let a=(0,d.useContext)(g);if(!a)throw f.error("useTheme hook used outside of ThemeProvider"),Error("useTheme must be used within a ThemeProvider");return f.debug("useTheme hook accessed"),a}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(20830),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(19815).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.default,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(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 e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({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"}}},g=async(a,b,c)=>{if(c){let d=await e({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"}}}},46393:(a,b,c)=>{c.d(b,{A:()=>ae});var d=c(21124),e=c(38301),f=c(19815),g=c(84040),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(1312),u=c(25750),v=c(61615),w=c(78352),x=c(28055),y=c(41893),z=c(56685),A=c(71756),B=c(91901),C=c(83013);let D=({transport:a,size:b="small"})=>{let c=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#1976d2",bgColor:"#e3f2fd"};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(A.A,{fontSize:"small"}),color:"#2e7d32",bgColor:"#e8f5e8"};case"sse":return{label:"SSE",icon:(0,d.jsx)(B.A,{fontSize:"small"}),color:"#f57c00",bgColor:"#fff3e0"};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(C.A,{fontSize:"small"}),color:"#00796b",bgColor:"#e0f2f1"};default:return{label:"UNKNOWN",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#757575",bgColor:"#f5f5f5"}}})();return(0,d.jsx)(y.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 E=c(40512),F=c(83899),G=c(52327),H=c(19925),I=c(20830),J=c(81637),K=c(79515),L=c(88745),M=c(95587),N=c(77028),O=c(89490),P=c(71439),Q=c(50553),R=c(84233),S=c(72264),T=c(53455),U=c(33799);let V=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),W=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)({}),[D,W]=(0,e.useState)(""),X=!!(g&&g.trim()),Y=!!(i&&i.trim()),Z=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:X},{key:"build",label:`Build (${i})`,active:Y},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),x(!1),A(null),C({}),W(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,T.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let $=(0,e.useCallback)((a,b)=>{C(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{W(c=>c+(c?"\n":"")+`--- ${a} ---
|
|
1
|
+
"use strict";exports.id=6901,exports.ids=[6901],exports.modules={2560:(a,b,c)=>{c.d(b,{Xk:()=>e});var d=c(38301);function e(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(a=>{e(b=>"function"==typeof a?a(b):a)},[a])]}},7329:(a,b,c)=>{function d(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function e(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function f(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let g=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&g.push({key:"folder:__ungrouped__",label:c,items:e}),g}function g(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}c.d(b,{Az:()=>d,Je:()=>f,po:()=>e,yF:()=>g})},13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1}},32631:(a,b,c)=>{c.d(b,{D:()=>h}),c(21124);var d=c(38301),e=c(19815);c(84040),c(9718);let f=(0,e.h)("frontend/contexts/ThemeContext"),g=(0,d.createContext)(void 0),h=()=>{let a=(0,d.useContext)(g);if(!a)throw f.error("useTheme hook used outside of ThemeProvider"),Error("useTheme must be used within a ThemeProvider");return f.debug("useTheme hook accessed"),a}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(68730),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(19815).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.default,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(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 e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({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"}}},g=async(a,b,c)=>{if(c){let d=await e({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"}}}},46393:(a,b,c)=>{c.d(b,{A:()=>ae});var d=c(21124),e=c(38301),f=c(19815),g=c(84040),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(1312),u=c(25750),v=c(61615),w=c(78352),x=c(28055),y=c(41893),z=c(56685),A=c(71756),B=c(91901),C=c(83013);let D=({transport:a,size:b="small"})=>{let c=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#1976d2",bgColor:"#e3f2fd"};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(A.A,{fontSize:"small"}),color:"#2e7d32",bgColor:"#e8f5e8"};case"sse":return{label:"SSE",icon:(0,d.jsx)(B.A,{fontSize:"small"}),color:"#f57c00",bgColor:"#fff3e0"};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(C.A,{fontSize:"small"}),color:"#00796b",bgColor:"#e0f2f1"};default:return{label:"UNKNOWN",icon:(0,d.jsx)(z.A,{fontSize:"small"}),color:"#757575",bgColor:"#f5f5f5"}}})();return(0,d.jsx)(y.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 E=c(40512),F=c(83899),G=c(52327),H=c(19925),I=c(68730),J=c(81637),K=c(79515),L=c(88745),M=c(95587),N=c(77028),O=c(89490),P=c(71439),Q=c(50553),R=c(84233),S=c(72264),T=c(53455),U=c(33799);let V=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),W=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)({}),[D,W]=(0,e.useState)(""),X=!!(g&&g.trim()),Y=!!(i&&i.trim()),Z=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:X},{key:"build",label:`Build (${i})`,active:Y},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),x(!1),A(null),C({}),W(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,T.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let $=(0,e.useCallback)((a,b)=>{C(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{W(c=>c+(c?"\n":"")+`--- ${a} ---
|
|
2
2
|
`+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),A(null),V.info(`Starting update for server ${c}`);let a=(a,b)=>{$(a,"error"),A(b),t(!1)};try{k&&($("stop","running"),await Promise.resolve(m(!1)),$("stop","done")),$("pull","running");let b=await (0,T.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,T.Fu)(b.oldSha)} -> ${(0,T.Fu)(b.newSha)}`),$("pull","done"),X){$("install","running");let b=await (0,U.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);$("install","done")}if(Y){$("build","running");let b=await (0,U.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);$("build","done")}k&&($("restart","running"),await Promise.resolve(m(!0)),$("restart","done")),V.info(`Update completed for server ${c}`),x(!0),t(!1),n?.()}catch(a){V.error(`Update failed for server ${c}`,a),A(a.message||"Update failed"),t(!1)}},ab=s||w||Object.keys(B).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(E.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(F.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(u.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(G.A,{children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(y.A,{size:"small",label:(0,T.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(K.default,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(y.A,{size:"small",color:"primary",label:(0,T.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(K.default,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(K.default,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(K.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:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(J.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(K.default,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(L.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(K.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)(J.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(K.default,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(M.A,{sx:{mt:1},control:(0,d.jsx)(N.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(K.default,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(O.A,{dense:!0,disablePadding:!0,children:Z.filter(a=>a.active).map(a=>(0,d.jsxs)(P.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(Q.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(v.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(S.A,{color:"disabled",fontSize:"small"})}})(B[a.key])}),(0,d.jsx)(R.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),z&&(0,d.jsxs)(L.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[z,k&&(0,d.jsx)(K.default,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),w&&(0,d.jsxs)(L.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),D&&(0,d.jsx)(J.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:D})]}),(0,d.jsxs)(H.A,{children:[(0,d.jsx)(I.A,{onClick:b,disabled:s,children:w?"Close":"Cancel"}),!w&&(0,d.jsx)(I.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(u.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":z?"Retry Update":"Update"})]})]})};var X=c(30873),Y=c(60839),Z=c(30818),$=c(27114),_=c(43312),aa=c(44079),ab=c(67191),ac=c(98463);let ad=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),ae=({name:a,status:b,path:f,enabled:z,transport:A,onToggle:B=()=>{},onRetry:C=()=>{},onDelete:M=()=>{},onClick:O,onEdit:P=()=>{},onAuthenticate:Q,pickerMode:R=!1,error:S,stderrOutput:U,authorizationUrl:V,selected:ae=!1,onSelect:af,selectionMode:ag=!1,hasOAuthTokens:ah=!1,exposeAsMcpServer:ai=!1,enableMcpApps:aj=!1,updateInfo:ak,installCommand:al,buildCommand:am,onUpdated:an,folder:ao,folders:ap=[],onSetFolder:aq,builtIn:ar=!1})=>{let[as,at]=(0,e.useState)(!1),[au,av]=(0,e.useState)(null),[aw,ax]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(!1),[aA,aB]=(0,e.useState)(""),[aC,aD]=(0,e.useState)("success"),[aE,aF]=(0,e.useState)(!1),[aG,aH]=(0,e.useState)(!1),[aI,aJ]=(0,e.useState)(ai),[aK,aL]=(0,e.useState)(aj);(0,Y.A)(),(0,e.useEffect)(()=>{aJ(ai)},[ai]),(0,e.useEffect)(()=>{aL(aj)},[aj]);let aM=async b=>{aJ(b);let c=await x.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aB(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aD("success")):(aJ(!b),aB("Failed to update exposure setting."),aD("error")),az(!0)},aN=async b=>{aL(b);let c=await x.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aB(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aD("success")):(aL(!b),aB("Failed to update the MCP Apps setting."),aD("error")),az(!0)},aO=()=>{navigator.clipboard.writeText(""),aB("Endpoint URL copied to clipboard."),aD("success"),az(!0)},aP={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&z&&!R){aF(!0);let b=setTimeout(()=>{ad.debug(`Polling status for server: ${a}`),C()},2e3);return()=>{clearTimeout(b),aF(!1)}}"connecting"!==b&&"initialization"!==b&&aF(!1)},[b,z,a,C]);let[aQ,aR]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{aQ&&clearTimeout(aQ)},[aQ]);let aS=async b=>{b.stopPropagation(),ad.debug(`Reset OAuth tokens button clicked for server: ${a}`),aH(!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();ad.info(`OAuth tokens reset successfully for ${a}`,c),aB("OAuth tokens reset successfully. Server will require re-authentication."),aD("success"),az(!0),setTimeout(()=>{C()},500)}catch(b){ad.error(`Failed to reset OAuth tokens for ${a}`,b),aB(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aD("error"),az(!0)}finally{aH(!1)}},{getThemeValue:aT,getThemeColor:aU,colors:aV}=(0,g.Ic)(),aW=()=>{ad.debug(`Server restart initiated for: ${a}`),B(!1),setTimeout(()=>{B(!0),ad.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(Z.A,{role:R?"button":void 0,"aria-pressed":R?ae:void 0,sx:{cursor:"pointer",height:R?"100%":void 0,transition:"box-shadow 0.3s ease, border-color 0.12s ease",border:a=>R&&ae?`2px solid ${a.palette.primary.main}`:"2px solid transparent","&:hover":{boxShadow:3}},onClick:()=>{ad.debug(`Server card clicked: ${a}`),O()},children:[(0,d.jsxs)($.A,{sx:{pb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[ag&&af&&(0,d.jsx)(N.A,{checked:ae,onClick:a=>a.stopPropagation(),onChange:a=>af(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(K.default,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ak?.updateAvailable&&(0,d.jsx)(_.A,{title:`Update available: ${(0,T.Fu)(ak.localSha)} → ${(0,T.Fu)(ak.remoteSha)}. Click to update.`,children:(0,d.jsx)(y.A,{icon:(0,d.jsx)(u.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),ad.debug(`Update badge clicked for server: ${a}`),ax(!0)}})}),ar?(0,d.jsx)(_.A,{title:"FLUJO's built-in server — always available, cannot be edited or removed.",children:(0,d.jsx)(y.A,{label:"Built-in",color:"primary",size:"small"})}):(0,d.jsx)(D,{transport:A,size:"small"})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(v.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(K.default,{variant:"body2",color:aP,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(K.default,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:ar?void 0:f,children:ar?"FLUJO's own backend API — flow authoring, execution and server management as MCP tools.":f}),ar&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(_.A,{title:"External MCP clients (Claude Code, Claude Desktop, Cursor, …) can drive FLUJO through this local endpoint.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Exposed to external apps"})})]}),(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(K.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(_.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aa.A,{size:"small",onClick:aO,children:(0,d.jsx)(s.A,{fontSize:"small"})})})]})]}),!ar&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aI?"primary.main":"text.disabled"}}),(0,d.jsx)(ab.A,{checked:aI,onChange:a=>aM(a.target.checked),size:"small"}),(0,d.jsx)(_.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aI&&(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(K.default,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(_.A,{title:"Copy endpoint URL",children:(0,d.jsx)(aa.A,{size:"small",onClick:aO,children:(0,d.jsx)(s.A,{fontSize:"small"})})})]})]}),!ar&&!R&&(0,d.jsx)(J.default,{sx:{mt:1,mb:1,p:1,borderRadius:1,border:"1px solid",borderColor:"divider"},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aK?"primary.main":"text.disabled"}}),(0,d.jsx)(ab.A,{checked:aK,onChange:a=>aN(a.target.checked),size:"small"}),(0,d.jsx)(_.A,{title:"Allow this server's tools to render interactive apps (MCP Apps / ui:// resources) in chat. Rendered read-only in a strict sandbox. Only enable for servers you trust.",children:(0,d.jsx)(K.default,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(K.default,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(I.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),ad.debug(`View full error clicked for server: ${a}`),at(!0)},children:"View Full Error"})]}),(0,d.jsx)(J.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>aU("error.background"),color:a=>aU("error.text"),border:"1px solid",borderColor:a=>aU("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:S||"Unknown error"})]}),"requires_authentication"===b&&!R&&(0,d.jsxs)(J.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(J.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(K.default,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(I.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),ad.debug(`Authenticate button clicked for server: ${a}`),Q)Q();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){ad.info(`Server ${a} already authorized, no popup needed`),aW();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{ad.info(`OAuth authentication successful for ${a}`,b),ad.info(`Automatically restarting server ${a} after OAuth completion`),aW()},onError:b=>{ad.error(`OAuth authentication failed for ${a}`,b),aB("OAuth authentication failed"),aD("error"),az(!0)}})}catch(b){ad.error(`Failed to start OAuth authentication for ${a}`,b),aB("Failed to start OAuth authentication"),aD("error"),az(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),!ar&&!R&&(0,d.jsxs)(ac.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(J.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ab.A,{checked:z,onClick:a=>a.stopPropagation(),onChange:b=>{ad.debug(`Server ${a} toggle changed to: ${b.target.checked}`),B(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(K.default,{variant:"body2",sx:{ml:.5,fontWeight:500,color:z?"primary.main":"text.secondary"},children:z?"Enabled":"Disabled"}),z&&(0,d.jsx)(_.A,{title:"Restart server",children:(0,d.jsx)(aa.A,{size:"small",onClick:b=>{b.stopPropagation(),ad.debug(`Restart button clicked for server: ${a}`),aW()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(J.default,{children:[(0,d.jsx)(_.A,{title:"Retry connection",children:(0,d.jsx)(aa.A,{color:"primary",onClick:c=>{c.stopPropagation(),ad.debug(`Retry button clicked for server: ${a}`),aQ&&clearTimeout(aQ),aF(!0),C();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aF(!1),aR(null)},1e4);aR(d)},disabled:aE,size:"small",children:aE?(0,d.jsx)(v.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===A&&ah&&(0,d.jsx)(_.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(aa.A,{color:"warning",onClick:aS,disabled:aG,size:"small",children:aG?(0,d.jsx)(v.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),aq&&(0,d.jsx)(_.A,{title:ao?`Folder: ${ao}`:"Move to folder",children:(0,d.jsx)(aa.A,{color:ao?"primary":"default",onClick:a=>{a.stopPropagation(),av(a.currentTarget)},size:"small",children:(0,d.jsx)(t.A,{})})}),(0,d.jsx)(_.A,{title:"Edit server",children:(0,d.jsx)(aa.A,{color:"primary",onClick:a=>{a.stopPropagation(),P()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(_.A,{title:"Delete server",children:(0,d.jsx)(aa.A,{color:"error",onClick:a=>{a.stopPropagation(),M()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),aq&&(0,d.jsx)(w.A,{anchorEl:au,open:!!au,currentFolder:ao,folders:ap,onClose:()=>av(null),onAssign:a=>aq(a)}),(0,d.jsxs)(E.A,{open:as,onClose:()=>{ad.debug(`Error modal closed for server: ${a}`),at(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(F.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(G.A,{children:[(0,d.jsx)(J.default,{sx:{p:2,borderRadius:1,bgcolor:a=>aU("error.background"),color:a=>aU("error.text"),border:"1px solid",borderColor:a=>aU("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:S||"Unknown error"}),U&&(0,d.jsxs)(J.default,{sx:{mt:2},children:[(0,d.jsx)(K.default,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(J.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:U})]})]}),(0,d.jsxs)(H.A,{children:[(0,d.jsx)(I.A,{onClick:()=>at(!1),children:"Close"}),(0,d.jsx)(I.A,{onClick:()=>{let b=[S||"Unknown error",U?`
|
|
3
3
|
|
|
4
4
|
Stderr Output:
|
|
5
|
-
${U}`:""].join("");navigator.clipboard.writeText(b),ad.debug(`Error copied to clipboard for server: ${a}`),aB("Error message copied to clipboard"),aD("success"),az(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ak&&(0,d.jsx)(W,{open:aw,onClose:()=>ax(!1),serverName:a,rootPath:f,installCommand:al,buildCommand:am,enabled:z,updateInfo:ak,onToggle:B,onUpdated:an}),(0,d.jsx)(X.A,{open:ay,autoHideDuration:3e3,onClose:()=>az(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(L.A,{onClose:()=>az(!1),severity:aC,sx:{width:"100%"},children:aA||"Error message copied to clipboard"})})]})}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(19815).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(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 h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.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 d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},59737:(a,b,c)=>{c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.default,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},61615:(a,b,c)=>{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..."})]})}},63650:(a,b,c)=>{c.d(b,{v:()=>h});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerStatus");function g(a){return"stdio"===a.transport?a.args&&a.args.length>0?a.args[0]:"Unknown path":"websocket"===a.transport?a.websocketUrl||"Unknown URL":a.serverUrl||"Unknown URL"}function h(){let[a,b]=(0,d.useState)([]),[c,h]=(0,d.useState)(!0),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(new Set),m=(0,d.useCallback)(async()=>{f.debug("Loading servers"),h(!0),j(null);try{let a=await e.S.loadServerConfigs();if(!a||"error"in a){f.warn("Failed to load server configurations:",a?.error),j(a?.error||"Failed to load server configurations"),h(!1);return}let c=await Promise.all(a.map(async a=>{f.debug(`Getting status for server: ${a.name}`);let b=await e.S.getServerStatus(a.name),c="string"==typeof b?b:b.status,d="object"==typeof b&&b.message?b.message:void 0,h="object"==typeof b&&b.stderrOutput?b.stderrOutput:void 0,i=g(a);return{...a,path:i,status:c,error:d,stderrOutput:h}}));f.debug("Final server states:",c),b(c),h(!1)}catch(a){f.warn("Failed to load servers:",a),j("Failed to load servers"),h(!1)}},[]),n=(0,d.useCallback)(async(c,d)=>{f.debug(`Toggling server ${c} to ${d?"enabled":"disabled"}`);try{let g=a.find(a=>a.name===c);if(!g)return f.warn(`Server not found: ${c}`),!1;f.debug(`Found server ${c}, current disabled state: ${g.disabled}`);let h=await e.S.updateServerConfig(c,{disabled:!d});if(h.error)return f.warn("Failed to update server config:",[h.error,c]),!1;f.debug(`Updating server ${c} state in UI, new disabled state: ${!d}`),b(a=>a.map(a=>a.name===c?{...a,disabled:!d}:a)),f.info(`Successfully toggled server ${c} to ${d?"enabled":"disabled"}`);try{let a=await e.S.getServerStatus(c),d="string"==typeof a?a:a.status,f="object"==typeof a&&a.message?a.message:void 0,g="object"==typeof a&&a.stderrOutput?a.stderrOutput:void 0;b(a=>a.map(a=>a.name===c?{...a,status:d,error:f,stderrOutput:g}:a))}catch(a){f.warn(`Failed to get status for server ${c} after toggle:`,a)}return!0}catch(a){return f.warn("Failed to toggle server:",a),!1}},[a]),o=(0,d.useCallback)(async c=>{f.debug(`Deleting server: ${c}`);try{if(!a.find(a=>a.name===c))return f.warn("Server not found:",c),!1;let d=await e.S.deleteServerConfig(c);if(d.error)return f.warn("Failed to delete server config:",d.error),!1;return b(a=>a.filter(a=>a.name!==c)),!0}catch(a){return f.warn("Failed to delete server:",a),!1}},[a]),p=(0,d.useCallback)(async a=>{f.debug("Adding server:",a);try{let c=g(a),d={...a,path:c,status:"connecting",tools:[],env:a.env||{}};b(a=>[...a,d]),l(b=>new Set(b).add(a.name));let h=await e.S.updateServerConfig(a.name,a);if(h.error)return f.warn("Failed to update server config:",h.error),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:h.error}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1;f.info(`Successfully added server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after adding:`,b)}return l(b=>{let c=new Set(b);return c.delete(a.name),c}),!0}catch(c){return f.warn("Failed to add server:",c),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c instanceof Error?c.message:"Unknown error during server addition"}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1}},[]),q=(0,d.useCallback)(async(a,c)=>{let d=c??a.name,h=d!==a.name;f.debug("Updating server:",a);try{b(b=>b.map(b=>b.name===d?{...a,path:g(a),status:b.status,error:b.error,stderrOutput:b.stderrOutput}:b));let c=await e.S.updateServerConfig(d,a);if(c.error){if(f.warn("Failed to update server config:",c.error),h)return await m(),!1;return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c.error}:b)),!1}f.info(`Successfully updated config for server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after config update:`,b)}return!0}catch(d){if(f.warn("Failed to update server:",d),h)return await m(),!1;let c=d instanceof Error?d.message:"Unknown error during update";return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c}:b)),!1}},[m]),r=(0,d.useCallback)(async(a,c)=>{let d=c&&c.trim()?c.trim():"";f.debug(`Setting folder for server ${a} to ${d||"(none)"}`);try{let c=await e.S.updateServerConfig(a,{folder:d});if("error"in c&&c.error)return f.warn("Failed to update server folder:",c.error),!1;return b(b=>b.map(b=>b.name===a?{...b,folder:d||void 0}:b)),!0}catch(a){return f.warn("Failed to set server folder:",a),!1}},[]),s=(0,d.useCallback)(async(c,d)=>{f.debug(`Saving environment variables for server: ${c}`,d);try{if(!a.find(a=>a.name===c))return f.warn(`Server not found: ${c}`),!1;let g=await e.S.updateServerConfig(c,{env:d});if(g.error)return f.warn("Failed to update server config:",g.error),!1;return f.debug(`Updating environment variables in UI for server: ${c}`),b(a=>a.map(a=>a.name===c?{...a,env:d}:a)),f.info(`Successfully saved environment variables for server: ${c}`),!0}catch(a){return f.warn("Failed to save environment variables:",a),!1}},[a]);return{servers:a,isLoading:c,loadError:i,connectingServers:k,loadServers:m,toggleServer:n,retryServer:(0,d.useCallback)(async a=>{f.debug(`Retrying server status for: ${a}`);try{let c=await e.S.getServerStatus(a),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;return b(b=>b.map(b=>b.name===a?{...b,status:d,error:f,stderrOutput:g}:b)),!0}catch(a){return f.warn("Failed to retry server status:",a),!1}},[]),deleteServer:o,addServer:p,updateServer:q,setServerFolder:r,saveEnv:s}}},78352:(a,b,c)=>{c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(20830),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}},84040:(a,b,c)=>{c.d(b,{Ic:()=>g});var d=c(32631);let e=(0,c(19815).h)("frontend/utils/theme"),f={light:{background:"#FFFFFF",foreground:"#2C3E50",paperBackground:"#F5F6FA",textSecondary:"#7F8C8D",border:"#e5e7eb",heading:"#111",text:"#333",secondaryText:"#666",error:{background:"#fef2f2",border:"#fecaca",text:"#dc2626"}},dark:{background:"#1a1a1a",foreground:"#f0f0f0",paperBackground:"#2a2a2a",textSecondary:"#aaaaaa",border:"#3a3a3a",heading:"#f8f8f8",text:"#f0f0f0",secondaryText:"#aaa",error:{background:"#3a2222",border:"#5a3333",text:"#f87171"}}};function g(){let{isDarkMode:a}=(0,d.D)();return e.debug(`useThemeUtils called with isDarkMode: ${a}`),{getThemeValue:(b,c)=>a?c:b,getThemeColor:b=>{let c=b.split("."),d=f[a?"dark":"light"];for(let a of c)if(!d||"object"!=typeof d||!(a in d))return e.warn(`Theme color path not found: ${b}`),"";else d=d[a];return d},colors:a?f.dark:f.light,isDarkMode:a}}},88117:(a,b,c)=>{c.d(b,{O:()=>g});var d=c(38301),e=c(28055);let f=(0,c(19815).h)("frontend/hooks/useServerTools");function g(a){let[b,c]=(0,d.useState)([]),[g,h]=(0,d.useState)(!1),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(null),[m,n]=(0,d.useState)(null),[o,p]=(0,d.useState)(0),[q,r]=(0,d.useState)(!1),s=(0,d.useRef)(null),t=(0,d.useCallback)(async(d=!1)=>{if(!a){c([]),j(null);return}if(n(a),!d&&k&&new Date().getTime()-k.getTime()<200&&b.length>0&&a===m)return void f.debug(`Rate limiting tool refresh for server: ${a}`);f.debug(`Loading tools for server: ${a}`),h(!0),j(null);try{let b=await e.S.listServerTools(a);if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);if(b.error)f.warn(`Error loading tools for ${a}:`,b.error),j(b.error),c([]);else{let d=b.tools||[];f.debug(`Loaded ${d.length} tools for ${a}`),c(d),l(new Date),p(0)}}catch(b){if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);f.warn(`Failed to load tools for server ${a}:`,b),j(`Failed to load tools: ${b instanceof Error?b.message:"Unknown error"}`),c([])}finally{a===m&&h(!1)}},[a,k,b.length,m]),u=(0,d.useCallback)(()=>{if(!a)return;s.current&&(clearTimeout(s.current),s.current=null),r(!0);let b=Math.min(1e3*Math.pow(2,o),1e4);return f.debug(`Retrying tool load for ${a} in ${b}ms (attempt ${o+1})`),s.current=setTimeout(()=>{p(a=>a+1),t(!0),r(!1)},b),()=>{s.current&&clearTimeout(s.current)}},[a,o,t]);return{tools:b,isLoading:g||q,error:i,loadTools:t,retryLoadTools:u,isRetrying:q,retryCount:o,testTool:(0,d.useCallback)(async(b,c,d)=>{if(!a)return{success:!1,output:"",error:"No server selected"};f.debug(`Testing tool ${b} on server ${a} with params:`,c);try{let g=await e.S.callTool(a,b,c,d);if(g.error)return f.warn(`Error calling tool ${b}:`,g.error),{success:!1,output:"",error:g.error};return f.debug(`Tool ${b} executed successfully:`,g),{success:!0,output:JSON.stringify(g,null,2)}}catch(a){return f.error(`Exception calling tool ${b}:`,a),{success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"}}},[a])}}}};
|
|
5
|
+
${U}`:""].join("");navigator.clipboard.writeText(b),ad.debug(`Error copied to clipboard for server: ${a}`),aB("Error message copied to clipboard"),aD("success"),az(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ak&&(0,d.jsx)(W,{open:aw,onClose:()=>ax(!1),serverName:a,rootPath:f,installCommand:al,buildCommand:am,enabled:z,updateInfo:ak,onToggle:B,onUpdated:an}),(0,d.jsx)(X.A,{open:ay,autoHideDuration:3e3,onClose:()=>az(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(L.A,{onClose:()=>az(!1),severity:aC,sx:{width:"100%"},children:aA||"Error message copied to clipboard"})})]})}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
|
|
6
|
+
${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(19815).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(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 h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.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 d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},61160:(a,b,c)=>{c.d(b,{mO:()=>f,rI:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){return[...a].sort((a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}})}},84040:(a,b,c)=>{c.d(b,{Ic:()=>g});var d=c(32631);let e=(0,c(19815).h)("frontend/utils/theme"),f={light:{background:"#FFFFFF",foreground:"#2C3E50",paperBackground:"#F5F6FA",textSecondary:"#7F8C8D",border:"#e5e7eb",heading:"#111",text:"#333",secondaryText:"#666",error:{background:"#fef2f2",border:"#fecaca",text:"#dc2626"}},dark:{background:"#1a1a1a",foreground:"#f0f0f0",paperBackground:"#2a2a2a",textSecondary:"#aaaaaa",border:"#3a3a3a",heading:"#f8f8f8",text:"#f0f0f0",secondaryText:"#aaa",error:{background:"#3a2222",border:"#5a3333",text:"#f87171"}}};function g(){let{isDarkMode:a}=(0,d.D)();return e.debug(`useThemeUtils called with isDarkMode: ${a}`),{getThemeValue:(b,c)=>a?c:b,getThemeColor:b=>{let c=b.split("."),d=f[a?"dark":"light"];for(let a of c)if(!d||"object"!=typeof d||!(a in d))return e.warn(`Theme color path not found: ${b}`),"";else d=d[a];return d},colors:a?f.dark:f.light,isDarkMode:a}}}};
|