flujo-ai 3.9.1 → 3.11.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 +186 -179
- package/.next/app-path-routes-manifest.json +6 -5
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +15 -15
- package/.next/react-loadable-manifest.json +7 -7
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/api/backup/route.js +1 -2
- 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.js +1 -2
- package/.next/server/app/api/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route.js +1 -2
- package/.next/server/app/api/cwd/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/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/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 -3
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/init/route.js.nft.json +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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 -0
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp-registry/route.js +1 -2
- 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.js +1 -2
- package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route.js +1 -1
- package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route.js +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.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js +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 +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -2
- package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +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 -2
- 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.js +1 -2
- package/.next/server/app/api/storage/route.js.nft.json +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route.js +1 -2
- package/.next/server/app/api/update/route.js.nft.json +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 -8
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +2 -2
- package/.next/server/app/docs/page.js +1 -1
- 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 +1 -1
- package/.next/server/app/executions/page.js +2 -2
- 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 +2 -2
- package/.next/server/app/flows/page.js +10 -10
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/mcp/page.js +13 -13
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +2 -2
- package/.next/server/app/models/page.js +3 -3
- package/.next/server/app/models/page.js.nft.json +1 -1
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- 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 +2 -2
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/v1/chat/completions/route.js +2 -2
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +6 -6
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route.js +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 +6 -5
- package/.next/server/chunks/117.js +1 -0
- package/.next/server/chunks/{5873.js → 1331.js} +3 -3
- package/.next/server/chunks/1373.js +1 -1
- package/.next/server/chunks/1403.js +2 -2
- package/.next/server/chunks/1692.js +1 -1
- package/.next/server/chunks/1905.js +2 -2
- package/.next/server/chunks/{6637.js → 2287.js} +2 -2
- package/.next/server/chunks/2776.js +1 -1
- package/.next/server/chunks/3426.js +1 -0
- package/.next/server/chunks/3984.js +4 -4
- package/.next/server/chunks/4239.js +1 -1
- package/.next/server/chunks/4379.js +1 -0
- package/.next/server/chunks/4706.js +1 -1
- package/.next/server/chunks/4729.js +2 -2
- package/.next/server/chunks/5389.js +13 -13
- package/.next/server/chunks/5504.js +17 -0
- package/.next/server/chunks/5734.js +6 -6
- package/.next/server/chunks/6936.js +13 -13
- package/.next/server/chunks/6996.js +3 -3
- package/.next/server/chunks/7214.js +1 -1
- package/.next/server/chunks/724.js +12 -12
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/{473.js → 7731.js} +2 -2
- package/.next/server/chunks/8126.js +1 -0
- package/.next/server/chunks/8460.js +1 -1
- package/.next/server/chunks/8739.js +1 -1
- package/.next/server/chunks/9188.js +1 -1
- package/.next/server/chunks/9343.js +1 -1
- package/.next/server/chunks/{120.js → 9387.js} +2 -2
- package/.next/server/chunks/9509.js +2 -0
- package/.next/server/chunks/{5547.js → 9688.js} +2 -2
- package/.next/server/chunks/9938.js +1 -1
- package/.next/server/chunks/9989.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages-manifest.json +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/9Pzu8N65j3JuRQ7zVUtwD/_buildManifest.js +1 -0
- package/.next/static/chunks/1811-8ee01cf37161913c.js +1 -0
- package/.next/static/chunks/2380-5696e0dc0469f6a5.js +1 -0
- package/.next/static/chunks/3217.1a7e24fd70294370.js +1 -0
- package/.next/static/chunks/3545.d3a512315a9fce3e.js +1 -0
- package/.next/static/chunks/4205-b9e33afc7e96ecb9.js +1 -0
- package/.next/static/chunks/5781-4328d17aad13f908.js +8 -0
- package/.next/static/chunks/687-98ba5f5043866f48.js +1 -0
- package/.next/static/chunks/7458-4445e76668151564.js +1 -0
- package/.next/static/chunks/{9718-12d33c1a26bb002d.js → 8215-a966f4c36f1ca174.js} +1 -1
- package/.next/static/chunks/8862-8f17ef601bb1fbd0.js +1 -0
- package/.next/static/chunks/8890-a7a8c6f1dc3cd343.js +1 -0
- package/.next/static/chunks/9164-d15e4dab0a1bf282.js +1 -0
- package/.next/static/chunks/9195.294887f083b1a11b.js +1 -0
- package/.next/static/chunks/app/api/backup/{route-acd5b6e731d45f1a.js → route-3291f6991ce3f52c.js} +1 -1
- package/.next/static/chunks/app/api/browse/{route-acd5b6e731d45f1a.js → route-3291f6991ce3f52c.js} +1 -1
- package/.next/static/chunks/app/api/cwd/{route-acd5b6e731d45f1a.js → route-3291f6991ce3f52c.js} +1 -1
- package/.next/static/chunks/app/api/encryption/secure/{route-acd5b6e731d45f1a.js → route-3291f6991ce3f52c.js} +1 -1
- package/.next/static/chunks/app/api/env/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/flow/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/git/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/init/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/model/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/restore/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/storage/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/update/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/chat/page-aea8c8cbfa461e7f.js +1 -0
- package/.next/static/chunks/app/executions/{page-b46744c507a6e810.js → page-95fec57bf97ee809.js} +1 -1
- package/.next/static/chunks/app/flows/page-7fe295069ccdb5fe.js +1 -0
- package/.next/static/chunks/app/mcp/page-0f923960004aa437.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/models/page-d81d2b1fe2f1d063.js +1 -0
- package/.next/static/chunks/app/page-6e18a8cd78b2050e.js +1 -0
- package/.next/static/chunks/app/settings/page-d03a168f6efbf7fd.js +1 -0
- package/.next/static/chunks/app/v1/chat/completions/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/app/v1/models/route-3291f6991ce3f52c.js +1 -0
- package/.next/static/chunks/{webpack-6f17a022ac16e8bd.js → webpack-63a4c59e84967e90.js} +1 -1
- package/.next/trace +7 -7
- package/.next/types/app/api/mcp/test-connection/stream/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/README.md +37 -7
- package/package.json +2 -2
- package/.next/server/chunks/1986.js +0 -1
- package/.next/server/chunks/2181.js +0 -17
- package/.next/server/chunks/5486.js +0 -1
- package/.next/server/chunks/62.js +0 -1
- package/.next/server/chunks/6542.js +0 -1
- package/.next/static/6EKGB09pbUp8R7aHuLiP1/_buildManifest.js +0 -1
- package/.next/static/chunks/2380-2a7acfa037ec8e80.js +0 -1
- package/.next/static/chunks/3217.79ca74c918fc772c.js +0 -1
- package/.next/static/chunks/3235-dfcb73b8d483f8cd.js +0 -1
- package/.next/static/chunks/3545.c3fbe14528517a75.js +0 -1
- package/.next/static/chunks/3750-38474d67566af4c3.js +0 -1
- package/.next/static/chunks/3810-cee95063d5535307.js +0 -1
- package/.next/static/chunks/39-1732a0b689c7b641.js +0 -1
- package/.next/static/chunks/6134-758747aabd77289d.js +0 -8
- package/.next/static/chunks/7488-b58bc701d0deda00.js +0 -1
- package/.next/static/chunks/8862-1314a13b011c4817.js +0 -1
- package/.next/static/chunks/9164-81ca1a1bccdc5ed2.js +0 -1
- package/.next/static/chunks/9195.01a57af6d6cdf1a5.js +0 -1
- package/.next/static/chunks/app/api/env/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/flow/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/git/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/init/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/model/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/restore/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/storage/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/update/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/chat/page-019d2b836f34f40d.js +0 -1
- package/.next/static/chunks/app/flows/page-7b5c0e06951398ac.js +0 -1
- package/.next/static/chunks/app/mcp/page-1ca55f88a3045b5d.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/models/page-a20e6c4e1a5a0c9a.js +0 -1
- package/.next/static/chunks/app/page-471879d3918aeeb6.js +0 -1
- package/.next/static/chunks/app/settings/page-88f7e1b65a6681ec.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-acd5b6e731d45f1a.js +0 -1
- package/.next/static/chunks/app/v1/models/route-acd5b6e731d45f1a.js +0 -1
- /package/.next/static/{6EKGB09pbUp8R7aHuLiP1 → 9Pzu8N65j3JuRQ7zVUtwD}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3080],{32098:()=>{},45993:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>nd});var o=n(95155),r=n(12115),l=n(33567),a=n(94049),s=n(25635),i=n(70690),d=n(5421),c=n(41983),u=n(78470),p=n(50430),h=n(22003),f=n(2778),x=n(52363),m=n(65036),g=n(50001),v=n(9562),b=n(75912),y=n(14287),j=n(86946),w=n(48116),C=n(2300),A=n(21067),S=n(87021),k=n(22539),N=n(74879),T=n(90057),P=n(17897),I=n(76122);I.TG.ArrowClosed;let M={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:I.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:I.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}};function F(e){return!!e&&e.includes("mcp")}function E(e,t,n,o){if("start"===n)return"Start nodes cannot have incoming connections";if("finish"===e)return"Finish nodes cannot have outgoing connections";if("mcp"===e||"mcp"===n||F(t)||F(o)){if(("mcp"!==e||"process"!==n)&&("process"!==e||"mcp"!==n))return"MCP connections must link an MCP node to a Process node via MCP handles";if("process"===e&&!F(t))return"Connect MCP nodes from the Process node's left/right MCP handles"}return null}function D(e){return"".concat(e,"-top")}function z(e,t,n){return t.filter(t=>{var o,r;return(null==(r=t.data)?void 0:r.edgeType)!=="mcp"&&(t.source===e?t.target!==n:t.target===e&&null!=(o=t.data)&&!!o.bidirectional&&t.source!==n)})}function R(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(!e.source||!e.target||!e.sourceHandle||!e.targetHandle)return console.error("Invalid connection: Missing source, target, or handles",e),!1;let o=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);if(!o||!r)return console.error("Invalid connection: Source or target node not found",e),!1;let l=E(o.type,e.sourceHandle,r.type,e.targetHandle);return l?(console.error("Invalid connection: ".concat(l)),!1):"subflow"!==o.type||!(z(o.id,n,e.target).length>0)||(console.error("Invalid connection: Subflow nodes can only have one outgoing connection"),!1)}function B(e,t){let n=t.find(t=>t.id===e.source),o=t.find(t=>t.id===e.target),r=e.sourceHandle,l=e.targetHandle,a=(null==n?void 0:n.type)==="mcp"||(null==o?void 0:o.type)==="mcp"||F(r)||F(l),s="".concat(e.source,":").concat(r,"->").concat(e.target,":").concat(l);return a?{id:s,...e,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:M.markerEnd,markerStart:M.markerStart,style:M.style}:{id:s,...e,type:"custom",data:{edgeType:"standard"},animated:!0}}function W(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=t.find(t=>t.id===e.source),r=t.find(t=>t.id===e.target);return!!o&&!!r&&("subflow"!==r.type||!(z(r.id,n,e.source).length>0))&&null===E(r.type,null,o.type,null)}function L(e,t){let n=e=>{var t;return(null==(t=e.data)?void 0:t.edgeType)==="mcp"};return t.filter(t=>t.id===e.id||(n(e)?n(t)&&(t.source===e.source&&t.target===e.target||t.source===e.target&&t.target===e.source):!n(t)&&t.source===e.source&&t.target===e.target)).map(e=>e.id)}var H=n(56682),O=n(33420),_=n(86973),G=n(49501),U=n(17681),J=n(36314),Y=n(4484),$=n(52277),V=n(78095),X=n(14915);let Z=e=>{let{open:t,position:n,onClose:r,onDelete:l,onEditProperties:a,onCopy:s,onPaste:i,canPaste:d,canCopy:c,nodeId:u,selection:p,edgeId:h}=e,f=[];return u&&!p&&f.push((0,o.jsxs)(_.A,{onClick:()=>{a&&a(),r()},children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(X.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Edit Properties"})]},"edit")),s&&(u||p)&&f.push((0,o.jsxs)(_.A,{onClick:()=>{s&&s(),r()},disabled:!c,children:[(0,o.jsx)(G.A,{children:(0,o.jsx)($.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Copy"})]},"copy")),i&&f.push((0,o.jsxs)(_.A,{onClick:()=>{i&&i(),r()},disabled:!d,children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(V.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Paste"})]},"paste")),(u||h||p)&&f.push((0,o.jsx)(A.A,{},"delete-divider"),(0,o.jsxs)(_.A,{onClick:()=>{l(),r()},sx:{color:"error.main"},children:[(0,o.jsx)(G.A,{sx:{color:"error.main"},children:(0,o.jsx)(Y.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{children:"Delete"})]},"delete")),(0,o.jsx)(J.A,{open:t,onClose:r,anchorReference:"anchorPosition",anchorPosition:null!==n.y&&null!==n.x?{top:n.y,left:n.x}:void 0,children:f})};var q=n(80685),K=n(71738);function Q(e,t){return t.find(t=>t.id===e)}let ee=(0,S.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts");var et=n(39047),en=n(81464),eo=n(12142);let er=(0,w.Ay)(i.A)(e=>{let{theme:t}=e;return{minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===t.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===t.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}}}),el=()=>{let{zoomIn:e,zoomOut:t,fitView:n}=(0,k.VH)();return(0,o.jsx)(k.Zk,{position:"top-right",style:{margin:"10px"},children:(0,o.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,o.jsx)(u.A,{title:"Zoom In",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>e(),children:(0,o.jsx)(et.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Zoom Out",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>t(),children:(0,o.jsx)(en.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Fit View",children:(0,o.jsx)(er,{variant:"outlined",size:"small",onClick:()=>n(),children:(0,o.jsx)(eo.A,{fontSize:"small"})})})]})})},ea=e=>{let{showMiniMap:t=!0,showControls:n=!0,showBackground:r=!0}=e,a=(0,l.A)(),s="dark"===a.palette.mode;return(0,o.jsxs)(o.Fragment,{children:[r&&(0,o.jsx)(k.VS,{color:s?a.palette.text.disabled:a.palette.divider,gap:20,size:1}),n&&(0,o.jsx)(k.H2,{}),t&&(0,o.jsx)(k.of,{nodeColor:s?a.palette.primary.dark:a.palette.primary.light,maskColor:s?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},es=(0,S.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),ei="flujo:flowClipboard",ed=null;function ec(e){ed=e;try{localStorage.setItem(ei,JSON.stringify(e))}catch(e){es.warn("Could not persist flow clipboard to localStorage",e)}}let eu={start:O.vm,process:O.Uw,finish:O.IK,mcp:O.v2,subflow:O.lA},ep={custom:q.jY,mcpEdge:q.oY},eh=e=>{let{open:t,position:n,onClose:r,onSelectNodeType:i,sourceNodeType:d,sourceHandleId:c}=e,u=(0,l.A)(),p=function(e,t){let n=["process","finish","mcp","subflow"];return e&&t?n.filter(n=>null===E(e,t,n,D(n))):n}(d,c);es.debug("NodeSelectionModal: Source node type: ".concat(d,", Source handle ID: ").concat(c)),es.debug("NodeSelectionModal: Valid node types: ".concat(p.join(", ")));let h=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow"}].filter(e=>p.includes(e.type));return n?(0,o.jsx)(H.A,{open:t,onClose:r,"aria-labelledby":"node-selection-modal",children:(0,o.jsxs)(a.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:300,bgcolor:"background.paper",borderRadius:2,boxShadow:24,p:4},children:[(0,o.jsx)(s.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,o.jsx)(a.default,{display:"flex",flexDirection:"column",gap:2,children:h.map(e=>(0,o.jsxs)(a.default,{sx:{padding:2,borderRadius:1,border:"2px solid ".concat("process"===e.type?u.palette.secondary.main:"finish"===e.type?u.palette.success.main:"subflow"===e.type?u.palette.warning.main:u.palette.info.main),cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>i(e.type,n),children:[(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(e=>{switch(e){case"process":default:return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,o.jsx)("div",{style:{width:24,height:24,backgroundColor:u.palette.warning.main,borderRadius:"50%"}})}})(e.type),(0,o.jsx)(s.default,{variant:"subtitle1",fontWeight:"bold",children:e.label})]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",children:e.description})]},e.type))})]})}):null},ef=(0,w.Ay)("div")(e=>{let{theme:t}=e;return{width:"100%",height:"80vh",border:"1px solid ".concat(t.palette.divider),borderRadius:"4px",background:t.palette.background.paper,position:"relative"}}),ex=(0,r.forwardRef)((e,t)=>{let n=(0,l.A)(),{nodes:a,edges:s,onNodesChange:i,onEdgesChange:d,onDrop:c,onDragOver:u,onInit:p,reactFlowWrapper:h,onEditNode:f}=e,{contextMenu:x,selectedElements:m,closeContextMenu:g,handleDelete:v,onNodeContextMenu:b,onEdgeContextMenu:y,onPaneContextMenu:j,onSelectionContextMenu:w}=function(e){let{deleteElements:t}=(0,k.VH)(),[n,o]=(0,r.useState)({open:!1,position:{x:0,y:0}}),[l,a]=(0,r.useState)({nodes:[],edges:[]});(0,k.p4)({onChange:e=>{let{nodes:t,edges:n}=e,o=t.map(e=>e.id),r=n.map(e=>e.id);ee.debug("Selection changed: ".concat(o.length," nodes, ").concat(r.length," edges selected")),a({nodes:o,edges:r})}});let s=(0,r.useCallback)((e,t,n,r)=>{e.preventDefault(),t?ee.debug("Context menu opened for node: ".concat(t)):n?ee.debug("Context menu opened for edge: ".concat(n)):r?ee.debug("Context menu opened for the current selection"):ee.debug("Context menu opened on canvas at (".concat(e.clientX,", ").concat(e.clientY,")")),o({open:!0,position:{x:e.clientX,y:e.clientY},nodeId:t,edgeId:n,selection:r})},[]),i=(0,r.useCallback)(()=>{ee.debug("Context menu closed"),o(e=>({...e,open:!1}))},[]),d=(0,r.useCallback)(()=>{if(n.selection)ee.debug("handleDelete: Deleting the current selection"),t({nodes:l.nodes.map(e=>({id:e})),edges:l.edges.map(e=>({id:e}))});else if(n.nodeId){if(ee.debug("handleDelete: Attempting to delete node ".concat(n.nodeId)),!function(e,t){let n=Q(e,t);return!!n&&"start"!==n.type}(n.nodeId,e)){ee.warn("Cannot delete Start node: ".concat(n.nodeId)),alert("Start nodes cannot be deleted");return}t({nodes:[{id:n.nodeId}]})}else n.edgeId&&(ee.debug("handleDelete: Deleting edge ".concat(n.edgeId)),t({edges:[{id:n.edgeId}]}))},[n,t,e,l]),c=(0,r.useCallback)((e,t)=>{s(e,t.id)},[s]),u=(0,r.useCallback)((e,t)=>{s(e,void 0,t.id)},[s]),p=(0,r.useCallback)(e=>{s(e)},[s]),h=(0,r.useCallback)(e=>{s(e,void 0,void 0,!0)},[s]);return{contextMenu:n,selectedElements:l,onContextMenu:s,closeContextMenu:i,handleDelete:d,onNodeContextMenu:c,onEdgeContextMenu:u,onPaneContextMenu:p,onSelectionContextMenu:h}}(a),{deleteElements:C}=(0,k.VH)(),A=(0,k.PI)(),S=(0,r.useRef)(null),[P,M]=(0,r.useState)(null),[E,z]=(0,r.useState)({open:!1,position:null}),H=(0,r.useCallback)(e=>[...a.filter(e=>e.selected).map(e=>({type:"select",id:e.id,selected:!1})),{type:"add",item:{...e,selected:!0}}],[a]);(0,r.useEffect)(()=>{if(!f)return;let e=e=>{if(e.detail&&e.detail.nodeId){let t=Q(e.detail.nodeId,a);t&&f(t)}};return document.addEventListener("editNode",e),()=>{document.removeEventListener("editNode",e)}},[a,f]);let O=(0,r.useCallback)(e=>{var t,o;if(!e.sourceHandle||!e.targetHandle)return void es.error("Invalid connection: Missing source or target handle",e);let r=(null==(t=A.getState().connection.fromHandle)?void 0:t.type)==="target";if(!R(e,a,s))return;let l=B(e,a);if((null==(o=l.data)?void 0:o.edgeType)==="standard"){let t=e=>{var t;return(null==(t=e.data)?void 0:t.edgeType)!=="mcp"},o=e=>{var t;return!!(null==(t=e.data)?void 0:t.bidirectional)},l=s.find(n=>t(n)&&n.source===e.source&&n.target===e.target),i=s.find(n=>t(n)&&n.source===e.target&&n.target===e.source),c=e=>{es.info("Merging reverse connection into bidirectional edge ".concat(e.id)),d([{type:"replace",id:e.id,item:{...e,data:{...e.data,bidirectional:!0},markerStart:{type:I.TG.ArrowClosed,width:20,height:20,color:n.palette.text.secondary}}}])};if(r){let e=null!=l?l:i;return e?void(!o(e)&&W(e,a,s)&&c(e)):void es.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(l&&o(l))return;if(i){!o(i)&&W(i,a,s)&&c(i);return}}d([...L(l,s).map(e=>({type:"remove",id:e})),{type:"add",item:l}])},[a,s,d,A,n.palette.text.secondary]);(0,r.useEffect)(()=>{let e=e=>{var t;let{edgeId:n,waypoints:o}=e.detail,r=s.find(e=>e.id===n);if(!r)return;let{waypoint:l,...a}=null!=(t=r.data)?t:{};d([{type:"replace",id:n,item:{...r,data:{...a,waypoints:null!=o?o:void 0}}}])};return document.addEventListener(K.R,e),()=>document.removeEventListener(K.R,e)},[s,d]);let _=(0,r.useCallback)(async e=>{let{nodes:t,edges:n}=e,o=t.filter(e=>"start"!==e.type),r=new Set(o.map(e=>e.id)),l=new Set(t.map(e=>e.id)),a=n.filter(e=>!!(e.selected||r.has(e.source)||r.has(e.target))||!(l.has(e.source)||l.has(e.target)));return(0!==o.length||0!==a.length)&&{nodes:o,edges:a}},[]),G=(0,r.useCallback)(e=>{M(e),p&&p(e)},[p]);(0,r.useEffect)(()=>{let e=e=>{if(!e.detail||!P)return;let{nodeType:t,position:n}=e.detail,o=T.g.createNode(t,n);i(H(o)),f&&f(o)};return document.addEventListener("addNodeFromPalette",e),()=>{document.removeEventListener("addNodeFromPalette",e)}},[P,i,H,f]);let U=(0,r.useCallback)(()=>{if(x.nodeId&&f){let e=Q(x.nodeId,a);e&&f(e)}},[x.nodeId,a,f]),J=(0,r.useCallback)((e,t)=>{e.preventDefault(),f&&f(t)},[f]),Y=(0,r.useCallback)((e,t)=>{let{fromNode:n,fromHandle:o}=t;if(!n||!(null==o?void 0:o.id)||!P)return void es.debug("onConnectEnd: No valid connection start data");if(es.debug("onConnectEnd: Connection ended from node ".concat(n.id,", handle ").concat(o.id)),"target"===o.type&&!F(o.id))return void es.debug("onConnectEnd: Drag from a target handle cannot create a new node");if("subflow"===n.type&&"source"===o.type&&s.some(e=>{let t=e.data;return(null==t?void 0:t.edgeType)!=="mcp"&&(e.source===n.id||e.target===n.id&&!!(null==t?void 0:t.bidirectional))}))return void es.debug("onConnectEnd: Subflow already has an outgoing connection; not offering a new node");if(!e.target.classList.contains("react-flow__pane"))return;let r=e instanceof MouseEvent?e:e.changedTouches[0],l=P.screenToFlowPosition({x:r.clientX,y:r.clientY});es.debug("onConnectEnd: Connection dropped on pane at position (".concat(l.x,", ").concat(l.y,")")),z({open:!0,position:l,sourceNodeId:n.id,sourceNodeType:n.type,sourceHandleId:o.id})},[P,s]),$=(0,r.useCallback)((e,t)=>{es.debug("handleNodeTypeSelection: Selected node type ".concat(e," at position (").concat(t.x,", ").concat(t.y,")"));let n=T.g.createNode(e,t);i(H(n));let{sourceNodeId:o,sourceHandleId:r}=E,l=o?Q(o,a):void 0;if(l&&r){let t=D(e),o={source:l.id,sourceHandle:r,target:n.id,targetHandle:t};if(es.debug("handleNodeTypeSelection: Creating connection from ".concat(o.source," to ").concat(o.target)),R(o,[...a,n],s)){let e=B(o,[...a,n]);d([...L(e,s).map(e=>({type:"remove",id:e})),{type:"add",item:e}]),es.debug("handleNodeTypeSelection: Edge created with id ".concat(e.id))}}z({open:!1,position:null}),f&&f(n)},[E,a,s,H,i,d,f]),V=(0,r.useCallback)(()=>{es.debug("handleCloseNodeSelectionModal: Closing node selection modal"),z({open:!1,position:null})},[]),X=(0,r.useCallback)(()=>{let e=new Set(m.nodes),t=a.filter(t=>e.has(t.id)&&"start"!==t.type);if(0===t.length)return!1;let n=new Set(t.map(e=>e.id)),o=s.filter(e=>n.has(e.source)&&n.has(e.target));return ec({nodes:JSON.parse(JSON.stringify(t)),edges:JSON.parse(JSON.stringify(o))}),es.debug("Copied ".concat(t.length," node(s) and ").concat(o.length," edge(s)")),!0},[m,a,s]),q=(0,r.useCallback)(()=>{let e=ed;if(!e)try{let t=localStorage.getItem(ei);t&&(e=JSON.parse(t))}catch(e){es.warn("Could not read flow clipboard from localStorage",e)}if(!e||!e.nodes||0===e.nodes.length)return void es.debug("Paste requested but clipboard is empty");let t=new Map;e.nodes.forEach(e=>t.set(e.id,(0,N.A)()));let n=e.nodes.map(e=>{var n,o,r,l;return{...e,id:t.get(e.id),position:{x:(null!=(r=null==(n=e.position)?void 0:n.x)?r:0)+40,y:(null!=(l=null==(o=e.position)?void 0:o.y)?l:0)+40},selected:!0,data:{...e.data}}}),o=(e.edges||[]).filter(e=>t.has(e.source)&&t.has(e.target)).map(e=>({...e,id:(0,N.A)(),source:t.get(e.source),target:t.get(e.target),selected:!1}));i([...a.filter(e=>e.selected).map(e=>({type:"select",id:e.id,selected:!1})),...n.map(e=>({type:"add",item:e}))]),o.length>0&&d(o.map(e=>({type:"add",item:e}))),es.info("Pasted ".concat(n.length," node(s) and ").concat(o.length," edge(s)"))},[a,i,d]),et=(0,r.useCallback)(e=>{let t=e.ctrlKey||e.metaKey,n=e.key.toLowerCase();if(t&&"c"===n){X()&&e.preventDefault();return}if(t&&"x"===n){X()&&(e.preventDefault(),C({nodes:m.nodes.map(e=>({id:e})),edges:m.edges.map(e=>({id:e}))}));return}if(t&&"v"===n){e.preventDefault(),q();return}},[X,q,C,m]),en=(0,r.useCallback)(()=>{if(x.nodeId&&!m.nodes.includes(x.nodeId)){let e=a.find(e=>e.id===x.nodeId);e&&"start"!==e.type&&(ec({nodes:JSON.parse(JSON.stringify([e])),edges:[]}),es.debug("Copied right-clicked node to clipboard"));return}X()},[x.nodeId,m,a,X]),eo=(0,r.useMemo)(()=>{if(ed)return!0;try{return!!localStorage.getItem(ei)}catch(e){return!1}},[x.open]),er=(0,r.useMemo)(()=>{if(x.selection){let e=new Set(m.nodes);return a.some(t=>e.has(t.id)&&"start"!==t.type)}if(x.nodeId){let e=a.find(e=>e.id===x.nodeId);return!!e&&"start"!==e.type}return!1},[x.selection,x.nodeId,m,a]);return(0,o.jsxs)(ef,{ref:e=>{t&&("function"==typeof t?t(e):t.current=e),h&&(h.current=e),S.current=e},children:[(0,o.jsxs)(k.Gc,{nodes:a,edges:s,nodeTypes:eu,edgeTypes:ep,defaultEdgeOptions:(0,r.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:n.palette.text.secondary,strokeWidth:2},markerEnd:{type:I.TG.ArrowClosed,width:20,height:20,color:n.palette.text.secondary}}),[n.palette.text.secondary]),connectionLineType:I.Do.SmoothStep,onNodesChange:i,onEdgesChange:d,onConnect:O,onBeforeDelete:_,deleteKeyCode:["Backspace","Delete"],onDrop:c,onDragOver:u,onInit:G,onNodeContextMenu:b,onEdgeContextMenu:y,onPaneContextMenu:j,onSelectionContextMenu:w,onKeyDown:et,onNodeDoubleClick:J,onConnectEnd:Y,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,o.jsx)(el,{}),(0,o.jsx)(ea,{})]}),(0,o.jsx)(Z,{open:x.open,position:x.position,onClose:g,onDelete:v,onEditProperties:U,onCopy:en,onPaste:q,canPaste:eo,canCopy:er,nodeId:x.nodeId,selection:x.selection,edgeId:x.edgeId}),(0,o.jsx)(eh,{open:E.open,position:E.position,onClose:V,onSelectNodeType:$,sourceNodeType:E.sourceNodeType,sourceHandleId:E.sourceHandleId})]})});ex.displayName="Canvas";var em=n(56350),eg=n(77842),ev=n(55930);let eb=(0,S.h)("components/flow/FlowBuilder/NodePalette.tsx"),ey="NodePalette",ej=(0,w.Ay)(C.A)(e=>{let{theme:t}=e;return{padding:t.spacing(2),width:"200px",height:"80vh",display:"flex",flexDirection:"column",gap:t.spacing(2)}}),ew=(0,w.Ay)(C.A,{shouldForwardProp:e=>"nodeType"!==e})(e=>{let{theme:t,nodeType:n}=e;return{padding:t.spacing(1.5),minWidth:"180px",borderRadius:"8px",backgroundColor:t.palette.background.paper,border:"2px solid ".concat("process"===n?t.palette.secondary.main:"finish"===n?t.palette.success.main:"subflow"===n?t.palette.warning.main:t.palette.info.main),boxShadow:t.shadows[2],transition:"all 0.2s ease",cursor:"grab","&:hover":{boxShadow:"0 0 0 1px ".concat("process"===n?t.palette.secondary.main:"finish"===n?t.palette.success.main:"subflow"===n?t.palette.warning.main:t.palette.info.main,", 0 3px 10px rgba(0,0,0,0.1)")},"&:active":{cursor:"grabbing"}}}),eC=(0,w.Ay)(a.default,{shouldForwardProp:e=>"nodeType"!==e})(e=>{let{theme:t,nodeType:n}=e;return{display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:"1px solid ".concat("process"===n?t.palette.secondary.light:"finish"===n?t.palette.success.light:"subflow"===n?t.palette.warning.light:t.palette.info.light),marginBottom:t.spacing(1),paddingBottom:t.spacing(.5)}}),eA=(0,w.Ay)(a.default)({display:"flex",alignItems:"center",gap:"8px"}),eS=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow as a step"}],ek=()=>{eb.debug("".concat(ey,": Entering component")),(0,l.A)();let e=(0,r.useCallback)(e=>{eb.debug("".concat(ey,".onNodeDoubleClick: Double-clicked on ").concat(e," node"));let t=new CustomEvent("addNodeFromPalette",{detail:{nodeType:e,position:{x:250,y:150}}});document.dispatchEvent(t),eb.info("".concat(ey,".onNodeDoubleClick: Dispatched addNodeFromPalette event for ").concat(e," node"))},[]);return eb.debug("".concat(ey,": Rendering component")),(0,o.jsxs)(ej,{elevation:2,children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Node Types"}),(0,o.jsx)(a.default,{display:"flex",flexDirection:"column",gap:2,children:eS.map(t=>(0,o.jsxs)(ew,{nodeType:t.type,elevation:1,draggable:!0,onDragStart:e=>((e,t)=>{eb.debug("".concat(ey,".onDragStart: Entering method with nodeType=").concat(t)),e.dataTransfer.setData("application/reactflow",t),e.dataTransfer.effectAllowed="move";let n=document.createElement("div");n.innerHTML='<div style="padding: 10px; background: white; border: 1px solid #ccc; border-radius: 4px;">'.concat(t," Node</div>"),document.body.appendChild(n),eb.debug("".concat(ey,".onDragStart: Created drag preview element"));try{e.dataTransfer.setDragImage(n,75,25),eb.debug("".concat(ey,".onDragStart: Set drag image with offset (75, 25)"))}catch(e){eb.error("".concat(ey,".onDragStart: Error setting drag image:"),e)}setTimeout(()=>{document.body.removeChild(n),eb.debug("".concat(ey,".onDragStart: Removed drag preview element"))},0),eb.debug("".concat(ey,".onDragStart: Drag operation initialized"))})(e,t.type),onDragEnd:e=>{var n;return n=t.type,void eb.debug("".concat(ey,".onDragEnd: Drag operation ended for nodeType=").concat(n))},onDoubleClick:()=>e(t.type),children:[(0,o.jsx)(eC,{nodeType:t.type,children:(0,o.jsxs)(eA,{children:[(e=>{switch(e){case"process":default:return(0,o.jsx)(em.A,{color:"secondary"});case"finish":return(0,o.jsx)(eg.A,{color:"success"});case"mcp":return(0,o.jsx)(em.A,{color:"info"});case"subflow":return(0,o.jsx)(ev.A,{color:"warning"})}})(t.type),(0,o.jsx)(s.default,{variant:"subtitle2",fontWeight:"bold",children:t.label})]})}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",children:t.description})]},t.type))})]})};var eN=n(28548),eT=n(4474),eP=n(41602),eI=n(73707),eM=n(23820),eF=n(5155),eE=n(60691),eD=n(76808),ez=n(36741),eR=n(61033);function eB(e){var t,n,o;return null!=(o=null!=(n=null==(t=e.data)?void 0:t.type)?n:e.type)?o:"unknown"}function eW(e){var t;return(null==(t=e.data)?void 0:t.label)||e.id}function eL(e){var t;return(null==(t=e.data)?void 0:t.edgeType)==="mcp"}function eH(e){var t,n,o,r,l,a,s,i,d;let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=[],p=Array.isArray(null==e?void 0:e.nodes)?e.nodes:[],h=Array.isArray(null==e?void 0:e.edges)?e.edges:[],f=(e,t,n,o)=>u.push({severity:e,code:t,message:n,nodeId:null==o?void 0:o.id,nodeLabel:o?eW(o):void 0}),x=new Map((null!=(t=c.models)?t:[]).map(e=>[e.id,e])),m=new Map((null!=(n=c.servers)?n:[]).map(e=>[e.name,e])),g=!!c.models,v=!!c.servers,b=p.filter(e=>"start"===eB(e)),y=p.filter(e=>"finish"===eB(e)),j=p.filter(e=>"process"===eB(e)),w=p.filter(e=>"mcp"===eB(e));if(0===b.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(b.length>1)for(let e of b.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",e);for(let e of(0===y.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),j)){let t=null!=(r=null==(o=e.data)?void 0:o.properties)?r:{},n=t.boundModel;if(n){if(g&&!x.has(n)){let n="string"==typeof t.modelName&&t.modelName?' (was "'.concat(t.modelName,'")'):"";f("error","process-model-missing",'Process node "'.concat(eW(e),'" is bound to a model that no longer exists').concat(n,"."),e)}}else f("error","process-missing-model",'Process node "'.concat(eW(e),'" has no model bound.'),e)}for(let e of w){let t=(null!=(a=null==(l=e.data)?void 0:l.properties)?a:{}).boundServer;if(t){if(v&&!m.has(t))f("warning","mcp-server-missing",'MCP node "'.concat(eW(e),'" is bound to server "').concat(t,"\", which isn't in your current MCP server list. It may be offline (e.g. not connected), renamed, or removed — if it was renamed or removed, rebind this node."),e);else if(v){let n=m.get(t);if(n.status&&"connected"!==n.status){let o="disabled"===n.status?"disabled":"not connected (".concat(n.status,")");f("warning","mcp-server-disconnected",'MCP node "'.concat(eW(e),'" is bound to server "').concat(t,'", which is currently ').concat(o,". It will provide tools again once it reconnects."),e)}}}else f("warning","mcp-missing-server",'MCP node "'.concat(eW(e),'" is not bound to a server.'),e);h.some(t=>eL(t)&&(t.source===e.id||t.target===e.id))||f("warning","mcp-node-unconnected",'MCP node "'.concat(eW(e),'" is not connected to any Process node.'),e)}if(b.length>0){let e=function(e){let t=new Map,n=(e,n)=>{t.has(e)||t.set(e,[]),t.get(e).push(n)};for(let t of e){var o;!eL(t)&&(n(t.source,t.target),(null==(o=t.data)?void 0:o.bidirectional)&&n(t.target,t.source))}return t}(h);for(let t of b)(null==(s=e.get(t.id))?void 0:s.length)||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",t);let t=function(e,t){let n=new Set(e),o=[...e];for(;o.length;){var r;let e=o.shift();for(let l of null!=(r=t.get(e))?r:[])n.has(l)||(n.add(l),o.push(l))}return n}(b.map(e=>e.id),e);for(let e of[...j,...y])t.has(e.id)||f("warning","unreachable-node","".concat("finish"===eB(e)?"Finish":"Process",' node "').concat(eW(e),'" is not reachable from the Start node.'),e)}for(let e of p.filter(e=>"subflow"===eB(e))){let t=h.filter(t=>{var n;return!eL(t)&&(t.source===e.id||t.target===e.id&&!!(null==(n=t.data)?void 0:n.bidirectional))});t.length>1&&f("error","subflow-multiple-outgoing",'Subflow node "'.concat(eW(e),'" has ').concat(t.length," outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B)."),e)}for(let e of j){let t=null==(d=e.data)||null==(i=d.properties)?void 0:i.promptTemplate;if("string"!=typeof t||!t)continue;let n=function(e,t,n){let o=new Map(t.map(e=>[e.id,e])),r=new Set;for(let t of n){var l,a;if(!eL(t))continue;let n=null;if(t.source===e?n=t.target:t.target===e&&(n=t.source),!n)continue;let s=o.get(n);if(!s||"mcp"!==eB(s))continue;let i=null==(a=s.data)||null==(l=a.properties)?void 0:l.boundServer;"string"==typeof i&&i&&r.add(i)}return r}(e.id,p,h),o=new Set;for(let r of(0,eR.A$)(t)){if("handoff"===r.server)continue;let t="".concat(r.kind,":").concat(r.server,":").concat(r.name);!o.has(t)&&(o.add(t),n.has(r.server)?"tool"===r.kind&&c.serverTools&&c.serverTools[r.server]&&!c.serverTools[r.server].includes(r.name)&&f("warning","tool-unavailable",'Process node "'.concat(eW(e),'" references tool "').concat(r.name,'" which server "').concat(r.server,'" no longer provides.'),e):f("error","tool-pill-disconnected",'Process node "'.concat(eW(e),'" references ').concat(r.kind,' "').concat(r.name,'" from server "').concat(r.server,'", but it is not connected to that server (the MCP node was removed or the server was renamed).'),e))}}let C=u.filter(e=>"error"===e.severity).length,A=u.length-C;return{issues:u,errorCount:C,warningCount:A,isRunnable:0===C}}var eO=n(43076);let e_=(0,S.h)("components/flow/FlowBuilder/FlowValidationButton"),eG=e=>{var t,n;let{nodes:l,edges:d}=e,[c,u]=(0,r.useState)(!1),[p,h]=(0,r.useState)(!1),[g,v]=(0,r.useState)(null),y=(0,r.useCallback)(async()=>{h(!0);try{var e;let t=null!=(e=await eO.N.tryLoadModels())?e:void 0,n=await P.S.loadServerConfigs(),o=Array.isArray(n)?n.map(e=>({name:e.name,status:e.disabled?"disabled":void 0})):void 0,r=eH({nodes:l,edges:d},{models:t,servers:o});v(r.issues)}catch(e){e_.warn("Flow validation failed to run",e),v([])}finally{h(!1)}},[l,d]),j=(0,r.useCallback)(()=>{u(!0),v(null),y()},[y]),w=(0,r.useCallback)(e=>{e&&(u(!1),document.dispatchEvent(new CustomEvent("editNode",{detail:{nodeId:e}})))},[]),C=null!=(t=null==g?void 0:g.filter(e=>"error"===e.severity).length)?t:0,A=(null!=(n=null==g?void 0:g.length)?n:0)-C;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{variant:"outlined",color:"primary",onClick:j,startIcon:(0,o.jsx)(eF.A,{}),sx:{textTransform:"none"},children:"Check Flow"}),(0,o.jsxs)(f.A,{open:c,onClose:()=>u(!1),maxWidth:"sm",fullWidth:!0,children:[(0,o.jsxs)(x.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)("span",{children:"Flow Check"}),g&&(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,ml:1},children:[C>0&&(0,o.jsx)(eN.A,{size:"small",color:"error",label:"".concat(C," error").concat(1===C?"":"s")}),A>0&&(0,o.jsx)(eN.A,{size:"small",color:"warning",label:"".concat(A," warning").concat(1===A?"":"s")})]})]}),(0,o.jsx)(m.A,{dividers:!0,children:p?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,o.jsx)(eT.default,{size:22}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Checking flow…"})]}):g&&0===g.length?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,justifyContent:"center"},children:[(0,o.jsx)(ez.A,{color:"success"}),(0,o.jsx)(s.default,{children:"No problems found — this flow looks runnable."})]}):(0,o.jsx)(eP.A,{dense:!0,disablePadding:!0,children:(null!=g?g:[]).map((e,t)=>{var n;let r=!!e.nodeId,l=(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(G.A,{sx:{minWidth:36},children:"error"===e.severity?(0,o.jsx)(eE.A,{color:"error",fontSize:"small"}):(0,o.jsx)(eD.A,{color:"warning",fontSize:"small"})}),(0,o.jsx)(U.A,{primary:e.message,secondary:r?"Node: ".concat(null!=(n=e.nodeLabel)?n:e.nodeId," — click to open"):void 0})]});return r?(0,o.jsx)(eI.A,{onClick:()=>w(e.nodeId),alignItems:"flex-start",children:l},t):(0,o.jsx)(eM.Ay,{alignItems:"flex-start",children:l},t)})})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:y,disabled:p,children:"Re-check"}),(0,o.jsx)(i.A,{onClick:()=>u(!1),variant:"contained",children:"Close"})]})]})]})};var eU=n(33077),eJ=n(57813),eY=n(26466),e$=n(77073);function eV(e){let{currentLabel:t,nameIsCustom:n,defaultLabel:o,previousAutoLabel:r,nextAutoLabel:l}=e;return!0===n?t&&t.length>0?t:l:!t||0===t.length||t===o||void 0!==r&&r.length>0&&t===r?l:t}let eX=(0,S.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var eZ=n(9898);let eq=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection"),eK="handoff_to_";function eQ(e,t){let n=e.replace(/\s+/g," ").trim();if(n.length<=t)return n;let o=n.slice(0,t),r=o.lastIndexOf(" ");return"".concat((r>.6*t?o.slice(0,r):o).trimEnd(),"…")}let e0=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),e1=e=>{let{nodeData:t,setNodeData:n}=e;return t?(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Node Configuration"}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:t.label||"",onChange:e=>n(t=>({...t,label:e.target.value,properties:{...null==t?void 0:t.properties,nameIsCustom:!0}})),margin:"normal"}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Description",value:t.description||"",onChange:e=>n({...t,description:e.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"})]}):null};var e2=n(52641),e5=n(43861),e4=n(99944),e6=n(75656),e3=n(18369),e8=n(12857);let e7=e=>{let{isLoadingModels:t,loadError:n,models:r,selectedModelId:l,handleModelSelect:d,isModelBound:c,handleUnbindModel:u}=e;return(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to Model"}),t?(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading models..."}):n?(0,o.jsx)(s.default,{color:"error",children:n}):0===r.length?(0,o.jsx)(s.default,{color:"text.secondary",children:"No models available. Add some in the Model Manager."}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e2.A,{component:"fieldset",fullWidth:!0,children:[(0,o.jsx)(e5.A,{value:l,onChange:e=>d(e.target.value),children:(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:r.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:6,children:(0,o.jsx)(C.A,{elevation:1,sx:{p:2,border:2*(l===e.id),borderColor:"primary.main"},children:(0,o.jsx)(e4.A,{value:e.id,control:(0,o.jsx)(e6.A,{}),label:(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"subtitle2",children:e.displayName||e.name}),e.description&&(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",display:"block",children:e.description}),e.baseUrl&&(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",children:e.baseUrl})]}),sx:{width:"100%",m:0}})})},e.id))})}),(0,o.jsx)(e3.A,{children:l?"This node will use the selected model for processing.":"Select a model to bind this node to."})]}),c&&(0,o.jsx)(a.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,o.jsx)(i.A,{startIcon:(0,o.jsx)(e8.A,{}),onClick:u,color:"primary",variant:"outlined",size:"small",children:"Unbind Model"})})]})]})};var e9=n(66177),te=n(56422),tt=n(29767),tn=n(84578),to=n(76530),tr=n(25541),tl=n(51611),ta=n(89218);let ts=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),ti=e=>{var t,n,l;let{isLoadingServers:d,connectedMcpNodes:p,availableServers:h,onConnectMcpServer:f,serverToolsMap:x,serverStatuses:m,isLoadingTools:g,handleSelectToolServer:b,handleInsertToolBinding:y,selectedToolServerNodeId:w,selectedNodeId:A,isLoadingSelectedServerTools:S,promptBuilderRef:k,handleRetryServer:N,handleRestartServer:T}=e,P=null!=(l=null!=w?w:null==(t=p[0])?void 0:t.nodeId)?l:null,[I,M]=(0,r.useState)({}),[F,E]=(0,r.useState)(null),D=(null!=h?h:[]).filter(e=>!p.some(t=>t.serverName===e.name)),z=!!f&&D.length>0,R=(0,o.jsx)(J.A,{open:!!F,anchorEl:F,onClose:()=>E(null),children:D.map(e=>(0,o.jsxs)(_.A,{onClick:()=>{var t;return t=e.name,void(E(null),null==f||f(t))},children:[(0,o.jsx)(a.default,{sx:{width:8,height:8,borderRadius:"50%",mr:1,bgcolor:"connected"===e.status?"success.main":"text.disabled"}}),e.name]},e.name))}),[B,W]=(0,r.useState)(""),L=e=>{try{let t=p.find(t=>t.nodeId===e);if(!t)return ts.warn("Could not find connected MCP node with ID ".concat(e)),[];let n=t.enabledTools||[];return ts.debug("Enabled tools for node ".concat(e,": ").concat(JSON.stringify(n))),Array.isArray(n)?n:[]}catch(t){return ts.error("Error getting enabled tools for node ".concat(e,":"),t),[]}},H=(e,t,n)=>{try{if(!n||!Array.isArray(n))return ts.warn("Tools array is not available or not an array for server ".concat(t)),[];let o=L(e),r=n;if(o.length>0?r=n.filter(e=>e&&e.name&&o.includes(e.name)):(ts.debug("No tools explicitly enabled for node ".concat(e,", showing none.")),r=[]),B.trim()){let e=B.toLowerCase().trim();r=r.filter(t=>t.name&&t.name.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e)||t.inputSchema&&JSON.stringify(t.inputSchema).toLowerCase().includes(e))}return r}catch(o){return ts.error("Error filtering tools for node ".concat(e," (server ").concat(t,"):"),o),n||[]}},O=e=>{b(e)},G=async(e,t)=>{t.stopPropagation(),ts.debug("Retry button clicked for server: ".concat(e)),M(t=>({...t,[e]:!0}));try{N&&await N(e)}finally{setTimeout(()=>{M(t=>({...t,[e]:!1}))},500)}},U=async(e,t)=>{t.stopPropagation(),ts.debug("Restart button clicked for server: ".concat(e)),M(t=>({...t,[e]:!0}));try{T&&await T(e)}finally{setTimeout(()=>{M(t=>({...t,[e]:!1}))},500)}};(0,r.useEffect)(()=>{p.length>0&&!w&&b(p[0].nodeId)},[p,w,b]);let Y=p.find(e=>e.nodeId===P),$=null==Y?void 0:Y.serverName;return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Connected MCP Servers and Tools"}),d?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading connected MCP nodes..."})]}):0===p.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:z?"Pick a server below — the MCP node is added to the flow and wired up for you.":"Connect MCP nodes to this Process node using the side handles to access their tools."}),z&&(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,o.jsx)(i.A,{variant:"contained",size:"small",startIcon:(0,o.jsx)(j.A,{}),onClick:e=>E(e.currentTarget),children:"Connect MCP Server"})}),R]}):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,o.jsx)(eJ.A,{value:P||(null==(n=p[0])?void 0:n.nodeId)||"",onChange:(e,t)=>O(t),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:p.map(e=>{if(!e||!e.nodeId||!e.serverName)return ts.warn("Skipping invalid MCP node in tabs:",e),null;let t=e.serverName,n=e.nodeId,r=e.status;I[t],g[t];let l=x[t]||[],i=L(n);return H(n,t,l).length,(0,o.jsx)(eY.A,{value:n,label:(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(s.default,{variant:"body2",sx:{color:"connected"===r?"success.main":"error"===r?"error.main":"text.secondary"},children:t}),i.length>0&&(0,o.jsx)(e9.A,{badgeContent:i.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==r?.7:1}},n)})}),z&&(0,o.jsx)(u.A,{title:"Connect another MCP server",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>E(e.currentTarget),sx:{ml:1},children:(0,o.jsx)(j.A,{fontSize:"small"})})}),R]}),Y&&$&&(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,o.jsx)(u.A,{title:"Retry connection for ".concat($),children:(0,o.jsx)("span",{children:(0,o.jsx)(c.A,{size:"small",onClick:e=>G($,e),disabled:I[$]||g[$],children:I[$]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{fontSize:"small"})})})}),"connected"===Y.status&&T&&(0,o.jsx)(u.A,{title:"Restart server ".concat($),children:(0,o.jsx)("span",{children:(0,o.jsx)(c.A,{size:"small",onClick:e=>U($,e),disabled:I[$],sx:{ml:1},children:(0,o.jsx)(tr.A,{fontSize:"small"})})})})]}),(0,o.jsx)(v.A,{placeholder:"Search enabled tools...",variant:"outlined",size:"small",fullWidth:!0,value:B,onChange:e=>W(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:Y&&$&&(()=>{let e=Y.nodeId,t=Y.serverName;if("connected"!==Y.status)return(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsxs)(s.default,{color:"text.secondary",children:["Server '",t,"' is not connected. Connect to view tools."]})},e);if(g[t])return(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,o.jsx)(eT.default,{size:24})},e);let n=x[t]||[],r=H(e,t,n);if(0===r.length){let t=L(e).length;return(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:B.trim()?'No enabled tools match "'.concat(B,'" for this node.'):0===t?"No tools are enabled for this node instance. Enable tools in the MCP Node properties.":"No tools available or enabled for this node instance."})},e)}return(0,o.jsx)(eP.A,{disablePadding:!0,children:r.map(n=>(0,o.jsxs)(tt.A,{variant:"outlined",onClick:()=>{e!==P?(ts.debug("Node tab not selected, selecting node first",{selectedNodeId:e,serverName:t,toolName:n.name}),O(e)):t&&n.name?(ts.debug("Inserting tool binding",{serverName:t,toolName:n.name}),y(t,n.name)):ts.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:t,toolName:n.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:[(0,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(ta.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),n.name]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:n.description||"No description available"}),n.inputSchema&&(e=>e&&e.properties?(0,o.jsxs)(a.default,{sx:{mt:1},children:[(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,o.jsx)(a.default,{sx:{pl:1,mt:.5},children:Object.entries(e.properties).map(t=>{var n;let[r,l]=t;return(0,o.jsxs)(a.default,{sx:{mb:.5},children:[(0,o.jsxs)(s.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[r,(null==(n=e.required)?void 0:n.includes(r))&&(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"text.secondary",children:l.description||l.type||"No description"})]},r)})})]}):null)(n.inputSchema)]})})}),(0,o.jsx)(u.A,{title:"Add ".concat(n.name," from ").concat(t," to prompt"),children:(0,o.jsx)(a.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},n.name))},e)})()})]})]})};var td=n(59323);let tc=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),tu=e=>{let{primary:t,secondary:n,chip:r,onClick:l}=e;return(0,o.jsx)(tt.A,{variant:"outlined",onClick:l,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(td.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),t]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:n})]}),r&&(0,o.jsx)(eN.A,{size:"small",label:r,sx:{ml:1,flexShrink:0}})]})})})},tp=e=>{var t;let{connectedMcpNodes:n,handleInsertResourceBinding:l,promptBuilderRef:i}=e,[d,c]=(0,r.useState)(null),[u,p]=(0,r.useState)([]),[f,x]=(0,r.useState)([]),[m,g]=(0,r.useState)(!1),[b,y]=(0,r.useState)(),[j,w]=(0,r.useState)(""),A=n.find(e=>e.nodeId===d),S=null==A?void 0:A.serverName;(0,r.useEffect)(()=>{n.length>0&&!d&&c(n[0].nodeId)},[n,d]);let k=(0,r.useCallback)(async e=>{g(!0),y(void 0);try{let t=await P.S.listServerResources(e);p(t.resources||[]),x(t.resourceTemplates||[]),y(t.error)}catch(t){tc.warn("Failed to load resources for ".concat(e),t),y(t instanceof Error?t.message:"Failed to load resources")}finally{g(!1)}},[]);(0,r.useEffect)(()=>{S?k(S):(p([]),x([]))},[S,k]);let N=e=>e.toLowerCase().includes(j.toLowerCase().trim()),T=j.trim()?u.filter(e=>N(e.name||"")||N(e.uri)||N(e.description||"")):u,I=j.trim()?f.filter(e=>N(e.name||"")||N(e.uriTemplate)||N(e.description||"")):f,M=e=>{S&&e&&l(S,e)};return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Give this step access to…"}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{mb:1},children:"Pick a resource to insert. Its contents are read and placed into the prompt each time the step runs."}),0===n.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect MCP nodes using the side handles to access their resources."})]}):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsx)(eJ.A,{value:d||(null==(t=n[0])?void 0:t.nodeId)||"",onChange:(e,t)=>c(t),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:n.map(e=>(0,o.jsx)(eY.A,{value:e.nodeId,label:(0,o.jsx)(s.default,{variant:"body2",sx:{color:"connected"===e.status?"success.main":"error"===e.status?"error.main":"text.secondary"},children:e.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==e.status?.7:1}},e.nodeId))}),(0,o.jsx)(v.A,{placeholder:"Search resources…",variant:"outlined",size:"small",fullWidth:!0,value:j,onChange:e=>w(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),b&&(0,o.jsx)(h.A,{severity:"warning",sx:{mb:2},children:b}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:A&&"connected"!==A.status?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsxs)(s.default,{color:"text.secondary",children:["Server '",S,"' is not connected. Connect to view resources."]})}):m?(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,o.jsx)(eT.default,{size:24})}):0===T.length&&0===I.length?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:j.trim()?'No resources match "'.concat(j,'".'):"This server does not publish any resources."})}):(0,o.jsxs)(eP.A,{disablePadding:!0,children:[T.map(e=>(0,o.jsx)(tu,{primary:e.name||e.uri,secondary:e.description||e.uri,chip:e.mimeType,tooltip:"Add ".concat(e.name||e.uri," to prompt"),onClick:()=>M(e.uri)},e.uri)),I.map(e=>(0,o.jsx)(tu,{primary:e.name||e.uriTemplate,secondary:e.description||e.uriTemplate,chip:"template",tooltip:"Add template ".concat(e.uriTemplate," to prompt (fill in variables, e.g. with ${global:VAR})"),onClick:()=>M(e.uriTemplate)},e.uriTemplate))]})})]})]})},th=(0,S.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),tf=e=>{let{handoffTools:t,isLoadingHandoffTools:n,handleInsertToolBinding:l,promptBuilderRef:i}=e,[d,c]=(0,r.useState)(""),p=t.filter(e=>{if(!d.trim())return!0;let t=d.toLowerCase().trim();return e.name&&e.name.toLowerCase().includes(t)||e.description&&e.description.toLowerCase().includes(t)});return(0,o.jsxs)(a.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Agent Handoff Tools"}),n?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading handoff tools..."})]}):0===t.length?(0,o.jsxs)(a.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"text.secondary",align:"center",children:"No handoff tools available for this node."}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:"Connect this Process node to other nodes to enable handoff tools."})]}):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,o.jsx)(v.A,{placeholder:"Search handoff tools...",variant:"outlined",size:"small",fullWidth:!0,value:d,onChange:e=>c(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})}}),(0,o.jsx)(C.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===p.length?(0,o.jsx)(a.default,{sx:{p:2,textAlign:"center"},children:(0,o.jsx)(s.default,{color:"text.secondary",children:d.trim()?'No handoff tools match "'.concat(d,'".'):"No handoff tools available."})}):(0,o.jsx)(eP.A,{disablePadding:!0,children:p.map(e=>(0,o.jsxs)(tt.A,{variant:"outlined",onClick:()=>{e.name?(th.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:e.name}),l("handoff",e.name)):th.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:e.name})},sx:{mb:1,mx:1,mt:1,cursor:"pointer",position:"relative",bgcolor:"rgba(0, 0, 0, 0.04)","&:hover":{boxShadow:1,bgcolor:"rgba(0, 0, 0, 0.08)"}},children:[(0,o.jsx)(tn.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,o.jsxs)(a.default,{sx:{width:"100%"},children:[(0,o.jsxs)(s.default,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(ta.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),e.name]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:e.description||"No description available"}),e.inputSchema&&(e=>e&&e.properties&&0!==Object.keys(e.properties).length?(0,o.jsxs)(a.default,{sx:{mt:1},children:[(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,o.jsx)(a.default,{sx:{pl:1,mt:.5},children:Object.entries(e.properties).map(t=>{var n;let[r,l]=t;return(0,o.jsxs)(a.default,{sx:{mb:.5},children:[(0,o.jsxs)(s.default,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[r,(null==(n=e.required)?void 0:n.includes(r))&&(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,o.jsx)(s.default,{variant:"caption",component:"span",color:"text.secondary",children:l.description||l.type||"No description"}),l.enum&&(0,o.jsx)(a.default,{sx:{pl:2,mt:.5},children:(0,o.jsxs)(s.default,{variant:"caption",color:"text.secondary",children:["Options: ",l.enum.join(", ")]})})]},r)})})]}):(0,o.jsx)(a.default,{sx:{mt:1},children:(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:"No parameters required."})}))(e.inputSchema)]})})}),(0,o.jsx)(u.A,{title:"Add ".concat(e.name," handoff tool to prompt"),children:(0,o.jsx)(a.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},e.name))})})]})]})};var tx=n(9957),tm=n(95480);let tg=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),tv=(0,r.forwardRef)((e,t)=>{let{promptTemplate:n,handlePromptChange:l,excludeModelPrompt:d,setExcludeModelPrompt:c,excludeStartNodePrompt:u,setExcludeStartNodePrompt:p,excludeSystemPrompt:f,setExcludeSystemPrompt:x,isModelBound:m,models:g,nodeData:v,flowId:b}=e,[y,j]=(0,r.useState)(""),[w,A]=(0,r.useState)(!1),[S,k]=(0,r.useState)(null),N=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,()=>({insertText:e=>{N.current&&N.current.insertText(e)},getMode:()=>N.current?N.current.getMode():"raw"}));let T=async()=>{if(tg.debug("fetchRenderedPrompt called with:",{flowId:b,nodeId:null==v?void 0:v.id}),!b||!v||!v.id)return void k("Flow ID or Node ID is missing");A(!0),k(null);try{var e;let t=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:b,nodeId:v.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:d,excludeStartNodePrompt:u,excludeSystemPrompt:f}})}),n=await t.json();if(!t.ok)throw Error(n.error||"Failed to render prompt");tg.debug("Rendered prompt received",{promptLength:null==(e=n.prompt)?void 0:e.length}),j(n.prompt+"\n\n [Messages sent by User]")}catch(e){tg.error("Error fetching rendered prompt",e),k(e instanceof Error?e.message:"An unknown error occurred")}finally{A(!1)}};return(0,r.useEffect)(()=>{N.current&&"preview"===N.current.getMode()&&T()},[n,d,u,f,b,null==v?void 0:v.id]),(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pl:2},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,o.jsx)(s.default,{variant:"h6",children:"Prompt Template"}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:2},children:[(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:d,onChange:e=>c(e.target.checked),color:"primary",size:"small"}),label:"Exclude Model Prompt"}),(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:u,onChange:e=>p(e.target.checked),color:"primary",size:"small"}),label:"Exclude Start Node Prompt"}),(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:f,onChange:e=>x(e.target.checked),color:"primary",size:"small"}),label:"Exclude System Prompt"})]})]}),(0,o.jsxs)(a.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,o.jsx)(s.default,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:"Prompt Rendering Order:"}),(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!u&&(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(s.default,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:"1. Start Node Prompt"}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(from the Start node in this flow)"})]}),!d&&m&&(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[u?"1.":"2."," Model Prompt"]}),(0,o.jsxs)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:["(from the selected model: ",(()=>{var e,t;let n=null==(e=v.properties)?void 0:e.boundModel;if(!n)return"None";let o=g.find(e=>e.id===n);return o?o.displayName||o.name:(null==(t=v.properties)?void 0:t.modelName)||"None"})(),")"]})]}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{fontWeight:"medium"},children:[u||d||!m?u&&(d||!m)?"1.":"2.":"3."," This Node's Prompt"]}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(defined below)"})]}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[(0,o.jsxs)(s.default,{variant:"caption",sx:{fontWeight:"medium"},children:[u||d||!m?u&&(d||!m)?"2.":"3.":"4."," Conversation History"]}),(0,o.jsx)(s.default,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(coming from ChatCompletion endpoint)"})]})]})]}),(0,o.jsx)(a.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 120px)"},children:(0,o.jsx)(tm.A,{ref:N,value:n,onChange:l,label:"",height:"100%",onModeChange:e=>{"preview"===e&&T()},customPreviewRenderer:()=>w?(0,o.jsx)(a.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,o.jsx)(eT.default,{size:40})}):S?(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,o.jsx)(h.A,{severity:"error",sx:{mb:2},action:(0,o.jsx)(i.A,{color:"inherit",size:"small",onClick:T,children:"Retry"}),children:S}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:b?"Check that the flow and node IDs are valid and try again.":"This flow hasn't been saved yet. Save the flow first to enable complete preview."})]}):(0,o.jsxs)(a.default,{sx:{p:2},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:"Complete Rendered Prompt"}),(0,o.jsx)(C.A,{elevation:0,sx:{p:2,overflow:"auto",bgcolor:"rgba(0, 0, 0, 0.02)",border:"1px solid rgba(0, 0, 0, 0.1)",borderRadius:1},children:(0,o.jsx)(a.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:y||"No rendered prompt available. Please check your flow configuration."})})]})})})]})});tv.displayName="PromptTemplateEditor";var tb=n(51221),ty=n(55606);let tj=e=>{let{nodeData:t,handlePropertyChange:n,properties:r}=e;return(0,o.jsx)(o.Fragment,{children:r.length>0&&(0,o.jsxs)(a.default,{sx:{mt:3},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Node Properties"}),r.map(e=>(e=>{var r,l,a;if(!t)return null;let s=null!=(l=null==(r=t.properties)?void 0:r[e.key])?l:"";switch(e.type){case"text":return(0,o.jsx)(v.A,{fullWidth:!0,label:e.label,multiline:e.multiline,rows:e.multiline?4:1,value:s,onChange:t=>n(e.key,t.target.value),margin:"normal",helperText:e.helperText},e.key);case"number":return(0,o.jsx)(v.A,{fullWidth:!0,type:"number",label:e.label,value:s,inputProps:{min:e.min,max:e.max,step:e.step},onChange:t=>{let o=t.target.value;n(e.key,""===o?void 0:Number(o))},margin:"normal",helperText:e.helperText},e.key);case"select":return(0,o.jsxs)(e2.A,{fullWidth:!0,margin:"normal",children:[(0,o.jsx)(tb.A,{children:e.label}),(0,o.jsx)(ty.A,{value:s||"",label:e.label,onChange:t=>n(e.key,t.target.value),children:null==(a=e.options)?void 0:a.map(e=>(0,o.jsx)(_.A,{value:e,children:e},e))})]},e.key);case"boolean":return(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:s||!1,onChange:t=>n(e.key,t.target.checked)}),label:e.label,sx:{my:1}},e.key);default:return null}})(e))]})})},tw=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),tC=e=>{var t;let{open:n,node:l,onClose:d,onSave:u,flowEdges:p=[],flowNodes:h=[],flowId:g,onConnectMcpServer:v}=e;tw.debug("ProcessNodePropertiesModal rendered with:",{node:l,flowId:g});let{nodeData:y,setNodeData:j,handlePropertyChange:w}=(e=>{let[t,n]=(0,r.useState)(null);(0,r.useEffect)(()=>{e&&n({id:e.id,...e.data,properties:{...e.data.properties}})},[e]);let o=(0,r.useCallback)((e,t)=>{n(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)},[]);return{nodeData:t,setNodeData:n,handlePropertyChange:o}})(l),[C,S]=(0,r.useState)(""),[k,N]=(0,r.useState)(!1),[T,I]=(0,r.useState)(!1),[M,F]=(0,r.useState)(!1),[E,D]=(0,r.useState)(!1),[z,R]=(0,r.useState)("server"),{models:B,isLoadingModels:W,loadError:L,handleModelSelect:H,handleUnbindModel:O}=((e,t,n,o,l)=>{var a,s;eX.debug("useModelManagement: Entering hook");let[i,d]=(0,r.useState)([]),[c,u]=(0,r.useState)(!1),[p,h]=(0,r.useState)(null);(0,r.useEffect)(()=>{eX.debug("useModelManagement useEffect: Checking if modal is open",{open:e}),e&&f()},[e]),(0,r.useEffect)(()=>{var e,o;if(0===i.length)return;let r=null==t||null==(e=t.properties)?void 0:e.boundModel;if(!r)return;let l=i.find(e=>e.id===r);l&&l.name&&(null==t||null==(o=t.properties)?void 0:o.modelName)!==l.name&&n(e=>{var t;return e&&(null==(t=e.properties)?void 0:t.modelName)!==l.name?{...e,properties:{...e.properties,modelName:l.name}}:e})},[i,null==t||null==(a=t.properties)?void 0:a.boundModel,null==t||null==(s=t.properties)?void 0:s.modelName,n]);let f=async()=>{eX.debug("loadModels: Entering method"),u(!0),h(null);try{let e=await eO.N.loadModels();d(e)}catch(e){eX.warn("loadModels: Failed to load models:",e),h("Failed to load models")}u(!1)},x=(0,r.useCallback)(e=>{eX.debug("handleModelSelect: Entering method",{modelId:e});let t=i.find(t=>t.id===e);t&&(n(n=>{var o;if(!n)return null;let r=i.find(e=>{var t;return e.id===(null==(t=n.properties)?void 0:t.boundModel)}),l=eV({currentLabel:n.label,nameIsCustom:null==(o=n.properties)?void 0:o.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:r?r.displayName||r.name:void 0,nextAutoLabel:t.displayName||t.name});return{...n,label:l,properties:{...n.properties,boundModel:e,modelName:t.name}}}),l(!0))},[i,n,o,l]);return{models:i,isLoadingModels:c,loadError:p,handleModelSelect:x,handleUnbindModel:(0,r.useCallback)(()=>{eX.debug("handleUnbindModel: Entering method"),n(e=>{if(!e)return null;let{boundModel:t,modelName:n,...o}=e.properties;return{...e,properties:{...o,promptTemplate:o.promptTemplate||""}}}),l(!1)},[n,l])}})(n,y,j,S,N),{connectedMcpNodes:_,allServers:G,isLoadingServers:U,selectedToolServerNodeId:J,serverToolsMap:Y,serverStatuses:$,isLoadingTools:V,handleSelectToolServer:X,isLoadingSelectedServerTools:Z,handleRetryServer:q,handleRestartServer:K}=((e,t,n,o)=>{let l=(0,eZ.v)(),a=l.servers||[],s=l.isLoading||!1,[i,d]=(0,r.useState)({}),[c,u]=(0,r.useState)({}),[p,h]=(0,r.useState)({}),[f,x]=(0,r.useState)(null),[m,g]=(0,r.useState)(!1),v=(0,r.useMemo)(()=>t?((e,t)=>[...new Set(t.filter(t=>{var n,o;return t.source===e&&(null==(n=t.data)?void 0:n.edgeType)==="mcp"||t.target===e&&(null==(o=t.data)?void 0:o.edgeType)==="mcp"}).map(t=>t.source===e?t.target:t.source))])(t.id,n):[],[t,n]),b=(0,r.useMemo)(()=>{if(!t||0===v.length)return[];if(!o||!Array.isArray(o))return eq.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let e=[],t=new Set;return v.forEach(n=>{if(t.has(n))return;let r=o.find(e=>e&&e.id===n);if(!r||!r.data||!r.data.properties)return void eq.warn("Could not find valid MCP node data for ID ".concat(n));let l=r.data.properties.boundServer;if(!l)return void eq.warn("MCP node ".concat(n," is not bound to any server."));let s=a.find(e=>e.name===l),i=(null==s?void 0:s.status)||"unknown",d=r.data.properties.enabledTools||[];e.push({nodeId:n,serverName:l,status:i,enabledTools:Array.isArray(d)?d:[]}),t.add(n)}),eq.debug("Generated connectedMcpNodes:",JSON.stringify(e)),e}catch(e){return eq.error("Error preparing connected MCP nodes:",e),[]}},[t,v,a,o]);(0,r.useEffect)(()=>{if(b&&b.length>0){let e={};b.forEach(t=>{let n=a.find(e=>e.name===t.serverName);e[t.serverName]=(null==n?void 0:n.status)||t.status||"unknown"}),d(e)}},[b,a]),(0,r.useEffect)(()=>{if(e&&b.length>0){let e=Array.from(new Set(b.map(e=>e.serverName)));(async()=>{let t={},n={...c},o=e.filter(e=>{let t=a.find(t=>t.name===e);return(null==t?void 0:t.status)==="connected"&&!c[e]&&!p[e]});0!==o.length&&(o.forEach(e=>{t[e]=!0}),h(e=>({...e,...t})),await Promise.all(o.map(async e=>{try{eq.debug("Loading tools for server: ".concat(e));let t=await P.S.listServerTools(e);if(t.error)eq.warn("Error loading tools for ".concat(e,":"),t.error),n[e]=[];else{let o=t.tools||[];eq.debug("Loaded ".concat(o.length," tools for ").concat(e)),n[e]=o}}catch(t){eq.warn("Failed to load tools for server ".concat(e,":"),t),n[e]=[]}finally{h(t=>({...t,[e]:!1}))}})),u(n))})()}},[e,b,a]);let y=(0,r.useRef)(c);(0,r.useEffect)(()=>{y.current=c},[c]);let j=(0,r.useCallback)(e=>{eq.debug("Selected MCP Node ID: ".concat(e)),x(e);let t=b.find(t=>t.nodeId===e),n=null==t?void 0:t.serverName;!n||y.current[n]||p[n]?g(p[n||""]||!1):(eq.debug("Tools not loaded for server ".concat(n,", loading now.")),g(!0),h(e=>({...e,[n]:!0})),P.S.listServerTools(n).then(e=>{let t=e.tools||[];e.error?eq.warn("Error loading tools for ".concat(n,":"),e.error):eq.debug("Loaded ".concat(t.length," tools for ").concat(n)),u(e=>({...e,[n]:t}))}).catch(e=>{eq.warn("Failed to load tools for server ".concat(n,":"),e),u(e=>({...e,[n]:[]}))}).finally(()=>{g(!1),h(e=>({...e,[n]:!1}))}))},[b,p]),w=(0,r.useRef)(l);return(0,r.useEffect)(()=>{w.current=l},[l]),{connectedMcpNodes:b,allServers:a,isLoadingServers:s,selectedToolServerNodeId:f,serverToolsMap:c,serverStatuses:i,isLoadingTools:p,handleSelectToolServer:j,isLoadingSelectedServerTools:m,handleRetryServer:(0,r.useCallback)(async e=>{eq.debug("Retrying server: ".concat(e)),h(t=>({...t,[e]:!0}));try{await w.current.retryServer(e);let t=await P.S.listServerTools(e);if(t.error)return eq.warn("Error loading tools for ".concat(e," after retry:"),t.error),!1;{let n=t.tools||[];return eq.debug("Loaded ".concat(n.length," tools for ").concat(e," after retry")),u(t=>({...t,[e]:n})),!0}}catch(t){return eq.warn("Failed to retry or load tools for server ".concat(e,":"),t),!1}finally{h(t=>({...t,[e]:!1}))}},[]),handleRestartServer:(0,r.useCallback)(async e=>{eq.debug("Restarting server: ".concat(e)),h(t=>({...t,[e]:!0}));try{await P.S.restartServer(e),await new Promise(e=>setTimeout(e,1e3));let t=await P.S.listServerTools(e);if(t.error)return eq.warn("Error loading tools for ".concat(e," after restart:"),t.error),!1;{let n=t.tools||[];return eq.debug("Loaded ".concat(n.length," tools for ").concat(e," after restart")),u(t=>({...t,[e]:n})),!0}}catch(t){return eq.warn("Failed to restart or load tools for server ".concat(e,":"),t),!1}finally{h(t=>({...t,[e]:!1}))}},[])}})(n,l,p,h),Q=((e,t,n,o)=>{let[l,a]=(0,r.useState)([]),[s,i]=(0,r.useState)(!1),d=(0,r.useMemo)(()=>t?function(e,t){let n=[];for(let l of t){var o,r;!("string"==typeof(null==(o=l.data)?void 0:o.edgeType)&&l.data.edgeType.includes("mcp"))&&(l.source===e?n.push(l.target):l.target===e&&(null==(r=l.data)?void 0:r.bidirectional)&&n.push(l.source))}return[...new Set(n)]}(t.id,n):[],[t,n]);return(0,r.useEffect)(()=>{if(e&&t){i(!0);try{let e=d.map(e=>o.find(t=>t.id===e)).filter(e=>!!e),t=function(e){let t=new Set,n=new Map;for(let o of e){if(n.has(o.id))continue;let e=function(e,t){let n=(e&&e.trim()||t&&t.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return n.length>48&&(n=n.slice(0,48).replace(/_+$/g,"")),n||(n=t&&t.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),n||"node"}(o.label,o.type),r="".concat(eK).concat(e);if(t.has(r)){let n=2;for(;t.has("".concat(eK).concat(e,"_").concat(n));)n++;r="".concat(eK).concat(e,"_").concat(n)}t.add(r),n.set(o.id,r)}return n}(e.map(e=>({id:e.id,label:e.data.label,type:e.type||e.data.type}))),n=e.map(e=>({name:t.get(e.id)||"handoff_to_".concat(e.id),description:function(e){if(e.userDescription&&e.userDescription.trim())return eQ(e.userDescription,1500);let t="Hand off execution to ".concat(e.label," (").concat(e.type,")."),n=[];!function e(t,n,o){let r=" ".repeat(n);if(t.userDescription&&t.userDescription.trim())return void o.push("".concat(r).concat(eQ(t.userDescription,200)));if("subflow"===t.type){var l,a;if(t.subflowMissing)return void o.push("".concat(r,"Runs a subflow (referenced flow not found)."));if(t.subflowDetailsUnavailable){let e=t.subflowName?' "'.concat(t.subflowName,'"'):"";o.push("".concat(r,"Runs a subflow").concat(e," (contents summarised when the flow runs)."));return}if(o.push("".concat(r,'Runs the subflow "').concat(null!=(l=t.subflowName)?l:"unknown",'", which contains:')),t.depthCapReached)return void o.push("".concat(r," (nested subflows omitted — recursion depth limit reached)"));let s=null!=(a=t.children)?a:[];if(0===s.length)return void o.push("".concat(r," (no process or subflow steps)"));for(let t of s.slice(0,10))o.push("".concat(r," - ").concat(t.label,":")),e(t,n+2,o);return void(s.length>10&&o.push("".concat(r," - …and ").concat(s.length-10," more step(s)")))}if(t.modelName&&o.push("".concat(r,"Model: ").concat(t.modelName)),t.promptSummary&&o.push("".concat(r,"Role: ").concat(eQ(t.promptSummary,200))),t.servers&&t.servers.length>0)for(let e of t.servers)if(e.connected&&e.tools&&e.tools.length>0){let t=e.tools.slice(0,10),n=e.tools.length-t.length,l=n>0?", +".concat(n," more"):"";o.push("".concat(r,"Tools (").concat(e.name,"): ").concat(t.join(", ")).concat(l))}else o.push("".concat(r,"Tools (").concat(e.name,"): server not connected"))}(e,0,n);let o=n.join("\n").trim(),r=o?"".concat(t,"\n").concat(o):t;if(r.length<=1500)return r;let l=1500-t.length-2;return l<=0?t:"".concat(t,"\n").concat(eQ(o,l))}(function(e){let t=e.type||e.data.type||"unknown",n=e.data.label||"Unknown Node",o=e.data.description,r=e.data.properties||{},l={label:n,type:t,userDescription:o};if(o&&o.trim())return l;if("subflow"===t)return l.subflowDetailsUnavailable=!0,l;"string"==typeof r.boundModel&&r.boundModel&&(l.modelName=r.boundModel),"string"==typeof r.promptTemplate&&r.promptTemplate.trim()&&(l.promptSummary=r.promptTemplate);let a=Array.isArray(r.mcpNodes)?r.mcpNodes:[],s=[],i=new Set;for(let e of a){var d,c;let t=null==e||null==(d=e.properties)?void 0:d.boundServer;if(!t||i.has(t))continue;i.add(t);let n=Array.isArray(null==e||null==(c=e.properties)?void 0:c.enabledTools)?e.properties.enabledTools:[];s.push({name:t,connected:!0,tools:n})}return s.length>0&&(l.servers=s),l}(e)),inputSchema:{type:"object",properties:{},required:[]}}));a(n),e0.debug("Generated handoff tools",{toolsCount:n.length})}catch(e){e0.error("Error generating handoff tools",e),a([])}finally{i(!1)}}else a([])},[e,t,d,n,o]),{handoffTools:l,isLoadingHandoffTools:s}})(n,l,p,h),ee=(null==Q?void 0:Q.handoffTools)||[],et=(null==Q?void 0:Q.isLoadingHandoffTools)||!1;(0,r.useEffect)(()=>{n&&l&&tw.debug("Handoff tools:",{count:ee.length,tools:ee.map(e=>e.name)})},[n,l,ee]),(0,r.useEffect)(()=>{if(l){var e,t,n,o,r;S((null==(e=l.data.properties)?void 0:e.promptTemplate)||""),(null==(t=l.data.properties)?void 0:t.boundModel)?N(!0):N(!1),I((null==(n=l.data.properties)?void 0:n.excludeModelPrompt)||!1),F((null==(o=l.data.properties)?void 0:o.excludeStartNodePrompt)||!1),D((null==(r=l.data.properties)?void 0:r.excludeSystemPrompt)||!1)}},[l,n]);let en=(0,r.useRef)(null),eo=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"server";if(tw.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:e,toolName:t})),!e||!t)return void tw.warn("Invalid parameters for handleInsertToolBinding:",{serverName:e,toolName:t});let o=(Y[e]||[]).find(e=>e.name===t);null==o||o.description;let r="handoff"===n?(0,eR.X8)("tool","handoff",t):(0,eR.X8)("tool",e,t),l=(!(C.length>0)||C.endsWith(" ")||C.endsWith("\n")?"":" ")+r;en.current?(tw.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:l})),en.current.insertText(l),tw.debug("Tool binding inserted successfully")):tw.warn("promptBuilderRef.current is null, cannot insert text")};if(!l||!y)return null;let er=(null==(t=y.properties)?void 0:t.boundModel)||"";return(0,o.jsxs)(f.A,{open:n,onClose:d,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[y.label||"Process Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:d,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,o.jsxs)(eU.Ay,{container:!0,spacing:2,sx:{flexGrow:1,height:"100%"},children:[(0,o.jsxs)(eU.Ay,{item:!0,xs:6,sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"auto"},children:[(0,o.jsx)(a.default,{sx:{mb:3},children:(0,o.jsx)(e1,{nodeData:y,setNodeData:j})}),(0,o.jsx)(a.default,{sx:{mb:3},children:(0,o.jsx)(e7,{isLoadingModels:W,loadError:L,models:B,selectedModelId:er,handleModelSelect:H,isModelBound:k,handleUnbindModel:O})}),(0,o.jsxs)(a.default,{sx:{mb:3},children:[(0,o.jsx)(a.default,{sx:{borderBottom:1,borderColor:"divider",mb:2},children:(0,o.jsxs)(eJ.A,{value:z,onChange:(e,t)=>R(t),children:[(0,o.jsx)(eY.A,{label:"Server Tools",value:"server"}),(0,o.jsx)(eY.A,{label:"Resources",value:"resources"}),(0,o.jsx)(eY.A,{label:"Agent Tools",value:"agent"})]})}),"server"===z&&(0,o.jsx)(ti,{isLoadingServers:U,connectedMcpNodes:_,availableServers:G,onConnectMcpServer:v,serverStatuses:$,serverToolsMap:Y,isLoadingTools:V,handleInsertToolBinding:eo,selectedToolServerNodeId:J,selectedNodeId:(null==l?void 0:l.id)||null,handleSelectToolServer:X,isLoadingSelectedServerTools:Z,promptBuilderRef:en,handleRetryServer:q,handleRestartServer:K}),"resources"===z&&(0,o.jsx)(tp,{connectedMcpNodes:_,handleInsertResourceBinding:(e,t)=>{if(!e||!t)return void tw.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:e,uri:t});let n=(0,eR.X8)("resource",e,t),o=C.length>0&&!C.endsWith(" ")&&!C.endsWith("\n");en.current?en.current.insertText((o?" ":"")+n):tw.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:en}),"agent"===z&&(0,o.jsx)(tf,{handoffTools:ee,isLoadingHandoffTools:et,handleInsertToolBinding:(e,t)=>eo(e,t,"handoff"),promptBuilderRef:en})]}),(0,o.jsx)(a.default,{children:(0,o.jsx)(tj,{nodeData:y,handlePropertyChange:w,properties:[{key:"maxTurns",label:"Max Turns (override)",type:"number",min:1,helperText:"Optional. Overrides the bound model's Max Turns for this node. Leave empty to inherit the model setting (default 50)."}]})})]}),(0,o.jsx)(eU.Ay,{item:!0,xs:6,sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,o.jsx)(tv,{ref:en,promptTemplate:C,handlePromptChange:e=>{S(e),j(t=>t?{...t,properties:{...t.properties,promptTemplate:e}}:null)},excludeModelPrompt:T,setExcludeModelPrompt:I,excludeStartNodePrompt:M,setExcludeStartNodePrompt:F,excludeSystemPrompt:E,setExcludeSystemPrompt:D,isModelBound:k,models:B,nodeData:y,flowId:g})})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:d,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{if(l&&y){let e={...y,properties:{...y.properties,promptTemplate:C,excludeModelPrompt:T,excludeStartNodePrompt:M,excludeSystemPrompt:E}};u(l.id,e),d()}},variant:"contained",color:"primary",children:"Save Changes"})]})]})};var tA=n(71651),tS=n(94035);let tk=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),tN=e=>{var t,n,l,d,p,h,g,y;let{open:j,node:w,onClose:S,onSave:k}=e,[N,T]=(0,r.useState)(null),{servers:P,isLoading:I,loadError:M,retryServer:F}=(0,eZ.v)(),[E,D]=(0,r.useState)({}),{tools:z,isLoading:R,error:B,loadTools:W}=(0,tS.O)((null==N||null==(t=N.properties)?void 0:t.boundServer)||"");(0,r.useEffect)(()=>{w&&T({...w.data,properties:{...w.data.properties}})},[w,j]);let L=(null==N||null==(n=N.properties)?void 0:n.boundServer)||"";(0,r.useEffect)(()=>{z&&z.length>0&&(e=>{N&&0===(N.properties.enabledTools||[]).length&&e.length>0&&(tk.debug("Enabling all tools by default"),T(t=>t?{...t,properties:{...t.properties,enabledTools:e.map(e=>e.name)}}:null))})(z)},[z]);let H=(e,t)=>{T(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)},O=async(e,t)=>{t&&t.stopPropagation(),tk.debug("Retrying server: ".concat(e)),D(t=>({...t,[e]:!0}));try{return await F(e),e===L&&W(!0),!0}catch(t){return tk.warn("Failed to retry server ".concat(e,": ").concat(t)),!1}finally{setTimeout(()=>{D(t=>({...t,[e]:!1}))},500)}};if(!w||!N)return null;let _=(null==(l=N.properties)?void 0:l.boundServer)||"",J=(null==(d=N.properties)?void 0:d.enabledTools)||[],Y=null==(p=N.properties)?void 0:p.toolTimeout,$=-1===Y;return(0,o.jsxs)(f.A,{open:j,onClose:S,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",height:"80vh",maxHeight:"80vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[N.label||"MCP Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:S,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:N.label||"",onChange:e=>{T(t=>t?{...t,label:e.target.value,properties:{...t.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:"The display name for this node on the canvas",sx:{mb:2}}),(0,o.jsxs)(a.default,{sx:{mb:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Bind to MCP Server"}),I?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading MCP servers..."})]}):M?(0,o.jsx)(s.default,{color:"error",children:M}):0===P.length?(0,o.jsx)(s.default,{color:"text.secondary",children:"No MCP servers available. Add some in the MCP Manager."}):(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)(e2.A,{component:"fieldset",fullWidth:!0,children:[(0,o.jsx)(e5.A,{value:_,onChange:e=>(e=>{tk.debug("Server selected: ".concat(e)),tk.debug("Server selected: ".concat(e)),T(t=>{var n,o;if(!t)return null;let r=eV({currentLabel:t.label,nameIsCustom:null==(n=t.properties)?void 0:n.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:(null==(o=t.properties)?void 0:o.boundServer)||void 0,nextAutoLabel:e});return{...t,label:r,properties:{...t.properties,boundServer:e}}})})(e.target.value),children:(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:P.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:6,children:(0,o.jsx)(C.A,{elevation:1,sx:{p:2,border:2*(_===e.name),borderColor:"primary.main",opacity:"connected"===e.status?1:.6},children:(0,o.jsxs)(a.default,{sx:{display:"flex",width:"100%",alignItems:"flex-start"},children:[(0,o.jsx)(e4.A,{value:e.name,control:(0,o.jsx)(e6.A,{}),label:(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"subtitle2",children:e.name}),(0,o.jsx)(s.default,{variant:"caption",color:"text.secondary",display:"block",children:e.path}),(0,o.jsxs)(s.default,{variant:"caption",color:"connected"===e.status?"success.main":"error"===e.status?"error.main":"text.secondary",children:["Status: ",e.status]})]}),sx:{width:"calc(100% - 40px)",m:0}}),(0,o.jsx)(u.A,{title:"Retry connection",children:(0,o.jsx)(c.A,{size:"small",onClick:t=>O(e.name,t),disabled:E[e.name],sx:{mt:1},children:E[e.name]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{fontSize:"small"})})})]})})},e.name))})}),(0,o.jsx)(e3.A,{children:_?'This node will use the "'.concat(_,'" MCP server for processing.'):"Select an MCP server to bind this node to."})]})})]}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Description",value:N.description||"",onChange:e=>T({...N,description:e.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"}),_&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Tool Call Timeout"}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"How long a single tool call on this server may run before it is aborted. Tools that report progress keep the timeout alive while they work."}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,o.jsx)(v.A,{label:"Timeout (seconds)",type:"number",size:"small",sx:{width:200},value:$?"":null!=Y?Y:"",placeholder:String(300),disabled:$,inputProps:{min:1},onChange:e=>{let t=e.target.value;if(""===t)return void H("toolTimeout",void 0);let n=parseInt(t,10);!isNaN(n)&&n>0&&H("toolTimeout",n)},helperText:$?"No timeout — tool calls run until they finish.":"Empty = default (".concat(300," seconds / 5 minutes).")}),(0,o.jsx)(e4.A,{control:(0,o.jsx)(tx.A,{checked:$,onChange:e=>H("toolTimeout",e.target.checked?-1:void 0)}),label:"No timeout (infinite)"})]})]}),_&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(s.default,{variant:"subtitle1",gutterBottom:!0,children:"Allowed Tools"}),(null==(h=P.find(e=>e.name===_))?void 0:h.status)!=="connected"&&(0,o.jsxs)(a.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,o.jsx)(s.default,{color:"error.dark",children:"Server is disconnected. Tools cannot be fetched. Please retry the connection."}),(0,o.jsx)(i.A,{variant:"outlined",size:"small",color:"primary",startIcon:E[_]?(0,o.jsx)(eT.default,{size:16}):(0,o.jsx)(to.A,{}),onClick:()=>O(_),disabled:E[_],sx:{mt:1},children:"Retry Connection"})]}),R?(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,o.jsx)(eT.default,{size:20}),(0,o.jsx)(s.default,{color:"text.secondary",children:"Loading tools..."})]}):B?(0,o.jsx)(s.default,{color:"error",children:B}):z&&0!==z.length?(0,o.jsxs)(a.default,{sx:{mt:2},children:[(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select which tools this node will have access to. This helps limit the tools available to connected process nodes."}),(0,o.jsx)(eP.A,{children:z.map(e=>(0,o.jsxs)(eM.Ay,{sx:{py:0},children:[(0,o.jsx)(G.A,{sx:{minWidth:42},children:(0,o.jsx)(tx.A,{edge:"start",checked:J.includes(e.name),onChange:()=>(e=>{tk.debug("Tool toggled: ".concat(e)),T(t=>{let n;if(!t)return null;let o=t.properties.enabledTools||[];return n=o.includes(e)?o.filter(t=>t!==e):[...o,e],{...t,properties:{...t.properties,enabledTools:n}}})})(e.name)})}),(0,o.jsx)(U.A,{primary:e.name,secondary:e.description,primaryTypographyProps:{fontWeight:"medium"}})]},e.name))})]}):(0,o.jsx)(s.default,{color:"text.secondary",children:(null==(g=P.find(e=>e.name===_))?void 0:g.status)==="connected"?"No tools available for this MCP server.":"Connect to the server to view available tools."})]}),_&&(0,o.jsxs)(a.default,{sx:{mt:4},children:[(0,o.jsx)(tA.A,{roots:(null==(y=N.properties)?void 0:y.roots)||[],onChange:e=>H("roots",e)}),(0,o.jsxs)(s.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["These folders apply to this node only and are ",(0,o.jsx)("strong",{children:"added to"}),' the workspace folders configured on the "',_,'" server itself. When neither is set, the server sees its own root dir as its workspace folder.']})]})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:S,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{w&&N&&(k(w.id,N),S())},variant:"contained",color:"primary",children:"Save Changes"})]})]})},tT=e=>{let{open:t,node:n,onClose:l,onSave:d}=e,[u,p]=(0,r.useState)(null),[h,g]=(0,r.useState)("");return((0,r.useEffect)(()=>{if(n){var e;p({...n.data,properties:{...n.data.properties}}),g((null==(e=n.data.properties)?void 0:e.promptTemplate)||"")}},[n,t]),n&&u)?(0,o.jsxs)(f.A,{open:t,onClose:l,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[u.label||"Start Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:l,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,o.jsx)(a.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,o.jsx)(tm.A,{value:h,onChange:e=>{g(e),p(t=>t?{...t,properties:{...t.properties,promptTemplate:e}}:null)},label:"",height:"100%"})})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:l,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{if(n&&u){let e={...u,properties:{...u.properties,promptTemplate:h}};d(n.id,e),l()}},variant:"contained",color:"primary",children:"Save Changes"})]})]}):null},tP=e=>{let{open:t,node:n,onClose:l,onSave:d}=e,[u,p]=(0,r.useState)(null);return((0,r.useEffect)(()=>{n&&p({...n.data,properties:{...n.data.properties}})},[n,t]),n&&u)?(0,o.jsxs)(f.A,{open:t,onClose:l,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[u.label||"Finish Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:l,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsx)(m.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,o.jsx)(a.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,o.jsxs)(C.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,o.jsx)(s.default,{variant:"h6",color:"success.main",gutterBottom:!0,children:"Finish Node"}),(0,o.jsx)(s.default,{variant:"body1",color:"text.secondary",children:"This is the end point of your flow. No additional configuration is needed."}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:"Future versions will support output formatting options."})]})})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:l,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{n&&u&&(d(n.id,u),l())},variant:"contained",color:"primary",children:"Save"})]})]}):null};var tI=n(54178),tM=n(26811),tF=n(16757),tE=n(46496);let tD=(0,S.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),tz=e=>{let{selected:t,icon:n,title:r,description:l,onClick:i}=e;return(0,o.jsxs)(a.default,{role:"radio","aria-checked":t,tabIndex:0,onClick:i,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),i())},sx:{flex:1,position:"relative",p:2,borderRadius:2,border:2,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:t?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:e=>"0 0 0 3px ".concat(e.palette.primary.light)}},children:[t&&(0,o.jsx)(ez.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:t?"primary.main":"text.secondary"},children:[n,(0,o.jsx)(s.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:r})]}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",children:l})]})},tR=e=>{var t,n,l,d,u,p;let{open:g,node:y,onClose:j,onSave:w,flowId:C}=e,[S,k]=(0,r.useState)(null),[N,P]=(0,r.useState)([]),[I,M]=(0,r.useState)(!1);(0,r.useEffect)(()=>{y&&k({...y.data,properties:{...y.data.properties}})},[y,g]),(0,r.useEffect)(()=>{if(!g)return;let e=!1;return M(!0),T.g.loadFlows().then(t=>{e||P(t||[])}).catch(t=>{tD.warn("Failed to load flows for subflow picker",t),e||P([])}).finally(()=>{e||M(!1)}),()=>{e=!0}},[g]);let F=(e,t)=>{k(n=>n?{...n,properties:{...n.properties,[e]:t}}:null)};if(!y||!S)return null;let E=N.filter(e=>e.id!==C),D=(null==(t=S.properties)?void 0:t.subflowId)||"",z=!!D&&!N.some(e=>e.id===D);return(0,o.jsxs)(f.A,{open:g,onClose:j,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,o.jsx)(x.A,{component:"div",children:(0,o.jsxs)(a.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsxs)(s.default,{variant:"h6",children:[S.label||"Subflow Node"," Properties"]}),(0,o.jsx)(c.A,{edge:"end",color:"inherit",onClick:j,"aria-label":"close",children:(0,o.jsx)(e$.A,{})})]})}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(m.A,{sx:{p:3},children:[(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"This step runs another flow inside this one — like calling a helper. When it finishes, its answer becomes part of this conversation and the flow continues to the next node."}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Node Label",value:S.label||"",onChange:e=>k({...S,label:e.target.value}),margin:"normal"}),(0,o.jsxs)(e2.A,{fullWidth:!0,margin:"normal",children:[(0,o.jsx)(tb.A,{id:"subflow-select-label",children:"Flow to run"}),(0,o.jsxs)(ty.A,{labelId:"subflow-select-label",label:"Flow to run",value:z?"":D,onChange:e=>F("subflowId",e.target.value),displayEmpty:!0,children:[0===E.length&&(0,o.jsx)(_.A,{value:"",disabled:!0,children:I?"Loading flows…":"No other flows available"}),E.map(e=>(0,o.jsx)(_.A,{value:e.id,children:e.name},e.id))]})]}),z&&(0,o.jsx)(h.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),(0,o.jsx)(v.A,{fullWidth:!0,label:"Input (optional)",value:(null==(n=S.properties)?void 0:n.promptTemplate)||"",onChange:e=>F("promptTemplate",e.target.value),margin:"normal",multiline:!0,rows:3,helperText:"What to send to the subflow. Leave empty to pass this conversation (see below)."}),(0,o.jsx)(s.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"Which messages does the subflow receive?"}),(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mb:1},children:"Only applies when the input above is left empty."}),(0,o.jsxs)(a.default,{role:"radiogroup","aria-label":"Subflow input",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,o.jsx)(tz,{selected:"latest-message"!==((null==(l=S.properties)?void 0:l.inputMode)||"full-history"),onClick:()=>F("inputMode","full-history"),icon:(0,o.jsx)(tF.A,{}),title:"Full conversation",description:"The subflow sees the whole conversation so far. Best for a helper that should continue with all the context."}),(0,o.jsx)(tz,{selected:(null==(d=S.properties)?void 0:d.inputMode)==="latest-message",onClick:()=>F("inputMode","latest-message"),icon:(0,o.jsx)(tE.A,{}),title:"Latest message only",description:"The subflow sees only the most recent message. Best for an orchestrator that hands off one task at a time, so old tasks don't leak in."})]}),(0,o.jsx)(s.default,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What do you see in the chat while the subflow runs?"}),(0,o.jsxs)(a.default,{role:"radiogroup","aria-label":"Subflow output",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,o.jsx)(tz,{selected:"final-only"!==((null==(u=S.properties)?void 0:u.outputMode)||"steps"),onClick:()=>F("outputMode","steps"),icon:(0,o.jsx)(tI.A,{}),title:"Full",description:"You see all of the subflow's messages in the chat, indented under this step — like watching it work."}),(0,o.jsx)(tz,{selected:(null==(p=S.properties)?void 0:p.outputMode)==="final-only",onClick:()=>F("outputMode","final-only"),icon:(0,o.jsx)(tM.A,{}),title:"Condensed",description:"You only see the subflow's final answer as a single message. Its inner steps stay hidden."})]})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:j,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:()=>{y&&S&&(w(y.id,S),j())},variant:"contained",color:"primary",children:"Save"})]})]})};var tB=n(31102),tW=n(18581),tL=n(13179);let tH=(0,S.h)("components/flow/FlowBuilder/index.tsx"),tO=(0,w.Ay)(a.default)(e=>{let{theme:t}=e;return{display:"flex",height:"calc(100vh - 64px)",gap:"16px",padding:"16px",backgroundColor:t.palette.background.default}}),t_=(0,w.Ay)(C.A)(e=>{let{theme:t}=e;return{padding:t.spacing(1),display:"flex",gap:t.spacing(1),borderBottom:"1px solid",borderColor:t.palette.divider,alignItems:"center",marginBottom:t.spacing(1),backgroundColor:t.palette.background.paper,boxShadow:t.shadows[1]}}),tG=(0,w.Ay)(a.default)({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden"}),tU=r.forwardRef((e,t)=>{let{initialFlow:n,onSave:l,onDelete:s,allFlows:d}=e;tH.debug("FlowBuilder rendered with initialFlow:",n);let[u,p]=(0,r.useState)((null==n?void 0:n.nodes)||[]),[h,y]=(0,r.useState)(((null==n?void 0:n.edges)||[]).filter(e=>e.source&&e.target&&e.sourceHandle&&e.targetHandle)),[j,w]=(0,r.useState)((null==n?void 0:n.name)||"NewFlow"),[C,S]=(0,r.useState)(null),[I,M]=(0,r.useState)((null==n?void 0:n.description)||""),[F,E]=(0,r.useState)(!1),[D,z]=(0,r.useState)("none"),[R,W]=(0,r.useState)(""),[L,H]=(0,r.useState)(null),[O,_]=(0,r.useState)(!1),[G,U]=(0,r.useState)(!1),[J,Y]=(0,r.useState)(!1),[$,V]=(0,r.useState)(!1),[X,Z]=(0,r.useState)(!1),[q,K]=(0,r.useState)(null),[Q,ee]=(0,r.useState)([]),[et,en]=(0,r.useState)(-1),[eo,er]=(0,r.useState)(!1),[el,ea]=(0,r.useState)(!1),es=(0,r.useRef)(null),ei=(0,r.useRef)(!1),ed=(0,r.useRef)(!0),ec=(0,r.useCallback)(e=>e.filter(e=>e.source&&e.target&&e.sourceHandle&&e.targetHandle),[]);(0,r.useEffect)(()=>{if(ed.current=!0,n){p(n.nodes||[]);let e=ec(n.edges||[]);e.length!==n.edges.length&&console.warn("Filtered out ".concat(n.edges.length-e.length," invalid edges")),y(e),w(n.name),M(n.description||""),ee([{nodes:n.nodes||[],edges:e}]),en(0)}else{let e=T.g.createStartNode();p([e]),y([]),w("NewFlow"),M(""),ee([{nodes:[e],edges:[]}]),en(0)}},[n]);let eu=e=>JSON.stringify(e,(e,t)=>"selected"===e||"dragging"===e||"measured"===e||"width"===e||"height"===e||"positionAbsolute"===e||"resizing"===e?void 0:t);(0,r.useEffect)(()=>{if(eo)return void er(!1);if(ed.current){ed.current=!1;return}if(ei.current)return;let e={nodes:[...u],edges:[...h]},t=Q.slice(0,et+1);(et<0||eu(e)!==eu(t[et]))&&(ee([...t,e]),en(et+1),ea(!0))},[u,h]),(0,r.useEffect)(()=>{let e=e=>{if(el)return e.preventDefault(),e.returnValue="",""};return window.addEventListener("beforeunload",e),()=>{window.removeEventListener("beforeunload",e)}},[el]);let ep=e=>e.trim()?/^[\w-]+$/.test(e)?(!n||n&&n.name!==e)&&d.some(t=>t.id!==((null==n?void 0:n.id)||"")&&t.name.toLowerCase()===e.toLowerCase())?"A flow with this name already exists":null:"Flow name can only contain letters, numbers, underscores, and dashes":"Flow name cannot be empty",eh=(0,r.useCallback)(()=>{tH.debug('handleSave: Attempting to save flow "'.concat(j,'"'));let e=ep(j);if(e)return tH.warn("handleSave: Invalid flow name - ".concat(e)),S(e),"invalid-name";let t=[...u];if(0===t.length&&(tH.debug("handleSave: No nodes found, adding a default Start node"),p(t=[T.g.createStartNode()])),n&&n.name!==j)return tH.debug('handleSave: Flow name changed from "'.concat(n.name,'" to "').concat(j,'", opening rename dialog')),z("rename"),W(j),E(!0),"rename-dialog";let o={id:(null==n?void 0:n.id)||(0,N.A)(),name:j,description:I,nodes:t,edges:h};return tH.info('handleSave: Saving flow "'.concat(j,'" with ').concat(t.length," nodes and ").concat(h.length," edges")),l(o),ea(!1),"saved"},[j,I,u,h,n,l,d]);r.useImperativeHandle(t,()=>({requestNavigation:e=>{el?(es.current=e,z("unsaved"),E(!0)):e()}}),[el]);let ef=(0,r.useCallback)(()=>{n?(tH.info('handleDelete: Deleting flow "'.concat(n.name,'" (ID: ').concat(n.id,")")),s(n.id)):tH.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[n,s]),em=(0,r.useCallback)((e,t)=>{tH.debug('handleCopyFlow: Copying flow "'.concat(e.name,'" to "').concat(t,'"'));let n={id:(0,N.A)(),name:t,description:e.description,nodes:e.nodes,edges:e.edges};tH.info('handleCopyFlow: Created copy of flow "'.concat(e.name,'" with new name "').concat(t,'" (').concat(e.nodes.length," nodes, ").concat(e.edges.length," edges)")),l(n)},[l]),eg=()=>{let e=es.current;es.current=null,e&&e()},ev=()=>{es.current=null,E(!1),z("none"),W(""),H(null)},eb=()=>{let e=ep(R);if(e)return void H(e);"duplicate"===D?n&&em(n,R):"rename"===D&&(l({id:(null==n?void 0:n.id)||(0,N.A)(),name:R,description:I,nodes:u,edges:h}),ea(!1),eg()),ev()},ey=et>0,ej=et<Q.length-1,ew=(0,r.useCallback)(()=>{if(ey){tH.debug("handleUndo: Performing undo operation, moving from history index ".concat(et," to ").concat(et-1)),er(!0);let e=et-1,t=Q[e];p(t.nodes),y(t.edges),en(e),tH.info("handleUndo: Restored flow state to previous version (".concat(t.nodes.length," nodes, ").concat(t.edges.length," edges)"))}},[Q,et,ey]),eC=(0,r.useCallback)(()=>{if(ej){tH.debug("handleRedo: Performing redo operation, moving from history index ".concat(et," to ").concat(et+1)),er(!0);let e=et+1,t=Q[e];p(t.nodes),y(t.edges),en(e),tH.info("handleRedo: Restored flow state to next version (".concat(t.nodes.length," nodes, ").concat(t.edges.length," edges)"))}},[Q,et,ej]),eA=(0,r.useCallback)(e=>{for(let t of e)"position"===t.type&&(ei.current=!0===t.dragging);p(t=>(0,k._0)(e,t))},[]),eS=(0,r.useCallback)(e=>{tH.debug("onEdgesChange: Processing ".concat(e.length," edge changes")),e.forEach(e=>{"remove"===e.type?tH.info("onEdgesChange: Edge ".concat(e.id," removed")):"select"===e.type&&tH.debug("onEdgesChange: Edge ".concat(e.id," selection changed to ").concat(e.selected))}),y(t=>(0,k.zW)(e,t))},[]),eN=(0,r.useRef)(null),[eT,eP]=(0,r.useState)(null),eI=(0,r.useCallback)((e,t)=>{tH.debug("handleNodeUpdate: Updating node ".concat(e," properties")),p(n=>n.map(n=>n.id===e?(tH.info("handleNodeUpdate: Node ".concat(e," properties updated")),{...n,data:t}):n)),_(!1),U(!1),Y(!1),V(!1),Z(!1),K(null),tH.debug("handleNodeUpdate: Closed property modals")},[]),eM=(0,r.useCallback)(async(e,t)=>{var n;let o=u.find(t=>t.id===e);if(!o)return void tH.warn("handleConnectMcpServer: process node ".concat(e," not found"));let r=[];try{let e=await P.S.listServerTools(t);!e.error&&Array.isArray(e.tools)&&(r=e.tools.map(e=>e.name))}catch(e){tH.warn("handleConnectMcpServer: could not load tools for ".concat(t),e)}let l=h.filter(t=>{var n;return(null==(n=t.data)?void 0:n.edgeType)==="mcp"&&(t.source===e||t.target===e)}).length,a=T.g.createNode("mcp",{x:o.position.x+350,y:o.position.y+120*l});a.data.label=t,a.data.properties={...null!=(n=a.data.properties)?n:{},boundServer:t,enabledTools:r};let s=B({source:e,sourceHandle:"process-right-mcp",target:a.id,targetHandle:"mcp-left"},[...u,a]);p(e=>[...e,a]),y(e=>[...e,s]),tH.info('Connected MCP server "'.concat(t,'" to process node ').concat(e))},[u,h]),eF=(0,r.useCallback)(e=>{tH.debug("Opening properties for node:",e),K(e),"mcp"===e.data.type?U(!0):"start"===e.data.type?Y(!0):"finish"===e.data.type?V(!0):"subflow"===e.data.type?Z(!0):_(!0)},[]),eE=(0,r.useCallback)(e=>{tH.debug("onDrop: Node dropped on canvas"),e.preventDefault();let t=e.dataTransfer.getData("application/reactflow");if(tH.debug("onDrop: Node type from data transfer: ".concat(t)),!t||!eT)return void tH.debug("onDrop: Missing required data - type: ".concat(!!t,", reactFlowInstance: ").concat(!!eT));let n=eT.screenToFlowPosition({x:e.clientX,y:e.clientY});tH.debug("onDrop: Calculated position: (".concat(n.x,", ").concat(n.y,")"));let o=T.g.createNode(t,n);tH.info("onDrop: Created new ".concat(t," node with ID: ").concat(o.id)),p(e=>[...e.map(e=>({...e,selected:!1})),{...o,selected:!0}]),eF(o),tH.debug("onDrop: Opened properties modal for new node: ".concat(o.id))},[eT,eF]),eD=(0,r.useCallback)(e=>{e.preventDefault(),e.dataTransfer.dropEffect="move"},[]),ez=(0,r.useCallback)(e=>{tH.debug("onInit: ReactFlow instance initialized"),eP(e)},[]);return(0,o.jsxs)(tO,{children:[(0,o.jsx)(ek,{}),(0,o.jsx)(k.Ln,{children:(0,o.jsxs)(tG,{children:[(0,o.jsxs)(t_,{elevation:1,children:[(0,o.jsx)(v.A,{size:"small",label:"Flow Name",value:j,onChange:e=>{let t=e.target.value;w(t),S(ep(t))},sx:{minWidth:300},error:!!C,helperText:C}),(0,o.jsx)(v.A,{size:"small",label:"Description",value:I,onChange:e=>{M(e.target.value),ea(!0)},multiline:!0,maxRows:3,sx:{minWidth:300,flex:1},placeholder:"Optional — shown on the flow card"}),(0,o.jsx)(i.A,{variant:"contained",color:"primary",onClick:eh,startIcon:(0,o.jsx)(tB.A,{}),disabled:!!C,children:"Save Flow"}),(0,o.jsx)(eG,{nodes:u,edges:h}),n&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{variant:"outlined",color:"primary",onClick:()=>{z("duplicate"),W("".concat(n.name,"_copy")),E(!0)},children:"Copy Flow"}),(0,o.jsx)(i.A,{variant:"outlined",color:"error",onClick:ef,children:"Delete Flow"})]}),(0,o.jsx)(A.A,{orientation:"vertical",flexItem:!0}),(0,o.jsx)(c.A,{onClick:ew,disabled:!ey,color:"primary",size:"small",children:(0,o.jsx)(tW.A,{})}),(0,o.jsx)(c.A,{onClick:eC,disabled:!ej,color:"primary",size:"small",children:(0,o.jsx)(tL.A,{})}),(0,o.jsx)(a.default,{sx:{flex:1}})]}),(0,o.jsx)(a.default,{sx:{flex:1,position:"relative"},children:(0,o.jsx)(ex,{ref:eN,nodes:u,edges:h,onNodesChange:eA,onEdgesChange:eS,onDrop:eE,onDragOver:eD,onInit:ez,reactFlowWrapper:eN,onEditNode:eF})})]})}),(0,o.jsx)(tC,{open:O,node:q,onClose:()=>_(!1),onSave:eI,flowEdges:h,flowNodes:u,flowId:null==n?void 0:n.id,onConnectMcpServer:e=>{q&&eM(q.id,e)}}),(0,o.jsx)(tN,{open:G,node:q,onClose:()=>U(!1),onSave:eI}),(0,o.jsx)(tT,{open:J,node:q,onClose:()=>Y(!1),onSave:eI}),(0,o.jsx)(tP,{open:$,node:q,onClose:()=>V(!1),onSave:eI}),(0,o.jsx)(tR,{open:X,node:q,onClose:()=>Z(!1),onSave:eI,flowId:null==n?void 0:n.id}),(0,o.jsxs)(f.A,{open:F,onClose:ev,children:[(0,o.jsx)(x.A,{children:"duplicate"===D?"Copy Flow":"rename"===D?"Rename Flow":"Unsaved Changes"}),(0,o.jsx)(m.A,{children:"unsaved"===D?(0,o.jsx)(g.A,{children:"You have unsaved changes in the current flow. What would you like to do?"}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(g.A,{children:"duplicate"===D?"Enter a name for the copied flow:":"You are changing the name of this flow. Do you want to rename it or create a copy with the new name?"}),(0,o.jsx)(v.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:R,onChange:e=>{let t=e.target.value;W(t),H(ep(t))},error:!!L,helperText:L,sx:{mt:2}})]})}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:ev,children:"Cancel"}),"unsaved"===D&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{onClick:()=>{ea(!1),eg(),ev()},color:"error",children:"Discard Changes"}),(0,o.jsx)(i.A,{onClick:()=>{let e=eh();"saved"===e?(eg(),ev()):"invalid-name"===e&&ev()},variant:"contained",color:"primary",children:"Save Changes"})]}),"rename"===D&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(i.A,{onClick:()=>{let e=ep(R);if(e)return void H(e);n&&em(n,R),ev()},children:"Copy"}),(0,o.jsx)(i.A,{onClick:eb,variant:"contained",color:"primary",disabled:!!L,children:"Rename"})]}),"duplicate"===D&&(0,o.jsx)(i.A,{onClick:eb,variant:"contained",color:"primary",disabled:!!L,children:"Copy"})]})]})]})});tU.displayName="FlowBuilder";var tJ=n(60530),tY=n(15712),t$=n(64419),tV=n(98405),tX=n(7302),tZ=n(70822),tq=n(28466),tK=n(3986),tQ=n(94885),t0=n(15686),t1=n(91665),t2=n(8532),t5=n(53062),t4=n(1702),t6=n(20699),t3=n(89296),t8=n(81956);let t7=(0,S.h)("components/Flow/FlowDashboard/FlowCard"),t9=(0,w.Ay)(tt.A,{shouldForwardProp:e=>"selected"!==e})(e=>{let{theme:t,selected:n}=e;return{display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:n?"2px solid ".concat(t.palette.primary.main):"none",boxShadow:n?t.shadows[4]:t.shadows[1],"&:hover":{boxShadow:t.shadows[6],transform:"translateY(-4px)"},"&::before":n?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:t.palette.primary.main}:{}}}),ne=(0,w.Ay)(a.default)(e=>{let{theme:t}=e;return{height:"140px",backgroundColor:(0,t2.X4)(t.palette.background.default,.7),borderRadius:t.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:t.spacing(1),overflow:"hidden",position:"relative"}}),nt=()=>(0,o.jsxs)(tt.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,o.jsx)(a.default,{sx:{p:1},children:(0,o.jsx)(t6.A,{variant:"rectangular",height:140})}),(0,o.jsxs)(tn.A,{sx:{flexGrow:1},children:[(0,o.jsx)(t6.A,{variant:"text",width:"80%",height:30}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,o.jsx)(t6.A,{variant:"rectangular",width:60,height:20}),(0,o.jsx)(t6.A,{variant:"rectangular",width:90,height:20})]})]}),(0,o.jsxs)(t4.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,o.jsx)(t6.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(t6.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(t6.A,{variant:"circular",width:28,height:28})]})]}),nn=e=>{var t,n;let{flow:i,selected:d,onSelect:p,onDelete:h,onCopy:f,onEdit:x,onSetFolder:m,folders:g=[],validation:v}=e;t7.debug("Rendering FlowCard",{flowId:i.id,flowName:i.name});let b=(0,l.A)(),[y,j]=(0,r.useState)(null),w=null!=(t=null==v?void 0:v.errorCount)?t:0,C=null!=(n=null==v?void 0:v.warningCount)?n:0,A=w>0?"error":C>0?"warning":null,S=v?(0,o.jsxs)(a.default,{children:[(0,o.jsx)(s.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:w>0?"".concat(w," problem").concat(1===w?"":"s"," — won't run"):"".concat(C," warning").concat(1===C?"":"s")}),v.issues.slice(0,5).map((e,t)=>(0,o.jsxs)(s.default,{variant:"caption",sx:{display:"block"},children:["• ",e.message]},t)),v.issues.length>5&&(0,o.jsxs)(s.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",v.issues.length-5," more"]})]}):null;return(0,o.jsxs)(t9,{selected:d,children:[A&&(0,o.jsx)(u.A,{title:S,arrow:!0,placement:"top",children:(0,o.jsxs)(a.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===A?b.palette.error.main:b.palette.warning.main,boxShadow:b.shadows[2],pointerEvents:"auto"},children:["error"===A?(0,o.jsx)(eE.A,{sx:{fontSize:16}}):(0,o.jsx)(eD.A,{sx:{fontSize:16}}),(0,o.jsx)(s.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===A?w:C})]})}),(0,o.jsxs)(t5.A,{onClick:()=>p(i.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,o.jsx)(ne,{children:(()=>{if(0===i.nodes.length)return(0,o.jsx)(a.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,o.jsx)(s.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let e=i.nodes.map(e=>{var t,n;return null!=(n=null==(t=e.position)?void 0:t.x)?n:0}),t=i.nodes.map(e=>{var t,n;return null!=(n=null==(t=e.position)?void 0:t.y)?n:0}),n=Math.min(...e),r=Math.min(...t),l=Math.max(...e)+180,d=Math.max(...t)+70,c="".concat(n-40," ").concat(r-40," ").concat(l-n+80," ").concat(d-r+80),u=e=>{var t,n,o,r;return{cx:(null!=(o=null==(t=e.position)?void 0:t.x)?o:0)+90,cy:(null!=(r=null==(n=e.position)?void 0:n.y)?r:0)+35}};return(0,o.jsx)(a.default,{sx:{width:"100%",height:"100%",p:1},children:(0,o.jsxs)("svg",{width:"100%",height:"100%",viewBox:c,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[i.edges.map((e,t)=>{let n=i.nodes.find(t=>t.id===e.source),r=i.nodes.find(t=>t.id===e.target);if(!n||!r)return null;let l=u(n),a=u(r);return(0,o.jsx)("line",{x1:l.cx,y1:l.cy,x2:a.cx,y2:a.cy,stroke:b.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},e.id||t)}),i.nodes.map(e=>{var t,n,r,l,a,s;let i=null!=(l=null==(t=e.position)?void 0:t.x)?l:0,d=null!=(a=null==(n=e.position)?void 0:n.y)?a:0,c=null!=(s=null==(r=e.data)?void 0:r.type)?s:"process",u=(0,O.M6)(c,b);return(0,o.jsxs)("g",{children:[(0,o.jsx)("rect",{x:i,y:d,width:180,height:70,rx:12,fill:u,opacity:.85,stroke:b.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,o.jsx)("text",{x:i+90,y:d+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:c.substring(0,1).toUpperCase()})]},e.id)})]})})})()}),(0,o.jsxs)(tn.A,{sx:{flexGrow:1,pb:0},children:[(0,o.jsx)(s.default,{variant:"h6",component:"div",noWrap:!0,children:i.name}),i.description&&(0,o.jsx)(u.A,{title:i.description,placement:"bottom-start",children:(0,o.jsx)(s.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:i.description})}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,o.jsx)(eN.A,{size:"small",label:"".concat(i.nodes.length," nodes"),color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,o.jsx)(eN.A,{size:"small",label:"".concat(i.edges.length," connections"),color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),(0,o.jsxs)(t4.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[x&&(0,o.jsx)(u.A,{title:"Edit flow metadata",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),x&&x(i.id)},children:(0,o.jsx)(X.A,{fontSize:"small"})})}),f&&(0,o.jsx)(u.A,{title:"Copy flow",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),f&&f(i.id)},children:(0,o.jsx)($.A,{fontSize:"small"})})}),m&&(0,o.jsx)(u.A,{title:i.folder?"Folder: ".concat(i.folder):"Move to folder",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),j(e.currentTarget)},color:i.folder?"primary":"default",children:(0,o.jsx)(t3.A,{fontSize:"small"})})}),(0,o.jsx)(u.A,{title:"Delete flow",children:(0,o.jsx)(c.A,{size:"small",onClick:e=>{e.stopPropagation(),h(i.id)},color:"error",children:(0,o.jsx)(Y.A,{fontSize:"small"})})})]}),m&&(0,o.jsx)(t8.A,{anchorEl:y,open:!!y,currentFolder:i.folder,folders:g,onClose:()=>j(null),onAssign:e=>m(i.id,e)})]})};var no=n(22573),nr=n(38459);let nl=(0,S.h)("components/Flow/FlowDashboard/FlowDashboard");function na(e,t){return e+Math.round(255*t).toString(16).padStart(2,"0")}let ns=e=>{let{flows:t,selectedFlow:n,onSelectFlow:d,onDeleteFlow:u,onCopyFlow:p,onEditFlow:h,onCreateFlow:f,onSetFolder:x,isLoading:m=!1}=e,[g,b]=(0,r.useState)(""),[y,w]=(0,r.useState)("name-asc"),[S,k]=(0,r.useState)("grid"),[N,T]=(0,r.useState)(null),[P,I]=(0,r.useState)("none"),[M,F]=(0,r.useState)(null),[E,D]=(0,r.useState)(new Set),[z,R]=(0,r.useState)({});(0,r.useEffect)(()=>{let e=!1;return(async()=>{let t={};try{let e=await fetch("/api/model");if(e.ok){let n=await e.json();Array.isArray(n)&&(t.models=n)}}catch(e){nl.warn("Could not load models for flow badges",e)}try{let e=await fetch("/api/mcp/servers");if(e.ok){let n=await e.json();Array.isArray(n)&&(t.servers=n.map(e=>({name:e.name,status:e.disabled?"disabled":void 0})))}}catch(e){nl.warn("Could not load servers for flow badges",e)}e||R(t)})(),()=>{e=!0}},[]);let B=(0,r.useMemo)(()=>{let e={};for(let n of t)try{e[n.id]=eH(n,z)}catch(e){nl.warn("Failed to validate flow for badge",{flowId:n.id,error:e})}return e},[t,z]),W=(0,l.A)(),L=(0,tY.A)(W.breakpoints.down("sm")),H=(0,tY.A)(W.breakpoints.down("md")),O=()=>{T(null)},Y=e=>{w(e),O()},$=e=>{I(e),F(null)},V=(0,r.useMemo)(()=>{nl.debug("Filtering and sorting flows",{searchTerm:g,sortOption:y});let e=t;if(""!==g.trim()){let n=g.toLowerCase();e=t.filter(e=>e.name.toLowerCase().includes(n))}return[...e].sort((e,t)=>{switch(y){case"name-asc":return e.name.localeCompare(t.name);case"name-desc":return t.name.localeCompare(e.name);case"most-nodes":return t.nodes.length-e.nodes.length;case"least-nodes":return e.nodes.length-t.nodes.length;case"newest":return t.id.localeCompare(e.id);case"oldest":return e.id.localeCompare(t.id);default:return 0}})},[t,g,y]),X=(0,r.useMemo)(()=>(0,nr.yF)(t,e=>e.folder),[t]),Z=(0,r.useMemo)(()=>"folder"===P?(0,nr.Je)(V,e=>e.folder):"sort"===P?(0,nr.Az)(V,e=>(function(e,t){switch(t){case"name-asc":case"name-desc":return(0,nr.po)(e.name);case"most-nodes":case"least-nodes":var n;return 0===(n=e.nodes.length)?{key:"nodes:0",label:"0 nodes"}:n<=2?{key:"nodes:1-2",label:"1–2 nodes"}:n<=5?{key:"nodes:3-5",label:"3–5 nodes"}:n<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};default:return{key:"all",label:"All flows"}}})(e,y)):[],[P,V,y]),q=e=>(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:e.map(e=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:"compact"===S?12:6,md:"compact"===S?12:3==("compact"===S||L?1:H?2:3)?4:6,children:(0,o.jsx)(nn,{flow:e,selected:n===e.id,onSelect:d,onDelete:u,onCopy:p,onEdit:h,onSetFolder:x,folders:X,validation:B[e.id]})},e.id))});return(0,o.jsxs)(a.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,o.jsx)(C.A,{elevation:1,sx:{mb:2,p:1},children:(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,o.jsx)(v.A,{placeholder:"Search flows...",variant:"outlined",size:"small",fullWidth:!0,value:g,onChange:e=>{b(e.target.value)},InputProps:{startAdornment:(0,o.jsx)(te.A,{position:"start",children:(0,o.jsx)(tl.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,o.jsxs)(a.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",backgroundColor:W.palette.background.default,borderRadius:1,border:"1px solid ".concat(W.palette.divider),overflow:"hidden"},children:[(0,o.jsx)(c.A,{size:"small",onClick:()=>k("grid"),color:"grid"===S?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===S?na(W.palette.primary.main,.1):"transparent"},children:(0,o.jsx)(tZ.A,{fontSize:"small"})}),(0,o.jsx)(c.A,{size:"small",onClick:()=>k("compact"),color:"compact"===S?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===S?na(W.palette.primary.main,.1):"transparent"},children:(0,o.jsx)(tX.A,{fontSize:"small"})})]}),(0,o.jsx)(c.A,{size:"small",onClick:e=>F(e.currentTarget),color:"none"!==P?"primary":"default",sx:{border:"1px solid ".concat(W.palette.divider),backgroundColor:W.palette.background.default},title:"Group cards",children:(0,o.jsx)(tQ.A,{fontSize:"small"})}),(0,o.jsx)(c.A,{size:"small",onClick:e=>{T(e.currentTarget)},sx:{border:"1px solid ".concat(W.palette.divider),backgroundColor:W.palette.background.default},children:(0,o.jsx)(t$.A,{fontSize:"small"})})]})]})}),(0,o.jsxs)(a.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",children:[V.length," of ",t.length," flows",g&&' matching "'.concat(g,'"')]}),(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",children:["Sorted by: ","name-asc"===y?"Name (A-Z)":"name-desc"===y?"Name (Z-A)":"newest"===y?"Newest first":"oldest"===y?"Oldest first":"most-nodes"===y?"Most nodes":"Least nodes"]})]}),(0,o.jsx)(a.default,{sx:{flex:1,overflow:"auto",px:1,pb:2},children:m?(0,o.jsx)(eU.Ay,{container:!0,spacing:2,children:Array(6).fill(0).map((e,t)=>(0,o.jsx)(eU.Ay,{item:!0,xs:12,sm:"compact"===S?12:6,md:"compact"===S?12:4,children:(0,o.jsx)(nt,{})},"skeleton-".concat(t)))}):V.length>0?"none"===P?q(V):Z.map(e=>(0,o.jsx)(no.A,{label:e.label,count:e.items.length,expanded:!E.has(e.key),onToggle:()=>(e=>{D(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})})(e.key),showFolderIcon:"folder"===P,children:q(e.items)},e.key)):(0,o.jsxs)(a.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:W.palette.background.paper,borderRadius:1,border:"1px dashed ".concat(W.palette.divider),height:"100%",minHeight:200},children:[(0,o.jsx)(s.default,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:"No flows found"}),g?(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",align:"center",children:["No flows match your search criteria.",(0,o.jsxs)(a.default,{component:"span",display:"block",mt:1,children:["Try a different search term or ",(0,o.jsx)(i.A,{size:"small",onClick:()=>b(""),children:"clear the search"})]})]}):(0,o.jsxs)(s.default,{variant:"body2",color:"textSecondary",align:"center",children:["Get started by creating your first flow.",f&&(0,o.jsx)(a.default,{component:"span",display:"block",mt:2,children:(0,o.jsx)(i.A,{variant:"contained",color:"primary",startIcon:(0,o.jsx)(j.A,{}),onClick:f,children:"Create New Flow"})})]})]})}),(0,o.jsxs)(J.A,{anchorEl:M,open:!!M,onClose:()=>F(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,o.jsxs)(_.A,{selected:"none"===P,onClick:()=>$("none"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(t0.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"No grouping"})]}),(0,o.jsxs)(_.A,{selected:"folder"===P,onClick:()=>$("folder"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(t1.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"By folder"})]}),(0,o.jsxs)(_.A,{selected:"sort"===P,onClick:()=>$("sort"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tQ.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"By sort setting"})]})]}),(0,o.jsxs)(J.A,{anchorEl:N,open:!!N,onClose:O,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,o.jsxs)(_.A,{onClick:()=>Y("name-asc"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tq.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Name (A-Z)"})]}),(0,o.jsxs)(_.A,{onClick:()=>Y("name-desc"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tq.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,o.jsx)(U.A,{primary:"Name (Z-A)"})]}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(_.A,{onClick:()=>Y("newest"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tK.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Newest first"})]}),(0,o.jsxs)(_.A,{onClick:()=>Y("oldest"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tK.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,o.jsx)(U.A,{primary:"Oldest first"})]}),(0,o.jsx)(A.A,{}),(0,o.jsxs)(_.A,{onClick:()=>Y("most-nodes"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tV.A,{fontSize:"small"})}),(0,o.jsx)(U.A,{primary:"Most nodes"})]}),(0,o.jsxs)(_.A,{onClick:()=>Y("least-nodes"),children:[(0,o.jsx)(G.A,{children:(0,o.jsx)(tV.A,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,o.jsx)(U.A,{primary:"Least nodes"})]})]})]})},ni=(0,S.h)("app/flows/page"),nd=()=>{var e;ni.debug("Rendering FlowsPage"),(0,l.A)();let[t,n]=(0,r.useState)([]),[w,C]=(0,r.useState)(null),[A,S]=(0,r.useState)(!0),[k,P]=(0,r.useState)(!1),I=(0,r.useRef)(null),[M,F]=(0,r.useState)(!1),[E,D]=(0,r.useState)(null),[z,R]=(0,r.useState)(""),[B,W]=(0,r.useState)(null),[L,H]=(0,r.useState)({open:!1,message:"",severity:"info"});(0,r.useEffect)(()=>{ni.info("Loading flows"),(async()=>{S(!0);try{let e=await T.g.loadFlows();ni.debug("Flows loaded successfully",{count:e.length}),n(e),w&&(e.some(e=>e.id===w)||(ni.warn("Previously selected flow no longer exists",{flowId:w}),C(null),P(!1),G("The previously selected flow is no longer available","warning")))}catch(e){ni.error("Error loading flows",e),G("Failed to load flows","error")}finally{S(!1)}})()},[w]);let O=(0,r.useCallback)(e=>{ni.debug("Flow selected",{flowId:e}),C(e),P(!0)},[]);(0,r.useEffect)(()=>{if(!(k&&w))return;let e=e=>{I.current?I.current.requestNavigation(e):e()};return(0,tJ.QO)(e),()=>(0,tJ.bH)(e)},[k,w]);let _=(0,r.useCallback)(()=>{ni.debug("Returning to dashboard");let e=()=>P(!1);I.current?I.current.requestNavigation(e):e()},[]),G=(0,r.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info";ni.debug("Showing snackbar",{message:e,severity:t}),H({open:!0,message:e,severity:t})},[]),U=(0,r.useCallback)(()=>{H(e=>({...e,open:!1}))},[]);(0,r.useEffect)(()=>{if(!L.open||"error"===L.severity)return;let e=setTimeout(()=>{H(e=>({...e,open:!1}))},6e3);return()=>clearTimeout(e)},[L.open,L.message,L.severity]);let J=(0,r.useCallback)(e=>(ni.debug("Validating flow name",{name:e}),e.trim())?/^[\w-]+$/.test(e)?t.some(t=>t.name.toLowerCase()===e.toLowerCase())?(ni.debug("Flow name validation failed: duplicate name"),"A flow with this name already exists"):(ni.debug("Flow name validation passed"),null):(ni.debug("Flow name validation failed: invalid characters"),"Flow name can only contain letters, numbers, underscores, and dashes"):(ni.debug("Flow name validation failed: empty name"),"Flow name cannot be empty"),[t]),Y=async e=>{ni.info("Saving flow",{flowId:e.id,flowName:e.name});try{let o=t.some(t=>t.id===e.id)?await T.g.updateFlow(e):await T.g.addFlow(e);if(!o.success){ni.error("Failed to save flow",{error:o.error}),G(o.error||"Failed to save flow","error");return}ni.debug("Flow saved successfully"),n(t=>{let n=t.findIndex(t=>t.id===e.id);if(!(n>=0))return ni.debug("Adding new flow to state"),[...t,e];{ni.debug("Updating existing flow in state");let o=[...t];return o[n]=e,o}}),C(e.id),G("Flow saved successfully","success")}catch(e){ni.error("Error saving flow",e),G("Failed to save flow","error")}},$=async e=>{ni.info("Deleting flow",{flowId:e});try{await T.g.deleteFlow(e),ni.debug("Flow deleted successfully"),n(t=>t.filter(t=>t.id!==e)),w===e&&(ni.debug("Clearing selected flow as it was deleted"),C(null),P(!1)),G("Flow deleted","success")}catch(e){ni.error("Error deleting flow",e),G("Failed to delete flow","error")}},V=(0,r.useCallback)(async(e,o)=>{ni.info("Setting flow folder",{flowId:e,folder:o});let r=t.find(t=>t.id===e);if(!r)return void ni.warn("Flow to move not found",{flowId:e});let l={...r,folder:o&&o.trim()?o.trim():void 0};try{let t=await T.g.updateFlow(l);if(!t.success)return void G(t.error||"Failed to move flow to folder","error");n(t=>t.map(t=>t.id===e?l:t)),G(l.folder?'Moved to "'.concat(l.folder,'"'):"Removed from folder","success")}catch(e){ni.error("Error setting flow folder",e),G("Failed to move flow to folder","error")}},[t,G]),X=e=>{ni.info("Copying flow",{flowId:e});let n=t.find(t=>t.id===e);n?(ni.debug("Found flow to copy",{flowName:n.name}),D(n),R("".concat(n.name,"_copy")),F(!0)):(ni.warn("Flow to copy not found",{flowId:e}),G("Flow not found","error"))},Z=()=>{ni.debug("Closing copy flow dialog"),F(!1),D(null),R(""),W(null)},q=async()=>{if(ni.info("Confirming flow copy"),!E){ni.warn("No flow to copy"),G("No flow selected to copy","error");return}let e=J(z);if(e){ni.debug("Flow name validation failed",{error:e}),W(e);return}let t=(0,N.A)();ni.debug("Creating new flow from copy",{newId:t,newName:z});let n={id:t,name:z,description:E.description,nodes:E.nodes,edges:E.edges};await Y(n),Z(),ni.debug("Selecting newly copied flow"),C(n.id),P(!0),G('Created a copy named "'.concat(z,'"'),"success")},K=async()=>{ni.info("Creating new flow");let e="NewFlow",n=e,o=1;for(;t.some(e=>e.name===n);)n="".concat(e).concat(o),o++;let r=T.g.createNewFlow(n);await Y(r),P(!0),G("New flow created","success")};return(0,o.jsxs)(a.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,o.jsxs)(a.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",borderBottom:1,borderColor:"divider"},children:[(0,o.jsxs)(a.default,{sx:{display:"flex",alignItems:"center"},children:[k&&w&&(0,o.jsx)(c.A,{color:"primary",onClick:_,sx:{mr:1},children:(0,o.jsx)(y.A,{})}),(0,o.jsx)(a.default,{children:(0,o.jsx)(s.default,{variant:"h5",children:k&&w?"Editing: ".concat((null==(e=t.find(e=>e.id===w))?void 0:e.name)||"Flow"):"Flow Dashboard"})})]}),!k&&(0,o.jsx)(a.default,{sx:{display:"flex",gap:1},children:(0,o.jsx)(u.A,{title:"Create a new flow with a starter template",children:(0,o.jsx)(i.A,{variant:"contained",color:"primary",startIcon:(0,o.jsx)(j.A,{}),onClick:K,"data-tour":"new-flow",children:"New Flow"})})})]}),(0,o.jsx)(p.A,{in:L.open,unmountOnExit:!0,children:(0,o.jsx)(h.A,{severity:L.severity,onClose:U,sx:{borderRadius:0},children:L.message})}),(0,o.jsx)(a.default,{sx:{flex:1,overflow:"hidden"},children:(()=>{if(k&&w){let e=t.find(e=>e.id===w);return e?(0,o.jsx)(d.A,{in:!0,timeout:300,children:(0,o.jsx)(a.default,{sx:{height:"100%"},children:(0,o.jsx)(tU,{ref:I,initialFlow:e,onSave:Y,onDelete:$,allFlows:t},w)})}):(0,o.jsxs)(a.default,{sx:{p:4,textAlign:"center"},children:[(0,o.jsx)(s.default,{variant:"h6",color:"error",children:"Selected flow not found"}),(0,o.jsx)(i.A,{variant:"contained",onClick:_,sx:{mt:2},children:"Back to Dashboard"})]})}return(0,o.jsx)(d.A,{in:!0,timeout:300,children:(0,o.jsx)(a.default,{sx:{height:"100%"},children:(0,o.jsx)(ns,{flows:t,selectedFlow:w,onSelectFlow:O,onDeleteFlow:$,onCopyFlow:X,onCreateFlow:K,onSetFolder:V,isLoading:A})})})})()}),(0,o.jsxs)(f.A,{open:M,onClose:Z,children:[(0,o.jsx)(x.A,{children:"Copy Flow"}),(0,o.jsxs)(m.A,{children:[(0,o.jsx)(g.A,{children:"Enter a name for the copied flow:"}),(0,o.jsx)(v.A,{autoFocus:!0,margin:"dense",label:"Flow Name",type:"text",fullWidth:!0,value:z,onChange:e=>{let t=e.target.value;ni.debug("Flow name changed",{name:t}),R(t),W(J(t))},error:!!B,helperText:B})]}),(0,o.jsxs)(b.A,{children:[(0,o.jsx)(i.A,{onClick:Z,children:"Cancel"}),(0,o.jsx)(i.A,{onClick:q,variant:"contained",color:"primary",disabled:!!B,children:"Copy"})]})]})]})}},60530:(e,t,n)=>{"use strict";n.d(t,{L_:()=>a,QO:()=>r,bH:()=>l});let o=null;function r(e){o=e}function l(e){o===e&&(o=null)}function a(e){return!!o&&(o(e),!0)}},61033:(e,t,n)=>{"use strict";n.d(t,{A$:()=>c,X8:()=>s,YP:()=>u,js:()=>d});let o="_-_-_",r=/^(tool|resource):(.+)$/,l=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function a(e,t){return"".concat(e,"__").concat(t)}function s(e,t,n){return"${".concat(e,":").concat(a(t,n),"}")}function i(e){let t=r.exec(e);if(t){let e=t[1],n=function(e){let t=e.indexOf("__");if(t<=0)return null;let n=e.slice(t+2);return n?{server:e.slice(0,t),name:n}:null}(t[2]);return n?{kind:e,server:n.server,name:n.name}:null}if(e.startsWith(o)){let t=e.split(o);if(3===t.length&&t[1]&&t[2])return{kind:"tool",server:t[1],name:t[2]}}return null}function d(e){return e.startsWith("${")&&e.endsWith("}")?i(e.slice(2,-1)):null}function c(e){let t,n=[];for(l.lastIndex=0;null!==(t=l.exec(e));){let e=i(t[1]);e&&n.push({...e,fullMatch:t[0],index:t.index})}return n}function u(e){return"tool"===e.kind&&"handoff"===e.server?"handoff:".concat(e.name):"".concat(e.kind,":").concat(a(e.server,e.name))}},71075:(e,t,n)=>{Promise.resolve().then(n.bind(n,45993))},95480:(e,t,n)=>{"use strict";n.d(t,{A:()=>T});var o=n(95155),r=n(12115),l=n(87021),a=n(63941),s=n(29985),i=n(80372),d=n(94049),c=n(25635),u=n(3139),p=n(57883),h=n(2300),f=n(89218),x=n(42063),m=n(17897);n(32098);var g=n(61033);let v=(0,l.h)("frontend/components/shared/PromptBuilder"),b=e=>{v.debug("Deserializing markdown to Slate value");let t=e.split("\n").map(e=>({type:"paragraph",children:(e=>{let t=(0,g.A$)(e);if(0===t.length)return[{text:e}];let n=[],o=0;for(let r of t)r.index>o&&n.push({text:e.slice(o,r.index)}),n.push({type:"binding-reference",kind:r.kind,server:r.server,name:r.name,children:[{text:""}]}),o=r.index+r.fullMatch.length;return o<e.length&&n.push({text:e.slice(o)}),n})(e)}));return t.length>0?t:[{type:"paragraph",children:[{text:""}]}]},y=e=>{v.debug("Serializing Slate value to markdown");let t=0,n=e.map(e=>e.children?e.children.map(e=>a.EY.isText(e)?e.text:"binding-reference"===e.type?(t++,(0,g.X8)(e.kind,e.server,e.name)):"").join(""):"").join("\n");return t>0&&v.debug("Serialized ".concat(t," binding references")),n},j=e=>{let{attributes:t,children:n,element:r}=e;return"binding-reference"===r.type?(0,o.jsxs)("span",{...t,className:"tool-reference-wrapper",children:[(0,o.jsx)(()=>{let e=(0,s.Zi)(),t=(e=>"tool"===e.kind&&"handoff"===e.server)(r),n="resource"===r.kind?"resource":t?"handoff":"",l=()=>{let t=s.rL.findPath(e,r);v.debug("Removing binding reference: ".concat(r.kind,":").concat(r.server,":").concat(r.name)),a.gB.removeNodes(e,{at:t})};return(0,o.jsxs)("span",{contentEditable:!1,className:"tool-reference-container ".concat(n),children:[(0,o.jsx)("span",{className:"tool-reference ".concat(n),children:(0,g.YP)(r)}),(0,o.jsx)("span",{className:"tool-reference-delete ".concat(n),role:"button",tabIndex:0,onClick:e=>{e.preventDefault(),e.stopPropagation(),l()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e.stopPropagation(),l())},children:"\xd7"})]})},{}),n," "]}):(0,o.jsx)("p",{...t,children:n})},w=e=>{let{attributes:t,children:n,leaf:r}=e,l=n;return r.bold&&(l=(0,o.jsx)("strong",{children:l})),r.italic&&(l=(0,o.jsx)("em",{children:l})),r.code&&(l=(0,o.jsx)("code",{children:l})),(0,o.jsx)("span",{...t,children:l})},C=e=>{let{server:t,name:n}=e,l="handoff"===t,[a,s]=(0,r.useState)(null),[i,d]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1;return(async()=>{try{var o;d(!0);let r=null==(o=(await m.S.listServerTools(t)).tools)?void 0:o.find(e=>e.name===n);e||s(r||null)}catch(e){v.error("Failed to fetch tool info for ".concat(t,":").concat(n),e)}finally{e||d(!1)}})(),()=>{e=!0}},[t,n]),i)?(0,o.jsx)("span",{className:"tool-reference-preview loading ".concat(l?"handoff":""),children:"tool:".concat(t,"__").concat(n)}):a?(0,o.jsxs)("span",{className:"tool-reference-preview ".concat(l?"handoff":""),children:["[The user is referencing a ",l?"handoff":"tool"," `tool:",t,"__",n,"` (",a.description||"No description",")]"]}):(0,o.jsx)("span",{className:"tool-reference-preview not-found ".concat(l?"handoff":""),children:"tool:".concat(t,"__").concat(n," (Tool not found)")})},A=e=>{let{server:t,name:n}=e,[l,a]=(0,r.useState)(null),[s,i]=(0,r.useState)(!0);return((0,r.useEffect)(()=>{let e=!1;return(async()=>{try{i(!0);let o=await m.S.listServerResources(t),r=[...o.resources||[],...o.resourceTemplates||[]].find(e=>e.uri===n||e.uriTemplate===n);e||a((null==r?void 0:r.description)||(null==r?void 0:r.name)||null)}catch(e){v.error("Failed to fetch resource info for ".concat(t,":").concat(n),e)}finally{e||i(!1)}})(),()=>{e=!0}},[t,n]),s)?(0,o.jsx)("span",{className:"tool-reference-preview loading resource",children:"resource:".concat(t,"__").concat(n)}):(0,o.jsxs)("span",{className:"tool-reference-preview resource",children:["[The contents of resource `",n,"` from `",t,"`",l?" (".concat(l,")"):""," will be inserted here]"]})},S=e=>{let{binding:t}=e;return"resource"===t.kind?(0,o.jsx)(A,{server:t.server,name:t.name}):(0,o.jsx)(C,{server:t.server,name:t.name})},k=e=>{let{value:t}=e;v.debug("Rendering preview");let n=[],r=0;for(let e of(0,g.A$)(t))e.index>r&&n.push({type:"text",value:t.slice(r,e.index)}),n.push({type:"binding",binding:e,key:e.index}),r=e.index+e.fullMatch.length;r<t.length&&n.push({type:"text",value:t.slice(r)});let l=[],a=[],s=()=>{l.push((0,o.jsx)("p",{children:a},"p-".concat(l.length))),a=[]};for(let e of n)if("text"===e.type){let t=e.value.split("\n");for(let e=0;e<t.length;e++)a.push(t[e]),e<t.length-1&&s()}else a.push((0,o.jsx)(S,{binding:e.binding},"binding-".concat(e.key)));return a.length>0&&s(),(0,o.jsx)("div",{className:"preview-content",children:l})},N=(0,r.forwardRef)((e,t)=>{let{value:n,onChange:l,label:m="Prompt Builder",height:C=300,onModeChange:A,customPreviewRenderer:S}=e;v.info("PromptBuilder initialized");let N=(0,r.useMemo)(()=>{let e=(0,i.$k)((0,s.o$)((0,a.ie)())),{isInline:t,isVoid:n}=e;return e.isInline=e=>"binding-reference"===e.type||t(e),e.isVoid=e=>"binding-reference"===e.type||n(e),e},[]),[T,P]=(0,r.useState)("raw"),[I,M]=(0,r.useState)(()=>b(n||"")),F=(0,r.useRef)(!1),[,E]=(0,r.useState)(0);(0,r.useImperativeHandle)(t,()=>({insertText:e=>{v.info("insertText called with text length: ".concat(e.length));let t=(0,g.js)(e);if(t){v.info("Inserting ".concat(t.kind," reference: ").concat(t.server,":").concat(t.name));let e={type:"binding-reference",kind:t.kind,server:t.server,name:t.name,children:[{text:""}]};N.selection||a.gB.select(N,a.KE.end(N,[])),a.gB.insertNodes(N,e),a.gB.move(N),E(e=>e+1),M([...N.children])}else N.selection||a.gB.select(N,a.KE.end(N,[])),a.gB.insertText(N,e);l(y(N.children)),v.info("insertText completed successfully")},getMode:()=>T})),(0,r.useEffect)(()=>{y(I)!==y(b(n||""))&&(v.debug("External value change detected"),F.current=!0,M(b(n||"")))},[n,I]);let D=(0,r.useCallback)(e=>{if(F.current){F.current=!1;return}M(e),l(y(e))},[l]);return(0,o.jsxs)(d.default,{sx:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:[m&&(0,o.jsx)(c.default,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium",mb:1},children:m}),(0,o.jsx)(d.default,{sx:{mb:1},children:(0,o.jsxs)(u.A,{value:T,exclusive:!0,onChange:(e,t)=>{null!==t&&(v.info("Mode changed from ".concat(T," to ").concat(t)),P(t),A&&A(t))},size:"small",children:[(0,o.jsxs)(p.A,{value:"raw",children:[(0,o.jsx)(f.A,{fontSize:"small",sx:{mr:.5}}),"Raw"]}),(0,o.jsxs)(p.A,{value:"preview",children:[(0,o.jsx)(x.A,{fontSize:"small",sx:{mr:.5}}),"Preview"]})]})}),(0,o.jsx)(h.A,{elevation:0,sx:{border:"1px solid rgba(0, 0, 0, 0.12)",borderRadius:1,overflow:"hidden",flexGrow:1,display:"flex",flexDirection:"column"},children:"raw"===T?(0,o.jsx)(d.default,{className:"slate-editor-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto",p:2},children:(0,o.jsx)(s.A,{editor:N,initialValue:I,onChange:D,children:(0,o.jsx)(s.Fo,{className:"slate-editor",renderElement:j,renderLeaf:w,placeholder:"Write your prompt here..."})})}):S?(0,o.jsx)(d.default,{className:"custom-preview-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto"},children:S()}):(0,o.jsx)(d.default,{className:"preview-container",sx:{height:"number"==typeof C?C:"100%",overflow:"auto",p:2},children:(0,o.jsx)(k,{value:n})})})]})});N.displayName="PromptBuilder";let T=N}},e=>{e.O(0,[1137,3862,7926,2678,4754,9244,8548,690,9562,2003,488,3272,5648,7396,3077,7458,1424,2624,5961,4205,8890,2380,687,8862,8441,1255,7358],()=>e(e.s=71075)),_N_E=e.O()}]);
|