flujo-ai 3.40.0 → 3.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +400 -384
- package/.next/app-path-routes-manifest.json +53 -53
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +33 -33
- package/.next/react-loadable-manifest.json +9 -9
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers/page.js +1 -1
- package/.next/server/app/automation/triggers/page.js.nft.json +1 -1
- package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers.html +1 -1
- package/.next/server/app/automation/triggers.rsc +4 -4
- package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/waves.html +1 -1
- package/.next/server/app/automation/waves.rsc +4 -4
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +4 -4
- package/.next/server/app/docs/page.js +3 -3
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +4 -4
- package/.next/server/app/executions/page.js +1 -1
- package/.next/server/app/executions/page.js.nft.json +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +4 -4
- package/.next/server/app/flows/page.js +5 -3
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +4 -4
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/mcp/page.js +73 -44
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +4 -4
- package/.next/server/app/models/page.js +7 -7
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +1 -1
- package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages.html +1 -1
- package/.next/server/app/packages.rsc +4 -4
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +4 -4
- package/.next/server/app/statistics/page.js +2 -2
- package/.next/server/app/statistics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/statistics.html +1 -1
- package/.next/server/app/statistics.rsc +4 -4
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +4 -4
- package/.next/server/app-paths-manifest.json +53 -53
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/1403.js +2 -2
- package/.next/server/chunks/1539.js +1 -1
- package/.next/server/chunks/2069.js +1 -1
- package/.next/server/chunks/2372.js +1 -1
- package/.next/server/chunks/2828.js +2 -2
- package/.next/server/chunks/3422.js +1 -0
- package/.next/server/chunks/3945.js +3 -3
- package/.next/server/chunks/519.js +2 -2
- package/.next/server/chunks/5444.js +2 -2
- package/.next/server/chunks/5750.js +1 -1
- package/.next/server/chunks/5918.js +10 -10
- package/.next/server/chunks/6226.js +2 -2
- package/.next/server/chunks/9088.js +2 -2
- package/.next/server/chunks/9490.js +5 -0
- package/.next/server/chunks/9543.js +3 -3
- package/.next/server/chunks/9624.js +8 -8
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1161-19176c3e7c655121.js → 1161-563a8028f59f00de.js} +1 -1
- package/.next/static/chunks/1521-9ad145dcb8e3abfc.js +1 -0
- package/.next/static/chunks/1576.06797b29a19fa26c.js +1 -0
- package/.next/static/chunks/{4386-e9621d3c94969a68.js → 2005-f9d38c39f10c321f.js} +1 -1
- package/.next/static/chunks/2493-da85c47ef972c066.js +1 -0
- package/.next/static/chunks/361.c88d43436e974006.js +1 -0
- package/.next/static/chunks/3731-c18f48522b159d7f.js +1 -0
- package/.next/static/chunks/3781.5086bce03aa281f7.js +1 -0
- package/.next/static/chunks/3969-15a32253b112652c.js +1 -0
- package/.next/static/chunks/4167.2ce97ca450815df1.js +1 -0
- package/.next/static/chunks/4814-52b7254ab573a455.js +1 -0
- package/.next/static/chunks/4965.d401547984d71b7a.js +1 -0
- package/.next/static/chunks/5148-9174ba300221fd1b.js +1 -0
- package/.next/static/chunks/5417-fb7d3760cc288ab1.js +1 -0
- package/.next/static/chunks/5967-34735763d1b03ccc.js +1 -0
- package/.next/static/chunks/7260-743e4b0cc4211dcb.js +1 -0
- package/.next/static/chunks/7711-7323dabe7dc02311.js +1 -0
- package/.next/static/chunks/8124-f99060fe1dfc119e.js +1 -0
- package/.next/static/chunks/8135-7fe07a34a8c49967.js +1 -0
- package/.next/static/chunks/8529.6187e01de8e9a692.js +1 -0
- package/.next/static/chunks/9136-e9ee57cc581ddd50.js +1 -0
- package/.next/static/chunks/9140.9180b569c4b26168.js +1 -0
- package/.next/static/chunks/9195-6a18a5867bb76c64.js +1 -0
- package/.next/static/chunks/app/automation/triggers/{page-594a6294c58344bf.js → page-34b9a8a2e6f28c2f.js} +1 -1
- package/.next/static/chunks/app/automation/waves/{page-ce2fef4996cad8e6.js → page-fd4929ea308183b2.js} +1 -1
- package/.next/static/chunks/app/chat/page-fb8a33db7628ecd0.js +1 -0
- package/.next/static/chunks/app/docs/page-3e21583b1cd5d7ca.js +1 -0
- package/.next/static/chunks/app/executions/{page-fcc848de86714386.js → page-56ecca56c17c05d7.js} +1 -1
- package/.next/static/chunks/app/flows/page-8c1a656197b15894.js +1 -0
- package/.next/static/chunks/app/layout-6e2756704ddc9f39.js +1 -0
- package/.next/static/chunks/app/mcp/page-4c4390354fdd94c8.js +1 -0
- package/.next/static/chunks/app/models/error-ea477f0ad52f4dcb.js +1 -0
- package/.next/static/chunks/app/models/page-e237ac64a0f62c3d.js +1 -0
- package/.next/static/chunks/app/packages/page-8680e4bea6b7ea45.js +1 -0
- package/.next/static/chunks/app/page-6dca06b6b7667181.js +1 -0
- package/.next/static/chunks/app/settings/page-a5f7fedcbf9e3a7f.js +1 -0
- package/.next/static/chunks/app/statistics/page-f9f9627d1c1ff963.js +1 -0
- package/.next/static/chunks/app/waves/{page-5b53af3eb9409414.js → page-7529febc48eb473d.js} +1 -1
- package/.next/static/chunks/{webpack-9fbd3587b9ef4dca.js → webpack-f3df493faa0bd612.js} +1 -1
- package/.next/static/css/{400b1b927c3ffaf6.css → 9f9b7f1374ac2d01.css} +1 -1
- package/.next/trace +11 -11
- package/README.md +1 -1
- package/mcp-servers/bash/package.json +1 -1
- package/mcp-servers/browser/package.json +1 -1
- package/mcp-servers/filesystem/package.json +1 -1
- package/mcp-servers/flujo/package.json +1 -1
- package/package.json +5 -5
- package/.next/server/chunks/7508.js +0 -5
- package/.next/server/chunks/8598.js +0 -1
- package/.next/static/chunks/1521-1c98c9a56726e053.js +0 -1
- package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +0 -1
- package/.next/static/chunks/2005.300528b5119c2d38.js +0 -1
- package/.next/static/chunks/2499-92cd97ce4993999f.js +0 -1
- package/.next/static/chunks/361.51d642c530c84295.js +0 -1
- package/.next/static/chunks/3731-64070760ae44448f.js +0 -1
- package/.next/static/chunks/4814-31eb5f3b10c651c1.js +0 -1
- package/.next/static/chunks/4965.39e24b54c3c6ca58.js +0 -1
- package/.next/static/chunks/5967-59fde8c214c9ca9f.js +0 -1
- package/.next/static/chunks/6417.70056fe81ca21682.js +0 -1
- package/.next/static/chunks/7711-4b017720ec49c96d.js +0 -1
- package/.next/static/chunks/8124-94140ee1dd8ed87c.js +0 -1
- package/.next/static/chunks/8135-5b975b9014f8920b.js +0 -1
- package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +0 -1
- package/.next/static/chunks/9001-4c27a608feddb878.js +0 -1
- package/.next/static/chunks/9136-9c415453ec02519c.js +0 -1
- package/.next/static/chunks/9140.6502327a2c098d33.js +0 -1
- package/.next/static/chunks/9195-3c9c4300e7505d9e.js +0 -1
- package/.next/static/chunks/9524-b9d2c7e4426edd07.js +0 -1
- package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +0 -1
- package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +0 -1
- package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +0 -1
- package/.next/static/chunks/app/layout-a6ca531683a518a7.js +0 -1
- package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +0 -1
- package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +0 -1
- package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +0 -1
- package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +0 -1
- package/.next/static/chunks/app/page-04189aa1b1318c2d.js +0 -1
- package/.next/static/chunks/app/settings/page-906c229c87011ead.js +0 -1
- package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +0 -1
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_buildManifest.js +0 -0
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
(()=>{var a={};a.id=3080,a.ids=[3080],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},9604:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z"}),"Code")},10057:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Moe\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\flows\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx","default")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},14570:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"}),"DeleteOutline")},15699:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m18.04 7.99-.63-1.4-1.4-.63c-.39-.18-.39-.73 0-.91l1.4-.63.63-1.4c.18-.39.73-.39.91 0l.63 1.4 1.4.63c.39.18.39.73 0 .91l-1.4.63-.63 1.4c-.17.39-.73.39-.91 0m3.24 4.73-.32-.72c-.18-.39-.73-.39-.91 0l-.32.72-.73.32c-.39.18-.39.73 0 .91l.72.32.32.73c.18.39.73.39.91 0l.32-.72.73-.32c.39-.18.39-.73 0-.91zm-5.04 1.65 1.23.93c.4.3.51.86.26 1.3l-1.62 2.8c-.25.44-.79.62-1.25.42l-1.43-.6c-.2.13-.42.26-.64.37l-.19 1.54c-.06.5-.49.88-.99.88H8.38c-.5 0-.93-.38-.99-.88l-.19-1.54c-.22-.11-.43-.23-.64-.37l-1.43.6c-.46.2-1 .02-1.25-.42l-1.62-2.8c-.25-.44-.14-.99.26-1.3l1.23-.93V14c0-.12 0-.25.01-.37l-1.23-.93c-.4-.3-.51-.86-.26-1.3l1.62-2.8c.25-.44.79-.62 1.25-.42l1.43.6c.2-.13.42-.26.64-.37l.19-1.54c.05-.49.48-.87.98-.87h3.23c.5 0 .93.38.99.88l.19 1.54c.22.11.43.23.64.37l1.43-.6c.46-.2 1-.02 1.25.42l1.62 2.8c.25.44.14.99-.26 1.3l-1.23.93c.01.12.01.24.01.37s0 .24-.01.36M13 14c0-1.66-1.34-3-3-3s-3 1.34-3 3 1.34 3 3 3 3-1.34 3-3"}),"SettingsSuggestRounded")},16084:(a,b,c)=>{Promise.resolve().then(c.bind(c,91585))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},22813:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility")},26168:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M9 16.17 5.53 12.7a.996.996 0 0 0-1.41 0c-.39.39-.39 1.02 0 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71c.39-.39.39-1.02 0-1.41a.996.996 0 0 0-1.41 0z"}),"CheckRounded")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},29777:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5c-1.11 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1M14 4c0 .55.45 1 1 1h2.59l-9.13 9.13c-.39.39-.39 1.02 0 1.41s1.02.39 1.41 0L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1"}),"OpenInNewRounded")},29900:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M18.3 5.71a.996.996 0 0 0-1.41 0L12 10.59 7.11 5.7a.996.996 0 0 0-1.41 0c-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41s1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0s.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4"}),"CloseRounded")},33873:a=>{"use strict";a.exports=require("path")},36647:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91"}),"RestartAlt")},40052:(a,b,c)=>{Promise.resolve().then(c.bind(c,10057))},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41637:(a,b,c)=>{"use strict";c.d(b,{default:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M14 9h-4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1m-1 4h-2v-2h2zm8-3c0-.55-.45-1-1-1h-1V7c0-1.1-.9-2-2-2h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v1h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v1H7c-1.1 0-2 .9-2 2v2H4c-.55 0-1 .45-1 1s.45 1 1 1h1v2H4c-.55 0-1 .45-1 1s.45 1 1 1h1v2c0 1.1.9 2 2 2h2v1c0 .55.45 1 1 1s1-.45 1-1v-1h2v1c0 .55.45 1 1 1s1-.45 1-1v-1h2c1.1 0 2-.9 2-2v-2h1c.55 0 1-.45 1-1s-.45-1-1-1h-1v-2h1c.55 0 1-.45 1-1m-5 7H8c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1h8c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1"}),"MemoryRounded")},49248:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2M9.29 16.29 5.7 12.7a.996.996 0 0 1 0-1.41c.39-.39 1.02-.39 1.41 0L10 14.17l6.88-6.88c.39-.39 1.02-.39 1.41 0s.39 1.02 0 1.41l-7.59 7.59c-.38.39-1.02.39-1.41 0"}),"CheckCircleRounded")},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},69266:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 18c0 .55.45 1 1 1h5v-2H4c-.55 0-1 .45-1 1M3 6c0 .55.45 1 1 1h9V5H4c-.55 0-1 .45-1 1m10 14v-1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7v-1c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1M7 10v1H4c-.55 0-1 .45-1 1s.45 1 1 1h3v1c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1m14 2c0-.55-.45-1-1-1h-9v2h9c.55 0 1-.45 1-1m-5-3c.55 0 1-.45 1-1V7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1"}),"TuneRounded")},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},77127:(a,b,c)=>{"use strict";c.d(b,{A:()=>O});var d=c(21124),e=c(38301),f=c(60839),g=c(43312),h=c(44079),i=c(37489),j=c(27114),k=c(81637),l=c(79515),m=c(41893),n=c(30818),o=c(423),p=c(98463),q=c(12033),r=c(91034);let s=(0,c(11801).A)((0,d.jsx)("path",{d:"M19.8 18.4 14 10.67V6.5l1.35-1.69c.26-.33.03-.81-.39-.81H9.04c-.42 0-.65.48-.39.81L10 6.5v4.17L4.2 18.4c-.49.66-.02 1.6.8 1.6h14c.82 0 1.29-.94.8-1.6"}),"Science");var t=c(96955),u=c(18467),v=c(5501),w=c(99587),x=c(76133),y=c(83434),z=c(42819),A=c(40512),B=c(83899),C=c(52327),D=c(8521),E=c(88745),F=c(91059),G=c(19925),H=c(68730),I=c(8165),J=c(65343);let K=({title:a,attempt:b})=>(0,d.jsxs)(k.default,{sx:{mb:2},children:[(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5},children:[b.ok?(0,d.jsx)(I.A,{color:"success",fontSize:"small"}):(0,d.jsx)(J.A,{color:"error",fontSize:"small"}),(0,d.jsx)(l.A,{variant:"subtitle2",children:a}),"number"==typeof b.status&&(0,d.jsx)(m.A,{size:"small",label:`HTTP ${b.status}`}),(0,d.jsx)(m.A,{size:"small",variant:"outlined",label:`${b.durationMs} ms`})]}),b.ok?(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",sx:{pl:3},children:["Response: ",b.content?`"${b.content}"`:"(empty)"]}):(0,d.jsxs)(k.default,{sx:{pl:3},children:[(0,d.jsx)(l.A,{variant:"body2",color:"error.main",children:b.error?.message}),(b.error?.code||b.error?.type)&&(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",children:[b.error?.type?`type: ${b.error.type}`:"",b.error?.type&&b.error?.code?" \xb7 ":"",b.error?.code?`code: ${b.error.code}`:""]}),b.error?.retryAfter&&(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",children:["retry-after: ",b.error.retryAfter,"s"]}),b.error?.body!==void 0&&(0,d.jsx)(k.default,{component:"pre",sx:{mt:.5,p:1,bgcolor:"action.hover",borderRadius:1,fontSize:"0.7rem",overflowX:"auto",maxHeight:160},children:JSON.stringify(b.error.body,null,2)})]})]}),L=({open:a,modelLabel:b,loading:c,result:e,error:f,onClose:g,onRetry:h})=>{let i=e?.provider==="codex"?"Codex SDK (used by flows)":"OpenAI SDK (used by flows)";return(0,d.jsxs)(A.A,{open:a,onClose:g,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsxs)(B.A,{children:["Test model: ",b]}),(0,d.jsx)(C.A,{dividers:!0,children:c?(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3},children:[(0,d.jsx)(D.default,{size:24}),(0,d.jsx)(l.A,{variant:"body2",children:"Sending a direct test request (SDK + axios)…"})]}):f?(0,d.jsx)(E.A,{severity:"error",children:f}):e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(E.A,{severity:e.ok?"success":"warning",sx:{mb:2},children:e.diagnosis}),(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:2},children:["model: ",e.model,e.baseUrl?` \xb7 ${e.baseUrl}`:"",e.provider?` \xb7 ${e.provider}`:""]}),(0,d.jsx)(F.A,{sx:{mb:2}}),(0,d.jsx)(K,{title:i,attempt:e.sdk}),(0,d.jsx)(K,{title:"axios (independent cross-check)",attempt:e.axios})]}):null}),(0,d.jsxs)(G.A,{children:[(0,d.jsx)(H.A,{onClick:h,disabled:c,children:"Run again"}),(0,d.jsx)(H.A,{onClick:g,variant:"contained",children:"Close"})]})]})};var M=c(78352);let N=(0,z.h)("frontend/components/models/list/ModelCard"),O=({model:a,onEdit:b,onDelete:c,folder:z,folders:A=[],onSetFolder:B,selectable:C=!1,selected:D=!1,onSelect:E,onToggleFavorite:F})=>{let G=(0,f.A)(),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[O,P]=(0,e.useState)(null),[Q,R]=(0,e.useState)(null),[S,T]=(0,e.useState)(null),U=async()=>{K(!0),R(null),P(null);try{let b=await (0,y.X)().testModel({modelId:a.id});P(b)}catch(b){N.error("Model test failed",{modelId:a.id,error:b}),R(b instanceof Error?b.message:"Failed to run test")}finally{K(!1)}},V=F?(0,d.jsx)(g.A,{title:a.favorite?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(h.A,{size:"small","aria-label":a.favorite?"remove from favorites":"add to favorites",onClick:b=>{b.stopPropagation(),F?.(a.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:a.favorite?G.palette.warning.main:G.palette.text.secondary,backgroundColor:(0,i.X4)(G.palette.background.paper,.6),"&:hover":{backgroundColor:(0,i.X4)(G.palette.background.paper,.9)}},children:a.favorite?(0,d.jsx)(v.A,{fontSize:"small"}):(0,d.jsx)(w.A,{fontSize:"small"})})}):null,W=(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(j.A,{sx:{flexGrow:1,p:2.25},children:[(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:1,mb:1.2},children:[(0,d.jsx)(l.A,{variant:"h6",sx:{pr:1},children:a.displayName||a.name}),(0,d.jsx)(m.A,{label:(0,x.T_)(a.provider,a.adapter).label,size:"small",sx:{flexShrink:0,color:"primary.light",bgcolor:(0,i.X4)(G.palette.primary.main,.09),border:`1px solid ${(0,i.X4)(G.palette.primary.main,.16)}`}})]}),(0,d.jsx)(l.A,{variant:"body2",color:"text.secondary",sx:{mb:2,minHeight:42},style:{display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis"},children:a.description}),(0,d.jsxs)(k.default,{sx:{mb:1,p:1.25,border:1,borderColor:"divider",borderRadius:2.5,bgcolor:(0,i.X4)(G.palette.background.default,.44)},children:[a.displayName&&(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:[(0,d.jsx)(k.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:"Model"})," \xb7 ",a.name]}),"number"==typeof a.contextWindow&&(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",children:[(0,d.jsx)(k.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:"Context"})," \xb7 ",a.contextWindow.toLocaleString()," tokens"]})]}),a.baseUrl&&(0,d.jsx)(g.A,{title:a.baseUrl,arrow:!0,placement:"top",children:(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:["Base URL: ",a.baseUrl]})}),z&&(0,d.jsx)(m.A,{icon:(0,d.jsx)(u.A,{}),label:z,size:"small",variant:"outlined",sx:{mt:1,maxWidth:"100%"}})]})});return C?(0,d.jsxs)(n.A,{elevation:0,role:"radio","aria-checked":D,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",border:a=>`1px solid ${D?a.palette.primary.main:a.palette.divider}`,boxShadow:D?`0 0 0 3px ${(0,i.X4)(G.palette.primary.main,.13)}`:void 0,transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease","&:hover":{borderColor:(0,i.X4)(G.palette.primary.main,.42),transform:"translateY(-3px)"}},children:[V,(0,d.jsx)(o.A,{onClick:()=>E?.(a.id),sx:{height:"100%",display:"flex",flexDirection:"column",alignItems:"stretch"},children:W})]}):(0,d.jsxs)(n.A,{elevation:0,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",transition:"transform 200ms ease, border-color 200ms ease, box-shadow 200ms ease","&:hover":{borderColor:(0,i.X4)(G.palette.primary.main,.38),boxShadow:`0 22px 60px ${(0,i.X4)(G.palette.primary.main,.12)}`,transform:"translateY(-4px)"}},children:[V,W,(0,d.jsxs)(p.A,{disableSpacing:!0,sx:{px:1.5,pb:1.4,borderTop:1,borderColor:"divider"},children:[(0,d.jsx)(g.A,{title:"Test model (direct SDK call, no flow)",arrow:!0,children:(0,d.jsx)(h.A,{"aria-label":"test",onClick:()=>{I(!0),U()},children:(0,d.jsx)(s,{})})}),(0,d.jsx)(h.A,{"aria-label":"edit",onClick:b,children:(0,d.jsx)(q.A,{})}),(0,d.jsx)(h.A,{"aria-label":"delete",onClick:c,children:(0,d.jsx)(r.A,{})}),B&&(0,d.jsx)(g.A,{title:"Move to folder…",arrow:!0,children:(0,d.jsx)(h.A,{"aria-label":"move to folder",onClick:a=>T(a.currentTarget),sx:{ml:"auto"},children:(0,d.jsx)(t.A,{})})})]}),B&&(0,d.jsx)(M.A,{anchorEl:S,open:!!S,currentFolder:z,folders:A,onClose:()=>T(null),onAssign:B}),(0,d.jsx)(L,{open:H,modelLabel:a.displayName||a.name,loading:J,result:O,error:Q,onClose:()=>I(!1),onRetry:U})]})}},85838:(a,b,c)=>{"use strict";c.d(b,{A:()=>z});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(48317),i=c(7499),j=c(54573),k=c(9604),l=c(22813),m=c(28055),n=c(49938),o=c(42819),p=c(80518),q=c(50551);c(43010);let r=(0,o.h)("frontend/components/shared/PromptBuilder"),s=({server:a,name:b})=>{let c="handoff"===a,[f,g]=(0,e.useState)(null),[h,i]=(0,e.useState)(!0);return((0,e.useEffect)(()=>{let c=!1;return(async()=>{try{i(!0);let d=await m.S.listServerTools(a),e=d.tools?.find(a=>a.name===b);c||g(e||null)}catch(c){r.error(`Failed to fetch tool info for ${a}:${b}`,c)}finally{c||i(!1)}})(),()=>{c=!0}},[a,b]),h)?(0,d.jsx)("span",{className:`tool-reference-preview loading ${c?"handoff":""}`,children:`tool:${a}__${b}`}):f?(0,d.jsxs)("span",{className:`tool-reference-preview ${c?"handoff":""}`,children:["[The user is referencing a ",c?"handoff":"tool"," `tool:",a,"__",b,"` (",f.description||"No description",")]"]}):(0,d.jsx)("span",{className:`tool-reference-preview not-found ${c?"handoff":""}`,children:`tool:${a}__${b} (Tool not found)`})},t=({server:a,name:b})=>{let[c,f]=(0,e.useState)(null),[g,h]=(0,e.useState)(!0);return((0,e.useEffect)(()=>{let c=!1;return(async()=>{try{h(!0);let d=await m.S.listServerResources(a),e=[...d.resources||[],...d.resourceTemplates||[]].find(a=>a.uri===b||a.uriTemplate===b);c||f(e?.description||e?.name||null)}catch(c){r.error(`Failed to fetch resource info for ${a}:${b}`,c)}finally{c||h(!1)}})(),()=>{c=!0}},[a,b]),g)?(0,d.jsx)("span",{className:"tool-reference-preview loading resource",children:`resource:${a}__${b}`}):(0,d.jsxs)("span",{className:"tool-reference-preview resource",children:["[The contents of resource `",b,"` from `",a,"`",c?` (${c})`:""," will be inserted here]"]})},u=({name:a})=>(0,d.jsxs)("span",{className:"tool-reference-preview runres",children:["[The contents of the Temporary Data `",a,"` will be inserted here at run time]"]}),v=({name:a})=>(0,d.jsxs)("span",{className:"tool-reference-preview global",children:["[Global variable ",(0,d.jsx)("code",{children:`\${global:${a}}`})," will be inserted at run time]"]}),w=({binding:a})=>"global"===a.kind?(0,d.jsx)(v,{name:a.name}):"runres"===a.kind?(0,d.jsx)(u,{name:a.name}):"resource"===a.kind?(0,d.jsx)(t,{server:a.server,name:a.name}):(0,d.jsx)(s,{server:a.server,name:a.name}),x=({value:a})=>{let b=[],c=0;for(let d of(0,p.sE)(a))d.index>c&&b.push({type:"text",value:a.slice(c,d.index)}),b.push({type:"binding",binding:d,key:d.index}),c=d.index+d.fullMatch.length;c<a.length&&b.push({type:"text",value:a.slice(c)});let e=[],f=[],g=()=>{e.push((0,d.jsx)("p",{children:f},`p-${e.length}`)),f=[]};for(let a of b)if("text"===a.type){let b=a.value.split("\n");for(let a=0;a<b.length;a++)f.push(b[a]),a<b.length-1&&g()}else f.push((0,d.jsx)(w,{binding:a.binding},`binding-${a.key}`));return(f.length>0||0===e.length)&&g(),(0,d.jsx)("div",{className:"preview-content",children:e})},y=(0,e.forwardRef)(({value:a,onChange:b,label:c="Prompt Builder",height:m=300,onModeChange:o,customPreviewRenderer:r,suggestions:s=[]},t)=>{let{globalEnvVars:u}=(0,n.rX)(),v=(0,e.useMemo)(()=>Object.entries(u).filter(([,a])=>!a.metadata?.isSecret).map(([a])=>a).sort((a,b)=>a.localeCompare(b)),[u]),w=(0,e.useMemo)(()=>[...s,...v.map(a=>(0,p.Ub)({kind:"global",server:"",name:a},a))],[v,s]),y=(0,e.useRef)(null),[z,A]=(0,e.useState)("raw");return(0,e.useImperativeHandle)(t,()=>({insertText:a=>y.current?.insertText(a),getMode:()=>z}),[z]),(0,d.jsxs)(f.default,{sx:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:[c&&(0,d.jsx)(g.A,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium",mb:1},children:c}),(0,d.jsx)(f.default,{sx:{mb:1},children:(0,d.jsxs)(h.A,{value:z,exclusive:!0,onChange:(a,b)=>{b&&(A(b),o?.(b))},size:"small",children:[(0,d.jsxs)(i.A,{value:"raw",children:[(0,d.jsx)(k.A,{fontSize:"small",sx:{mr:.5}}),"Raw"]}),(0,d.jsxs)(i.A,{value:"preview",children:[(0,d.jsx)(l.A,{fontSize:"small",sx:{mr:.5}}),"Preview"]})]})}),(0,d.jsx)(j.A,{elevation:0,sx:{border:"1px solid rgba(0, 0, 0, 0.12)",borderRadius:1,overflow:"visible",flexGrow:1,display:"flex",flexDirection:"column"},children:"raw"===z?(0,d.jsx)(f.default,{className:"slate-editor-container",sx:{height:"number"==typeof m?m:"100%",overflow:"visible",p:2},children:(0,d.jsx)(q.Ay,{ref:y,value:a,onChange:b,suggestions:w,placeholder:"Write your prompt here...",bare:!0,minRows:4,containerSx:{height:"100%"},ariaLabel:c||"Prompt editor"})}):r?(0,d.jsx)(f.default,{className:"custom-preview-container",sx:{height:"number"==typeof m?m:"100%",overflow:"auto"},children:r()}):(0,d.jsx)(f.default,{className:"preview-container",sx:{height:"number"==typeof m?m:"100%",overflow:"auto",p:2},children:(0,d.jsx)(x,{value:a})})})]})});y.displayName="PromptBuilder";let z=y},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},91585:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>dU});var d=c(21124),e=c(38301),f=c.n(e),g=c(42378),h=c(60839),i=c(81637),j=c(79515),k=c(68730),l=c(49565),m=c(44079),n=c(43312),o=c(99561),p=c(88745),q=c(40512),r=c(83899),s=c(52327),t=c(7503),u=c(37674),v=c(19925),w=c(11801);let x=(0,w.A)((0,d.jsx)("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z"}),"ArrowBack");var y=c(47902);let z=(0,w.A)((0,d.jsx)("path",{d:"m19 9 1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25z"}),"AutoAwesome");var A=c(1717),B=c(69266),C=c(18168),D=c(54573),E=c(41893),F=c(8521),G=c(95587),H=c(67191),I=c(91059),J=c(7118),K=c(94367),L=c(42819),M=c(95791),N=c(2117),O=c(63281),P=c(28055),Q=c(83434),R=c(90430),S=c(36627);function T(a){return a.data?.edgeType}function U(a){return"mcp"===T(a)}function V(a){return"resource"===T(a)}var W=c(98502),X=c(64535);function Y(a){return{id:a.id,label:a.data.label,type:a.type||a.data.type}}var Z=c(63787);c(74855);var $=c(37489),_=c(67101),aa=c(76159),ab=c(83144),ac=c(88970),ad=c(87351),ae=c(93995),af=c(88698),ag=c(5123),ah=c(41637),ai=c(5240),aj=c(11361);let ak=(0,L.h)("components/flow/FlowBuilder/NodePalette.tsx"),al="NodePalette",am=(0,C.Ay)(D.A)(({theme:a})=>({padding:a.spacing(1.4),width:"218px",height:"100%",minHeight:0,flexShrink:0,display:"flex",flexDirection:"column",gap:a.spacing(1.2),overflowY:"auto",border:`1px solid ${a.palette.divider}`,borderRadius:16,backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.86)":"rgba(255, 255, 255, 0.9)",boxShadow:"dark"===a.palette.mode?"0 16px 45px rgba(0,0,0,.22)":"0 16px 45px rgba(49,45,99,.09)",backdropFilter:"blur(18px)",[a.breakpoints.down("md")]:{width:"176px",padding:a.spacing(1)},[a.breakpoints.down("md")]:{width:"100%",height:"68px",padding:a.spacing(.65),gap:a.spacing(.6),alignItems:"flex-start",overflowX:"auto",overflowY:"hidden"}})),an=(0,C.Ay)(D.A,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({padding:a.spacing(1.25),width:"100%",minWidth:0,borderRadius:"12px",backgroundColor:(0,$.X4)(a.palette.background.paper,.72),border:`1px solid ${a.palette.divider}`,borderLeft:`3px solid ${"process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main}`,boxShadow:"none",transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease",cursor:"grab","&:hover":{transform:"translateY(-2px)",borderColor:(0,$.X4)("process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main,.55),boxShadow:`0 0 0 1px ${"process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main}, 0 14px 30px rgba(0,0,0,0.12)`},"&:active":{cursor:"grabbing"},[a.breakpoints.down("md")]:{width:64,minWidth:64,minHeight:54,padding:a.spacing(.55),flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",borderLeftWidth:2}})),ao=(0,C.Ay)(i.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${"process"===b?a.palette.primary.light:"finish"===b?a.palette.success.light:"subflow"===b?a.palette.warning.light:"resource"===b?"#4DB6AC":"signal"===b?"#B39DDB":"trigger"===b?aj.C2:a.palette.info.light}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5),[a.breakpoints.down("md")]:{width:"100%",marginBottom:0,paddingBottom:0,borderBottom:0,justifyContent:"center"}})),ap=(0,C.Ay)(i.default)(({theme:a})=>({display:"flex",alignItems:"center",gap:"8px",[a.breakpoints.down("md")]:{flexDirection:"column",justifyContent:"center",gap:2}})),aq=[{type:"process",label:"Ask AI",shortLabel:"AI step",description:"Write, summarize, analyze, or make a decision"},{type:"finish",label:"Send the answer",shortLabel:"Finish",description:"Return the finished result to the person"},{type:"mcp",label:"Use a connected app",shortLabel:"Tool",description:"Let the agent use an app or service"},{type:"subflow",label:"Ask another agent",shortLabel:"Agent",description:"Hand part of the job to another agent"},{type:"resource",label:"Use saved information",shortLabel:"Information",description:"Read or create a reusable result"},{type:"signal",label:"Notify an automation",shortLabel:"Notify",description:"Let another automation know this step finished"},{type:"trigger",label:"Start automatically",shortLabel:"Start",description:"Run on a schedule or when something happens"}],ar=({authoringMode:a="guided",onAddNode:b})=>{ak.debug(`${al}: Entering component`);let[c,f]=(0,e.useState)(""),g=(0,e.useRef)(null);(0,e.useEffect)(()=>{let a=()=>{g.current?.focus(),g.current?.select()};return document.addEventListener("openFlowQuickAdd",a),()=>document.removeEventListener("openFlowQuickAdd",a)},[]);let h=(0,e.useCallback)(a=>{ak.debug(`${al}.addNodeFromPalette: Adding ${a} node`),b?.(a),ak.info(`${al}.addNodeFromPalette: Requested ${a} node`)},[b]),k=(0,e.useMemo)(()=>{let b=c.trim().toLowerCase();return aq.filter(b=>"advanced"===a||"process"===b.type).filter(a=>!b||`${a.label} ${a.description} ${a.shortLabel}`.toLowerCase().includes(b))},[a,c]);return ak.debug(`${al}: Rendering component`),(0,d.jsxs)(am,{elevation:2,children:[(0,d.jsxs)(i.default,{sx:{display:{xs:"none",md:"flex"},alignItems:"baseline",justifyContent:"space-between"},children:[(0,d.jsx)(j.A,{className:"node-palette-title",variant:"subtitle1",fontWeight:800,children:"Add an action"}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:"A"})]}),(0,d.jsx)(u.A,{inputRef:g,value:c,onChange:a=>f(a.target.value),size:"small",placeholder:"Search actions",inputProps:{"aria-label":"Search actions to add"},sx:{display:{xs:"none",md:"flex"}},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(ai.A,{fontSize:"small"})})}}),(0,d.jsxs)(i.default,{display:"flex",flexDirection:{xs:"row",md:"column"},gap:{xs:.75,md:1},width:{xs:"max-content",md:"100%"},children:[k.map(a=>(0,d.jsxs)(an,{nodeType:a.type,elevation:1,draggable:!0,role:"button",tabIndex:0,"aria-label":`${a.label}: ${a.description}`,title:`${a.label} — ${a.description}`,onDragStart:b=>((a,b)=>{ak.debug(`${al}.onDragStart: Entering method with nodeType=${b}`),a.dataTransfer.setData("application/reactflow",b),a.dataTransfer.effectAllowed="move";let c=document.createElement("div"),d=aq.find(a=>a.type===b);c.textContent=d?.label??"Agent step",Object.assign(c.style,{padding:"10px",background:"white",border:"1px solid #ccc",borderRadius:"8px"}),document.body.appendChild(c),ak.debug(`${al}.onDragStart: Created drag preview element`);try{a.dataTransfer.setDragImage(c,75,25),ak.debug(`${al}.onDragStart: Set drag image with offset (75, 25)`)}catch(a){ak.error(`${al}.onDragStart: Error setting drag image:`,a)}setTimeout(()=>{document.body.removeChild(c),ak.debug(`${al}.onDragStart: Removed drag preview element`)},0),ak.debug(`${al}.onDragStart: Drag operation initialized`)})(b,a.type),onDragEnd:b=>{var c;return c=a.type,void ak.debug(`${al}.onDragEnd: Drag operation ended for nodeType=${c}`)},onClick:()=>h(a.type),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),h(a.type))},children:[(0,d.jsx)(ao,{nodeType:a.type,children:(0,d.jsxs)(ap,{children:[(a=>{switch(a){case"process":return(0,d.jsx)(ah.default,{color:"primary"});case"finish":return(0,d.jsx)(ab.A,{color:"success"});case"mcp":return(0,d.jsx)(ag.A,{color:"info"});case"subflow":return(0,d.jsx)(ac.A,{color:"warning"});case"resource":return(0,d.jsx)(ad.A,{sx:{color:aj.nH}});case"signal":return(0,d.jsx)(ae.A,{sx:{color:aj.vp}});case"trigger":return(0,d.jsx)(af.A,{sx:{color:aj.$Q}});default:return(0,d.jsx)(aa.A,{color:"primary"})}})(a.type),(0,d.jsx)(j.A,{variant:"caption",fontWeight:"bold",sx:{display:{xs:"block",md:"none"},fontSize:"0.62rem",lineHeight:1},children:a.shortLabel}),(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:"bold",sx:{display:{xs:"none",md:"block"}},children:a.label})]})}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{display:{xs:"none",md:"block"}},children:a.description})]},a.type)),0===k.length&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{px:.5,py:1},children:"No matching nodes"})]})]})};var as=c(31605),at=c(21903),au=c(89490),av=c(50553),aw=c(84233),ax=c(75983),ay=c(71439);let az=(0,w.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M10 17H5v-2h5zm0-4H5v-2h5zm0-4H5V7h5zm4.82 6L12 12.16l1.41-1.41 1.41 1.42L17.99 9l1.42 1.42z"}),"FactCheck");var aA=c(22797),aB=c(21358),aC=c(8165),aD=c(29237);let aE=/\$\{var:([^}]+)\}/g,aF=/^[A-Za-z_][\w-]*$/;function aG(a){return"string"==typeof a&&aF.test(a)}let aH=/\$\{kv:([^}]+)\}/g,aI=["global","flow","folder"];function aJ(a){let b=(a??"").trim(),c=b.indexOf("/");if(c>0){let a=b.slice(0,c);if(aI.includes(a))return{scope:a,key:b.slice(c+1).trim()}}return{scope:"folder",key:b}}function aK(a,b){let c=(b??"").trim();return c?"folder"===a?c:`${a}/${c}`:""}let aL=/^[A-Za-z_][\w-]*$/;function aM(a){return"string"==typeof a&&aL.test(a)}function aN(a){return a.data?.type??a.type??"unknown"}function aO(a){return a.data?.label||a.id}function aP(a){return a.data?.edgeType==="mcp"}function aQ(a){return a.data?.edgeType==="resource"}function aR(a){return aP(a)||aQ(a)}function aS(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!aP(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==aN(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}function aT(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=[],f=new Set;for(let b of c){if(aR(b))continue;let c=null;b.source===a?c=b.target:b.target===a&&b.data?.bidirectional&&(c=b.source),!c||f.has(c)||(f.add(c),e.push(c))}let g=e.map(a=>d.get(a)).filter(a=>!!a).map(a=>({id:a.id,label:a.data?.label,type:aN(a)}));return new Set((0,W.E9)(g).values())}function aU(a){let b=a.replace(/\S*\$\{[^}]*\}\S*/g," ");return/(?:^|[\s("'`])file:\/\/(?:\/|[^/\s]+\/)[^\s<>"'`]+/i.test(b)||/(?:^|[\s("'`])(?:[A-Za-z]:[\\/][^\s<>"'`]*|\\\\[^\\\s<>"'`]+\\[^\\\s<>"'`]+(?:\\[^\s<>"'`]*)?)/.test(b)||/(?:^|[\s("'`])\/(?!\/)[^\s<>"'`]+/.test(b)}function aV(a){if("string"!=typeof a)return!1;let b=a.trim();if(!b)return!1;if(/^\$\{global:[^{}]+\}$/.test(b))return!0;if(b.includes("${"))return!1;if(/^file:/i.test(b))try{let a=new URL(b);return"file:"===a.protocol&&(!!a.hostname||!!a.pathname)}catch{return!1}return!b.includes("\0")}function aW(a,b={}){let c=[],d=Array.isArray(a?.nodes)?a.nodes:[],e=Array.isArray(a?.edges)?a.edges:[],f=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?aO(e):void 0}),g=new Map((b.models??[]).map(a=>[a.id,a])),h=new Map((b.servers??[]).map(a=>[a.name,a])),i=!!b.models,j=!!b.servers,k=d.filter(a=>"start"===aN(a)),l=d.filter(a=>"finish"===aN(a)),m=d.filter(a=>"process"===aN(a)),n=d.filter(a=>"mcp"===aN(a));if(0===k.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(k.length>1)for(let a of k.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===l.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),m)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(i&&!g.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";f("error","process-model-missing",`Process node "${aO(a)}" is bound to a model that no longer exists${c}.`,a)}}else f("error","process-missing-model",`Process node "${aO(a)}" has no model bound.`,a)}for(let a of n){let b=(a.data?.properties??{}).boundServer;if(b){if(j&&!h.has(b))f("warning","mcp-server-missing",`MCP node "${aO(a)}" is bound to server "${b}", 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.`,a);else if(j){let c=h.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;f("warning","mcp-server-disconnected",`MCP node "${aO(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else f("warning","mcp-missing-server",`MCP node "${aO(a)}" is not bound to a server.`,a);e.some(b=>aP(b)&&(b.source===a.id||b.target===a.id))||f("warning","mcp-node-unconnected",`MCP node "${aO(a)}" is not connected to any Process node.`,a)}if(b.fileAccessMcp){let a=b.fileAccessMcp,c=Object.entries(a).filter(([,a])=>a.configured&&!a.disabled&&"usable"===a.usability).map(([a])=>a),d=Object.values(a).some(a=>a.configured&&!a.disabled&&"unknown"===a.usability);for(let b of m)if((function(a){let b=a.data?.properties??{},c=[];return"string"==typeof b.promptTemplate&&b.promptTemplate&&c.push(b.promptTemplate),"isolated"===b.inputMode&&"string"==typeof b.isolatedPrompt&&b.isolatedPrompt&&c.push(b.isolatedPrompt),c})(b).some(aU)){if(0===c.length){d||f("warning","process-filepath-mcp-unavailable",`Process node "${aO(b)}" contains a literal filepath, but no configured file-access MCP server is currently available. Enable or reconnect one so this flow can access the path.`,b);continue}!d&&c.every(b=>!function(a,b,c){return!![...Array.isArray(b.roots)?b.roots:[],...c.filter(b=>b.data?.properties?.boundServer===a).flatMap(a=>{let b=a.data?.properties?.roots;return Array.isArray(b)?b:[]})].some(aV)||aV(b.rootPath)}(b,a[b],n))&&f("warning","process-filepath-mcp-roots-missing",`Process node "${aO(b)}" contains a literal filepath, but the available file-access MCP servers have no effective roots configured. Add roots globally or on the corresponding MCP node in this flow.`,b)}}for(let a of d.filter(a=>"resource"===aN(a))){let b=a.data?.properties??{},c="run"===b.scope?"run":"mcp",d="string"==typeof b.boundServer?b.boundServer:"",g="string"==typeof b.uri?b.uri:"",i="string"==typeof b.runName?b.runName.trim():"";"mcp"!==c||d&&g||f("warning","resource-missing-binding",`Resource node "${aO(a)}" has no ${!d?"server":"resource URI"} bound; connected steps will receive nothing.`,a),"run"!==c||i||f("warning","resource-missing-binding",`Resource node "${aO(a)}" is a run artifact with no name; give it a name so steps can produce/consume it.`,a),"run"===c&&i&&!aG(i)&&f("warning","resource-run-name",`Resource node "${aO(a)}" is named "${i}", which is not a valid artifact name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${res:...}.`,a),"mcp"===c&&d&&j&&!h.has(d)&&f("warning","resource-server-missing",`Resource node "${aO(a)}" is bound to server "${d}", which isn't in your current MCP server list.`,a);let k=e.filter(b=>aQ(b)&&(b.source===a.id||b.target===a.id));0===k.length&&f("warning","resource-node-unconnected",`Resource node "${aO(a)}" is not connected to any Process node.`,a);let l=k.filter(b=>b.target===a.id);"mcp"===c&&l.length>0&&f("error","resource-produce-static",`Resource node "${aO(a)}" is a static MCP resource, but a step writes INTO it. Only run artifacts (scope "run") can be produced by a step — flip the edge or make this a run artifact.`,a),"run"===c&&l.length>1&&f("warning","resource-multiple-producers",`Resource node "${aO(a)}" is produced by ${l.length} steps; the last writer wins. Consider one producer per artifact.`,a),"run"===c&&0===l.length&&k.length>0&&f("warning","resource-consumed-never-produced",`Resource node "${aO(a)}" is consumed but no step in this flow produces it; it resolves to nothing unless an earlier run captured it.`,a)}for(let a of d.filter(a=>"signal"===aN(a))){let b=a.data?.properties??{};("string"==typeof b.topic?b.topic.trim():"")||f("warning","signal-missing-topic",`Signal node "${aO(a)}" has no topic; it emits nothing. Give it a topic that a flow-event trigger can listen for.`,a)}if(k.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!aR(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(e);for(let b of k)a.get(b.id)?.length||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(k.map(a=>a.id),a);for(let a of[...m,...l])b.has(a.id)||f("warning","unreachable-node",`${"finish"===aN(a)?"Finish":"Process"} node "${aO(a)}" is not reachable from the Start node.`,a)}for(let a of d.filter(a=>"subflow"===aN(a))){let b=e.filter(b=>!aR(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&f("error","subflow-multiple-outgoing",`Subflow node "${aO(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},g="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,h=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];g&&h.length>0&&f("error","subflow-both-targets",`Subflow node "${aO(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let i=!0===c.mapOverList;i&&h.length>0&&f("error","subflow-map-and-parallel",`Subflow node "${aO(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),i&&!g&&0===h.length&&f("error","subflow-map-no-child",`Subflow node "${aO(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a);let j=Array.isArray(c.spawnBriefs)?c.spawnBriefs.filter(a=>"string"==typeof a&&""!==a.trim()):[];j.length>0&&!g&&f("error","subflow-spawn-no-child",`Subflow node "${aO(a)}" has spawn briefs but no sub-agent flow ("subflowId"); select the flow to spawn once per brief.`,a),j.length>0&&h.length>0&&f("error","subflow-spawn-and-parallel",`Subflow node "${aO(a)}" combines "spawnBriefs" with "parallelSubflowIds"; spawn briefs run one sub-agent per brief and cannot be combined with a multi-flow fan-out list.`,a),j.length>0&&i&&f("error","subflow-spawn-and-map",`Subflow node "${aO(a)}" combines "spawnBriefs" with "mapOverList"; use one lane source or the other.`,a);let k="string"==typeof c.parallelSubflowIdsVar?c.parallelSubflowIdsVar.trim():"";if(k&&(aG(k)||f("warning","subflow-parallel-var-name",`Subflow node "${aO(a)}" reads dynamic fan-out targets from "${k}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to capture with \${var:...}.`,a),i&&f("error","subflow-map-and-parallel-var",`Subflow node "${aO(a)}" combines "mapOverList" with dynamic fan-out ("parallelSubflowIdsVar"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),d.some(a=>{let b=a.data?.properties?.captureVariable;return"string"==typeof b&&b.trim()===k})||f("warning","subflow-parallel-var-uncaptured",`Subflow node "${aO(a)}" reads dynamic fan-out targets from variable "${k}", but no node captures it (captureVariable). It may be seeded by the caller; otherwise it resolves to no targets and the node falls back to its static parallel list.`,a)),!0===c.allowCallerFanout&&i&&f("error","subflow-map-and-caller-fanout",`Subflow node "${aO(a)}" combines "mapOverList" with agentic fan-out ("allowCallerFanout"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),h.length>0||j.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&f("warning","subflow-concurrency-limit",`Subflow node "${aO(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(d.map(a=>[a.id,a])),b=new Set;for(let c of e){if(aR(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let e=a.get(c.source),g=e?aN(e):"unknown";if("process"!==g){f("error","edge-condition-non-process",`An edge leaving ${"unknown"===g?"an unknown":`the ${g}`} node "${e?aO(e):c.source}" has a routing condition, but only process nodes can route on a condition.`,e??void 0);continue}b.add(c.source),(0,aD.C)(d.kind)?"always"===d.kind||("string"!=typeof d.value||0===d.value.length?f("warning","edge-condition-value",`Process node "${aO(e)}" has an outgoing edge condition with no "value"; it will never match.`,e):"regex"!==d.kind||(0,aD.wM)(d.value)||f("warning","edge-condition-regex",`Process node "${aO(e)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,e)):f("warning","edge-condition-kind",`Process node "${aO(e)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,e)}for(let c of b){let b=a.get(c);b&&(e.some(a=>!aR(a)&&(a.source===c?!a.data?.condition||"always"===a.data.condition.kind&&!a.data.condition.negate:!!(a.target===c&&a.data?.bidirectional)))||f("warning","edge-condition-no-fallback",`Process node "${aO(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of d){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),aG(d)||f("warning","capture-var-name",`${"subflow"===aN(b)?"Subflow":"Process"} node "${aO(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let e of d){let d=e.data?.properties??{};for(let g of b){let b=d[g];if("string"==typeof b&&b)for(let d of function(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(aE.lastIndex=0;null!==(b=aE.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}(b)){if(a.has(d))continue;let b=`${e.id}:${d}`;c.has(b)||(c.add(b),f("warning","var-ref-uncaptured",`${aO(e)} references \${var:${d}} but no step in this flow captures "${d}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,e))}}}}{for(let a of d){let b=a.data?.properties?.captureKv;if("string"==typeof b&&b.trim()){let{key:c}=aJ(b.trim());aM(c)||f("warning","capture-kv-name",`${"subflow"===aN(a)?"Subflow":"Process"} node "${aO(a)}" captures into kv "${b.trim()}", whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${kv:...}.`,a)}}let a=["promptTemplate","isolatedPrompt"],b=new Set;for(let c of d){let d=c.data?.properties??{};for(let e of a){let a=d[e];if("string"==typeof a&&a)for(let d of function(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(aH.lastIndex=0;null!==(b=aH.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}(a)){let{key:a}=aJ(d);if(aM(a))continue;let e=`${c.id}:${d}`;b.has(e)||(b.add(e),f("warning","kv-ref-name",`${aO(c)} references \${kv:${d}}, whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it resolves to empty.`,c))}}}}for(let a of m){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let g=aS(a.id,d,e),h=null,i=new Set,j=new Set;for(let k of(0,X.A$)(c)){if("handoff"===k.server){let b=`handoff:${k.name}`;if(j.has(b))continue;j.add(b),i.add(k.name),h||(h=aT(a.id,d,e)),h.has(k.name)||f("warning","handoff-pill-obsolete",`Process node "${aO(a)}" references handoff tool "${k.name}", which no longer exists (the target node was removed, or renamed so the tool name changed). Update or remove the pill.`,a);continue}let c=`${k.kind}:${k.server}:${k.name}`;!j.has(c)&&(j.add(c),g.has(k.server)?"tool"===k.kind&&b.serverTools&&b.serverTools[k.server]&&!b.serverTools[k.server].includes(k.name)&&f("warning","tool-unavailable",`Process node "${aO(a)}" references tool "${k.name}" which server "${k.server}" does not currently expose.`,a):f("error","tool-pill-disconnected",`Process node "${aO(a)}" references ${k.kind} "${k.name}" from server "${k.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}if(i.size>0)for(let b of h??aT(a.id,d,e))i.has(b)||f("warning","handoff-target-unreferenced",`Process node "${aO(a)}" can hand off to "${b}" but its prompt never references \${tool:handoff__${b}}, so the model may never route there.`,a)}if(b.serverTools)for(let a of m){let c=aS(a.id,d,e),g=new Set;for(let d of c){let c=b.serverTools[d];if(Array.isArray(c)&&0===c.length&&f("warning","mcp-server-no-tools",`Process node "${aO(a)}" is connected to MCP server "${d}", which currently exposes 0 tools. The connection has no effect until the server provides tools.`,a),Array.isArray(c))for(let b of Array.isArray(a.data?.properties?.enabledTools)?a.data.properties.enabledTools:[]){let e=`enabledTool:${d}:${b}`;!g.has(e)&&(c.includes(b)||(g.add(e),f("warning","tool-unavailable",`Process node "${aO(a)}" has enabledTool "${b}" which server "${d}" does not currently expose.`,a)))}}}let o=c.filter(a=>"error"===a.severity).length,p=c.length-o;return{issues:c,errorCount:o,warningCount:p,isRunnable:0===o}}let aX=(0,L.h)("components/flow/FlowBuilder/FlowValidationButton"),aY=({nodes:a,edges:b})=>{let[c,f]=(0,e.useState)(!1),[g,h]=(0,e.useState)(null),[l,m]=(0,e.useState)(!1),[n,o]=(0,e.useState)(null),[p,q]=(0,e.useState)(null),r=(0,e.useRef)(null),s=(0,e.useRef)(null),t=(0,e.useId)(),u=(0,e.useId)(),v=(0,e.useId)();(0,e.useEffect)(()=>{if(!c)return;let a=window.requestAnimationFrame(()=>{s.current?.focus()});return()=>window.cancelAnimationFrame(a)},[c]);let w=(0,e.useCallback)(()=>{f(!1),window.requestAnimationFrame(()=>{r.current?.focus()})},[]),x=(0,e.useCallback)(()=>{let a=s.current?.contains(document.activeElement);f(!1),a&&window.requestAnimationFrame(()=>{r.current?.focus()})},[]),y=(0,e.useCallback)(async()=>{m(!0),q(null);try{let c=await Q.N.tryLoadModels()??void 0,d=await P.S.loadServerConfigs(),e=Array.isArray(d)?d:void 0,f=e?.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})),g={},h=new Map,i=e?.filter(a=>!!a.hostPathAccess)??[],j=new Set(i.map(a=>a.name));if(e){let b=new Map(e.map(a=>[a.name,!!a.disabled])),c=new Set;for(let b of a){let a=b?.data?.type??b?.type,d=b?.data?.properties?.boundServer;"mcp"===a&&"string"==typeof d&&d&&c.add(d)}for(let{name:a,disabled:b}of i)b||c.add(a);await Promise.all([...c].map(async a=>{if(!b.get(a))try{let b=await P.S.listServerTools(a);!b.error&&Array.isArray(b.tools)?(g[a]=b.tools.map(a=>a?.name).filter(a=>"string"==typeof a),h.set(a,"usable")):j.has(a)&&h.set(a,"unknown")}catch(b){j.has(a)&&h.set(a,"unknown"),aX.debug(`Could not gather MCP tool list for "${a}" during the flow check`,b)}}))}let k=e?Object.fromEntries(i.map(a=>[a.name,function(a,b,c){let d=b.find(b=>b.name===a);if(!d)return{configured:!1,disabled:!1,usability:"unavailable"};let e=!!d.disabled;return{configured:!0,disabled:e,usability:e?"unavailable":c.get(a)??"unknown",roots:d.roots,rootPath:d.rootPath}}(a.name,e,h)])):void 0,l=aW({nodes:a,edges:b},{models:c,servers:f,serverTools:g,fileAccessMcp:k});o(l.issues)}catch(a){aX.warn("Flow validation failed to run",a),o(null),q("The flow check could not finish. Your graph was not marked healthy—try again.")}finally{m(!1)}},[a,b]),z=(0,e.useCallback)(a=>{h(a.currentTarget),f(!0),o(null),q(null),y()},[y]),A=(0,e.useCallback)(a=>{a&&(w(),document.dispatchEvent(new CustomEvent("selectNode",{detail:{nodeId:a}})))},[w]),B=n?.filter(a=>"error"===a.severity).length??0,C=(n?.length??0)-B;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(k.A,{ref:r,id:t,variant:"outlined",color:"primary",onClick:z,startIcon:(0,d.jsx)(az,{}),"aria-haspopup":"dialog","aria-expanded":c,"aria-controls":u,sx:{textTransform:"none"},children:["Check Flow",n&&n.length>0&&(0,d.jsx)(E.A,{size:"small",color:B>0?"error":"warning",label:n.length,sx:{ml:1,height:20}})]}),(0,d.jsx)(as.A,{open:c,anchorEl:g,placement:"bottom-end",sx:{zIndex:a=>a.zIndex.modal+1},modifiers:[{name:"offset",options:{offset:[0,10]}}],children:(0,d.jsx)(at.x,{onClickAway:x,children:(0,d.jsxs)(D.A,{ref:s,id:u,role:"dialog","aria-modal":"false","aria-labelledby":v,"aria-busy":l,tabIndex:-1,onKeyDown:a=>{"Escape"===a.key&&(a.preventDefault(),a.stopPropagation(),w())},elevation:18,sx:{width:"min(92vw, 440px)",maxHeight:"min(68dvh, 560px)",overflow:"hidden",border:1,borderColor:"divider",borderRadius:3},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,px:2,py:1.5},children:[(0,d.jsx)(j.A,{id:v,variant:"subtitle1",fontWeight:800,children:"Flow Check"}),n&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:.75,ml:.5},children:[B>0&&(0,d.jsx)(E.A,{size:"small",color:"error",label:`${B} error${1===B?"":"s"}`}),C>0&&(0,d.jsx)(E.A,{size:"small",color:"warning",label:`${C} warning${1===C?"":"s"}`})]})]}),(0,d.jsx)(I.A,{}),(0,d.jsx)(i.default,{sx:{maxHeight:"min(52dvh, 420px)",overflowY:"auto",p:1},children:l?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,d.jsx)(F.default,{size:22}),(0,d.jsx)(j.A,{color:"text.secondary",children:"Checking flow…"})]}):p?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"flex-start",gap:1.5,py:2,px:1},children:[(0,d.jsx)(aA.A,{color:"error"}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{fontWeight:700,children:"Check unavailable"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:p})]})]}):n&&0===n.length?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,px:1,justifyContent:"center"},children:[(0,d.jsx)(aC.A,{color:"success"}),(0,d.jsx)(j.A,{children:"No problems found — this flow looks runnable."})]}):(0,d.jsx)(au.A,{dense:!0,disablePadding:!0,children:(n??[]).map((a,b)=>{let c=!!a.nodeId,e=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(av.A,{sx:{minWidth:36},children:"error"===a.severity?(0,d.jsx)(aA.A,{color:"error",fontSize:"small"}):(0,d.jsx)(aB.A,{color:"warning",fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:a.message,secondary:c?`Node: ${a.nodeLabel??a.nodeId} — reveal in inspector`:void 0})]});return c?(0,d.jsx)(ax.A,{onClick:()=>A(a.nodeId),alignItems:"flex-start",children:e},b):(0,d.jsx)(ay.Ay,{alignItems:"flex-start",children:e},b)})})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,p:1},children:[(0,d.jsx)(k.A,{onClick:y,disabled:l,children:"Re-check"}),(0,d.jsx)(k.A,{onClick:w,variant:"contained",children:"Done"})]})]})})})]})};var aZ=c(53773),a$=c(22042),a_=c(34304),a0=c(29900),a1=c(29777),a2=c(15699),a3=c(36210);let a4=(0,C.Ay)(D.A)(({theme:a})=>({width:320,minWidth:320,height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden",border:`1px solid ${a.palette.divider}`,borderRadius:16,backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.9)":"rgba(255, 255, 255, 0.92)",boxShadow:"dark"===a.palette.mode?"0 18px 55px rgba(0,0,0,.24)":"0 18px 55px rgba(49,45,99,.1)",backdropFilter:"blur(20px) saturate(140%)",[a.breakpoints.down("lg")]:{width:286,minWidth:286},[a.breakpoints.down("md")]:{width:"100%",minWidth:0,height:"auto",maxHeight:"none"}})),a5=({selectedNode:a,onClearSelection:b,onCommitNode:c,onOpenAdvanced:f,flowName:g,flowNameError:h,onFlowNameChange:l,flowDescription:o,onFlowDescriptionChange:p,authoringMode:q,onAuthoringModeChange:r,permissionRuleCount:s,onOpenPermissionRules:t,beginnerMode:v=!1,onSuggestTools:w,onCheckPlausibility:x})=>{let[y,z]=(0,e.useState)(a?"node":"flow"),[A,C]=(0,e.useState)(a?.data.label??""),[D,F]=(0,e.useState)(a?.data.description??""),[J,K]=(0,e.useState)(String(a?.data.properties?.promptTemplate??""));(0,e.useEffect)(()=>{a?z("node"):z("flow")},[a?.id]),(0,e.useEffect)(()=>{C(a?.data.label??""),F(a?.data.description??""),K(String(a?.data.properties?.promptTemplate??""))},[a?.id,a?.data]);let L=(0,e.useMemo)(()=>{if(!a)return[];let b=a.data.properties??{},c=[];return"string"==typeof b.modelId&&b.modelId?c.push({label:v?"AI":"Model",value:b.modelId}):"string"==typeof b.model&&b.model&&c.push({label:v?"AI":"Model",value:b.model}),"string"==typeof b.boundServer&&b.boundServer&&c.push({label:v?"App":"Server",value:b.boundServer}),"string"==typeof b.subflowId&&b.subflowId&&c.push({label:v?"Agent":"Flow",value:b.subflowId}),"string"==typeof b.signalName&&b.signalName&&c.push({label:v?"Notification":"Signal",value:b.signalName}),c},[a,v]),M=()=>{if(!a)return null;let b={...a.data.properties??{}};("process"===a.data.type||"start"===a.data.type)&&(b.promptTemplate=J);let d={...a.data,label:A.trim()||a.data.label,description:D.trim()||void 0,properties:b};return JSON.stringify(d)!==JSON.stringify(a.data)&&c(a.id,d),{...a,data:d}};return(0,d.jsxs)(a4,{elevation:0,"aria-label":v&&a?"Step settings":v?"Agent settings":"Flow inspector",children:[(0,d.jsxs)(i.default,{sx:{px:1.5,pt:1.25},children:[(0,d.jsxs)(aZ.A,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:1,children:[(0,d.jsxs)(i.default,{sx:{minWidth:0},children:[(0,d.jsx)(j.A,{variant:"overline",color:"text.secondary",sx:{letterSpacing:".12em"},children:v?a?"Edit this step":"Agent settings":"Inspector"}),(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:800,noWrap:!0,children:a?a.data.label:g})]}),a&&(0,d.jsx)(n.A,{title:v?"Close step settings":"Clear node selection",children:(0,d.jsx)(m.A,{size:"small","aria-label":v?"Close step settings":"Close node inspector",onClick:b,children:(0,d.jsx)(a0.A,{fontSize:"small"})})})]}),!v&&(0,d.jsxs)(a$.A,{value:y,onChange:(a,b)=>z(b),variant:"fullWidth",sx:{mt:.5,minHeight:38,"& .MuiTab-root":{minHeight:38}},children:[(0,d.jsx)(a_.A,{value:"node",label:"Node",disabled:!a}),(0,d.jsx)(a_.A,{value:"flow",label:"Flow"})]})]}),(0,d.jsx)(I.A,{}),(0,d.jsx)(i.default,{sx:{p:1.5,overflowY:"auto",flex:1},children:"node"===y&&a?(0,d.jsxs)(aZ.A,{spacing:1.5,children:[(0,d.jsxs)(aZ.A,{direction:"row",alignItems:"center",gap:1,children:[(0,d.jsx)(E.A,{size:"small",label:((a,b)=>{let c=String(a.data.type||a.type||"node");return b?({start:"When it starts",process:"AI step",finish:"Final answer",mcp:"Connected app",subflow:"Another agent",resource:"Saved information",signal:"Notification",trigger:"Automatic start"})[c]??"Step":"mcp"===c?"MCP":`${c.charAt(0).toUpperCase()}${c.slice(1)}`})(a,v),color:"finish"===a.data.type?"success":"primary",variant:"outlined"}),!v&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",noWrap:!0,children:a.id})]}),(0,d.jsx)(u.A,{label:v?"Step name":"Node name",size:"small",fullWidth:!0,value:A,onChange:a=>C(a.target.value),onBlur:M,onKeyDown:a=>{"Enter"===a.key&&a.currentTarget.blur()}}),(0,d.jsx)(u.A,{label:v?"Short note (optional)":"What this step does",size:"small",fullWidth:!0,multiline:!0,minRows:2,maxRows:4,value:D,onChange:a=>F(a.target.value),onBlur:M,placeholder:v?"A reminder about why this step is here":"Optional note for future you"}),("process"===a.data.type||"start"===a.data.type)&&(0,d.jsx)(u.A,{label:v?"start"===a.data.type?"Helpful background":"What should the AI do?":"start"===a.data.type?"Starting context":"Task prompt",size:"small",fullWidth:!0,multiline:!0,minRows:5,maxRows:12,value:J,onChange:a=>K(a.target.value),onBlur:M,onKeyDown:a=>{(a.ctrlKey||a.metaKey)&&"Enter"===a.key&&(a.preventDefault(),M())},placeholder:"start"===a.data.type?v?"Anything the agent should always know":"Optional context injected when the flow starts":v?"Explain the job in everyday language":"Describe the result this step should produce",helperText:v?"Your change is applied when you leave this field.":"Changes apply when you leave the field. Ctrl/⌘ + Enter applies immediately."}),!v&&L.length>0&&(0,d.jsx)(i.default,{sx:a=>({p:1.25,borderRadius:2.5,border:`1px solid ${a.palette.divider}`,bgcolor:(0,$.X4)(a.palette.primary.main,.05)}),children:L.map(a=>(0,d.jsxs)(aZ.A,{direction:"row",justifyContent:"space-between",gap:1,mb:.5,children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:a.label}),(0,d.jsx)(j.A,{variant:"caption",fontWeight:700,noWrap:!0,children:a.value})]},a.label))}),(0,d.jsx)(k.A,{variant:v?"outlined":"contained",startIcon:(0,d.jsx)(B.A,{}),endIcon:(0,d.jsx)(a1.A,{}),onClick:()=>{let a=M();a&&f(a)},children:v?"More options":"Full settings"}),"process"===a.data.type&&w&&(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(a3.A,{}),onClick:()=>{let a=M();a&&w(a)},children:"Suggest connected tools"}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:v?"Most people only need the fields above. More options contains AI and connected-app controls.":"Single-click any node to inspect it. Double-click opens full settings immediately."})]}):(0,d.jsxs)(aZ.A,{spacing:1.5,children:[(0,d.jsxs)(aZ.A,{direction:"row",gap:1,alignItems:"center",children:[(0,d.jsx)(a2.A,{color:"primary",fontSize:"small"}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:800,children:v?"About your agent":"Flow details"}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:v?"Give it a clear name and say what it is for.":"Name, describe, and tune the whole workflow."})]})]}),(0,d.jsx)(u.A,{size:"small",label:v?"Agent name":"Flow Name",value:g,onChange:a=>l(a.target.value),error:!!h,helperText:h??(v?"Use a short name you will recognize.":"Renames save directly—Duplicate is a separate command."),fullWidth:!0}),x&&(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(a3.A,{}),onClick:x,children:"Check whole agent"}),(0,d.jsx)(u.A,{size:"small",label:v?"What should it help with?":"Description",value:o,onChange:a=>p(a.target.value),multiline:!0,minRows:3,maxRows:7,fullWidth:!0,placeholder:v?"Example: Turns long notes into a short, friendly summary":"What this flow accomplishes"}),!v&&(0,d.jsxs)(i.default,{sx:a=>({p:1.25,borderRadius:2.5,border:`1px solid ${a.palette.divider}`,bgcolor:(0,$.X4)(a.palette.primary.main,.04)}),children:[(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{size:"small",checked:"advanced"===q,onChange:a=>r(a.target.checked?"advanced":"guided")}),label:"advanced"===q?"Advanced":"Guided"}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",display:"block",children:"advanced"===q?"Runtime, routing, resources, signals, and scheduling are visible.":"The common authoring controls stay focused and calm."})]}),"advanced"===q&&(0,d.jsxs)(k.A,{variant:"outlined",onClick:t,startIcon:(0,d.jsx)(a2.A,{}),children:["Permission rules",s?` (${s})`:""]}),!v&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.A,{}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:"Shortcuts: A or / adds a step \xb7 Ctrl/⌘ S saves \xb7 Ctrl/⌘ Z undoes."})]})]})})]})};var a6=c(82605),a7=c(50062),a8=c(7675),a9=c(14328);let ba=(0,w.A)((0,d.jsx)("path",{d:"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1"}),"AddRounded"),bb=(0,w.A)((0,d.jsx)("path",{d:"M11 5v11.17l-4.88-4.88c-.39-.39-1.03-.39-1.42 0s-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0l6.59-6.59c.39-.39.39-1.02 0-1.41a.996.996 0 0 0-1.41 0L13 16.17V5c0-.55-.45-1-1-1s-1 .45-1 1"}),"ArrowDownwardRounded");var bc=c(26168);let bd=(0,w.A)((0,d.jsx)("path",{d:"M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82"}),"PlayArrowRounded"),be={process:"AI works on the task",subflow:"Ask another agent",signal:"Notify another automation"},bf=new Set(["Process Node","Subflow Node","Signal Node"]),bg=({children:a,complete:b=!1})=>(0,d.jsx)(i.default,{"aria-hidden":"true",sx:{display:"grid",width:34,height:34,flexShrink:0,placeItems:"center",borderRadius:"50%",color:b?"success.contrastText":"primary.contrastText",bgcolor:b?"success.main":"primary.main",fontWeight:850,boxShadow:a=>`0 8px 24px ${(0,$.X4)(b?a.palette.success.main:a.palette.primary.main,.28)}`},children:b?(0,d.jsx)(bc.A,{fontSize:"small"}):a}),bh=({nodes:a,orderedStepIds:b=[],selectedNodeId:c,flowName:g,flowNameError:h,onFlowNameChange:l,onSelectNode:m,onAddTask:n,onTry:o,isSaving:q=!1,hasAdvancedFeatures:r=!1,readyToTry:s=!0,needsAIConnection:t=!1,onSwitchAdvanced:v,models:w=[],aiAssistance:x="manual",selectedModelId:y,onChooseAssistance:z,onModelChange:A,onCheckPlausibility:C})=>{let[F,G]=(0,e.useState)(""),H=(0,e.useMemo)(()=>{let c=new Map(b.map((a,b)=>[a,b]));return a.filter(a=>["process","subflow","signal"].includes(a.data.type)).sort((a,b)=>(c.get(a.id)??Number.MAX_SAFE_INTEGER)-(c.get(b.id)??Number.MAX_SAFE_INTEGER)||(a.position?.y??0)-(b.position?.y??0))},[a,b]),I=!!g.trim()&&!/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(g.trim())&&!h,J=!!F.trim()&&!r&&"unasked"!==x&&("assisted"!==x||!!y),L=I&&H.length>0&&s&&!q,M=()=>{let a=F.trim();a&&(n(a),G(""))};return(0,d.jsx)(i.default,{"aria-label":"Guided agent builder",sx:{flex:1,minHeight:0,overflowY:"auto",px:{xs:.5,sm:1.5,lg:3},py:{xs:1,sm:1.5,lg:2.5}},children:(0,d.jsxs)(i.default,{sx:{width:"100%",maxWidth:780,mx:"auto"},children:[(0,d.jsxs)(aZ.A,{spacing:.8,sx:{mb:2.5},children:[(0,d.jsx)(E.A,{icon:(0,d.jsx)(a3.A,{}),label:"Simple setup",color:"primary",variant:"outlined",sx:{alignSelf:"flex-start"}}),(0,d.jsx)(j.A,{variant:"h4",children:"Build it like a simple recipe."}),(0,d.jsx)(j.A,{color:"text.secondary",children:"No diagrams or technical setup needed. Tell FLUJO what you want, one step at a time."})]}),(0,d.jsxs)(aZ.A,{spacing:1.5,children:[w.length>0&&z&&(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:"unasked"===x?"primary.main":"divider",borderRadius:4},children:(0,d.jsxs)(aZ.A,{spacing:1.5,children:[(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"h6",children:"May one of your connected AIs help build this?"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"If you say yes, choose the AI that should suggest connected tools and check the finished workflow."})]}),"unasked"===x?(0,d.jsxs)(aZ.A,{direction:{xs:"column",sm:"row"},spacing:1,children:[(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(a3.A,{}),onClick:()=>z("assisted"),children:"Yes, help me"}),(0,d.jsx)(k.A,{variant:"outlined",onClick:()=>z("manual"),children:"No, I’ll build it myself"})]}):(0,d.jsxs)(aZ.A,{direction:{xs:"column",sm:"row"},spacing:1.5,alignItems:{sm:"center"},children:[(0,d.jsx)(E.A,{color:"assisted"===x?"primary":"default",label:"assisted"===x?"AI help is on":"Manual setup"}),"assisted"===x&&A&&(0,d.jsxs)(a6.A,{size:"small",sx:{minWidth:260},children:[(0,d.jsx)(a7.A,{id:"guided-helper-model-label",children:"AI helper"}),(0,d.jsx)(a8.A,{labelId:"guided-helper-model-label",label:"AI helper",value:y??"",onChange:a=>A(String(a.target.value)),children:w.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName||a.name},a.id))})]}),(0,d.jsx)(k.A,{size:"small",onClick:()=>z("assisted"===x?"manual":"assisted"),children:"assisted"===x?"Turn off":"Turn on AI help"})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:I?"success.main":"divider",borderRadius:4,bgcolor:"background.paper"},children:(0,d.jsxs)(aZ.A,{direction:"row",spacing:1.5,alignItems:"flex-start",children:[(0,d.jsx)(bg,{complete:I,children:"1"}),(0,d.jsxs)(i.default,{sx:{flex:1,minWidth:0},children:[(0,d.jsx)(j.A,{variant:"h6",children:"Give your agent a name"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1.5},children:"Pick something you will recognize later, like “Trip planner” or “Weekly report helper.”"}),(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:"Agent name",value:g,error:!!h,helperText:h??(I?"Looks good.":"Use a short, memorable name."),onChange:a=>l(a.target.value),onFocus:a=>{/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(a.currentTarget.value)&&a.currentTarget.select()}})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:H.length>0?"success.main":"divider",borderRadius:4,bgcolor:"background.paper"},children:(0,d.jsxs)(aZ.A,{direction:"row",spacing:1.5,alignItems:"flex-start",children:[(0,d.jsx)(bg,{complete:H.length>0,children:"2"}),(0,d.jsxs)(i.default,{sx:{flex:1,minWidth:0},children:[(0,d.jsx)(j.A,{variant:"h6",children:H.length?"Add another step":"What is the goal of this workflow?"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:H.length?"Write it the same way you would explain the next job to a helpful person.":"This goal becomes the first AI step’s prompt, exactly as if you added that step yourself."}),r&&(0,d.jsx)(p.A,{severity:"info",action:(0,d.jsx)(k.A,{color:"inherit",size:"small",onClick:v,children:"Open expert view"}),sx:{mt:1.5},children:"This agent uses branches or expert settings. You can review it here and make structural changes in Expert view."}),(0,d.jsxs)(aZ.A,{spacing:1,sx:{mt:2},children:[(0,d.jsxs)(i.default,{sx:{px:1.5,py:1,borderRadius:3,color:"text.secondary",bgcolor:a=>(0,$.X4)(a.palette.primary.main,.055),border:1,borderColor:"divider"},children:[(0,d.jsx)(j.A,{variant:"caption",fontWeight:800,color:"primary.main",children:"WHEN"}),(0,d.jsx)(j.A,{variant:"body2",fontWeight:700,children:"Someone asks this agent for help"})]}),H.map((a,b)=>(0,d.jsxs)(f().Fragment,{children:[(0,d.jsx)(bb,{"aria-hidden":"true",sx:{alignSelf:"center",color:"text.disabled",fontSize:20}}),(0,d.jsx)(a9.A,{onClick:()=>m(a.id),sx:{display:"block",width:"100%",borderRadius:3,textAlign:"left"},children:(0,d.jsx)(D.A,{elevation:0,sx:{width:"100%",p:1.5,border:1,borderColor:c===a.id?"primary.main":"divider",borderRadius:3,bgcolor:c===a.id?a=>(0,$.X4)(a.palette.primary.main,.1):"background.default",boxShadow:c===a.id?a=>`0 0 0 3px ${(0,$.X4)(a.palette.primary.main,.12)}`:"none"},children:(0,d.jsxs)(aZ.A,{direction:"row",spacing:1.25,alignItems:"flex-start",children:[(0,d.jsx)(i.default,{sx:{display:"grid",width:30,height:30,flexShrink:0,placeItems:"center",borderRadius:2,color:"primary.contrastText",bgcolor:"primary.main",fontWeight:850},children:b+1}),(0,d.jsxs)(i.default,{sx:{minWidth:0,flex:1},children:[(0,d.jsx)(j.A,{variant:"overline",color:"primary.main",children:(a=>"subflow"===a?"Another agent":"signal"===a?"Notification":"AI step")(a.data.type)}),(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:800,children:(a=>{let b=a.data.label?.trim();return!b||bf.has(b)?be[a.data.type]??"Agent step":b})(a)}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.35,display:"-webkit-box",overflow:"hidden",WebkitBoxOrient:"vertical",WebkitLineClamp:2},children:(a=>{let b=String(a.data.properties?.promptTemplate??"").trim();return b||(a.data.description?.trim()?a.data.description.trim():"subflow"===a.data.type?"Hand this part of the job to another saved agent.":"signal"===a.data.type?"Let another automation know that this point was reached.":"Click this step to describe the result you want.")})(a)})]}),(0,d.jsx)(B.A,{color:"action",fontSize:"small"})]})})})]},a.id)),(0,d.jsx)(bb,{"aria-hidden":"true",sx:{alignSelf:"center",color:"text.disabled",fontSize:20}}),(0,d.jsxs)(i.default,{sx:{px:1.5,py:1,borderRadius:3,color:"text.secondary",bgcolor:a=>(0,$.X4)(a.palette.success.main,.055),border:1,borderColor:"divider"},children:[(0,d.jsx)(j.A,{variant:"caption",fontWeight:800,color:"success.main",children:"THEN"}),(0,d.jsx)(j.A,{variant:"body2",fontWeight:700,children:"Send the finished answer back"})]})]}),(0,d.jsxs)(aZ.A,{direction:{xs:"column",sm:"row"},spacing:1,alignItems:"stretch",sx:{mt:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,multiline:!0,minRows:2,maxRows:5,label:H.length?"Add another thing it should do":"Workflow goal",placeholder:"Example: Read my notes, find the important points, and explain them simply.",value:F,disabled:r,onChange:a=>G(a.target.value),onKeyDown:a=>{(a.ctrlKey||a.metaKey)&&"Enter"===a.key&&J&&(a.preventDefault(),M())}}),(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(ba,{}),disabled:!J,onClick:M,sx:{minWidth:{sm:150}},children:H.length?"Add this step":"Create goal step"})]})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:L?"primary.main":"divider",borderRadius:4,bgcolor:a=>(0,$.X4)(a.palette.primary.main,L?.075:.025)},children:(0,d.jsxs)(aZ.A,{direction:{xs:"column",sm:"row"},spacing:1.5,alignItems:{sm:"center"},children:[(0,d.jsx)(bg,{children:"3"}),(0,d.jsxs)(i.default,{sx:{flex:1},children:[(0,d.jsx)(j.A,{variant:"h6",children:"Try it with a real question"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"FLUJO will save your changes, then open a normal chat so you can see how it feels."}),t&&H.some(a=>"process"===a.data.type)&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:"This step still needs an AI. Select the step, choose More options, and connect the AI you want to use."})]}),o&&(0,d.jsxs)(aZ.A,{spacing:1,children:[C&&"assisted"===x&&(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(a3.A,{}),disabled:0===H.length,onClick:C,children:"Check setup with AI"}),(0,d.jsx)(k.A,{size:"large",variant:"contained",startIcon:(0,d.jsx)(bd,{}),disabled:!L,onClick:o,children:q?"Saving…":"Try my agent"})]})]})})]})]})})};var bi=c(77028);let bj=(0,w.A)((0,d.jsx)("path",{d:"M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35 6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54 9.9c.92-2.34.44-5.1-1.45-6.99"}),"BuildRounded"),bk=(0,w.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M9 17H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m0-4H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m0-4H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m9.7 2.12-3.17 3.17c-.39.39-1.03.39-1.42 0l-1.41-1.42a.996.996 0 0 1 0-1.41c.39-.39 1.02-.39 1.41 0l.71.71 2.47-2.47c.39-.39 1.02-.39 1.41 0l.01.01c.38.39.38 1.03-.01 1.41"}),"FactCheckRounded");function bl({open:a,flow:b,relatedFlows:c=[],nodeId:f,modelId:g,models:h=[],onApply:l,onApplyRelatedFlows:m,onClose:n}){let[o,t]=(0,e.useState)("suggesting"),[u,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(new Set),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(b),[H,I]=(0,e.useState)(g??""),[J,L]=(0,e.useState)(null),M=async a=>{t("checking"),L(null);try{let b=await O.g.checkPlausibility({flow:a,relatedFlows:c,modelId:H||g||void 0,intendedContext:"chat"});A(b),t("plausibility")}catch(a){L(a instanceof Error?a.message:"Could not check this flow."),t("plausibility")}},N=(0,e.useMemo)(()=>u?.suggestions.filter(a=>x.has(`${a.server}\u0000${a.tool}`))??[],[x,u]),P=(0,e.useMemo)(()=>{if(!z)return 0;let a=new Set([b.id,...c.map(a=>a.id)]);return z.patches.filter(b=>a.has(b.flowId)).length},[b.id,z,c]),Q=async()=>{if(f&&H){t("suggesting"),L(null);try{let a=await O.g.suggestToolsForStep({flow:B,nodeId:f,modelId:H,goal:B.description});w(a),y(new Set(a.suggestions.map(a=>`${a.server}\u0000${a.tool}`))),0===a.suggestions.length?await M(B):t("tools")}catch(a){L(a instanceof Error?a.message:"Could not suggest tools."),t("tools")}}},R=async()=>{if(f&&u){t("suggesting"),L(null);try{let a=await O.g.applyToolsToStep({flow:B,nodeId:f,selections:N,proposedPrompt:u.proposedPrompt});C(a),l(a),await M(a)}catch(a){L(a instanceof Error?a.message:"Could not connect the approved tools."),t("tools")}}},S="suggesting"===o||"checking"===o;return(0,d.jsxs)(q.A,{open:a,onClose:S?void 0:n,fullWidth:!0,maxWidth:"md",children:[(0,d.jsxs)(r.A,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(a3.A,{color:"primary"}),"plausibility"===o||"checking"===o?"Plausibility review":"Connected tool suggestions"]}),(0,d.jsxs)(s.A,{dividers:!0,children:[S&&(0,d.jsxs)(aZ.A,{alignItems:"center",spacing:1.5,sx:{py:5},children:[(0,d.jsx)(F.default,{}),(0,d.jsx)(j.A,{color:"text.secondary",children:"suggesting"===o?"Finding useful connected tools…":"Checking the complete flow and how it is called…"})]}),J&&!S&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:J}),"tools"===o&&!u&&(0,d.jsx)(aZ.A,{spacing:2,children:0===h.length?(0,d.jsx)(p.A,{severity:"warning",children:"Connect an AI model before asking for tool suggestions."}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p.A,{severity:"info",children:"Choose which connected AI should review this step. FLUJO will not pick one silently."}),(0,d.jsxs)(a6.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(a7.A,{id:"assistance-model-label",children:"AI helper"}),(0,d.jsx)(a8.A,{labelId:"assistance-model-label",label:"AI helper",value:H,onChange:a=>I(String(a.target.value)),children:h.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName||a.name},a.id))})]})]})}),"tools"===o&&u&&(0,d.jsxs)(aZ.A,{spacing:1.5,children:[(0,d.jsx)(p.A,{severity:"info",children:"Nothing changes until you approve. FLUJO will connect only the checked tools and add their pills to this step's prompt."}),0===u.suggestions.length?(0,d.jsx)(p.A,{severity:"success",children:"No connected MCP tool is needed for this step."}):u.suggestions.map(a=>{let b=`${a.server}\u0000${a.tool}`;return(0,d.jsx)(D.A,{variant:"outlined",sx:{p:1.25},children:(0,d.jsx)(G.A,{control:(0,d.jsx)(bi.A,{checked:x.has(b),onChange:a=>{y(c=>{let d=new Set(c);return a.target.checked?d.add(b):d.delete(b),d})}}),label:(0,d.jsxs)(i.default,{children:[(0,d.jsxs)(aZ.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,d.jsx)(E.A,{size:"small",label:a.server}),(0,d.jsx)(j.A,{fontWeight:800,children:a.tool})]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.reason})]})})},b)}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",children:"Prompt preview"}),(0,d.jsx)(D.A,{variant:"outlined",sx:{p:1.25,mt:.5,whiteSpace:"pre-wrap",maxHeight:220,overflow:"auto"},children:(0,d.jsx)(j.A,{variant:"body2",component:"pre",sx:{m:0,fontFamily:"inherit",whiteSpace:"pre-wrap"},children:u.proposedPrompt})})]})]}),"plausibility"===o&&z&&(0,d.jsxs)(aZ.A,{spacing:1.5,children:[(0,d.jsx)(aZ.A,{direction:"row",gap:1,flexWrap:"wrap",children:z.contexts.map(a=>(0,d.jsx)(E.A,{label:a.label},`${a.kind}-${a.sourceId??""}`))}),0===z.issues.length?(0,d.jsx)(p.A,{severity:"success",children:"The flow is plausible in its current invocation context."}):z.issues.map((a,c)=>{let e=z.repairedFlows.find(b=>b.id===a.flowId);return(0,d.jsxs)(p.A,{severity:a.severity,children:[e&&e.id!==b.id?`${e.name}: `:"",a.message]},`${a.code}-${a.flowId??""}-${a.nodeId??""}-${c}`)}),P>0&&(0,d.jsxs)(p.A,{severity:"info",children:[P," recommended input/output repair",1===P?"":"s"," can be applied to this draft."]}),z.patches.length>P&&(0,d.jsxs)(p.A,{severity:"warning",children:[z.patches.length-P," repair",z.patches.length-P==1?"":"s"," belong to saved helper flows. Open those helpers separately to apply them."]})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:n,disabled:S,children:"Close"}),"tools"===o&&!u&&h.length>0&&(0,d.jsx)(k.A,{variant:"contained",disabled:!H,onClick:()=>void Q(),children:"Suggest connected tools"}),"tools"===o&&u&&0===u.suggestions.length&&(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(bk,{}),onClick:()=>void M(B),children:"Check whole flow"}),"tools"===o&&u&&u.suggestions.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>void M(B),children:"Skip tools"}),(0,d.jsxs)(k.A,{variant:"contained",startIcon:(0,d.jsx)(bj,{}),disabled:0===N.length,onClick:()=>void R(),children:["Connect ",N.length," and fix prompt"]})]}),"plausibility"===o&&z&&P>0?(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(bk,{}),onClick:()=>{l(z.repairedFlow);let a=new Map(z.repairedFlows.map(a=>[a.id,a]));m?.(c.map(b=>a.get(b.id)??b)),n()},children:"Apply recommended settings"}):null]})]})}var bm=c(30137),bn=c(80518);function bo({currentLabel:a,nameIsCustom:b,defaultLabel:c,previousAutoLabel:d,nextAutoLabel:e}){return!0===b?a&&a.length>0?a:e:!a||0===a.length||a===c||void 0!==d&&d.length>0&&a===d?e:a}let bp=(0,L.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var bq=c(63650);let br=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection");function bs(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}let bt=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),bu=({nodeData:a,setNodeData:b})=>a?(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,children:"Node Configuration"}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Node Label",value:a.label||"",onChange:a=>b(b=>({...b,label:a.target.value,properties:{...b?.properties,nameIsCustom:!0}})),margin:"normal"}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Description",value:a.description||"",onChange:c=>b({...a,description:c.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"})]}):null;var bv=c(38233),bw=c(93083),bx=c(24330),by=c(77127),bz=c(45231);let bA=({isLoadingModels:a,loadError:b,models:c,selectedModelId:e,handleModelSelect:f,isModelBound:g,handleUnbindModel:h})=>{let l=(0,bz.E)("models",c),m=a=>({key:a.id,content:(a=>(0,d.jsx)(by.A,{model:a,selectable:!0,selected:e===a.id,onSelect:f}))(a)}),n=l.items.map(m),o=l.groups?l.groups.map(a=>({...a,items:a.items.map(m)})):null;return(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Bind to Model"}),(0,d.jsx)(i.default,{role:"radiogroup","aria-label":"Bind to model",children:(0,d.jsx)(bx.A,{isLoading:a,error:b,loadingMessage:"Loading models...",emptyMessage:"No models available. Add some in the Model Manager.",searchable:!0,searchPlaceholder:"Search models…",searchTerm:l.searchTerm,onSearchChange:l.setSearchTerm,columns:{xs:12,sm:6},items:n,groups:o,collapsedKeys:l.collapsedKeys,onToggleGroup:l.toggleGroup})}),!a&&!b&&c.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bv.A,{children:e?"This node will use the selected model for processing.":"Select a model to bind this node to."}),g&&(0,d.jsx)(i.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(bw.A,{}),onClick:h,color:"primary",variant:"outlined",size:"small",children:"Unbind Model"})})]})]})};var bB=c(56154),bC=c(30818),bD=c(27114),bE=c(53222),bF=c(36647),bG=c(40973),bH=c(9604),bI=c(17332),bJ=c(63908),bK=c(21570),bL=c(68774);let bM=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),bN=({isLoadingServers:a,connectedMcpNodes:b,availableServers:c,onConnectMcpServer:f,serverToolsMap:g,serverStatuses:h,isLoadingTools:l,handleSelectToolServer:o,handleInsertToolBinding:p,selectedToolServerNodeId:q,selectedNodeId:r,isLoadingSelectedServerTools:s,promptBuilderRef:t,handleRetryServer:v,handleRestartServer:w})=>{let x=q??b[0]?.nodeId??null,[z,A]=(0,e.useState)({}),[B,C]=(0,e.useState)(!1),E=(c??[]).filter(a=>!b.some(b=>b.serverName===a.name)),G=!!f&&E.length>0,H=(0,bz.E)("mcp",E),I=a=>({key:a.name,content:(a=>(0,d.jsx)(bL.A,{name:a.name,status:a.status||"disconnected",path:a.rootPath||"",enabled:!a.disabled,transport:a.transport||"stdio",pickerMode:!0,onClick:()=>{var b;return b=a.name,void(C(!1),f?.(b))}}))(a)}),J=H.items.map(I),K=H.groups?H.groups.map(a=>({...a,items:a.items.map(I)})):null,L=(0,d.jsx)(bK.A,{open:B,onClose:()=>C(!1),title:"Connect an MCP server",description:"Pick a server to add to this flow and wire to this Process node.",emptyMessage:"No more servers to connect.",searchable:!0,searchPlaceholder:"Search servers…",searchTerm:H.searchTerm,onSearchChange:H.setSearchTerm,columns:{xs:12,sm:6},items:J,groups:K,collapsedKeys:H.collapsedKeys,onToggleGroup:H.toggleGroup}),[M,N]=(0,e.useState)(""),[O,P]=(0,e.useState)({}),Q=(a,b,c)=>{if(a!==x){bM.debug("Node tab not selected, selecting node first",{selectedNodeId:a,serverName:b,toolName:c}),T(a);return}b&&c?(bM.debug("Inserting tool binding",{serverName:b,toolName:c}),p(b,c)):bM.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:b,toolName:c})},R=a=>{try{let c=b.find(b=>b.nodeId===a);if(!c)return bM.warn(`Could not find connected MCP node with ID ${a}`),[];let d=c.enabledTools||[];return bM.debug(`Enabled tools for node ${a}: ${JSON.stringify(d)}`),Array.isArray(d)?d:[]}catch(b){return bM.error(`Error getting enabled tools for node ${a}:`,b),[]}},S=(a,b,c)=>{try{if(!c||!Array.isArray(c))return bM.warn(`Tools array is not available or not an array for server ${b}`),[];let d=R(a),e=c;if(d.length>0?e=c.filter(a=>a&&a.name&&d.includes(a.name)):(bM.debug(`No tools explicitly enabled for node ${a}, showing none.`),e=[]),M.trim()){let a=M.toLowerCase().trim();e=e.filter(b=>b.name&&b.name.toLowerCase().includes(a)||b.description&&b.description.toLowerCase().includes(a)||b.inputSchema&&JSON.stringify(b.inputSchema).toLowerCase().includes(a))}return e}catch(d){return bM.error(`Error filtering tools for node ${a} (server ${b}):`,d),c||[]}},T=a=>{o(a)},U=async(a,b)=>{b.stopPropagation(),bM.debug(`Retry button clicked for server: ${a}`),A(b=>({...b,[a]:!0}));try{v&&await v(a)}finally{setTimeout(()=>{A(b=>({...b,[a]:!1}))},500)}},V=async(a,b)=>{b.stopPropagation(),bM.debug(`Restart button clicked for server: ${a}`),A(b=>({...b,[a]:!0}));try{w&&await w(a)}finally{setTimeout(()=>{A(b=>({...b,[a]:!1}))},500)}};(0,e.useEffect)(()=>{b.length>0&&!q&&o(b[0].nodeId)},[b,q,o]);let W=b.find(a=>a.nodeId===x),X=W?.serverName;return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Connected MCP Servers and Tools"}),a?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:"Loading connected MCP nodes..."})]}):0===b.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:G?"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."}),G&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,d.jsx)(k.A,{variant:"contained",size:"small",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>C(!0),children:"Connect MCP Server"})}),L]}):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(a$.A,{value:x||b[0]?.nodeId||"",onChange:(a,b)=>T(b),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:b.map(a=>{if(!a||!a.nodeId||!a.serverName)return bM.warn("Skipping invalid MCP node in tabs:",a),null;let b=a.serverName,c=a.nodeId,e=a.status;z[b],l[b];let f=g[b]||[],h=R(c);return S(c,b,f).length,(0,d.jsx)(a_.A,{value:c,label:(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(j.A,{variant:"body2",sx:{color:"connected"===e?"success.main":"error"===e?"error.main":"text.secondary"},children:b}),h.length>0&&(0,d.jsx)(bB.A,{badgeContent:h.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==e?.7:1}},c)})}),G&&(0,d.jsx)(n.A,{title:"Connect another MCP server",children:(0,d.jsx)(m.A,{size:"small",onClick:()=>C(!0),sx:{ml:1},children:(0,d.jsx)(y.A,{fontSize:"small"})})}),L]}),W&&X&&(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,d.jsx)(n.A,{title:`Retry connection for ${X}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:a=>U(X,a),disabled:z[X]||l[X],children:z[X]?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bE.A,{fontSize:"small"})})})}),"connected"===W.status&&w&&(0,d.jsx)(n.A,{title:`Restart server ${X}`,children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:a=>V(X,a),disabled:z[X],sx:{ml:1},children:(0,d.jsx)(bF.A,{fontSize:"small"})})})})]}),(0,d.jsx)(u.A,{placeholder:"Search enabled tools...",variant:"outlined",size:"small",fullWidth:!0,value:M,onChange:a=>N(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bG.A,{fontSize:"small"})})}}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:W&&X&&(()=>{let a=W.nodeId,b=W.serverName;if("connected"!==W.status)return(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(j.A,{color:"text.secondary",children:["Server '",b,"' is not connected. Connect to view tools."]})},a);if(l[b])return(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(F.default,{size:24})},a);let c=g[b]||[],e=S(a,b,c);if(0===e.length){let b=R(a).length;return(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:M.trim()?`No enabled tools match "${M}" for this node.`:0===b?"No tools are enabled for this node instance. Enable tools in the MCP Node properties.":"No tools available or enabled for this node instance."})},a)}return(0,d.jsx)(au.A,{disablePadding:!0,children:e.map(c=>{let e,f=(e=c.name,`${a}::${e}`),g=!!O[f],h=c.description||"No description available",k=(a=>{let b=Object.keys(a?.properties??{}).length;if(0===b)return"No parameters";let c=Array.isArray(a?.required)?a.required.length:0;return`${b} parameter${1===b?"":"s"}${c>0?` \xb7 ${c} required`:""}`})(c.inputSchema);return(0,d.jsx)(bC.A,{variant:"outlined",role:"button",tabIndex:0,"aria-label":`Add ${c.name} from ${b} to prompt`,onClick:()=>Q(a,b,c.name),onKeyDown:d=>{d.target===d.currentTarget&&("Enter"===d.key||" "===d.key)&&(d.preventDefault(),Q(a,b,c.name))},sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"},"&:focus-visible":{outline:"2px solid",outlineColor:"primary.main",outlineOffset:1}},children:(0,d.jsxs)(bD.A,{sx:{p:1.25,"&:last-child":{pb:1.25}},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"flex-start",gap:1},children:[(0,d.jsxs)(i.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bH.A,{fontSize:"small",sx:{mr:1,color:"primary.main",flexShrink:0}}),(0,d.jsx)(i.default,{component:"span",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name})]}),(0,d.jsx)(n.A,{title:h,describeChild:!0,placement:"top-start",children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",tabIndex:0,sx:{mt:.5,display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden"},children:h})}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:k})]}),(0,d.jsx)(n.A,{title:`${g?"Collapse":"Expand"} ${c.name} details`,children:(0,d.jsx)(m.A,{size:"small","aria-label":`${g?"Collapse":"Expand"} ${c.name} details`,"aria-expanded":g,"aria-controls":`${f}-details`,onClick:a=>((a,b)=>{b.stopPropagation(),P(b=>({...b,[a]:!b[a]}))})(f,a),children:g?(0,d.jsx)(bJ.A,{}):(0,d.jsx)(bI.A,{})})})]}),g&&(0,d.jsxs)(i.default,{id:`${f}-details`,sx:{mt:1,pt:1,borderTop:1,borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{whiteSpace:"pre-wrap"},children:h}),c.inputSchema&&(a=>a&&a.properties?(0,d.jsxs)(i.default,{sx:{mt:1},children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(i.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(i.default,{sx:{mb:.5},children:[(0,d.jsxs)(j.A,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"})]},b))})]}):null)(c.inputSchema)]})]})},c.name)})},a)})()})]})]})},bO=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),bP=({primary:a,secondary:b,chip:c,onClick:e})=>(0,d.jsx)(bC.A,{variant:"outlined",onClick:e,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,d.jsx)(bD.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ad.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:b})]}),c&&(0,d.jsx)(E.A,{size:"small",label:c,sx:{ml:1,flexShrink:0}})]})})}),bQ=({connectedMcpNodes:a,handleInsertResourceBinding:b,promptBuilderRef:c})=>{let[f,g]=(0,e.useState)(null),[h,k]=(0,e.useState)([]),[l,m]=(0,e.useState)([]),[n,o]=(0,e.useState)(!1),[q,r]=(0,e.useState)(),[s,t]=(0,e.useState)(""),v=a.find(a=>a.nodeId===f),w=v?.serverName;(0,e.useEffect)(()=>{a.length>0&&!f&&g(a[0].nodeId)},[a,f]);let x=(0,e.useCallback)(async a=>{o(!0),r(void 0);try{let b=await P.S.listServerResources(a);k(b.resources||[]),m(b.resourceTemplates||[]),r(b.error)}catch(b){bO.warn(`Failed to load resources for ${a}`,b),r(b instanceof Error?b.message:"Failed to load resources")}finally{o(!1)}},[]);(0,e.useEffect)(()=>{w?x(w):(k([]),m([]))},[w,x]);let y=a=>a.toLowerCase().includes(s.toLowerCase().trim()),z=s.trim()?h.filter(a=>y(a.name||"")||y(a.uri)||y(a.description||"")):h,A=s.trim()?l.filter(a=>y(a.name||"")||y(a.uriTemplate)||y(a.description||"")):l,B=a=>{w&&a&&b(w,a)};return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Give this step access to…"}),(0,d.jsx)(j.A,{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===a.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:"No MCP nodes connected to this Process node."}),(0,d.jsx)(j.A,{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,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(a$.A,{value:f||a[0]?.nodeId||"",onChange:(a,b)=>g(b),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:a.map(a=>(0,d.jsx)(a_.A,{value:a.nodeId,label:(0,d.jsx)(j.A,{variant:"body2",sx:{color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary"},children:a.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==a.status?.7:1}},a.nodeId))}),(0,d.jsx)(u.A,{placeholder:"Search resources…",variant:"outlined",size:"small",fullWidth:!0,value:s,onChange:a=>t(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bG.A,{fontSize:"small"})})}}),q&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:2},children:q}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:v&&"connected"!==v.status?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsxs)(j.A,{color:"text.secondary",children:["Server '",w,"' is not connected. Connect to view resources."]})}):n?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(F.default,{size:24})}):0===z.length&&0===A.length?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:s.trim()?`No resources match "${s}".`:"This server does not publish any resources."})}):(0,d.jsxs)(au.A,{disablePadding:!0,children:[z.map(a=>(0,d.jsx)(bP,{primary:a.name||a.uri,secondary:a.description||a.uri,chip:a.mimeType,tooltip:`Add ${a.name||a.uri} to prompt`,onClick:()=>B(a.uri)},a.uri)),A.map(a=>(0,d.jsx)(bP,{primary:a.name||a.uriTemplate,secondary:a.description||a.uriTemplate,chip:"template",tooltip:`Add template ${a.uriTemplate} to prompt (fill in variables, e.g. with \${global:VAR})`,onClick:()=>B(a.uriTemplate)},a.uriTemplate))]})})]})]})},bR=(0,w.A)((0,d.jsx)("path",{d:"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7zm-6 .67 2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z"}),"SaveAlt"),bS=({wiredResources:a,promptBuilderRef:b})=>0===a.length?null:(0,d.jsxs)(i.default,{sx:{mb:3},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Wired resource nodes"}),(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",sx:{mb:1,display:"block"},children:["Resource nodes connected to this step on the canvas. A ",(0,d.jsx)("strong",{children:"produce"})," node is written by the step's ",(0,d.jsx)("code",{children:"write_resource"})," tool; a ",(0,d.jsx)("strong",{children:"consume"})," node's contents are injected into the prompt when the step runs."]}),(0,d.jsx)(au.A,{disablePadding:!0,children:a.map(a=>(0,d.jsx)(bC.A,{variant:"outlined",sx:{mb:1,mt:1},children:(0,d.jsx)(bD.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ad.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a.label]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:"run"===a.scope?`Temporary Data${a.runName?` "${a.runName}"`:" (no name set)"}`:`MCP resource${a.uri?` ${a.uri}`:""}${a.boundServer?` on ${a.boundServer}`:""}`})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",flexShrink:0,ml:1,gap:.5},children:["run"===a.scope&&a.runName&&(0,d.jsx)(n.A,{title:`Insert \${res:${a.runName}} into the prompt`,children:(0,d.jsx)(E.A,{size:"small",icon:(0,d.jsx)(bR,{}),label:`\${res:${a.runName}}`,onClick:()=>(a=>{a&&b.current&&b.current.insertText(`\${res:${a}}`)})(a.runName),clickable:!0,sx:{maxWidth:220}})}),(0,d.jsx)(E.A,{size:"small",color:"produce"===a.role?"secondary":"default",label:a.role})]})]})})},`${a.role}-${a.id}`))})]}),bT=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),bU=({handoffTools:a,isLoadingHandoffTools:b,handleInsertToolBinding:c,promptBuilderRef:f})=>{let[g,h]=(0,e.useState)(""),k=a.filter(a=>{if(!g.trim())return!0;let b=g.toLowerCase().trim();return a.name&&a.name.toLowerCase().includes(b)||a.description&&a.description.toLowerCase().includes(b)});return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Agent Handoff Tools"}),b?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:"Loading handoff tools..."})]}):0===a.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:"No handoff tools available for this node."}),(0,d.jsx)(j.A,{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,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(u.A,{placeholder:"Search handoff tools...",variant:"outlined",size:"small",fullWidth:!0,value:g,onChange:a=>h(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bG.A,{fontSize:"small"})})}}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===k.length?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:g.trim()?`No handoff tools match "${g}".`:"No handoff tools available."})}):(0,d.jsx)(au.A,{disablePadding:!0,children:k.map(a=>(0,d.jsxs)(bC.A,{variant:"outlined",onClick:()=>{a.name?(bT.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:a.name}),c("handoff",a.name)):bT.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:a.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,d.jsx)(bD.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bH.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),a.name]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.description||"No description available"}),a.inputSchema&&(a=>a&&a.properties&&0!==Object.keys(a.properties).length?(0,d.jsxs)(i.default,{sx:{mt:1},children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:"Parameters:"}),(0,d.jsx)(i.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(i.default,{sx:{mb:.5},children:[(0,d.jsxs)(j.A,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||"No description"}),c.enum&&(0,d.jsx)(i.default,{sx:{pl:2,mt:.5},children:(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",children:["Options: ",c.enum.join(", ")]})})]},b))})]}):(0,d.jsx)(i.default,{sx:{mt:1},children:(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:"No parameters required."})}))(a.inputSchema)]})})}),(0,d.jsx)(n.A,{title:`Add ${a.name} handoff tool to prompt`,children:(0,d.jsx)(i.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},a.name))})})]})]})};var bV=c(85838);let bW=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),bX=(0,e.forwardRef)((a,b)=>{let{promptTemplate:c,handlePromptChange:f,excludeModelPrompt:g,excludeStartNodePrompt:h,excludeSystemPrompt:l,nodeData:m,flowId:n,suggestions:o}=a,[q,r]=(0,e.useState)(""),[s,t]=(0,e.useState)(!1),[u,v]=(0,e.useState)(null),w=(0,e.useRef)(null);(0,e.useImperativeHandle)(b,()=>({insertText:a=>{w.current&&w.current.insertText(a)},getMode:()=>w.current?w.current.getMode():"raw"}));let x=async()=>{if(bW.debug("fetchRenderedPrompt called with:",{flowId:n,nodeId:m?.id}),!n||!m||!m.id)return void v("Flow ID or Node ID is missing");t(!0),v(null);try{let a=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:n,nodeId:m.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:g,excludeStartNodePrompt:h,excludeSystemPrompt:l}})}),b=await a.json();if(!a.ok)throw Error(b.error||"Failed to render prompt");bW.debug("Rendered prompt received",{promptLength:b.prompt?.length}),r(b.prompt+"\n\n [Messages sent by User]")}catch(a){bW.error("Error fetching rendered prompt",a),v(a instanceof Error?a.message:"An unknown error occurred")}finally{t(!1)}};return(0,e.useEffect)(()=>{w.current&&"preview"===w.current.getMode()&&x()},[c,g,h,l,n,m?.id]),(0,d.jsx)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:(0,d.jsx)(bV.A,{ref:w,value:c,onChange:f,label:"",height:"100%",onModeChange:a=>{"preview"===a&&x()},customPreviewRenderer:()=>s?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(F.default,{size:40})}):u?(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},action:(0,d.jsx)(k.A,{color:"inherit",size:"small",onClick:x,children:"Retry"}),children:u}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:n?"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,d.jsxs)(i.default,{sx:{p:2},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:"Complete Rendered Prompt"}),(0,d.jsx)(D.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,d.jsx)(i.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:q||"No rendered prompt available. Please check your flow configuration."})})]}),suggestions:o})})});bX.displayName="PromptTemplateEditor";let bY=(0,w.A)((0,d.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"}),"History"),bZ=(0,w.A)((0,d.jsx)("path",{d:"M4 9h16v2H4zm0 4h10v2H4z"}),"ShortText"),b$=(0,w.A)((0,d.jsx)("path",{d:"M3 10h11v2H3zm0-2h11V6H3zm0 8h7v-2H3zm15.01-3.13.71-.71c.39-.39 1.02-.39 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71-5.3 5.3V21h2.12l5.3-5.3z"}),"EditNote");var b_=c(53830);let b0=(0,w.A)((0,d.jsx)("path",{d:"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"}),"ChatBubbleOutline"),b1=({selected:a,icon:b,title:c,description:e,onClick:f})=>(0,d.jsxs)(i.default,{role:"radio","aria-checked":a,tabIndex:0,onClick:f,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},sx:{flex:1,minWidth:180,position:"relative",p:2,borderRadius:2,border:2,borderColor:a?"primary.main":"divider",bgcolor:a?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:a?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:a=>`0 0 0 3px ${a.palette.primary.light}`}},children:[a&&(0,d.jsx)(aC.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:a?"primary.main":"text.secondary"},children:[b,(0,d.jsx)(j.A,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:c})]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:e})]}),b2=({excludeModelPrompt:a,setExcludeModelPrompt:b,excludeStartNodePrompt:c,setExcludeStartNodePrompt:e,excludeSystemPrompt:f,setExcludeSystemPrompt:g,inputMode:h,setInputMode:k,isolatedPrompt:l,setIsolatedPrompt:m,allowCallerPrompt:n,setAllowCallerPrompt:o,outputMode:p,setOutputMode:q,isModelBound:r,models:s,nodeData:t})=>(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",mb:2},children:[(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:a,onChange:a=>b(a.target.checked),color:"primary",size:"small"}),label:"Exclude Model Prompt"}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:c,onChange:a=>e(a.target.checked),color:"primary",size:"small"}),label:"Exclude Start Node Prompt"}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:f,onChange:a=>g(a.target.checked),color:"primary",size:"small"}),label:"Exclude System Prompt"})]}),(0,d.jsxs)(i.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,d.jsx)(j.A,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:"Prompt Rendering Order:"}),(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!c&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(j.A,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:"1. Start Node Prompt"}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(from the Start node in this flow)"})]}),!a&&r&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[c?"1.":"2."," Model Prompt"]}),(0,d.jsxs)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:["(from the selected model: ",(()=>{let a=t.properties?.boundModel;if(!a)return"None";let b=s.find(b=>b.id===a);return b?b.displayName||b.name:t.properties?.modelName||"None"})(),")"]})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{fontWeight:"medium"},children:[c||a||!r?c&&(a||!r)?"1.":"2.":"3."," This Node's Prompt"]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"(defined in the Task tab)"})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{fontWeight:"medium"},children:[c||a||!r?c&&(a||!r)?"2.":"3.":"4."," ","isolated"===h?"Isolated prompt":"latest-message"===h?"Latest message only":"Conversation History"]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"isolated"===h?"(the prompt below, as the user message)":"latest-message"===h?"(the last user message + the last agent response)":"(coming from ChatCompletion endpoint)"})]})]})]}),(0,d.jsxs)(i.default,{sx:{mb:2},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:"What does the model receive?"}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":"Model input",sx:{display:"flex",gap:1.5,flexWrap:"wrap"},children:[(0,d.jsx)(b1,{selected:"full-history"===h,onClick:()=>k("full-history"),icon:(0,d.jsx)(bY,{fontSize:"small"}),title:"Full conversation",description:"The model sees this node's prompt plus the whole conversation so far. The default."}),(0,d.jsx)(b1,{selected:"latest-message"===h,onClick:()=>k("latest-message"),icon:(0,d.jsx)(bZ,{fontSize:"small"}),title:"Latest message only",description:"The model sees this node's prompt plus the most recent exchange — the last user message and the last agent response — plus this turn's own in-flight tool calls and results."}),(0,d.jsx)(b1,{selected:"isolated"===h,onClick:()=>k("isolated"),icon:(0,d.jsx)(b$,{fontSize:"small"}),title:"Isolated",description:"The conversation is ignored. The model sees this node's prompt plus the prompt below, sent as the user message."})]}),"isolated"===h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(G.A,{sx:{mt:1,display:"block"},control:(0,d.jsx)(bi.A,{checked:n,onChange:a=>o(a.target.checked)}),label:"Let the caller pass a prompt"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{ml:4,mt:-.5},children:"When on, a step that hands off to this node can attach an instruction through its handoff tool, overriding the prompt below. The prompt below is then used only as a default when the caller sends none."}),(0,d.jsx)(u.A,{fullWidth:!0,label:n?"Default prompt (used if the caller sends none)":"Isolated prompt",value:l,onChange:a=>m(a.target.value),margin:"normal",multiline:!0,rows:2,helperText:n?"The default user message. A routing model may override it via the handoff tool. The prior conversation is not shown to the model (it is still kept in the transcript for later nodes).":"Sent to the model as the user message. The prior conversation is not shown to the model (it is still kept in the transcript for later nodes)."})]})]}),(0,d.jsxs)(i.default,{sx:{mb:1},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:"What do later steps see of this step's work?"}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":"Model output",sx:{display:"flex",gap:1.5,flexWrap:"wrap"},children:[(0,d.jsx)(b1,{selected:"full-conversation"===p,onClick:()=>q("full-conversation"),icon:(0,d.jsx)(b_.A,{fontSize:"small"}),title:"Full conversation",description:"Later steps see everything this step did — tool calls, tool results, and intermediate turns. The default."}),(0,d.jsx)(b1,{selected:"latest-message"===p,onClick:()=>q("latest-message"),icon:(0,d.jsx)(b0,{fontSize:"small"}),title:"Latest message only",description:"Later steps see only this step's final response. Its tool calls and results are hidden from later models to save context tokens (they stay visible in the chat and log)."})]})]})]}),b3=({nodeData:a,handlePropertyChange:b,properties:c})=>(0,d.jsx)(d.Fragment,{children:c.length>0&&(0,d.jsxs)(i.default,{sx:{mt:3},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Node Properties"}),c.map(c=>(c=>{if(!a)return null;let e=a.properties?.[c.key]??"";switch(c.type){case"text":return(0,d.jsx)(u.A,{fullWidth:!0,label:c.label,multiline:c.multiline,rows:c.multiline?4:1,value:e,onChange:a=>b(c.key,a.target.value),margin:"normal",helperText:c.helperText},c.key);case"number":return(0,d.jsx)(u.A,{fullWidth:!0,type:"number",label:c.label,value:e,inputProps:{min:c.min,max:c.max,step:c.step},onChange:a=>{let d=a.target.value;b(c.key,""===d?void 0:Number(d))},margin:"normal",helperText:c.helperText},c.key);case"select":return(0,d.jsxs)(a6.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(a7.A,{children:c.label}),(0,d.jsx)(a8.A,{value:e||"",label:c.label,onChange:a=>b(c.key,a.target.value),children:c.options?.map(a=>(0,d.jsx)(K.A,{value:a,children:a},a))})]},c.key);case"boolean":return(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:e||!1,onChange:a=>b(c.key,a.target.checked)}),label:c.label,sx:{my:1}},c.key);default:return null}})(c))]})}),b4=({value:a,onChange:b,onInsertRef:c})=>{let e=a.captureVariable.trim(),f=a.captureKvKey.trim(),g=a.captureResource.trim(),h=""===e||aG(e),l=""===f||aM(f);return(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:.5},children:"Data-flow capture"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Optionally save this step's output so a later step can reuse it. Leave a field empty to not capture it."}),(0,d.jsxs)(aZ.A,{direction:"row",spacing:1,alignItems:"flex-start",sx:{mb:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:"Capture as run variable",value:a.captureVariable,onChange:a=>b({captureVariable:a.target.value}),error:!h,helperText:h?"Saves this step’s output into a run-scoped variable, injected later with ${var:NAME}.":"Use letters, digits, _ or - and start with a letter or _."}),c&&(0,d.jsxs)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!e||!h,onClick:()=>c(`\${var:${e}}`),children:["Insert $","{var:NAME}"]})]}),(0,d.jsxs)(aZ.A,{direction:"row",spacing:1,alignItems:"flex-start",sx:{mb:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:"Capture as run resource",value:a.captureResource,onChange:a=>b({captureResource:a.target.value}),helperText:"Saves this step’s output as a named run resource, referenced later with ${res:NAME}."}),c&&(0,d.jsxs)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!g,onClick:()=>c(`\${res:${g}}`),children:["Insert $","{res:NAME}"]})]}),(0,d.jsxs)(aZ.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,d.jsx)(u.A,{select:!0,size:"small",label:"Scope",sx:{width:130,flexShrink:0},value:a.captureKvScope,onChange:a=>b({captureKvScope:a.target.value}),children:aI.map(a=>(0,d.jsx)(K.A,{value:a,children:a},a))}),(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:"Capture as persistent key (kv)",value:a.captureKvKey,onChange:a=>b({captureKvKey:a.target.value}),error:!l,helperText:l?"Persists across runs. Reference later with ${kv:NAME} (scope lives on this capture, not the reference).":"Use letters, digits, _ or - and start with a letter or _."}),c&&(0,d.jsxs)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!f||!l,onClick:()=>c(`\${kv:${f}}`),children:["Insert $","{kv:NAME}"]})]})]})},b5=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),b6=[{key:"basic",label:"Basic"},{key:"model",label:"Model"},{key:"io",label:"Input/Output"},{key:"task",label:"Task"},{key:"advanced",label:"Advanced"}],b7=({open:a,node:b,onClose:c,onSave:g,flowEdges:h=[],flowNodes:l=[],flowId:n,onConnectMcpServer:o,authoringMode:p="advanced",mode:t="edit"})=>{b5.debug("ProcessNodePropertiesModal rendered with:",{node:b,flowId:n});let{nodeData:u,setNodeData:w,handlePropertyChange:x}=(a=>{let[b,c]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&c({id:a.id,...a.data,properties:{...a.data.properties}})},[a]);let d=(0,e.useCallback)((a,b)=>{c(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},[]);return{nodeData:b,setNodeData:c,handlePropertyChange:d}})(b),[y,z]=(0,e.useState)(""),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)("full-history"),[N,O]=(0,e.useState)(""),[R,S]=(0,e.useState)(!0),[T,U]=(0,e.useState)("full-conversation"),[V,Y]=(0,e.useState)(!1),[Z,$]=(0,e.useState)(""),[_,aa]=(0,e.useState)(""),[ab,ac]=(0,e.useState)("folder"),[ad,ae]=(0,e.useState)(""),[af,ag]=(0,e.useState)("server"),[ah,ai]=(0,e.useState)("basic"),aj="advanced"===p?b6:b6.filter(a=>["basic","model","task"].includes(a.key)),ak=(0,e.useRef)(null),al=(0,e.useRef)(null),am=(0,e.useRef)(null),an=(0,e.useRef)(null),ao=(0,e.useRef)(null),ap=(0,e.useRef)(null),aq={basic:al,model:am,io:an,task:ao,advanced:ap},ar=(0,e.useRef)(!1);(0,e.useEffect)(()=>{"guided"===p&&("io"===ah||"advanced"===ah)&&ai("basic"),"guided"===p&&"server"!==af&&ag("server")},[ah,af,p]);let{models:as,isLoadingModels:at,loadError:au,handleModelSelect:av,handleUnbindModel:aw}=((a,b,c,d,f)=>{bp.debug("useModelManagement: Entering hook");let[g,h]=(0,e.useState)([]),[i,j]=(0,e.useState)(!1),[k,l]=(0,e.useState)(null);(0,e.useEffect)(()=>{bp.debug("useModelManagement useEffect: Checking if modal is open",{open:a}),a&&m()},[a]),(0,e.useEffect)(()=>{if(0===g.length)return;let a=b?.properties?.boundModel;if(!a)return;let d=g.find(b=>b.id===a);d&&d.name&&b?.properties?.modelName!==d.name&&c(a=>a&&a.properties?.modelName!==d.name?{...a,properties:{...a.properties,modelName:d.name}}:a)},[g,b?.properties?.boundModel,b?.properties?.modelName,c]);let m=async()=>{bp.debug("loadModels: Entering method"),j(!0),l(null);try{let a=await Q.N.loadModels();h(a)}catch(a){bp.warn("loadModels: Failed to load models:",a),l("Failed to load models")}j(!1)},n=(0,e.useCallback)(a=>{bp.debug("handleModelSelect: Entering method",{modelId:a});let b=g.find(b=>b.id===a);b&&(c(c=>{if(!c)return null;let d=g.find(a=>a.id===c.properties?.boundModel),e=bo({currentLabel:c.label,nameIsCustom:c.properties?.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:d?d.displayName||d.name:void 0,nextAutoLabel:b.displayName||b.name});return{...c,label:e,properties:{...c.properties,boundModel:a,modelName:b.name}}}),f(!0))},[g,c,d,f]);return{models:g,isLoadingModels:i,loadError:k,handleModelSelect:n,handleUnbindModel:(0,e.useCallback)(()=>{bp.debug("handleUnbindModel: Entering method"),c(a=>{if(!a)return null;let{boundModel:b,modelName:c,...d}=a.properties;return{...a,properties:{...d,promptTemplate:d.promptTemplate||""}}}),f(!1)},[c,f])}})(a,u,w,z,B),{connectedMcpNodes:ax,allServers:ay,isLoadingServers:az,selectedToolServerNodeId:aA,serverToolsMap:aB,serverStatuses:aC,isLoadingTools:aD,handleSelectToolServer:aE,isLoadingSelectedServerTools:aF,handleRetryServer:aG,handleRestartServer:aH}=((a,b,c,d)=>{let f=(0,bq.v)(),g=f.servers||[],h=f.isLoading||!1,[i,j]=(0,e.useState)({}),[k,l]=(0,e.useState)({}),[m,n]=(0,e.useState)({}),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),s=(0,e.useMemo)(()=>b?((a,b)=>[...new Set(b.filter(b=>b.source===a&&b.data?.edgeType==="mcp"||b.target===a&&b.data?.edgeType==="mcp").map(b=>b.source===a?b.target:b.source))])(b.id,c):[],[b,c]),t=(0,e.useMemo)(()=>{if(!b||0===s.length)return[];if(!d||!Array.isArray(d))return br.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let a=[],b=new Set;return s.forEach(c=>{if(b.has(c))return;let e=d.find(a=>a&&a.id===c);if(!e||!e.data||!e.data.properties)return void br.warn(`Could not find valid MCP node data for ID ${c}`);let f=e.data.properties.boundServer;if(!f)return void br.warn(`MCP node ${c} is not bound to any server.`);let h=g.find(a=>a.name===f),i=h?.status||"unknown",j=e.data.properties.enabledTools||[],k=e.data.properties.enabledResources;a.push({nodeId:c,serverName:f,status:i,enabledTools:Array.isArray(j)?j:[],enabledResources:k}),b.add(c)}),br.debug("Generated connectedMcpNodes:",JSON.stringify(a)),a}catch(a){return br.error("Error preparing connected MCP nodes:",a),[]}},[b,s,g,d]);(0,e.useEffect)(()=>{if(t&&t.length>0){let a={};t.forEach(b=>{let c=g.find(a=>a.name===b.serverName);a[b.serverName]=c?.status||b.status||"unknown"}),j(a)}},[t,g]),(0,e.useEffect)(()=>{if(a&&t.length>0){let a=Array.from(new Set(t.map(a=>a.serverName)));(async()=>{let b={},c={...k},d=a.filter(a=>{let b=g.find(b=>b.name===a);return b?.status==="connected"&&!k[a]&&!m[a]});0!==d.length&&(d.forEach(a=>{b[a]=!0}),n(a=>({...a,...b})),await Promise.all(d.map(async a=>{try{br.debug(`Loading tools for server: ${a}`);let b=await P.S.listServerTools(a);if(b.error)br.warn(`Error loading tools for ${a}:`,b.error),c[a]=[];else{let d=b.tools||[];br.debug(`Loaded ${d.length} tools for ${a}`),c[a]=d}}catch(b){br.warn(`Failed to load tools for server ${a}:`,b),c[a]=[]}finally{n(b=>({...b,[a]:!1}))}})),l(c))})()}},[a,t,g]);let u=(0,e.useRef)(k);(0,e.useEffect)(()=>{u.current=k},[k]);let v=(0,e.useCallback)(a=>{br.debug(`Selected MCP Node ID: ${a}`),p(a);let b=t.find(b=>b.nodeId===a),c=b?.serverName;!c||u.current[c]||m[c]?r(m[c||""]||!1):(br.debug(`Tools not loaded for server ${c}, loading now.`),r(!0),n(a=>({...a,[c]:!0})),P.S.listServerTools(c).then(a=>{let b=a.tools||[];a.error?br.warn(`Error loading tools for ${c}:`,a.error):br.debug(`Loaded ${b.length} tools for ${c}`),l(a=>({...a,[c]:b}))}).catch(a=>{br.warn(`Failed to load tools for server ${c}:`,a),l(a=>({...a,[c]:[]}))}).finally(()=>{r(!1),n(a=>({...a,[c]:!1}))}))},[t,m]),w=(0,e.useRef)(f);return(0,e.useEffect)(()=>{w.current=f},[f]),{connectedMcpNodes:t,allServers:g,isLoadingServers:h,selectedToolServerNodeId:o,serverToolsMap:k,serverStatuses:i,isLoadingTools:m,handleSelectToolServer:v,isLoadingSelectedServerTools:q,handleRetryServer:(0,e.useCallback)(async a=>{br.debug(`Retrying server: ${a}`),n(b=>({...b,[a]:!0}));try{await w.current.retryServer(a);let b=await P.S.listServerTools(a);if(b.error)return br.warn(`Error loading tools for ${a} after retry:`,b.error),!1;{let c=b.tools||[];return br.debug(`Loaded ${c.length} tools for ${a} after retry`),l(b=>({...b,[a]:c})),!0}}catch(b){return br.warn(`Failed to retry or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[]),handleRestartServer:(0,e.useCallback)(async a=>{br.debug(`Restarting server: ${a}`),n(b=>({...b,[a]:!0}));try{await P.S.restartServer(a),await new Promise(a=>setTimeout(a,1e3));let b=await P.S.listServerTools(a);if(b.error)return br.warn(`Error loading tools for ${a} after restart:`,b.error),!1;{let c=b.tools||[];return br.debug(`Loaded ${c.length} tools for ${a} after restart`),l(b=>({...b,[a]:c})),!0}}catch(b){return br.warn(`Failed to restart or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[])}})(a,b,h,l),[aI,aL]=(0,e.useState)([]);(0,e.useEffect)(()=>{let b=!1,c=[...new Set(ax.filter(a=>"connected"===a.status).map(a=>a.serverName))];return a&&0!==c.length?(Promise.all(c.map(async a=>{try{let b=await P.S.listServerResources(a),c=ax.filter(b=>b.serverName===a),d=a=>c.some(b=>{let c=b.enabledResources;return void 0===c||"all"===c||c.includes(a)});return[...(b.resources??[]).filter(a=>d(a.uri)).map(b=>(0,bn.Ub)({kind:"resource",server:a,name:b.uri},b.name||b.uri,b.description||`${a} \xb7 ${b.uri}`)),...(b.resourceTemplates??[]).filter(a=>d(a.uriTemplate)).map(b=>(0,bn.Ub)({kind:"resource",server:a,name:b.uriTemplate},b.name||b.uriTemplate,b.description||`${a} \xb7 ${b.uriTemplate}`))]}catch(b){return b5.warn(`Failed to load @ resource suggestions for ${a}`,b),[]}})).then(a=>{b||aL(a.flat())}),()=>{b=!0}):(aL([]),()=>{b=!0})},[a,ax]);let aM=f().useMemo(()=>[...ax.flatMap(a=>{let b=new Set(a.enabledTools??[]);return(aB[a.serverName]??[]).filter(a=>a?.name&&b.has(a.name)).map(b=>(0,bn.Ub)({kind:"tool",server:a.serverName,name:b.name},b.name,b.description||a.serverName))}),...aI],[ax,aI,aB]),aN=f().useMemo(()=>{if(!b)return[];let a=[];for(let c of h){let d,e;if(c.data?.edgeType!=="resource"||(c.target===b.id?(d=c.source,e="consume"):c.source===b.id&&(d=c.target,e="produce"),!d||!e))continue;let f=l.find(a=>a.id===d);if(!f||"resource"!==f.type)continue;let g=f.data?.properties??{};a.push({id:d,role:e,label:g.name||g.runName||g.uri||d,scope:g.scope,runName:g.runName,uri:g.uri,boundServer:g.boundServer})}return a},[b,h,l]),aO=((a,b,c,d)=>{let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(!1),j=(0,e.useMemo)(()=>b?function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&(d.data.edgeType.includes("mcp")||"resource"===d.data.edgeType))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(b.id,c):[],[b,c]);return(0,e.useEffect)(()=>{if(a&&b){i(!0);try{let a=j.map(a=>d.find(b=>b.id===a)).filter(a=>!!a),b=(0,W.E9)(a.map(a=>({id:a.id,label:a.data.label,type:a.type||a.data.type}))),c=a.map(a=>({name:b.get(a.id)||`handoff_to_${a.id}`,description:function(a){if(a.userDescription&&a.userDescription.trim())return bs(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];!function a(b,c,d){let e=" ".repeat(c);if(b.userDescription&&b.userDescription.trim())return void d.push(`${e}${bs(b.userDescription,200)}`);if("subflow"===b.type){if(b.subflowMissing)return void d.push(`${e}Runs a subflow (referenced flow not found).`);if(b.subflowDetailsUnavailable){let a=b.subflowName?` "${b.subflowName}"`:"";d.push(`${e}Runs a subflow${a} (contents summarised when the flow runs).`);return}if(d.push(`${e}Runs the subflow "${b.subflowName??"unknown"}", which contains:`),b.depthCapReached)return void d.push(`${e} (nested subflows omitted — recursion depth limit reached)`);let f=b.children??[];if(0===f.length)return void d.push(`${e} (no process or subflow steps)`);for(let b of f.slice(0,10))d.push(`${e} - ${b.label}:`),a(b,c+2,d);return void(f.length>10&&d.push(`${e} - …and ${f.length-10} more step(s)`))}if(b.modelName&&d.push(`${e}Model: ${b.modelName}`),b.promptSummary&&d.push(`${e}Role: ${bs(b.promptSummary,200)}`),b.servers&&b.servers.length>0)for(let a of b.servers)if(a.connected&&a.tools&&a.tools.length>0){let b=a.tools.slice(0,10),c=a.tools.length-b.length,f=c>0?`, +${c} more`:"";d.push(`${e}Tools (${a.name}): ${b.join(", ")}${f}`)}else d.push(`${e}Tools (${a.name}): server not connected`)}(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
|
|
1
|
+
(()=>{var a={};a.id=3080,a.ids=[3080],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},1708:a=>{"use strict";a.exports=require("node:process")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},9604:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6z"}),"Code")},10057:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(97954).registerClientReference)(function(){throw Error("Attempted to call the default export of \"C:\\\\Users\\\\Moe\\\\Documents\\\\GitHub\\\\FLUJO\\\\src\\\\app\\\\flows\\\\page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx","default")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},14570:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"}),"DeleteOutline")},15699:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m18.04 7.99-.63-1.4-1.4-.63c-.39-.18-.39-.73 0-.91l1.4-.63.63-1.4c.18-.39.73-.39.91 0l.63 1.4 1.4.63c.39.18.39.73 0 .91l-1.4.63-.63 1.4c-.17.39-.73.39-.91 0m3.24 4.73-.32-.72c-.18-.39-.73-.39-.91 0l-.32.72-.73.32c-.39.18-.39.73 0 .91l.72.32.32.73c.18.39.73.39.91 0l.32-.72.73-.32c.39-.18.39-.73 0-.91zm-5.04 1.65 1.23.93c.4.3.51.86.26 1.3l-1.62 2.8c-.25.44-.79.62-1.25.42l-1.43-.6c-.2.13-.42.26-.64.37l-.19 1.54c-.06.5-.49.88-.99.88H8.38c-.5 0-.93-.38-.99-.88l-.19-1.54c-.22-.11-.43-.23-.64-.37l-1.43.6c-.46.2-1 .02-1.25-.42l-1.62-2.8c-.25-.44-.14-.99.26-1.3l1.23-.93V14c0-.12 0-.25.01-.37l-1.23-.93c-.4-.3-.51-.86-.26-1.3l1.62-2.8c.25-.44.79-.62 1.25-.42l1.43.6c.2-.13.42-.26.64-.37l.19-1.54c.05-.49.48-.87.98-.87h3.23c.5 0 .93.38.99.88l.19 1.54c.22.11.43.23.64.37l1.43-.6c.46-.2 1-.02 1.25.42l1.62 2.8c.25.44.14.99-.26 1.3l-1.23.93c.01.12.01.24.01.37s0 .24-.01.36M13 14c0-1.66-1.34-3-3-3s-3 1.34-3 3 1.34 3 3 3 3-1.34 3-3"}),"SettingsSuggestRounded")},16084:(a,b,c)=>{Promise.resolve().then(c.bind(c,97592))},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},22813:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"}),"Visibility")},26168:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M9 16.17 5.53 12.7a.996.996 0 0 0-1.41 0c-.39.39-.39 1.02 0 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71c.39-.39.39-1.02 0-1.41a.996.996 0 0 0-1.41 0z"}),"CheckRounded")},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},29777:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M18 19H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h5c.55 0 1-.45 1-1s-.45-1-1-1H5c-1.11 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-6c0-.55-.45-1-1-1s-1 .45-1 1v5c0 .55-.45 1-1 1M14 4c0 .55.45 1 1 1h2.59l-9.13 9.13c-.39.39-.39 1.02 0 1.41s1.02.39 1.41 0L19 6.41V9c0 .55.45 1 1 1s1-.45 1-1V4c0-.55-.45-1-1-1h-5c-.55 0-1 .45-1 1"}),"OpenInNewRounded")},29900:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M18.3 5.71a.996.996 0 0 0-1.41 0L12 10.59 7.11 5.7a.996.996 0 0 0-1.41 0c-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41s1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0s.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4"}),"CloseRounded")},33873:a=>{"use strict";a.exports=require("path")},36647:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91"}),"RestartAlt")},40052:(a,b,c)=>{Promise.resolve().then(c.bind(c,10057))},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},41637:(a,b,c)=>{"use strict";c.d(b,{default:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M14 9h-4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1m-1 4h-2v-2h2zm8-3c0-.55-.45-1-1-1h-1V7c0-1.1-.9-2-2-2h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v1h-2V4c0-.55-.45-1-1-1s-1 .45-1 1v1H7c-1.1 0-2 .9-2 2v2H4c-.55 0-1 .45-1 1s.45 1 1 1h1v2H4c-.55 0-1 .45-1 1s.45 1 1 1h1v2c0 1.1.9 2 2 2h2v1c0 .55.45 1 1 1s1-.45 1-1v-1h2v1c0 .55.45 1 1 1s1-.45 1-1v-1h2c1.1 0 2-.9 2-2v-2h1c.55 0 1-.45 1-1s-.45-1-1-1h-1v-2h1c.55 0 1-.45 1-1m-5 7H8c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1h8c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1"}),"MemoryRounded")},49248:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2M9.29 16.29 5.7 12.7a.996.996 0 0 1 0-1.41c.39-.39 1.02-.39 1.41 0L10 14.17l6.88-6.88c.39-.39 1.02-.39 1.41 0s.39 1.02 0 1.41l-7.59 7.59c-.38.39-1.02.39-1.41 0"}),"CheckCircleRounded")},55511:a=>{"use strict";a.exports=require("crypto")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},69266:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M3 18c0 .55.45 1 1 1h5v-2H4c-.55 0-1 .45-1 1M3 6c0 .55.45 1 1 1h9V5H4c-.55 0-1 .45-1 1m10 14v-1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7v-1c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1M7 10v1H4c-.55 0-1 .45-1 1s.45 1 1 1h3v1c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1m14 2c0-.55-.45-1-1-1h-9v2h9c.55 0 1-.45 1-1m-5-3c.55 0 1-.45 1-1V7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1"}),"TuneRounded")},73136:a=>{"use strict";a.exports=require("node:url")},76760:a=>{"use strict";a.exports=require("node:path")},77127:(a,b,c)=>{"use strict";c.d(b,{A:()=>P});var d=c(21124),e=c(38301),f=c(60839),g=c(43312),h=c(44079),i=c(37489),j=c(27114),k=c(81637),l=c(79515),m=c(41893),n=c(30818),o=c(423),p=c(98463),q=c(12033),r=c(91034);let s=(0,c(11801).A)((0,d.jsx)("path",{d:"M19.8 18.4 14 10.67V6.5l1.35-1.69c.26-.33.03-.81-.39-.81H9.04c-.42 0-.65.48-.39.81L10 6.5v4.17L4.2 18.4c-.49.66-.02 1.6.8 1.6h14c.82 0 1.29-.94.8-1.6"}),"Science");var t=c(96955),u=c(18467),v=c(5501),w=c(99587),x=c(76133),y=c(83434),z=c(42819),A=c(40512),B=c(83899),C=c(52327),D=c(8521),E=c(88745),F=c(91059),G=c(19925),H=c(68730),I=c(8165),J=c(65343),K=c(18305);let L=({title:a,attempt:b})=>{let{t:c,formatNumber:e}=(0,K.s9)();return(0,d.jsxs)(k.default,{sx:{mb:2},children:[(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5},children:[b.ok?(0,d.jsx)(I.A,{color:"success",fontSize:"small"}):(0,d.jsx)(J.A,{color:"error",fontSize:"small"}),(0,d.jsx)(l.A,{variant:"subtitle2",children:a}),"number"==typeof b.status&&(0,d.jsx)(m.A,{size:"small",label:`HTTP ${b.status}`}),(0,d.jsx)(m.A,{size:"small",variant:"outlined",label:`${e(b.durationMs)} ms`})]}),b.ok?(0,d.jsx)(l.A,{variant:"body2",color:"text.secondary",sx:{pl:3},children:c("models.test.response",{response:b.content?`"${b.content}"`:c("models.test.empty")})}):(0,d.jsxs)(k.default,{sx:{pl:3},children:[(0,d.jsx)(l.A,{variant:"body2",color:"error.main",children:b.error?.message}),(b.error?.code||b.error?.type)&&(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",children:[b.error?.type?`type: ${b.error.type}`:"",b.error?.type&&b.error?.code?" \xb7 ":"",b.error?.code?`code: ${b.error.code}`:""]}),b.error?.retryAfter&&(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",children:["retry-after: ",b.error.retryAfter,"s"]}),b.error?.body!==void 0&&(0,d.jsx)(k.default,{component:"pre",sx:{mt:.5,p:1,bgcolor:"action.hover",borderRadius:1,fontSize:"0.7rem",overflowX:"auto",maxHeight:160},children:JSON.stringify(b.error.body,null,2)})]})]})},M=({open:a,modelLabel:b,loading:c,result:e,error:f,onClose:g,onRetry:h})=>{let{t:i}=(0,K.s9)(),j=i(e?.provider==="codex"?"models.test.codexSdk":"models.test.openaiSdk");return(0,d.jsxs)(A.A,{open:a,onClose:g,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(B.A,{children:i("models.test.title",{model:b})}),(0,d.jsx)(C.A,{dividers:!0,children:c?(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3},children:[(0,d.jsx)(D.default,{size:24}),(0,d.jsx)(l.A,{variant:"body2",children:i("models.test.sending")})]}):f?(0,d.jsx)(E.A,{severity:"error",children:f}):e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(E.A,{severity:e.ok?"success":"warning",sx:{mb:2},children:e.diagnosis}),(0,d.jsxs)(l.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:2},children:[i("models.test.modelLabel",{model:e.model}),e.baseUrl?` \xb7 ${e.baseUrl}`:"",e.provider?` \xb7 ${e.provider}`:""]}),(0,d.jsx)(F.A,{sx:{mb:2}}),(0,d.jsx)(L,{title:j,attempt:e.sdk}),(0,d.jsx)(L,{title:i("models.test.axios"),attempt:e.axios})]}):null}),(0,d.jsxs)(G.A,{children:[(0,d.jsx)(H.A,{onClick:h,disabled:c,children:i("models.test.runAgain")}),(0,d.jsx)(H.A,{onClick:g,variant:"contained",children:i("common.close")})]})]})};var N=c(78352);let O=(0,z.h)("frontend/components/models/list/ModelCard"),P=({model:a,onEdit:b,onDelete:c,folder:z,folders:A=[],onSetFolder:B,selectable:C=!1,selected:D=!1,onSelect:E,onToggleFavorite:F})=>{let{t:G,formatNumber:H}=(0,K.s9)(),I=(0,f.A)(),[J,L]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(!1),[R,S]=(0,e.useState)(null),[T,U]=(0,e.useState)(null),[V,W]=(0,e.useState)(null),X=async()=>{Q(!0),U(null),S(null);try{let b=await (0,y.X)().testModel({modelId:a.id});S(b)}catch(b){O.error("Model test failed",{modelId:a.id,error:b}),U(b instanceof Error?b.message:G("models.test.failed"))}finally{Q(!1)}},Y=F?(0,d.jsx)(g.A,{title:a.favorite?G("models.favorite.remove"):G("models.favorite.add"),arrow:!0,placement:"top",children:(0,d.jsx)(h.A,{size:"small","aria-label":a.favorite?G("models.favorite.remove"):G("models.favorite.add"),onClick:b=>{b.stopPropagation(),F?.(a.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:a.favorite?I.palette.warning.main:I.palette.text.secondary,backgroundColor:(0,i.X4)(I.palette.background.paper,.6),"&:hover":{backgroundColor:(0,i.X4)(I.palette.background.paper,.9)}},children:a.favorite?(0,d.jsx)(v.A,{fontSize:"small"}):(0,d.jsx)(w.A,{fontSize:"small"})})}):null,Z=(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(j.A,{sx:{flexGrow:1,p:2.25},children:[(0,d.jsxs)(k.default,{sx:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:1,mb:1.2},children:[(0,d.jsx)(l.A,{variant:"h6",sx:{pr:1},children:a.displayName||a.name}),(0,d.jsx)(m.A,{label:(0,x.T_)(a.provider,a.adapter).label,size:"small",sx:{flexShrink:0,color:"primary.light",bgcolor:(0,i.X4)(I.palette.primary.main,.09),border:`1px solid ${(0,i.X4)(I.palette.primary.main,.16)}`}})]}),(0,d.jsx)(l.A,{variant:"body2",color:"text.secondary",sx:{mb:2,minHeight:42},style:{display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis"},children:a.description}),(0,d.jsxs)(k.default,{sx:{mb:1,p:1.25,border:1,borderColor:"divider",borderRadius:2.5,bgcolor:(0,i.X4)(I.palette.background.default,.44)},children:[a.displayName&&(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:[(0,d.jsx)(k.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:G("models.card.model")})," \xb7 ",a.name]}),"number"==typeof a.contextWindow&&(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",children:[(0,d.jsx)(k.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:G("models.card.context")})," \xb7 ",H(a.contextWindow)," ",G("models.card.tokens")]})]}),a.baseUrl&&(0,d.jsx)(g.A,{title:a.baseUrl,arrow:!0,placement:"top",children:(0,d.jsxs)(l.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:[G("models.card.baseUrl"),": ",a.baseUrl]})}),z&&(0,d.jsx)(m.A,{icon:(0,d.jsx)(u.A,{}),label:z,size:"small",variant:"outlined",sx:{mt:1,maxWidth:"100%"}})]})});return C?(0,d.jsxs)(n.A,{elevation:0,role:"radio","aria-checked":D,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",border:a=>`1px solid ${D?a.palette.primary.main:a.palette.divider}`,boxShadow:D?`0 0 0 3px ${(0,i.X4)(I.palette.primary.main,.13)}`:void 0,transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease","&:hover":{borderColor:(0,i.X4)(I.palette.primary.main,.42),transform:"translateY(-3px)"}},children:[Y,(0,d.jsx)(o.A,{onClick:()=>E?.(a.id),sx:{height:"100%",display:"flex",flexDirection:"column",alignItems:"stretch"},children:Z})]}):(0,d.jsxs)(n.A,{elevation:0,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",transition:"transform 200ms ease, border-color 200ms ease, box-shadow 200ms ease","&:hover":{borderColor:(0,i.X4)(I.palette.primary.main,.38),boxShadow:`0 22px 60px ${(0,i.X4)(I.palette.primary.main,.12)}`,transform:"translateY(-4px)"}},children:[Y,Z,(0,d.jsxs)(p.A,{disableSpacing:!0,sx:{px:1.5,pb:1.4,borderTop:1,borderColor:"divider"},children:[(0,d.jsx)(g.A,{title:G("models.card.testTooltip"),arrow:!0,children:(0,d.jsx)(h.A,{"aria-label":G("models.card.testAria"),onClick:()=>{L(!0),X()},children:(0,d.jsx)(s,{})})}),(0,d.jsx)(h.A,{"aria-label":G("models.card.editAria"),onClick:b,children:(0,d.jsx)(q.A,{})}),(0,d.jsx)(h.A,{"aria-label":G("models.card.deleteAria"),onClick:c,children:(0,d.jsx)(r.A,{})}),B&&(0,d.jsx)(g.A,{title:G("models.card.moveTooltip"),arrow:!0,children:(0,d.jsx)(h.A,{"aria-label":G("models.card.moveAria"),onClick:a=>W(a.currentTarget),sx:{ml:"auto"},children:(0,d.jsx)(t.A,{})})})]}),B&&(0,d.jsx)(N.A,{anchorEl:V,open:!!V,currentFolder:z,folders:A,onClose:()=>W(null),onAssign:B}),(0,d.jsx)(M,{open:J,modelLabel:a.displayName||a.name,loading:P,result:R,error:T,onClose:()=>L(!1),onRetry:X})]})}},85838:(a,b,c)=>{"use strict";c.d(b,{A:()=>A});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(48317),i=c(7499),j=c(54573),k=c(9604),l=c(22813),m=c(28055),n=c(49938),o=c(42819),p=c(80518),q=c(50551);c(43010);var r=c(18305);let s=(0,o.h)("frontend/components/shared/PromptBuilder"),t=({server:a,name:b})=>{let{t:c}=(0,r.s9)(),f="handoff"===a,[g,h]=(0,e.useState)(null),[i,j]=(0,e.useState)(!0);return((0,e.useEffect)(()=>{let c=!1;return(async()=>{try{j(!0);let d=await m.S.listServerTools(a),e=d.tools?.find(a=>a.name===b);c||h(e||null)}catch(c){s.error(`Failed to fetch tool info for ${a}:${b}`,c)}finally{c||j(!1)}})(),()=>{c=!0}},[a,b]),i)?(0,d.jsx)("span",{className:`tool-reference-preview loading ${f?"handoff":""}`,children:`tool:${a}__${b}`}):g?(0,d.jsx)("span",{className:`tool-reference-preview ${f?"handoff":""}`,children:c("promptBuilder.toolPreview",{kind:c(f?"promptBuilder.kind.handoff":"promptBuilder.kind.tool"),reference:`tool:${a}__${b}`,description:g.description||c("promptBuilder.noDescription")})}):(0,d.jsx)("span",{className:`tool-reference-preview not-found ${f?"handoff":""}`,children:c("promptBuilder.notFound",{reference:`tool:${a}__${b}`})})},u=({server:a,name:b})=>{let{t:c}=(0,r.s9)(),[f,g]=(0,e.useState)(null),[h,i]=(0,e.useState)(!0);return((0,e.useEffect)(()=>{let c=!1;return(async()=>{try{i(!0);let d=await m.S.listServerResources(a),e=[...d.resources||[],...d.resourceTemplates||[]].find(a=>a.uri===b||a.uriTemplate===b);c||g(e?.description||e?.name||null)}catch(c){s.error(`Failed to fetch resource info for ${a}:${b}`,c)}finally{c||i(!1)}})(),()=>{c=!0}},[a,b]),h)?(0,d.jsx)("span",{className:"tool-reference-preview loading resource",children:`resource:${a}__${b}`}):(0,d.jsx)("span",{className:"tool-reference-preview resource",children:c("promptBuilder.resourcePreview",{name:b,server:a,description:f?` (${f})`:""})})},v=({name:a})=>{let{t:b}=(0,r.s9)();return(0,d.jsx)("span",{className:"tool-reference-preview runres",children:b("promptBuilder.tempPreview",{name:a})})},w=({name:a})=>{let{t:b}=(0,r.s9)();return(0,d.jsx)("span",{className:"tool-reference-preview global",children:b("promptBuilder.globalPreview",{reference:`\${global:${a}}`})})},x=({binding:a})=>"global"===a.kind?(0,d.jsx)(w,{name:a.name}):"runres"===a.kind?(0,d.jsx)(v,{name:a.name}):"resource"===a.kind?(0,d.jsx)(u,{server:a.server,name:a.name}):(0,d.jsx)(t,{server:a.server,name:a.name}),y=({value:a})=>{let b=[],c=0;for(let d of(0,p.sE)(a))d.index>c&&b.push({type:"text",value:a.slice(c,d.index)}),b.push({type:"binding",binding:d,key:d.index}),c=d.index+d.fullMatch.length;c<a.length&&b.push({type:"text",value:a.slice(c)});let e=[],f=[],g=()=>{e.push((0,d.jsx)("p",{children:f},`p-${e.length}`)),f=[]};for(let a of b)if("text"===a.type){let b=a.value.split("\n");for(let a=0;a<b.length;a++)f.push(b[a]),a<b.length-1&&g()}else f.push((0,d.jsx)(x,{binding:a.binding},`binding-${a.key}`));return(f.length>0||0===e.length)&&g(),(0,d.jsx)("div",{className:"preview-content",children:e})},z=(0,e.forwardRef)(({value:a,onChange:b,label:c,height:m=300,onModeChange:o,customPreviewRenderer:s,suggestions:t=[]},u)=>{let{t:v}=(0,r.s9)(),w=c??v("promptBuilder.title"),{globalEnvVars:x}=(0,n.rX)(),z=(0,e.useMemo)(()=>Object.entries(x).filter(([,a])=>!a.metadata?.isSecret).map(([a])=>a).sort((a,b)=>a.localeCompare(b)),[x]),A=(0,e.useMemo)(()=>[...t,...z.map(a=>(0,p.Ub)({kind:"global",server:"",name:a},a))],[z,t]),B=(0,e.useRef)(null),[C,D]=(0,e.useState)("raw");return(0,e.useImperativeHandle)(u,()=>({insertText:a=>B.current?.insertText(a),getMode:()=>C}),[C]),(0,d.jsxs)(f.default,{sx:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:[w&&(0,d.jsx)(g.A,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium",mb:1},children:w}),(0,d.jsx)(f.default,{sx:{mb:1},children:(0,d.jsxs)(h.A,{value:C,exclusive:!0,onChange:(a,b)=>{b&&(D(b),o?.(b))},size:"small",children:[(0,d.jsxs)(i.A,{value:"raw",children:[(0,d.jsx)(k.A,{fontSize:"small",sx:{mr:.5}}),v("promptBuilder.raw")]}),(0,d.jsxs)(i.A,{value:"preview",children:[(0,d.jsx)(l.A,{fontSize:"small",sx:{mr:.5}}),v("promptBuilder.preview")]})]})}),(0,d.jsx)(j.A,{elevation:0,sx:{border:"1px solid rgba(0, 0, 0, 0.12)",borderRadius:1,overflow:"visible",flexGrow:1,display:"flex",flexDirection:"column"},children:"raw"===C?(0,d.jsx)(f.default,{className:"slate-editor-container",sx:{height:"number"==typeof m?m:"100%",overflow:"visible",p:2},children:(0,d.jsx)(q.Ay,{ref:B,value:a,onChange:b,suggestions:A,placeholder:v("promptBuilder.placeholder"),bare:!0,minRows:4,containerSx:{height:"100%"},ariaLabel:w||v("promptBuilder.editorAria")})}):s?(0,d.jsx)(f.default,{className:"custom-preview-container",sx:{height:"number"==typeof m?m:"100%",overflow:"auto"},children:s()}):(0,d.jsx)(f.default,{className:"preview-container",sx:{height:"number"==typeof m?m:"100%",overflow:"auto",p:2},children:(0,d.jsx)(y,{value:a})})})]})});z.displayName="PromptBuilder";let A=z},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},92279:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["flows",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,10057)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/flows/page",pathname:"/flows",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/flows/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
2
|
+
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}},97592:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d$});var d=c(21124),e=c(38301),f=c.n(e),g=c(42378),h=c(60839),i=c(81637),j=c(79515),k=c(68730),l=c(49565),m=c(44079),n=c(43312),o=c(99561),p=c(88745),q=c(40512),r=c(83899),s=c(52327),t=c(7503),u=c(37674),v=c(19925),w=c(11801);let x=(0,w.A)((0,d.jsx)("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20z"}),"ArrowBack");var y=c(47902);let z=(0,w.A)((0,d.jsx)("path",{d:"m19 9 1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25z"}),"AutoAwesome");var A=c(1717),B=c(69266),C=c(18168),D=c(54573),E=c(41893),F=c(8521),G=c(95587),H=c(67191),I=c(91059),J=c(7118),K=c(94367),L=c(42819),M=c(95791),N=c(2117),O=c(63281),P=c(28055),Q=c(83434),R=c(90430),S=c(36627);function T(a){return a.data?.edgeType}function U(a){return"mcp"===T(a)}function V(a){return"resource"===T(a)}var W=c(98502),X=c(64535);function Y(a){return{id:a.id,label:a.data.label,type:a.type||a.data.type}}var Z=c(63787);c(74855);var $=c(37489),_=c(67101),aa=c(76159),ab=c(83144),ac=c(88970),ad=c(87351),ae=c(93995),af=c(88698),ag=c(5123),ah=c(41637),ai=c(5240),aj=c(11361),ak=c(18305);let al=(0,L.h)("components/flow/FlowBuilder/NodePalette.tsx"),am="NodePalette",an=(0,C.Ay)(D.A)(({theme:a})=>({padding:a.spacing(1.4),width:"218px",height:"100%",minHeight:0,flexShrink:0,display:"flex",flexDirection:"column",gap:a.spacing(1.2),overflowY:"auto",border:`1px solid ${a.palette.divider}`,borderRadius:16,backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.86)":"rgba(255, 255, 255, 0.9)",boxShadow:"dark"===a.palette.mode?"0 16px 45px rgba(0,0,0,.22)":"0 16px 45px rgba(49,45,99,.09)",backdropFilter:"blur(18px)",[a.breakpoints.down("md")]:{width:"176px",padding:a.spacing(1)},[a.breakpoints.down("md")]:{width:"100%",height:"68px",padding:a.spacing(.65),gap:a.spacing(.6),alignItems:"flex-start",overflowX:"auto",overflowY:"hidden"}})),ao=(0,C.Ay)(D.A,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({padding:a.spacing(1.25),width:"100%",minWidth:0,borderRadius:"12px",backgroundColor:(0,$.X4)(a.palette.background.paper,.72),border:`1px solid ${a.palette.divider}`,borderLeft:`3px solid ${"process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main}`,boxShadow:"none",transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease",cursor:"grab","&:hover":{transform:"translateY(-2px)",borderColor:(0,$.X4)("process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main,.55),boxShadow:`0 0 0 1px ${"process"===b?a.palette.primary.main:"finish"===b?a.palette.success.main:"subflow"===b?a.palette.warning.main:"resource"===b?aj.nH:"signal"===b?aj.vp:"trigger"===b?aj.$Q:a.palette.info.main}, 0 14px 30px rgba(0,0,0,0.12)`},"&:active":{cursor:"grabbing"},[a.breakpoints.down("md")]:{width:64,minWidth:64,minHeight:54,padding:a.spacing(.55),flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",borderLeftWidth:2}})),ap=(0,C.Ay)(i.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${"process"===b?a.palette.primary.light:"finish"===b?a.palette.success.light:"subflow"===b?a.palette.warning.light:"resource"===b?"#4DB6AC":"signal"===b?"#B39DDB":"trigger"===b?aj.C2:a.palette.info.light}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5),[a.breakpoints.down("md")]:{width:"100%",marginBottom:0,paddingBottom:0,borderBottom:0,justifyContent:"center"}})),aq=(0,C.Ay)(i.default)(({theme:a})=>({display:"flex",alignItems:"center",gap:"8px",[a.breakpoints.down("md")]:{flexDirection:"column",justifyContent:"center",gap:2}})),ar=({authoringMode:a="guided",onAddNode:b})=>{al.debug(`${am}: Entering component`);let{t:c}=(0,ak.s9)(),f=(0,e.useMemo)(()=>(a=>[{type:"process",label:a("flows.palette.process"),shortLabel:a("flows.palette.processShort"),description:a("flows.palette.processHelp")},{type:"finish",label:a("flows.palette.finish"),shortLabel:a("flows.palette.finishShort"),description:a("flows.palette.finishHelp")},{type:"mcp",label:a("flows.palette.mcp"),shortLabel:a("flows.palette.mcpShort"),description:a("flows.palette.mcpHelp")},{type:"subflow",label:a("flows.palette.subflow"),shortLabel:a("flows.palette.subflowShort"),description:a("flows.palette.subflowHelp")},{type:"resource",label:a("flows.palette.resource"),shortLabel:a("flows.palette.resourceShort"),description:a("flows.palette.resourceHelp")},{type:"signal",label:a("flows.palette.signal"),shortLabel:a("flows.palette.signalShort"),description:a("flows.palette.signalHelp")},{type:"trigger",label:a("flows.palette.trigger"),shortLabel:a("flows.palette.triggerShort"),description:a("flows.palette.triggerHelp")}])(c),[c]),[g,h]=(0,e.useState)(""),k=(0,e.useRef)(null);(0,e.useEffect)(()=>{let a=()=>{k.current?.focus(),k.current?.select()};return document.addEventListener("openFlowQuickAdd",a),()=>document.removeEventListener("openFlowQuickAdd",a)},[]);let l=(0,e.useCallback)(a=>{al.debug(`${am}.addNodeFromPalette: Adding ${a} node`),b?.(a),al.info(`${am}.addNodeFromPalette: Requested ${a} node`)},[b]),m=(0,e.useMemo)(()=>{let b=g.trim().toLowerCase();return f.filter(b=>"advanced"===a||"process"===b.type).filter(a=>!b||`${a.label} ${a.description} ${a.shortLabel}`.toLowerCase().includes(b))},[a,f,g]);return al.debug(`${am}: Rendering component`),(0,d.jsxs)(an,{elevation:2,children:[(0,d.jsxs)(i.default,{sx:{display:{xs:"none",md:"flex"},alignItems:"baseline",justifyContent:"space-between"},children:[(0,d.jsx)(j.A,{className:"node-palette-title",variant:"subtitle1",fontWeight:800,children:c("flows.palette.title")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:"A"})]}),(0,d.jsx)(u.A,{inputRef:k,value:g,onChange:a=>h(a.target.value),size:"small",placeholder:c("flows.palette.search"),inputProps:{"aria-label":c("flows.palette.searchAria")},sx:{display:{xs:"none",md:"flex"}},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(ai.A,{fontSize:"small"})})}}),(0,d.jsxs)(i.default,{display:"flex",flexDirection:{xs:"row",md:"column"},gap:{xs:.75,md:1},width:{xs:"max-content",md:"100%"},children:[m.map(a=>(0,d.jsxs)(ao,{nodeType:a.type,elevation:1,draggable:!0,role:"button",tabIndex:0,"aria-label":`${a.label}: ${a.description}`,title:`${a.label} — ${a.description}`,onDragStart:b=>((a,b)=>{al.debug(`${am}.onDragStart: Entering method with nodeType=${b}`),a.dataTransfer.setData("application/reactflow",b),a.dataTransfer.effectAllowed="move";let d=document.createElement("div"),e=f.find(a=>a.type===b);d.textContent=e?.label??c("flows.palette.step"),Object.assign(d.style,{padding:"10px",background:"white",border:"1px solid #ccc",borderRadius:"8px"}),document.body.appendChild(d),al.debug(`${am}.onDragStart: Created drag preview element`);try{a.dataTransfer.setDragImage(d,75,25),al.debug(`${am}.onDragStart: Set drag image with offset (75, 25)`)}catch(a){al.error(`${am}.onDragStart: Error setting drag image:`,a)}setTimeout(()=>{document.body.removeChild(d),al.debug(`${am}.onDragStart: Removed drag preview element`)},0),al.debug(`${am}.onDragStart: Drag operation initialized`)})(b,a.type),onDragEnd:b=>{var c;return c=a.type,void al.debug(`${am}.onDragEnd: Drag operation ended for nodeType=${c}`)},onClick:()=>l(a.type),onKeyDown:b=>{("Enter"===b.key||" "===b.key)&&(b.preventDefault(),l(a.type))},children:[(0,d.jsx)(ap,{nodeType:a.type,children:(0,d.jsxs)(aq,{children:[(a=>{switch(a){case"process":return(0,d.jsx)(ah.default,{color:"primary"});case"finish":return(0,d.jsx)(ab.A,{color:"success"});case"mcp":return(0,d.jsx)(ag.A,{color:"info"});case"subflow":return(0,d.jsx)(ac.A,{color:"warning"});case"resource":return(0,d.jsx)(ad.A,{sx:{color:aj.nH}});case"signal":return(0,d.jsx)(ae.A,{sx:{color:aj.vp}});case"trigger":return(0,d.jsx)(af.A,{sx:{color:aj.$Q}});default:return(0,d.jsx)(aa.A,{color:"primary"})}})(a.type),(0,d.jsx)(j.A,{variant:"caption",fontWeight:"bold",sx:{display:{xs:"block",md:"none"},fontSize:"0.62rem",lineHeight:1},children:a.shortLabel}),(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:"bold",sx:{display:{xs:"none",md:"block"}},children:a.label})]})}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{display:{xs:"none",md:"block"}},children:a.description})]},a.type)),0===m.length&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{px:.5,py:1},children:c("flows.palette.noMatches")})]})]})};var as=c(31605),at=c(21903),au=c(89490),av=c(50553),aw=c(84233),ax=c(75983),ay=c(71439);let az=(0,w.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M10 17H5v-2h5zm0-4H5v-2h5zm0-4H5V7h5zm4.82 6L12 12.16l1.41-1.41 1.41 1.42L17.99 9l1.42 1.42z"}),"FactCheck");var aA=c(22797),aB=c(21358),aC=c(8165),aD=c(29237);let aE=/\$\{var:([^}]+)\}/g,aF=/^[A-Za-z_][\w-]*$/;function aG(a){return"string"==typeof a&&aF.test(a)}let aH=/\$\{kv:([^}]+)\}/g,aI=["global","flow","folder"];function aJ(a){let b=(a??"").trim(),c=b.indexOf("/");if(c>0){let a=b.slice(0,c);if(aI.includes(a))return{scope:a,key:b.slice(c+1).trim()}}return{scope:"folder",key:b}}function aK(a,b){let c=(b??"").trim();return c?"folder"===a?c:`${a}/${c}`:""}let aL=/^[A-Za-z_][\w-]*$/;function aM(a){return"string"==typeof a&&aL.test(a)}function aN(a){return a.data?.type??a.type??"unknown"}function aO(a){return a.data?.label||a.id}function aP(a){return a.data?.edgeType==="mcp"}function aQ(a){return a.data?.edgeType==="resource"}function aR(a){return aP(a)||aQ(a)}function aS(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=new Set;for(let b of c){if(!aP(b))continue;let c=null;if(b.source===a?c=b.target:b.target===a&&(c=b.source),!c)continue;let f=d.get(c);if(!f||"mcp"!==aN(f))continue;let g=f.data?.properties?.boundServer;"string"==typeof g&&g&&e.add(g)}return e}function aT(a,b,c){let d=new Map(b.map(a=>[a.id,a])),e=[],f=new Set;for(let b of c){if(aR(b))continue;let c=null;b.source===a?c=b.target:b.target===a&&b.data?.bidirectional&&(c=b.source),!c||f.has(c)||(f.add(c),e.push(c))}let g=e.map(a=>d.get(a)).filter(a=>!!a).map(a=>({id:a.id,label:a.data?.label,type:aN(a)}));return new Set((0,W.E9)(g).values())}function aU(a){let b=a.replace(/\S*\$\{[^}]*\}\S*/g," ");return/(?:^|[\s("'`])file:\/\/(?:\/|[^/\s]+\/)[^\s<>"'`]+/i.test(b)||/(?:^|[\s("'`])(?:[A-Za-z]:[\\/][^\s<>"'`]*|\\\\[^\\\s<>"'`]+\\[^\\\s<>"'`]+(?:\\[^\s<>"'`]*)?)/.test(b)||/(?:^|[\s("'`])\/(?!\/)[^\s<>"'`]+/.test(b)}function aV(a){if("string"!=typeof a)return!1;let b=a.trim();if(!b)return!1;if(/^\$\{global:[^{}]+\}$/.test(b))return!0;if(b.includes("${"))return!1;if(/^file:/i.test(b))try{let a=new URL(b);return"file:"===a.protocol&&(!!a.hostname||!!a.pathname)}catch{return!1}return!b.includes("\0")}function aW(a,b={}){let c=[],d=Array.isArray(a?.nodes)?a.nodes:[],e=Array.isArray(a?.edges)?a.edges:[],f=(a,b,d,e)=>c.push({severity:a,code:b,message:d,nodeId:e?.id,nodeLabel:e?aO(e):void 0}),g=new Map((b.models??[]).map(a=>[a.id,a])),h=new Map((b.servers??[]).map(a=>[a.name,a])),i=!!b.models,j=!!b.servers,k=d.filter(a=>"start"===aN(a)),l=d.filter(a=>"finish"===aN(a)),m=d.filter(a=>"process"===aN(a)),n=d.filter(a=>"mcp"===aN(a));if(0===k.length)f("error","no-start-node","The flow has no Start node, so it has no entry point.");else if(k.length>1)for(let a of k.slice(1))f("error","multiple-start-nodes","The flow has more than one Start node; only one is allowed.",a);for(let a of(0===l.length&&f("warning","no-finish-node","The flow has no Finish node; it will run but never reaches a defined end."),m)){let b=a.data?.properties??{},c=b.boundModel;if(c){if(i&&!g.has(c)){let c="string"==typeof b.modelName&&b.modelName?` (was "${b.modelName}")`:"";f("error","process-model-missing",`Process node "${aO(a)}" is bound to a model that no longer exists${c}.`,a)}}else f("error","process-missing-model",`Process node "${aO(a)}" has no model bound.`,a)}for(let a of n){let b=(a.data?.properties??{}).boundServer;if(b){if(j&&!h.has(b))f("warning","mcp-server-missing",`MCP node "${aO(a)}" is bound to server "${b}", 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.`,a);else if(j){let c=h.get(b);if(c.status&&"connected"!==c.status){let d="disabled"===c.status?"disabled":`not connected (${c.status})`;f("warning","mcp-server-disconnected",`MCP node "${aO(a)}" is bound to server "${b}", which is currently ${d}. It will provide tools again once it reconnects.`,a)}}}else f("warning","mcp-missing-server",`MCP node "${aO(a)}" is not bound to a server.`,a);e.some(b=>aP(b)&&(b.source===a.id||b.target===a.id))||f("warning","mcp-node-unconnected",`MCP node "${aO(a)}" is not connected to any Process node.`,a)}if(b.fileAccessMcp){let a=b.fileAccessMcp,c=Object.entries(a).filter(([,a])=>a.configured&&!a.disabled&&"usable"===a.usability).map(([a])=>a),d=Object.values(a).some(a=>a.configured&&!a.disabled&&"unknown"===a.usability);for(let b of m)if((function(a){let b=a.data?.properties??{},c=[];return"string"==typeof b.promptTemplate&&b.promptTemplate&&c.push(b.promptTemplate),"isolated"===b.inputMode&&"string"==typeof b.isolatedPrompt&&b.isolatedPrompt&&c.push(b.isolatedPrompt),c})(b).some(aU)){if(0===c.length){d||f("warning","process-filepath-mcp-unavailable",`Process node "${aO(b)}" contains a literal filepath, but no configured file-access MCP server is currently available. Enable or reconnect one so this flow can access the path.`,b);continue}!d&&c.every(b=>!function(a,b,c){return!![...Array.isArray(b.roots)?b.roots:[],...c.filter(b=>b.data?.properties?.boundServer===a).flatMap(a=>{let b=a.data?.properties?.roots;return Array.isArray(b)?b:[]})].some(aV)||aV(b.rootPath)}(b,a[b],n))&&f("warning","process-filepath-mcp-roots-missing",`Process node "${aO(b)}" contains a literal filepath, but the available file-access MCP servers have no effective roots configured. Add roots globally or on the corresponding MCP node in this flow.`,b)}}for(let a of d.filter(a=>"resource"===aN(a))){let b=a.data?.properties??{},c="run"===b.scope?"run":"mcp",d="string"==typeof b.boundServer?b.boundServer:"",g="string"==typeof b.uri?b.uri:"",i="string"==typeof b.runName?b.runName.trim():"";"mcp"!==c||d&&g||f("warning","resource-missing-binding",`Resource node "${aO(a)}" has no ${!d?"server":"resource URI"} bound; connected steps will receive nothing.`,a),"run"!==c||i||f("warning","resource-missing-binding",`Resource node "${aO(a)}" is a run artifact with no name; give it a name so steps can produce/consume it.`,a),"run"===c&&i&&!aG(i)&&f("warning","resource-run-name",`Resource node "${aO(a)}" is named "${i}", which is not a valid artifact name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${res:...}.`,a),"mcp"===c&&d&&j&&!h.has(d)&&f("warning","resource-server-missing",`Resource node "${aO(a)}" is bound to server "${d}", which isn't in your current MCP server list.`,a);let k=e.filter(b=>aQ(b)&&(b.source===a.id||b.target===a.id));0===k.length&&f("warning","resource-node-unconnected",`Resource node "${aO(a)}" is not connected to any Process node.`,a);let l=k.filter(b=>b.target===a.id);"mcp"===c&&l.length>0&&f("error","resource-produce-static",`Resource node "${aO(a)}" is a static MCP resource, but a step writes INTO it. Only run artifacts (scope "run") can be produced by a step — flip the edge or make this a run artifact.`,a),"run"===c&&l.length>1&&f("warning","resource-multiple-producers",`Resource node "${aO(a)}" is produced by ${l.length} steps; the last writer wins. Consider one producer per artifact.`,a),"run"===c&&0===l.length&&k.length>0&&f("warning","resource-consumed-never-produced",`Resource node "${aO(a)}" is consumed but no step in this flow produces it; it resolves to nothing unless an earlier run captured it.`,a)}for(let a of d.filter(a=>"signal"===aN(a))){let b=a.data?.properties??{};("string"==typeof b.topic?b.topic.trim():"")||f("warning","signal-missing-topic",`Signal node "${aO(a)}" has no topic; it emits nothing. Give it a topic that a flow-event trigger can listen for.`,a)}if(k.length>0){let a=function(a){let b=new Map,c=(a,c)=>{b.has(a)||b.set(a,[]),b.get(a).push(c)};for(let b of a)!aR(b)&&(c(b.source,b.target),b.data?.bidirectional&&c(b.target,b.source));return b}(e);for(let b of k)a.get(b.id)?.length||f("error","start-no-outgoing","The Start node is not connected to anything; the flow cannot run.",b);let b=function(a,b){let c=new Set(a),d=[...a];for(;d.length;){let a=d.shift();for(let e of b.get(a)??[])c.has(e)||(c.add(e),d.push(e))}return c}(k.map(a=>a.id),a);for(let a of[...m,...l])b.has(a.id)||f("warning","unreachable-node",`${"finish"===aN(a)?"Finish":"Process"} node "${aO(a)}" is not reachable from the Start node.`,a)}for(let a of d.filter(a=>"subflow"===aN(a))){let b=e.filter(b=>!aR(b)&&(b.source===a.id||b.target===a.id&&!!b.data?.bidirectional));b.length>1&&f("error","subflow-multiple-outgoing",`Subflow node "${aO(a)}" has ${b.length} outgoing connections; a subflow can only have one (either A > B > C or a bidirectional A <> B).`,a);let c=a.data?.properties??{},g="string"==typeof c.subflowId&&c.subflowId?c.subflowId:void 0,h=Array.isArray(c.parallelSubflowIds)?c.parallelSubflowIds.filter(a=>"string"==typeof a&&!!a):[];g&&h.length>0&&f("error","subflow-both-targets",`Subflow node "${aO(a)}" sets both a single "subflowId" and "parallelSubflowIds"; use one or the other.`,a);let i=!0===c.mapOverList;i&&h.length>0&&f("error","subflow-map-and-parallel",`Subflow node "${aO(a)}" combines "mapOverList" with "parallelSubflowIds"; map-over-list runs a single child once per item and cannot be combined with parallel fan-out.`,a),i&&!g&&0===h.length&&f("error","subflow-map-no-child",`Subflow node "${aO(a)}" has "mapOverList" but no child flow ("subflowId"); select a flow to run once per item.`,a);let j=Array.isArray(c.spawnBriefs)?c.spawnBriefs.filter(a=>"string"==typeof a&&""!==a.trim()):[];j.length>0&&!g&&f("error","subflow-spawn-no-child",`Subflow node "${aO(a)}" has spawn briefs but no sub-agent flow ("subflowId"); select the flow to spawn once per brief.`,a),j.length>0&&h.length>0&&f("error","subflow-spawn-and-parallel",`Subflow node "${aO(a)}" combines "spawnBriefs" with "parallelSubflowIds"; spawn briefs run one sub-agent per brief and cannot be combined with a multi-flow fan-out list.`,a),j.length>0&&i&&f("error","subflow-spawn-and-map",`Subflow node "${aO(a)}" combines "spawnBriefs" with "mapOverList"; use one lane source or the other.`,a);let k="string"==typeof c.parallelSubflowIdsVar?c.parallelSubflowIdsVar.trim():"";if(k&&(aG(k)||f("warning","subflow-parallel-var-name",`Subflow node "${aO(a)}" reads dynamic fan-out targets from "${k}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to capture with \${var:...}.`,a),i&&f("error","subflow-map-and-parallel-var",`Subflow node "${aO(a)}" combines "mapOverList" with dynamic fan-out ("parallelSubflowIdsVar"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),d.some(a=>{let b=a.data?.properties?.captureVariable;return"string"==typeof b&&b.trim()===k})||f("warning","subflow-parallel-var-uncaptured",`Subflow node "${aO(a)}" reads dynamic fan-out targets from variable "${k}", but no node captures it (captureVariable). It may be seeded by the caller; otherwise it resolves to no targets and the node falls back to its static parallel list.`,a)),!0===c.allowCallerFanout&&i&&f("error","subflow-map-and-caller-fanout",`Subflow node "${aO(a)}" combines "mapOverList" with agentic fan-out ("allowCallerFanout"); map-over-list runs a single child once per item and cannot be combined with fan-out.`,a),h.length>0||j.length>0){let b=c.concurrencyLimit;"number"==typeof b&&b<1&&f("warning","subflow-concurrency-limit",`Subflow node "${aO(a)}" has a concurrencyLimit of ${b}; it must be at least 1 (the runtime default will be used).`,a)}}{let a=new Map(d.map(a=>[a.id,a])),b=new Set;for(let c of e){if(aR(c))continue;let d=c.data?.condition;if(!d||"object"!=typeof d)continue;let e=a.get(c.source),g=e?aN(e):"unknown";if("process"!==g){f("error","edge-condition-non-process",`An edge leaving ${"unknown"===g?"an unknown":`the ${g}`} node "${e?aO(e):c.source}" has a routing condition, but only process nodes can route on a condition.`,e??void 0);continue}b.add(c.source),(0,aD.C)(d.kind)?"always"===d.kind||("string"!=typeof d.value||0===d.value.length?f("warning","edge-condition-value",`Process node "${aO(e)}" has an outgoing edge condition with no "value"; it will never match.`,e):"regex"!==d.kind||(0,aD.wM)(d.value)||f("warning","edge-condition-regex",`Process node "${aO(e)}" has an outgoing edge with a regex condition that does not compile; it will never match.`,e)):f("warning","edge-condition-kind",`Process node "${aO(e)}" has an outgoing edge whose condition kind "${String(d.kind)}" is unknown; it will never match.`,e)}for(let c of b){let b=a.get(c);b&&(e.some(a=>!aR(a)&&(a.source===c?!a.data?.condition||"always"===a.data.condition.kind&&!a.data.condition.negate:!!(a.target===c&&a.data?.bidirectional)))||f("warning","edge-condition-no-fallback",`Process node "${aO(b)}" has conditioned outgoing edges but no bare fallback edge; if no condition matches, the flow ends here.`,b))}}{let a=new Set;for(let b of d){let c=b.data?.properties?.captureVariable;if("string"==typeof c&&c.trim()){let d=c.trim();a.add(d),aG(d)||f("warning","capture-var-name",`${"subflow"===aN(b)?"Subflow":"Process"} node "${aO(b)}" captures into "${d}", which is not a valid variable name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${var:...}.`,b)}}let b=["promptTemplate","isolatedPrompt"],c=new Set;for(let e of d){let d=e.data?.properties??{};for(let g of b){let b=d[g];if("string"==typeof b&&b)for(let d of function(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(aE.lastIndex=0;null!==(b=aE.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}(b)){if(a.has(d))continue;let b=`${e.id}:${d}`;c.has(b)||(c.add(b),f("warning","var-ref-uncaptured",`${aO(e)} references \${var:${d}} but no step in this flow captures "${d}" (via captureVariable). It resolves to empty unless supplied as a run input — check for a typo or a step ordered after this one.`,e))}}}}{for(let a of d){let b=a.data?.properties?.captureKv;if("string"==typeof b&&b.trim()){let{key:c}=aJ(b.trim());aM(c)||f("warning","capture-kv-name",`${"subflow"===aN(a)?"Subflow":"Process"} node "${aO(a)}" captures into kv "${b.trim()}", whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it will be awkward to reference with \${kv:...}.`,a)}}let a=["promptTemplate","isolatedPrompt"],b=new Set;for(let c of d){let d=c.data?.properties??{};for(let e of a){let a=d[e];if("string"==typeof a&&a)for(let d of function(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(aH.lastIndex=0;null!==(b=aH.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}(a)){let{key:a}=aJ(d);if(aM(a))continue;let e=`${c.id}:${d}`;b.has(e)||(b.add(e),f("warning","kv-ref-name",`${aO(c)} references \${kv:${d}}, whose key is not a valid name (letters, digits, _ and - only, not starting with a digit); it resolves to empty.`,c))}}}}for(let a of m){let c=a.data?.properties?.promptTemplate;if("string"!=typeof c||!c)continue;let g=aS(a.id,d,e),h=null,i=new Set,j=new Set;for(let k of(0,X.A$)(c)){if("handoff"===k.server){let b=`handoff:${k.name}`;if(j.has(b))continue;j.add(b),i.add(k.name),h||(h=aT(a.id,d,e)),h.has(k.name)||f("warning","handoff-pill-obsolete",`Process node "${aO(a)}" references handoff tool "${k.name}", which no longer exists (the target node was removed, or renamed so the tool name changed). Update or remove the pill.`,a);continue}let c=`${k.kind}:${k.server}:${k.name}`;!j.has(c)&&(j.add(c),g.has(k.server)?"tool"===k.kind&&b.serverTools&&b.serverTools[k.server]&&!b.serverTools[k.server].includes(k.name)&&f("warning","tool-unavailable",`Process node "${aO(a)}" references tool "${k.name}" which server "${k.server}" does not currently expose.`,a):f("error","tool-pill-disconnected",`Process node "${aO(a)}" references ${k.kind} "${k.name}" from server "${k.server}", but it is not connected to that server (the MCP node was removed or the server was renamed).`,a))}if(i.size>0)for(let b of h??aT(a.id,d,e))i.has(b)||f("warning","handoff-target-unreferenced",`Process node "${aO(a)}" can hand off to "${b}" but its prompt never references \${tool:handoff__${b}}, so the model may never route there.`,a)}if(b.serverTools)for(let a of m){let c=aS(a.id,d,e),g=new Set;for(let d of c){let c=b.serverTools[d];if(Array.isArray(c)&&0===c.length&&f("warning","mcp-server-no-tools",`Process node "${aO(a)}" is connected to MCP server "${d}", which currently exposes 0 tools. The connection has no effect until the server provides tools.`,a),Array.isArray(c))for(let b of Array.isArray(a.data?.properties?.enabledTools)?a.data.properties.enabledTools:[]){let e=`enabledTool:${d}:${b}`;!g.has(e)&&(c.includes(b)||(g.add(e),f("warning","tool-unavailable",`Process node "${aO(a)}" has enabledTool "${b}" which server "${d}" does not currently expose.`,a)))}}}let o=c.filter(a=>"error"===a.severity).length,p=c.length-o;return{issues:c,errorCount:o,warningCount:p,isRunnable:0===o}}var aX=c(27305);let aY=(0,L.h)("components/flow/FlowBuilder/FlowValidationButton"),aZ=({nodes:a,edges:b})=>{let{t:c,tp:f}=(0,ak.s9)(),[g,h]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null),[n,o]=(0,e.useState)(!1),[p,q]=(0,e.useState)(null),[r,s]=(0,e.useState)(null),t=(0,e.useRef)(null),u=(0,e.useRef)(null),v=(0,e.useId)(),w=(0,e.useId)(),x=(0,e.useId)();(0,e.useEffect)(()=>{if(!g)return;let a=window.requestAnimationFrame(()=>{u.current?.focus()});return()=>window.cancelAnimationFrame(a)},[g]);let y=(0,e.useCallback)(()=>{h(!1),window.requestAnimationFrame(()=>{t.current?.focus()})},[]),z=(0,e.useCallback)(()=>{let a=u.current?.contains(document.activeElement);h(!1),a&&window.requestAnimationFrame(()=>{t.current?.focus()})},[]),A=(0,e.useCallback)(async()=>{o(!0),s(null);try{let c=await Q.N.tryLoadModels()??void 0,d=await P.S.loadServerConfigs(),e=Array.isArray(d)?d:void 0,f=e?.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})),g={},h=new Map,i=e?.filter(a=>!!a.hostPathAccess)??[],j=new Set(i.map(a=>a.name));if(e){let b=new Map(e.map(a=>[a.name,!!a.disabled])),c=new Set;for(let b of a){let a=b?.data?.type??b?.type,d=b?.data?.properties?.boundServer;"mcp"===a&&"string"==typeof d&&d&&c.add(d)}for(let{name:a,disabled:b}of i)b||c.add(a);await Promise.all([...c].map(async a=>{if(!b.get(a))try{let b=await P.S.listServerTools(a);!b.error&&Array.isArray(b.tools)?(g[a]=b.tools.map(a=>a?.name).filter(a=>"string"==typeof a),h.set(a,"usable")):j.has(a)&&h.set(a,"unknown")}catch(b){j.has(a)&&h.set(a,"unknown"),aY.debug(`Could not gather MCP tool list for "${a}" during the flow check`,b)}}))}let k=e?Object.fromEntries(i.map(a=>[a.name,function(a,b,c){let d=b.find(b=>b.name===a);if(!d)return{configured:!1,disabled:!1,usability:"unavailable"};let e=!!d.disabled;return{configured:!0,disabled:e,usability:e?"unavailable":c.get(a)??"unknown",roots:d.roots,rootPath:d.rootPath}}(a.name,e,h)])):void 0,l=aW({nodes:a,edges:b},{models:c,servers:f,serverTools:g,fileAccessMcp:k});q(l.issues)}catch(a){aY.warn("Flow validation failed to run",a),q(null),s(c("flows.validation.failed"))}finally{o(!1)}},[a,b,c]),B=(0,e.useCallback)(a=>{m(a.currentTarget),h(!0),q(null),s(null),A()},[A]),C=(0,e.useCallback)(a=>{a&&(y(),document.dispatchEvent(new CustomEvent("selectNode",{detail:{nodeId:a}})))},[y]),G=p?.filter(a=>"error"===a.severity).length??0,H=(p?.length??0)-G;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(k.A,{ref:t,id:v,variant:"outlined",color:"primary",onClick:B,startIcon:(0,d.jsx)(az,{}),"aria-haspopup":"dialog","aria-expanded":g,"aria-controls":w,sx:{textTransform:"none"},children:[c("flows.validation.check"),p&&p.length>0&&(0,d.jsx)(E.A,{size:"small",color:G>0?"error":"warning",label:p.length,sx:{ml:1,height:20}})]}),(0,d.jsx)(as.A,{open:g,anchorEl:l,placement:"bottom-end",sx:{zIndex:a=>a.zIndex.modal+1},modifiers:[{name:"offset",options:{offset:[0,10]}}],children:(0,d.jsx)(at.x,{onClickAway:z,children:(0,d.jsxs)(D.A,{ref:u,id:w,role:"dialog","aria-modal":"false","aria-labelledby":x,"aria-busy":n,tabIndex:-1,onKeyDown:a=>{"Escape"===a.key&&(a.preventDefault(),a.stopPropagation(),y())},elevation:18,sx:{width:"min(92vw, 440px)",maxHeight:"min(68dvh, 560px)",overflow:"hidden",border:1,borderColor:"divider",borderRadius:3},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,px:2,py:1.5},children:[(0,d.jsx)(j.A,{id:x,variant:"subtitle1",fontWeight:800,children:c("flows.validation.title")}),p&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:.75,ml:.5},children:[G>0&&(0,d.jsx)(E.A,{size:"small",color:"error",label:f("flows.validation.error",G)}),H>0&&(0,d.jsx)(E.A,{size:"small",color:"warning",label:f("flows.validation.warning",H)})]})]}),(0,d.jsx)(I.A,{}),(0,d.jsx)(i.default,{sx:{maxHeight:"min(52dvh, 420px)",overflowY:"auto",p:1},children:n?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3,justifyContent:"center"},children:[(0,d.jsx)(F.default,{size:22}),(0,d.jsx)(j.A,{color:"text.secondary",children:c("flows.validation.checking")})]}):r?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"flex-start",gap:1.5,py:2,px:1},children:[(0,d.jsx)(aA.A,{color:"error"}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{fontWeight:700,children:c("flows.validation.unavailable")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:r})]})]}):p&&0===p.length?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3,px:1,justifyContent:"center"},children:[(0,d.jsx)(aC.A,{color:"success"}),(0,d.jsx)(j.A,{children:c("flows.validation.healthy")})]}):(0,d.jsx)(au.A,{dense:!0,disablePadding:!0,children:(p??[]).map((a,b)=>{let e=!!a.nodeId,f=(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(av.A,{sx:{minWidth:36},children:"error"===a.severity?(0,d.jsx)(aA.A,{color:"error",fontSize:"small"}):(0,d.jsx)(aB.A,{color:"warning",fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:(0,aX.z)(a,c),secondary:e?c("flows.validation.revealNode",{node:a.nodeLabel??a.nodeId??""}):void 0})]});return e?(0,d.jsx)(ax.A,{onClick:()=>C(a.nodeId),alignItems:"flex-start",children:f},b):(0,d.jsx)(ay.Ay,{alignItems:"flex-start",children:f},b)})})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,p:1},children:[(0,d.jsx)(k.A,{onClick:A,disabled:n,children:c("flows.validation.recheck")}),(0,d.jsx)(k.A,{onClick:y,variant:"contained",children:c("flows.validation.done")})]})]})})})]})};var a$=c(53773),a_=c(22042),a0=c(34304),a1=c(29900),a2=c(29777),a3=c(15699),a4=c(36210),a5=c(14328);let a6=(0,w.A)((0,d.jsx)("path",{d:"M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1"}),"AddRounded"),a7=(0,w.A)((0,d.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2zM9 9h6c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H9c-.55 0-1-.45-1-1v-8c0-.55.45-1 1-1m6.5-5-.71-.71c-.18-.18-.44-.29-.7-.29H9.91c-.26 0-.52.11-.7.29L8.5 4H6c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1z"}),"DeleteOutlineRounded");var a8=c(58585),a9=c(21570),ba=c(68774),bb=c(45231);let bc=({processNodeId:a,connections:b,beginnerMode:c=!1,onConnect:f,onRemove:g,loadServers:h})=>{let{t:k}=(0,ak.s9)(),[l,o]=(0,e.useState)(!1),[p,q]=(0,e.useState)([]),[r,s]=(0,e.useState)(!1),[t,u]=(0,e.useState)(null),v=(0,e.useMemo)(()=>new Set(b.map(a=>a.serverName)),[b]),w=(0,e.useMemo)(()=>p.filter(a=>!v.has(a.name)),[p,v]),x=(0,bb.E)("mcp",w),y=async()=>{o(!0),s(!0),u(null);try{q(await h())}catch(a){u(a instanceof Error?a.message:k("flows.inspector.mcpLoadError"))}finally{s(!1)}},z=async b=>{o(!1),await f(a,b)},A=a=>({key:a.name,content:c?(0,d.jsxs)(a5.A,{onClick:()=>{z(a.name)},sx:a=>({width:"100%",minHeight:74,px:1.5,py:1.25,justifyContent:"flex-start",textAlign:"left",border:`1px solid ${a.palette.divider}`,borderRadius:2.5,transition:a.transitions.create(["border-color","background-color"]),"&:hover":{borderColor:"primary.main",backgroundColor:"action.hover"}}),children:[(0,d.jsx)(a8.A,{color:"primary",sx:{mr:1.25}}),(0,d.jsxs)(i.default,{sx:{minWidth:0},children:[(0,d.jsx)(j.A,{variant:"body2",fontWeight:800,noWrap:!0,children:a.name}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:k("flows.inspector.allAppToolsIncluded")})]})]}):(0,d.jsx)(ba.A,{name:a.name,status:(a=>"connected"===a||"disconnected"===a||"error"===a||"connecting"===a||"initialization"===a||"requires_authentication"===a?a:"starting"===a?"connecting":"disconnected")(a.status),path:a.rootPath||a.serverUrl||a.websocketUrl||"",enabled:!a.disabled,transport:(a=>"websocket"===a||"sse"===a||"streamable"===a?a:"stdio")(a.transport),pickerMode:!0,onClick:()=>{z(a.name)}})}),B=x.items.map(A),C=x.groups?x.groups.map(a=>({...a,items:a.items.map(A)})):null,D=c?k("flows.inspector.stepApps"):k("flows.inspector.connectedMcpServers"),E=c?k("flows.inspector.addApp"):k("flows.inspector.addMcpServer");return(0,d.jsxs)(i.default,{sx:a=>({border:`1px solid ${a.palette.divider}`,borderRadius:2.5,overflow:"hidden"}),children:[(0,d.jsxs)(a$.A,{direction:"row",alignItems:"center",justifyContent:"space-between",sx:{px:1.25,py:.75},children:[(0,d.jsx)(j.A,{variant:"caption",fontWeight:800,children:D}),(0,d.jsx)(n.A,{title:E,children:(0,d.jsx)(m.A,{size:"small","aria-label":E,onClick:()=>{y()},children:(0,d.jsx)(a6,{fontSize:"small"})})})]}),0===b.length?(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",display:"block",sx:{px:1.25,pb:1.25},children:c?k("flows.inspector.noApps"):k("flows.inspector.noMcpServers")}):(0,d.jsx)(a$.A,{sx:{borderTop:1,borderColor:"divider"},children:b.map((b,e)=>(0,d.jsxs)(a$.A,{direction:"row",alignItems:"center",gap:.75,sx:{minHeight:42,px:1,borderTop:+(0!==e),borderColor:"divider"},children:[(0,d.jsx)(a8.A,{color:"primary",sx:{fontSize:17}}),(0,d.jsx)(j.A,{variant:"body2",noWrap:!0,sx:{flex:1,minWidth:0},children:b.serverName}),(0,d.jsx)(n.A,{title:k(c?"flows.inspector.removeApp":"flows.inspector.removeMcpServer",{server:b.serverName}),children:(0,d.jsx)(m.A,{size:"small",color:"error","aria-label":k(c?"flows.inspector.removeApp":"flows.inspector.removeMcpServer",{server:b.serverName}),onClick:()=>g(a,b.nodeId),children:(0,d.jsx)(a7,{fontSize:"small"})})})]},b.nodeId))}),(0,d.jsx)(a9.A,{open:l,onClose:()=>o(!1),ariaLabel:c?k("flows.inspector.chooseApp"):k("flows.serverTools.connectTitle"),isLoading:r,error:t,emptyMessage:c?k("flows.inspector.noAppsToAdd"):k("flows.serverTools.noneToConnect"),searchable:!0,searchPlaceholder:c?k("flows.inspector.searchApps"):k("flows.serverTools.searchServers"),searchTerm:x.searchTerm,onSearchChange:x.setSearchTerm,columns:{xs:12,sm:6},items:B,groups:C,collapsedKeys:x.collapsedKeys,onToggleGroup:x.toggleGroup})]})},bd=(0,C.Ay)(D.A)(({theme:a})=>({width:320,minWidth:320,height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden",border:`1px solid ${a.palette.divider}`,borderRadius:16,backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.9)":"rgba(255, 255, 255, 0.92)",boxShadow:"dark"===a.palette.mode?"0 18px 55px rgba(0,0,0,.24)":"0 18px 55px rgba(49,45,99,.1)",backdropFilter:"blur(20px) saturate(140%)",[a.breakpoints.down("lg")]:{width:286,minWidth:286},[a.breakpoints.down("md")]:{width:"100%",minWidth:0,height:"auto",maxHeight:"none"}})),be=({selectedNode:a,onClearSelection:b,onCommitNode:c,onOpenAdvanced:f,flowName:g,flowNameError:h,onFlowNameChange:l,flowDescription:o,onFlowDescriptionChange:p,authoringMode:q,onAuthoringModeChange:r,permissionRuleCount:s,onOpenPermissionRules:t,beginnerMode:v=!1,onSuggestTools:w,onCheckPlausibility:x,connectedMcpServers:y=[],onConnectMcpServer:z,onRemoveMcpServer:A,loadMcpServers:C})=>{let{t:D,tp:F}=(0,ak.s9)(),[J,K]=(0,e.useState)(a?"node":"flow"),[L,M]=(0,e.useState)(a?.data.label??""),[N,O]=(0,e.useState)(a?.data.description??""),[P,Q]=(0,e.useState)(String(a?.data.properties?.promptTemplate??""));(0,e.useEffect)(()=>{a?K("node"):K("flow")},[a?.id]),(0,e.useEffect)(()=>{M(a?.data.label??""),O(a?.data.description??""),Q(String(a?.data.properties?.promptTemplate??""))},[a?.id,a?.data]);let R=(0,e.useMemo)(()=>{if(!a)return[];let b=a.data.properties??{},c=[];return"string"==typeof b.modelId&&b.modelId?c.push({label:v?D("flows.inspector.summary.ai"):D("flows.inspector.summary.model"),value:b.modelId}):"string"==typeof b.model&&b.model&&c.push({label:v?D("flows.inspector.summary.ai"):D("flows.inspector.summary.model"),value:b.model}),"string"==typeof b.boundServer&&b.boundServer&&c.push({label:v?D("flows.inspector.summary.app"):D("flows.inspector.summary.server"),value:b.boundServer}),"string"==typeof b.subflowId&&b.subflowId&&c.push({label:v?D("flows.inspector.summary.agent"):D("flows.inspector.flow"),value:b.subflowId}),"string"==typeof b.signalName&&b.signalName&&c.push({label:v?D("flows.inspector.summary.notification"):D("flows.inspector.summary.signal"),value:b.signalName}),c},[a,v,D]),S=()=>{if(!a)return null;let b={...a.data.properties??{}};("process"===a.data.type||"start"===a.data.type)&&(b.promptTemplate=P);let d={...a.data,label:L.trim()||a.data.label,description:N.trim()||void 0,properties:b};return JSON.stringify(d)!==JSON.stringify(a.data)&&c(a.id,d),{...a,data:d}};return(0,d.jsxs)(bd,{elevation:0,"aria-label":v&&a?D("flows.inspector.stepSettings"):v?D("flows.inspector.agentSettings"):D("flows.inspector.flowInspector"),children:[(0,d.jsxs)(i.default,{sx:{px:1.5,pt:1.25},children:[(0,d.jsxs)(a$.A,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:1,children:[(0,d.jsxs)(i.default,{sx:{minWidth:0},children:[(0,d.jsx)(j.A,{variant:"overline",color:"text.secondary",sx:{letterSpacing:".12em"},children:v?a?D("flows.inspector.editStep"):D("flows.inspector.agentSettings"):D("flows.inspector.inspector")}),(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:800,noWrap:!0,children:a?a.data.label:g})]}),a&&(0,d.jsx)(n.A,{title:v?D("flows.inspector.closeStep"):D("flows.inspector.clearSelection"),children:(0,d.jsx)(m.A,{size:"small","aria-label":v?D("flows.inspector.closeStep"):D("flows.inspector.closeNode"),onClick:b,children:(0,d.jsx)(a1.A,{fontSize:"small"})})})]}),!v&&(0,d.jsxs)(a_.A,{value:J,onChange:(a,b)=>K(b),variant:"fullWidth",sx:{mt:.5,minHeight:38,"& .MuiTab-root":{minHeight:38}},children:[(0,d.jsx)(a0.A,{value:"node",label:D("flows.inspector.node"),disabled:!a}),(0,d.jsx)(a0.A,{value:"flow",label:D("flows.inspector.flow")})]})]}),(0,d.jsx)(I.A,{}),(0,d.jsx)(i.default,{sx:{p:1.5,overflowY:"auto",flex:1},children:"node"===J&&a?(0,d.jsxs)(a$.A,{spacing:1.5,children:[(0,d.jsxs)(a$.A,{direction:"row",alignItems:"center",gap:1,children:[(0,d.jsx)(E.A,{size:"small",label:((a,b,c)=>{let d=String(a.data.type||a.type||"node");return b?({start:c("flows.inspector.type.start"),process:c("flows.inspector.type.process"),finish:c("flows.inspector.type.finish"),mcp:c("flows.inspector.type.mcp"),subflow:c("flows.inspector.type.subflow"),resource:c("flows.inspector.type.resource"),signal:c("flows.inspector.type.signal"),trigger:c("flows.inspector.type.trigger")})[d]??c("flows.inspector.type.step"):"mcp"===d?"MCP":`${d.charAt(0).toUpperCase()}${d.slice(1)}`})(a,v,D),color:"finish"===a.data.type?"success":"primary",variant:"outlined"}),!v&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",noWrap:!0,children:a.id})]}),(0,d.jsx)(u.A,{label:v?D("flows.inspector.stepName"):D("flows.inspector.nodeName"),size:"small",fullWidth:!0,value:L,onChange:a=>M(a.target.value),onBlur:S,onKeyDown:a=>{"Enter"===a.key&&a.currentTarget.blur()}}),(0,d.jsx)(u.A,{label:v?D("flows.inspector.shortNote"):D("flows.inspector.whatStepDoes"),size:"small",fullWidth:!0,multiline:!0,minRows:2,maxRows:4,value:N,onChange:a=>O(a.target.value),onBlur:S,placeholder:v?D("flows.inspector.notePlaceholder"):D("flows.inspector.optionalNote")}),("process"===a.data.type||"start"===a.data.type)&&(0,d.jsx)(u.A,{label:v?"start"===a.data.type?D("flows.inspector.helpfulBackground"):D("flows.inspector.aiTask"):"start"===a.data.type?D("flows.inspector.startingContext"):D("flows.inspector.taskPrompt"),size:"small",fullWidth:!0,multiline:!0,minRows:5,maxRows:12,value:P,onChange:a=>Q(a.target.value),onBlur:S,onKeyDown:a=>{(a.ctrlKey||a.metaKey)&&"Enter"===a.key&&(a.preventDefault(),S())},placeholder:"start"===a.data.type?v?D("flows.inspector.startBeginnerPlaceholder"):D("flows.inspector.startPlaceholder"):v?D("flows.inspector.taskBeginnerPlaceholder"):D("flows.inspector.taskPlaceholder"),helperText:v?D("flows.inspector.blurHelp"):D("flows.inspector.keyboardHelp")}),!v&&R.length>0&&(0,d.jsx)(i.default,{sx:a=>({p:1.25,borderRadius:2.5,border:`1px solid ${a.palette.divider}`,bgcolor:(0,$.X4)(a.palette.primary.main,.05)}),children:R.map(a=>(0,d.jsxs)(a$.A,{direction:"row",justifyContent:"space-between",gap:1,mb:.5,children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:a.label}),(0,d.jsx)(j.A,{variant:"caption",fontWeight:700,noWrap:!0,children:a.value})]},a.label))}),(0,d.jsx)(k.A,{variant:v?"outlined":"contained",startIcon:(0,d.jsx)(B.A,{}),endIcon:(0,d.jsx)(a2.A,{}),onClick:()=>{let a=S();a&&f(a)},children:v?D("flows.inspector.moreOptions"):D("flows.inspector.fullSettings")}),"process"===a.data.type&&z&&A&&C&&(0,d.jsx)(bc,{processNodeId:a.id,connections:y,beginnerMode:v,onConnect:z,onRemove:A,loadServers:C}),"process"===a.data.type&&w&&(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(a4.A,{}),onClick:()=>{let a=S();a&&w(a)},children:D("flows.inspector.suggestTools")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:v?D("flows.inspector.beginnerTip"):D("flows.inspector.expertTip")})]}):(0,d.jsxs)(a$.A,{spacing:1.5,children:[(0,d.jsxs)(a$.A,{direction:"row",gap:1,alignItems:"center",children:[(0,d.jsx)(a3.A,{color:"primary",fontSize:"small"}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:800,children:v?D("flows.inspector.aboutAgent"):D("flows.inspector.flowDetails")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:v?D("flows.inspector.aboutHelp"):D("flows.inspector.flowHelp")})]})]}),(0,d.jsx)(u.A,{size:"small",label:v?D("flows.inspector.agentName"):D("flows.inspector.flowName"),value:g,onChange:a=>l(a.target.value),error:!!h,helperText:h??(v?D("flows.inspector.agentNameHelp"):D("flows.inspector.renameHelp")),fullWidth:!0}),x&&(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(a4.A,{}),onClick:x,children:D("flows.inspector.checkAgent")}),(0,d.jsx)(u.A,{size:"small",label:v?D("flows.inspector.helpQuestion"):D("flows.inspector.description"),value:o,onChange:a=>p(a.target.value),multiline:!0,minRows:3,maxRows:7,fullWidth:!0,placeholder:v?D("flows.inspector.agentDescriptionPlaceholder"):D("flows.inspector.flowDescriptionPlaceholder")}),!v&&(0,d.jsxs)(i.default,{sx:a=>({p:1.25,borderRadius:2.5,border:`1px solid ${a.palette.divider}`,bgcolor:(0,$.X4)(a.palette.primary.main,.04)}),children:[(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{size:"small",checked:"advanced"===q,onChange:a=>r(a.target.checked?"advanced":"guided")}),label:"advanced"===q?D("flows.inspector.advanced"):D("flows.inspector.guided")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",display:"block",children:"advanced"===q?D("flows.inspector.advancedHelp"):D("flows.inspector.guidedHelp")})]}),"advanced"===q&&(0,d.jsx)(k.A,{variant:"outlined",onClick:t,startIcon:(0,d.jsx)(a3.A,{}),children:s?F("flows.inspector.permissionRules",s):D("flows.inspector.permissionRules")}),!v&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(I.A,{}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:D("flows.inspector.shortcuts")})]})]})})]})};var bf=c(82605),bg=c(50062),bh=c(7675);let bi=(0,w.A)((0,d.jsx)("path",{d:"M11 5v11.17l-4.88-4.88c-.39-.39-1.03-.39-1.42 0s-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0l6.59-6.59c.39-.39.39-1.02 0-1.41a.996.996 0 0 0-1.41 0L13 16.17V5c0-.55-.45-1-1-1s-1 .45-1 1"}),"ArrowDownwardRounded");var bj=c(26168);let bk=(0,w.A)((0,d.jsx)("path",{d:"M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82"}),"PlayArrowRounded"),bl=new Set(["Process Node","Subflow Node","Signal Node"]),bm=({children:a,complete:b=!1})=>(0,d.jsx)(i.default,{"aria-hidden":"true",sx:{display:"grid",width:34,height:34,flexShrink:0,placeItems:"center",borderRadius:"50%",color:b?"success.contrastText":"primary.contrastText",bgcolor:b?"success.main":"primary.main",fontWeight:850,boxShadow:a=>`0 8px 24px ${(0,$.X4)(b?a.palette.success.main:a.palette.primary.main,.28)}`},children:b?(0,d.jsx)(bj.A,{fontSize:"small"}):a}),bn=({nodes:a,orderedStepIds:b=[],selectedNodeId:c,flowName:g,flowNameError:h,onFlowNameChange:l,onSelectNode:m,onAddTask:n,onTry:o,isSaving:q=!1,hasAdvancedFeatures:r=!1,readyToTry:s=!0,needsAIConnection:t=!1,onSwitchAdvanced:v,models:w=[],aiAssistance:x="manual",selectedModelId:y,onChooseAssistance:z,onModelChange:A,onCheckPlausibility:C})=>{let{t:F}=(0,ak.s9)(),[G,H]=(0,e.useState)(""),I=(0,e.useMemo)(()=>{let c=new Map(b.map((a,b)=>[a,b]));return a.filter(a=>["process","subflow","signal"].includes(a.data.type)).sort((a,b)=>(c.get(a.id)??Number.MAX_SAFE_INTEGER)-(c.get(b.id)??Number.MAX_SAFE_INTEGER)||(a.position?.y??0)-(b.position?.y??0))},[a,b]),J=!!g.trim()&&!/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(g.trim())&&!h,L=!!G.trim()&&!r&&"unasked"!==x&&("assisted"!==x||!!y),M=J&&I.length>0&&s&&!q,N=()=>{let a=G.trim();a&&(n(a),H(""))};return(0,d.jsx)(i.default,{"aria-label":F("flows.guided.aria"),sx:{flex:1,minHeight:0,overflowY:"auto",px:{xs:.5,sm:1.5,lg:3},py:{xs:1,sm:1.5,lg:2.5}},children:(0,d.jsxs)(i.default,{sx:{width:"100%",maxWidth:780,mx:"auto"},children:[(0,d.jsxs)(a$.A,{spacing:.8,sx:{mb:2.5},children:[(0,d.jsx)(E.A,{icon:(0,d.jsx)(a4.A,{}),label:F("flows.guided.simple"),color:"primary",variant:"outlined",sx:{alignSelf:"flex-start"}}),(0,d.jsx)(j.A,{variant:"h4",children:F("flows.guided.recipe")}),(0,d.jsx)(j.A,{color:"text.secondary",children:F("flows.guided.intro")})]}),(0,d.jsxs)(a$.A,{spacing:1.5,children:[w.length>0&&z&&(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:"unasked"===x?"primary.main":"divider",borderRadius:4},children:(0,d.jsxs)(a$.A,{spacing:1.5,children:[(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"h6",children:F("flows.guided.aiQuestion")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:F("flows.guided.aiHelp")})]}),"unasked"===x?(0,d.jsxs)(a$.A,{direction:{xs:"column",sm:"row"},spacing:1,children:[(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(a4.A,{}),onClick:()=>z("assisted"),children:F("flows.guided.yesHelp")}),(0,d.jsx)(k.A,{variant:"outlined",onClick:()=>z("manual"),children:F("flows.guided.manual")})]}):(0,d.jsxs)(a$.A,{direction:{xs:"column",sm:"row"},spacing:1.5,alignItems:{sm:"center"},children:[(0,d.jsx)(E.A,{color:"assisted"===x?"primary":"default",label:"assisted"===x?F("flows.guided.aiOn"):F("flows.guided.manualSetup")}),"assisted"===x&&A&&(0,d.jsxs)(bf.A,{size:"small",sx:{minWidth:260},children:[(0,d.jsx)(bg.A,{id:"guided-helper-model-label",children:F("flows.guided.aiHelper")}),(0,d.jsx)(bh.A,{labelId:"guided-helper-model-label",label:F("flows.guided.aiHelper"),value:y??"",onChange:a=>A(String(a.target.value)),children:w.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName||a.name},a.id))})]}),(0,d.jsx)(k.A,{size:"small",onClick:()=>z("assisted"===x?"manual":"assisted"),children:"assisted"===x?F("flows.guided.turnOff"):F("flows.guided.turnOn")})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:J?"success.main":"divider",borderRadius:4,bgcolor:"background.paper"},children:(0,d.jsxs)(a$.A,{direction:"row",spacing:1.5,alignItems:"flex-start",children:[(0,d.jsx)(bm,{complete:J,children:"1"}),(0,d.jsxs)(i.default,{sx:{flex:1,minWidth:0},children:[(0,d.jsx)(j.A,{variant:"h6",children:F("flows.guided.nameTitle")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1.5},children:F("flows.guided.nameHelp")}),(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:F("flows.guided.name"),value:g,error:!!h,helperText:h??(J?F("flows.guided.looksGood"):F("flows.guided.nameHint")),onChange:a=>l(a.target.value),onFocus:a=>{/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(a.currentTarget.value)&&a.currentTarget.select()}})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:I.length>0?"success.main":"divider",borderRadius:4,bgcolor:"background.paper"},children:(0,d.jsxs)(a$.A,{direction:"row",spacing:1.5,alignItems:"flex-start",children:[(0,d.jsx)(bm,{complete:I.length>0,children:"2"}),(0,d.jsxs)(i.default,{sx:{flex:1,minWidth:0},children:[(0,d.jsx)(j.A,{variant:"h6",children:I.length?F("flows.guided.addAnother"):F("flows.guided.goalQuestion")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:I.length?F("flows.guided.nextHelp"):F("flows.guided.goalHelp")}),r&&(0,d.jsx)(p.A,{severity:"info",action:(0,d.jsx)(k.A,{color:"inherit",size:"small",onClick:v,children:F("flows.guided.openExpert")}),sx:{mt:1.5},children:F("flows.guided.advancedWarning")}),(0,d.jsxs)(a$.A,{spacing:1,sx:{mt:2},children:[(0,d.jsxs)(i.default,{sx:{px:1.5,py:1,borderRadius:3,color:"text.secondary",bgcolor:a=>(0,$.X4)(a.palette.primary.main,.055),border:1,borderColor:"divider"},children:[(0,d.jsx)(j.A,{variant:"caption",fontWeight:800,color:"primary.main",children:F("flows.guided.when").toLocaleUpperCase()}),(0,d.jsx)(j.A,{variant:"body2",fontWeight:700,children:F("flows.guided.someoneAsks")})]}),I.map((a,b)=>(0,d.jsxs)(f().Fragment,{children:[(0,d.jsx)(bi,{"aria-hidden":"true",sx:{alignSelf:"center",color:"text.disabled",fontSize:20}}),(0,d.jsx)(a5.A,{onClick:()=>m(a.id),sx:{display:"block",width:"100%",borderRadius:3,textAlign:"left"},children:(0,d.jsx)(D.A,{elevation:0,sx:{width:"100%",p:1.5,border:1,borderColor:c===a.id?"primary.main":"divider",borderRadius:3,bgcolor:c===a.id?a=>(0,$.X4)(a.palette.primary.main,.1):"background.default",boxShadow:c===a.id?a=>`0 0 0 3px ${(0,$.X4)(a.palette.primary.main,.12)}`:"none"},children:(0,d.jsxs)(a$.A,{direction:"row",spacing:1.25,alignItems:"flex-start",children:[(0,d.jsx)(i.default,{sx:{display:"grid",width:30,height:30,flexShrink:0,placeItems:"center",borderRadius:2,color:"primary.contrastText",bgcolor:"primary.main",fontWeight:850},children:b+1}),(0,d.jsxs)(i.default,{sx:{minWidth:0,flex:1},children:[(0,d.jsx)(j.A,{variant:"overline",color:"primary.main",children:((a,b)=>b("subflow"===a?"flows.guided.type.subflow":"signal"===a?"flows.guided.type.signal":"flows.guided.type.process"))(a.data.type,F)}),(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:800,children:((a,b)=>{let c=a.data.label?.trim();return!c||bl.has(c)?b("process"===a.data.type?"flows.guided.default.process":"subflow"===a.data.type?"flows.guided.default.subflow":"signal"===a.data.type?"flows.guided.default.signal":"flows.guided.default.step"):c})(a,F)}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.35,display:"-webkit-box",overflow:"hidden",WebkitBoxOrient:"vertical",WebkitLineClamp:2},children:((a,b)=>{let c=String(a.data.properties?.promptTemplate??"").trim();return c||(a.data.description?.trim()?a.data.description.trim():b("subflow"===a.data.type?"flows.guided.summary.subflow":"signal"===a.data.type?"flows.guided.summary.signal":"flows.guided.summary.process"))})(a,F)})]}),(0,d.jsx)(B.A,{color:"action",fontSize:"small"})]})})})]},a.id)),(0,d.jsx)(bi,{"aria-hidden":"true",sx:{alignSelf:"center",color:"text.disabled",fontSize:20}}),(0,d.jsxs)(i.default,{sx:{px:1.5,py:1,borderRadius:3,color:"text.secondary",bgcolor:a=>(0,$.X4)(a.palette.success.main,.055),border:1,borderColor:"divider"},children:[(0,d.jsx)(j.A,{variant:"caption",fontWeight:800,color:"success.main",children:F("flows.guided.then").toLocaleUpperCase()}),(0,d.jsx)(j.A,{variant:"body2",fontWeight:700,children:F("flows.guided.sendAnswer")})]})]}),(0,d.jsxs)(a$.A,{direction:{xs:"column",sm:"row"},spacing:1,alignItems:"stretch",sx:{mt:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,multiline:!0,minRows:2,maxRows:5,label:I.length?F("flows.guided.nextLabel"):F("flows.guided.goalLabel"),placeholder:F("flows.guided.goalPlaceholder"),value:G,disabled:r,onChange:a=>H(a.target.value),onKeyDown:a=>{(a.ctrlKey||a.metaKey)&&"Enter"===a.key&&L&&(a.preventDefault(),N())}}),(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(a6,{}),disabled:!L,onClick:N,sx:{minWidth:{sm:150}},children:I.length?F("flows.guided.addStep"):F("flows.guided.createGoal")})]})]})]})}),(0,d.jsx)(D.A,{elevation:0,sx:{p:{xs:2,sm:2.5},border:1,borderColor:M?"primary.main":"divider",borderRadius:4,bgcolor:a=>(0,$.X4)(a.palette.primary.main,M?.075:.025)},children:(0,d.jsxs)(a$.A,{direction:{xs:"column",sm:"row"},spacing:1.5,alignItems:{sm:"center"},children:[(0,d.jsx)(bm,{children:"3"}),(0,d.jsxs)(i.default,{sx:{flex:1},children:[(0,d.jsx)(j.A,{variant:"h6",children:F("flows.guided.tryTitle")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:F("flows.guided.tryHelp")}),t&&I.some(a=>"process"===a.data.type)&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:F("flows.guided.needsAi")})]}),o&&(0,d.jsxs)(a$.A,{spacing:1,children:[C&&"assisted"===x&&(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(a4.A,{}),disabled:0===I.length,onClick:C,children:F("flows.guided.checkAi")}),(0,d.jsx)(k.A,{size:"large",variant:"contained",startIcon:(0,d.jsx)(bk,{}),disabled:!M,onClick:o,children:q?F("flows.guided.saving"):F("flows.guided.tryAgent")})]})]})})]})]})})};var bo=c(77028);let bp=(0,w.A)((0,d.jsx)("path",{d:"M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35 6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54 9.9c.92-2.34.44-5.1-1.45-6.99"}),"BuildRounded"),bq=(0,w.A)((0,d.jsx)("path",{fillRule:"evenodd",d:"M20 3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2M9 17H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m0-4H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m0-4H6c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m9.7 2.12-3.17 3.17c-.39.39-1.03.39-1.42 0l-1.41-1.42a.996.996 0 0 1 0-1.41c.39-.39 1.02-.39 1.41 0l.71.71 2.47-2.47c.39-.39 1.02-.39 1.41 0l.01.01c.38.39.38 1.03-.01 1.41"}),"FactCheckRounded");function br({open:a,flow:b,relatedFlows:c=[],nodeId:f,modelId:g,models:h=[],onApply:l,onApplyRelatedFlows:m,onClose:n}){let{t:o,tp:t}=(0,ak.s9)(),[u,w]=(0,e.useState)("suggesting"),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(new Set),[B,C]=(0,e.useState)(null),[H,I]=(0,e.useState)(b),[J,L]=(0,e.useState)(g??""),[M,N]=(0,e.useState)(null),P=async a=>{w("checking"),N(null);try{let b=await O.g.checkPlausibility({flow:a,relatedFlows:c,modelId:J||g||void 0,intendedContext:"chat"});C(b),w("plausibility")}catch(a){N(a instanceof Error?a.message:o("flows.assistance.checkFailed")),w("plausibility")}},Q=(0,e.useMemo)(()=>x?.suggestions.filter(a=>z.has(`${a.server}\u0000${a.tool}`))??[],[z,x]),R=(0,e.useMemo)(()=>{if(!B)return 0;let a=new Set([b.id,...c.map(a=>a.id)]);return B.patches.filter(b=>a.has(b.flowId)).length},[b.id,B,c]),S=async()=>{if(f&&J){w("suggesting"),N(null);try{let a=await O.g.suggestToolsForStep({flow:H,nodeId:f,modelId:J,goal:H.description});y(a),A(new Set(a.suggestions.map(a=>`${a.server}\u0000${a.tool}`))),0===a.suggestions.length?await P(H):w("tools")}catch(a){N(a instanceof Error?a.message:o("flows.assistance.suggestFailed")),w("tools")}}},T=async()=>{if(f&&x){w("suggesting"),N(null);try{let a=await O.g.applyToolsToStep({flow:H,nodeId:f,selections:Q,proposedPrompt:x.proposedPrompt});I(a),l(a),await P(a)}catch(a){N(a instanceof Error?a.message:o("flows.assistance.connectFailed")),w("tools")}}},U="suggesting"===u||"checking"===u;return(0,d.jsxs)(q.A,{open:a,onClose:U?void 0:n,fullWidth:!0,maxWidth:"md",children:[(0,d.jsxs)(r.A,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(a4.A,{color:"primary"}),"plausibility"===u||"checking"===u?o("flows.assistance.plausibilityTitle"):o("flows.assistance.toolsTitle")]}),(0,d.jsxs)(s.A,{dividers:!0,children:[U&&(0,d.jsxs)(a$.A,{alignItems:"center",spacing:1.5,sx:{py:5},children:[(0,d.jsx)(F.default,{}),(0,d.jsx)(j.A,{color:"text.secondary",children:"suggesting"===u?o("flows.assistance.finding"):o("flows.assistance.checking")})]}),M&&!U&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:M}),"tools"===u&&!x&&(0,d.jsx)(a$.A,{spacing:2,children:0===h.length?(0,d.jsx)(p.A,{severity:"warning",children:o("flows.assistance.needModel")}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(p.A,{severity:"info",children:o("flows.assistance.chooseModel")}),(0,d.jsxs)(bf.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(bg.A,{id:"assistance-model-label",children:o("flows.assistance.aiHelper")}),(0,d.jsx)(bh.A,{labelId:"assistance-model-label",label:o("flows.assistance.aiHelper"),value:J,onChange:a=>L(String(a.target.value)),children:h.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName||a.name},a.id))})]})]})}),"tools"===u&&x&&(0,d.jsxs)(a$.A,{spacing:1.5,children:[(0,d.jsx)(p.A,{severity:"info",children:o("flows.assistance.approvalHelp")}),0===x.suggestions.length?(0,d.jsx)(p.A,{severity:"success",children:o("flows.assistance.noTool")}):x.suggestions.map(a=>{let b=`${a.server}\u0000${a.tool}`;return(0,d.jsx)(D.A,{variant:"outlined",sx:{p:1.25},children:(0,d.jsx)(G.A,{control:(0,d.jsx)(bo.A,{checked:z.has(b),onChange:a=>{A(c=>{let d=new Set(c);return a.target.checked?d.add(b):d.delete(b),d})}}),label:(0,d.jsxs)(i.default,{children:[(0,d.jsxs)(a$.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,d.jsx)(E.A,{size:"small",label:a.server}),(0,d.jsx)(j.A,{fontWeight:800,children:a.tool})]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.reason})]})})},b)}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",children:o("flows.assistance.promptPreview")}),(0,d.jsx)(D.A,{variant:"outlined",sx:{p:1.25,mt:.5,whiteSpace:"pre-wrap",maxHeight:220,overflow:"auto"},children:(0,d.jsx)(j.A,{variant:"body2",component:"pre",sx:{m:0,fontFamily:"inherit",whiteSpace:"pre-wrap"},children:x.proposedPrompt})})]})]}),"plausibility"===u&&B&&(0,d.jsxs)(a$.A,{spacing:1.5,children:[(0,d.jsx)(a$.A,{direction:"row",gap:1,flexWrap:"wrap",children:B.contexts.map(a=>(0,d.jsx)(E.A,{label:a.label},`${a.kind}-${a.sourceId??""}`))}),0===B.issues.length?(0,d.jsx)(p.A,{severity:"success",children:o("flows.assistance.plausible")}):B.issues.map((a,c)=>{let e=B.repairedFlows.find(b=>b.id===a.flowId);return(0,d.jsxs)(p.A,{severity:a.severity,children:[e&&e.id!==b.id?`${e.name}: `:"",(0,aX.z)(a,o)]},`${a.code}-${a.flowId??""}-${a.nodeId??""}-${c}`)}),R>0&&(0,d.jsx)(p.A,{severity:"info",children:t("flows.assistance.patch",R)}),B.patches.length>R&&(0,d.jsx)(p.A,{severity:"warning",children:t("flows.assistance.savedPatch",B.patches.length-R)})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:n,disabled:U,children:o("flows.assistance.close")}),"tools"===u&&!x&&h.length>0&&(0,d.jsx)(k.A,{variant:"contained",disabled:!J,onClick:()=>void S(),children:o("flows.assistance.suggest")}),"tools"===u&&x&&0===x.suggestions.length&&(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(bq,{}),onClick:()=>void P(H),children:o("flows.assistance.checkFlow")}),"tools"===u&&x&&x.suggestions.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>void P(H),children:o("flows.assistance.skip")}),(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(bp,{}),disabled:0===Q.length,onClick:()=>void T(),children:t("flows.assistance.connect",Q.length)})]}),"plausibility"===u&&B&&R>0?(0,d.jsx)(k.A,{variant:"contained",startIcon:(0,d.jsx)(bq,{}),onClick:()=>{l(B.repairedFlow);let a=new Map(B.repairedFlows.map(a=>[a.id,a]));m?.(c.map(b=>a.get(b.id)??b)),n()},children:o("flows.assistance.apply")}):null]})]})}var bs=c(30137),bt=c(80518);function bu({currentLabel:a,nameIsCustom:b,defaultLabel:c,previousAutoLabel:d,nextAutoLabel:e}){return!0===b?a&&a.length>0?a:e:!a||0===a.length||a===c||void 0!==d&&d.length>0&&a===d?e:a}let bv=(0,L.h)("components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useModelManagement.ts");var bw=c(63650);let bx=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useServerConnection");function by(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}let bz=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/hooks/useHandoffTools"),bA=({nodeData:a,setNodeData:b})=>{let{t:c}=(0,ak.s9)();return a?(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,children:c("flows.process.configTitle")}),(0,d.jsx)(u.A,{fullWidth:!0,label:c("flows.mcpNode.label"),value:a.label||"",onChange:a=>b(b=>({...b,label:a.target.value,properties:{...b?.properties,nameIsCustom:!0}})),margin:"normal"}),(0,d.jsx)(u.A,{fullWidth:!0,label:c("flows.process.description"),value:a.description||"",onChange:c=>b({...a,description:c.target.value}),margin:"normal",multiline:!0,rows:2,helperText:c("flows.process.descriptionHelp")})]}):null};var bB=c(38233),bC=c(93083),bD=c(24330),bE=c(77127);let bF=({isLoadingModels:a,loadError:b,models:c,selectedModelId:e,handleModelSelect:f,isModelBound:g,handleUnbindModel:h})=>{let{t:l}=(0,ak.s9)(),m=(0,bb.E)("models",c),n=a=>({key:a.id,content:(a=>(0,d.jsx)(bE.A,{model:a,selectable:!0,selected:e===a.id,onSelect:f}))(a)}),o=m.items.map(n),p=m.groups?m.groups.map(a=>({...a,items:a.items.map(n)})):null;return(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:l("flows.process.bindModel")}),(0,d.jsx)(i.default,{role:"radiogroup","aria-label":l("flows.process.bindModelAria"),children:(0,d.jsx)(bD.A,{isLoading:a,error:b,loadingMessage:l("flows.process.loadingModels"),emptyMessage:l("flows.process.noModels"),searchable:!0,searchPlaceholder:l("flows.process.searchModels"),searchTerm:m.searchTerm,onSearchChange:m.setSearchTerm,columns:{xs:12,sm:6},items:o,groups:p,collapsedKeys:m.collapsedKeys,onToggleGroup:m.toggleGroup})}),!a&&!b&&c.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bB.A,{children:l(e?"flows.process.modelSelected":"flows.process.modelSelect")}),g&&(0,d.jsx)(i.default,{sx:{mt:2,display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(bC.A,{}),onClick:h,color:"primary",variant:"outlined",size:"small",children:l("flows.process.unbindModel")})})]})]})};var bG=c(56154),bH=c(30818),bI=c(27114),bJ=c(53222),bK=c(36647),bL=c(40973),bM=c(9604),bN=c(17332),bO=c(63908);let bP=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools"),bQ=({isLoadingServers:a,connectedMcpNodes:b,availableServers:c,onConnectMcpServer:f,serverToolsMap:g,serverStatuses:h,isLoadingTools:l,handleSelectToolServer:o,handleInsertToolBinding:p,selectedToolServerNodeId:q,selectedNodeId:r,isLoadingSelectedServerTools:s,promptBuilderRef:t,handleRetryServer:v,handleRestartServer:w})=>{let{t:x,tp:z}=(0,ak.s9)(),A=q??b[0]?.nodeId??null,[B,C]=(0,e.useState)({}),[E,G]=(0,e.useState)(!1),H=(c??[]).filter(a=>!b.some(b=>b.serverName===a.name)),I=!!f&&H.length>0,J=(0,bb.E)("mcp",H),K=a=>({key:a.name,content:(a=>(0,d.jsx)(ba.A,{name:a.name,status:a.status||"disconnected",path:a.rootPath||"",enabled:!a.disabled,transport:a.transport||"stdio",pickerMode:!0,onClick:()=>{var b;return b=a.name,void(G(!1),f?.(b))}}))(a)}),L=J.items.map(K),M=J.groups?J.groups.map(a=>({...a,items:a.items.map(K)})):null,N=(0,d.jsx)(a9.A,{open:E,onClose:()=>G(!1),title:x("flows.serverTools.connectTitle"),description:x("flows.serverTools.connectDescription"),emptyMessage:x("flows.serverTools.noneToConnect"),searchable:!0,searchPlaceholder:x("flows.serverTools.searchServers"),searchTerm:J.searchTerm,onSearchChange:J.setSearchTerm,columns:{xs:12,sm:6},items:L,groups:M,collapsedKeys:J.collapsedKeys,onToggleGroup:J.toggleGroup}),[O,P]=(0,e.useState)(""),[Q,R]=(0,e.useState)({}),S=(a,b,c)=>{if(a!==A){bP.debug("Node tab not selected, selecting node first",{selectedNodeId:a,serverName:b,toolName:c}),V(a);return}b&&c?(bP.debug("Inserting tool binding",{serverName:b,toolName:c}),p(b,c)):bP.warn("Cannot insert tool binding, server or tool name is undefined",{serverName:b,toolName:c})},T=a=>{try{let c=b.find(b=>b.nodeId===a);if(!c)return bP.warn(`Could not find connected MCP node with ID ${a}`),[];let d=c.enabledTools||[];return bP.debug(`Enabled tools for node ${a}: ${JSON.stringify(d)}`),Array.isArray(d)?d:[]}catch(b){return bP.error(`Error getting enabled tools for node ${a}:`,b),[]}},U=(a,b,c)=>{try{if(!c||!Array.isArray(c))return bP.warn(`Tools array is not available or not an array for server ${b}`),[];let d=T(a),e=c;if(d.length>0?e=c.filter(a=>a&&a.name&&d.includes(a.name)):(bP.debug(`No tools explicitly enabled for node ${a}, showing none.`),e=[]),O.trim()){let a=O.toLowerCase().trim();e=e.filter(b=>b.name&&b.name.toLowerCase().includes(a)||b.description&&b.description.toLowerCase().includes(a)||b.inputSchema&&JSON.stringify(b.inputSchema).toLowerCase().includes(a))}return e}catch(d){return bP.error(`Error filtering tools for node ${a} (server ${b}):`,d),c||[]}},V=a=>{o(a)},W=async(a,b)=>{b.stopPropagation(),bP.debug(`Retry button clicked for server: ${a}`),C(b=>({...b,[a]:!0}));try{v&&await v(a)}finally{setTimeout(()=>{C(b=>({...b,[a]:!1}))},500)}},X=async(a,b)=>{b.stopPropagation(),bP.debug(`Restart button clicked for server: ${a}`),C(b=>({...b,[a]:!0}));try{w&&await w(a)}finally{setTimeout(()=>{C(b=>({...b,[a]:!1}))},500)}};(0,e.useEffect)(()=>{b.length>0&&!q&&o(b[0].nodeId)},[b,q,o]);let Y=b.find(a=>a.nodeId===A),Z=Y?.serverName;return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:x("flows.serverTools.title")}),a?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:x("flows.serverTools.loadingNodes")})]}):0===b.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:x("flows.serverTools.noneConnected")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:I?x("flows.serverTools.pickHelp"):x("flows.serverTools.connectHelp")}),I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",mt:2},children:(0,d.jsx)(k.A,{variant:"contained",size:"small",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>G(!0),children:x("flows.serverTools.connect")})}),N]}):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",mb:2,borderBottom:1,borderColor:"divider"},children:[(0,d.jsx)(a_.A,{value:A||b[0]?.nodeId||"",onChange:(a,b)=>V(b),variant:"scrollable",scrollButtons:"auto",sx:{flexGrow:1},children:b.map(a=>{if(!a||!a.nodeId||!a.serverName)return bP.warn("Skipping invalid MCP node in tabs:",a),null;let b=a.serverName,c=a.nodeId,e=a.status;B[b],l[b];let f=g[b]||[],h=T(c);return U(c,b,f).length,(0,d.jsx)(a0.A,{value:c,label:(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(j.A,{variant:"body2",sx:{color:"connected"===e?"success.main":"error"===e?"error.main":"text.secondary"},children:b}),h.length>0&&(0,d.jsx)(bG.A,{badgeContent:h.length,color:"primary",sx:{ml:1}})]}),sx:{textTransform:"none",minHeight:"48px",opacity:"connected"!==e?.7:1}},c)})}),I&&(0,d.jsx)(n.A,{title:x("flows.serverTools.connectAnother"),children:(0,d.jsx)(m.A,{size:"small",onClick:()=>G(!0),sx:{ml:1},children:(0,d.jsx)(y.A,{fontSize:"small"})})}),N]}),Y&&Z&&(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"flex-end",mb:2},children:[(0,d.jsx)(n.A,{title:x("flows.serverTools.retry",{server:Z}),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:a=>W(Z,a),disabled:B[Z]||l[Z],children:B[Z]?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bJ.A,{fontSize:"small"})})})}),"connected"===Y.status&&w&&(0,d.jsx)(n.A,{title:x("flows.serverTools.restart",{server:Z}),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:a=>X(Z,a),disabled:B[Z],sx:{ml:1},children:(0,d.jsx)(bK.A,{fontSize:"small"})})})})]}),(0,d.jsx)(u.A,{placeholder:x("flows.serverTools.searchTools"),variant:"outlined",size:"small",fullWidth:!0,value:O,onChange:a=>P(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bL.A,{fontSize:"small"})})}}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:Y&&Z&&(()=>{let a=Y.nodeId,b=Y.serverName;if("connected"!==Y.status)return(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:x("flows.serverTools.notConnectedTools",{server:b})})},a);if(l[b])return(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(F.default,{size:24})},a);let c=g[b]||[],e=U(a,b,c);if(0===e.length){let b=T(a).length;return(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:O.trim()?x("flows.serverTools.noMatch",{search:O}):0===b?x("flows.serverTools.noneEnabled"):x("flows.serverTools.noneAvailable")})},a)}return(0,d.jsx)(au.A,{disablePadding:!0,children:e.map(c=>{let e,f=(e=c.name,`${a}::${e}`),g=!!Q[f],h=c.description||x("flows.agentTools.noDescription"),k=(a=>{let b=Object.keys(a?.properties??{}).length;if(0===b)return x("flows.serverTools.parameter.none");let c=Array.isArray(a?.required)?a.required.length:0,d=c>0?z("flows.serverTools.required",c):"";return z("flows.serverTools.parameter",b,{required:d})})(c.inputSchema);return(0,d.jsx)(bH.A,{variant:"outlined",role:"button",tabIndex:0,"aria-label":x("flows.serverTools.addTool",{tool:c.name,server:b}),onClick:()=>S(a,b,c.name),onKeyDown:d=>{d.target===d.currentTarget&&("Enter"===d.key||" "===d.key)&&(d.preventDefault(),S(a,b,c.name))},sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"},"&:focus-visible":{outline:"2px solid",outlineColor:"primary.main",outlineOffset:1}},children:(0,d.jsxs)(bI.A,{sx:{p:1.25,"&:last-child":{pb:1.25}},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"flex-start",gap:1},children:[(0,d.jsxs)(i.default,{sx:{flexGrow:1,minWidth:0},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bM.A,{fontSize:"small",sx:{mr:1,color:"primary.main",flexShrink:0}}),(0,d.jsx)(i.default,{component:"span",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name})]}),(0,d.jsx)(n.A,{title:h,describeChild:!0,placement:"top-start",children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",tabIndex:0,sx:{mt:.5,display:"-webkit-box",WebkitBoxOrient:"vertical",WebkitLineClamp:2,overflow:"hidden"},children:h})}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:k})]}),(0,d.jsx)(n.A,{title:x(g?"flows.serverTools.collapse":"flows.serverTools.expand",{tool:c.name}),children:(0,d.jsx)(m.A,{size:"small","aria-label":x(g?"flows.serverTools.collapse":"flows.serverTools.expand",{tool:c.name}),"aria-expanded":g,"aria-controls":`${f}-details`,onClick:a=>((a,b)=>{b.stopPropagation(),R(b=>({...b,[a]:!b[a]}))})(f,a),children:g?(0,d.jsx)(bO.A,{}):(0,d.jsx)(bN.A,{})})})]}),g&&(0,d.jsxs)(i.default,{id:`${f}-details`,sx:{mt:1,pt:1,borderTop:1,borderColor:"divider"},onClick:a=>a.stopPropagation(),children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{whiteSpace:"pre-wrap"},children:h}),c.inputSchema&&(a=>a&&a.properties?(0,d.jsxs)(i.default,{sx:{mt:1},children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:x("flows.agentTools.parameters")}),(0,d.jsx)(i.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(i.default,{sx:{mb:.5},children:[(0,d.jsxs)(j.A,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||x("flows.agentTools.noDescription")})]},b))})]}):null)(c.inputSchema)]})]})},c.name)})},a)})()})]})]})},bR=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerResources"),bS=({primary:a,secondary:b,chip:c,tooltip:e,onClick:f})=>(0,d.jsx)(bH.A,{variant:"outlined",onClick:f,title:e,sx:{mb:1,mx:1,mt:1,cursor:"pointer","&:hover":{boxShadow:1,bgcolor:"action.hover"}},children:(0,d.jsx)(bI.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ad.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:b})]}),c&&(0,d.jsx)(E.A,{size:"small",label:c,sx:{ml:1,flexShrink:0}})]})})}),bT=({connectedMcpNodes:a,handleInsertResourceBinding:b,promptBuilderRef:c})=>{let{t:f}=(0,ak.s9)(),[g,h]=(0,e.useState)(null),[k,l]=(0,e.useState)([]),[m,n]=(0,e.useState)([]),[o,q]=(0,e.useState)(!1),[r,s]=(0,e.useState)(),[t,v]=(0,e.useState)(""),w=a.find(a=>a.nodeId===g),x=w?.serverName;(0,e.useEffect)(()=>{a.length>0&&!g&&h(a[0].nodeId)},[a,g]);let y=(0,e.useCallback)(async a=>{q(!0),s(void 0);try{let b=await P.S.listServerResources(a);l(b.resources||[]),n(b.resourceTemplates||[]),s(b.error)}catch(b){bR.warn(`Failed to load resources for ${a}`,b),s(b instanceof Error?b.message:f("flows.serverResources.loadFailed"))}finally{q(!1)}},[f]);(0,e.useEffect)(()=>{x?y(x):(l([]),n([]))},[x,y]);let z=a=>a.toLowerCase().includes(t.toLowerCase().trim()),A=t.trim()?k.filter(a=>z(a.name||"")||z(a.uri)||z(a.description||"")):k,B=t.trim()?m.filter(a=>z(a.name||"")||z(a.uriTemplate)||z(a.description||"")):m,C=a=>{x&&a&&b(x,a)};return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:f("flows.serverResources.title")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{mb:1},children:f("flows.serverResources.help")}),0===a.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:f("flows.serverTools.noneConnected")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:f("flows.serverResources.connectHelp")})]}):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(a_.A,{value:g||a[0]?.nodeId||"",onChange:(a,b)=>h(b),variant:"scrollable",scrollButtons:"auto",sx:{mb:2,borderBottom:1,borderColor:"divider"},children:a.map(a=>(0,d.jsx)(a0.A,{value:a.nodeId,label:(0,d.jsx)(j.A,{variant:"body2",sx:{color:"connected"===a.status?"success.main":"error"===a.status?"error.main":"text.secondary"},children:a.serverName}),sx:{textTransform:"none",minHeight:48,opacity:"connected"!==a.status?.7:1}},a.nodeId))}),(0,d.jsx)(u.A,{placeholder:f("flows.serverResources.search"),variant:"outlined",size:"small",fullWidth:!0,value:t,onChange:a=>v(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bL.A,{fontSize:"small"})})}}),r&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:2},children:r}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 140px)"},children:w&&"connected"!==w.status?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:f("flows.serverResources.notConnected",{server:x||""})})}):o?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,d.jsx)(F.default,{size:24})}):0===A.length&&0===B.length?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:t.trim()?f("flows.serverResources.noMatch",{search:t}):f("flows.serverResources.none")})}):(0,d.jsxs)(au.A,{disablePadding:!0,children:[A.map(a=>(0,d.jsx)(bS,{primary:a.name||a.uri,secondary:a.description||a.uri,chip:a.mimeType,tooltip:f("flows.serverResources.add",{resource:a.name||a.uri}),onClick:()=>C(a.uri)},a.uri)),B.map(a=>(0,d.jsx)(bS,{primary:a.name||a.uriTemplate,secondary:a.description||a.uriTemplate,chip:"template",tooltip:f("flows.serverResources.addTemplate",{template:a.uriTemplate}),onClick:()=>C(a.uriTemplate)},a.uriTemplate))]})})]})]})},bU=(0,w.A)((0,d.jsx)("path",{d:"M19 12v7H5v-7H3v7c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-7zm-6 .67 2.59-2.58L17 11.5l-5 5-5-5 1.41-1.41L11 12.67V3h2z"}),"SaveAlt"),bV=({wiredResources:a,promptBuilderRef:b})=>{let{t:c}=(0,ak.s9)();return 0===a.length?null:(0,d.jsxs)(i.default,{sx:{mb:3},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:c("flows.wired.title")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{mb:1,display:"block"},children:c("flows.wired.help")}),(0,d.jsx)(au.A,{disablePadding:!0,children:a.map(a=>(0,d.jsx)(bH.A,{variant:"outlined",sx:{mb:1,mt:1},children:(0,d.jsx)(bI.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ad.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),a.label]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5,wordBreak:"break-all"},children:"run"===a.scope?a.runName?c("flows.wired.temporaryNamed",{name:a.runName}):c("flows.wired.temporaryUnnamed"):c("flows.wired.mcp",{uri:a.uri?` ${a.uri}`:"",server:a.boundServer?c("flows.wired.onServer",{server:a.boundServer}):""})})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",flexShrink:0,ml:1,gap:.5},children:["run"===a.scope&&a.runName&&(0,d.jsx)(n.A,{title:c("flows.wired.insert",{reference:`\${res:${a.runName}}`}),children:(0,d.jsx)(E.A,{size:"small",icon:(0,d.jsx)(bU,{}),label:`\${res:${a.runName}}`,onClick:()=>(a=>{a&&b.current&&b.current.insertText(`\${res:${a}}`)})(a.runName),clickable:!0,sx:{maxWidth:220}})}),(0,d.jsx)(E.A,{size:"small",color:"produce"===a.role?"secondary":"default",label:"produce"===a.role?c("flows.wired.produce"):c("flows.wired.consume")})]})]})})},`${a.role}-${a.id}`))})]})},bW=(0,L.h)("frontend/components/flow/FlowBuilder/Modals/ProcessNodePropertiesModal/ServerTools/AgentTools"),bX=({handoffTools:a,isLoadingHandoffTools:b,handleInsertToolBinding:c,promptBuilderRef:f})=>{let{t:g,formatList:h}=(0,ak.s9)(),[k,l]=(0,e.useState)(""),m=a.filter(a=>{if(!k.trim())return!0;let b=k.toLowerCase().trim();return a.name&&a.name.toLowerCase().includes(b)||a.description&&a.description.toLowerCase().includes(b)});return(0,d.jsxs)(i.default,{sx:{mt:4,display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:g("flows.agentTools.title")}),b?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:g("flows.agentTools.loading")})]}):0===a.length?(0,d.jsxs)(i.default,{sx:{p:2,border:"1px dashed rgba(0, 0, 0, 0.12)",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"text.secondary",align:"center",children:g("flows.agentTools.none")}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",align:"center",display:"block",sx:{mt:1},children:g("flows.agentTools.connectHelp")})]}):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",flexGrow:1,height:"calc(100% - 40px)"},children:[(0,d.jsx)(u.A,{placeholder:g("flows.agentTools.search"),variant:"outlined",size:"small",fullWidth:!0,value:k,onChange:a=>l(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bL.A,{fontSize:"small"})})}}),(0,d.jsx)(D.A,{variant:"outlined",sx:{flexGrow:1,overflow:"auto",p:0,height:"calc(100% - 56px)"},children:0===m.length?(0,d.jsx)(i.default,{sx:{p:2,textAlign:"center"},children:(0,d.jsx)(j.A,{color:"text.secondary",children:k.trim()?g("flows.agentTools.noMatch",{search:k}):g("flows.agentTools.none")})}):(0,d.jsx)(au.A,{disablePadding:!0,children:m.map(a=>(0,d.jsxs)(bH.A,{variant:"outlined",onClick:()=>{a.name?(bW.debug("Inserting handoff tool binding",{toolType:"handoff",toolName:a.name}),c("handoff",a.name)):bW.warn("Cannot insert handoff tool binding, tool name is undefined",{toolName:a.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,d.jsx)(bI.A,{sx:{p:2,"&:last-child":{pb:2}},children:(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:(0,d.jsxs)(i.default,{sx:{width:"100%"},children:[(0,d.jsxs)(j.A,{variant:"subtitle2",component:"div",sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(bM.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),a.name]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:a.description||g("flows.agentTools.noDescription")}),a.inputSchema&&(a=>a&&a.properties&&0!==Object.keys(a.properties).length?(0,d.jsxs)(i.default,{sx:{mt:1},children:[(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontWeight:"medium"},children:g("flows.agentTools.parameters")}),(0,d.jsx)(i.default,{sx:{pl:1,mt:.5},children:Object.entries(a.properties).map(([b,c])=>(0,d.jsxs)(i.default,{sx:{mb:.5},children:[(0,d.jsxs)(j.A,{variant:"caption",component:"span",sx:{fontWeight:"medium"},children:[b,a.required?.includes(b)&&(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"error.main",children:" *"}),": "]}),(0,d.jsx)(j.A,{variant:"caption",component:"span",color:"text.secondary",children:c.description||c.type||g("flows.agentTools.noDescription")}),c.enum&&(0,d.jsx)(i.default,{sx:{pl:2,mt:.5},children:(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:g("flows.agentTools.options",{options:h(c.enum)})})})]},b))})]}):(0,d.jsx)(i.default,{sx:{mt:1},children:(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{fontStyle:"italic"},children:g("flows.agentTools.noParameters")})}))(a.inputSchema)]})})}),(0,d.jsx)(n.A,{title:g("flows.agentTools.insert",{tool:a.name}),children:(0,d.jsx)(i.default,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0}})})]},a.name))})})]})]})};var bY=c(85838);let bZ=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal/PromptTemplateEditor"),b$=(0,e.forwardRef)((a,b)=>{let{t:c}=(0,ak.s9)(),{promptTemplate:f,handlePromptChange:g,excludeModelPrompt:h,excludeStartNodePrompt:l,excludeSystemPrompt:m,nodeData:n,flowId:o,suggestions:q}=a,[r,s]=(0,e.useState)(""),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(null),x=(0,e.useRef)(null);(0,e.useImperativeHandle)(b,()=>({insertText:a=>{x.current&&x.current.insertText(a)},getMode:()=>x.current?x.current.getMode():"raw"}));let y=async()=>{if(bZ.debug("fetchRenderedPrompt called with:",{flowId:o,nodeId:n?.id}),!o||!n||!n.id)return void w(c("flows.promptPreview.missingIds"));u(!0),w(null);try{let a=await fetch("/api/flow/prompt-renderer",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:o,nodeId:n.id,options:{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:h,excludeStartNodePrompt:l,excludeSystemPrompt:m}})}),b=await a.json();if(!a.ok)throw Error(b.error||c("flows.promptPreview.failed"));bZ.debug("Rendered prompt received",{promptLength:b.prompt?.length}),s(`${b.prompt}
|
|
3
|
+
|
|
4
|
+
[${c("flows.promptPreview.userMessages")}]`)}catch(a){bZ.error("Error fetching rendered prompt",a),w(a instanceof Error?a.message:c("flows.promptPreview.unknownError"))}finally{u(!1)}};return(0,e.useEffect)(()=>{x.current&&"preview"===x.current.getMode()&&y()},[f,h,l,m,o,n?.id]),(0,d.jsx)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:(0,d.jsx)(bY.A,{ref:x,value:f,onChange:g,label:"",height:"100%",onModeChange:a=>{"preview"===a&&y()},customPreviewRenderer:()=>t?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(F.default,{size:40})}):v?(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",p:2},children:[(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},action:(0,d.jsx)(k.A,{color:"inherit",size:"small",onClick:y,children:c("flows.promptPreview.retry")}),children:v}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2,textAlign:"center"},children:o?c("flows.promptPreview.checkIds"):c("flows.promptPreview.unsaved")})]}):(0,d.jsxs)(i.default,{sx:{p:2},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium"},children:c("flows.promptPreview.title")}),(0,d.jsx)(D.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,d.jsx)(i.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word",fontFamily:"monospace",fontSize:"0.875rem",m:0},children:r||c("flows.promptPreview.empty")})})]}),suggestions:q})})});b$.displayName="PromptTemplateEditor";let b_=(0,w.A)((0,d.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"}),"History"),b0=(0,w.A)((0,d.jsx)("path",{d:"M4 9h16v2H4zm0 4h10v2H4z"}),"ShortText"),b1=(0,w.A)((0,d.jsx)("path",{d:"M3 10h11v2H3zm0-2h11V6H3zm0 8h7v-2H3zm15.01-3.13.71-.71c.39-.39 1.02-.39 1.41 0l.71.71c.39.39.39 1.02 0 1.41l-.71.71zm-.71.71-5.3 5.3V21h2.12l5.3-5.3z"}),"EditNote");var b2=c(53830);let b3=(0,w.A)((0,d.jsx)("path",{d:"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2m0 14H6l-2 2V4h16z"}),"ChatBubbleOutline"),b4=({selected:a,icon:b,title:c,description:e,onClick:f})=>(0,d.jsxs)(i.default,{role:"radio","aria-checked":a,tabIndex:0,onClick:f,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),f())},sx:{flex:1,minWidth:180,position:"relative",p:2,borderRadius:2,border:2,borderColor:a?"primary.main":"divider",bgcolor:a?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:a?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:a=>`0 0 0 3px ${a.palette.primary.light}`}},children:[a&&(0,d.jsx)(aC.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:a?"primary.main":"text.secondary"},children:[b,(0,d.jsx)(j.A,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:c})]}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:e})]}),b5=({excludeModelPrompt:a,setExcludeModelPrompt:b,excludeStartNodePrompt:c,setExcludeStartNodePrompt:e,excludeSystemPrompt:f,setExcludeSystemPrompt:g,inputMode:h,setInputMode:k,isolatedPrompt:l,setIsolatedPrompt:m,allowCallerPrompt:n,setAllowCallerPrompt:o,outputMode:p,setOutputMode:q,isModelBound:r,models:s,nodeData:t})=>{let{t:v}=(0,ak.s9)();return(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",mb:2},children:[(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:a,onChange:a=>b(a.target.checked),color:"primary",size:"small"}),label:v("flows.process.excludeModel")}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:c,onChange:a=>e(a.target.checked),color:"primary",size:"small"}),label:v("flows.process.excludeStart")}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:f,onChange:a=>g(a.target.checked),color:"primary",size:"small"}),label:v("flows.process.excludeSystem")})]}),(0,d.jsxs)(i.default,{sx:{mb:2,p:2,bgcolor:"rgba(0, 0, 0, 0.03)",borderRadius:1,fontSize:"0.85rem"},children:[(0,d.jsx)(j.A,{variant:"caption",sx:{display:"block",mb:1,fontWeight:"bold"},children:v("flows.process.renderOrder")}),(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",gap:.5},children:[!c&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{color:"primary.main",fontWeight:"medium"},children:["1. ",v("flows.process.startPrompt")]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:v("flows.process.fromStart")})]}),!a&&r&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{color:"secondary.main",fontWeight:"medium"},children:[c?"1.":"2."," ",v("flows.process.modelPrompt")]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:v("flows.process.fromModel",{model:(()=>{let a=t.properties?.boundModel;if(!a)return v("flows.process.none");let b=s.find(b=>b.id===a);return b?b.displayName||b.name:t.properties?.modelName||v("flows.process.none")})()})})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{fontWeight:"medium"},children:[c||a||!r?c&&(a||!r)?"1.":"2.":"3."," ",v("flows.process.nodePrompt")]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:v("flows.process.fromTask")})]}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsxs)(j.A,{variant:"caption",sx:{fontWeight:"medium"},children:[c||a||!r?c&&(a||!r)?"2.":"3.":"4."," ","isolated"===h?v("flows.subflow.isolatedPrompt"):"latest-message"===h?v("flows.subflow.latest"):v("flows.process.history")]}),(0,d.jsx)(j.A,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:"isolated"===h?v("flows.process.isolatedDetail"):"latest-message"===h?v("flows.process.latestDetail"):v("flows.process.historyDetail")})]})]})]}),(0,d.jsxs)(i.default,{sx:{mb:2},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:v("flows.process.receiveTitle")}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":v("flows.process.inputAria"),sx:{display:"flex",gap:1.5,flexWrap:"wrap"},children:[(0,d.jsx)(b4,{selected:"full-history"===h,onClick:()=>k("full-history"),icon:(0,d.jsx)(b_,{fontSize:"small"}),title:v("flows.subflow.fullHistory"),description:v("flows.process.fullInputHelp")}),(0,d.jsx)(b4,{selected:"latest-message"===h,onClick:()=>k("latest-message"),icon:(0,d.jsx)(b0,{fontSize:"small"}),title:v("flows.subflow.latest"),description:v("flows.process.latestInputHelp")}),(0,d.jsx)(b4,{selected:"isolated"===h,onClick:()=>k("isolated"),icon:(0,d.jsx)(b1,{fontSize:"small"}),title:v("flows.subflow.isolated"),description:v("flows.process.isolatedInputHelp")})]}),"isolated"===h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(G.A,{sx:{mt:1,display:"block"},control:(0,d.jsx)(bo.A,{checked:n,onChange:a=>o(a.target.checked)}),label:v("flows.subflow.allowCallerPrompt")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{ml:4,mt:-.5},children:v("flows.process.callerPromptHelp")}),(0,d.jsx)(u.A,{fullWidth:!0,label:n?v("flows.subflow.defaultPrompt"):v("flows.subflow.isolatedPrompt"),value:l,onChange:a=>m(a.target.value),margin:"normal",multiline:!0,rows:2,helperText:n?v("flows.process.defaultUserHelp"):v("flows.process.isolatedUserHelp")})]})]}),(0,d.jsxs)(i.default,{sx:{mb:1},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:v("flows.process.outputTitle")}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":v("flows.process.outputAria"),sx:{display:"flex",gap:1.5,flexWrap:"wrap"},children:[(0,d.jsx)(b4,{selected:"full-conversation"===p,onClick:()=>q("full-conversation"),icon:(0,d.jsx)(b2.A,{fontSize:"small"}),title:v("flows.subflow.fullHistory"),description:v("flows.process.fullOutputHelp")}),(0,d.jsx)(b4,{selected:"latest-message"===p,onClick:()=>q("latest-message"),icon:(0,d.jsx)(b3,{fontSize:"small"}),title:v("flows.subflow.latest"),description:v("flows.process.latestOutputHelp")})]})]})]})},b6=({nodeData:a,handlePropertyChange:b,properties:c})=>{let{t:e}=(0,ak.s9)();return(0,d.jsx)(d.Fragment,{children:c.length>0&&(0,d.jsxs)(i.default,{sx:{mt:3},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:e("flows.nodeProperties.title")}),c.map(c=>(c=>{if(!a)return null;let e=a.properties?.[c.key]??"";switch(c.type){case"text":return(0,d.jsx)(u.A,{fullWidth:!0,label:c.label,multiline:c.multiline,rows:c.multiline?4:1,value:e,onChange:a=>b(c.key,a.target.value),margin:"normal",helperText:c.helperText},c.key);case"number":return(0,d.jsx)(u.A,{fullWidth:!0,type:"number",label:c.label,value:e,inputProps:{min:c.min,max:c.max,step:c.step},onChange:a=>{let d=a.target.value;b(c.key,""===d?void 0:Number(d))},margin:"normal",helperText:c.helperText},c.key);case"select":return(0,d.jsxs)(bf.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(bg.A,{children:c.label}),(0,d.jsx)(bh.A,{value:e||"",label:c.label,onChange:a=>b(c.key,a.target.value),children:c.options?.map(a=>(0,d.jsx)(K.A,{value:a,children:a},a))})]},c.key);case"boolean":return(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:e||!1,onChange:a=>b(c.key,a.target.checked)}),label:c.label,sx:{my:1}},c.key);default:return null}})(c))]})})},b7=({value:a,onChange:b,onInsertRef:c})=>{let{t:e}=(0,ak.s9)(),f=a.captureVariable.trim(),g=a.captureKvKey.trim(),h=a.captureResource.trim(),l=""===f||aG(f),m=""===g||aM(g);return(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:.5},children:e("flows.capture.title")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:e("flows.capture.help")}),(0,d.jsxs)(a$.A,{direction:"row",spacing:1,alignItems:"flex-start",sx:{mb:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:e("flows.capture.variable"),value:a.captureVariable,onChange:a=>b({captureVariable:a.target.value}),error:!l,helperText:l?e("flows.capture.variableHelp"):e("flows.capture.invalidName")}),c&&(0,d.jsx)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!f||!l,onClick:()=>c(`\${var:${f}}`),children:e("flows.capture.insert",{token:"${var:NAME}"})})]}),(0,d.jsxs)(a$.A,{direction:"row",spacing:1,alignItems:"flex-start",sx:{mb:2},children:[(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:e("flows.capture.resource"),value:a.captureResource,onChange:a=>b({captureResource:a.target.value}),helperText:e("flows.capture.resourceHelp")}),c&&(0,d.jsx)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!h,onClick:()=>c(`\${res:${h}}`),children:e("flows.capture.insert",{token:"${res:NAME}"})})]}),(0,d.jsxs)(a$.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,d.jsx)(u.A,{select:!0,size:"small",label:e("flows.capture.scope"),sx:{width:130,flexShrink:0},value:a.captureKvScope,onChange:a=>b({captureKvScope:a.target.value}),children:aI.map(a=>(0,d.jsx)(K.A,{value:a,children:"folder"===a?e("flows.capture.scope.folder"):"flow"===a?e("flows.capture.scope.flow"):e("flows.capture.scope.global")},a))}),(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:e("flows.capture.kv"),value:a.captureKvKey,onChange:a=>b({captureKvKey:a.target.value}),error:!m,helperText:m?e("flows.capture.kvHelp"):e("flows.capture.invalidName")}),c&&(0,d.jsx)(k.A,{variant:"outlined",size:"small",sx:{mt:.5,whiteSpace:"nowrap",textTransform:"none"},disabled:!g||!m,onClick:()=>c(`\${kv:${g}}`),children:e("flows.capture.insert",{token:"${kv:NAME}"})})]})]})},b8=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ProcessNodePropertiesModal"),b9=["basic","model","io","task","advanced"],ca=({open:a,node:b,onClose:c,onSave:g,flowEdges:h=[],flowNodes:l=[],flowId:n,onConnectMcpServer:o,authoringMode:p="advanced",mode:t="edit"})=>{b8.debug("ProcessNodePropertiesModal rendered with:",{node:b,flowId:n});let{t:u}=(0,ak.s9)(),w={basic:u("flows.process.basic"),model:u("flows.process.model"),io:u("flows.process.io"),task:u("flows.process.task"),advanced:u("flows.process.advanced")},{nodeData:x,setNodeData:y,handlePropertyChange:z}=(a=>{let[b,c]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&c({id:a.id,...a.data,properties:{...a.data.properties}})},[a]);let d=(0,e.useCallback)((a,b)=>{c(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},[]);return{nodeData:b,setNodeData:c,handlePropertyChange:d}})(b),[A,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)("full-history"),[R,S]=(0,e.useState)(""),[T,U]=(0,e.useState)(!0),[V,Y]=(0,e.useState)("full-conversation"),[Z,$]=(0,e.useState)(!1),[_,aa]=(0,e.useState)(""),[ab,ac]=(0,e.useState)(""),[ad,ae]=(0,e.useState)("folder"),[af,ag]=(0,e.useState)(""),[ah,ai]=(0,e.useState)("server"),[aj,al]=(0,e.useState)("basic"),am="advanced"===p?b9:b9.filter(a=>["basic","model","task"].includes(a)),an=(0,e.useRef)(null),ao=(0,e.useRef)(null),ap=(0,e.useRef)(null),aq=(0,e.useRef)(null),ar=(0,e.useRef)(null),as=(0,e.useRef)(null),at={basic:ao,model:ap,io:aq,task:ar,advanced:as},au=(0,e.useRef)(!1);(0,e.useEffect)(()=>{"guided"===p&&("io"===aj||"advanced"===aj)&&al("basic"),"guided"===p&&"server"!==ah&&ai("server")},[aj,ah,p]);let{models:av,isLoadingModels:aw,loadError:ax,handleModelSelect:ay,handleUnbindModel:az}=((a,b,c,d,f)=>{let{t:g}=(0,ak.s9)();bv.debug("useModelManagement: Entering hook");let[h,i]=(0,e.useState)([]),[j,k]=(0,e.useState)(!1),[l,m]=(0,e.useState)(null);(0,e.useEffect)(()=>{bv.debug("useModelManagement useEffect: Checking if modal is open",{open:a}),a&&n()},[a]),(0,e.useEffect)(()=>{if(0===h.length)return;let a=b?.properties?.boundModel;if(!a)return;let d=h.find(b=>b.id===a);d&&d.name&&b?.properties?.modelName!==d.name&&c(a=>a&&a.properties?.modelName!==d.name?{...a,properties:{...a.properties,modelName:d.name}}:a)},[h,b?.properties?.boundModel,b?.properties?.modelName,c]);let n=async()=>{bv.debug("loadModels: Entering method"),k(!0),m(null);try{let a=await Q.N.loadModels();i(a)}catch(a){bv.warn("loadModels: Failed to load models:",a),m(g("flows.process.loadModelsFailed"))}k(!1)},o=(0,e.useCallback)(a=>{bv.debug("handleModelSelect: Entering method",{modelId:a});let b=h.find(b=>b.id===a);b&&(c(c=>{if(!c)return null;let d=h.find(a=>a.id===c.properties?.boundModel),e=bu({currentLabel:c.label,nameIsCustom:c.properties?.nameIsCustom,defaultLabel:"Process Node",previousAutoLabel:d?d.displayName||d.name:void 0,nextAutoLabel:b.displayName||b.name});return{...c,label:e,properties:{...c.properties,boundModel:a,modelName:b.name}}}),f(!0))},[h,c,d,f]);return{models:h,isLoadingModels:j,loadError:l,handleModelSelect:o,handleUnbindModel:(0,e.useCallback)(()=>{bv.debug("handleUnbindModel: Entering method"),c(a=>{if(!a)return null;let{boundModel:b,modelName:c,...d}=a.properties;return{...a,properties:{...d,promptTemplate:d.promptTemplate||""}}}),f(!1)},[c,f])}})(a,x,y,B,D),{connectedMcpNodes:aA,allServers:aB,isLoadingServers:aC,selectedToolServerNodeId:aD,serverToolsMap:aE,serverStatuses:aF,isLoadingTools:aG,handleSelectToolServer:aH,isLoadingSelectedServerTools:aI,handleRetryServer:aL,handleRestartServer:aM}=((a,b,c,d)=>{let f=(0,bw.v)(),g=f.servers||[],h=f.isLoading||!1,[i,j]=(0,e.useState)({}),[k,l]=(0,e.useState)({}),[m,n]=(0,e.useState)({}),[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),s=(0,e.useMemo)(()=>b?((a,b)=>[...new Set(b.filter(b=>b.source===a&&b.data?.edgeType==="mcp"||b.target===a&&b.data?.edgeType==="mcp").map(b=>b.source===a?b.target:b.source))])(b.id,c):[],[b,c]),t=(0,e.useMemo)(()=>{if(!b||0===s.length)return[];if(!d||!Array.isArray(d))return bx.warn("flowNodes is not available or not an array when filtering connected servers"),[];try{let a=[],b=new Set;return s.forEach(c=>{if(b.has(c))return;let e=d.find(a=>a&&a.id===c);if(!e||!e.data||!e.data.properties)return void bx.warn(`Could not find valid MCP node data for ID ${c}`);let f=e.data.properties.boundServer;if(!f)return void bx.warn(`MCP node ${c} is not bound to any server.`);let h=g.find(a=>a.name===f),i=h?.status||"unknown",j=e.data.properties.enabledTools||[],k=e.data.properties.enabledResources;a.push({nodeId:c,serverName:f,status:i,enabledTools:Array.isArray(j)?j:[],enabledResources:k}),b.add(c)}),bx.debug("Generated connectedMcpNodes:",JSON.stringify(a)),a}catch(a){return bx.error("Error preparing connected MCP nodes:",a),[]}},[b,s,g,d]);(0,e.useEffect)(()=>{if(t&&t.length>0){let a={};t.forEach(b=>{let c=g.find(a=>a.name===b.serverName);a[b.serverName]=c?.status||b.status||"unknown"}),j(a)}},[t,g]),(0,e.useEffect)(()=>{if(a&&t.length>0){let a=Array.from(new Set(t.map(a=>a.serverName)));(async()=>{let b={},c={...k},d=a.filter(a=>{let b=g.find(b=>b.name===a);return b?.status==="connected"&&!k[a]&&!m[a]});0!==d.length&&(d.forEach(a=>{b[a]=!0}),n(a=>({...a,...b})),await Promise.all(d.map(async a=>{try{bx.debug(`Loading tools for server: ${a}`);let b=await P.S.listServerTools(a);if(b.error)bx.warn(`Error loading tools for ${a}:`,b.error),c[a]=[];else{let d=b.tools||[];bx.debug(`Loaded ${d.length} tools for ${a}`),c[a]=d}}catch(b){bx.warn(`Failed to load tools for server ${a}:`,b),c[a]=[]}finally{n(b=>({...b,[a]:!1}))}})),l(c))})()}},[a,t,g]);let u=(0,e.useRef)(k);(0,e.useEffect)(()=>{u.current=k},[k]);let v=(0,e.useCallback)(a=>{bx.debug(`Selected MCP Node ID: ${a}`),p(a);let b=t.find(b=>b.nodeId===a),c=b?.serverName;!c||u.current[c]||m[c]?r(m[c||""]||!1):(bx.debug(`Tools not loaded for server ${c}, loading now.`),r(!0),n(a=>({...a,[c]:!0})),P.S.listServerTools(c).then(a=>{let b=a.tools||[];a.error?bx.warn(`Error loading tools for ${c}:`,a.error):bx.debug(`Loaded ${b.length} tools for ${c}`),l(a=>({...a,[c]:b}))}).catch(a=>{bx.warn(`Failed to load tools for server ${c}:`,a),l(a=>({...a,[c]:[]}))}).finally(()=>{r(!1),n(a=>({...a,[c]:!1}))}))},[t,m]),w=(0,e.useRef)(f);return(0,e.useEffect)(()=>{w.current=f},[f]),{connectedMcpNodes:t,allServers:g,isLoadingServers:h,selectedToolServerNodeId:o,serverToolsMap:k,serverStatuses:i,isLoadingTools:m,handleSelectToolServer:v,isLoadingSelectedServerTools:q,handleRetryServer:(0,e.useCallback)(async a=>{bx.debug(`Retrying server: ${a}`),n(b=>({...b,[a]:!0}));try{await w.current.retryServer(a);let b=await P.S.listServerTools(a);if(b.error)return bx.warn(`Error loading tools for ${a} after retry:`,b.error),!1;{let c=b.tools||[];return bx.debug(`Loaded ${c.length} tools for ${a} after retry`),l(b=>({...b,[a]:c})),!0}}catch(b){return bx.warn(`Failed to retry or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[]),handleRestartServer:(0,e.useCallback)(async a=>{bx.debug(`Restarting server: ${a}`),n(b=>({...b,[a]:!0}));try{await P.S.restartServer(a),await new Promise(a=>setTimeout(a,1e3));let b=await P.S.listServerTools(a);if(b.error)return bx.warn(`Error loading tools for ${a} after restart:`,b.error),!1;{let c=b.tools||[];return bx.debug(`Loaded ${c.length} tools for ${a} after restart`),l(b=>({...b,[a]:c})),!0}}catch(b){return bx.warn(`Failed to restart or load tools for server ${a}:`,b),!1}finally{n(b=>({...b,[a]:!1}))}},[])}})(a,b,h,l),[aN,aO]=(0,e.useState)([]);(0,e.useEffect)(()=>{let b=!1,c=[...new Set(aA.filter(a=>"connected"===a.status).map(a=>a.serverName))];return a&&0!==c.length?(Promise.all(c.map(async a=>{try{let b=await P.S.listServerResources(a),c=aA.filter(b=>b.serverName===a),d=a=>c.some(b=>{let c=b.enabledResources;return void 0===c||"all"===c||c.includes(a)});return[...(b.resources??[]).filter(a=>d(a.uri)).map(b=>(0,bt.Ub)({kind:"resource",server:a,name:b.uri},b.name||b.uri,b.description||`${a} \xb7 ${b.uri}`)),...(b.resourceTemplates??[]).filter(a=>d(a.uriTemplate)).map(b=>(0,bt.Ub)({kind:"resource",server:a,name:b.uriTemplate},b.name||b.uriTemplate,b.description||`${a} \xb7 ${b.uriTemplate}`))]}catch(b){return b8.warn(`Failed to load @ resource suggestions for ${a}`,b),[]}})).then(a=>{b||aO(a.flat())}),()=>{b=!0}):(aO([]),()=>{b=!0})},[a,aA]);let aP=f().useMemo(()=>[...aA.flatMap(a=>{let b=new Set(a.enabledTools??[]);return(aE[a.serverName]??[]).filter(a=>a?.name&&b.has(a.name)).map(b=>(0,bt.Ub)({kind:"tool",server:a.serverName,name:b.name},b.name,b.description||a.serverName))}),...aN],[aA,aN,aE]),aQ=f().useMemo(()=>{if(!b)return[];let a=[];for(let c of h){let d,e;if(c.data?.edgeType!=="resource"||(c.target===b.id?(d=c.source,e="consume"):c.source===b.id&&(d=c.target,e="produce"),!d||!e))continue;let f=l.find(a=>a.id===d);if(!f||"resource"!==f.type)continue;let g=f.data?.properties??{};a.push({id:d,role:e,label:g.name||g.runName||g.uri||d,scope:g.scope,runName:g.runName,uri:g.uri,boundServer:g.boundServer})}return a},[b,h,l]),aR=((a,b,c,d)=>{let[f,g]=(0,e.useState)([]),[h,i]=(0,e.useState)(!1),j=(0,e.useMemo)(()=>b?function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&(d.data.edgeType.includes("mcp")||"resource"===d.data.edgeType))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(b.id,c):[],[b,c]);return(0,e.useEffect)(()=>{if(a&&b){i(!0);try{let a=j.map(a=>d.find(b=>b.id===a)).filter(a=>!!a),b=(0,W.E9)(a.map(a=>({id:a.id,label:a.data.label,type:a.type||a.data.type}))),c=a.map(a=>({name:b.get(a.id)||`handoff_to_${a.id}`,description:function(a){if(a.userDescription&&a.userDescription.trim())return by(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];!function a(b,c,d){let e=" ".repeat(c);if(b.userDescription&&b.userDescription.trim())return void d.push(`${e}${by(b.userDescription,200)}`);if("subflow"===b.type){if(b.subflowMissing)return void d.push(`${e}Runs a subflow (referenced flow not found).`);if(b.subflowDetailsUnavailable){let a=b.subflowName?` "${b.subflowName}"`:"";d.push(`${e}Runs a subflow${a} (contents summarised when the flow runs).`);return}if(d.push(`${e}Runs the subflow "${b.subflowName??"unknown"}", which contains:`),b.depthCapReached)return void d.push(`${e} (nested subflows omitted — recursion depth limit reached)`);let f=b.children??[];if(0===f.length)return void d.push(`${e} (no process or subflow steps)`);for(let b of f.slice(0,10))d.push(`${e} - ${b.label}:`),a(b,c+2,d);return void(f.length>10&&d.push(`${e} - …and ${f.length-10} more step(s)`))}if(b.modelName&&d.push(`${e}Model: ${b.modelName}`),b.promptSummary&&d.push(`${e}Role: ${by(b.promptSummary,200)}`),b.servers&&b.servers.length>0)for(let a of b.servers)if(a.connected&&a.tools&&a.tools.length>0){let b=a.tools.slice(0,10),c=a.tools.length-b.length,f=c>0?`, +${c} more`:"";d.push(`${e}Tools (${a.name}): ${b.join(", ")}${f}`)}else d.push(`${e}Tools (${a.name}): server not connected`)}(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
|
|
2
5
|
${d}`:b;if(e.length<=1500)return e;let f=1500-b.length-2;return f<=0?b:`${b}
|
|
3
|
-
${bs(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"Unknown Node",d=a.data.description,e=a.data.properties||{},f={label:c,type:b,userDescription:d};if(d&&d.trim())return f;if("subflow"===b)return f.subflowDetailsUnavailable=!0,f;"string"==typeof e.boundModel&&e.boundModel&&(f.modelName=e.boundModel),"string"==typeof e.promptTemplate&&e.promptTemplate.trim()&&(f.promptSummary=e.promptTemplate);let g=Array.isArray(e.mcpNodes)?e.mcpNodes:[],h=[],i=new Set;for(let a of g){let b=a?.properties?.boundServer;if(!b||i.has(b))continue;i.add(b);let c=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];h.push({name:b,connected:!0,tools:c})}return h.length>0&&(f.servers=h),f}(a)),inputSchema:{type:"object",properties:{},required:[]}}));g(c),bt.debug("Generated handoff tools",{toolsCount:c.length})}catch(a){bt.error("Error generating handoff tools",a),g([])}finally{i(!1)}}else g([])},[a,b,j,c,d]),{handoffTools:f,isLoadingHandoffTools:h}})(a,b,h,l),aP=aO?.handoffTools||[],aQ=aO?.isLoadingHandoffTools||!1;(0,e.useEffect)(()=>{a&&b&&b5.debug("Handoff tools:",{count:aP.length,tools:aP.map(a=>a.name)})},[a,b,aP]),(0,e.useEffect)(()=>{if(!a)return;if(b){z(b.data.properties?.promptTemplate||""),b.data.properties?.boundModel?B(!0):B(!1),D(b.data.properties?.excludeModelPrompt||!1),F(b.data.properties?.excludeStartNodePrompt||!1),K(b.data.properties?.excludeSystemPrompt||!1),M(b.data.properties?.inputMode||"full-history"),O(b.data.properties?.isolatedPrompt||""),S(b.data.properties?.allowCallerPrompt!==!1),U(b.data.properties?.outputMode||"full-conversation"),Y(b.data.properties?.enableTodoTool||!1),$(b.data.properties?.captureVariable||""),aa(b.data.properties?.captureResource||"");let a=aJ(b.data.properties?.captureKv||"");ac(a.scope),ae(a.key||"")}let c="create"===t?"basic":function(a,b){return"guided"===a&&"string"==typeof b&&b.trim().length>0?"task":"basic"}(p,b?.data.properties?.promptTemplate);ai(c),ag("server"),ar.current=!0;let d=window.requestAnimationFrame(()=>{let a=aq[c].current;a&&"function"==typeof a.scrollIntoView?a.scrollIntoView({behavior:"auto",block:"start"}):ak.current&&(ak.current.scrollTop=a?.offsetTop??0),ar.current=!1});return()=>{window.cancelAnimationFrame(d),ar.current=!1}},[b,a,t,p]),(0,e.useEffect)(()=>{if(!a)return;let b=ak.current;if(!b)return;let c=new IntersectionObserver(a=>{if(ar.current)return;let b=a.filter(a=>a.isIntersecting).sort((a,b)=>b.intersectionRatio-a.intersectionRatio),c=b[0]?.target?.dataset.section;c&&ai(c)},{root:b,threshold:[.15,.4,.75],rootMargin:"0px 0px -45% 0px"});return Object.values(aq).forEach(a=>{a.current&&c.observe(a.current)}),()=>c.disconnect()},[a,b]);let aR=(0,e.useRef)(null),aS=(a,b,c="server")=>{if(b5.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:a,toolName:b})),!a||!b)return void b5.warn("Invalid parameters for handleInsertToolBinding:",{serverName:a,toolName:b});let d=(aB[a]||[]).find(a=>a.name===b);d?.description;let e="handoff"===c?(0,X.X8)("tool","handoff",b):(0,X.X8)("tool",a,b),f=(!(y.length>0)||y.endsWith(" ")||y.endsWith("\n")?"":" ")+e;aR.current?(b5.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:f})),aR.current.insertText(f),b5.debug("Tool binding inserted successfully")):b5.warn("promptBuilderRef.current is null, cannot insert text")};if(!b||!u)return null;let aT=u.properties?.boundModel||"",aU={minHeight:"100%",scrollSnapAlign:"start",scrollSnapStop:"always",display:"flex",flexDirection:"column",pb:4},aV=(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:["advanced"===p&&(0,d.jsx)(i.default,{sx:{borderBottom:1,borderColor:"divider",flexShrink:0},children:(0,d.jsxs)(a$.A,{value:af,onChange:(a,b)=>ag(b),variant:"scrollable",scrollButtons:"auto","aria-label":"Task tools",children:[(0,d.jsx)(a_.A,{id:"process-task-tab-server","aria-controls":"process-task-panel-server",label:"MCP",value:"server"}),(0,d.jsx)(a_.A,{id:"process-task-tab-agent","aria-controls":"process-task-panel-agent",label:"Connected Nodes",value:"agent"}),(0,d.jsx)(a_.A,{id:"process-task-tab-resources","aria-controls":"process-task-panel-resources",label:"Resources",value:"resources"})]})}),(0,d.jsxs)(i.default,{id:`process-task-panel-${af}`,role:"tabpanel","aria-labelledby":`process-task-tab-${af}`,"data-testid":"process-task-tools-scroll",sx:{flexGrow:1,minHeight:0,overflow:"auto",pr:.5},children:["server"===af&&(0,d.jsx)(bN,{isLoadingServers:az,connectedMcpNodes:ax,availableServers:ay,onConnectMcpServer:o,serverStatuses:aC,serverToolsMap:aB,isLoadingTools:aD,handleInsertToolBinding:aS,selectedToolServerNodeId:aA,selectedNodeId:b?.id||null,handleSelectToolServer:aE,isLoadingSelectedServerTools:aF,promptBuilderRef:aR,handleRetryServer:aG,handleRestartServer:aH}),"advanced"===p&&"resources"===af&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bS,{wiredResources:aN,promptBuilderRef:aR}),(0,d.jsx)(bQ,{connectedMcpNodes:ax,handleInsertResourceBinding:(a,b)=>{if(!a||!b)return void b5.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:a,uri:b});let c=(0,X.X8)("resource",a,b),d=y.length>0&&!y.endsWith(" ")&&!y.endsWith("\n");aR.current?aR.current.insertText((d?" ":"")+c):b5.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:aR})]}),"advanced"===p&&"agent"===af&&(0,d.jsx)(bU,{handoffTools:aP,isLoadingHandoffTools:aQ,handleInsertToolBinding:(a,b)=>aS(a,b,"handoff"),promptBuilderRef:aR})]})]});return(0,d.jsxs)(q.A,{open:a,onClose:c,slotProps:{transition:{onEntered:()=>{"task"===ah&&(ar.current=!0,ao.current?.scrollIntoView({block:"start"}),window.setTimeout(()=>{ar.current=!1},0))}}},maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(j.A,{variant:"h6",children:[u.label||"Process Node"," Properties"]}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",p:0,overflow:"hidden",height:"calc(90vh - 130px)"},children:[(0,d.jsx)(i.default,{sx:{borderBottom:1,borderColor:"divider",px:2,flexShrink:0},children:(0,d.jsx)(a$.A,{value:ah,onChange:(a,b)=>(a=>{ai(a),ar.current=!0;let b=aq[a].current;b&&"function"==typeof b.scrollIntoView?b.scrollIntoView({behavior:"smooth",block:"start"}):ak.current&&(ak.current.scrollTop=b?.offsetTop??0),window.setTimeout(()=>{ar.current=!1},700)})(b),variant:"scrollable",scrollButtons:"auto",children:aj.map(a=>(0,d.jsx)(a_.A,{label:a.label,value:a.key},a.key))})}),(0,d.jsxs)(i.default,{ref:ak,sx:{flexGrow:1,overflow:"auto",p:3,scrollSnapType:"y mandatory",scrollPaddingTop:"24px"},children:[(0,d.jsxs)(i.default,{ref:al,"data-section":"basic",sx:aU,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:"Basic"}),(0,d.jsx)(bu,{nodeData:u,setNodeData:w})]}),(0,d.jsxs)(i.default,{ref:am,"data-section":"model",sx:aU,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:"Model"}),(0,d.jsx)(bA,{isLoadingModels:at,loadError:au,models:as,selectedModelId:aT,handleModelSelect:av,isModelBound:A,handleUnbindModel:aw})]}),"advanced"===p&&(0,d.jsxs)(i.default,{ref:an,"data-section":"io",sx:aU,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:"Input / Output"}),(0,d.jsx)(b2,{excludeModelPrompt:C,setExcludeModelPrompt:D,excludeStartNodePrompt:E,setExcludeStartNodePrompt:F,excludeSystemPrompt:J,setExcludeSystemPrompt:K,inputMode:L,setInputMode:M,isolatedPrompt:N,setIsolatedPrompt:O,allowCallerPrompt:R,setAllowCallerPrompt:S,outputMode:T,setOutputMode:U,isModelBound:A,models:as,nodeData:u}),(0,d.jsx)(G.A,{sx:{mt:1},control:(0,d.jsx)(H.A,{checked:V,onChange:a=>Y(a.target.checked)}),label:"Enable todo tool (run-scoped task list)"})]}),(0,d.jsxs)(i.default,{ref:ao,"data-section":"task",sx:aU,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:"Task"}),(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexGrow:1,minHeight:480},children:[(0,d.jsx)(i.default,{sx:{flex:"0 0 340px",minWidth:0,display:"flex",flexDirection:"column",minHeight:0},children:aV}),(0,d.jsx)(i.default,{sx:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",minHeight:0},children:(0,d.jsx)(bX,{ref:aR,promptTemplate:y,handlePromptChange:a=>{z(a),w(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},excludeModelPrompt:C,excludeStartNodePrompt:E,excludeSystemPrompt:J,nodeData:u,flowId:n,suggestions:aM})})]})]}),"advanced"===p&&(0,d.jsxs)(i.default,{ref:ap,"data-section":"advanced",sx:aU,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:"Advanced"}),(0,d.jsx)(i.default,{sx:{mb:3},children:(0,d.jsx)(b3,{nodeData:u,handlePropertyChange:x,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)."},{key:"maxTokens",label:"Max Output Tokens (override)",type:"number",min:1,helperText:"Optional. Overrides the bound model's Max Output Tokens for this node. Leave empty to inherit the model setting (adapter default). Not enforced for the Claude subscription adapter."}]})}),(0,d.jsx)(i.default,{children:(0,d.jsx)(b4,{value:{captureVariable:Z,captureResource:_,captureKvScope:ab,captureKvKey:ad},onChange:a=>{void 0!==a.captureVariable&&$(a.captureVariable),void 0!==a.captureResource&&aa(a.captureResource),void 0!==a.captureKvScope&&ac(a.captureKvScope),void 0!==a.captureKvKey&&ae(a.captureKvKey)},onInsertRef:a=>{let b=y.length>0&&!y.endsWith(" ")&&!y.endsWith("\n");aR.current?aR.current.insertText((b?" ":"")+a):b5.warn("promptBuilderRef.current is null, cannot insert capture reference")}})})]})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&u){let a={...u.properties,promptTemplate:y};if("advanced"===p){Object.assign(a,{excludeModelPrompt:C,excludeStartNodePrompt:E,excludeSystemPrompt:J,inputMode:L,isolatedPrompt:N,allowCallerPrompt:R,outputMode:T}),V?a.enableTodoTool=!0:delete a.enableTodoTool;let b=Z.trim();b?a.captureVariable=b:delete a.captureVariable;let c=_.trim();c?a.captureResource=c:delete a.captureResource;let d=aK(ab,ad);d?a.captureKv=d:delete a.captureKv}g(b.id,{...u,properties:a}),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]})};var b8=c(2173),b9=c(88117);let ca=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),cb=({open:a,node:b,onClose:c,onSave:f,authoringMode:g="advanced"})=>{let[h,l]=(0,e.useState)(null),{servers:o,isLoading:p,loadError:t,retryServer:w}=(0,bq.v)(),[x,y]=(0,e.useState)({}),z=(0,bz.E)("mcp",o),[A,B]=(0,e.useState)(!1),C=async()=>{B(!0);try{await Promise.all(o.map(a=>w(a.name)))}finally{setTimeout(()=>B(!1),500)}},{tools:D,isLoading:E,error:J,loadTools:K}=(0,b9.O)(h?.properties?.boundServer||"");(0,e.useEffect)(()=>{b&&l({...b.data,properties:{...b.data.properties}})},[b,a]);let L=h?.properties?.boundServer||"";(0,e.useEffect)(()=>{D&&D.length>0&&(a=>{h&&0===(h.properties.enabledTools||[]).length&&a.length>0&&(ca.debug("Enabling all tools by default"),l(b=>b?{...b,properties:{...b.properties,enabledTools:a.map(a=>a.name)}}:null))})(D)},[D]);let M=(a,b)=>{l(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},N=async(a,b)=>{b&&b.stopPropagation(),ca.debug(`Retrying server: ${a}`),y(b=>({...b,[a]:!0}));try{return await w(a),a===L&&K(!0),!0}catch(b){return ca.warn(`Failed to retry server ${a}: ${b}`),!1}finally{setTimeout(()=>{y(b=>({...b,[a]:!1}))},500)}};if(!b||!h)return null;let O=h.properties?.boundServer||"",P=h.properties?.enabledTools||[],Q=a=>({key:a.name,content:(a=>(0,d.jsx)(bL.A,{name:a.name,status:a.status||"disconnected",path:a.path||a.rootPath||"",enabled:!a.disabled,transport:a.transport||"stdio",pickerMode:!0,selected:O===a.name,onClick:()=>(a=>{ca.debug(`Server selected: ${a}`),ca.debug(`Server selected: ${a}`),l(b=>{if(!b)return null;let c=bo({currentLabel:b.label,nameIsCustom:b.properties?.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:b.properties?.boundServer||void 0,nextAutoLabel:a});return{...b,label:c,properties:{...b.properties,boundServer:a}}})})(a.name)}))(a)}),R=z.items.map(Q),S=z.groups?z.groups.map(a=>({...a,items:a.items.map(Q)})):null,T=h.properties?.toolTimeout,U=-1===T;return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"guided"===g?"xl":"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",width:"guided"===g?"95vw":void 0,height:"guided"===g?"90vh":"80vh",maxWidth:"guided"===g?"95vw":void 0,maxHeight:"guided"===g?"90vh":"80vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(j.A,{variant:"h6",children:[h.label||"MCP Node"," Properties"]}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,d.jsx)(u.A,{fullWidth:!0,label:"Node Label",value:h.label||"",onChange:a=>{l(b=>b?{...b,label:a.target.value,properties:{...b.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:"The display name for this node on the canvas",sx:{mb:2}}),(0,d.jsxs)(i.default,{sx:{mb:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Bind to MCP Server"}),(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"flex-end",mb:1},children:(0,d.jsx)(n.A,{title:"Retry all server connections",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:C,disabled:A||p,children:A?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bE.A,{fontSize:"small"})})})})}),(0,d.jsx)(bx.A,{isLoading:p,error:t,emptyMessage:"No MCP servers available. Add some in the MCP Manager.",loadingMessage:"Loading MCP servers…",searchable:!0,searchPlaceholder:"Search servers…",searchTerm:z.searchTerm,onSearchChange:z.setSearchTerm,columns:{xs:12,sm:6},items:R,groups:S,collapsedKeys:z.collapsedKeys,onToggleGroup:z.toggleGroup}),(0,d.jsx)(bv.A,{children:O?`This node will use the "${O}" MCP server for processing.`:"Select an MCP server to bind this node to."})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Description",value:h.description||"",onChange:a=>l({...h,description:a.target.value}),margin:"normal",multiline:!0,rows:2,helperText:"This description will be displayed on the node"}),O&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Tool Call Timeout"}),(0,d.jsx)(j.A,{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,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(u.A,{label:"Timeout (seconds)",type:"number",size:"small",sx:{width:200},value:U?"":T??"",placeholder:String(300),disabled:U,inputProps:{min:1},onChange:a=>{let b=a.target.value;if(""===b)return void M("toolTimeout",void 0);let c=parseInt(b,10);!isNaN(c)&&c>0&&M("toolTimeout",c)},helperText:U?"No timeout — tool calls run until they finish.":"Empty = default (300 seconds / 5 minutes)."}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:U,onChange:a=>M("toolTimeout",a.target.checked?-1:void 0)}),label:"No timeout (infinite)"})]})]}),O&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:"Allowed Tools"}),o.find(a=>a.name===O)?.status!=="connected"&&(0,d.jsxs)(i.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"error.dark",children:"Server is disconnected. Tools cannot be fetched. Please retry the connection."}),(0,d.jsx)(k.A,{variant:"outlined",size:"small",color:"primary",startIcon:x[O]?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bE.A,{}),onClick:()=>N(O),disabled:x[O],sx:{mt:1},children:"Retry Connection"})]}),E?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:"Loading tools..."})]}):J?(0,d.jsx)(j.A,{color:"error",children:J}):D&&0!==D.length?(0,d.jsxs)(i.default,{sx:{mt:2},children:[(0,d.jsx)(j.A,{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,d.jsx)(au.A,{children:D.map(a=>(0,d.jsxs)(ay.Ay,{sx:{py:0},children:[(0,d.jsx)(av.A,{sx:{minWidth:42},children:(0,d.jsx)(H.A,{edge:"start",checked:P.includes(a.name),onChange:()=>(a=>{ca.debug(`Tool toggled: ${a}`),l(b=>{let c;if(!b)return null;let d=b.properties.enabledTools||[];return c=d.includes(a)?d.filter(b=>b!==a):[...d,a],{...b,properties:{...b.properties,enabledTools:c}}})})(a.name)})}),(0,d.jsx)(aw.A,{primary:a.name,secondary:a.description,primaryTypographyProps:{fontWeight:"medium"}})]},a.name))})]}):(0,d.jsx)(j.A,{color:"text.secondary",children:o.find(a=>a.name===O)?.status==="connected"?"No tools available for this MCP server.":"Connect to the server to view available tools."})]}),O&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(b8.A,{roots:h.properties?.roots||[],onChange:a=>M("roots",a)}),(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["These folders apply to this node only and are ",(0,d.jsx)("strong",{children:"added to"}),' the workspace folders configured on the "',O,'" server itself. When neither is set, the server sees its own root dir as its workspace folder.']})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{b&&h&&(f(b.id,h),c())},variant:"contained",color:"primary",children:"Save Changes"})]})]})},cc=({open:a,node:b,onClose:c,onSave:f})=>{let[g,h]=(0,e.useState)(null),[l,n]=(0,e.useState)("");return((0,e.useEffect)(()=>{b&&(h({...b.data,properties:{...b.data.properties}}),n(b.data.properties?.promptTemplate||""))},[b,a]),b&&g)?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(j.A,{variant:"h6",children:[g.label||"Start Node"," Properties"]}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsx)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,d.jsx)(i.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,d.jsx)(bV.A,{value:l,onChange:a=>{n(a),h(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},label:"",height:"100%"})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&g){let a={...g,properties:{...g.properties,promptTemplate:l}};f(b.id,a),c()}},variant:"contained",color:"primary",children:"Save Changes"})]})]}):null},cd=({open:a,node:b,onClose:c,onSave:f})=>{let[g,h]=(0,e.useState)(null);return((0,e.useEffect)(()=>{b&&h({...b.data,properties:{...b.data.properties}})},[b,a]),b&&g)?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(j.A,{variant:"h6",children:[g.label||"Finish Node"," Properties"]}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsx)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,d.jsx)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,d.jsxs)(D.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,d.jsx)(j.A,{variant:"h6",color:"success.main",gutterBottom:!0,children:"Finish Node"}),(0,d.jsx)(j.A,{variant:"body1",color:"text.secondary",children:"This is the end point of your flow. No additional configuration is needed."}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:"Future versions will support output formatting options."})]})})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{b&&g&&(f(b.id,g),c())},variant:"contained",color:"primary",children:"Save"})]})]}):null},ce={contains:"Contains",regex:"Regex",equals:"Equals",always:"Always (any reply)"},cf={"last-assistant":"Last agent reply (this step's output)","last-message":"Last message (any role)"},cg=({open:a,edge:b,onClose:c,onSave:f})=>{let[g,h]=(0,e.useState)(!1),[l,n]=(0,e.useState)("contains"),[o,p]=(0,e.useState)(""),[t,w]=(0,e.useState)("last-assistant"),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1);if((0,e.useEffect)(()=>{let a=b?.data?.condition;a?(h(!0),n(a.kind),p("string"==typeof a.value?a.value:""),w(a.target??"last-assistant"),y(!!a.ignoreCase),A(!!a.negate)):(h(!1),n("contains"),p(""),w("last-assistant"),y(!1),A(!1))},[b,a]),!b)return null;let B="always"!==l,C=g&&"regex"===l&&o.length>0&&!(0,aD.wM)(o),D=g&&B&&0===o.length;return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"520px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:"Edge Properties"}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",gap:2,p:3},children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"A conditional edge is taken only when its predicate matches the selected message at runtime. The flow takes the first matching outgoing edge; a plain (condition-less) edge is the default/fallback."}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:g,onChange:a=>h(a.target.checked)}),label:"Conditional edge"}),g&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(a6.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(a7.A,{id:"edge-condition-kind-label",children:"Kind"}),(0,d.jsx)(a8.A,{labelId:"edge-condition-kind-label",label:"Kind",value:l,onChange:a=>n(a.target.value),children:aD.w4.map(a=>(0,d.jsx)(K.A,{value:a,children:ce[a]},a))})]}),B&&(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:"regex"===l?"Pattern (JS regex source)":"Value",value:o,onChange:a=>p(a.target.value),error:C||D,helperText:C?"Invalid regular expression — will never match at runtime.":D?"A value is required for this kind (an empty value never matches).":" "}),(0,d.jsxs)(a6.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(a7.A,{id:"edge-condition-target-label",children:"Test against"}),(0,d.jsx)(a8.A,{labelId:"edge-condition-target-label",label:"Test against",value:t,onChange:a=>w(a.target.value),children:aD.L2.map(a=>(0,d.jsx)(K.A,{value:a,children:cf[a]},a))})]}),(0,d.jsxs)(i.default,{display:"flex",gap:2,flexWrap:"wrap",children:[B&&(0,d.jsx)(G.A,{control:(0,d.jsx)(bi.A,{checked:x,onChange:a=>y(a.target.checked)}),label:"Ignore case"}),(0,d.jsx)(G.A,{control:(0,d.jsx)(bi.A,{checked:z,onChange:a=>A(a.target.checked)}),label:"Negate (match when NOT true)"})]}),(0,d.jsx)(bv.A,{children:"Predicates never throw at runtime: a broken regex simply never matches."})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(!g){f(b.id,void 0),c();return}let a={kind:l};B&&(a.value=o,x&&(a.ignoreCase=!0)),"last-assistant"!==t&&(a.target=t),z&&(a.negate=!0),f(b.id,a),c()},variant:"contained",color:"primary",disabled:C,children:"Save"})]})]})};var ch=c(40216),ci=c(95329);let cj=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),ck=({open:a,node:b,onClose:c,onSave:f,flowId:g,authoringMode:h="advanced"})=>{let[l,n]=(0,e.useState)(null),[o,t]=(0,e.useState)([]),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(""),[E,F]=(0,e.useState)(""),[J,L]=(0,e.useState)("folder"),[M,N]=(0,e.useState)("");(0,e.useEffect)(()=>{if(b){let a=b.data.properties||{};n({...b.data,properties:{...a}}),B(Array.isArray(a.spawnBriefs)?a.spawnBriefs.filter(a=>"string"==typeof a).join("\n"):""),D(a.captureVariable||""),F(a.captureResource||"");let c=aJ(a.captureKv||"");L(c.scope),N(c.key||"")}},[b,a]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return x(!0),O.g.loadFlows().then(a=>{b||t(a||[])}).catch(a=>{cj.warn("Failed to load flows for subflow picker",a),b||t([])}).finally(()=>{b||x(!1)}),()=>{b=!0}},[a]);let P=(a,b)=>{n(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},Q=a=>{n(b=>{if(!b)return null;let c={...b.properties};return delete c[a],{...b,properties:c}})},R=o.filter(a=>a.id!==g),S=(0,bz.E)("flows",R);if(!b||!l)return null;let T=l.properties?.subflowId||"",U=!!T&&!o.some(a=>a.id===T),V=U?"":o.find(a=>a.id===T)?.name||"",W=Array.isArray(l.properties?.parallelSubflowIds)?l.properties.parallelSubflowIds.filter(a=>"string"==typeof a&&""!==a):[],X=W.map(a=>o.find(b=>b.id===a)?.name||a),Y="string"==typeof l.properties?.parallelSubflowIdsVar?l.properties.parallelSubflowIdsVar.trim():"",Z=l.properties?.mapOverList===!0,$=!!l.properties?.allowCallerFanout,_=A.split("\n").some(a=>""!==a.trim()),aa=$||_||W.length>0||!!Y||Z,ab=W.length>0,ac=$||_,ad=!ab&&!Y&&!ac,ae=!Z&&!ab,af=l.properties?.promptTemplate||"",ag=l.properties?.inputMode||(af.trim()?"isolated":"full-history");return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsxs)(j.A,{variant:"h6",children:[l.label||"Subflow Node"," Properties"]}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{p:3},children:[(0,d.jsx)(j.A,{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,d.jsx)(u.A,{fullWidth:!0,label:"Node Label",value:l.label||"",onChange:a=>n({...l,label:a.target.value}),margin:"normal"}),(0,d.jsxs)(i.default,{sx:{mt:2},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:"Flow to run"}),(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(ch.A,{}),onClick:()=>z(!0),sx:{textTransform:"none",maxWidth:"100%"},children:(0,d.jsx)(i.default,{component:"span",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:V||(W.length>0?`Parallel fan-out: ${W.length} flows`:Y?`Fan-out targets from \${var:${Y}}`:"Choose a flow…")})})]}),U&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:"The previously selected flow no longer exists. Please choose another."}),W.length>0&&(0,d.jsx)(p.A,{severity:"info",sx:{mt:1},children:`This node runs ${W.length} flows in parallel and merges their results: ${X.join(", ")}. (Configured via the flow API.)`}),(0,d.jsx)(bK.A,{open:y,onClose:()=>z(!1),title:"Choose a flow to run",description:"This subflow node will run the selected flow as a helper.",isLoading:w,skeleton:(0,d.jsx)(ci.o,{}),emptyMessage:"No other flows available. Create another flow first.",searchable:!0,searchPlaceholder:"Search flows…",searchTerm:S.searchTerm,onSearchChange:S.setSearchTerm,items:S.items.map(a=>({key:a.id,content:(0,d.jsx)(ci.A,{flow:a,selected:a.id===T,onSelect:a=>{P("subflowId",a),z(!1)},pickerMode:!0})})),groups:S.groups?S.groups.map(a=>({...a,items:a.items.map(a=>({key:a.id,content:(0,d.jsx)(ci.A,{flow:a,selected:a.id===T,onSelect:a=>{P("subflowId",a),z(!1)},pickerMode:!0})}))})):null,collapsedKeys:S.collapsedKeys,onToggleGroup:S.toggleGroup}),"guided"===h&&(0,d.jsx)(u.A,{fullWidth:!0,label:"What should this helper do?",value:l.description||"",onChange:a=>n({...l,description:a.target.value}),margin:"normal",multiline:!0,minRows:2,helperText:"This instruction is used when another step hands work to the helper flow."}),"advanced"===h&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What does the subflow receive?"}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":"Subflow input",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b1,{selected:"full-history"===ag,onClick:()=>P("inputMode","full-history"),icon:(0,d.jsx)(bY,{}),title:"Full conversation",description:"The subflow sees the whole conversation so far, minus tool plumbing (system messages, tool calls and tool results are always stripped). Best for a helper that should continue with all the context."}),(0,d.jsx)(b1,{selected:"latest-message"===ag,onClick:()=>P("inputMode","latest-message"),icon:(0,d.jsx)(bZ,{}),title:"Latest message only",description:"The subflow sees the conversation from the most recent user message onward (not just one message), with tool plumbing stripped. Best for an orchestrator that hands off one task at a time, so old tasks don't leak in."}),(0,d.jsx)(b1,{selected:"isolated"===ag,onClick:()=>P("inputMode","isolated"),icon:(0,d.jsx)(b$,{}),title:"Isolated",description:"The conversation is ignored. The subflow receives only the prompt you write below, as its first message."})]}),"isolated"===ag&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(G.A,{sx:{mt:1,display:"block"},control:(0,d.jsx)(bi.A,{checked:l.properties?.allowCallerPrompt!==!1,onChange:a=>P("allowCallerPrompt",a.target.checked)}),label:"Let the caller pass a prompt"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:"When on, a step that routes to this subflow can attach an instruction through its handoff tool, overriding the prompt below. The prompt below is then used only as a default when the caller sends none."}),(0,d.jsx)(u.A,{fullWidth:!0,label:l.properties?.allowCallerPrompt!==!1?"Default prompt (used if the caller sends none)":"Isolated prompt",value:af,onChange:a=>P("promptTemplate",a.target.value),margin:"normal",multiline:!0,rows:3,helperText:l.properties?.allowCallerPrompt!==!1?"The default first message for the subflow. A routing model may override it via the handoff tool. The parent conversation is not passed.":"Sent to the subflow as its single user message. The parent conversation is not passed."})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:"Dynamic fan-out"}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Parallel flows from run variable",value:Y,disabled:!ae,onChange:a=>{let b=a.target.value.trim();b?P("parallelSubflowIdsVar",b):Q("parallelSubflowIdsVar")},margin:"normal",helperText:ae?"Enter a run-variable NAME only (no ${…}); it resolves at runtime to the list of flow ids to run in parallel.":Z?"Disabled while “map over list” is on — a node can’t do both.":"Disabled while a static parallel list is configured via the flow API."}),(0,d.jsx)(G.A,{sx:{display:"block",mt:1},control:(0,d.jsx)(bi.A,{checked:Z,disabled:!ad&&!Z,onChange:a=>{a.target.checked?P("mapOverList",!0):n(a=>{if(!a)return null;let{mapOverList:b,itemSplit:c,sequential:d,...e}=a.properties;return{...a,properties:e}})}}),label:"Run the selected flow once per input item (map over list)"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:ad||Z?"When on, the node parses its input into a list and runs the single selected flow once per item, merging the results.":"Disabled: map-over-list needs a single selected flow and can’t combine with parallel or spawning modes."}),Z&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"center",ml:4,mt:1},children:[(0,d.jsxs)(u.A,{label:"Split input as",select:!0,size:"small",sx:{width:240},value:l.properties?.itemSplit==="lines"?"lines":"json-array",onChange:a=>{"lines"===a.target.value?P("itemSplit","lines"):Q("itemSplit")},helperText:"How the input is parsed into items",children:[(0,d.jsx)(K.A,{value:"json-array",children:"JSON array (default)"}),(0,d.jsx)(K.A,{value:"lines",children:"Lines"})]}),(0,d.jsx)(G.A,{control:(0,d.jsx)(bi.A,{checked:l.properties?.sequential===!0,onChange:a=>{a.target.checked?P("sequential",!0):Q("sequential")}}),label:"Run items one at a time (ignores max copies)"})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:"Parallel workers (spawning)"}),(0,d.jsx)(G.A,{sx:{display:"block"},control:(0,d.jsx)(bi.A,{checked:$,onChange:a=>P("allowCallerFanout",a.target.checked)}),label:"Let the caller spawn parallel copies of this sub-agent"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:"When on, the step that hands off here may call this node's handoff tool several times in one reply — each call runs one parallel copy of the selected flow with its own task brief. The copies run concurrently; their results are merged in order and the flow continues once all of them finish."}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Always spawn these briefs (one per line, optional)",value:A,onChange:a=>B(a.target.value),margin:"normal",multiline:!0,minRows:2,helperText:"When set, every visit runs one parallel copy of the selected flow per line — no caller needed. Caller-passed tasks (above) override this list for that visit. Supports ${var:NAME}, ${res:NAME} and ${kv:NAME}."}),aa&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",mt:1},children:[(0,d.jsx)(u.A,{label:"Max copies at once",type:"number",size:"small",sx:{width:160},value:"number"==typeof l.properties?.concurrencyLimit?l.properties.concurrencyLimit:"",onChange:a=>{let b=a.target.value;if(""===b)n(a=>{if(!a)return null;let{concurrencyLimit:b,...c}=a.properties;return{...a,properties:c}});else{let a=Math.max(1,Math.floor(Number(b)));Number.isNaN(a)||P("concurrencyLimit",a)}},helperText:"Default 4"}),(0,d.jsxs)(u.A,{label:"Error handling",select:!0,size:"small",sx:{width:220},value:l.properties?.errorStrategy==="fail-fast"?"fail-fast":"collect-all",onChange:a=>P("errorStrategy",a.target.value),helperText:"What happens if a copy fails",children:[(0,d.jsx)(K.A,{value:"collect-all",children:"Collect all (note failures, continue)"}),(0,d.jsx)(K.A,{value:"fail-fast",children:"Fail fast (first failure stops the node)"})]}),(0,d.jsx)(u.A,{label:"Separator between merged results",size:"small",sx:{width:260},multiline:!0,maxRows:2,value:"string"==typeof l.properties?.joinSeparator?l.properties.joinSeparator:"",onChange:a=>{let b=a.target.value;""===b?n(a=>{if(!a)return null;let{joinSeparator:b,...c}=a.properties;return{...a,properties:c}}):P("joinSeparator",b)},helperText:"Empty = blank line"})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:"What do you see in the chat while the subflow runs?"}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":"Subflow output",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b1,{selected:"final-only"!==(l.properties?.outputMode||"steps"),onClick:()=>P("outputMode","steps"),icon:(0,d.jsx)(b_.A,{}),title:"Full",description:"You see all of the subflow's messages in the chat, indented under this step — like watching it work."}),(0,d.jsx)(b1,{selected:l.properties?.outputMode==="final-only",onClick:()=>P("outputMode","final-only"),icon:(0,d.jsx)(b0,{}),title:"Condensed",description:"You only see the subflow's final answer as a single message. Its inner steps stay hidden."})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:"Debugging"}),(0,d.jsx)(G.A,{sx:{display:"block"},control:(0,d.jsx)(H.A,{checked:l.properties?.saveConversation!==!1,onChange:a=>P("saveConversation",a.target.checked)}),label:"Save this subflow's conversation to the sidebar (useful for debugging)"}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{ml:4,mt:-.5},children:'When on, each run of this subflow is persisted as its own conversation in the chat sidebar, linked to the parent run — like a planned execution\'s "Save full conversations". Parallel copies each get their own conversation, titled by their brief.'}),(0,d.jsx)(I.A,{sx:{my:3}}),(0,d.jsx)(b4,{value:{captureVariable:C,captureResource:E,captureKvScope:J,captureKvKey:M},onChange:a=>{void 0!==a.captureVariable&&D(a.captureVariable),void 0!==a.captureResource&&F(a.captureResource),void 0!==a.captureKvScope&&L(a.captureKvScope),void 0!==a.captureKvKey&&N(a.captureKvKey)}})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&l){if("guided"===h){f(b.id,l),c();return}let a=A.split("\n").map(a=>a.trim()).filter(a=>""!==a),d={...l.properties};a.length>0?d.spawnBriefs=a:delete d.spawnBriefs;let e=C.trim();e?d.captureVariable=e:delete d.captureVariable;let g=E.trim();g?d.captureResource=g:delete d.captureResource;let i=aK(J,M);i?d.captureKv=i:delete d.captureKv,f(b.id,{...l,properties:d}),c()}},variant:"contained",color:"primary",children:"Save"})]})]})};var cl=c(86374),cm=c(74419),cn=c(15426),co=c(35406);let cp=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ResourceNodePropertiesModal"),cq=({open:a,node:b,onClose:c,onSave:f,flowNodes:g})=>{let[h,l]=(0,e.useState)(null),{servers:m,isLoading:n}=(0,bq.v)(),[p,t]=(0,e.useState)([]),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(null),[A,B]=(0,e.useState)(!1);(0,e.useEffect)(()=>{if(b){l({...b.data,properties:{scope:"run",...b.data.properties}});let a=!!b.data.label&&"Resource Node"!==b.data.label.trim(),c=!!b.data.description&&b.data.description.trim().length>0;B(a||c)}},[b,a]);let C=h?.properties?.scope==="mcp"?"mcp":"run",D=h?.properties?.boundServer||"",E=h?.properties?.uri||"",H=h?.properties?.runName||"",I=(0,e.useMemo)(()=>{let a=(g??[]).filter(a=>a.id!==b?.id).map(a=>{try{return JSON.stringify(a.data?.properties??{})}catch{return""}});return(0,bn.jX)(a)},[g,b?.id]),J=(0,e.useCallback)((a,b)=>{l(c=>c?{...c,properties:{...c.properties,[a]:b}}:c)},[]);(0,e.useEffect)(()=>{if(!a||"mcp"!==C||!D){t([]),z(null);return}let b=!1;return x(!0),z(null),P.S.listServerResources(D).then(a=>{b||(a.error?(z(a.error),t([])):t([...(a.resources??[]).map(a=>({uri:a.uri,name:a.name,description:a.description,mimeType:a.mimeType})),...(a.resourceTemplates??[]).map(a=>({uri:a.uriTemplate,name:a.name?`${a.name} (template)`:"(template)",description:a.description}))]))}).catch(a=>{b||(cp.warn(`Failed to browse resources of ${D}`,a),z(a instanceof Error?a.message:String(a)))}).finally(()=>{b||x(!1)}),()=>{b=!0}},[a,C,D]);let L="run"===C&&!!H.trim()&&!aG(H.trim());return h?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:"Resource Node Properties"}),(0,d.jsx)(s.A,{children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,mt:1,children:[(0,d.jsxs)(a6.A,{children:[(0,d.jsxs)(cl.A,{row:!0,value:C,onChange:a=>J("scope","mcp"===a.target.value?"mcp":"run"),children:[(0,d.jsx)(G.A,{value:"run",control:(0,d.jsx)(cm.A,{}),label:"Temporary Data"}),(0,d.jsx)(G.A,{value:"mcp",control:(0,d.jsx)(cm.A,{}),label:"MCP resource"})]}),(0,d.jsx)(bv.A,{children:"mcp"===C?"A static resource published by an MCP server. Steps connected FROM this node receive its contents.":"A named piece of run data: a step writing INTO this node saves its output here; steps reading FROM it receive the latest value (also available as ${res:NAME})."})]}),"mcp"===C?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(a6.A,{fullWidth:!0,children:[(0,d.jsx)(a7.A,{id:"resource-server-label",children:"Server"}),(0,d.jsxs)(a8.A,{labelId:"resource-server-label",label:"Server",value:D,onChange:a=>{J("boundServer",a.target.value)},children:[n&&(0,d.jsx)(K.A,{value:"",disabled:!0,children:"Loading servers…"}),m.map(a=>(0,d.jsx)(K.A,{value:a.name,children:a.name},a.name))]})]}),(0,d.jsx)(u.A,{label:"Resource URI",value:E,onChange:a=>J("uri",a.target.value),fullWidth:!0,placeholder:"e.g. file:///data/report.md",helperText:"Pick from the list below or paste a URI / filled-in template."}),w&&(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",gap:1,children:[(0,d.jsx)(F.default,{size:18}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"Loading resources…"})]}),y&&(0,d.jsxs)(j.A,{variant:"body2",color:"warning.main",children:["Could not list resources: ",y]}),!w&&!y&&D&&0===p.length&&(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"This server publishes no resources (you can still paste a URI above)."}),p.length>0&&(0,d.jsx)(au.A,{dense:!0,sx:{maxHeight:240,overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:p.map(a=>(0,d.jsxs)(ax.A,{selected:a.uri===E,onClick:()=>J("uri",a.uri),children:[(0,d.jsx)(av.A,{sx:{minWidth:34},children:(0,d.jsx)(ad.A,{fontSize:"small",sx:{color:"#009688"}})}),(0,d.jsx)(aw.A,{primary:a.name||a.uri,secondary:a.name?a.uri:a.description,secondaryTypographyProps:{sx:{wordBreak:"break-all"}}})]},a.uri))})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(cn.A,{freeSolo:!0,options:I,inputValue:H,onInputChange:(a,b)=>J("runName",b),renderInput:a=>(0,d.jsx)(u.A,{...a,label:"Temporary Data name",fullWidth:!0,error:L,helperText:L?"Letters, digits, _ and - only; must not start with a digit.":I.length>0?"Steps reference it as ${res:NAME}. Suggestions are names already used in this flow.":"Steps reference it as ${res:NAME}; a producing edge saves the step output under this name."})}),H.trim()&&!L&&(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",children:['URI at run time: flujo://run/<conversation>/… (named "',H.trim(),'")']})]}),(0,d.jsx)(co.A,{component:"button",type:"button",underline:"hover",onClick:()=>B(a=>!a),sx:{alignSelf:"flex-start"},children:A?"Hide advanced":"Advanced — name & description"}),(0,d.jsx)(o.A,{in:A,unmountOnExit:!0,children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,children:[(0,d.jsx)(u.A,{label:"Label",value:h.label,onChange:a=>l({...h,label:a.target.value}),fullWidth:!0,helperText:"Optional. The node's name on the canvas; defaults to the Temporary Data name."}),(0,d.jsx)(u.A,{label:"Description",value:h.description??"",onChange:a=>l({...h,description:a.target.value}),fullWidth:!0,multiline:!0,minRows:2})]})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(!b||!h)return;let a={...h.properties};"run"===C?(delete a.boundServer,delete a.uri,delete a.mimeType,a.scope="run",a.runName=H.trim()):(delete a.runName,a.scope="mcp");let c=(h.label??"").trim()||("run"===C?H.trim()||"Temporary Data":"MCP resource");f(b.id,{...h,label:c,properties:a})},variant:"contained",children:"Save"})]})]}):null},cr=({open:a,node:b,onClose:c,onSave:f})=>{let[g,h]=(0,e.useState)(null),[j,l]=(0,e.useState)(!1);(0,e.useEffect)(()=>{b&&(h({...b.data,properties:{...b.data.properties}}),l(!!b.data.properties?.payloadTemplate))},[b,a]);let m=(a,b)=>{h(c=>c?{...c,properties:{...c.properties,[a]:b}}:c)};if(!g)return null;let n=g.properties?.topic??"",t=g.properties?.payloadTemplate??"";return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:"Signal Node"}),(0,d.jsx)(s.A,{children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,mt:1,children:[(0,d.jsx)(u.A,{label:"Signal Name (topic)",value:n,onChange:a=>m("topic",a.target.value),fullWidth:!0,required:!0,autoFocus:!0,error:!n.trim(),placeholder:"e.g. review-blocked",helperText:n.trim()?"A free-form shared name (no registry). A planned execution reacts to it via a flow-event trigger with this signal name. This is also the node’s display name.":"A signal name is required — a flow-event trigger listens for this exact name."}),(0,d.jsx)(p.A,{severity:"info",children:"When execution reaches this node it emits the signal and continues immediately (fire-and-forget). To emit conditionally, put a conditioned edge into this node. Runaway signal chains are bounded by the trigger’s max chain depth."}),(0,d.jsx)(co.A,{component:"button",type:"button",underline:"hover",onClick:()=>l(a=>!a),sx:{alignSelf:"flex-start"},children:j?"Hide advanced":"Advanced — optional payload"}),(0,d.jsx)(o.A,{in:j,unmountOnExit:!0,children:(0,d.jsx)(u.A,{label:"Payload template (optional)",value:t,onChange:a=>m("payloadTemplate",a.target.value),fullWidth:!0,multiline:!0,minRows:3,placeholder:"e.g. Review found blockers: ${var:reviewSummary}",helperText:"Optional. Emitted as the signal payload and handed to the triggered flow. ${var:NAME} is resolved from run variables at emit time."})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:()=>{if(!b||!g)return;let a={...g.properties},c="string"==typeof a.topic?a.topic.trim():"";a.topic=c;let d=c||"Signal";f(b.id,{...g,label:d,properties:a})},variant:"contained",children:"Save"})]})]})};var cs=c(98540),ct=c(21704),cu=c(46410),cv=c(62350),cw=c(15059),cx=c(34413),cy=c(63654),cz=c(87113),cA=c(62185),cB=c(91283),cC=c(3391),cD=c(88839),cE=c(72748),cF=c(72535);let cG=(0,L.h)("frontend/components/FlowBuilder/Modals/TriggerNodePropertiesModal"),cH={type:"schedule",cron:"0 9 * * *"},cI={type:"file-watch",path:"",events:["add","change"]},cJ={type:"mcp-poll",serverName:"",toolName:"",args:{},cron:"*/5 * * * *",evaluate:{mode:"on-change"}},cK={type:"url-watch",url:"",cron:"*/15 * * * *"},cL={type:"flow-event",source:{flowId:""},on:["completed"]},cM=({open:a,node:b,flowId:c,onClose:f,onSave:g})=>{let[h,l]=(0,e.useState)("Flow Trigger"),[n,o]=(0,e.useState)(!0),[t,w]=(0,e.useState)(cH),[x,y]=(0,e.useState)("skip"),[z,A]=(0,e.useState)(""),[B,C]=(0,e.useState)(!1),[D,E]=(0,e.useState)(null),[J,L]=(0,e.useState)([]),[M,N]=(0,e.useState)(()=>crypto.randomUUID()),[P,Q]=(0,e.useState)(!1);(0,e.useEffect)(()=>{if(!a||!b)return;E(null);let c=b.data.properties||{};l("string"==typeof c.name?c.name:"Flow Trigger"),o(!1!==c.enabled),w(c.trigger||cH),y(c.overlapStrategy||"skip"),A("string"==typeof c.prompt?c.prompt:""),"string"==typeof c.executionId&&c.executionId?(N(c.executionId),Q(!0)):(N(crypto.randomUUID()),Q(!1))},[a,b]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return O.g.loadFlows().then(a=>{b||L(a||[])}).catch(()=>{b||L([])}),()=>{b=!0}},[a]);let R=(0,e.useCallback)(async()=>{if(!b)return;C(!0),E(null);let a={name:h.trim()||"Flow Trigger",flowId:c,prompt:z,overlapStrategy:x,trigger:t,enabled:n};try{let c;if(!(c=P?await cy.P.update(M,a):await cy.P.create({...a,id:M})).success){E(c.error||"Failed to save trigger configuration"),C(!1);return}Q(!0);let d=h.trim()||"Trigger";g(b.id,{...b.data,label:d,type:"trigger",properties:{executionId:M,name:h,enabled:n,trigger:t,overlapStrategy:x,prompt:z}})}catch(a){E(a instanceof Error?a.message:"Failed to save trigger configuration"),C(!1);return}C(!1),cG.info(`TriggerNodePropertiesModal: Saved trigger node for executionId=${M}`)},[b,M,h,n,t,x,z,c,P,g]);return b?(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(q.A,{open:a,onClose:f,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"#E91E63",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:"Trigger Node"}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:f,"aria-label":"close",children:(0,d.jsx)(bm.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{p:3},children:[(0,d.jsxs)(p.A,{severity:"info",sx:{mb:2},children:["This node links a planned execution trigger to this flow. When the trigger fires, the flow will run headlessly. Configure the trigger below.",!P&&(0,d.jsx)(d.Fragment,{children:" The trigger will be created when you first save."})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Trigger name",value:h,onChange:a=>l(a.target.value),margin:"normal",placeholder:"e.g. Daily digest trigger"}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:n,onChange:a=>o(a.target.checked),color:"primary"}),label:"Enabled",sx:{mt:1,mb:1}}),(0,d.jsx)(j.A,{variant:"subtitle1",sx:{mt:2,mb:1,fontWeight:600},children:"When should it run?"}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":"Trigger type",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(cz.A,{selected:"schedule"===t.type,onClick:()=>{"schedule"!==t.type&&w(cH)},icon:(0,d.jsx)(cs.A,{}),title:"On a schedule",description:"Run at fixed times — every few minutes, daily, on weekdays, or a custom rhythm."}),(0,d.jsx)(cz.A,{selected:"webhook"===t.type,onClick:()=>{"webhook"!==t.type&&w({type:"webhook",token:crypto.randomUUID()})},icon:(0,d.jsx)(ct.A,{}),title:"When called (webhook)",description:"Other apps run this flow by calling a URL."}),(0,d.jsx)(cz.A,{selected:"file-watch"===t.type,onClick:()=>{"file-watch"!==t.type&&w(cI)},icon:(0,d.jsx)(cu.A,{}),title:"When files change",description:"Watch a folder on this computer and run when files appear, change, or disappear."}),(0,d.jsx)(cz.A,{selected:"mcp-poll"===t.type,onClick:()=>{"mcp-poll"!==t.type&&w(cJ)},icon:(0,d.jsx)(cv.A,{}),title:"Watch a tool",description:"Check one of your MCP tools regularly — run when its result changes."}),(0,d.jsx)(cz.A,{selected:"url-watch"===t.type,onClick:()=>{"url-watch"!==t.type&&w(cK)},icon:(0,d.jsx)(cw.A,{}),title:"When a website changes",description:"Check a URL regularly and run when its content is different from the last check."}),(0,d.jsx)(cz.A,{selected:"flow-event"===t.type,onClick:()=>{"flow-event"!==t.type&&w(cL)},icon:(0,d.jsx)(cx.A,{}),title:"When another flow finishes",description:"React to another flow completing or erroring."})]}),"schedule"===t.type&&(0,d.jsx)(cA.A,{cron:t.cron,timezone:t.timezone,onChange:({cron:a,timezone:b})=>w({...t,cron:a,timezone:b}),catchUp:!0===t.catchUp,onCatchUpChange:a=>w({...t,catchUp:a})}),"webhook"===t.type&&(0,d.jsx)(cB.A,{config:t,onChange:w,executionId:M,saved:P}),"file-watch"===t.type&&(0,d.jsx)(cC.A,{config:t,onChange:w}),"mcp-poll"===t.type&&(0,d.jsx)(cD.A,{config:t,onChange:w}),"url-watch"===t.type&&(0,d.jsx)(cE.A,{config:t,onChange:w}),"flow-event"===t.type&&(0,d.jsx)(cF.A,{config:t,onChange:w,flows:J,currentExecutionId:M}),(0,d.jsxs)(a6.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(a7.A,{id:"overlap-strategy-label",children:"If it's already running…"}),(0,d.jsxs)(a8.A,{labelId:"overlap-strategy-label",label:"If it's already running…",value:x,onChange:a=>y(a.target.value),children:[(0,d.jsx)(K.A,{value:"skip",children:"Skip the new run (default)"}),(0,d.jsx)(K.A,{value:"queue",children:"Queue it — run after the current one finishes"}),(0,d.jsx)(K.A,{value:"parallel",children:"Run in parallel — allow concurrent runs"}),(0,d.jsx)(K.A,{value:"error",children:"Reject the new run with an error"})]})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:"Initial prompt (optional)",value:z,onChange:a=>A(a.target.value),margin:"normal",multiline:!0,minRows:2,placeholder:"Optional prompt override for the triggered run",helperText:"Leave blank to use the flow's default prompt. When set, this overrides the Start node prompt template for runs fired by this trigger."}),D&&(0,d.jsx)(p.A,{severity:"error",sx:{mt:2},children:D})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:f,disabled:B,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:R,variant:"contained",disabled:B,startIcon:B?(0,d.jsx)(F.default,{size:16}):void 0,sx:{backgroundColor:"#E91E63","&:hover":{backgroundColor:"#C2185B"}},children:B?"Saving…":"Save"})]})]})}):null};var cN=c(11939),cO=c(46973);let cP=({flow:a})=>{let b=(0,h.A)(),c=(0,e.useMemo)(()=>(a.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[a.edges]),f=(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:b.palette.text.secondary,strokeWidth:2},markerEnd:{type:cO.TG.ArrowClosed,width:20,height:20,color:b.palette.text.secondary}}),[b.palette.text.secondary]);return(0,d.jsx)(M.Gc,{nodes:a.nodes||[],edges:c,nodeTypes:Z.c_,edgeTypes:Z.nd,defaultEdgeOptions:f,connectionLineType:cO.Do.SmoothStep,fitView:!0,minZoom:.1,maxZoom:2,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},children:(0,d.jsx)(M.VS,{})})},cQ=a=>(0,d.jsx)(M.Ln,{children:(0,d.jsx)(cP,{...a})}),cR=(0,L.h)("components/flow/FlowBuilder/Modals/FlowVersionHistoryDialog"),cS=({open:a,flowId:b,onClose:c,onRestore:g})=>{let[h,l]=(0,e.useState)(!1),[m,n]=(0,e.useState)([]),[o,p]=(0,e.useState)(null),[t,u]=(0,e.useState)(!1),[w,x]=(0,e.useState)(null);(0,e.useEffect)(()=>{if(!a||!b)return;let c=!1;return l(!0),n([]),p(null),x(null),O.g.listFlowVersions(b).then(a=>{c||n(a)}).finally(()=>{c||l(!1)}),()=>{c=!0}},[a,b]);let y=(0,e.useCallback)(a=>{b&&(p(a),u(!0),x(null),O.g.getFlowVersion(b,a).then(b=>{b?x(b.flow):cR.warn(`Version ${a} could not be loaded (pruned?)`)}).finally(()=>u(!1)))},[b]),z=(0,e.useCallback)(()=>{w&&g(w)},[w,g]);return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"lg",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:"Version History"}),(0,d.jsx)(s.A,{dividers:!0,sx:{p:0},children:(0,d.jsxs)(i.default,{sx:{display:"flex",height:"65vh"},children:[(0,d.jsx)(i.default,{sx:{width:300,borderRight:1,borderColor:"divider",overflowY:"auto"},children:h?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,d.jsx)(F.default,{size:28})}):0===m.length?(0,d.jsx)(i.default,{sx:{p:3},children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:"No saved versions yet. A version is archived automatically each time you save a change to this flow."})}):(0,d.jsx)(au.A,{disablePadding:!0,children:m.map((a,b)=>(0,d.jsxs)(f().Fragment,{children:[(0,d.jsx)(ax.A,{selected:a.versionId===o,onClick:()=>y(a.versionId),children:(0,d.jsx)(aw.A,{primary:(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{variant:"body2",children:function(a){try{return new Date(a).toLocaleString()}catch{return String(a)}}(a.savedAt)}),0===b&&(0,d.jsx)(E.A,{label:"most recent",size:"small"})]}),secondary:`${a.nodeCount} node${1===a.nodeCount?"":"s"} \xb7 ${a.edgeCount} edge${1===a.edgeCount?"":"s"}`})}),(0,d.jsx)(I.A,{component:"li"})]},a.versionId))})}),(0,d.jsx)(i.default,{sx:{flex:1,position:"relative",minWidth:0},children:t?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(F.default,{size:32})}):w?(0,d.jsx)(cQ,{flow:w}):(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",p:4},children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",align:"center",children:0===m.length?"Versions appear here after you save changes.":"Select a version on the left to preview it."})})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:"Close"}),(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(cN.A,{}),onClick:z,disabled:!w,children:"Restore this version"})]})]})},cT=a=>a.data?.bidirectional===!0,cU=a=>!(0,S.BY)(a),cV=a=>String(a?.type??a?.data?.type??""),cW=a=>String(a?.data?.label??a?.id??"Unknown node");function cX(a,b,c,d,e,f){return f?{...f,id:a,source:b,target:c,sourceHandle:d,targetHandle:e,data:{...f.data??{},edgeType:"standard",bidirectional:!1},markerStart:void 0}:{id:a,source:b,target:c,sourceHandle:d,targetHandle:e,type:"custom",animated:!0,data:{edgeType:"standard"}}}function cY({open:a,processNodeId:b,parentFlow:c,existingFlowNames:f,onClose:g,onAccept:h}){let[l,m]=(0,e.useState)(""),[n,o]=(0,e.useState)(null),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(null),A=()=>{b&&(z(null),o(function({parentFlow:a,processNodeId:b,subflowName:c,existingFlowNames:d=[],createId:e=N.A}){let f=[],g=[],h=a.nodes??[],i=a.edges??[],j=new Map(h.map(a=>[a.id,a])),k=j.get(b),l=c.trim();k&&"process"===cV(k)||f.push({code:"target-not-process",message:"The selected node no longer exists or is not a Process node.",nodeId:b}),l?/^[\w-]+$/.test(l)?d.some(a=>a.toLowerCase()===l.toLowerCase())&&f.push({code:"duplicate-name",message:`A flow named "${l}" already exists.`}):f.push({code:"invalid-name",message:"The subflow name may contain only letters, numbers, underscores, and dashes."}):f.push({code:"name-required",message:"Enter a name for the new subflow."});let m=new Set;k&&m.add(k.id);let n=k?[k.id]:[];for(;n.length>0;){let a=n.shift();for(let b of i){if(!cU(b))continue;let c=[];for(let d of(b.source===a&&c.push(b.target),cT(b)&&b.target===a&&c.push(b.source),c)){if(m.has(d))continue;let a=j.get(d);if(!a){f.push({code:"missing-edge-node",message:`Edge "${b.id}" points to a missing node. Repair the flow before converting.`,edgeId:b.id});continue}let c=cV(a);"signal"===c?(m.add(d),n.push(d)):("mcp"===c||"resource"===c)&&f.push({code:"attachment-on-control-edge",message:`${cW(a)} is connected as control flow. Reconnect it with its ${c.toUpperCase()} attachment handles before converting.`,nodeId:d,edgeId:b.id})}}}let o=!0;for(;o;)for(let a of(o=!1,i)){if(!(0,S.BY)(a))continue;let b=m.has(a.source);if(b===m.has(a.target))continue;let c=b?a.target:a.source,d=cV(j.get(c));"mcp"===d||"resource"===d?(m.add(c),o=!0):f.push({code:"unsupported-attachment",message:`Attachment edge "${a.id}" does not connect to an MCP or Resource node.`,edgeId:a.id,nodeId:c})}let p=i.filter(a=>m.has(a.source)&&m.has(a.target)),q=[],r=[],s=new Set;for(let a of i){let b=m.has(a.source);if(b===m.has(a.target))continue;if((0,S.BY)(a)){f.push({code:"shared-attachment",message:`Attachment "${a.id}" is also used outside the converted region. Duplicate or disconnect that attachment first.`,edgeId:a.id});continue}let c=b?a.source:a.target,d=b?a.target:a.source,e={edge:a,edgeId:a.id,insideNodeId:c,outsideNodeId:d,outsideLabel:cW(j.get(d))};s.add(d),b?r.push(e):q.push(e),cT(a)&&((b?q:r).push(e),f.push({code:"bidirectional-boundary",message:`Boundary edge "${a.id}" is bidirectional. Make it one-way before converting; internal bidirectional edges are preserved.`,edgeId:a.id}))}let t=[...new Map(r.map(a=>[a.edgeId,a])).values()];t.length>1&&f.push({code:"multiple-outputs",message:`This region has ${t.length} distinct parent exits. A Subflow supports one outgoing control path; join the branches before converting.`});let u=h.filter(a=>m.has(a.id)),v={includedNodes:u.map(a=>({id:a.id,label:cW(a),type:cV(a)})),attachmentCount:u.filter(a=>"mcp"===cV(a)||"resource"===cV(a)).length,signalCount:u.filter(a=>"signal"===cV(a)).length,internalEdgeCount:p.length,inputCount:new Set(q.map(a=>a.edgeId)).size,outputCount:t.length,excludedBoundaryNodes:[...s].map(a=>{let b=j.get(a);return{id:a,label:cW(b),type:cV(b)}}),rewires:[`${new Set(q.map(a=>a.edgeId)).size} parent input edge(s) will target the new Subflow node.`,1===t.length?`The parent output to ${t[0].outsideLabel} will leave the new Subflow node.`:"The new Subflow node will have no parent output.","The child Start node will provide an isolated input to the converted Process."],warnings:g};0===t.length&&g.push("No parent follow-up exists; the extracted fan-out will finish inside the child flow.");let w=q.map(({edge:a,...b})=>b),x=r.map(({edge:a,...b})=>b),y={valid:0===f.length,errors:f,selectedNodeIds:[...m],selectedEdgeIds:p.map(a=>a.id),boundaryInputs:w,boundaryOutputs:x,preview:v};if(f.length>0||!k)return y;let z=e(),A=e(),B=e(),C=()=>`conversion-${e()}`,D=u.filter(a=>{let b=cV(a);return"process"===b||"signal"===b}),E=Math.min(...u.map(a=>a.position.y),k.position.y),F=Math.max(...u.map(a=>a.position.y),k.position.y),G={id:A,type:"start",position:{x:k.position.x,y:E-180},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},H={id:B,type:"finish",position:{x:k.position.x,y:F+180},data:{label:"Finish Node",type:"finish",properties:{}}},I=[...p.map(a=>({...a,data:a.data?{...a.data}:a.data})),cX(C(),A,k.id,"start-bottom","process-top")];if(1===t.length){let a=t[0];I.push(cX(C(),a.insideNodeId,B,"signal"===cV(j.get(a.insideNodeId))?"signal-bottom":"process-bottom","finish-top",a.edge))}else{let a=D.filter(a=>!i.some(b=>!!cU(b)&&(!!(b.source===a.id&&m.has(b.target))||cT(b)&&b.target===a.id&&m.has(b.source)))),b=a.length>0?a:[k];for(let a of(b.length>1&&g.push(`${b.length} internal branches will converge on the child Finish node.`),b))I.push(cX(C(),a.id,B,"signal"===cV(a)?"signal-bottom":"process-bottom","finish-top"))}let J={id:z,name:l,description:`Converted from ${cW(k)} in ${a.name}`,nodes:[G,...u,H],edges:I},K={...k,type:"subflow",selected:!1,data:{label:l,type:"subflow",description:`Runs the ${l} subflow`,properties:{subflowId:z,inputMode:"isolated",outputMode:"final-only",allowCallerPrompt:!0}}},L=h.filter(a=>!m.has(a.id));L.push(K);let M=i.flatMap(a=>{let b=m.has(a.source),c=m.has(a.target);return b&&c?[]:b||c?(0,S.BY)(a)?[]:[{...a,source:b?K.id:a.source,target:c?K.id:a.target,sourceHandle:b?"subflow-bottom":a.sourceHandle,targetHandle:c?"subflow-top":a.targetHandle,data:a.data?{...a.data}:a.data}]:[a]}),O={...a,nodes:L,edges:M};return{...y,valid:!0,childFlow:J,parentFlow:O}}({parentFlow:c,processNodeId:b,subflowName:l,existingFlowNames:f})))},B=async()=>{if(n?.valid&&n.childFlow&&n.parentFlow){x(!0),z(null);try{await h(n),g()}catch(a){z(a instanceof Error?a.message:"The conversion could not be saved.")}finally{x(!1)}}};return(0,d.jsxs)(q.A,{open:a,onClose:w?void 0:g,fullWidth:!0,maxWidth:"md",children:[(0,d.jsx)(r.A,{children:n?"Preview Process conversion":"Convert Process to subflow"}),(0,d.jsx)(s.A,{children:n?(0,d.jsxs)(aZ.A,{spacing:2,children:[n.errors.length>0&&(0,d.jsxs)(p.A,{severity:"error",children:[(0,d.jsx)(j.A,{fontWeight:600,children:"This graph cannot be converted yet."}),(0,d.jsx)(au.A,{dense:!0,disablePadding:!0,children:n.errors.map((a,b)=>(0,d.jsx)(ay.Ay,{disableGutters:!0,children:(0,d.jsx)(aw.A,{primary:a.message})},`${a.code}-${b}`))})]}),y&&(0,d.jsx)(p.A,{severity:"error",children:y}),n.preview.warnings.map((a,b)=>(0,d.jsx)(p.A,{severity:"warning",children:a},`${a}-${b}`)),(0,d.jsxs)(i.default,{children:[(0,d.jsxs)(j.A,{variant:"subtitle1",fontWeight:600,children:["Included in “",l.trim(),"”"]}),(0,d.jsx)(aZ.A,{direction:"row",gap:1,flexWrap:"wrap",sx:{mt:1},children:n.preview.includedNodes.map(a=>(0,d.jsx)(E.A,{label:`${a.label} \xb7 ${a.type}`,size:"small"},a.id))}),(0,d.jsxs)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[n.preview.attachmentCount," attachment(s), ",n.preview.signalCount," signal(s), and ",n.preview.internalEdgeCount," internal edge(s)."]})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:600,children:"Boundary and rewiring"}),(0,d.jsx)(au.A,{dense:!0,children:n.preview.rewires.map(a=>(0,d.jsx)(ay.Ay,{disableGutters:!0,children:(0,d.jsx)(aw.A,{primary:a})},a))}),n.preview.excludedBoundaryNodes.length>0&&(0,d.jsxs)(j.A,{variant:"body2",color:"text.secondary",children:["Kept in parent: ",n.preview.excludedBoundaryNodes.map(a=>`${a.label} (${a.type})`).join(", ")]})]}),(0,d.jsx)(p.A,{severity:"info",children:"Accepting saves the child and parent together. If either save fails, the server compensates so the parent is restored and no child is left behind."})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{sx:{mb:2},children:"Name the child flow. The next step builds a non-persisted preview; closing or rejecting it changes nothing."}),(0,d.jsx)(u.A,{autoFocus:!0,fullWidth:!0,label:"Subflow name",value:l,onChange:a=>m(a.target.value),onKeyDown:a=>{"Enter"===a.key&&A()}})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:g,disabled:w,children:n?"Reject":"Cancel"}),n?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{o(null),z(null)},disabled:w,children:"Back"}),(0,d.jsx)(k.A,{variant:"contained",onClick:B,disabled:!n.valid||w,children:w?"Converting…":"Accept conversion"})]}):(0,d.jsx)(k.A,{variant:"contained",onClick:A,children:"Preview"})]})]})}let cZ=(0,w.A)((0,d.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"}),"Save"),c$=(0,w.A)((0,d.jsx)("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8"}),"Undo"),c_=(0,w.A)((0,d.jsx)("path",{d:"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z"}),"Redo"),c0=(0,w.A)((0,d.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreHoriz");var c1=c(14570),c2=c(52399);let c3=(0,w.A)((0,d.jsx)("path",{d:"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z"}),"ArrowDownward"),c4=(0,w.A)((0,d.jsx)("path",{d:"M7.5 5.6 10 7 8.6 4.5 10 2 7.5 3.4 5 2l1.4 2.5L5 7zm12 9.8L17 14l1.4 2.5L17 19l2.5-1.4L22 19l-1.4-2.5L22 14zM22 2l-2.5 1.4L17 2l1.4 2.5L17 7l2.5-1.4L22 7l-1.4-2.5zm-7.63 5.29a.996.996 0 0 0-1.41 0L1.29 18.96c-.39.39-.39 1.02 0 1.41l2.34 2.34c.39.39 1.02.39 1.41 0L16.7 11.05c.39-.39.39-1.02 0-1.41zm-1.03 5.49-2.12-2.12 2.44-2.44 2.12 2.12z"}),"AutoFixHigh"),c5=(0,L.h)("frontend/components/Flow/FlowManager/ImproveFlowDialog"),c6=({open:a,onClose:b,currentFlow:c,onImproved:f,initialDescription:g})=>{let[h,j]=(0,e.useState)(""),[l,m]=(0,e.useState)([]),[n,o]=(0,e.useState)(""),[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!1),[A,B]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&j(g??"")},[a,g]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return Q.N.loadModels().then(a=>{b||(m(a),o(b=>a.some(a=>a.id===b)?b:a[0]?.id??""))}).catch(a=>{c5.warn("Failed to load models for the improve dialog",a),b||B("Could not load your models. Configure a model first.")}),()=>{b=!0}},[a]);let C=(0,e.useCallback)(()=>{y||(B(null),b())},[y,b]),D=(0,e.useCallback)(async()=>{B(null),z(!0);try{let a={...c,nodes:[...c.nodes],edges:[...c.edges]},b=await O.g.improveFlow(a,h.trim(),n,{allowInstall:w});if(!b.success)return void B(b.error);c5.info("Flow improved",{flowId:b.flow.id,attempts:b.attempts,errors:b.validation.errorCount,warnings:b.validation.warningCount,installedServers:b.installedServers.length}),j(""),f({flow:b.flow,errorCount:b.validation.errorCount,warningCount:b.validation.warningCount,attempts:b.attempts,installedServers:b.installedServers})}finally{z(!1)}},[c,h,n,w,f]),E=!y&&h.trim().length>0&&!!n;return(0,d.jsxs)(q.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:"Improve this flow with AI"}),(0,d.jsxs)(s.A,{children:[(0,d.jsxs)(t.A,{sx:{mb:2},children:["Describe the changes you want — add or remove a step, rewrite a prompt, wire up a tool, rename a node. The model revises the ",(0,d.jsx)("strong",{children:"current"})," flow and the result opens on the canvas as an unsaved change you can review, undo, and save."]}),A&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},onClose:()=>B(null),children:A}),(0,d.jsx)(u.A,{autoFocus:!0,fullWidth:!0,multiline:!0,minRows:4,label:"What should change?",placeholder:"e.g. Add a step after the research that emails the summary, and make the research step use the full conversation",value:h,onChange:a=>j(a.target.value),disabled:y,sx:{mb:2}}),(0,d.jsxs)(a6.A,{fullWidth:!0,disabled:y||0===l.length,children:[(0,d.jsx)(a7.A,{id:"improve-flow-model-label",children:"Generator model"}),(0,d.jsx)(a8.A,{labelId:"improve-flow-model-label",label:"Generator model",value:n,onChange:a=>o(a.target.value),children:l.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName?.trim()||a.name},a.id))})]}),(0,d.jsx)(G.A,{sx:{mt:2},control:(0,d.jsx)(bi.A,{checked:w,onChange:a=>x(a.target.checked),disabled:y}),label:"Let the improver install MCP servers it needs (self-improve)"}),w&&(0,d.jsxs)(p.A,{severity:"warning",sx:{mt:1},children:["The improver may ",(0,d.jsx)("strong",{children:"download, install, and run third-party MCP servers"})," from the public registry on this machine — without asking again. It prefers servers that need no API keys, but anything it installs executes real code with your user's permissions. Installed servers stay configured afterwards (remove them on the MCP page)."]}),y&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1.5,mt:2},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(t.A,{children:w?"Improving… the model may search the marketplace and install servers (this can take a few minutes).":"Improving… the model revises the flow and FLUJO checks it (this can take up to a minute)."})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:C,disabled:y,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:D,variant:"contained",color:"primary",startIcon:(0,d.jsx)(c4,{}),disabled:!E,children:"Improve"})]})]})};var c7=c(24856);let c8=a=>({source:`${a}-bottom`,target:`${a}-top`});function c9(a){return a.data?.type??a.type??"unknown"}let da=(0,w.A)((0,d.jsx)("path",{d:"M13 2H4c-1.1 0-2 .9-2 2v9c0 .55.45 1 1 1s1-.45 1-1V4h9c.55 0 1-.45 1-1s-.45-1-1-1m4 4H8c-1.1 0-2 .9-2 2v9c0 .55.45 1 1 1s1-.45 1-1V8h9c.55 0 1-.45 1-1s-.45-1-1-1m3 4h-8c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2"}),"AutoAwesomeMotionRounded");var db=c(49248);let dc=(0,w.A)((0,d.jsx)("path",{d:"M24 15c0-2.64-2.05-4.78-4.65-4.96C18.67 6.59 15.64 4 12 4c-1.33 0-2.57.36-3.65.97l1.49 1.49C10.51 6.17 11.23 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 .99-.48 1.85-1.21 2.4l1.41 1.41c1.09-.92 1.8-2.27 1.8-3.81M3.71 4.56c-.39.39-.39 1.02 0 1.41l2.06 2.06h-.42c-3.28.35-5.76 3.34-5.29 6.79C.46 17.84 3.19 20 6.22 20h11.51l1.29 1.29c.39.39 1.02.39 1.41 0s.39-1.02 0-1.41L5.12 4.56a.996.996 0 0 0-1.41 0M6 18c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73l8 8z"}),"CloudOffRounded");var dd=c(2560);let de=new Set(["maxTurns","excludeModelPrompt","excludeStartNodePrompt","excludeSystemPrompt","allowedTools","isolatedPrompt","allowCallerPrompt","enableTodoTool","captureVariable","captureResource","captureKv","resourceNodes"]),df=new Set(["parallelSubflowIds","parallelSubflowIdsVar","mapOverList","itemSplit","sequential","allowCallerFanout","spawnBriefs","concurrencyLimit","joinSeparator","errorStrategy","allowCallerPrompt","saveConversation","captureVariable","captureResource","captureKv"]);function dg(a){if(void 0!==a.permissionRules)return!0;for(let b of a.nodes??[]){if(!["start","process","finish","subflow","mcp"].includes(b.type??""))return!0;let a=b.data?.properties??{},c=Object.keys(a);if("process"===b.type&&c.some(a=>de.has(a))||"subflow"===b.type&&c.some(a=>df.has(a))||"process"===b.type&&(void 0!==a.inputMode&&"full-history"!==a.inputMode||void 0!==a.outputMode&&"latest-message"!==a.outputMode)||"subflow"===b.type&&(void 0!==a.inputMode&&"full-history"!==a.inputMode||void 0!==a.outputMode&&"final-only"!==a.outputMode))return!0}return(a.edges??[]).some(a=>{let b=a.data;return!!b?.condition||b?.bidirectional===!0||b?.edgeType==="resource"})}let dh=(0,L.h)("components/flow/FlowBuilder/index.tsx"),di=(0,C.Ay)(i.default)(({theme:a})=>({display:"flex",height:"100%",minHeight:0,gap:"12px",padding:"12px",overflow:"hidden",backgroundColor:"transparent",[a.breakpoints.down("md")]:{flexDirection:"column",gap:"8px",padding:"8px",height:"auto",overflow:"visible"}})),dj=(0,C.Ay)(D.A)(({theme:a})=>({padding:a.spacing(1.1),display:"flex",flexWrap:"wrap",gap:a.spacing(1),border:`1px solid ${a.palette.divider}`,borderRadius:14,alignItems:"center",marginBottom:a.spacing(1),backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.86)":"rgba(255, 255, 255, 0.9)",boxShadow:"dark"===a.palette.mode?"0 16px 45px rgba(0,0,0,.25)":"0 16px 45px rgba(49,45,99,.1)",backdropFilter:"blur(20px) saturate(140%)"})),dk=(0,C.Ay)(i.default)(({theme:a})=>({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden",minWidth:0,minHeight:0,[a.breakpoints.down("md")]:{flex:"0 0 640px",height:640,overflow:"hidden"},[a.breakpoints.down("sm")]:{flexBasis:"auto",height:"auto",minHeight:0,overflow:"visible"}})),dl=new Set(["start","process","finish","subflow","signal"]),dm=(a,b)=>{let c=a.filter(a=>dl.has(a.data.type)),d=new Set(c.map(a=>a.id)),e=b.filter(a=>d.has(a.source)&&d.has(a.target)&&a.data?.edgeType!=="resource"),f=new Map,g=new Map;e.forEach(a=>{f.set(a.source,[...f.get(a.source)??[],a]),g.set(a.target,[...g.get(a.target)??[],a])});let h=c.filter(a=>"start"===a.data.type),i=c.filter(a=>"finish"===a.data.type),j=1!==h.length||i.length>1;c.forEach(a=>{let b=g.get(a.id)?.length??0,c=f.get(a.id)?.length??0;"start"===a.data.type?j||=0!==b||c>1:"finish"===a.data.type?j||=1!==b||0!==c:j||=1!==b||c>1});let k=[],l=new Set,m=h[0]?.id;for(;m&&!l.has(m);){l.add(m),k.push(m);let a=f.get(m)??[];if(1!==a.length)break;m=a[0].target}return{unsafe:j||=0===c.length||l.size!==c.length,orderedNodeIds:k}},dn=f().forwardRef(({initialFlow:a,onSave:b,onDelete:c,onConversionCommitted:g,allFlows:h,relatedDraftFlows:l=[],onRelatedDraftFlowsChange:w,isDraft:x=!1,onTry:z},A)=>{dh.debug("FlowBuilder rendered with initialFlow:",a);let[B,C]=(0,e.useState)(a?.nodes||[]),[D,L]=(0,e.useState)((a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle)),[T,$]=(0,e.useState)(a?.name||"Untitled agent"),[_,aa]=(0,e.useState)(null),[ab,ac]=(0,e.useState)(a?.description||""),ad=!!a&&(dg({nodes:a.nodes||[],edges:a.edges||[],permissionRules:a.permissionRules})||dm(a.nodes||[],a.edges||[]).unsafe),[ae,af]=(0,dd.Xk)("flujo-ui:flow-builder:mode","guided"),[ag,ah]=(0,e.useState)(()=>ad?"advanced":ae),ai=(0,e.useCallback)(a=>{ah(a),af(a)},[af]),aj=(0,e.useRef)(0),ak=(0,e.useCallback)(a=>({...a,id:`permission-rule-${++aj.current}`}),[]),[al,am]=(0,e.useState)(()=>(a?.permissionRules||[]).map(ak)),[an,ao]=(0,e.useState)(a?.permissionRules!==void 0),[ap,aq]=(0,e.useState)(!1),[as,at]=(0,e.useState)(null),au=dg({nodes:B,edges:D,permissionRules:a?.permissionRules}),av=dm(B,D),aw=au||av.unsafe,[ax,ay]=(0,e.useState)(!1),[az,aA]=(0,e.useState)("none"),[aB,aC]=(0,e.useState)(""),[aD,aE]=(0,e.useState)(null),[aF,aG]=(0,e.useState)(!1),[aH,aI]=(0,e.useState)(!1),[aJ,aK]=(0,e.useState)(!1),[aL,aM]=(0,e.useState)(!1),[aN,aO]=(0,e.useState)(!1),[aP,aQ]=(0,e.useState)(!1),[aR,aS]=(0,e.useState)(!1),[aT,aU]=(0,e.useState)(!1),[aV,aW]=(0,e.useState)(null),[aX,aZ]=(0,e.useState)(null),[a$,a_]=(0,e.useState)("edit"),[a0,a1]=(0,e.useState)(null),[a2,a3]=(0,e.useState)(null),[a4,a6]=(0,e.useState)(!1),[a7,a8]=(0,e.useState)(null),[a9,ba]=(0,e.useState)(null),[bb,bc]=(0,e.useState)(""),[be,bf]=(0,e.useState)(!1),[bg,bi]=(0,e.useState)([]),[bj,bk]=(0,e.useState)(-1),[bm,bn]=(0,e.useState)(!1),[bo,bp]=(0,e.useState)(!1),[bq,br]=(0,e.useState)(x?"unsaved":"saved"),[bs,bt]=(0,e.useState)([]),[bu,bv]=(0,e.useState)(null),[bw,bx]=(0,e.useState)(()=>x&&!(a?.nodes??[]).some(a=>"process"===a.data.type)?"unasked":"manual"),[by,bz]=(0,e.useState)(!1),[bA,bB]=(0,e.useState)(null),bC=(0,e.useRef)(a?.id??(0,N.A)()),bD=(0,e.useRef)(0),bE=(0,e.useRef)(null),bF=(0,e.useRef)(B.some(a=>"trigger"===a.type));bF.current=B.some(a=>"trigger"===a.type);let bG=(0,e.useRef)(null),bH=(0,e.useRef)(!1),bI=(0,e.useRef)(!0);(0,e.useEffect)(()=>{let a=!0;return Q.N.loadModels().then(b=>{a&&(bt(b),0===b.length&&bx(a=>"unasked"===a?"manual":a))}).catch(b=>{dh.warn("Could not load connected AIs for Guided mode",b),a&&(bt([]),bx(a=>"unasked"===a?"manual":a))}),()=>{a=!1}},[]);let bJ=(0,e.useCallback)(a=>a.filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle).map(a=>a.data?.edgeType==="resource"&&"resourceEdge"!==a.type?{...a,type:"resourceEdge"}:a),[]);(0,e.useEffect)(()=>{if(bI.current=!0,bD.current=0,bp(!1),br(x?"unsaved":"saved"),a){let b=a.nodes||[],c=x?b.map(a=>({...a,selected:!1})):b;C(c);let d=bJ(a.edges||[]);d.length!==a.edges.length&&console.warn(`Filtered out ${a.edges.length-d.length} invalid edges`),L(d),$(a.name),ac(a.description||""),am((a.permissionRules||[]).map(ak)),ao(void 0!==a.permissionRules),at(null),(dg({nodes:b,edges:d,permissionRules:a.permissionRules})||dm(b,d).unsafe)&&ai("advanced"),bi([{nodes:c,edges:d}]),bk(0)}else{let a=O.g.createStartNode();C([a]),L([]),$("Untitled agent"),ac(""),am([]),ao(!1),at(null),bi([{nodes:[a],edges:[]}]),bk(0)}},[a?.id,ak,ai]);let bK=a=>JSON.stringify(a,(a,b)=>"selected"===a||"dragging"===a||"measured"===a||"width"===a||"height"===a||"positionAbsolute"===a||"resizing"===a?void 0:b);(0,e.useEffect)(()=>{if(bm)return void bn(!1);if(bI.current){bI.current=!1;return}if(bH.current)return;let a={nodes:[...B],edges:[...D]},b=bg.slice(0,bj+1);(bj<0||bK(a)!==bK(b[bj]))&&(bi([...b,a]),bk(bj+1),bp(!0),bD.current+=1,br("unsaved"))},[B,D]),(0,e.useEffect)(()=>{let a=a=>{if(bo)return a.preventDefault(),a.returnValue="",""};return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[bo]);let bL=b=>b.trim()?/^[\p{L}\p{N}_ -]+$/u.test(b.trim())?(!a||a&&a.name!==b)&&h.some(c=>c.id!==(a?.id||"")&&c.name.trim().toLowerCase()===b.trim().toLowerCase())?"An agent with this name already exists":null:"Use letters, numbers, spaces, underscores, or dashes":"Agent name cannot be empty",bM=(0,e.useCallback)(()=>{bp(!0),bD.current+=1,br("unsaved")},[]),bN=(a,b)=>{am(c=>c.map(c=>c.id===a?{...c,...b}:c)),ao(!0),at(null),bM()},bO=(a,b)=>{let c=a+b;c<0||c>=al.length||(am(b=>{let d=[...b];return[d[a],d[c]]=[d[c],d[a]],d}),ao(!0),bM())},bP=(0,e.useCallback)(()=>an?al.map(({id:a,...b})=>b):void 0,[al,an]),bQ=(0,e.useCallback)(()=>!al.find(a=>!a.action.trim()||!a.resource.trim())||(at("Each permission rule needs both an action and a resource. Use * to match any value."),aq(!0),!1),[al]),bR=(0,e.useCallback)(()=>{if(bE.current)return bE.current;let c=(async()=>{dh.debug(`handleSave: Attempting to save flow "${T}"`);let c=bL(T);if(c)return dh.warn(`handleSave: Invalid flow name - ${c}`),aa(c),"invalid-name";if(!bQ())return"invalid-name";let d=[...B];0===d.length&&(dh.debug("handleSave: No nodes found, adding a default Start node"),C(d=[O.g.createStartNode()]));let e={id:a?.id||(0,N.A)(),name:T.trim(),description:ab,nodes:d,edges:D,folder:a?.folder,favorite:a?.favorite,permissionRules:bP()};dh.info(`handleSave: Saving flow "${T}" with ${d.length} nodes and ${D.length} edges`);let f=bD.current;br("saving");try{let a=await b(e);if(!1===a)return br("error"),"failed";return bD.current===f?(bp(!1),br("saved")):(bp(!0),br("unsaved")),"saved"}catch(a){return dh.error("handleSave: Persistence failed",a),br("error"),bp(!0),"failed"}})();return bE.current=c,c.finally(()=>{bE.current===c&&(bE.current=null)}),c},[T,ab,B,D,a,b,bP,bQ]),bS=(0,e.useCallback)(async()=>{z&&((x||bo||"saved"!==bq)&&"saved"!==await bR()||z())},[z,x,bo,bq,bR]);f().useImperativeHandle(A,()=>({requestNavigation:a=>{bo?(bG.current=a,aA("unsaved"),ay(!0)):a()}}),[bo]);let bT=(0,e.useCallback)(()=>{a?(dh.info(`handleDelete: Deleting flow "${a.name}" (ID: ${a.id})`),c(a.id)):dh.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[a,c]),bU=(0,e.useCallback)(a=>{dh.info("Applying AI-improved flow to the canvas",{flowId:a.flow.id,attempts:a.attempts,errors:a.errorCount,warnings:a.warningCount}),a6(!1),C(a.flow.nodes||[]),L(bJ(a.flow.edges||[])),$(a.flow.name),ac(a.flow.description||""),void 0!==a.flow.permissionRules&&(am(a.flow.permissionRules.map(ak)),ao(!0)),aa(bL(a.flow.name)),bp(!0);let b=a.installedServers.filter(a=>!a.alreadyExisted),c=b.length>0?` Installed MCP server(s): ${b.map(a=>a.name).join(", ")}.`:"";a.errorCount>0?a8({severity:"warning",message:`Flow revised with ${a.errorCount} error(s) and ${a.warningCount} warning(s) — use the Check button, fix, then Save.${c}`}):a.warningCount>0?a8({severity:"info",message:`Flow revised with ${a.warningCount} warning(s) — review the changes, then Save to keep them.${c}`}):a8({severity:"success",message:`Flow revised — review the changes (Undo reverts them), then Save to keep them.${c}`})},[bJ]),bV=(0,e.useCallback)(a=>{dh.info("Restoring an archived flow version to the canvas",{flowId:a.id,nodes:a.nodes?.length??0,edges:a.edges?.length??0}),bf(!1),C(a.nodes||[]),L(bJ(a.edges||[])),$(a.name),ac(a.description||""),am((a.permissionRules||[]).map(ak)),ao(void 0!==a.permissionRules),aa(bL(a.name)),bp(!0),a8({severity:"info",message:"Restored an earlier version to the canvas — review it (Undo reverts), then Save to keep it."})},[bJ]),bW=(0,e.useCallback)(()=>{ba(null);let{flow:b,changes:c}=function(a){var b,c;let d=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),e=[...a?.edges??[]],f={...a,nodes:d,edges:e},g=[],h=function(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,f=new Map,g=new Set;for(let a of c)e.set(a.id,0),f.set(a.id,0);let h=(a,b)=>{g.add(`${a}->${b}`),f.set(a,(f.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(h(a.from,a.to),a.bidirectional&&h(a.to,a.from));let i=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=i[i.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):i.push([a])}let j=new Map;i.forEach((a,b)=>a.forEach(a=>j.set(a.id,b)));let k=new Map;for(let a=1;a<i.length;a++){let b=i[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=i[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)k.set(a.id,b[0].id)}}let l=[],m=(a,b)=>{if(a===b||g.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==(0,S.vC)(c.type,c8(c.type).source,e.type,c8(e.type).target)||"subflow"===c.type&&(f.get(a)??0)>=1)},n=(a,b,c,d)=>{l.push({from:a,to:b,bidirectional:c,reason:d}),h(a,b),c&&h(b,a)},o=a=>{let b=j.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=i[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!k.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of i)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=k.get(b.id);if(a){m(a,b.id)&&n(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=o(b);c&&m(c.id,b.id)&&n(c.id,b.id,!1,"auto-connected")}let p=c.filter(a=>"start"===a.type),q=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!k.has(a.id)&&(e.get(a.id)??0)===0),r=null;if(0===p.length){let a=q();if(a.length>0)r={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(r={targets:[a.id]})}}else{let a=p[0];for(let b of q())m(a.id,b.id)&&n(a.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"finish"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!k.has(a.id)&&(f.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();a.length>0&&(u={sources:a.map(a=>a.id)})}else{let a=s[0];for(let b of t())m(b.id,a.id)&&n(b.id,a.id,!1,"auto-connected")}return{addEdges:l,addStart:r,addFinish:u}}(d.filter(a=>"mcp"!==c9(a)&&"resource"!==c9(a)).map(a=>({id:a.id,type:c9(a),x:a.position?.x??0,y:a.position?.y??0})),e.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),i=new Map(d.map(a=>[a.id,a])),j=(a,b,c)=>{let d=i.get(a),f=i.get(b);d&&f&&e.push((0,c7.pX)(d,f,c))};for(let a of h.addEdges)j(a.from,a.to,a.bidirectional),g.push({code:a.reason,message:function(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}(a.reason),nodeId:a.to});if(h.addStart){let a=h.addStart.targets.map(a=>i.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,N.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(d.unshift(c),i.set(c.id,c),h.addStart.targets))j(c.id,a,!1);g.push({code:"auto-added-start",message:`Added a Start node connected to ${h.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(h.addFinish){let a=h.addFinish.sources.map(a=>i.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,N.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(d.push(b),i.set(b.id,b),h.addFinish.sources))j(a,b.id,!1);g.push({code:"auto-added-finish",message:`Added a Finish node connected from ${h.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:f,changes:g}}({id:a?.id||"",name:T,description:ab,nodes:B,edges:D,folder:a?.folder,favorite:a?.favorite,permissionRules:bP()});if(0===c.length)return void a8({severity:"info",message:"Nothing to repair — the flow is already wired up."});dh.info(`Applying static auto-repair to the canvas (${c.length} change(s))`),C(b.nodes||[]),L(bJ(b.edges||[])),bp(!0);let d=c.filter(a=>"auto-added-start"===a.code||"auto-added-finish"===a.code).length,e=c.length-d,f=[];c.some(a=>"auto-added-start"===a.code)&&f.push("added a Start node"),c.some(a=>"auto-added-finish"===a.code)&&f.push("added a Finish node"),e>0&&f.push(`connected ${e} step(s)`),a8({severity:"success",message:`Repaired the flow — ${f.join(", ")}. Review the changes (Undo reverts them), then Save to keep them.`})},[a,T,ab,B,D,bJ,bP]),bX=(0,e.useCallback)(()=>{ba(null),bc("Repair this flow's wiring so it is runnable, without changing any node's prompt, model, or servers: add a Start node if one is missing (connected to the first step), add a Finish node if one is missing (connected from the last step), and connect any disconnected process/subflow nodes. Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them."),a6(!0)},[]),bY=(0,e.useCallback)(async(a,c)=>{dh.debug(`handleCopyFlow: Copying flow "${a.name}" to "${c}"`);let d={id:(0,N.A)(),name:c,description:a.description,nodes:a.nodes,edges:a.edges,folder:a.folder,favorite:a.favorite,permissionRules:a.permissionRules};return dh.info(`handleCopyFlow: Created copy of flow "${a.name}" with new name "${c}" (${a.nodes.length} nodes, ${a.edges.length} edges)`),await b(d)!==!1},[b]),bZ=()=>{let a=bG.current;bG.current=null,a&&a()},b$=()=>{bG.current=null,ay(!1),aA("none"),aC(""),aE(null)},b_=async()=>{let c=bL(aB);if(c)return void aE(c);if("duplicate"===az){if(a&&!await bY(a,aB))return}else if("rename"===az){let c={id:a?.id||(0,N.A)(),name:aB,description:ab,nodes:B,edges:D,folder:a?.folder,favorite:a?.favorite,permissionRules:bP()};if(await b(c)===!1)return void br("error");bp(!1),br("saved"),bZ()}b$()},b0=async()=>{let a=await bR();"saved"===a?(bZ(),b$()):"invalid-name"===a&&b$()},b1=bj>0,b2=bj<bg.length-1,b3=(0,e.useCallback)(()=>{if(b1){dh.debug(`handleUndo: Performing undo operation, moving from history index ${bj} to ${bj-1}`),bn(!0);let a=bj-1,b=bg[a];C(b.nodes),L(b.edges),bk(a),bM(),dh.info(`handleUndo: Restored flow state to previous version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[bg,bj,b1,bM]),b4=(0,e.useCallback)(()=>{if(b2){dh.debug(`handleRedo: Performing redo operation, moving from history index ${bj} to ${bj+1}`),bn(!0);let a=bj+1,b=bg[a];C(b.nodes),L(b.edges),bk(a),bM(),dh.info(`handleRedo: Restored flow state to next version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[bg,bj,b2,bM]);(0,e.useEffect)(()=>{let a=a=>{let b=a.target,c=b?.tagName==="INPUT"||b?.tagName==="TEXTAREA"||b?.isContentEditable,d=a.ctrlKey||a.metaKey,e=a.key.toLowerCase();if(d&&"s"===e){a.preventDefault(),bR();return}if(!c&&d&&"z"===e){a.preventDefault(),a.shiftKey?b4():b3();return}if(!c&&d&&"y"===e){a.preventDefault(),b4();return}c||(!d||"k"!==e)&&(d||"a"!==e&&"/"!==a.key)||(a.preventDefault(),document.dispatchEvent(new CustomEvent("openFlowQuickAdd")))};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[bR,b3,b4]);let b5=(0,e.useCallback)(async b=>{if(!a||!a2||!b.parentFlow||!b.childFlow)throw Error("Save the parent flow before converting a Process node.");let c=await O.g.convertProcessToSubflow(b.parentFlow,b.childFlow,a2,a.updatedAt);if(!c.success)throw Error(c.error);let d={nodes:c.parentFlow.nodes,edges:c.parentFlow.edges},e=[...bg.slice(0,bj+1),d];bn(!0),bi(e),bk(e.length-1),C(c.parentFlow.nodes),L(c.parentFlow.edges),bp(!1),br("saved"),a3(null),g?.(c.parentFlow,c.childFlow)},[a,a2,bg,bj,g]),b6=(0,e.useCallback)(a=>{for(let b of a)"position"===b.type&&(bH.current=!0===b.dragging);C(b=>(0,M._0)(a,b))},[]),b8=(0,e.useCallback)((a,b)=>{L(c=>c.map(c=>{if(c.id!==a)return c;let d={...c.data??{}};return b?d.condition=b:delete d.condition,{...c,data:d}})),dh.info(`handleSaveEdgeCondition: ${b?"set":"cleared"} condition on edge ${a}`)},[]),b9=(0,e.useCallback)(a=>{dh.debug(`onEdgesChange: Processing ${a.length} edge changes`),a.forEach(a=>{"remove"===a.type?dh.info(`onEdgesChange: Edge ${a.id} removed`):"select"===a.type&&dh.debug(`onEdgesChange: Edge ${a.id} selection changed to ${a.selected}`)}),L(b=>(0,M.zW)(a,b))},[]),ca=(0,e.useRef)(null),[ce,cf]=(0,e.useState)(null),ch=(0,e.useCallback)(a=>{aW(a),setTimeout(()=>aW(b=>b===a?null:b),5e3)},[]),ci=(0,e.useCallback)((a,b,c)=>{if("trigger"===a&&bF.current)return ch("A Trigger node already exists in this flow. Only one Trigger node is allowed per flow."),null;"trigger"===a&&(bF.current=!0);let d=c??O.g.createNode(a,b);return C(a=>[...a.map(a=>({...a,selected:!1})),{...d,selected:!0}]),d},[ch]),cj=(0,e.useCallback)(a=>{let b=B.find(a=>a.selected)??(1===B.length&&"start"===B[0].data.type?B[0]:void 0),c=ca.current?.getBoundingClientRect(),d=c&&ce?ce.screenToFlowPosition({x:c.left+c.width/2,y:c.top+c.height/2}):{x:250,y:180},e=b&&!["mcp","resource","trigger"].includes(a)?{x:b.position.x,y:b.position.y+180}:d;for(let a=0;a<12&&B.some(a=>90>Math.abs(a.position.x-e.x)&&70>Math.abs(a.position.y-e.y));a+=1)e={x:e.x+36,y:e.y+36};let f=!!b&&["process","finish","subflow","signal"].includes(a),g=O.g.createNode(a,e);if(b&&f){let c={start:"start-bottom",process:"process-bottom",subflow:"subflow-bottom",signal:"signal-bottom"}[b.type];if(!c)return ch(`${b.data.label||"The selected node"} cannot lead to another step. Select a Start, Process, Subflow, or Signal node first.`),null;let d={source:b.id,sourceHandle:c,target:g.id,targetHandle:(0,S.CW)(a,c)},f=[...B,g];if(!(0,R.JL)(d,f,D))return ch("That step cannot be appended here. Choose another source node or adjust its existing connection."),null;let h=ci(a,e,g);if(!h)return null;let i=(0,R.wn)(d,f);return L(a=>[...a,i]),h}return ci(a,e,g)},[B,D,ce,ci,ch]),cl=(0,e.useCallback)(a=>{if(aw)return void ch("This agent uses custom wiring. Open Expert mode before changing its sequence.");let b=B.find(a=>"start"===a.data.type),c=B.find(a=>"finish"===a.data.type),d=[...av.orderedNodeIds.map(a=>B.find(b=>b.id===a)).filter(a=>!!a)].reverse().find(a=>["start","process","subflow","signal"].includes(a.data.type))??b;if(!d)return void ch("This agent is missing its starting point. Open Expert mode to repair it.");let e={start:"start-bottom",process:"process-bottom",subflow:"subflow-bottom",signal:"signal-bottom"}[d.data.type];if(!e)return void ch("Add this step from Expert mode so its custom connection stays safe.");let f=O.g.createNode("process",{x:d.position.x,y:d.position.y+180});f.data={...f.data,label:"AI task",properties:{...f.data.properties??{},promptTemplate:a,inputMode:"full-history",outputMode:"latest-message",..."assisted"===bw&&bu?{boundModel:bu}:{}}};let g=c??O.g.createNode("finish",{x:d.position.x,y:d.position.y+360}),h=[...B.filter(a=>a.id!==g.id).map(a=>({...a,selected:!1})),{...f,selected:!0},{...g,position:{x:d.position.x,y:d.position.y+360},selected:!1}],i=D.filter(a=>!(c&&a.source===d.id&&a.target===c.id)),j={source:d.id,sourceHandle:e,target:f.id,targetHandle:(0,S.CW)("process",e)},k={source:f.id,sourceHandle:"process-bottom",target:g.id,targetHandle:(0,S.CW)("finish","process-bottom")};C(h),L([...i,(0,R.wn)(j,h),(0,R.wn)(k,h)]),B.some(a=>"process"===a.data.type)||ab.trim()||ac(a),"assisted"===bw&&bu?(bB(f.id),bz(!0)):bu||ch("Step added. Connect an AI model before trying this agent.")},[B,D,bw,bu,av.orderedNodeIds,aw,ch,ab]),cm=B.find(a=>a.selected)??null,cn=B.some(a=>["process","subflow"].includes(a.data.type)),co=B.filter(a=>"process"===a.data.type).every(a=>"string"==typeof a.data.properties?.boundModel&&!!a.data.properties.boundModel),cp=!!T.trim()&&!/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(T.trim())&&!_,cs=cn&&co&&cp&&!aw&&"saving"!==bq,ct=(0,e.useCallback)(a=>{C(b=>b.map(b=>({...b,selected:b.id===a})))},[]),cu=(0,e.useMemo)(()=>({...a??{id:bC.current,name:T,nodes:[],edges:[]},id:a?.id??bC.current,name:T,...ab.trim()?{description:ab}:{},nodes:B,edges:D,permissionRules:an?al.map(({id:a,...b})=>b):void 0}),[D,ab,T,a,B,al,an]),cv=(0,e.useMemo)(()=>{if(bA){let a=B.find(a=>a.id===bA),b=a?.data.properties?.boundModel;if("string"==typeof b&&b)return b}if(bu)return bu;let a=B.find(a=>"process"===a.data.type&&"string"==typeof a.data.properties?.boundModel&&!!a.data.properties.boundModel)?.data.properties?.boundModel;return"string"==typeof a?a:null},[bA,bu,B]),cw=(0,e.useCallback)(a=>{C(a.nodes),L(a.edges),void 0!==a.description&&ac(a.description),bM()},[bM]),cx=(0,e.useCallback)(()=>{let a=B.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1}));a.length>0&&b6(a)},[B,b6]),cy=(0,e.useCallback)(()=>{dh.debug("handleAutoAlign: auto-arranging flow nodes"),C(a=>(function(a,b,c={}){let{direction:d="TB",rankSep:e=120,nodeSep:f=80,mcpOffsetX:g=350,mcpStackY:h=120}=c,i=a.filter(a=>"mcp"===a.type),j=a.filter(a=>"resource"===a.type),k=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type);if(k.length<=1)return a;let l=new Set(k.map(a=>a.id)),m=new Map;for(let a of(k.forEach(a=>m.set(a.id,new Set)),b))!(U(a)||V(a))&&a.source!==a.target&&l.has(a.source)&&l.has(a.target)&&m.get(a.source).add(a.target);let n=new Map;k.forEach(a=>n.set(a.id,0));let o=k.length;for(let a=0;a<o;a++){let a=!1;for(let[b,c]of m){let d=n.get(b)+1;for(let b of c)n.get(b)<d&&(n.set(b,d),a=!0)}if(!a)break}let p=new Map;for(let a of k){let b=n.get(a.id),c=p.get(b);c?c.push(a):p.set(b,[a])}let q=[...p.keys()].sort((a,b)=>a-b),r=new Map,s=0;for(let a of q){let b=p.get(a),c=0,g=0;for(let a of b){let{width:b,height:e}=function(a){let b=a.measured;return{width:b?.width??a.width??240,height:b?.height??a.height??80}}(a);"TB"===d?(r.set(a.id,{x:c,y:s}),c+=b+f,g=Math.max(g,e)):(r.set(a.id,{x:s,y:c}),c+=e+f,g=Math.max(g,b))}s+=g+e}let t=(a,c,d)=>{let e=new Set(a.map(a=>a.id)),f=new Map;for(let a of b){let b,d;if(!c(a))continue;let g=e.has(a.source),h=e.has(a.target);g&&!h?(b=a.source,d=a.target):h&&!g&&(b=a.target,d=a.source),b&&d&&r.has(d)&&!f.has(b)&&f.set(b,d)}let g=new Map;for(let b of a){let a=f.get(b.id);if(!a)continue;let c=r.get(a),e=g.get(a)??0;g.set(a,e+1),r.set(b.id,{x:c.x+d,y:c.y+e*h})}};return t(i,U,g),t(j,V,-g),a.map(a=>{let b=r.get(a.id);return b?{...a,position:b}:a})})(a,D)),requestAnimationFrame(()=>ce?.fitView({padding:.2}))},[D,ce]),cz=(0,e.useCallback)((a,b)=>{dh.debug(`handleNodeUpdate: Updating node ${a} properties`),C(c=>{let d=c.map(c=>c.id===a?(dh.info(`handleNodeUpdate: Node ${a} properties updated`),{...c,data:b}):c);return function(a,b,c){let d=new Map(a.map(a=>[a.id,a])),e=new Map(b.map(a=>[a.id,a])),f=!1;for(let[a,b]of e){let c=d.get(a);if(c&&c.data.label!==b.data.label){f=!0;break}}return f?b.map(a=>{let b=a.data.properties?.promptTemplate;if("string"!=typeof b||!b)return a;let f=function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&(d.data.edgeType.includes("mcp")||"resource"===d.data.edgeType))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(a.id,c);if(0===f.length)return a;let g=[],h=[];for(let a of f){let b=e.get(a);if(!b)continue;let c=d.get(a)||b;g.push(Y(c)),h.push(Y(b))}if(0===h.length)return a;let i=(0,W.E9)(g),j=(0,W.E9)(h),k=new Map;for(let a of f){let b=i.get(a),c=j.get(a);b&&c&&b!==c&&k.set(b,c)}if(0===k.size)return a;let l=function(a,b){if(!a||0===b.size)return a;let c=(0,X.A$)(a);if(0===c.length)return a;let d="",e=0,f=!1;for(let g of c){d+=a.slice(e,g.index);let c="tool"===g.kind&&"handoff"===g.server?b.get(g.name):void 0;c?(d+=(0,X.X8)("tool","handoff",c),f=!0):d+=g.fullMatch,e=g.index+g.fullMatch.length}return d+=a.slice(e),f?d:a}(b,k);return l===b?a:{...a,data:{...a.data,properties:{...a.data.properties,promptTemplate:l}}}}):b}(c,d,D)})},[D]),cA=(0,e.useCallback)((a,b)=>{cz(a,b),aG(!1),a_("edit"),aI(!1),aK(!1),aM(!1),aO(!1),aQ(!1),aS(!1),aU(!1),aZ(null),dh.debug("handleNodeUpdate: Closed property modals")},[cz]),cB=(0,e.useCallback)(async(a,b)=>{let c=B.find(b=>b.id===a);if(!c)return void dh.warn(`handleConnectMcpServer: process node ${a} not found`);let d=[];try{let a=await P.S.listServerTools(b);!a.error&&Array.isArray(a.tools)&&(d=a.tools.map(a=>a.name))}catch(a){dh.warn(`handleConnectMcpServer: could not load tools for ${b}`,a)}let e=D.filter(b=>b.data?.edgeType==="mcp"&&(b.source===a||b.target===a)).length,f=O.g.createNode("mcp",{x:c.position.x+350,y:c.position.y+120*e});f.data.label=b,f.data.properties={...f.data.properties??{},boundServer:b,enabledTools:d};let g=(0,R.wn)({source:a,sourceHandle:"process-right-mcp",target:f.id,targetHandle:"mcp-left"},[...B,f]);C(a=>[...a,f]),L(a=>[...a,g]),dh.info(`Connected MCP server "${b}" to process node ${a}`)},[B,D]),cC=(0,e.useCallback)((a,b="edit")=>{dh.debug("Opening properties for node:",a),aZ(a),"process"===a.data.type&&a_(b),"mcp"===a.data.type?aI(!0):"start"===a.data.type?aK(!0):"finish"===a.data.type?aM(!0):"subflow"===a.data.type?aO(!0):"resource"===a.data.type?aQ(!0):"signal"===a.data.type?aS(!0):"trigger"===a.data.type?aU(!0):aG(!0)},[]),cD=(0,e.useCallback)(a=>{dh.debug("onDrop: Node dropped on canvas"),a.preventDefault();let b=a.dataTransfer.getData("application/reactflow");if(dh.debug(`onDrop: Node type from data transfer: ${b}`),!b||!ce)return void dh.debug(`onDrop: Missing required data - type: ${!!b}, reactFlowInstance: ${!!ce}`);let c=ce.screenToFlowPosition({x:a.clientX,y:a.clientY});dh.debug(`onDrop: Calculated position: (${c.x}, ${c.y})`);let d=ci(b,c);d&&(dh.info(`onDrop: Created new ${b} node with ID: ${d.id}`),dh.debug(`onDrop: Selected new node ${d.id} in the inspector`))},[ce,ci]),cE=(0,e.useCallback)(a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},[]),cF=(0,e.useCallback)(a=>{dh.debug("onInit: ReactFlow instance initialized"),cf(a)},[]);return(0,d.jsxs)(di,{children:["advanced"===ag&&(0,d.jsx)(ar,{authoringMode:ag,onAddNode:cj}),(0,d.jsx)(M.Ln,{children:(0,d.jsxs)(dk,{children:[(0,d.jsxs)(dj,{elevation:1,children:[(0,d.jsxs)(i.default,{sx:{minWidth:0,flex:"1 1 180px"},children:[(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:850,noWrap:!0,children:T}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:"guided"===ag?`${B.filter(a=>["process","subflow","signal"].includes(a.data.type)).length} agent step${1===B.filter(a=>["process","subflow","signal"].includes(a.data.type)).length?"":"s"}`:`${B.length} nodes \xb7 ${D.length} connections`})]}),(0,d.jsx)(E.A,{size:"small",variant:"outlined",color:"error"===bq?"error":"saved"===bq?"success":"default",icon:"saving"===bq?(0,d.jsx)(F.default,{size:14}):"error"===bq?(0,d.jsx)(dc,{}):"saved"===bq?(0,d.jsx)(db.A,{}):void 0,label:"saving"===bq?"Saving…":"error"===bq?"Save failed":"unsaved"===bq?x&&!bo?"Draft":"Unsaved":"Saved","aria-label":`Save status: ${"error"===bq?"failed":bo?"unsaved":bq}`}),(0,d.jsx)(G.A,{sx:{m:0,whiteSpace:"nowrap"},control:(0,d.jsx)(H.A,{size:"small",checked:"advanced"===ag,onChange:a=>ai(a.target.checked?"advanced":"guided"),inputProps:{"aria-label":"Expert view"}}),label:"advanced"===ag?"Expert":"Easy"}),"advanced"===ag&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"outlined",size:"small",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>cj("process"),"aria-label":"Add node",title:"Append a Process node after the selected node",children:"Add node"}),(0,d.jsx)(aY,{nodes:B,edges:D}),(0,d.jsx)(n.A,{title:"Auto-align nodes",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":"Auto-Align",onClick:cy,disabled:B.length<=1,color:"primary",size:"small",children:(0,d.jsx)(da,{})})})}),(0,d.jsx)(I.A,{orientation:"vertical",flexItem:!0}),(0,d.jsx)(n.A,{title:"Undo \xb7 Ctrl/⌘ Z",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":"Undo",onClick:b3,disabled:!b1,color:"primary",size:"small",children:(0,d.jsx)(c$,{})})})}),(0,d.jsx)(n.A,{title:"Redo \xb7 Ctrl/⌘ Shift Z",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":"Redo",onClick:b4,disabled:!b2,color:"primary",size:"small",children:(0,d.jsx)(c_,{})})})})]}),(0,d.jsx)(k.A,{variant:"guided"===ag?"outlined":"contained",color:"primary",onClick:()=>void bR(),startIcon:"saving"===bq?(0,d.jsx)(F.default,{size:16,color:"inherit"}):(0,d.jsx)(cZ,{}),disabled:!!_||"saving"===bq,"aria-label":"Save Flow",children:"Save"}),"guided"===ag&&z&&(0,d.jsx)(k.A,{variant:"contained",color:"primary",onClick:()=>void bS(),startIcon:(0,d.jsx)(bd,{}),disabled:!cs,children:"Try it"}),("advanced"===ag||a&&!x)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.A,{title:"More commands",children:(0,d.jsx)(m.A,{id:"more-actions-button","data-tour":"improve-flow","aria-label":"More actions","aria-controls":a9?"more-actions-menu":void 0,"aria-haspopup":"menu","aria-expanded":a9?"true":void 0,onClick:a=>ba(a.currentTarget),color:"primary",size:"small",children:(0,d.jsx)(c0,{})})}),(0,d.jsxs)(J.A,{id:"more-actions-menu",anchorEl:a9,open:!!a9,onClose:()=>ba(null),MenuListProps:{"aria-labelledby":"more-actions-button"},children:["advanced"===ag&&(0,d.jsx)(K.A,{disabled:B.length<=1,onClick:()=>{ba(null),cy()},children:"Auto-Align"}),"advanced"===ag&&(0,d.jsx)(K.A,{disabled:0===B.length,onClick:bW,children:"Repair automatically (no model)"}),"advanced"===ag&&(0,d.jsx)(K.A,{disabled:0===B.length,onClick:bX,children:"Repair with AI…"}),a&&!x&&(0,d.jsx)(I.A,{}),a&&!x&&"advanced"===ag&&(0,d.jsx)(K.A,{onClick:()=>{ba(null),bc(""),a6(!0)},children:"AI-Improve"}),a&&!x&&(0,d.jsx)(K.A,{onClick:()=>{ba(null),bf(!0)},children:"guided"===ag?"Previous versions":"History"}),a&&!x&&(0,d.jsx)(K.A,{onClick:()=>{ba(null),aA("duplicate"),aC(`${a.name} copy`),ay(!0)},children:"guided"===ag?"Duplicate agent":"Duplicate Flow"}),a&&!x&&(0,d.jsx)(K.A,{sx:{color:"error.main"},onClick:()=>{ba(null),bT()},children:"guided"===ag?"Delete agent":"Delete Flow"})]})]})]}),(0,d.jsx)(o.A,{in:!!aV,unmountOnExit:!0,children:aV&&(0,d.jsx)(p.A,{severity:"warning",onClose:()=>aW(null),sx:{mb:1},children:aV})}),(0,d.jsx)(o.A,{in:!!a7,unmountOnExit:!0,children:a7&&(0,d.jsx)(p.A,{severity:a7.severity,onClose:()=>a8(null),sx:{mb:1},children:a7.message})}),"guided"===ag?(0,d.jsx)(bh,{nodes:B,orderedStepIds:av.orderedNodeIds,selectedNodeId:cm?.id,flowName:T,flowNameError:_,onFlowNameChange:a=>{$(a),aa(bL(a)),bM()},onSelectNode:ct,onAddTask:cl,onTry:z?()=>{bS()}:void 0,isSaving:"saving"===bq,hasAdvancedFeatures:aw,readyToTry:cs,needsAIConnection:!co,onSwitchAdvanced:()=>ai("advanced"),models:bs,aiAssistance:bw,selectedModelId:bu,onChooseAssistance:a=>{bx(a),"manual"===a&&bv(null)},onModelChange:bv,onCheckPlausibility:()=>{bB(null),bz(!0)}}):(0,d.jsx)(i.default,{sx:{flex:1,width:"100%",minWidth:0,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:(0,d.jsx)(Z.Ay,{ref:ca,nodes:B,edges:D,onNodesChange:b6,onEdgesChange:b9,onDrop:cD,onDragOver:cE,onInit:cF,reactFlowWrapper:ca,onEditNode:cC,onCreateNode:ci,onConvertProcessToSubflow:a?a=>a3(a.id):void 0,onEditEdge:a=>a1(a)})})]})}),("advanced"===ag||cm)&&(0,d.jsx)(a5,{selectedNode:cm,onClearSelection:cx,onCommitNode:cz,onOpenAdvanced:cC,flowName:T,flowNameError:_,onFlowNameChange:a=>{$(a),aa(bL(a)),bM()},flowDescription:ab,onFlowDescriptionChange:a=>{ac(a),bM()},authoringMode:ag,beginnerMode:"guided"===ag,onAuthoringModeChange:ai,permissionRuleCount:al.length,onOpenPermissionRules:()=>aq(!0),onSuggestTools:a=>{bB(a.id),bz(!0)},onCheckPlausibility:()=>{bB(null),bz(!0)}}),(0,d.jsx)(b7,{open:aF,node:aX,onClose:()=>{aG(!1),a_("edit")},onSave:cA,mode:a$,flowEdges:D,flowNodes:B,flowId:a?.id,onConnectMcpServer:a=>{aX&&cB(aX.id,a)},authoringMode:ag}),(0,d.jsx)(bl,{open:by,flow:cu,relatedFlows:l,nodeId:bA,modelId:cv,models:bs,onApply:cw,onApplyRelatedFlows:w,onClose:()=>bz(!1)}),(0,d.jsx)(cb,{open:aH,node:aX,onClose:()=>aI(!1),onSave:cA,authoringMode:ag}),(0,d.jsx)(cc,{open:aJ,node:aX,onClose:()=>aK(!1),onSave:cA}),(0,d.jsx)(cd,{open:aL,node:aX,onClose:()=>aM(!1),onSave:cA}),(0,d.jsx)(ck,{open:aN,node:aX,onClose:()=>aO(!1),onSave:cA,flowId:a?.id,authoringMode:ag}),(0,d.jsx)(cq,{open:aP,node:aX,onClose:()=>aQ(!1),onSave:cA,flowNodes:B}),(0,d.jsx)(cr,{open:aR,node:aX,onClose:()=>aS(!1),onSave:cA}),(0,d.jsx)(cM,{open:aT,node:aX,flowId:a?.id||"",onClose:()=>{aU(!1),aZ(null)},onSave:cA}),(0,d.jsx)(cg,{open:!!a0,edge:a0,onClose:()=>a1(null),onSave:b8}),(0,d.jsx)(cY,{open:!!a2,processNodeId:a2,parentFlow:{id:a?.id||"",name:T,description:ab,folder:a?.folder,favorite:a?.favorite,permissionRules:bP(),createdAt:a?.createdAt,updatedAt:a?.updatedAt,nodes:B,edges:D},existingFlowNames:h.map(a=>a.name),onClose:()=>a3(null),onAccept:b5}),(0,d.jsx)(cS,{open:be,flowId:a?.id,onClose:()=>bf(!1),onRestore:bV}),(0,d.jsx)(c6,{open:a4,onClose:()=>a6(!1),currentFlow:{id:a?.id||"",name:T,description:ab,permissionRules:bP(),nodes:B,edges:D},onImproved:bU,initialDescription:bb}),(0,d.jsxs)(q.A,{open:ap,onClose:()=>aq(!1),fullWidth:!0,maxWidth:"md","aria-labelledby":"permission-rules-dialog-title",children:[(0,d.jsx)(r.A,{id:"permission-rules-dialog-title",children:"Flow permission rules"}),(0,d.jsxs)(s.A,{children:[(0,d.jsx)(t.A,{sx:{mb:2},children:"Rules are evaluated in order; the last matching rule wins. Use * to match any action or resource."}),as&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:as}),0===al.length?(0,d.jsx)(j.A,{color:"text.secondary",sx:{mb:2},children:"No flow-level rules. Add one to allow, deny, or ask for matching tool calls."}):al.map((a,b)=>(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsxs)(j.A,{"aria-label":`Rule ${b+1}`,sx:{minWidth:24},children:[b+1,"."]}),(0,d.jsx)(u.A,{label:"Action",size:"small",value:a.action,onChange:b=>bN(a.id,{action:b.target.value}),inputProps:{"aria-label":`Rule ${b+1} action`},sx:{flex:1}}),(0,d.jsx)(u.A,{label:"Resource",size:"small",value:a.resource,onChange:b=>bN(a.id,{resource:b.target.value}),inputProps:{"aria-label":`Rule ${b+1} resource`},sx:{flex:1}}),(0,d.jsxs)(u.A,{select:!0,label:"Effect",size:"small",value:a.effect,onChange:b=>bN(a.id,{effect:b.target.value}),inputProps:{"aria-label":`Rule ${b+1} effect`},sx:{minWidth:100},children:[(0,d.jsx)(K.A,{value:"allow",children:"Allow"}),(0,d.jsx)(K.A,{value:"deny",children:"Deny"}),(0,d.jsx)(K.A,{value:"ask",children:"Ask"})]}),(0,d.jsx)(n.A,{title:"Move rule up",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":`Move rule ${b+1} up`,onClick:()=>bO(b,-1),disabled:0===b,children:(0,d.jsx)(c2.A,{})})})}),(0,d.jsx)(n.A,{title:"Move rule down",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":`Move rule ${b+1} down`,onClick:()=>bO(b,1),disabled:b===al.length-1,children:(0,d.jsx)(c3,{})})})}),(0,d.jsx)(n.A,{title:"Delete rule",children:(0,d.jsx)(m.A,{"aria-label":`Delete rule ${b+1}`,onClick:()=>{var b;return b=a.id,void(am(a=>a.filter(a=>a.id!==b)),ao(!0),at(null),bM())},children:(0,d.jsx)(c1.A,{})})})]},a.id)),(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(y.A,{}),onClick:()=>{am(a=>[...a,ak({action:"",resource:"",effect:"ask"})]),ao(!0),at(null),bM()},children:"Add rule"})]}),(0,d.jsx)(v.A,{children:(0,d.jsx)(k.A,{onClick:()=>aq(!1),children:"Done"})})]}),(0,d.jsxs)(q.A,{open:ax,onClose:b$,children:[(0,d.jsx)(r.A,{children:"duplicate"===az?"guided"===ag?"Copy agent":"Copy Flow":"rename"===az?"guided"===ag?"Rename agent":"Rename Flow":"Unsaved changes"}),(0,d.jsx)(s.A,{children:"unsaved"===az?(0,d.jsx)(t.A,{children:"You have unsaved changes in this agent. What would you like to do?"}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{children:"duplicate"===az?"Give the copy a name:":"You are changing this agent’s name. Would you like to rename it or create a copy?"}),(0,d.jsx)(u.A,{autoFocus:!0,margin:"dense",label:"guided"===ag?"Agent name":"Flow Name",type:"text",fullWidth:!0,value:aB,onChange:a=>{let b=a.target.value;aC(b),aE(bL(b))},error:!!aD,helperText:aD,sx:{mt:2}})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:b$,children:"Cancel"}),"unsaved"===az&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{bp(!1),bZ(),b$()},color:"error",children:"Discard Changes"}),(0,d.jsx)(k.A,{onClick:b0,variant:"contained",color:"primary",children:"Save Changes"})]}),"rename"===az&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{let b=bL(aB);if(b)return void aE(b);a&&bY(a,aB),b$()},children:"Copy"}),(0,d.jsx)(k.A,{onClick:b_,variant:"contained",color:"primary",disabled:!!aD,children:"Rename"})]}),"duplicate"===az&&(0,d.jsx)(k.A,{onClick:b_,variant:"contained",color:"primary",disabled:!!aD,children:"Copy"})]})]})]})});dn.displayName="FlowBuilder";var dp=c(61220),dq=c(62815),dr=c(38259),ds=c(49938);let dt=(0,L.h)("frontend/components/Flow/FlowManager/GenerateFlowDialog");function du(a,b){return{id:(0,N.A)(),role:a,content:b,timestamp:Date.now()}}function dv(a){if("string"!=typeof a)return a;try{return JSON.parse(a)}catch{return a}}function dw(a,b){let c=Math.max(0,a.flows.length-1),d=c?` It includes ${c} helper agent${1===c?"":"s"}.`:"",e=a.errorCount+a.warningCount,f=e?` I found ${e} thing${1===e?"":"s"} worth reviewing before you try it.`:" It is ready for you to review and try.";return`${b?"I updated your agent":"Your agent is ready"}: ${a.flow.name}.${d}${f}`}let dx=({open:a,onClose:b,onGenerated:c})=>{let{settings:f,settingsHydrated:g}=(0,ds.rX)(),h=g&&f?.experimental?.enabled===!0&&!0===f.experimental.flowBasedGenerator,[l,o]=(0,e.useState)([]),[t,u]=(0,e.useState)(""),[w,x]=(0,e.useState)(null),[y,A]=(0,e.useState)([]),[B,C]=(0,e.useState)(null),[D,F]=(0,e.useState)(!1),[H,I]=(0,e.useState)(!1),[J,L]=(0,e.useState)(!1),[M,P]=(0,e.useState)(null);(0,e.useEffect)(()=>{if(!a)return;let b=!1;return Q.N.loadModels().then(a=>{b||(o(a),u(b=>a.some(a=>a.id===b)?b:a[0]?.id??""))}).catch(a=>{dt.warn("Failed to load generator models",a),b||P("Could not load your models. Configure a model first.")}),()=>{b=!0}},[a]),(0,e.useEffect)(()=>{a&&(x(null),A([]),C(null),F(!1),P(null))},[h,a]);let R=(0,e.useMemo)(()=>y.filter(a=>("user"===a.role||"assistant"===a.role)&&"string"==typeof a.content&&a.content.trim()).map((a,b)=>({id:"string"==typeof a.id?a.id:`flow-generator-${b}`,role:a.role,content:a.content,timestamp:"number"==typeof a.timestamp?a.timestamp:Date.now()+b,processNodeId:a.processNodeId})),[y]),S=(0,e.useCallback)(async()=>{if(w)return w;let a=(0,N.A)(),{flow:b}=await dr.O.synthesizeFlowGenerator({conversationId:a,modelId:t,allowInstall:D}),c=Date.now();return await dr.O.createConversation({id:a,title:"Experimental Flow generation",flowId:b.id,flowSnapshot:b,createdAt:c,updatedAt:c}),x(a),a},[D,w,t]),T=(0,e.useCallback)(async a=>{let b=a.trim();if(!b||H||!t)return;let c=[...y,du("user",b)];A(c),P(null),I(!0);try{if(h){let a=await S(),b=await dr.O.completeFlowGeneratorTurn({conversationId:a,messages:c}),d=Array.isArray(b?.messages)?b.messages:c;A(d);let e=function(a){let b=(a,c=0)=>{if(c>6)return null;let d=dv(a);if(!d||"object"!=typeof d)return null;if(d.flow&&Array.isArray(d.flows)&&"string"==typeof d.rootFlowId)return d;if(Array.isArray(d.content))for(let a=d.content.length-1;a>=0;a--){let e=b(d.content[a],c+1);if(e)return e}for(let a of["text","data","result"])if(a in d){let e=b(d[a],c+1);if(e)return e}return null};for(let c=a.length-1;c>=0;c--){let d=b(a[c]?.content);if(d)return d}return null}(d);if(!e)return void P("The experimental Generation Flow finished without calling draft_generated_flow. You can revise the editable “Experimental Flow Generator” system Flow or try another model.");let f={flow:e.flow,flows:e.flows,rootFlowId:e.rootFlowId,errorCount:e.validation?.errorCount??0,warningCount:e.validation?.warningCount??0,attempts:d.filter(a=>"user"===a.role).length,installedServers:function(a){let b=new Map,c=(a,d=0)=>{if(d>6)return;let e=dv(a);if(e&&"object"==typeof e)for(let a of(!0===e.installed&&"string"==typeof e.serverName&&Array.isArray(e.tools)&&b.set(e.serverName,{name:e.serverName,tools:e.tools.map(a=>"string"==typeof a?a:a&&"object"==typeof a?String(a.name??""):"").filter(Boolean),alreadyExisted:!0===e.alreadyExisted,..."string"==typeof e.plan?.command?{command:e.plan.command}:{},...Array.isArray(e.plan?.args)?{args:e.plan.args.map(String)}:{},..."string"==typeof e.plan?.verificationStatus?{verificationStatus:e.plan.verificationStatus}:{}}),Object.values(e)))c(a,d+1)};for(let b of a)c(b.content);return[...b.values()]}(d)};C(f),dt.info("Experimental Generation Flow returned a draft",{flowId:f.rootFlowId,flowCount:f.flows.length,errors:f.errorCount,warnings:f.warningCount});return}if(!B){let a=await O.g.generateFlow(b,t,{allowInstall:D,allowSubflows:!0,maxDepth:2});if(!a.success)return void P(a.error);let d={flow:a.flow,flows:a.flows.map(a=>a.flow),rootFlowId:a.rootFlowId,errorCount:a.validation.errorCount,warningCount:a.validation.warningCount,attempts:a.attempts,installedServers:a.installedServers};dt.info("Draft flow generated",{flowId:d.rootFlowId,flowCount:d.flows.length,attempts:d.attempts,errors:d.errorCount,warnings:d.warningCount,installedServers:d.installedServers.length}),C(d),A([...c,du("assistant",dw(d,!1))]);return}let a=B.flows.filter(a=>a.id!==B.rootFlowId),d=await O.g.improveFlow(B.flow,b,t,{allowInstall:D,relatedFlows:a});if(!d.success)return void P(d.error);let e={flow:d.flow,flows:d.flows.map(a=>a.flow),rootFlowId:d.rootFlowId,errorCount:d.validation.errorCount,warningCount:d.validation.warningCount,attempts:B.attempts+d.attempts,installedServers:[...B.installedServers,...d.installedServers]};dt.info("Draft flow improved",{flowId:e.rootFlowId,flowCount:e.flows.length,attempts:e.attempts,errors:e.errorCount,warnings:e.warningCount,installedServers:e.installedServers.length}),C(e),A([...c,du("assistant",dw(e,!0))])}catch(a){P(a instanceof Error?a.message:String(a))}finally{I(!1)}},[D,B,h,H,t,S,y]),U=(0,e.useCallback)(()=>{B&&c(B)},[B,c]),V=(0,e.useCallback)(async()=>{if(!H&&!J){L(!0),P(null);try{await dr.O.restoreFlowGenerator(),x(null),A([]),C(null)}catch(a){P(a instanceof Error?a.message:String(a))}finally{L(!1)}}},[J,H]),W=(0,e.useCallback)(()=>{H||J||(x(null),A([]),C(null),F(!1),P(null),b())},[J,H,b]);return(0,d.jsxs)(q.A,{open:a,onClose:W,maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(r.A,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(z,{color:"primary"}),(0,d.jsxs)(i.default,{sx:{flex:1},children:["Create an agent",h&&(0,d.jsx)(E.A,{label:"Experimental \xb7 Flow-based",size:"small",color:"warning",variant:"outlined",sx:{ml:1}}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:h?"The editable multi-stage Generation Flow handles drafting and revisions.":"Describe what you need in your own words. You can refine it together before saving."})]}),h&&(0,d.jsx)(n.A,{title:"Restore the bundled experimental Generation Flow",children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":"Restore experimental Generation Flow",onClick:()=>{V()},disabled:H||J,children:(0,d.jsx)(bF.A,{})})})})]}),(0,d.jsxs)(s.A,{dividers:!0,sx:{p:0},children:[(0,d.jsxs)(i.default,{sx:{p:2,borderBottom:1,borderColor:"divider"},children:[M&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:1.5},onClose:()=>P(null),children:M}),h&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:1.5},children:"Experimental mode runs entirely through the editable System Flow. It does not fall back to the production generator if that Flow fails to submit a draft."}),(0,d.jsxs)(i.default,{component:"details",sx:{mt:M||h?1.5:0,border:1,borderColor:"divider",borderRadius:2.5,"&[open]":{p:1.5},"&[open] > summary":{mb:1.5}},children:[(0,d.jsx)(i.default,{component:"summary",sx:{px:1.5,py:1.1,cursor:"pointer",color:"text.secondary",fontSize:"0.86rem",fontWeight:700},children:"Advanced options"}),(0,d.jsxs)(a6.A,{size:"small",fullWidth:!0,disabled:H||h&&!!w,children:[(0,d.jsx)(a7.A,{id:"flow-generator-model-label",children:"AI used to build it"}),(0,d.jsx)(a8.A,{labelId:"flow-generator-model-label",label:"AI used to build it",value:t,onChange:a=>u(a.target.value),children:l.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName?.trim()||a.name},a.id))})]}),(0,d.jsx)(G.A,{sx:{mt:1},control:(0,d.jsx)(bi.A,{checked:D,onChange:a=>F(a.target.checked),disabled:H||h&&!!w}),label:"Allow adding new connected tools"}),(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",display:"block",children:["Leave this off unless the agent truly needs an app or service that is not connected yet.",h&&" Expert generation may also create helper flows up to 2 levels deep."]}),D&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:"FLUJO may download and run third-party connectors on this device. They remain installed after the agent is created."})]})]}),(0,d.jsx)(i.default,{sx:{minHeight:360,maxHeight:"55vh",overflowY:"auto",p:2},children:0===R.length?(0,d.jsxs)(i.default,{sx:{py:8,textAlign:"center",color:"text.secondary"},children:[(0,d.jsx)(j.A,{variant:"h6",children:"What should your agent help with?"}),(0,d.jsx)(j.A,{variant:"body2",children:"Try: “Turn my rough notes into a warm, clear email” or “Research a topic and give me the important points.”"})]}):(0,d.jsx)(dq.A,{messages:R,conversationId:"new-flow-generator",onToggleDisabled:()=>void 0,onSplitConversation:()=>void 0})}),B&&(0,d.jsx)(p.A,{severity:B.errorCount?"warning":"success",sx:{mx:2,mb:1},children:B.errorCount?`The draft is ready, but ${B.errorCount} thing${1===B.errorCount?"":"s"} still need attention.`:"Your draft is ready. You can ask for changes or continue to the simple builder."}),(0,d.jsxs)(i.default,{sx:{p:1.5,borderTop:1,borderColor:"divider"},children:[(0,d.jsx)(dp.A,{onSendMessage:a=>{T(a)},disabled:H||!t,placeholder:"Describe the helper you want…"}),H&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:B?"Applying your changes and checking the agent…":h?"Running the Flow Architect and Generation Compiler…":"Building your agent and checking that it is ready…"})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:W,disabled:H||J,children:"Close"}),(0,d.jsx)(k.A,{variant:"contained",onClick:U,disabled:!B||H,startIcon:(0,d.jsx)(z,{}),children:"Continue to simple builder"})]})]})};var dy=c(58156);let dz=null;var dA=c(24077),dB=c(82666),dC=c(63757);let dD=(0,w.A)((0,d.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList"),dE=(0,w.A)((0,d.jsx)("path",{d:"M3 14h4v-4H3zm0 5h4v-4H3zM3 9h4V5H3zm5 5h13v-4H8zm0 5h13v-4H8zM8 5v4h13V5z"}),"ViewList"),dF=(0,w.A)((0,d.jsx)("path",{d:"M14.67 5v6.5H9.33V5zm1 6.5H21V5h-5.33zm-1 7.5v-6.5H9.33V19zm1-6.5V19H21v-6.5zm-7.34 0H3V19h5.33zm0-1V5H3v6.5z"}),"ViewModule");var dG=c(11402),dH=c(17128),dI=c(9863),dJ=c(81310),dK=c(18467),dL=c(59737),dM=c(7329),dN=c(66675),dO=c(61560),dP=c(49351);let dQ=(0,L.h)("components/Flow/FlowDashboard/FlowDashboard");function dR(a,b){return a+Math.round(255*b).toString(16).padStart(2,"0")}let dS=({flows:a,selectedFlow:b,onSelectFlow:c,onDeleteFlow:f,onCopyFlow:g,onEditFlow:l,onOpenInChat:n,onCreateFlow:o,onSetFolder:p,onToggleFavorite:q,isLoading:r=!1})=>{let[s,t]=(0,e.useState)(""),[v,w]=(0,dd.Xk)("flujo-ui:flows:sort","name-asc"),[x,z]=(0,dd.Xk)("flujo-ui:flows:view","grid"),[A,B]=(0,e.useState)(null),[C,E]=(0,dd.Xk)("flujo-ui:flows:group",dM.FM),[F,G]=(0,e.useState)(null),[H,L]=(0,dd.Xk)("flujo-ui:flows:collapsed",[]),M=(0,e.useMemo)(()=>new Set(H),[H]),[N,O]=(0,e.useState)({});(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b={};try{let a=await fetch("/api/model");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.models=c)}}catch(a){dQ.warn("Could not load models for flow badges",a)}try{let a=await fetch("/api/mcp/servers");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.servers=c.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}}catch(a){dQ.warn("Could not load servers for flow badges",a)}a||O(b)})(),()=>{a=!0}},[]);let P=(0,e.useMemo)(()=>{let b={};for(let c of a)try{b[c.id]=aW(c,N)}catch(a){dQ.warn("Failed to validate flow for badge",{flowId:c.id,error:a})}return b},[a,N]),Q=(0,h.A)(),R=(0,dA.A)(Q.breakpoints.down("sm")),S=(0,dA.A)(Q.breakpoints.down("md")),T=()=>{B(null)},U=a=>{w(a),T()},V=a=>{E(a),G(null)},W=(0,e.useMemo)(()=>{dQ.debug("Filtering and sorting flows",{searchTerm:s,sortOption:v});let b=a;if(""!==s.trim()){let c=s.toLowerCase();b=a.filter(a=>a.name.toLowerCase().includes(c))}return(0,dN.NP)(b,v)},[a,s,v]),{ref:X,showBackToTop:Y,scrollToTop:Z}=(0,dO.R)("flujo-ui:scroll:flows",{deps:[r,W.length]}),$=(0,e.useMemo)(()=>(0,dM.yF)(a,a=>a.folder),[a]),aa=(0,e.useMemo)(()=>"folder"===C?(0,dM.Je)(W,a=>a.folder):"sort"===C?(0,dM.Az)(W,a=>(0,dN.ts)(a,v)):[],[C,W,v]),ab=a=>(0,d.jsx)(dB.Ay,{container:!0,spacing:2.5,children:a.map(a=>(0,d.jsx)(dB.Ay,{item:!0,xs:12,sm:"compact"===x?12:6,md:"compact"===x?12:3==("compact"===x||R?1:S?2:3)?4:6,children:(0,d.jsx)(ci.A,{flow:a,selected:b===a.id,onSelect:c,onDelete:f,onCopy:g,onEdit:l,onOpenInChat:n,onSetFolder:p,onToggleFavorite:q,folders:$,validation:P[a.id]})},a.id))});return(0,d.jsxs)(i.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,d.jsx)(D.A,{elevation:1,sx:{mb:2,p:1},children:(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(u.A,{placeholder:"Search agents...",variant:"outlined",size:"small",fullWidth:!0,value:s,onChange:a=>{t(a.target.value)},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bG.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(i.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",backgroundColor:Q.palette.background.default,borderRadius:1,border:`1px solid ${Q.palette.divider}`,overflow:"hidden"},children:[(0,d.jsx)(m.A,{"aria-label":"Show agent cards",size:"small",onClick:()=>z("grid"),color:"grid"===x?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===x?dR(Q.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(dF,{fontSize:"small"})}),(0,d.jsx)(m.A,{"aria-label":"Show compact agent list",size:"small",onClick:()=>z("compact"),color:"compact"===x?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===x?dR(Q.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(dE,{fontSize:"small"})})]}),(0,d.jsx)(m.A,{size:"small",onClick:a=>G(a.currentTarget),color:"none"!==C?"primary":"default",sx:{border:`1px solid ${Q.palette.divider}`,backgroundColor:Q.palette.background.default},title:"Group cards","aria-label":"Group agents",children:(0,d.jsx)(dI.A,{fontSize:"small"})}),(0,d.jsx)(m.A,{"aria-label":"Sort agents",size:"small",onClick:a=>{B(a.currentTarget)},sx:{border:`1px solid ${Q.palette.divider}`,backgroundColor:Q.palette.background.default},children:(0,d.jsx)(dC.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",children:[W.length," of ",a.length," agents",s&&` matching "${s}"`]}),(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",children:["Showing: ","name-asc"===v?"Name (A-Z)":"name-desc"===v?"Name (Z-A)":"newest"===v?"Newest first":"oldest"===v?"Oldest first":"most-nodes"===v?"Most steps":"Fewest steps"]})]}),(0,d.jsx)(i.default,{ref:X,sx:{flex:1,overflow:"auto",px:1,pb:2},children:r?(0,d.jsx)(dB.Ay,{container:!0,spacing:2.5,children:Array(6).fill(0).map((a,b)=>(0,d.jsx)(dB.Ay,{item:!0,xs:12,sm:"compact"===x?12:6,md:"compact"===x?12:4,children:(0,d.jsx)(ci.o,{})},`skeleton-${b}`))}):W.length>0?"none"===C?ab(W):aa.map(a=>(0,d.jsx)(dL.A,{label:a.label,count:a.items.length,expanded:!M.has(a.key),onToggle:()=>(a=>{L(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])})(a.key),showFolderIcon:"folder"===C,children:ab(a.items)},a.key)):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:Q.palette.background.paper,borderRadius:1,border:`1px dashed ${Q.palette.divider}`,height:"100%",minHeight:200},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:s?"No matching agents":"No agents yet"}),s?(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",align:"center",children:["No agents match that search.",(0,d.jsxs)(i.default,{component:"span",display:"block",mt:1,children:["Try a different search term or ",(0,d.jsx)(k.A,{size:"small",onClick:()=>t(""),children:"clear the search"})]})]}):(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",align:"center",children:["Create a helper for something you do often. You can explain the job in everyday language.",o&&(0,d.jsx)(i.default,{component:"span",display:"block",mt:2,children:(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(y.A,{}),onClick:o,children:"Create My First Agent"})})]})]})}),(0,d.jsxs)(J.A,{anchorEl:F,open:!!F,onClose:()=>G(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(K.A,{selected:"none"===C,onClick:()=>V("none"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dJ.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"No grouping"})]}),(0,d.jsxs)(K.A,{selected:"folder"===C,onClick:()=>V("folder"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dK.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"By folder"})]}),(0,d.jsxs)(K.A,{selected:"sort"===C,onClick:()=>V("sort"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dI.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"By sort setting"})]})]}),(0,d.jsxs)(J.A,{anchorEl:A,open:!!A,onClose:T,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(K.A,{onClick:()=>U("name-asc"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dG.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"Name (A-Z)"})]}),(0,d.jsxs)(K.A,{onClick:()=>U("name-desc"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dG.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(aw.A,{primary:"Name (Z-A)"})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(K.A,{onClick:()=>U("newest"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dH.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"Newest first"})]}),(0,d.jsxs)(K.A,{onClick:()=>U("oldest"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dH.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(aw.A,{primary:"Oldest first"})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(K.A,{onClick:()=>U("most-nodes"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dD,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:"Most nodes"})]}),(0,d.jsxs)(K.A,{onClick:()=>U("least-nodes"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dD,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,d.jsx)(aw.A,{primary:"Least nodes"})]})]}),(0,d.jsx)(dP.A,{show:Y,onClick:Z})]})},dT=(0,L.h)("app/flows/page"),dU=()=>{dT.debug("Rendering FlowsPage"),(0,h.A)();let a=(0,g.useRouter)(),[b,c]=(0,e.useState)([]),[f,w]=(0,e.useState)(null),[C,D]=(0,e.useState)(!0),[E,F]=(0,e.useState)(!1),G=(0,e.useRef)(null),[H,I]=(0,e.useState)(null),[J,K]=(0,e.useState)([]),[L,M]=(0,e.useState)(!1),P=(0,e.useRef)(!1),[Q,R]=(0,e.useState)(!1),[S,T]=(0,e.useState)(null),[U,V]=(0,e.useState)(""),[W,X]=(0,e.useState)(null),[Y,Z]=(0,e.useState)({open:!1,message:"",severity:"info"});(0,e.useEffect)(()=>{dT.info("Loading flows"),(async()=>{D(!0);try{let a=await O.g.loadFlows();dT.debug("Flows loaded successfully",{count:a.length}),c(a),f&&(a.some(a=>a.id===f)||H?.id===f||(dT.warn("Previously selected flow no longer exists",{flowId:f}),w(null),F(!1),ac("The previously selected flow is no longer available","warning")))}catch(a){dT.error("Error loading flows",a),ac("Failed to load agents","error")}finally{D(!1)}})()},[f,H]);let $=(0,e.useCallback)(a=>{dT.debug("Flow selected",{flowId:a}),w(a),F(!0)},[]),_=(0,e.useCallback)(b=>{dT.debug("Opening flow in chat",{flowId:b}),a.push(`/chat?flow=${encodeURIComponent(b)}`)},[a]),aa=(0,e.useCallback)(()=>{f&&a.push(`/chat?flow=${encodeURIComponent(f)}`)},[f,a]),ab=(0,e.useRef)(!1);(0,e.useEffect)(()=>{if(ab.current||C)return;let a=new URLSearchParams(window.location.search).get("flow");if(!a){ab.current=!0;return}b.some(b=>b.id===a)&&(ab.current=!0,$(a))},[C,b,$]),(0,e.useEffect)(()=>{if(!(E&&f))return;let a=a=>{G.current?G.current.requestNavigation(a):a()};return dz=a,()=>{dz===a&&(dz=null)}},[E,f]);let ac=(0,e.useCallback)((a,b="info")=>{dT.debug("Showing snackbar",{message:a,severity:b}),Z({open:!0,message:a,severity:b})},[]),ad=(0,e.useCallback)(()=>{dT.debug("Returning to dashboard");let a=()=>{if(F(!1),H&&H.id===f){let a=J.length>0;I(null),K([]),w(null),ac(a?"Generated draft (and its subflows) discarded":"Generated draft discarded","info")}};G.current?G.current.requestNavigation(a):a()},[H,J,f,ac]),ae=(0,e.useCallback)(()=>{Z(a=>({...a,open:!1}))},[]);(0,e.useEffect)(()=>{if(!Y.open||"error"===Y.severity)return;let a=setTimeout(()=>{Z(a=>({...a,open:!1}))},6e3);return()=>clearTimeout(a)},[Y.open,Y.message,Y.severity]);let af=(0,e.useCallback)(a=>(dT.debug("Validating flow name",{name:a}),a.trim())?/^[\p{L}\p{N}_ -]+$/u.test(a.trim())?b.some(b=>b.name.trim().toLowerCase()===a.trim().toLowerCase())?(dT.debug("Flow name validation failed: duplicate name"),"An agent with this name already exists"):(dT.debug("Flow name validation passed"),null):(dT.debug("Flow name validation failed: invalid characters"),"Use letters, numbers, spaces, underscores, or dashes"):(dT.debug("Flow name validation failed: empty name"),"Agent name cannot be empty"),[b]),ag=async a=>{dT.info("Saving flow",{flowId:a.id,flowName:a.name});try{if(H?.id===a.id&&J.length>0){for(let a of(dT.info("Persisting generated subflow descendants before the root",{count:J.length}),J)){let c=b.some(b=>b.id===a.id)?await O.g.updateFlow(a):await O.g.addFlow(a);if(!c.success)return dT.error("Failed to save a generated subflow",{error:c.error,childId:a.id}),ac(c.error||"Failed to save a generated subflow","error"),!1}c(a=>{let b=new Set(a.map(a=>a.id)),c=J.filter(a=>!b.has(a.id));return c.length?[...a,...c]:a}),K([])}let d=b.some(b=>b.id===a.id)?await O.g.updateFlow(a):await O.g.addFlow(a);if(!d.success)return dT.error("Failed to save flow",{error:d.error}),ac(d.error||"Failed to save flow","error"),!1;return dT.debug("Flow saved successfully"),c(b=>{let c=b.findIndex(b=>b.id===a.id);if(!(c>=0))return dT.debug("Adding new flow to state"),[...b,a];{dT.debug("Updating existing flow in state");let d=[...b];return d[c]=a,d}}),H?.id===a.id&&I(null),w(a.id),ac("Agent saved","success"),!0}catch(a){return dT.error("Error saving flow",a),ac("Failed to save flow","error"),!1}},ah=(0,e.useCallback)((a,b)=>{c(c=>[...c.filter(c=>c.id!==a.id&&c.id!==b.id),a,b]),w(a.id),ac(`Created subflow "${b.name}"`,"success")},[ac]),ai=async a=>{dT.info("Deleting flow",{flowId:a});try{await O.g.deleteFlow(a),dT.debug("Flow deleted successfully"),c(b=>b.filter(b=>b.id!==a)),f===a&&(dT.debug("Clearing selected flow as it was deleted"),w(null),F(!1)),ac("Flow deleted","success")}catch(a){dT.error("Error deleting flow",a),ac("Failed to delete flow","error")}},aj=(0,e.useCallback)(async(a,d)=>{dT.info("Setting flow folder",{flowId:a,folder:d});let e=b.find(b=>b.id===a);if(!e)return void dT.warn("Flow to move not found",{flowId:a});let f={...e,folder:d&&d.trim()?d.trim():void 0};try{let b=await O.g.updateFlow(f);if(!b.success)return void ac(b.error||"Failed to move flow to folder","error");c(b=>b.map(b=>b.id===a?f:b)),ac(f.folder?`Moved to "${f.folder}"`:"Removed from folder","success")}catch(a){dT.error("Error setting flow folder",a),ac("Failed to move flow to folder","error")}},[b,ac]),ak=(0,e.useCallback)(async a=>{dT.info("Toggling flow favorite",{flowId:a});let d=b.find(b=>b.id===a);if(!d)return void dT.warn("Flow to favorite not found",{flowId:a});let e=!d.favorite,f={...d,favorite:e||void 0};try{let b=await O.g.updateFlow(f);if(!b.success)return void ac(b.error||"Failed to update favorite","error");c(b=>b.map(b=>b.id===a?f:b)),ac(e?"Added to favorites":"Removed from favorites","success")}catch(a){dT.error("Error toggling flow favorite",a),ac("Failed to update favorite","error")}},[b,ac]),al=a=>{dT.info("Copying flow",{flowId:a});let c=b.find(b=>b.id===a);c?(dT.debug("Found flow to copy",{flowName:c.name}),T(c),V(`${c.name} copy`),R(!0)):(dT.warn("Flow to copy not found",{flowId:a}),ac("Agent not found","error"))},am=()=>{dT.debug("Closing copy flow dialog"),R(!1),T(null),V(""),X(null)},an=async()=>{if(dT.info("Confirming flow copy"),!S){dT.warn("No flow to copy"),ac("No agent selected to copy","error");return}let a=af(U);if(a){dT.debug("Flow name validation failed",{error:a}),X(a);return}let b=(0,N.A)();dT.debug("Creating new flow from copy",{newId:b,newName:U});let c={id:b,name:U,description:S.description,nodes:S.nodes,edges:S.edges,folder:S.folder,favorite:S.favorite};await ag(c)&&(am(),dT.debug("Selecting newly copied flow"),w(c.id),F(!0),ac(`Created a copy named "${U}"`,"success"))},ao=(0,e.useCallback)(a=>{dT.info("Opening generated draft flow",{flowId:a.flow.id,attempts:a.attempts,errors:a.errorCount,warnings:a.warningCount}),M(!1);let b=(a.flows??[]).filter(b=>b.id!==a.rootFlowId);I(a.flow),K(b),w(a.flow.id),F(!0);let c=a.installedServers?.filter(a=>!a.alreadyExisted)??[],d=c.length>0?` Connected ${c.map(a=>a.name).join(", ")}.`:"",e=b.length>0?` It also includes ${b.length} helper agent${1===b.length?"":"s"}.`:"";a.errorCount>0?ac(`Your draft is ready, but ${a.errorCount} thing${1===a.errorCount?"":"s"} need attention before it can run. Review it here; Expert view has the detailed fixes.${e}${d}`,"warning"):a.warningCount>0?ac(`Your agent draft is ready. Review the suggestions, then try it.${e}${d}`,"info"):ac(`Your agent draft is ready. Review it, then choose Try it.${e}${d}`,"success")},[ac]),ap=(0,e.useCallback)((a="guided")=>{dT.info("Creating new flow");let c="Untitled agent",d=c,e=2;for(;b.some(a=>a.name===d);)d=`${c} ${e}`,e++;let f=O.g.createNewFlow(d);(0,dd.vi)("flujo-ui:flow-builder:mode",a),I(f),K([]),w(f.id),F(!0),ac("advanced"===a?"Your new agent is ready in Expert view. Add and connect the nodes you need.":"Your new agent is ready. Give it a name, add a task, then try it.","info")},[b,ac]);return(0,e.useEffect)(()=>{if(!P.current&&!C){if("assistant"!==new URLSearchParams(window.location.search).get("create")){P.current=!0;return}P.current=!0,ap("guided"),a.replace("/flows")}},[ap,C,a]),(0,d.jsxs)(i.default,{sx:{height:{xs:"auto",md:"calc(100dvh - var(--app-bar-height))"},minHeight:"calc(100dvh - var(--app-bar-height))",display:"flex",flexDirection:"column",overflow:{xs:"visible",md:"hidden"}},children:[(0,d.jsx)(dy.default,{eyebrow:E?"My agents":"Create",icon:A.A,compact:E,title:E&&f?H?.id===f?`${H.name} \xb7 Draft`:b.find(a=>a.id===f)?.name||"Agent":"My agents",description:E?"Choose what it should do, in order. You can always change it later.":"Create helpful AI agents, keep them organized, and try them whenever you need them.",leading:E&&f?(0,d.jsx)(m.A,{color:"primary",onClick:ad,"aria-label":"Back to my agents",sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(x,{})}):void 0,actions:E?void 0:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.A,{title:"Describe what you need in everyday language",describeChild:!0,children:(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(z,{}),onClick:()=>M(!0),"data-tour":"generate-flow",children:"Create with AI"})}),(0,d.jsx)(n.A,{title:"Create an agent step by step in easy mode",describeChild:!0,children:(0,d.jsx)(k.A,{variant:"outlined",color:"primary",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>ap("guided"),"data-tour":"new-flow",children:"Start simple"})}),(0,d.jsx)(n.A,{title:"Build directly with the full node editor",describeChild:!0,children:(0,d.jsx)(k.A,{variant:"outlined",color:"primary",startIcon:(0,d.jsx)(B.A,{}),onClick:()=>ap("advanced"),"data-tour":"new-expert-flow",children:"Start expert"})})]})}),(0,d.jsx)(o.A,{in:Y.open,unmountOnExit:!0,children:(0,d.jsx)(p.A,{severity:Y.severity,onClose:ae,sx:{borderRadius:0},children:Y.message})}),(0,d.jsx)(i.default,{sx:{flex:1,minHeight:0,overflow:{xs:"visible",md:"hidden"}},children:(()=>{if(E&&f){let a=b.find(a=>a.id===f)??(H?.id===f?H:void 0);return a?(0,d.jsx)(l.A,{in:!0,timeout:300,children:(0,d.jsx)(i.default,{sx:{height:{xs:"auto",md:"100%"}},children:(0,d.jsx)(dn,{ref:G,initialFlow:a,onSave:ag,onDelete:ai,onConversionCommitted:ah,allFlows:[...b.filter(a=>!J.some(b=>b.id===a.id)),...J],relatedDraftFlows:J,onRelatedDraftFlowsChange:K,isDraft:H?.id===a.id,onTry:aa},f)})}):(0,d.jsxs)(i.default,{sx:{p:4,textAlign:"center"},children:[(0,d.jsx)(j.A,{variant:"h6",color:"error",children:"Agent not found"}),(0,d.jsx)(k.A,{variant:"contained",onClick:ad,sx:{mt:2},children:"Back to My Agents"})]})}return(0,d.jsx)(l.A,{in:!0,timeout:300,children:(0,d.jsx)(i.default,{sx:{height:{xs:"auto",md:"100%"}},children:(0,d.jsx)(dS,{flows:b,selectedFlow:f,onSelectFlow:$,onDeleteFlow:ai,onCopyFlow:al,onCreateFlow:()=>ap("guided"),onSetFolder:aj,onToggleFavorite:ak,onOpenInChat:_,isLoading:C})})})})()}),(0,d.jsxs)(q.A,{open:Q,onClose:am,children:[(0,d.jsx)(r.A,{children:"Copy agent"}),(0,d.jsxs)(s.A,{children:[(0,d.jsx)(t.A,{children:"Give the copy a name:"}),(0,d.jsx)(u.A,{autoFocus:!0,margin:"dense",label:"Agent name",type:"text",fullWidth:!0,value:U,onChange:a=>{let b=a.target.value;dT.debug("Flow name changed",{name:b}),V(b),X(af(b))},error:!!W,helperText:W})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:am,children:"Cancel"}),(0,d.jsx)(k.A,{onClick:an,variant:"contained",color:"primary",disabled:!!W,children:"Copy"})]})]}),(0,d.jsx)(dx,{open:L,onClose:()=>M(!1),onGenerated:ao})]})}},92279:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>E.a,__next_app__:()=>K,handler:()=>M,pages:()=>J,routeModule:()=>L,tree:()=>I});var d=c(49754),e=c(9117),f=c(46595),g=c(32324),h=c(39326),i=c(38928),j=c(20175),k=c(12),l=c(54290),m=c(12696),n=c(52574),o=c(82802),p=c(77533),q=c(45229),r=c(32822),s=c(261),t=c(26453),u=c(52474),v=c(26713),w=c(51356),x=c(62685),y=c(36225),z=c(63446),A=c(2762),B=c(45742),C=c(86439),D=c(81170),E=c.n(D),F=c(62506),G=c(91203),H={};for(let a in F)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(H[a]=()=>F[a]);c.d(b,H);let I={children:["",{children:["flows",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,10057)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"]}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,51472)),"C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,81170,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,87028,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,90461,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,32768,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,J=["C:\\Users\\Moe\\Documents\\GitHub\\FLUJO\\src\\app\\flows\\page.tsx"],K={require:c,loadChunk:()=>Promise.resolve()},L=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/flows/page",pathname:"/flows",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:I},distDir:".next",relativeProjectDir:""});async function M(a,b,d){var D;let H="/flows/page";"/index"===H&&(H="/");let N=(0,h.getRequestMeta)(a,"postponed"),O=(0,h.getRequestMeta)(a,"minimalMode"),P=await L.prepare(a,b,{srcPage:H,multiZoneDraftMode:!1});if(!P)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:Q,query:R,params:S,parsedUrl:T,pageIsDynamic:U,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,serverActionsManifest:Y,clientReferenceManifest:Z,subresourceIntegrityManifest:$,prerenderManifest:_,isDraftMode:aa,resolvedPathname:ab,revalidateOnlyGenerated:ac,routerServerContext:ad,nextConfig:ae,interceptionRoutePatterns:af}=P,ag=T.pathname||"/",ah=(0,s.normalizeAppPath)(H),{isOnDemandRevalidate:ai}=P,aj=L.match(ag,_),ak=!!_.routes[ab],al=!!(aj||ak||_.routes[ah]),am=a.headers["user-agent"]||"",an=(0,v.getBotType)(am),ao=(0,q.isHtmlBotRequest)(a),ap=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[u.NEXT_ROUTER_PREFETCH_HEADER],aq=(0,h.getRequestMeta)(a,"isRSCRequest")??(0,n.f)(a.headers[u.RSC_HEADER]),ar=(0,t.getIsPossibleServerAction)(a),as=(0,m.checkIsAppPPREnabled)(ae.experimental.ppr)&&(null==(D=_.routes[ah]??_.dynamicRoutes[ah])?void 0:D.renderingMode)==="PARTIALLY_STATIC",at=!1,au=!1,av=as?N:void 0,aw=as&&aq&&!ap,ax=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ay=!am||(0,q.shouldServeStreamingMetadata)(am,ae.htmlLimitedBots);ao&&as&&(al=!1,ay=!1);let az=!0===L.isDev||!al||"string"==typeof N||aw,aA=ao&&as,aB=null;aa||!al||az||ar||av||aw||(aB=ab);let aC=aB;!aC&&L.isDev&&(aC=ab),L.isDev||aa||!al||!aq||aw||(0,k.d)(a.headers);let aD={...F,tree:I,pages:J,GlobalError:E(),handler:M,routeModule:L,__next_app__:K};Y&&Z&&(0,p.setReferenceManifestsSingleton)({page:H,clientReferenceManifest:Z,serverActionsManifest:Y,serverModuleMap:(0,r.createServerModuleMap)({serverActionsManifest:Y})});let aE=a.method||"GET",aF=(0,g.getTracer)(),aG=aF.getActiveScopeSpan();try{let f=L.getVaryHeader(ab,af);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return L.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aF.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aE} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aE} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:R,params:S,page:ah,sharedContext:{buildId:Q},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aD,Component:(0,j.T)(aD),params:S,routeModule:L,page:H,postponed:f,shouldWaitOnAllReady:aA,serveStreamingMetadata:ay,supportsDynamicResponse:"string"==typeof f||az,buildManifest:V,nextFontManifest:W,reactLoadableManifest:X,subresourceIntegrityManifest:$,serverActionsManifest:Y,clientReferenceManifest:Z,setIsrStatus:null==ad?void 0:ad.setIsrStatus,dir:c(33873).join(process.cwd(),L.relativeProjectDir),isDraftMode:aa,isRevalidate:al&&!f&&!aw,botType:an,isOnDemandRevalidate:ai,isPossibleServerAction:ar,assetPrefix:ae.assetPrefix,nextConfigOutput:ae.output,crossOrigin:ae.crossOrigin,trailingSlash:ae.trailingSlash,previewProps:_.preview,deploymentId:ae.deploymentId,enableTainting:ae.experimental.taint,htmlLimitedBots:ae.htmlLimitedBots,devtoolSegmentExplorer:ae.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ae.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ae.experimental.cacheLife,basePath:ae.basePath,serverActions:ae.experimental.serverActions,...at?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:at}:{},experimental:{isRoutePPREnabled:as,expireTime:ae.expireTime,staleTimes:ae.experimental.staleTimes,cacheComponents:!!ae.experimental.cacheComponents,clientSegmentCache:!!ae.experimental.clientSegmentCache,clientParamParsing:!!ae.experimental.clientParamParsing,dynamicOnHover:!!ae.experimental.dynamicOnHover,inlineCss:!!ae.experimental.inlineCss,authInterrupts:!!ae.experimental.authInterrupts,clientTraceMetadata:ae.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>L.onRequestError(a,b,d,ad),err:(0,h.getRequestMeta)(a,"invokeError"),dev:L.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[z.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,al&&(null==n?void 0:n.revalidate)===0&&!L.isDev&&!as){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${ab}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
|
|
4
|
-
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:w.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},n=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===L.isDev,l=c||b.writableEnded;if(ai&&ac&&!f&&!O)return(null==ad?void 0:ad.render404)?await ad.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(aj&&(j=(0,x.parseFallbackField)(aj.fallback)),j===x.FallbackMode.PRERENDER&&(0,v.isBot)(am)&&(!as||ao)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ai=!0),ai&&(j!==x.FallbackMode.NOT_FOUND||f)&&(j=x.FallbackMode.BLOCKING_STATIC_RENDER),!O&&j!==x.FallbackMode.BLOCKING_STATIC_RENDER&&aC&&!l&&!aa&&U&&(k||!ak)){let b;if((k||aj)&&j===x.FallbackMode.NOT_FOUND)throw new C.NoFallbackError;if(as&&!aq){let c="string"==typeof(null==aj?void 0:aj.fallback)?aj.fallback:k?ah:null;if(b=await L.handleResponse({cacheKey:c,req:a,nextConfig:ae,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:_,isRoutePPREnabled:as,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||au?(0,o.u)(ah):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let n=ai||g||!av?void 0:av;if(at&&void 0!==n)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:w.CachedRouteKind.PAGES,html:y.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=U&&as&&((0,h.getRequestMeta)(a,"renderFallbackShell")||au)?(0,o.u)(ag):null;return m({span:i,postponed:n,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,o=await L.handleResponse({cacheKey:aB,responseGenerator:a=>n({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ai,isRoutePPREnabled:as,req:a,nextConfig:ae,prerenderManifest:_,waitUntil:d.waitUntil});if(aa&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),L.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!o){if(aB)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=o.value)?void 0:f.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=o.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof o.value.postponed;al&&!aw&&(!p||ap)&&(O||b.setHeader("x-nextjs-cache",ai?"REVALIDATED":o.isMiss?"MISS":o.isStale?"STALE":"HIT"),b.setHeader(u.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=o;if(av)l={revalidate:0,expire:void 0};else if(O&&aq&&!ap&&as)l={revalidate:0,expire:void 0};else if(!L.isDev)if(aa)l={revalidate:0,expire:void 0};else if(al){if(o.cacheControl)if("number"==typeof o.cacheControl.revalidate){if(o.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${o.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:o.cacheControl.revalidate,expire:(null==(j=o.cacheControl)?void 0:j.expire)??ae.expireTime}}else l={revalidate:z.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(o.cacheControl=l,"string"==typeof ax&&(null==q?void 0:q.kind)===w.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[z.NEXT_CACHE_TAGS_HEADER];O&&al&&c&&"string"==typeof c&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(ax);return void 0!==d?(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(d,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl}):(b.statusCode=204,(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.EMPTY,cacheControl:o.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...o,value:{...o.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&av)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(O&&al||delete a[z.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[z.NEXT_CACHE_TAGS_HEADER];if(O&&al&&s&&"string"==typeof s&&b.setHeader(z.NEXT_CACHE_TAGS_HEADER,s),!q.status||aq&&as||(b.statusCode=q.status),!O&&q.status&&G.RedirectStatusCode[q.status]&&aq&&(b.statusCode=200),p&&b.setHeader(u.NEXT_DID_POSTPONE_HEADER,"1"),aq&&!aa){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:q.html,cacheControl:aw?{revalidate:0,expire:void 0}:o.cacheControl})}return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:y.default.fromStatic(q.rscData,u.RSC_CONTENT_TYPE_HEADER),cacheControl:o.cacheControl})}let t=q.html;if(!p||O||aq)return(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:o.cacheControl});if(at)return t.push(new ReadableStream({start(a){a.enqueue(A.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}});let v=new TransformStream;return t.push(v.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==w.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(v.writable)}).catch(a=>{v.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,B.sendRenderResult)({req:a,res:b,generateEtags:ae.generateEtags,poweredByHeader:ae.poweredByHeader,result:t,cacheControl:{revalidate:0,expire:void 0}})};if(!aG)return await aF.withPropagatedContext(a.headers,()=>aF.trace(i.BaseServerSpan.handleRequest,{spanName:`${aE} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aE,"http.target":a.url}},p));await p(aG)}catch(b){throw b instanceof C.NoFallbackError||await L.onRequestError(a,b,{routerKind:"App Router",routePath:H,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:al,isOnDemandRevalidate:ai})},ad),b}}}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,773,3954,8745,7674,8730,5642,3418,7147,8897,9868,3855,6607,7883,5494,8940,5807,5446,5863,3262,7031,5444,1314,2069,1662,7508,3945,519,1227,9543,8598],()=>b(b.s=92279));module.exports=c})();
|
|
6
|
+
${by(d,f)}`}(function(a){let b=a.type||a.data.type||"unknown",c=a.data.label||"Unknown Node",d=a.data.description,e=a.data.properties||{},f={label:c,type:b,userDescription:d};if(d&&d.trim())return f;if("subflow"===b)return f.subflowDetailsUnavailable=!0,f;"string"==typeof e.boundModel&&e.boundModel&&(f.modelName=e.boundModel),"string"==typeof e.promptTemplate&&e.promptTemplate.trim()&&(f.promptSummary=e.promptTemplate);let g=Array.isArray(e.mcpNodes)?e.mcpNodes:[],h=[],i=new Set;for(let a of g){let b=a?.properties?.boundServer;if(!b||i.has(b))continue;i.add(b);let c=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];h.push({name:b,connected:!0,tools:c})}return h.length>0&&(f.servers=h),f}(a)),inputSchema:{type:"object",properties:{},required:[]}}));g(c),bz.debug("Generated handoff tools",{toolsCount:c.length})}catch(a){bz.error("Error generating handoff tools",a),g([])}finally{i(!1)}}else g([])},[a,b,j,c,d]),{handoffTools:f,isLoadingHandoffTools:h}})(a,b,h,l),aS=aR?.handoffTools||[],aT=aR?.isLoadingHandoffTools||!1;(0,e.useEffect)(()=>{a&&b&&b8.debug("Handoff tools:",{count:aS.length,tools:aS.map(a=>a.name)})},[a,b,aS]),(0,e.useEffect)(()=>{if(!a)return;if(b){B(b.data.properties?.promptTemplate||""),b.data.properties?.boundModel?D(!0):D(!1),F(b.data.properties?.excludeModelPrompt||!1),K(b.data.properties?.excludeStartNodePrompt||!1),M(b.data.properties?.excludeSystemPrompt||!1),O(b.data.properties?.inputMode||"full-history"),S(b.data.properties?.isolatedPrompt||""),U(b.data.properties?.allowCallerPrompt!==!1),Y(b.data.properties?.outputMode||"full-conversation"),$(b.data.properties?.enableTodoTool||!1),aa(b.data.properties?.captureVariable||""),ac(b.data.properties?.captureResource||"");let a=aJ(b.data.properties?.captureKv||"");ae(a.scope),ag(a.key||"")}let c="create"===t?"basic":function(a,b){return"guided"===a&&"string"==typeof b&&b.trim().length>0?"task":"basic"}(p,b?.data.properties?.promptTemplate);al(c),ai("server"),au.current=!0;let d=window.requestAnimationFrame(()=>{let a=at[c].current;a&&"function"==typeof a.scrollIntoView?a.scrollIntoView({behavior:"auto",block:"start"}):an.current&&(an.current.scrollTop=a?.offsetTop??0),au.current=!1});return()=>{window.cancelAnimationFrame(d),au.current=!1}},[b,a,t,p]),(0,e.useEffect)(()=>{if(!a)return;let b=an.current;if(!b)return;let c=new IntersectionObserver(a=>{if(au.current)return;let b=a.filter(a=>a.isIntersecting).sort((a,b)=>b.intersectionRatio-a.intersectionRatio),c=b[0]?.target?.dataset.section;c&&al(c)},{root:b,threshold:[.15,.4,.75],rootMargin:"0px 0px -45% 0px"});return Object.values(at).forEach(a=>{a.current&&c.observe(a.current)}),()=>c.disconnect()},[a,b]);let aU=(0,e.useRef)(null),aV=(a,b,c="server")=>{if(b8.debug("handleInsertToolBinding called with:",JSON.stringify({serverName:a,toolName:b})),!a||!b)return void b8.warn("Invalid parameters for handleInsertToolBinding:",{serverName:a,toolName:b});let d=(aE[a]||[]).find(a=>a.name===b);d?.description;let e="handoff"===c?(0,X.X8)("tool","handoff",b):(0,X.X8)("tool",a,b),f=(!(A.length>0)||A.endsWith(" ")||A.endsWith("\n")?"":" ")+e;aU.current?(b8.debug("Inserting text into PromptBuilder:",JSON.stringify({textToInsert:f})),aU.current.insertText(f),b8.debug("Tool binding inserted successfully")):b8.warn("promptBuilderRef.current is null, cannot insert text")};if(!b||!x)return null;let aW=(a=>[{key:"maxTurns",label:a?a("flows.nodeProperties.maxTurns"):"Maximum turns (override)",type:"number",min:1,helperText:a?a("flows.nodeProperties.maxTurnsHelp"):"Optional. Replaces the bound model's maximum turns for this node. Leave empty to inherit the model setting (default: 50)."},{key:"maxTokens",label:a?a("flows.nodeProperties.maxTokens"):"Maximum output tokens (override)",type:"number",min:1,helperText:a?a("flows.nodeProperties.maxTokensHelp"):"Optional. Replaces the bound model's maximum output tokens for this node. Leave empty to inherit the adapter default. The Claude subscription adapter does not enforce this value."}])(u),aX=x.properties?.boundModel||"",aY={minHeight:"100%",scrollSnapAlign:"start",scrollSnapStop:"always",display:"flex",flexDirection:"column",pb:4},aZ=(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:["advanced"===p&&(0,d.jsx)(i.default,{sx:{borderBottom:1,borderColor:"divider",flexShrink:0},children:(0,d.jsxs)(a_.A,{value:ah,onChange:(a,b)=>ai(b),variant:"scrollable",scrollButtons:"auto","aria-label":u("flows.process.toolsAria"),children:[(0,d.jsx)(a0.A,{id:"process-task-tab-server","aria-controls":"process-task-panel-server",label:u("flows.process.mcpTab"),value:"server"}),(0,d.jsx)(a0.A,{id:"process-task-tab-agent","aria-controls":"process-task-panel-agent",label:u("flows.process.nodesTab"),value:"agent"}),(0,d.jsx)(a0.A,{id:"process-task-tab-resources","aria-controls":"process-task-panel-resources",label:u("flows.process.resourcesTab"),value:"resources"})]})}),(0,d.jsxs)(i.default,{id:`process-task-panel-${ah}`,role:"tabpanel","aria-labelledby":`process-task-tab-${ah}`,"data-testid":"process-task-tools-scroll",sx:{flexGrow:1,minHeight:0,overflow:"auto",pr:.5},children:["server"===ah&&(0,d.jsx)(bQ,{isLoadingServers:aC,connectedMcpNodes:aA,availableServers:aB,onConnectMcpServer:o,serverStatuses:aF,serverToolsMap:aE,isLoadingTools:aG,handleInsertToolBinding:aV,selectedToolServerNodeId:aD,selectedNodeId:b?.id||null,handleSelectToolServer:aH,isLoadingSelectedServerTools:aI,promptBuilderRef:aU,handleRetryServer:aL,handleRestartServer:aM}),"advanced"===p&&"resources"===ah&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(bV,{wiredResources:aQ,promptBuilderRef:aU}),(0,d.jsx)(bT,{connectedMcpNodes:aA,handleInsertResourceBinding:(a,b)=>{if(!a||!b)return void b8.warn("Invalid parameters for handleInsertResourceBinding:",{serverName:a,uri:b});let c=(0,X.X8)("resource",a,b),d=A.length>0&&!A.endsWith(" ")&&!A.endsWith("\n");aU.current?aU.current.insertText((d?" ":"")+c):b8.warn("promptBuilderRef.current is null, cannot insert resource binding")},promptBuilderRef:aU})]}),"advanced"===p&&"agent"===ah&&(0,d.jsx)(bX,{handoffTools:aS,isLoadingHandoffTools:aT,handleInsertToolBinding:(a,b)=>aV(a,b,"handoff"),promptBuilderRef:aU})]})]});return(0,d.jsxs)(q.A,{open:a,onClose:c,slotProps:{transition:{onEntered:()=>{"task"===aj&&(au.current=!0,ar.current?.scrollIntoView({block:"start"}),window.setTimeout(()=>{au.current=!1},0))}}},maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"secondary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:u("flows.modal.properties",{name:x.label||u("flows.process.title")})}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":u("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",p:0,overflow:"hidden",height:"calc(90vh - 130px)"},children:[(0,d.jsx)(i.default,{sx:{borderBottom:1,borderColor:"divider",px:2,flexShrink:0},children:(0,d.jsx)(a_.A,{value:aj,onChange:(a,b)=>(a=>{al(a),au.current=!0;let b=at[a].current;b&&"function"==typeof b.scrollIntoView?b.scrollIntoView({behavior:"smooth",block:"start"}):an.current&&(an.current.scrollTop=b?.offsetTop??0),window.setTimeout(()=>{au.current=!1},700)})(b),variant:"scrollable",scrollButtons:"auto",children:am.map(a=>(0,d.jsx)(a0.A,{label:w[a],value:a},a))})}),(0,d.jsxs)(i.default,{ref:an,sx:{flexGrow:1,overflow:"auto",p:3,scrollSnapType:"y mandatory",scrollPaddingTop:"24px"},children:[(0,d.jsxs)(i.default,{ref:ao,"data-section":"basic",sx:aY,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:u("flows.process.basic")}),(0,d.jsx)(bA,{nodeData:x,setNodeData:y})]}),(0,d.jsxs)(i.default,{ref:ap,"data-section":"model",sx:aY,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:u("flows.process.model")}),(0,d.jsx)(bF,{isLoadingModels:aw,loadError:ax,models:av,selectedModelId:aX,handleModelSelect:ay,isModelBound:C,handleUnbindModel:az})]}),"advanced"===p&&(0,d.jsxs)(i.default,{ref:aq,"data-section":"io",sx:aY,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:u("flows.process.io")}),(0,d.jsx)(b5,{excludeModelPrompt:E,setExcludeModelPrompt:F,excludeStartNodePrompt:J,setExcludeStartNodePrompt:K,excludeSystemPrompt:L,setExcludeSystemPrompt:M,inputMode:N,setInputMode:O,isolatedPrompt:R,setIsolatedPrompt:S,allowCallerPrompt:T,setAllowCallerPrompt:U,outputMode:V,setOutputMode:Y,isModelBound:C,models:av,nodeData:x}),(0,d.jsx)(G.A,{sx:{mt:1},control:(0,d.jsx)(H.A,{checked:Z,onChange:a=>$(a.target.checked)}),label:u("flows.process.todo")})]}),(0,d.jsxs)(i.default,{ref:ar,"data-section":"task",sx:aY,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:u("flows.process.task")}),(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexGrow:1,minHeight:480},children:[(0,d.jsx)(i.default,{sx:{flex:"0 0 340px",minWidth:0,display:"flex",flexDirection:"column",minHeight:0},children:aZ}),(0,d.jsx)(i.default,{sx:{flex:"1 1 auto",minWidth:0,display:"flex",flexDirection:"column",minHeight:0},children:(0,d.jsx)(b$,{ref:aU,promptTemplate:A,handlePromptChange:a=>{B(a),y(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},excludeModelPrompt:E,excludeStartNodePrompt:J,excludeSystemPrompt:L,nodeData:x,flowId:n,suggestions:aP})})]})]}),"advanced"===p&&(0,d.jsxs)(i.default,{ref:as,"data-section":"advanced",sx:aY,children:[(0,d.jsx)(j.A,{variant:"h6",sx:{mb:2},children:u("flows.process.advanced")}),(0,d.jsx)(i.default,{sx:{mb:3},children:(0,d.jsx)(b6,{nodeData:x,handlePropertyChange:z,properties:aW})}),(0,d.jsx)(i.default,{children:(0,d.jsx)(b7,{value:{captureVariable:_,captureResource:ab,captureKvScope:ad,captureKvKey:af},onChange:a=>{void 0!==a.captureVariable&&aa(a.captureVariable),void 0!==a.captureResource&&ac(a.captureResource),void 0!==a.captureKvScope&&ae(a.captureKvScope),void 0!==a.captureKvKey&&ag(a.captureKvKey)},onInsertRef:a=>{let b=A.length>0&&!A.endsWith(" ")&&!A.endsWith("\n");aU.current?aU.current.insertText((b?" ":"")+a):b8.warn("promptBuilderRef.current is null, cannot insert capture reference")}})})]})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:u("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&x){let a={...x.properties,promptTemplate:A};if("advanced"===p){Object.assign(a,{excludeModelPrompt:E,excludeStartNodePrompt:J,excludeSystemPrompt:L,inputMode:N,isolatedPrompt:R,allowCallerPrompt:T,outputMode:V}),Z?a.enableTodoTool=!0:delete a.enableTodoTool;let b=_.trim();b?a.captureVariable=b:delete a.captureVariable;let c=ab.trim();c?a.captureResource=c:delete a.captureResource;let d=aK(ad,af);d?a.captureKv=d:delete a.captureKv}g(b.id,{...x,properties:a}),c()}},variant:"contained",color:"primary",children:u("flows.modal.saveChanges")})]})]})};var cb=c(2173),cc=c(88117);let cd=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/MCPNodePropertiesModal"),ce=({open:a,node:b,onClose:c,onSave:f,authoringMode:g="advanced"})=>{let{t:h}=(0,ak.s9)(),[l,o]=(0,e.useState)(null),{servers:p,isLoading:t,loadError:w,retryServer:x}=(0,bw.v)(),[y,z]=(0,e.useState)({}),A=(0,bb.E)("mcp",p),[B,C]=(0,e.useState)(!1),D=async()=>{C(!0);try{await Promise.all(p.map(a=>x(a.name)))}finally{setTimeout(()=>C(!1),500)}},{tools:E,isLoading:J,error:K,loadTools:L}=(0,cc.O)(l?.properties?.boundServer||"");(0,e.useEffect)(()=>{b&&o({...b.data,properties:{...b.data.properties}})},[b,a]);let M=l?.properties?.boundServer||"";(0,e.useEffect)(()=>{E&&E.length>0&&(a=>{l&&0===(l.properties.enabledTools||[]).length&&a.length>0&&(cd.debug("Enabling all tools by default"),o(b=>b?{...b,properties:{...b.properties,enabledTools:a.map(a=>a.name)}}:null))})(E)},[E]);let N=(a,b)=>{o(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},O=async(a,b)=>{b&&b.stopPropagation(),cd.debug(`Retrying server: ${a}`),z(b=>({...b,[a]:!0}));try{return await x(a),a===M&&L(!0),!0}catch(b){return cd.warn(`Failed to retry server ${a}: ${b}`),!1}finally{setTimeout(()=>{z(b=>({...b,[a]:!1}))},500)}};if(!b||!l)return null;let P=l.properties?.boundServer||"",Q=l.properties?.enabledTools||[],R=a=>({key:a.name,content:(a=>(0,d.jsx)(ba.A,{name:a.name,status:a.status||"disconnected",path:a.path||a.rootPath||"",enabled:!a.disabled,transport:a.transport||"stdio",pickerMode:!0,selected:P===a.name,onClick:()=>(a=>{cd.debug(`Server selected: ${a}`),cd.debug(`Server selected: ${a}`),o(b=>{if(!b)return null;let c=bu({currentLabel:b.label,nameIsCustom:b.properties?.nameIsCustom,defaultLabel:"MCP Node",previousAutoLabel:b.properties?.boundServer||void 0,nextAutoLabel:a});return{...b,label:c,properties:{...b.properties,boundServer:a}}})})(a.name)}))(a)}),S=A.items.map(R),T=A.groups?A.groups.map(a=>({...a,items:a.items.map(R)})):null,U=l.properties?.toolTimeout,V=-1===U;return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"guided"===g?"xl":"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"info.main",width:"guided"===g?"95vw":void 0,height:"guided"===g?"90vh":"80vh",maxWidth:"guided"===g?"95vw":void 0,maxHeight:"guided"===g?"90vh":"80vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:h("flows.modal.properties",{name:l.label||h("flows.mcpNode.title")})}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":h("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:[(0,d.jsx)(u.A,{fullWidth:!0,label:h("flows.mcpNode.label"),value:l.label||"",onChange:a=>{o(b=>b?{...b,label:a.target.value,properties:{...b.properties,nameIsCustom:!0}}:null)},margin:"normal",helperText:h("flows.mcpNode.labelHelp"),sx:{mb:2}}),(0,d.jsxs)(i.default,{sx:{mb:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:h("flows.mcpNode.bind")}),(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"flex-end",mb:1},children:(0,d.jsx)(n.A,{title:h("flows.mcpNode.retryAll"),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{size:"small",onClick:D,disabled:B||t,children:B?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bJ.A,{fontSize:"small"})})})})}),(0,d.jsx)(bD.A,{isLoading:t,error:w,emptyMessage:h("flows.mcpNode.empty"),loadingMessage:h("flows.mcpNode.loadingServers"),searchable:!0,searchPlaceholder:h("flows.mcpNode.searchServers"),searchTerm:A.searchTerm,onSearchChange:A.setSearchTerm,columns:{xs:12,sm:6},items:S,groups:T,collapsedKeys:A.collapsedKeys,onToggleGroup:A.toggleGroup}),(0,d.jsx)(bB.A,{children:P?h("flows.mcpNode.bound",{server:P}):h("flows.mcpNode.select")})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:h("flows.mcpNode.description"),value:l.description||"",onChange:a=>o({...l,description:a.target.value}),margin:"normal",multiline:!0,rows:2,helperText:h("flows.mcpNode.descriptionHelp")}),P&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:h("flows.mcpNode.timeoutTitle")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:h("flows.mcpNode.timeoutHelp")}),(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,d.jsx)(u.A,{label:h("flows.mcpNode.timeoutSeconds"),type:"number",size:"small",sx:{width:200},value:V?"":U??"",placeholder:String(300),disabled:V,inputProps:{min:1},onChange:a=>{let b=a.target.value;if(""===b)return void N("toolTimeout",void 0);let c=parseInt(b,10);!isNaN(c)&&c>0&&N("toolTimeout",c)},helperText:V?h("flows.mcpNode.noTimeoutHelp"):h("flows.mcpNode.defaultTimeout",{seconds:300})}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:V,onChange:a=>N("toolTimeout",a.target.checked?-1:void 0)}),label:h("flows.mcpNode.noTimeout")})]})]}),P&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(j.A,{variant:"subtitle1",gutterBottom:!0,children:h("flows.mcpNode.allowedTools")}),p.find(a=>a.name===P)?.status!=="connected"&&(0,d.jsxs)(i.default,{sx:{mb:2,p:2,bgcolor:"error.light",borderRadius:1},children:[(0,d.jsx)(j.A,{color:"error.dark",children:h("flows.mcpNode.disconnected")}),(0,d.jsx)(k.A,{variant:"outlined",size:"small",color:"primary",startIcon:y[P]?(0,d.jsx)(F.default,{size:16}):(0,d.jsx)(bJ.A,{}),onClick:()=>O(P),disabled:y[P],sx:{mt:1},children:h("flows.mcpNode.retry")})]}),J?(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(j.A,{color:"text.secondary",children:h("flows.mcpNode.loadingTools")})]}):K?(0,d.jsx)(j.A,{color:"error",children:K}):E&&0!==E.length?(0,d.jsxs)(i.default,{sx:{mt:2},children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:h("flows.mcpNode.toolsHelp")}),(0,d.jsx)(au.A,{children:E.map(a=>(0,d.jsxs)(ay.Ay,{sx:{py:0},children:[(0,d.jsx)(av.A,{sx:{minWidth:42},children:(0,d.jsx)(H.A,{edge:"start",checked:Q.includes(a.name),onChange:()=>(a=>{cd.debug(`Tool toggled: ${a}`),o(b=>{let c;if(!b)return null;let d=b.properties.enabledTools||[];return c=d.includes(a)?d.filter(b=>b!==a):[...d,a],{...b,properties:{...b.properties,enabledTools:c}}})})(a.name)})}),(0,d.jsx)(aw.A,{primary:a.name,secondary:a.description,primaryTypographyProps:{fontWeight:"medium"}})]},a.name))})]}):(0,d.jsx)(j.A,{color:"text.secondary",children:h(p.find(a=>a.name===P)?.status==="connected"?"flows.mcpNode.noTools":"flows.mcpNode.connectForTools")})]}),P&&(0,d.jsxs)(i.default,{sx:{mt:4},children:[(0,d.jsx)(cb.A,{roots:l.properties?.roots||[],onChange:a=>N("roots",a)}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:h("flows.mcpNode.rootsHelp",{server:P})})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:h("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{b&&l&&(f(b.id,l),c())},variant:"contained",color:"primary",children:h("flows.modal.saveChanges")})]})]})},cf=({open:a,node:b,onClose:c,onSave:f})=>{let{t:g}=(0,ak.s9)(),[h,l]=(0,e.useState)(null),[n,o]=(0,e.useState)("");return((0,e.useEffect)(()=>{b&&(l({...b.data,properties:{...b.data.properties}}),o(b.data.properties?.promptTemplate||""))},[b,a]),b&&h)?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:g("flows.modal.properties",{name:h.label||g("flows.modal.startNode")})}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":g("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsx)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto",height:"calc(90vh - 130px)"},children:(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,children:g("flows.modal.promptTemplate")}),(0,d.jsx)(i.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 40px)"},children:(0,d.jsx)(bY.A,{value:n,onChange:a=>{o(a),l(b=>b?{...b,properties:{...b.properties,promptTemplate:a}}:null)},label:"",height:"100%"})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:g("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&h){let a={...h,properties:{...h.properties,promptTemplate:n}};f(b.id,a),c()}},variant:"contained",color:"primary",children:g("flows.modal.saveChanges")})]})]}):null},cg=({open:a,node:b,onClose:c,onSave:f})=>{let{t:g}=(0,ak.s9)(),[h,l]=(0,e.useState)(null);return((0,e.useEffect)(()=>{b&&l({...b.data,properties:{...b.data.properties}})},[b,a]),b&&h)?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"success.main",width:"600px",height:"400px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:g("flows.modal.properties",{name:h.label||g("flows.modal.finishNode")})}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":g("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsx)(s.A,{sx:{display:"flex",flexDirection:"column",p:3,overflow:"auto"},children:(0,d.jsx)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",alignItems:"center",py:4},children:(0,d.jsxs)(D.A,{elevation:0,sx:{p:4,textAlign:"center",backgroundColor:"rgba(76, 175, 80, 0.08)",borderRadius:2,width:"100%"},children:[(0,d.jsx)(j.A,{variant:"h6",color:"success.main",gutterBottom:!0,children:g("flows.modal.finishNode")}),(0,d.jsx)(j.A,{variant:"body1",color:"text.secondary",children:g("flows.modal.finishHelp")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:2,fontStyle:"italic"},children:g("flows.modal.finishFuture")})]})})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:g("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{b&&h&&(f(b.id,h),c())},variant:"contained",color:"primary",children:g("flows.modal.save")})]})]}):null},ch=({open:a,edge:b,onClose:c,onSave:f})=>{let{t:g}=(0,ak.s9)(),h={contains:g("flows.edgeModal.contains"),regex:g("flows.edgeModal.regex"),equals:g("flows.edgeModal.equals"),always:g("flows.edgeModal.always")},l={"last-assistant":g("flows.edgeModal.lastAgent"),"last-message":g("flows.edgeModal.lastMessage")},[n,o]=(0,e.useState)(!1),[p,t]=(0,e.useState)("contains"),[w,x]=(0,e.useState)(""),[y,z]=(0,e.useState)("last-assistant"),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1);if((0,e.useEffect)(()=>{let a=b?.data?.condition;a?(o(!0),t(a.kind),x("string"==typeof a.value?a.value:""),z(a.target??"last-assistant"),B(!!a.ignoreCase),D(!!a.negate)):(o(!1),t("contains"),x(""),z("last-assistant"),B(!1),D(!1))},[b,a]),!b)return null;let E="always"!==p,F=n&&"regex"===p&&w.length>0&&!(0,aD.wM)(w),J=n&&E&&0===w.length;return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"primary.main",width:"520px",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:g("flows.edgeModal.title")}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":g("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{display:"flex",flexDirection:"column",gap:2,p:3},children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:g("flows.edgeModal.help")}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:n,onChange:a=>o(a.target.checked)}),label:g("flows.edgeModal.conditional")}),n&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(bf.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(bg.A,{id:"edge-condition-kind-label",children:g("flows.edgeModal.kind")}),(0,d.jsx)(bh.A,{labelId:"edge-condition-kind-label",label:g("flows.edgeModal.kind"),value:p,onChange:a=>t(a.target.value),children:aD.w4.map(a=>(0,d.jsx)(K.A,{value:a,children:h[a]},a))})]}),E&&(0,d.jsx)(u.A,{fullWidth:!0,size:"small",label:g("regex"===p?"flows.edgeModal.pattern":"flows.edgeModal.value"),value:w,onChange:a=>x(a.target.value),error:F||J,helperText:F?g("flows.edgeModal.invalidRegex"):J?g("flows.edgeModal.valueRequired"):" "}),(0,d.jsxs)(bf.A,{fullWidth:!0,size:"small",children:[(0,d.jsx)(bg.A,{id:"edge-condition-target-label",children:g("flows.edgeModal.testAgainst")}),(0,d.jsx)(bh.A,{labelId:"edge-condition-target-label",label:g("flows.edgeModal.testAgainst"),value:y,onChange:a=>z(a.target.value),children:aD.L2.map(a=>(0,d.jsx)(K.A,{value:a,children:l[a]},a))})]}),(0,d.jsxs)(i.default,{display:"flex",gap:2,flexWrap:"wrap",children:[E&&(0,d.jsx)(G.A,{control:(0,d.jsx)(bo.A,{checked:A,onChange:a=>B(a.target.checked)}),label:g("flows.edgeModal.ignoreCase")}),(0,d.jsx)(G.A,{control:(0,d.jsx)(bo.A,{checked:C,onChange:a=>D(a.target.checked)}),label:g("flows.edgeModal.negate")})]}),(0,d.jsx)(bB.A,{children:g("flows.edgeModal.runtimeSafety")})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:g("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(!n){f(b.id,void 0),c();return}let a={kind:p};E&&(a.value=w,A&&(a.ignoreCase=!0)),"last-assistant"!==y&&(a.target=y),C&&(a.negate=!0),f(b.id,a),c()},variant:"contained",color:"primary",disabled:F,children:g("flows.modal.save")})]})]})};var ci=c(40216);let cj=(0,w.A)((0,d.jsx)("path",{d:"m12 4-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}),"ArrowForward");var ck=c(95329);let cl=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/SubflowNodePropertiesModal"),cm=({open:a,node:b,onClose:c,onSave:f,onNavigateToFlow:g,flowId:h,authoringMode:l="advanced"})=>{let{t:n,tp:o,formatList:t}=(0,ak.s9)(),[w,x]=(0,e.useState)(null),[y,z]=(0,e.useState)([]),[A,B]=(0,e.useState)(!1),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(""),[J,L]=(0,e.useState)(""),[M,N]=(0,e.useState)(""),[P,Q]=(0,e.useState)("folder"),[R,S]=(0,e.useState)("");(0,e.useEffect)(()=>{if(b){let a=b.data.properties||{};x({...b.data,properties:{...a}}),F(Array.isArray(a.spawnBriefs)?a.spawnBriefs.filter(a=>"string"==typeof a).join("\n"):""),L(a.captureVariable||""),N(a.captureResource||"");let c=aJ(a.captureKv||"");Q(c.scope),S(c.key||"")}},[b,a]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return B(!0),O.g.loadFlows().then(a=>{b||z(a||[])}).catch(a=>{cl.warn("Failed to load flows for subflow picker",a),b||z([])}).finally(()=>{b||B(!1)}),()=>{b=!0}},[a]);let T=(a,b)=>{x(c=>c?{...c,properties:{...c.properties,[a]:b}}:null)},U=a=>{x(b=>{if(!b)return null;let c={...b.properties};return delete c[a],{...b,properties:c}})},V=y.filter(a=>a.id!==h),W=(0,bb.E)("flows",V);if(!b||!w)return null;let X=w.properties?.subflowId||"",Y=!!X&&!y.some(a=>a.id===X),Z=Y?"":y.find(a=>a.id===X)?.name||"",$=Array.isArray(w.properties?.parallelSubflowIds)?w.properties.parallelSubflowIds.filter(a=>"string"==typeof a&&""!==a):[],_=$.map(a=>y.find(b=>b.id===a)?.name||a),aa="string"==typeof w.properties?.parallelSubflowIdsVar?w.properties.parallelSubflowIdsVar.trim():"",ab=w.properties?.mapOverList===!0,ac=!!w.properties?.allowCallerFanout,ad=E.split("\n").some(a=>""!==a.trim()),ae=ac||ad||$.length>0||!!aa||ab,af=$.length>0,ag=ac||ad,ah=!af&&!aa&&!ag,ai=!ab&&!af,aj=w.properties?.promptTemplate||"",al=w.properties?.inputMode||(aj.trim()?"isolated":"full-history");return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"warning.main",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:n("flows.modal.properties",{name:w.label||n("flows.subflow.title")})}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:c,"aria-label":n("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{p:3},children:[(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:n("flows.subflow.intro")}),(0,d.jsx)(u.A,{fullWidth:!0,label:n("flows.subflow.nodeLabel"),value:w.label||"",onChange:a=>x({...w,label:a.target.value}),margin:"normal"}),(0,d.jsxs)(i.default,{sx:{mt:2},children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mb:1},children:n("flows.subflow.flowToRun")}),(0,d.jsx)(k.A,{variant:"outlined",startIcon:(0,d.jsx)(ci.A,{}),onClick:()=>D(!0),sx:{textTransform:"none",maxWidth:"100%"},children:(0,d.jsx)(i.default,{component:"span",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:Z||($.length>0?o("flows.subflow.parallel",$.length):aa?n("flows.subflow.targetsVariable",{name:aa}):n("flows.subflow.choose"))})})]}),Y&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:n("flows.subflow.missing")}),$.length>0&&(0,d.jsx)(p.A,{severity:"info",sx:{mt:1},children:n("flows.subflow.parallelInfo",{count:$.length,names:t(_)})}),(0,d.jsx)(a9.A,{open:C,onClose:()=>D(!1),title:n("flows.subflow.pickerTitle"),description:n("flows.subflow.pickerHelp"),isLoading:A,skeleton:(0,d.jsx)(ck.o,{}),emptyMessage:n("flows.subflow.pickerEmpty"),searchable:!0,searchPlaceholder:n("flows.subflow.search"),searchTerm:W.searchTerm,onSearchChange:W.setSearchTerm,items:W.items.map(a=>({key:a.id,content:(0,d.jsx)(ck.A,{flow:a,selected:a.id===X,onSelect:a=>{T("subflowId",a),D(!1)},pickerMode:!0})})),groups:W.groups?W.groups.map(a=>({...a,items:a.items.map(a=>({key:a.id,content:(0,d.jsx)(ck.A,{flow:a,selected:a.id===X,onSelect:a=>{T("subflowId",a),D(!1)},pickerMode:!0})}))})):null,collapsedKeys:W.collapsedKeys,onToggleGroup:W.toggleGroup}),"guided"===l&&(0,d.jsx)(u.A,{fullWidth:!0,label:n("flows.subflow.helperTask"),value:w.description||"",onChange:a=>x({...w,description:a.target.value}),margin:"normal",multiline:!0,minRows:2,helperText:n("flows.subflow.helperTaskHelp")}),"advanced"===l&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:n("flows.subflow.inputTitle")}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":n("flows.subflow.inputAria"),sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b4,{selected:"full-history"===al,onClick:()=>T("inputMode","full-history"),icon:(0,d.jsx)(b_,{}),title:n("flows.subflow.fullHistory"),description:n("flows.subflow.fullHistoryHelp")}),(0,d.jsx)(b4,{selected:"latest-message"===al,onClick:()=>T("inputMode","latest-message"),icon:(0,d.jsx)(b0,{}),title:n("flows.subflow.latest"),description:n("flows.subflow.latestHelp")}),(0,d.jsx)(b4,{selected:"isolated"===al,onClick:()=>T("inputMode","isolated"),icon:(0,d.jsx)(b1,{}),title:n("flows.subflow.isolated"),description:n("flows.subflow.isolatedHelp")})]}),"isolated"===al&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(G.A,{sx:{mt:1,display:"block"},control:(0,d.jsx)(bo.A,{checked:w.properties?.allowCallerPrompt!==!1,onChange:a=>T("allowCallerPrompt",a.target.checked)}),label:n("flows.subflow.allowCallerPrompt")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:n("flows.subflow.allowCallerPromptHelp")}),(0,d.jsx)(u.A,{fullWidth:!0,label:n(w.properties?.allowCallerPrompt!==!1?"flows.subflow.defaultPrompt":"flows.subflow.isolatedPrompt"),value:aj,onChange:a=>T("promptTemplate",a.target.value),margin:"normal",multiline:!0,rows:3,helperText:n(w.properties?.allowCallerPrompt!==!1?"flows.subflow.defaultPromptHelp":"flows.subflow.isolatedPromptHelp")})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:n("flows.subflow.dynamicTitle")}),(0,d.jsx)(u.A,{fullWidth:!0,label:n("flows.subflow.parallelVariable"),value:aa,disabled:!ai,onChange:a=>{let b=a.target.value.trim();b?T("parallelSubflowIdsVar",b):U("parallelSubflowIdsVar")},margin:"normal",helperText:n(ai?"flows.subflow.parallelVariableHelp":ab?"flows.subflow.parallelDisabledMap":"flows.subflow.parallelDisabledStatic")}),(0,d.jsx)(G.A,{sx:{display:"block",mt:1},control:(0,d.jsx)(bo.A,{checked:ab,disabled:!ah&&!ab,onChange:a=>{a.target.checked?T("mapOverList",!0):x(a=>{if(!a)return null;let{mapOverList:b,itemSplit:c,sequential:d,...e}=a.properties;return{...a,properties:e}})}}),label:n("flows.subflow.map")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:n(ah||ab?"flows.subflow.mapHelp":"flows.subflow.mapDisabled")}),ab&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"center",ml:4,mt:1},children:[(0,d.jsxs)(u.A,{label:n("flows.subflow.split"),select:!0,size:"small",sx:{width:240},value:w.properties?.itemSplit==="lines"?"lines":"json-array",onChange:a=>{"lines"===a.target.value?T("itemSplit","lines"):U("itemSplit")},helperText:n("flows.subflow.splitHelp"),children:[(0,d.jsx)(K.A,{value:"json-array",children:n("flows.subflow.jsonArray")}),(0,d.jsx)(K.A,{value:"lines",children:n("flows.subflow.lines")})]}),(0,d.jsx)(G.A,{control:(0,d.jsx)(bo.A,{checked:w.properties?.sequential===!0,onChange:a=>{a.target.checked?T("sequential",!0):U("sequential")}}),label:n("flows.subflow.sequential")})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:n("flows.subflow.workersTitle")}),(0,d.jsx)(G.A,{sx:{display:"block"},control:(0,d.jsx)(bo.A,{checked:ac,onChange:a=>T("allowCallerFanout",a.target.checked)}),label:n("flows.subflow.allowSpawn")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mb:1,ml:4,mt:-.5},children:n("flows.subflow.spawnHelp")}),(0,d.jsx)(u.A,{fullWidth:!0,label:n("flows.subflow.briefs"),value:E,onChange:a=>F(a.target.value),margin:"normal",multiline:!0,minRows:2,helperText:n("flows.subflow.briefsHelp")}),ae&&(0,d.jsxs)(i.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",mt:1},children:[(0,d.jsx)(u.A,{label:n("flows.subflow.maxCopies"),type:"number",size:"small",sx:{width:160},value:"number"==typeof w.properties?.concurrencyLimit?w.properties.concurrencyLimit:"",onChange:a=>{let b=a.target.value;if(""===b)x(a=>{if(!a)return null;let{concurrencyLimit:b,...c}=a.properties;return{...a,properties:c}});else{let a=Math.max(1,Math.floor(Number(b)));Number.isNaN(a)||T("concurrencyLimit",a)}},helperText:n("flows.subflow.defaultFour")}),(0,d.jsxs)(u.A,{label:n("flows.subflow.errorHandling"),select:!0,size:"small",sx:{width:220},value:w.properties?.errorStrategy==="fail-fast"?"fail-fast":"collect-all",onChange:a=>T("errorStrategy",a.target.value),helperText:n("flows.subflow.errorHelp"),children:[(0,d.jsx)(K.A,{value:"collect-all",children:n("flows.subflow.collect")}),(0,d.jsx)(K.A,{value:"fail-fast",children:n("flows.subflow.failFast")})]}),(0,d.jsx)(u.A,{label:n("flows.subflow.separator"),size:"small",sx:{width:260},multiline:!0,maxRows:2,value:"string"==typeof w.properties?.joinSeparator?w.properties.joinSeparator:"",onChange:a=>{let b=a.target.value;""===b?x(a=>{if(!a)return null;let{joinSeparator:b,...c}=a.properties;return{...a,properties:c}}):T("joinSeparator",b)},helperText:n("flows.subflow.blankLine")})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:n("flows.subflow.outputTitle")}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":n("flows.subflow.outputAria"),sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(b4,{selected:"final-only"!==(w.properties?.outputMode||"steps"),onClick:()=>T("outputMode","steps"),icon:(0,d.jsx)(b2.A,{}),title:n("flows.subflow.fullOutput"),description:n("flows.subflow.fullOutputHelp")}),(0,d.jsx)(b4,{selected:w.properties?.outputMode==="final-only",onClick:()=>T("outputMode","final-only"),icon:(0,d.jsx)(b3,{}),title:n("flows.subflow.condensed"),description:n("flows.subflow.condensedHelp")})]}),(0,d.jsx)(j.A,{variant:"subtitle2",sx:{mt:3,mb:1},children:n("flows.subflow.debugging")}),(0,d.jsx)(G.A,{sx:{display:"block"},control:(0,d.jsx)(H.A,{checked:w.properties?.saveConversation!==!1,onChange:a=>T("saveConversation",a.target.checked)}),label:n("flows.subflow.saveConversation")}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{ml:4,mt:-.5},children:n("flows.subflow.saveConversationHelp")}),(0,d.jsx)(I.A,{sx:{my:3}}),(0,d.jsx)(b7,{value:{captureVariable:J,captureResource:M,captureKvScope:P,captureKvKey:R},onChange:a=>{void 0!==a.captureVariable&&L(a.captureVariable),void 0!==a.captureResource&&N(a.captureResource),void 0!==a.captureKvScope&&Q(a.captureKvScope),void 0!==a.captureKvKey&&S(a.captureKvKey)}})]})]}),(0,d.jsxs)(v.A,{children:[X&&!Y&&g&&(0,d.jsx)(k.A,{onClick:()=>g(X),startIcon:(0,d.jsx)(cj,{}),children:n("flows.subflow.openTarget")}),(0,d.jsx)(i.default,{sx:{flex:1}}),(0,d.jsx)(k.A,{onClick:c,children:n("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(b&&w){if("guided"===l){f(b.id,w),c();return}let a=E.split("\n").map(a=>a.trim()).filter(a=>""!==a),d={...w.properties};a.length>0?d.spawnBriefs=a:delete d.spawnBriefs;let e=J.trim();e?d.captureVariable=e:delete d.captureVariable;let g=M.trim();g?d.captureResource=g:delete d.captureResource;let h=aK(P,R);h?d.captureKv=h:delete d.captureKv,f(b.id,{...w,properties:d}),c()}},variant:"contained",color:"primary",children:n("flows.modal.save")})]})]})};var cn=c(86374),co=c(74419),cp=c(15426),cq=c(35406);let cr=(0,L.h)("frontend/components/Flow/FlowManager/FlowBuilder/Modals/ResourceNodePropertiesModal"),cs=({open:a,node:b,onClose:c,onSave:f,flowNodes:g})=>{let{t:h}=(0,ak.s9)(),[l,m]=(0,e.useState)(null),{servers:n,isLoading:p}=(0,bw.v)(),[t,w]=(0,e.useState)([]),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null),[B,C]=(0,e.useState)(!1);(0,e.useEffect)(()=>{if(b){m({...b.data,properties:{scope:"run",...b.data.properties}});let a=!!b.data.label&&"Resource Node"!==b.data.label.trim(),c=!!b.data.description&&b.data.description.trim().length>0;C(a||c)}},[b,a]);let D=l?.properties?.scope==="mcp"?"mcp":"run",E=l?.properties?.boundServer||"",H=l?.properties?.uri||"",I=l?.properties?.runName||"",J=(0,e.useMemo)(()=>{let a=(g??[]).filter(a=>a.id!==b?.id).map(a=>{try{return JSON.stringify(a.data?.properties??{})}catch{return""}});return(0,bt.jX)(a)},[g,b?.id]),L=(0,e.useCallback)((a,b)=>{m(c=>c?{...c,properties:{...c.properties,[a]:b}}:c)},[]);(0,e.useEffect)(()=>{if(!a||"mcp"!==D||!E){w([]),A(null);return}let b=!1;return y(!0),A(null),P.S.listServerResources(E).then(a=>{b||(a.error?(A(a.error),w([])):w([...(a.resources??[]).map(a=>({uri:a.uri,name:a.name,description:a.description,mimeType:a.mimeType})),...(a.resourceTemplates??[]).map(a=>({uri:a.uriTemplate,name:a.name?`${a.name} (${h("flows.resource.template")})`:`(${h("flows.resource.template")})`,description:a.description}))]))}).catch(a=>{b||(cr.warn(`Failed to browse resources of ${E}`,a),A(a instanceof Error?a.message:String(a)))}).finally(()=>{b||y(!1)}),()=>{b=!0}},[a,D,E,h]);let M="run"===D&&!!I.trim()&&!aG(I.trim());return l?(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:h("flows.resource.title")}),(0,d.jsx)(s.A,{children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,mt:1,children:[(0,d.jsxs)(bf.A,{children:[(0,d.jsxs)(cn.A,{row:!0,value:D,onChange:a=>L("scope","mcp"===a.target.value?"mcp":"run"),children:[(0,d.jsx)(G.A,{value:"run",control:(0,d.jsx)(co.A,{}),label:h("flows.resource.temporary")}),(0,d.jsx)(G.A,{value:"mcp",control:(0,d.jsx)(co.A,{}),label:h("flows.resource.mcp")})]}),(0,d.jsx)(bB.A,{children:"mcp"===D?h("flows.resource.mcpHelp"):h("flows.resource.temporaryHelp")})]}),"mcp"===D?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(bf.A,{fullWidth:!0,children:[(0,d.jsx)(bg.A,{id:"resource-server-label",children:h("flows.resource.server")}),(0,d.jsxs)(bh.A,{labelId:"resource-server-label",label:h("flows.resource.server"),value:E,onChange:a=>{L("boundServer",a.target.value)},children:[p&&(0,d.jsx)(K.A,{value:"",disabled:!0,children:h("flows.resource.loadingServers")}),n.map(a=>(0,d.jsx)(K.A,{value:a.name,children:a.name},a.name))]})]}),(0,d.jsx)(u.A,{label:h("flows.resource.uri"),value:H,onChange:a=>L("uri",a.target.value),fullWidth:!0,placeholder:h("flows.resource.uriPlaceholder"),helperText:h("flows.resource.uriHelp")}),x&&(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",gap:1,children:[(0,d.jsx)(F.default,{size:18}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:h("flows.resource.loading")})]}),z&&(0,d.jsx)(j.A,{variant:"body2",color:"warning.main",children:h("flows.resource.loadFailed",{error:z})}),!x&&!z&&E&&0===t.length&&(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:h("flows.resource.none")}),t.length>0&&(0,d.jsx)(au.A,{dense:!0,sx:{maxHeight:240,overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:t.map(a=>(0,d.jsxs)(ax.A,{selected:a.uri===H,onClick:()=>L("uri",a.uri),children:[(0,d.jsx)(av.A,{sx:{minWidth:34},children:(0,d.jsx)(ad.A,{fontSize:"small",sx:{color:"#009688"}})}),(0,d.jsx)(aw.A,{primary:a.name||a.uri,secondary:a.name?a.uri:a.description,secondaryTypographyProps:{sx:{wordBreak:"break-all"}}})]},a.uri))})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(cp.A,{freeSolo:!0,options:J,inputValue:I,onInputChange:(a,b)=>L("runName",b),renderInput:a=>(0,d.jsx)(u.A,{...a,label:h("flows.resource.temporaryName"),fullWidth:!0,error:M,helperText:M?h("flows.resource.invalidName"):J.length>0?h("flows.resource.nameSuggestions"):h("flows.resource.nameHelp")})}),I.trim()&&!M&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:h("flows.resource.runtimeUri",{name:I.trim()})})]}),(0,d.jsx)(cq.A,{component:"button",type:"button",underline:"hover",onClick:()=>C(a=>!a),sx:{alignSelf:"flex-start"},children:B?h("flows.resource.hideAdvanced"):h("flows.resource.showAdvanced")}),(0,d.jsx)(o.A,{in:B,unmountOnExit:!0,children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,children:[(0,d.jsx)(u.A,{label:h("flows.resource.label"),value:l.label,onChange:a=>m({...l,label:a.target.value}),fullWidth:!0,helperText:h("flows.resource.labelHelp")}),(0,d.jsx)(u.A,{label:h("flows.resource.description"),value:l.description??"",onChange:a=>m({...l,description:a.target.value}),fullWidth:!0,multiline:!0,minRows:2})]})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:h("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(!b||!l)return;let a={...l.properties};"run"===D?(delete a.boundServer,delete a.uri,delete a.mimeType,a.scope="run",a.runName=I.trim()):(delete a.runName,a.scope="mcp");let c=(l.label??"").trim()||("run"===D?I.trim()||h("flows.resource.temporary"):h("flows.resource.mcp"));f(b.id,{...l,label:c,properties:a})},variant:"contained",children:h("flows.modal.save")})]})]}):null},ct=({open:a,node:b,onClose:c,onSave:f})=>{let{t:g}=(0,ak.s9)(),[h,j]=(0,e.useState)(null),[l,m]=(0,e.useState)(!1);(0,e.useEffect)(()=>{b&&(j({...b.data,properties:{...b.data.properties}}),m(!!b.data.properties?.payloadTemplate))},[b,a]);let n=(a,b)=>{j(c=>c?{...c,properties:{...c.properties,[a]:b}}:c)};if(!h)return null;let t=h.properties?.topic??"",w=h.properties?.payloadTemplate??"";return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:g("flows.signal.title")}),(0,d.jsx)(s.A,{children:(0,d.jsxs)(i.default,{display:"flex",flexDirection:"column",gap:2,mt:1,children:[(0,d.jsx)(u.A,{label:g("flows.signal.name"),value:t,onChange:a=>n("topic",a.target.value),fullWidth:!0,required:!0,autoFocus:!0,error:!t.trim(),placeholder:g("flows.signal.placeholder"),helperText:t.trim()?g("flows.signal.nameHelp"):g("flows.signal.required")}),(0,d.jsx)(p.A,{severity:"info",children:g("flows.signal.behavior")}),(0,d.jsx)(cq.A,{component:"button",type:"button",underline:"hover",onClick:()=>m(a=>!a),sx:{alignSelf:"flex-start"},children:l?g("flows.signal.hideAdvanced"):g("flows.signal.showAdvanced")}),(0,d.jsx)(o.A,{in:l,unmountOnExit:!0,children:(0,d.jsx)(u.A,{label:g("flows.signal.payload"),value:w,onChange:a=>n("payloadTemplate",a.target.value),fullWidth:!0,multiline:!0,minRows:3,placeholder:g("flows.signal.payloadPlaceholder"),helperText:g("flows.signal.payloadHelp")})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:g("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:()=>{if(!b||!h)return;let a={...h.properties},c="string"==typeof a.topic?a.topic.trim():"";a.topic=c;let d=c||g("flows.signal.defaultName");f(b.id,{...h,label:d,properties:a})},variant:"contained",children:g("flows.modal.save")})]})]})};var cu=c(98540),cv=c(21704),cw=c(46410),cx=c(62350),cy=c(15059),cz=c(34413),cA=c(63654),cB=c(87113),cC=c(62185),cD=c(91283),cE=c(3391),cF=c(88839),cG=c(72748),cH=c(72535);let cI=(0,L.h)("frontend/components/FlowBuilder/Modals/TriggerNodePropertiesModal"),cJ={type:"schedule",cron:"0 9 * * *"},cK={type:"file-watch",path:"",events:["add","change"]},cL={type:"mcp-poll",serverName:"",toolName:"",args:{},cron:"*/5 * * * *",evaluate:{mode:"on-change"}},cM={type:"url-watch",url:"",cron:"*/15 * * * *"},cN={type:"flow-event",source:{flowId:""},on:["completed"]},cO=({open:a,node:b,flowId:c,onClose:f,onSave:g})=>{let{t:h}=(0,ak.s9)(),[l,n]=(0,e.useState)(h("flows.trigger.defaultName")),[o,t]=(0,e.useState)(!0),[w,x]=(0,e.useState)(cJ),[y,z]=(0,e.useState)("skip"),[A,B]=(0,e.useState)(""),[C,D]=(0,e.useState)(!1),[E,J]=(0,e.useState)(null),[L,M]=(0,e.useState)([]),[N,P]=(0,e.useState)(()=>crypto.randomUUID()),[Q,R]=(0,e.useState)(!1);(0,e.useEffect)(()=>{if(!a||!b)return;J(null);let c=b.data.properties||{};n("string"==typeof c.name?c.name:h("flows.trigger.defaultName")),t(!1!==c.enabled),x(c.trigger||cJ),z(c.overlapStrategy||"skip"),B("string"==typeof c.prompt?c.prompt:""),"string"==typeof c.executionId&&c.executionId?(P(c.executionId),R(!0)):(P(crypto.randomUUID()),R(!1))},[a,b,h]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return O.g.loadFlows().then(a=>{b||M(a||[])}).catch(()=>{b||M([])}),()=>{b=!0}},[a]);let S=(0,e.useCallback)(async()=>{if(!b)return;D(!0),J(null);let a={name:l.trim()||h("flows.trigger.defaultName"),flowId:c,prompt:A,overlapStrategy:y,trigger:w,enabled:o};try{let c;if(!(c=Q?await cA.P.update(N,a):await cA.P.create({...a,id:N})).success){J(c.error||h("flows.trigger.saveFailed")),D(!1);return}R(!0);let d=l.trim()||h("flows.trigger.defaultNode");g(b.id,{...b.data,label:d,type:"trigger",properties:{executionId:N,name:l,enabled:o,trigger:w,overlapStrategy:y,prompt:A}})}catch(a){J(a instanceof Error?a.message:h("flows.trigger.saveFailed")),D(!1);return}D(!1),cI.info(`TriggerNodePropertiesModal: Saved trigger node for executionId=${N}`)},[b,N,l,o,w,y,A,c,Q,g,h]);return b?(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(q.A,{open:a,onClose:f,maxWidth:"md",fullWidth:!0,PaperProps:{sx:{borderTop:5,borderColor:"#E91E63",maxWidth:"95vw",maxHeight:"90vh"}},children:[(0,d.jsx)(r.A,{component:"div",children:(0,d.jsxs)(i.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(j.A,{variant:"h6",children:h("flows.trigger.title")}),(0,d.jsx)(m.A,{edge:"end",color:"inherit",onClick:f,"aria-label":h("flows.modal.close"),children:(0,d.jsx)(bs.A,{})})]})}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(s.A,{sx:{p:3},children:[(0,d.jsxs)(p.A,{severity:"info",sx:{mb:2},children:[h("flows.trigger.info"),!Q&&(0,d.jsxs)(d.Fragment,{children:[" ",h("flows.trigger.createdOnSave")]})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:h("flows.trigger.name"),value:l,onChange:a=>n(a.target.value),margin:"normal",placeholder:h("flows.trigger.namePlaceholder")}),(0,d.jsx)(G.A,{control:(0,d.jsx)(H.A,{checked:o,onChange:a=>t(a.target.checked),color:"primary"}),label:h("flows.trigger.enabled"),sx:{mt:1,mb:1}}),(0,d.jsx)(j.A,{variant:"subtitle1",sx:{mt:2,mb:1,fontWeight:600},children:h("flows.trigger.when")}),(0,d.jsxs)(i.default,{role:"radiogroup","aria-label":h("flows.trigger.typeAria"),sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(cB.A,{selected:"schedule"===w.type,onClick:()=>{"schedule"!==w.type&&x(cJ)},icon:(0,d.jsx)(cu.A,{}),title:h("flows.trigger.schedule"),description:h("flows.trigger.scheduleHelp")}),(0,d.jsx)(cB.A,{selected:"webhook"===w.type,onClick:()=>{"webhook"!==w.type&&x({type:"webhook",token:crypto.randomUUID()})},icon:(0,d.jsx)(cv.A,{}),title:h("flows.trigger.webhook"),description:h("flows.trigger.webhookHelp")}),(0,d.jsx)(cB.A,{selected:"file-watch"===w.type,onClick:()=>{"file-watch"!==w.type&&x(cK)},icon:(0,d.jsx)(cw.A,{}),title:h("flows.trigger.files"),description:h("flows.trigger.filesHelp")}),(0,d.jsx)(cB.A,{selected:"mcp-poll"===w.type,onClick:()=>{"mcp-poll"!==w.type&&x(cL)},icon:(0,d.jsx)(cx.A,{}),title:h("flows.trigger.tool"),description:h("flows.trigger.toolHelp")}),(0,d.jsx)(cB.A,{selected:"url-watch"===w.type,onClick:()=>{"url-watch"!==w.type&&x(cM)},icon:(0,d.jsx)(cy.A,{}),title:h("flows.trigger.url"),description:h("flows.trigger.urlHelp")}),(0,d.jsx)(cB.A,{selected:"flow-event"===w.type,onClick:()=>{"flow-event"!==w.type&&x(cN)},icon:(0,d.jsx)(cz.A,{}),title:h("flows.trigger.flow"),description:h("flows.trigger.flowHelp")})]}),"schedule"===w.type&&(0,d.jsx)(cC.A,{cron:w.cron,timezone:w.timezone,onChange:({cron:a,timezone:b})=>x({...w,cron:a,timezone:b}),catchUp:!0===w.catchUp,onCatchUpChange:a=>x({...w,catchUp:a})}),"webhook"===w.type&&(0,d.jsx)(cD.A,{config:w,onChange:x,executionId:N,saved:Q}),"file-watch"===w.type&&(0,d.jsx)(cE.A,{config:w,onChange:x}),"mcp-poll"===w.type&&(0,d.jsx)(cF.A,{config:w,onChange:x}),"url-watch"===w.type&&(0,d.jsx)(cG.A,{config:w,onChange:x}),"flow-event"===w.type&&(0,d.jsx)(cH.A,{config:w,onChange:x,flows:L,currentExecutionId:N}),(0,d.jsxs)(bf.A,{fullWidth:!0,margin:"normal",children:[(0,d.jsx)(bg.A,{id:"overlap-strategy-label",children:h("flows.trigger.overlap")}),(0,d.jsxs)(bh.A,{labelId:"overlap-strategy-label",label:h("flows.trigger.overlap"),value:y,onChange:a=>z(a.target.value),children:[(0,d.jsx)(K.A,{value:"skip",children:h("flows.trigger.overlapSkip")}),(0,d.jsx)(K.A,{value:"queue",children:h("flows.trigger.overlapQueue")}),(0,d.jsx)(K.A,{value:"parallel",children:h("flows.trigger.overlapParallel")}),(0,d.jsx)(K.A,{value:"error",children:h("flows.trigger.overlapError")})]})]}),(0,d.jsx)(u.A,{fullWidth:!0,label:h("flows.trigger.prompt"),value:A,onChange:a=>B(a.target.value),margin:"normal",multiline:!0,minRows:2,placeholder:h("flows.trigger.promptPlaceholder"),helperText:h("flows.trigger.promptHelp")}),E&&(0,d.jsx)(p.A,{severity:"error",sx:{mt:2},children:E})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:f,disabled:C,children:h("flows.modal.cancel")}),(0,d.jsx)(k.A,{onClick:S,variant:"contained",disabled:C,startIcon:C?(0,d.jsx)(F.default,{size:16}):void 0,sx:{backgroundColor:"#E91E63","&:hover":{backgroundColor:"#C2185B"}},children:C?h("flows.builder.saving"):h("flows.modal.save")})]})]})}):null};var cP=c(11939),cQ=c(46973);let cR=({flow:a})=>{let b=(0,h.A)(),c=(0,e.useMemo)(()=>(a.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[a.edges]),f=(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:b.palette.text.secondary,strokeWidth:2},markerEnd:{type:cQ.TG.ArrowClosed,width:20,height:20,color:b.palette.text.secondary}}),[b.palette.text.secondary]);return(0,d.jsx)(M.Gc,{nodes:a.nodes||[],edges:c,nodeTypes:Z.c_,edgeTypes:Z.nd,defaultEdgeOptions:f,connectionLineType:cQ.Do.SmoothStep,fitView:!0,minZoom:.1,maxZoom:2,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},children:(0,d.jsx)(M.VS,{})})},cS=a=>(0,d.jsx)(M.Ln,{children:(0,d.jsx)(cR,{...a})}),cT=(0,L.h)("components/flow/FlowBuilder/Modals/FlowVersionHistoryDialog"),cU=({open:a,flowId:b,onClose:c,onRestore:g})=>{let{t:h,tp:l,formatDate:m}=(0,ak.s9)(),[n,o]=(0,e.useState)(!1),[p,t]=(0,e.useState)([]),[u,w]=(0,e.useState)(null),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(null);(0,e.useEffect)(()=>{if(!a||!b)return;let c=!1;return o(!0),t([]),w(null),A(null),O.g.listFlowVersions(b).then(a=>{c||t(a)}).finally(()=>{c||o(!1)}),()=>{c=!0}},[a,b]);let B=(0,e.useCallback)(a=>{b&&(w(a),y(!0),A(null),O.g.getFlowVersion(b,a).then(b=>{b?A(b.flow):cT.warn(`Version ${a} could not be loaded (pruned?)`)}).finally(()=>y(!1)))},[b]),C=(0,e.useCallback)(()=>{z&&g(z)},[z,g]);return(0,d.jsxs)(q.A,{open:a,onClose:c,maxWidth:"lg",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:h("flows.history.title")}),(0,d.jsx)(s.A,{dividers:!0,sx:{p:0},children:(0,d.jsxs)(i.default,{sx:{display:"flex",height:"65vh"},children:[(0,d.jsx)(i.default,{sx:{width:300,borderRight:1,borderColor:"divider",overflowY:"auto"},children:n?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,d.jsx)(F.default,{size:28})}):0===p.length?(0,d.jsx)(i.default,{sx:{p:3},children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:h("flows.history.empty")})}):(0,d.jsx)(au.A,{disablePadding:!0,children:p.map((a,b)=>(0,d.jsxs)(f().Fragment,{children:[(0,d.jsx)(ax.A,{selected:a.versionId===u,onClick:()=>B(a.versionId),children:(0,d.jsx)(aw.A,{primary:(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{variant:"body2",children:m(a.savedAt,{dateStyle:"medium",timeStyle:"short"})}),0===b&&(0,d.jsx)(E.A,{label:h("flows.history.mostRecent"),size:"small"})]}),secondary:`${l("flows.history.node",a.nodeCount)} \xb7 ${l("flows.history.edge",a.edgeCount)}`})}),(0,d.jsx)(I.A,{component:"li"})]},a.versionId))})}),(0,d.jsx)(i.default,{sx:{flex:1,position:"relative",minWidth:0},children:x?(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,d.jsx)(F.default,{size:32})}):z?(0,d.jsx)(cS,{flow:z}):(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",p:4},children:(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",align:"center",children:0===p.length?h("flows.history.afterSave"):h("flows.history.select")})})})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:c,children:h("common.close")}),(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(cP.A,{}),onClick:C,disabled:!z,children:h("flows.history.restore")})]})]})},cV=(a,b,c,d)=>a?a(b,d):c,cW=(a,b,c,d)=>a?a(b,c):d,cX=a=>a.data?.bidirectional===!0,cY=a=>!(0,S.BY)(a),cZ=a=>String(a?.type??a?.data?.type??""),c$=a=>String(a?.data?.label??a?.id??"Unknown node");function c_(a,b,c,d,e,f){return f?{...f,id:a,source:b,target:c,sourceHandle:d,targetHandle:e,data:{...f.data??{},edgeType:"standard",bidirectional:!1},markerStart:void 0}:{id:a,source:b,target:c,sourceHandle:d,targetHandle:e,type:"custom",animated:!0,data:{edgeType:"standard"}}}function c0({open:a,processNodeId:b,parentFlow:c,existingFlowNames:f,onClose:g,onAccept:h}){let{t:l,tp:m,formatList:n}=(0,ak.s9)(),[o,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(null),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(null),D=()=>{b&&(C(null),y(function({parentFlow:a,processNodeId:b,subflowName:c,existingFlowNames:d=[],createId:e=N.A,t:f,tp:g}){let h=[],i=[],j=a.nodes??[],k=a.edges??[],l=new Map(j.map(a=>[a.id,a])),m=l.get(b),n=c.trim();m&&"process"===cZ(m)||h.push({code:"target-not-process",message:cV(f,"flows.convert.error.target","The selected node no longer exists or is not a Process node."),nodeId:b}),n?/^[\w-]+$/.test(n)?d.some(a=>a.toLowerCase()===n.toLowerCase())&&h.push({code:"duplicate-name",message:cV(f,"flows.convert.error.duplicateName",`A flow named "${n}" already exists.`,{name:n})}):h.push({code:"invalid-name",message:cV(f,"flows.convert.error.invalidName","The subflow name may contain only letters, numbers, underscores, and dashes.")}):h.push({code:"name-required",message:cV(f,"flows.convert.error.nameRequired","Enter a name for the new subflow.")});let o=new Set;m&&o.add(m.id);let p=m?[m.id]:[];for(;p.length>0;){let a=p.shift();for(let b of k){if(!cY(b))continue;let c=[];for(let d of(b.source===a&&c.push(b.target),cX(b)&&b.target===a&&c.push(b.source),c)){if(o.has(d))continue;let a=l.get(d);if(!a){h.push({code:"missing-edge-node",message:cV(f,"flows.convert.error.missingEdgeNode",`Edge "${b.id}" points to a missing node. Repair the flow before converting.`,{edge:b.id}),edgeId:b.id});continue}let c=cZ(a);"signal"===c?(o.add(d),p.push(d)):("mcp"===c||"resource"===c)&&h.push({code:"attachment-on-control-edge",message:cV(f,"flows.convert.error.attachmentControl",`${c$(a)} is connected as control flow. Reconnect it with its ${c.toUpperCase()} attachment handles before converting.`,{node:c$(a),type:c.toUpperCase()}),nodeId:d,edgeId:b.id})}}}let q=!0;for(;q;)for(let a of(q=!1,k)){if(!(0,S.BY)(a))continue;let b=o.has(a.source);if(b===o.has(a.target))continue;let c=b?a.target:a.source,d=cZ(l.get(c));"mcp"===d||"resource"===d?(o.add(c),q=!0):h.push({code:"unsupported-attachment",message:cV(f,"flows.convert.error.unsupportedAttachment",`Attachment edge "${a.id}" does not connect to an MCP or Resource node.`,{edge:a.id}),edgeId:a.id,nodeId:c})}let r=k.filter(a=>o.has(a.source)&&o.has(a.target)),s=[],t=[],u=new Set;for(let a of k){let b=o.has(a.source);if(b===o.has(a.target))continue;if((0,S.BY)(a)){h.push({code:"shared-attachment",message:cV(f,"flows.convert.error.sharedAttachment",`Attachment "${a.id}" is also used outside the converted region. Duplicate or disconnect that attachment first.`,{edge:a.id}),edgeId:a.id});continue}let c=b?a.source:a.target,d=b?a.target:a.source,e={edge:a,edgeId:a.id,insideNodeId:c,outsideNodeId:d,outsideLabel:c$(l.get(d))};u.add(d),b?t.push(e):s.push(e),cX(a)&&((b?s:t).push(e),h.push({code:"bidirectional-boundary",message:cV(f,"flows.convert.error.bidirectional",`Boundary edge "${a.id}" is bidirectional. Make it one-way before converting; internal bidirectional edges are preserved.`,{edge:a.id}),edgeId:a.id}))}let v=[...new Map(t.map(a=>[a.edgeId,a])).values()];v.length>1&&h.push({code:"multiple-outputs",message:cW(g,"flows.convert.error.outputs",v.length,`This region has ${v.length} distinct parent exits. A Subflow supports one outgoing control path; join the branches before converting.`)});let w=j.filter(a=>o.has(a.id)),x={includedNodes:w.map(a=>({id:a.id,label:c$(a),type:cZ(a)})),attachmentCount:w.filter(a=>"mcp"===cZ(a)||"resource"===cZ(a)).length,signalCount:w.filter(a=>"signal"===cZ(a)).length,internalEdgeCount:r.length,inputCount:new Set(s.map(a=>a.edgeId)).size,outputCount:v.length,excludedBoundaryNodes:[...u].map(a=>{let b=l.get(a);return{id:a,label:c$(b),type:cZ(b)}}),rewires:[cW(g,"flows.convert.rewire.inputs",new Set(s.map(a=>a.edgeId)).size,`${new Set(s.map(a=>a.edgeId)).size} parent input edge(s) will target the new Subflow node.`),1===v.length?cV(f,"flows.convert.rewire.output",`The parent output to ${v[0].outsideLabel} will leave the new Subflow node.`,{node:v[0].outsideLabel}):cV(f,"flows.convert.rewire.noOutput","The new Subflow node will have no parent output."),cV(f,"flows.convert.rewire.childInput","The child Start node will provide an isolated input to the converted Process.")],warnings:i};0===v.length&&i.push(cV(f,"flows.convert.warning.noFollowup","No parent follow-up exists; the extracted fan-out will finish inside the child flow."));let y=s.map(({edge:a,...b})=>b),z=t.map(({edge:a,...b})=>b),A={valid:0===h.length,errors:h,selectedNodeIds:[...o],selectedEdgeIds:r.map(a=>a.id),boundaryInputs:y,boundaryOutputs:z,preview:x};if(h.length>0||!m)return A;let B=e(),C=e(),D=e(),E=()=>`conversion-${e()}`,F=w.filter(a=>{let b=cZ(a);return"process"===b||"signal"===b}),G=Math.min(...w.map(a=>a.position.y),m.position.y),H=Math.max(...w.map(a=>a.position.y),m.position.y),I={id:C,type:"start",position:{x:m.position.x,y:G-180},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}},J={id:D,type:"finish",position:{x:m.position.x,y:H+180},data:{label:"Finish Node",type:"finish",properties:{}}},K=[...r.map(a=>({...a,data:a.data?{...a.data}:a.data})),c_(E(),C,m.id,"start-bottom","process-top")];if(1===v.length){let a=v[0];K.push(c_(E(),a.insideNodeId,D,"signal"===cZ(l.get(a.insideNodeId))?"signal-bottom":"process-bottom","finish-top",a.edge))}else{let a=F.filter(a=>!k.some(b=>!!cY(b)&&(!!(b.source===a.id&&o.has(b.target))||cX(b)&&b.target===a.id&&o.has(b.source)))),b=a.length>0?a:[m];for(let a of(b.length>1&&i.push(cW(g,"flows.convert.warning.branches",b.length,`${b.length} internal branches will converge on the child Finish node.`)),b))K.push(c_(E(),a.id,D,"signal"===cZ(a)?"signal-bottom":"process-bottom","finish-top"))}let L={id:B,name:n,description:`Converted from ${c$(m)} in ${a.name}`,nodes:[I,...w,J],edges:K},M={...m,type:"subflow",selected:!1,data:{label:n,type:"subflow",description:`Runs the ${n} subflow`,properties:{subflowId:B,inputMode:"isolated",outputMode:"final-only",allowCallerPrompt:!0}}},O=j.filter(a=>!o.has(a.id));O.push(M);let P=k.flatMap(a=>{let b=o.has(a.source),c=o.has(a.target);return b&&c?[]:b||c?(0,S.BY)(a)?[]:[{...a,source:b?M.id:a.source,target:c?M.id:a.target,sourceHandle:b?"subflow-bottom":a.sourceHandle,targetHandle:c?"subflow-top":a.targetHandle,data:a.data?{...a.data}:a.data}]:[a]}),Q={...a,nodes:O,edges:P};return{...A,valid:!0,childFlow:L,parentFlow:Q}}({parentFlow:c,processNodeId:b,subflowName:o,existingFlowNames:f,t:l,tp:m})))},F=async()=>{if(x?.valid&&x.childFlow&&x.parentFlow){A(!0),C(null);try{await h(x),g()}catch(a){C(a instanceof Error?a.message:l("flows.convert.saveFailed"))}finally{A(!1)}}};return(0,d.jsxs)(q.A,{open:a,onClose:z?void 0:g,fullWidth:!0,maxWidth:"md",children:[(0,d.jsx)(r.A,{children:x?l("flows.convert.previewTitle"):l("flows.convert.title")}),(0,d.jsx)(s.A,{children:x?(0,d.jsxs)(a$.A,{spacing:2,children:[x.errors.length>0&&(0,d.jsxs)(p.A,{severity:"error",children:[(0,d.jsx)(j.A,{fontWeight:600,children:l("flows.convert.invalid")}),(0,d.jsx)(au.A,{dense:!0,disablePadding:!0,children:x.errors.map((a,b)=>(0,d.jsx)(ay.Ay,{disableGutters:!0,children:(0,d.jsx)(aw.A,{primary:a.message})},`${a.code}-${b}`))})]}),B&&(0,d.jsx)(p.A,{severity:"error",children:B}),x.preview.warnings.map((a,b)=>(0,d.jsx)(p.A,{severity:"warning",children:a},`${a}-${b}`)),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:600,children:l("flows.convert.included",{name:o.trim()})}),(0,d.jsx)(a$.A,{direction:"row",gap:1,flexWrap:"wrap",sx:{mt:1},children:x.preview.includedNodes.map(a=>(0,d.jsx)(E.A,{label:`${a.label} \xb7 ${a.type}`,size:"small"},a.id))}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:l("flows.convert.summary",{attachments:m("flows.convert.attachment",x.preview.attachmentCount),signals:m("flows.convert.signal",x.preview.signalCount),edges:m("flows.convert.edge",x.preview.internalEdgeCount)})})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(i.default,{children:[(0,d.jsx)(j.A,{variant:"subtitle1",fontWeight:600,children:l("flows.convert.boundary")}),(0,d.jsx)(au.A,{dense:!0,children:x.preview.rewires.map(a=>(0,d.jsx)(ay.Ay,{disableGutters:!0,children:(0,d.jsx)(aw.A,{primary:a})},a))}),x.preview.excludedBoundaryNodes.length>0&&(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:l("flows.convert.keptParent",{nodes:n(x.preview.excludedBoundaryNodes.map(a=>`${a.label} (${a.type})`))})})]}),(0,d.jsx)(p.A,{severity:"info",children:l("flows.convert.atomic")})]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{sx:{mb:2},children:l("flows.convert.help")}),(0,d.jsx)(u.A,{autoFocus:!0,fullWidth:!0,label:l("flows.convert.name"),value:o,onChange:a=>w(a.target.value),onKeyDown:a=>{"Enter"===a.key&&D()}})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:g,disabled:z,children:x?l("flows.convert.reject"):l("flows.modal.cancel")}),x?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{y(null),C(null)},disabled:z,children:l("flows.convert.back")}),(0,d.jsx)(k.A,{variant:"contained",onClick:F,disabled:!x.valid||z,children:z?l("flows.convert.converting"):l("flows.convert.accept")})]}):(0,d.jsx)(k.A,{variant:"contained",onClick:D,children:l("flows.convert.preview")})]})]})}let c1=(0,w.A)((0,d.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z"}),"Save"),c2=(0,w.A)((0,d.jsx)("path",{d:"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8"}),"Undo"),c3=(0,w.A)((0,d.jsx)("path",{d:"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z"}),"Redo"),c4=(0,w.A)((0,d.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreHoriz");var c5=c(14570),c6=c(52399);let c7=(0,w.A)((0,d.jsx)("path",{d:"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z"}),"ArrowDownward"),c8=(0,w.A)((0,d.jsx)("path",{d:"M7.5 5.6 10 7 8.6 4.5 10 2 7.5 3.4 5 2l1.4 2.5L5 7zm12 9.8L17 14l1.4 2.5L17 19l2.5-1.4L22 19l-1.4-2.5L22 14zM22 2l-2.5 1.4L17 2l1.4 2.5L17 7l2.5-1.4L22 7l-1.4-2.5zm-7.63 5.29a.996.996 0 0 0-1.41 0L1.29 18.96c-.39.39-.39 1.02 0 1.41l2.34 2.34c.39.39 1.02.39 1.41 0L16.7 11.05c.39-.39.39-1.02 0-1.41zm-1.03 5.49-2.12-2.12 2.44-2.44 2.12 2.12z"}),"AutoFixHigh"),c9=(0,L.h)("frontend/components/Flow/FlowManager/ImproveFlowDialog"),da=({open:a,onClose:b,currentFlow:c,onImproved:f,initialDescription:g})=>{let{t:h}=(0,ak.s9)(),[j,l]=(0,e.useState)(""),[m,n]=(0,e.useState)([]),[o,w]=(0,e.useState)(""),[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(null);(0,e.useEffect)(()=>{a&&l(g??"")},[a,g]),(0,e.useEffect)(()=>{if(!a)return;let b=!1;return Q.N.loadModels().then(a=>{b||(n(a),w(b=>a.some(a=>a.id===b)?b:a[0]?.id??""))}).catch(a=>{c9.warn("Failed to load models for the improve dialog",a),b||C(h("flows.generator.modelsFailed"))}),()=>{b=!0}},[a,h]);let D=(0,e.useCallback)(()=>{z||(C(null),b())},[z,b]),E=(0,e.useCallback)(async()=>{C(null),A(!0);try{let a={...c,nodes:[...c.nodes],edges:[...c.edges]},b=await O.g.improveFlow(a,j.trim(),o,{allowInstall:x});if(!b.success)return void C(b.error);c9.info("Flow improved",{flowId:b.flow.id,attempts:b.attempts,errors:b.validation.errorCount,warnings:b.validation.warningCount,installedServers:b.installedServers.length}),l(""),f({flow:b.flow,errorCount:b.validation.errorCount,warningCount:b.validation.warningCount,attempts:b.attempts,installedServers:b.installedServers})}finally{A(!1)}},[c,j,o,x,f]),H=!z&&j.trim().length>0&&!!o;return(0,d.jsxs)(q.A,{open:a,onClose:D,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(r.A,{children:h("flows.improve.title")}),(0,d.jsxs)(s.A,{children:[(0,d.jsx)(t.A,{sx:{mb:2},children:h("flows.improve.description")}),B&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},onClose:()=>C(null),children:B}),(0,d.jsx)(u.A,{autoFocus:!0,fullWidth:!0,multiline:!0,minRows:4,label:h("flows.improve.change"),placeholder:h("flows.improve.placeholder"),value:j,onChange:a=>l(a.target.value),disabled:z,sx:{mb:2}}),(0,d.jsxs)(bf.A,{fullWidth:!0,disabled:z||0===m.length,children:[(0,d.jsx)(bg.A,{id:"improve-flow-model-label",children:h("flows.improve.model")}),(0,d.jsx)(bh.A,{labelId:"improve-flow-model-label",label:h("flows.improve.model"),value:o,onChange:a=>w(a.target.value),children:m.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName?.trim()||a.name},a.id))})]}),(0,d.jsx)(G.A,{sx:{mt:2},control:(0,d.jsx)(bo.A,{checked:x,onChange:a=>y(a.target.checked),disabled:z}),label:h("flows.improve.allowInstall")}),x&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:h("flows.improve.installWarning")}),z&&(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1.5,mt:2},children:[(0,d.jsx)(F.default,{size:20}),(0,d.jsx)(t.A,{children:x?h("flows.improve.workingInstall"):h("flows.improve.working")})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:D,disabled:z,children:h("flows.improve.cancel")}),(0,d.jsx)(k.A,{onClick:E,variant:"contained",color:"primary",startIcon:(0,d.jsx)(c8,{}),disabled:!H,children:h("flows.improve.action")})]})]})};var db=c(24856);let dc=a=>({source:`${a}-bottom`,target:`${a}-top`});function dd(a){return a.data?.type??a.type??"unknown"}let de=(0,w.A)((0,d.jsx)("path",{d:"M13 2H4c-1.1 0-2 .9-2 2v9c0 .55.45 1 1 1s1-.45 1-1V4h9c.55 0 1-.45 1-1s-.45-1-1-1m4 4H8c-1.1 0-2 .9-2 2v9c0 .55.45 1 1 1s1-.45 1-1V8h9c.55 0 1-.45 1-1s-.45-1-1-1m3 4h-8c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2"}),"AutoAwesomeMotionRounded");var df=c(49248);let dg=(0,w.A)((0,d.jsx)("path",{d:"M24 15c0-2.64-2.05-4.78-4.65-4.96C18.67 6.59 15.64 4 12 4c-1.33 0-2.57.36-3.65.97l1.49 1.49C10.51 6.17 11.23 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 .99-.48 1.85-1.21 2.4l1.41 1.41c1.09-.92 1.8-2.27 1.8-3.81M3.71 4.56c-.39.39-.39 1.02 0 1.41l2.06 2.06h-.42c-3.28.35-5.76 3.34-5.29 6.79C.46 17.84 3.19 20 6.22 20h11.51l1.29 1.29c.39.39 1.02.39 1.41 0s.39-1.02 0-1.41L5.12 4.56a.996.996 0 0 0-1.41 0M6 18c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73l8 8z"}),"CloudOffRounded");var dh=c(2560);let di=new Set(["maxTurns","excludeModelPrompt","excludeStartNodePrompt","excludeSystemPrompt","allowedTools","isolatedPrompt","allowCallerPrompt","enableTodoTool","captureVariable","captureResource","captureKv","resourceNodes"]),dj=new Set(["parallelSubflowIds","parallelSubflowIdsVar","mapOverList","itemSplit","sequential","allowCallerFanout","spawnBriefs","concurrencyLimit","joinSeparator","errorStrategy","allowCallerPrompt","saveConversation","captureVariable","captureResource","captureKv"]);function dk(a){if(void 0!==a.permissionRules)return!0;for(let b of a.nodes??[]){if(!["start","process","finish","subflow","mcp"].includes(b.type??""))return!0;let a=b.data?.properties??{},c=Object.keys(a);if("process"===b.type&&c.some(a=>di.has(a))||"subflow"===b.type&&c.some(a=>dj.has(a))||"process"===b.type&&(void 0!==a.inputMode&&"full-history"!==a.inputMode||void 0!==a.outputMode&&"latest-message"!==a.outputMode)||"subflow"===b.type&&(void 0!==a.inputMode&&"full-history"!==a.inputMode||void 0!==a.outputMode&&"final-only"!==a.outputMode))return!0}return(a.edges??[]).some(a=>{let b=a.data;return!!b?.condition||b?.bidirectional===!0||b?.edgeType==="resource"})}var dl=c(15863);let dm=(0,L.h)("components/flow/FlowBuilder/index.tsx"),dn=(0,C.Ay)(i.default)(({theme:a})=>({display:"flex",height:"100%",minHeight:0,gap:"12px",padding:"12px",overflow:"hidden",backgroundColor:"transparent",[a.breakpoints.down("md")]:{flexDirection:"column",gap:"8px",padding:"8px",height:"auto",overflow:"visible"}})),dp=(0,C.Ay)(D.A)(({theme:a})=>({padding:a.spacing(1.1),display:"flex",flexWrap:"wrap",gap:a.spacing(1),border:`1px solid ${a.palette.divider}`,borderRadius:14,alignItems:"center",marginBottom:a.spacing(1),backgroundColor:"dark"===a.palette.mode?"rgba(17, 22, 41, 0.86)":"rgba(255, 255, 255, 0.9)",boxShadow:"dark"===a.palette.mode?"0 16px 45px rgba(0,0,0,.25)":"0 16px 45px rgba(49,45,99,.1)",backdropFilter:"blur(20px) saturate(140%)"})),dq=(0,C.Ay)(i.default)(({theme:a})=>({flex:1,display:"flex",flexDirection:"column",position:"relative",overflow:"hidden",minWidth:0,minHeight:0,[a.breakpoints.down("md")]:{flex:"0 0 640px",height:640,overflow:"hidden"},[a.breakpoints.down("sm")]:{flexBasis:"auto",height:"auto",minHeight:0,overflow:"visible"}})),dr=new Set(["start","process","finish","subflow","signal"]),ds=(a,b)=>{let c=a.filter(a=>dr.has(a.data.type)),d=new Set(c.map(a=>a.id)),e=b.filter(a=>d.has(a.source)&&d.has(a.target)&&a.data?.edgeType!=="resource"),f=new Map,g=new Map;e.forEach(a=>{f.set(a.source,[...f.get(a.source)??[],a]),g.set(a.target,[...g.get(a.target)??[],a])});let h=c.filter(a=>"start"===a.data.type),i=c.filter(a=>"finish"===a.data.type),j=1!==h.length||i.length>1;c.forEach(a=>{let b=g.get(a.id)?.length??0,c=f.get(a.id)?.length??0;"start"===a.data.type?j||=0!==b||c>1:"finish"===a.data.type?j||=1!==b||0!==c:j||=1!==b||c>1});let k=[],l=new Set,m=h[0]?.id;for(;m&&!l.has(m);){l.add(m),k.push(m);let a=f.get(m)??[];if(1!==a.length)break;m=a[0].target}return{unsafe:j||=0===c.length||l.size!==c.length,orderedNodeIds:k}},dt=f().forwardRef(({initialFlow:a,onSave:b,onDelete:c,onConversionCommitted:g,allFlows:h,relatedDraftFlows:l=[],onRelatedDraftFlowsChange:w,isDraft:x=!1,onTry:z,onNavigateToFlow:A},B)=>{dm.debug("FlowBuilder rendered with initialFlow:",a);let{t:C,tp:D,formatList:L}=(0,ak.s9)(),[T,$]=(0,e.useState)(a?.nodes||[]),[_,aa]=(0,e.useState)((a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle)),[ab,ac]=(0,e.useState)(a?.name||C("flows.page.untitled")),[ad,ae]=(0,e.useState)(null),[af,ag]=(0,e.useState)(a?.description||""),ah=(0,e.useMemo)(()=>new Map(h.map(a=>[a.id,a.name])),[h]),ai=!!a&&(dk({nodes:a.nodes||[],edges:a.edges||[],permissionRules:a.permissionRules})||ds(a.nodes||[],a.edges||[]).unsafe),[aj,al]=(0,dh.Xk)("flujo-ui:flow-builder:mode","guided"),[am,an]=(0,e.useState)(()=>ai?"advanced":aj),ao=(0,e.useCallback)(a=>{an(a),al(a)},[al]),ap=(0,e.useRef)(0),aq=(0,e.useCallback)(a=>({...a,id:`permission-rule-${++ap.current}`}),[]),[as,at]=(0,e.useState)(()=>(a?.permissionRules||[]).map(aq)),[au,av]=(0,e.useState)(a?.permissionRules!==void 0),[aw,ax]=(0,e.useState)(!1),[ay,az]=(0,e.useState)(null),aA=dk({nodes:T,edges:_,permissionRules:a?.permissionRules}),aB=ds(T,_),aC=aA||aB.unsafe,[aD,aE]=(0,e.useState)(!1),[aF,aG]=(0,e.useState)("none"),[aH,aI]=(0,e.useState)(""),[aJ,aK]=(0,e.useState)(null),[aL,aM]=(0,e.useState)(!1),[aN,aO]=(0,e.useState)(!1),[aP,aQ]=(0,e.useState)(!1),[aR,aS]=(0,e.useState)(!1),[aT,aU]=(0,e.useState)(!1),[aV,aW]=(0,e.useState)(!1),[aX,aY]=(0,e.useState)(!1),[a$,a_]=(0,e.useState)(!1),[a0,a1]=(0,e.useState)(null),[a2,a3]=(0,e.useState)(null),[a4,a5]=(0,e.useState)("edit"),[a6,a7]=(0,e.useState)(null),[a8,a9]=(0,e.useState)(null),[ba,bb]=(0,e.useState)(!1),[bc,bd]=(0,e.useState)(null),[bf,bg]=(0,e.useState)(null),[bh,bi]=(0,e.useState)(""),[bj,bl]=(0,e.useState)(!1),[bm,bo]=(0,e.useState)([]),[bp,bq]=(0,e.useState)(-1),[bs,bt]=(0,e.useState)(!1),[bu,bv]=(0,e.useState)(!1),[bw,bx]=(0,e.useState)(x?"unsaved":"saved"),[by,bz]=(0,e.useState)([]),[bA,bB]=(0,e.useState)(null),[bC,bD]=(0,e.useState)(()=>x&&!(a?.nodes??[]).some(a=>"process"===a.data.type)?"unasked":"manual"),[bE,bF]=(0,e.useState)(!1),[bG,bH]=(0,e.useState)(null),bI=(0,e.useRef)(a?.id??(0,N.A)()),bJ=(0,e.useRef)(0),bK=(0,e.useRef)(null),bL=(0,e.useRef)(T.some(a=>"trigger"===a.type));bL.current=T.some(a=>"trigger"===a.type);let bM=(0,e.useRef)(null),bN=(0,e.useRef)(!1),bO=(0,e.useRef)(!0);(0,e.useEffect)(()=>{let a=!0;return Q.N.loadModels().then(b=>{a&&(bz(b),0===b.length&&bD(a=>"unasked"===a?"manual":a))}).catch(b=>{dm.warn("Could not load connected AIs for Guided mode",b),a&&(bz([]),bD(a=>"unasked"===a?"manual":a))}),()=>{a=!1}},[]);let bP=(0,e.useCallback)(a=>a.filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle).map(a=>a.data?.edgeType==="resource"&&"resourceEdge"!==a.type?{...a,type:"resourceEdge"}:a),[]);(0,e.useEffect)(()=>{if(bO.current=!0,bJ.current=0,bv(!1),bx(x?"unsaved":"saved"),a){let b=a.nodes||[],c=x?b.map(a=>({...a,selected:!1})):b;$(c);let d=bP(a.edges||[]);d.length!==a.edges.length&&console.warn(`Filtered out ${a.edges.length-d.length} invalid edges`),aa(d),ac(a.name),ag(a.description||""),at((a.permissionRules||[]).map(aq)),av(void 0!==a.permissionRules),az(null),(dk({nodes:b,edges:d,permissionRules:a.permissionRules})||ds(b,d).unsafe)&&ao("advanced"),bo([{nodes:c,edges:d}]),bq(0)}else{let a=O.g.createStartNode();$([a]),aa([]),ac(C("flows.page.untitled")),ag(""),at([]),av(!1),az(null),bo([{nodes:[a],edges:[]}]),bq(0)}},[a?.id,aq,ao]);let bQ=a=>JSON.stringify(a,(a,b)=>"selected"===a||"dragging"===a||"measured"===a||"width"===a||"height"===a||"positionAbsolute"===a||"resizing"===a?void 0:b);(0,e.useEffect)(()=>{if(bs)return void bt(!1);if(bO.current){bO.current=!1;return}if(bN.current)return;let a={nodes:[...T],edges:[..._]},b=bm.slice(0,bp+1);(bp<0||bQ(a)!==bQ(b[bp]))&&(bo([...b,a]),bq(bp+1),bv(!0),bJ.current+=1,bx("unsaved"))},[T,_]),(0,e.useEffect)(()=>{let a=a=>{if(bu)return a.preventDefault(),a.returnValue="",""};return window.addEventListener("beforeunload",a),()=>{window.removeEventListener("beforeunload",a)}},[bu]);let bR=b=>b.trim()?/^[\p{L}\p{N}_ -]+$/u.test(b.trim())?(!a||a&&a.name!==b)&&h.some(c=>c.id!==(a?.id||"")&&c.name.trim().toLowerCase()===b.trim().toLowerCase())?C("flows.page.nameDuplicate"):null:C("flows.page.nameCharacters"):C("flows.page.nameEmpty"),bS=(0,e.useCallback)(()=>{bv(!0),bJ.current+=1,bx("unsaved")},[]),bT=(a,b)=>{at(c=>c.map(c=>c.id===a?{...c,...b}:c)),av(!0),az(null),bS()},bU=(a,b)=>{let c=a+b;c<0||c>=as.length||(at(b=>{let d=[...b];return[d[a],d[c]]=[d[c],d[a]],d}),av(!0),bS())},bV=(0,e.useCallback)(()=>au?as.map(({id:a,...b})=>b):void 0,[as,au]),bW=(0,e.useCallback)(()=>!as.find(a=>!a.action.trim()||!a.resource.trim())||(az(C("flows.builder.permissionInvalid")),ax(!0),!1),[as,C]),bX=(0,e.useCallback)(()=>{if(bK.current)return bK.current;let c=(async()=>{dm.debug(`handleSave: Attempting to save flow "${ab}"`);let c=bR(ab);if(c)return dm.warn(`handleSave: Invalid flow name - ${c}`),ae(c),"invalid-name";if(!bW())return"invalid-name";let d=[...T];0===d.length&&(dm.debug("handleSave: No nodes found, adding a default Start node"),$(d=[O.g.createStartNode()]));let e={id:a?.id||(0,N.A)(),name:ab.trim(),description:af,nodes:d,edges:_,folder:a?.folder,favorite:a?.favorite,permissionRules:bV()};dm.info(`handleSave: Saving flow "${ab}" with ${d.length} nodes and ${_.length} edges`);let f=bJ.current;bx("saving");try{let a=await b(e);if(!1===a)return bx("error"),"failed";return bJ.current===f?(bv(!1),bx("saved")):(bv(!0),bx("unsaved")),"saved"}catch(a){return dm.error("handleSave: Persistence failed",a),bx("error"),bv(!0),"failed"}})();return bK.current=c,c.finally(()=>{bK.current===c&&(bK.current=null)}),c},[ab,af,T,_,a,b,bV,bW]),bY=(0,e.useCallback)(async()=>{z&&((x||bu||"saved"!==bw)&&"saved"!==await bX()||z())},[z,x,bu,bw,bX]),bZ=(0,e.useCallback)(a=>{bu?(bM.current=a,aG("unsaved"),aE(!0)):a()},[bu]);f().useImperativeHandle(B,()=>({requestNavigation:bZ}),[bZ]);let b$=(0,e.useCallback)(()=>{a?(dm.info(`handleDelete: Deleting flow "${a.name}" (ID: ${a.id})`),c(a.id)):dm.warn("handleDelete: Attempted to delete flow but no initialFlow is available")},[a,c]),b_=(0,e.useCallback)(a=>{dm.info("Applying AI-improved flow to the canvas",{flowId:a.flow.id,attempts:a.attempts,errors:a.errorCount,warnings:a.warningCount}),bb(!1),$(a.flow.nodes||[]),aa(bP(a.flow.edges||[])),ac(a.flow.name),ag(a.flow.description||""),void 0!==a.flow.permissionRules&&(at(a.flow.permissionRules.map(aq)),av(!0)),ae(bR(a.flow.name)),bv(!0);let b=a.installedServers.filter(a=>!a.alreadyExisted),c=b.length>0?C("flows.builder.installNote",{servers:L(b.map(a=>a.name))}):"";a.errorCount>0?bd({severity:"warning",message:C("flows.builder.revisedIssues",{errors:D("flows.validation.error",a.errorCount),warnings:D("flows.validation.warning",a.warningCount),installNote:c})}):a.warningCount>0?bd({severity:"info",message:C("flows.builder.revisedWarnings",{warnings:D("flows.validation.warning",a.warningCount),installNote:c})}):bd({severity:"success",message:C("flows.builder.revisedClean",{installNote:c})})},[bP,L,C,D]),b0=(0,e.useCallback)(a=>{dm.info("Restoring an archived flow version to the canvas",{flowId:a.id,nodes:a.nodes?.length??0,edges:a.edges?.length??0}),bl(!1),$(a.nodes||[]),aa(bP(a.edges||[])),ac(a.name),ag(a.description||""),at((a.permissionRules||[]).map(aq)),av(void 0!==a.permissionRules),ae(bR(a.name)),bv(!0),bd({severity:"info",message:C("flows.builder.restored")})},[bP,C]),b1=(0,e.useCallback)(()=>{bg(null);let{flow:b,changes:c}=function(a){var b,c;let d=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),e=[...a?.edges??[]],f={...a,nodes:d,edges:e},g=[],h=function(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,f=new Map,g=new Set;for(let a of c)e.set(a.id,0),f.set(a.id,0);let h=(a,b)=>{g.add(`${a}->${b}`),f.set(a,(f.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(h(a.from,a.to),a.bidirectional&&h(a.to,a.from));let i=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=i[i.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):i.push([a])}let j=new Map;i.forEach((a,b)=>a.forEach(a=>j.set(a.id,b)));let k=new Map;for(let a=1;a<i.length;a++){let b=i[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=i[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)k.set(a.id,b[0].id)}}let l=[],m=(a,b)=>{if(a===b||g.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==(0,S.vC)(c.type,dc(c.type).source,e.type,dc(e.type).target)||"subflow"===c.type&&(f.get(a)??0)>=1)},n=(a,b,c,d)=>{l.push({from:a,to:b,bidirectional:c,reason:d}),h(a,b),c&&h(b,a)},o=a=>{let b=j.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=i[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!k.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of i)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=k.get(b.id);if(a){m(a,b.id)&&n(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=o(b);c&&m(c.id,b.id)&&n(c.id,b.id,!1,"auto-connected")}let p=c.filter(a=>"start"===a.type),q=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!k.has(a.id)&&(e.get(a.id)??0)===0),r=null;if(0===p.length){let a=q();if(a.length>0)r={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(r={targets:[a.id]})}}else{let a=p[0];for(let b of q())m(a.id,b.id)&&n(a.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"finish"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!k.has(a.id)&&(f.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();a.length>0&&(u={sources:a.map(a=>a.id)})}else{let a=s[0];for(let b of t())m(b.id,a.id)&&n(b.id,a.id,!1,"auto-connected")}return{addEdges:l,addStart:r,addFinish:u}}(d.filter(a=>"mcp"!==dd(a)&&"resource"!==dd(a)).map(a=>({id:a.id,type:dd(a),x:a.position?.x??0,y:a.position?.y??0})),e.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),i=new Map(d.map(a=>[a.id,a])),j=(a,b,c)=>{let d=i.get(a),f=i.get(b);d&&f&&e.push((0,db.pX)(d,f,c))};for(let a of h.addEdges)j(a.from,a.to,a.bidirectional),g.push({code:a.reason,message:function(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}(a.reason),nodeId:a.to});if(h.addStart){let a=h.addStart.targets.map(a=>i.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,N.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(d.unshift(c),i.set(c.id,c),h.addStart.targets))j(c.id,a,!1);g.push({code:"auto-added-start",message:`Added a Start node connected to ${h.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(h.addFinish){let a=h.addFinish.sources.map(a=>i.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,N.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(d.push(b),i.set(b.id,b),h.addFinish.sources))j(a,b.id,!1);g.push({code:"auto-added-finish",message:`Added a Finish node connected from ${h.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:f,changes:g}}({id:a?.id||"",name:ab,description:af,nodes:T,edges:_,folder:a?.folder,favorite:a?.favorite,permissionRules:bV()});if(0===c.length)return void bd({severity:"info",message:C("flows.builder.nothingRepair")});dm.info(`Applying static auto-repair to the canvas (${c.length} change(s))`),$(b.nodes||[]),aa(bP(b.edges||[])),bv(!0);let d=c.filter(a=>"auto-added-start"===a.code||"auto-added-finish"===a.code).length,e=c.length-d,f=[];c.some(a=>"auto-added-start"===a.code)&&f.push(C("flows.builder.repairAddedStart")),c.some(a=>"auto-added-finish"===a.code)&&f.push(C("flows.builder.repairAddedFinish")),e>0&&f.push(D("flows.builder.repairConnected",e)),bd({severity:"success",message:C("flows.builder.repaired",{changes:L(f)})})},[a,ab,af,T,_,bP,bV,L,C,D]),b2=(0,e.useCallback)(()=>{bg(null),bi(C("flows.builder.aiRepairPrompt")),bb(!0)},[C]),b3=(0,e.useCallback)(async(a,c)=>{dm.debug(`handleCopyFlow: Copying flow "${a.name}" to "${c}"`);let d={id:(0,N.A)(),name:c,description:a.description,nodes:a.nodes,edges:a.edges,folder:a.folder,favorite:a.favorite,permissionRules:a.permissionRules};return dm.info(`handleCopyFlow: Created copy of flow "${a.name}" with new name "${c}" (${a.nodes.length} nodes, ${a.edges.length} edges)`),await b(d)!==!1},[b]),b4=()=>{let a=bM.current;bM.current=null,a&&a()},b5=()=>{bM.current=null,aE(!1),aG("none"),aI(""),aK(null)},b6=async()=>{let c=bR(aH);if(c)return void aK(c);if("duplicate"===aF){if(a&&!await b3(a,aH))return}else if("rename"===aF){let c={id:a?.id||(0,N.A)(),name:aH,description:af,nodes:T,edges:_,folder:a?.folder,favorite:a?.favorite,permissionRules:bV()};if(await b(c)===!1)return void bx("error");bv(!1),bx("saved"),b4()}b5()},b7=async()=>{let a=await bX();"saved"===a?(b4(),b5()):"invalid-name"===a&&b5()},b8=bp>0,b9=bp<bm.length-1,cb=(0,e.useCallback)(()=>{if(b8){dm.debug(`handleUndo: Performing undo operation, moving from history index ${bp} to ${bp-1}`),bt(!0);let a=bp-1,b=bm[a];$(b.nodes),aa(b.edges),bq(a),bS(),dm.info(`handleUndo: Restored flow state to previous version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[bm,bp,b8,bS]),cc=(0,e.useCallback)(()=>{if(b9){dm.debug(`handleRedo: Performing redo operation, moving from history index ${bp} to ${bp+1}`),bt(!0);let a=bp+1,b=bm[a];$(b.nodes),aa(b.edges),bq(a),bS(),dm.info(`handleRedo: Restored flow state to next version (${b.nodes.length} nodes, ${b.edges.length} edges)`)}},[bm,bp,b9,bS]);(0,e.useEffect)(()=>{let a=a=>{let b=a.target,c=b?.tagName==="INPUT"||b?.tagName==="TEXTAREA"||b?.isContentEditable,d=a.ctrlKey||a.metaKey,e=a.key.toLowerCase();if(d&&"s"===e){a.preventDefault(),bX();return}if(!c&&d&&"z"===e){a.preventDefault(),a.shiftKey?cc():cb();return}if(!c&&d&&"y"===e){a.preventDefault(),cc();return}c||(!d||"k"!==e)&&(d||"a"!==e&&"/"!==a.key)||(a.preventDefault(),document.dispatchEvent(new CustomEvent("openFlowQuickAdd")))};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[bX,cb,cc]);let cd=(0,e.useCallback)(async b=>{if(!a||!a8||!b.parentFlow||!b.childFlow)throw Error("Save the parent flow before converting a Process node.");let c=await O.g.convertProcessToSubflow(b.parentFlow,b.childFlow,a8,a.updatedAt);if(!c.success)throw Error(c.error);let d={nodes:c.parentFlow.nodes,edges:c.parentFlow.edges},e=[...bm.slice(0,bp+1),d];bt(!0),bo(e),bq(e.length-1),$(c.parentFlow.nodes),aa(c.parentFlow.edges),bv(!1),bx("saved"),a9(null),g?.(c.parentFlow,c.childFlow)},[a,a8,bm,bp,g]),ci=(0,e.useCallback)(a=>{for(let b of a)"position"===b.type&&(bN.current=!0===b.dragging);$(b=>(0,M._0)(a,b))},[]),cj=(0,e.useCallback)((a,b)=>{aa(c=>c.map(c=>{if(c.id!==a)return c;let d={...c.data??{}};return b?d.condition=b:delete d.condition,{...c,data:d}})),dm.info(`handleSaveEdgeCondition: ${b?"set":"cleared"} condition on edge ${a}`)},[]),ck=(0,e.useCallback)(a=>{dm.debug(`onEdgesChange: Processing ${a.length} edge changes`),a.forEach(a=>{"remove"===a.type?dm.info(`onEdgesChange: Edge ${a.id} removed`):"select"===a.type&&dm.debug(`onEdgesChange: Edge ${a.id} selection changed to ${a.selected}`)}),aa(b=>(0,M.zW)(a,b))},[]),cl=(0,e.useRef)(null),[cn,co]=(0,e.useState)(null),cp=(0,e.useCallback)(a=>{a1(a),setTimeout(()=>a1(b=>b===a?null:b),5e3)},[]),cq=(0,e.useCallback)((a,b,c)=>{if("trigger"===a&&bL.current)return cp(C("flows.builder.triggerExists")),null;"trigger"===a&&(bL.current=!0);let d=c??O.g.createNode(a,b);return $(a=>[...a.map(a=>({...a,selected:!1})),{...d,selected:!0}]),d},[cp,C]),cr=(0,e.useCallback)(a=>{let b=T.find(a=>a.selected)??(1===T.length&&"start"===T[0].data.type?T[0]:void 0),c=cl.current?.getBoundingClientRect(),d=c&&cn?cn.screenToFlowPosition({x:c.left+c.width/2,y:c.top+c.height/2}):{x:250,y:180},e=b&&!["mcp","resource","trigger"].includes(a)?{x:b.position.x,y:b.position.y+180}:d;for(let a=0;a<12&&T.some(a=>90>Math.abs(a.position.x-e.x)&&70>Math.abs(a.position.y-e.y));a+=1)e={x:e.x+36,y:e.y+36};let f=!!b&&["process","finish","subflow","signal"].includes(a),g=O.g.createNode(a,e);if(b&&f){let c={start:"start-bottom",process:"process-bottom",subflow:"subflow-bottom",signal:"signal-bottom"}[b.type];if(!c)return cp(C("flows.builder.selectedCannotLead",{node:b.data.label||C("flows.builder.selectedNode")})),null;let d={source:b.id,sourceHandle:c,target:g.id,targetHandle:(0,S.CW)(a,c)},f=[...T,g];if(!(0,R.JL)(d,f,_))return cp(C("flows.builder.cannotAppend")),null;let h=cq(a,e,g);if(!h)return null;let i=(0,R.wn)(d,f);return aa(a=>[...a,i]),h}return cq(a,e,g)},[T,_,cn,cq,cp,C]),cu=(0,e.useCallback)(a=>{if(aC)return void cp(C("flows.builder.customWiring"));let b=T.find(a=>"start"===a.data.type),c=T.find(a=>"finish"===a.data.type),d=[...aB.orderedNodeIds.map(a=>T.find(b=>b.id===a)).filter(a=>!!a)].reverse().find(a=>["start","process","subflow","signal"].includes(a.data.type))??b;if(!d)return void cp(C("flows.builder.missingStart"));let e={start:"start-bottom",process:"process-bottom",subflow:"subflow-bottom",signal:"signal-bottom"}[d.data.type];if(!e)return void cp(C("flows.builder.addExpert"));let f=O.g.createNode("process",{x:d.position.x,y:d.position.y+180});f.data={...f.data,label:C("flows.builder.aiTask"),properties:{...f.data.properties??{},promptTemplate:a,inputMode:"full-history",outputMode:"latest-message",..."assisted"===bC&&bA?{boundModel:bA}:{}}};let g=c??O.g.createNode("finish",{x:d.position.x,y:d.position.y+360}),h=[...T.filter(a=>a.id!==g.id).map(a=>({...a,selected:!1})),{...f,selected:!0},{...g,position:{x:d.position.x,y:d.position.y+360},selected:!1}],i=_.filter(a=>!(c&&a.source===d.id&&a.target===c.id)),j={source:d.id,sourceHandle:e,target:f.id,targetHandle:(0,S.CW)("process",e)},k={source:f.id,sourceHandle:"process-bottom",target:g.id,targetHandle:(0,S.CW)("finish","process-bottom")};$(h),aa([...i,(0,R.wn)(j,h),(0,R.wn)(k,h)]),T.some(a=>"process"===a.data.type)||af.trim()||ag(a),"assisted"===bC&&bA?(bH(f.id),bF(!0)):bA||cp(C("flows.builder.connectModel"))},[T,_,bC,bA,aB.orderedNodeIds,aC,cp,af,C]),cv=T.find(a=>a.selected)??null,cw=(0,e.useMemo)(()=>{if(!cv||"process"!==cv.data.type)return[];let a=new Set(_.filter(a=>a.data?.edgeType==="mcp"&&(a.source===cv.id||a.target===cv.id)).map(a=>a.source===cv.id?a.target:a.source));return T.flatMap(b=>{if(!a.has(b.id)||"mcp"!==b.data.type)return[];let c=b.data.properties?.boundServer;return"string"==typeof c&&c?[{nodeId:b.id,serverName:c}]:[]})},[_,T,cv]),cx=T.some(a=>["process","subflow"].includes(a.data.type)),cy=T.filter(a=>"process"===a.data.type).every(a=>"string"==typeof a.data.properties?.boundModel&&!!a.data.properties.boundModel),cz=!!ab.trim()&&!/^(?:NewFlow\d*|Untitled (?:assistant|agent)(?: \d+)?)$/i.test(ab.trim())&&!ad,cA=cx&&cy&&cz&&!aC&&"saving"!==bw,cB=(0,e.useCallback)(a=>{$(b=>b.map(b=>({...b,selected:b.id===a})))},[]),cC=(0,e.useMemo)(()=>({...a??{id:bI.current,name:ab,nodes:[],edges:[]},id:a?.id??bI.current,name:ab,...af.trim()?{description:af}:{},nodes:T,edges:_,permissionRules:au?as.map(({id:a,...b})=>b):void 0}),[_,af,ab,a,T,as,au]),cD=(0,e.useMemo)(()=>{if(bG){let a=T.find(a=>a.id===bG),b=a?.data.properties?.boundModel;if("string"==typeof b&&b)return b}if(bA)return bA;let a=T.find(a=>"process"===a.data.type&&"string"==typeof a.data.properties?.boundModel&&!!a.data.properties.boundModel)?.data.properties?.boundModel;return"string"==typeof a?a:null},[bG,bA,T]),cE=(0,e.useCallback)(a=>{$(a.nodes),aa(a.edges),void 0!==a.description&&ag(a.description),bS()},[bS]),cF=(0,e.useCallback)(()=>{let a=T.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1}));a.length>0&&ci(a)},[T,ci]),cG=(0,e.useCallback)(()=>{dm.debug("handleAutoAlign: auto-arranging flow nodes"),$(a=>(function(a,b,c={}){let{direction:d="TB",rankSep:e=120,nodeSep:f=80,mcpOffsetX:g=350,mcpStackY:h=120}=c,i=a.filter(a=>"mcp"===a.type),j=a.filter(a=>"resource"===a.type),k=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type);if(k.length<=1)return a;let l=new Set(k.map(a=>a.id)),m=new Map;for(let a of(k.forEach(a=>m.set(a.id,new Set)),b))!(U(a)||V(a))&&a.source!==a.target&&l.has(a.source)&&l.has(a.target)&&m.get(a.source).add(a.target);let n=new Map;k.forEach(a=>n.set(a.id,0));let o=k.length;for(let a=0;a<o;a++){let a=!1;for(let[b,c]of m){let d=n.get(b)+1;for(let b of c)n.get(b)<d&&(n.set(b,d),a=!0)}if(!a)break}let p=new Map;for(let a of k){let b=n.get(a.id),c=p.get(b);c?c.push(a):p.set(b,[a])}let q=[...p.keys()].sort((a,b)=>a-b),r=new Map,s=0;for(let a of q){let b=p.get(a),c=0,g=0;for(let a of b){let{width:b,height:e}=function(a){let b=a.measured;return{width:b?.width??a.width??240,height:b?.height??a.height??80}}(a);"TB"===d?(r.set(a.id,{x:c,y:s}),c+=b+f,g=Math.max(g,e)):(r.set(a.id,{x:s,y:c}),c+=e+f,g=Math.max(g,b))}s+=g+e}let t=(a,c,d)=>{let e=new Set(a.map(a=>a.id)),f=new Map;for(let a of b){let b,d;if(!c(a))continue;let g=e.has(a.source),h=e.has(a.target);g&&!h?(b=a.source,d=a.target):h&&!g&&(b=a.target,d=a.source),b&&d&&r.has(d)&&!f.has(b)&&f.set(b,d)}let g=new Map;for(let b of a){let a=f.get(b.id);if(!a)continue;let c=r.get(a),e=g.get(a)??0;g.set(a,e+1),r.set(b.id,{x:c.x+d,y:c.y+e*h})}};return t(i,U,g),t(j,V,-g),a.map(a=>{let b=r.get(a.id);return b?{...a,position:b}:a})})(a,_)),requestAnimationFrame(()=>cn?.fitView({padding:.2}))},[_,cn]),cH=(0,e.useCallback)((a,b)=>{dm.debug(`handleNodeUpdate: Updating node ${a} properties`),$(c=>{let d=c.map(c=>c.id===a?(dm.info(`handleNodeUpdate: Node ${a} properties updated`),{...c,data:b}):c);return function(a,b,c){let d=new Map(a.map(a=>[a.id,a])),e=new Map(b.map(a=>[a.id,a])),f=!1;for(let[a,b]of e){let c=d.get(a);if(c&&c.data.label!==b.data.label){f=!0;break}}return f?b.map(a=>{let b=a.data.properties?.promptTemplate;if("string"!=typeof b||!b)return a;let f=function(a,b){let c=[];for(let d of b)!("string"==typeof d.data?.edgeType&&(d.data.edgeType.includes("mcp")||"resource"===d.data.edgeType))&&(d.source===a?c.push(d.target):d.target===a&&d.data?.bidirectional&&c.push(d.source));return[...new Set(c)]}(a.id,c);if(0===f.length)return a;let g=[],h=[];for(let a of f){let b=e.get(a);if(!b)continue;let c=d.get(a)||b;g.push(Y(c)),h.push(Y(b))}if(0===h.length)return a;let i=(0,W.E9)(g),j=(0,W.E9)(h),k=new Map;for(let a of f){let b=i.get(a),c=j.get(a);b&&c&&b!==c&&k.set(b,c)}if(0===k.size)return a;let l=function(a,b){if(!a||0===b.size)return a;let c=(0,X.A$)(a);if(0===c.length)return a;let d="",e=0,f=!1;for(let g of c){d+=a.slice(e,g.index);let c="tool"===g.kind&&"handoff"===g.server?b.get(g.name):void 0;c?(d+=(0,X.X8)("tool","handoff",c),f=!0):d+=g.fullMatch,e=g.index+g.fullMatch.length}return d+=a.slice(e),f?d:a}(b,k);return l===b?a:{...a,data:{...a.data,properties:{...a.data.properties,promptTemplate:l}}}}):b}(c,d,_)})},[_]),cI=(0,e.useCallback)((a,b)=>{cH(a,b),aM(!1),a5("edit"),aO(!1),aQ(!1),aS(!1),aU(!1),aW(!1),aY(!1),a_(!1),a3(null),dm.debug("handleNodeUpdate: Closed property modals")},[cH]),cJ=(0,e.useCallback)(async(a,b)=>{let c=T.find(b=>b.id===a);if(!c)return void dm.warn(`handleConnectMcpServer: process node ${a} not found`);let d=[];try{let a=await P.S.listServerTools(b);!a.error&&Array.isArray(a.tools)&&(d=a.tools.map(a=>a.name))}catch(a){dm.warn(`handleConnectMcpServer: could not load tools for ${b}`,a)}let e=_.filter(b=>b.data?.edgeType==="mcp"&&(b.source===a||b.target===a)).length,f=O.g.createNode("mcp",{x:c.position.x+350,y:c.position.y+120*e});f.data.label=b,f.data.properties={...f.data.properties??{},boundServer:b,enabledTools:d};let g=(0,R.wn)({source:a,sourceHandle:"process-right-mcp",target:f.id,targetHandle:"mcp-left"},[...T,f]);$(a=>[...a,f]),aa(a=>[...a,g]),dm.info(`Connected MCP server "${b}" to process node ${a}`)},[T,_]),cK=(0,e.useCallback)((a,b)=>{let c=c=>c.data?.edgeType==="mcp"&&(c.source===a&&c.target===b||c.source===b&&c.target===a);if(!_.some(c))return;let d=_.filter(a=>!c(a)),e=d.some(a=>a.source===b||a.target===b);aa(d),e||$(a=>a.filter(a=>a.id!==b)),dm.info(`Removed MCP node ${b} from process node ${a}`)},[_]),cL=(0,e.useCallback)(async()=>{let a=await P.S.loadServerConfigs();if(!Array.isArray(a))throw Error(a?.error||C("flows.inspector.mcpLoadError"));return Promise.all(a.map(async a=>{let b=await P.S.getServerStatus(a.name),c="string"==typeof b?b:b.status;return{...a,status:c}}))},[C]),cM=(0,e.useCallback)((a,b="edit")=>{dm.debug("Opening properties for node:",a),a3(a),"process"===a.data.type&&a5(b),"mcp"===a.data.type?aO(!0):"start"===a.data.type?aQ(!0):"finish"===a.data.type?aS(!0):"subflow"===a.data.type?aU(!0):"resource"===a.data.type?aW(!0):"signal"===a.data.type?aY(!0):"trigger"===a.data.type?a_(!0):aM(!0)},[]),cN=(0,e.useCallback)(a=>{dm.debug("onDrop: Node dropped on canvas"),a.preventDefault();let b=a.dataTransfer.getData("application/reactflow");if(dm.debug(`onDrop: Node type from data transfer: ${b}`),!b||!cn)return void dm.debug(`onDrop: Missing required data - type: ${!!b}, reactFlowInstance: ${!!cn}`);let c=cn.screenToFlowPosition({x:a.clientX,y:a.clientY});dm.debug(`onDrop: Calculated position: (${c.x}, ${c.y})`);let d=cq(b,c);d&&(dm.info(`onDrop: Created new ${b} node with ID: ${d.id}`),dm.debug(`onDrop: Selected new node ${d.id} in the inspector`))},[cn,cq]),cP=(0,e.useCallback)(a=>{a.preventDefault(),a.dataTransfer.dropEffect="move"},[]),cQ=(0,e.useCallback)(a=>{dm.debug("onInit: ReactFlow instance initialized"),co(a)},[]);return(0,d.jsxs)(dn,{children:["advanced"===am&&(0,d.jsx)(ar,{authoringMode:am,onAddNode:cr}),(0,d.jsx)(dl.G.Provider,{value:ah,children:(0,d.jsx)(M.Ln,{children:(0,d.jsxs)(dq,{children:[(0,d.jsxs)(dp,{elevation:1,children:[(0,d.jsxs)(i.default,{sx:{minWidth:0,flex:"1 1 180px"},children:[(0,d.jsx)(j.A,{variant:"subtitle2",fontWeight:850,noWrap:!0,children:ab}),(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:"guided"===am?D("flows.builder.step",T.filter(a=>["process","subflow","signal"].includes(a.data.type)).length):`${D("flows.builder.node",T.length)} \xb7 ${D("flows.builder.connection",_.length)}`})]}),(0,d.jsx)(E.A,{size:"small",variant:"outlined",color:"error"===bw?"error":"saved"===bw?"success":"default",icon:"saving"===bw?(0,d.jsx)(F.default,{size:14}):"error"===bw?(0,d.jsx)(dg,{}):"saved"===bw?(0,d.jsx)(df.A,{}):void 0,label:"saving"===bw?C("flows.builder.saving"):"error"===bw?C("flows.builder.saveFailed"):"unsaved"===bw?x&&!bu?C("flows.builder.draft"):C("flows.builder.unsaved"):C("flows.builder.saved"),"aria-label":C("flows.builder.saveStatus",{status:"saving"===bw?C("flows.builder.saving"):"error"===bw?C("flows.builder.saveFailed"):bu?C("flows.builder.unsaved"):C("flows.builder.saved")})}),(0,d.jsx)(G.A,{sx:{m:0,whiteSpace:"nowrap"},control:(0,d.jsx)(H.A,{size:"small",checked:"advanced"===am,onChange:a=>ao(a.target.checked?"advanced":"guided"),inputProps:{"aria-label":C("flows.builder.expertView")}}),label:"advanced"===am?C("flows.builder.expert"):C("flows.builder.easy")}),"advanced"===am&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{variant:"outlined",size:"small",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>cr("process"),"aria-label":C("flows.builder.addNode"),title:C("flows.builder.addNodeHelp"),children:C("flows.builder.addNode")}),(0,d.jsx)(aZ,{nodes:T,edges:_}),(0,d.jsx)(n.A,{title:C("flows.builder.autoAlign"),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.autoAlign"),onClick:cG,disabled:T.length<=1,color:"primary",size:"small",children:(0,d.jsx)(de,{})})})}),(0,d.jsx)(I.A,{orientation:"vertical",flexItem:!0}),(0,d.jsx)(n.A,{title:`${C("flows.builder.undo")} \xb7 Ctrl/⌘ Z`,children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.undo"),onClick:cb,disabled:!b8,color:"primary",size:"small",children:(0,d.jsx)(c2,{})})})}),(0,d.jsx)(n.A,{title:`${C("flows.builder.redo")} \xb7 Ctrl/⌘ Shift Z`,children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.redo"),onClick:cc,disabled:!b9,color:"primary",size:"small",children:(0,d.jsx)(c3,{})})})})]}),(0,d.jsx)(k.A,{variant:"guided"===am?"outlined":"contained",color:"primary",onClick:()=>void bX(),startIcon:"saving"===bw?(0,d.jsx)(F.default,{size:16,color:"inherit"}):(0,d.jsx)(c1,{}),disabled:!!ad||"saving"===bw,"aria-label":C("flows.builder.saveFlow"),children:C("flows.builder.save")}),"guided"===am&&z&&(0,d.jsx)(k.A,{variant:"contained",color:"primary",onClick:()=>void bY(),startIcon:(0,d.jsx)(bk,{}),disabled:!cA,children:C("flows.builder.try")}),("advanced"===am||a&&!x)&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.A,{title:C("flows.builder.moreCommands"),children:(0,d.jsx)(m.A,{id:"more-actions-button","data-tour":"improve-flow","aria-label":C("flows.builder.moreActions"),"aria-controls":bf?"more-actions-menu":void 0,"aria-haspopup":"menu","aria-expanded":bf?"true":void 0,onClick:a=>bg(a.currentTarget),color:"primary",size:"small",children:(0,d.jsx)(c4,{})})}),(0,d.jsxs)(J.A,{id:"more-actions-menu",anchorEl:bf,open:!!bf,onClose:()=>bg(null),MenuListProps:{"aria-labelledby":"more-actions-button"},children:["advanced"===am&&(0,d.jsx)(K.A,{disabled:T.length<=1,onClick:()=>{bg(null),cG()},children:C("flows.builder.autoAlign")}),"advanced"===am&&(0,d.jsx)(K.A,{disabled:0===T.length,onClick:b1,children:C("flows.builder.repairAutomatic")}),"advanced"===am&&(0,d.jsx)(K.A,{disabled:0===T.length,onClick:b2,children:C("flows.builder.repairAi")}),a&&!x&&(0,d.jsx)(I.A,{}),a&&!x&&"advanced"===am&&(0,d.jsx)(K.A,{onClick:()=>{bg(null),bi(""),bb(!0)},children:C("flows.builder.improveAi")}),a&&!x&&(0,d.jsx)(K.A,{onClick:()=>{bg(null),bl(!0)},children:"guided"===am?C("flows.builder.previousVersions"):C("flows.builder.history")}),a&&!x&&(0,d.jsx)(K.A,{onClick:()=>{bg(null),aG("duplicate"),aI(C("flows.page.copyName",{name:a.name})),aE(!0)},children:"guided"===am?C("flows.builder.duplicateAgent"):C("flows.builder.duplicateFlow")}),a&&!x&&(0,d.jsx)(K.A,{sx:{color:"error.main"},onClick:()=>{bg(null),b$()},children:"guided"===am?C("flows.builder.deleteAgent"):C("flows.builder.deleteFlow")})]})]})]}),(0,d.jsx)(o.A,{in:!!a0,unmountOnExit:!0,children:a0&&(0,d.jsx)(p.A,{severity:"warning",onClose:()=>a1(null),sx:{mb:1},children:a0})}),(0,d.jsx)(o.A,{in:!!bc,unmountOnExit:!0,children:bc&&(0,d.jsx)(p.A,{severity:bc.severity,onClose:()=>bd(null),sx:{mb:1},children:bc.message})}),"guided"===am?(0,d.jsx)(bn,{nodes:T,orderedStepIds:aB.orderedNodeIds,selectedNodeId:cv?.id,flowName:ab,flowNameError:ad,onFlowNameChange:a=>{ac(a),ae(bR(a)),bS()},onSelectNode:cB,onAddTask:cu,onTry:z?()=>{bY()}:void 0,isSaving:"saving"===bw,hasAdvancedFeatures:aC,readyToTry:cA,needsAIConnection:!cy,onSwitchAdvanced:()=>ao("advanced"),models:by,aiAssistance:bC,selectedModelId:bA,onChooseAssistance:a=>{bD(a),"manual"===a&&bB(null)},onModelChange:bB,onCheckPlausibility:()=>{bH(null),bF(!0)}}):(0,d.jsx)(i.default,{sx:{flex:1,width:"100%",minWidth:0,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:(0,d.jsx)(Z.Ay,{ref:cl,nodes:T,edges:_,onNodesChange:ci,onEdgesChange:ck,onDrop:cN,onDragOver:cP,onInit:cQ,reactFlowWrapper:cl,onEditNode:cM,onCreateNode:cq,onConvertProcessToSubflow:a?a=>a9(a.id):void 0,onEditEdge:a=>a7(a)})})]})})}),("advanced"===am||cv)&&(0,d.jsx)(be,{selectedNode:cv,onClearSelection:cF,onCommitNode:cH,onOpenAdvanced:cM,flowName:ab,flowNameError:ad,onFlowNameChange:a=>{ac(a),ae(bR(a)),bS()},flowDescription:af,onFlowDescriptionChange:a=>{ag(a),bS()},authoringMode:am,beginnerMode:"guided"===am,onAuthoringModeChange:ao,permissionRuleCount:as.length,onOpenPermissionRules:()=>ax(!0),onSuggestTools:a=>{bH(a.id),bF(!0)},onCheckPlausibility:()=>{bH(null),bF(!0)},connectedMcpServers:cw,onConnectMcpServer:cJ,onRemoveMcpServer:cK,loadMcpServers:cL}),(0,d.jsx)(ca,{open:aL,node:a2,onClose:()=>{aM(!1),a5("edit")},onSave:cI,mode:a4,flowEdges:_,flowNodes:T,flowId:a?.id,onConnectMcpServer:a=>{a2&&cJ(a2.id,a)},authoringMode:am}),(0,d.jsx)(br,{open:bE,flow:cC,relatedFlows:l,nodeId:bG,modelId:cD,models:by,onApply:cE,onApplyRelatedFlows:w,onClose:()=>bF(!1)}),(0,d.jsx)(ce,{open:aN,node:a2,onClose:()=>aO(!1),onSave:cI,authoringMode:am}),(0,d.jsx)(cf,{open:aP,node:a2,onClose:()=>aQ(!1),onSave:cI}),(0,d.jsx)(cg,{open:aR,node:a2,onClose:()=>aS(!1),onSave:cI}),(0,d.jsx)(cm,{open:aT,node:a2,onClose:()=>aU(!1),onSave:cI,onNavigateToFlow:A?a=>{aU(!1),bZ(()=>A(a))}:void 0,flowId:a?.id,authoringMode:am}),(0,d.jsx)(cs,{open:aV,node:a2,onClose:()=>aW(!1),onSave:cI,flowNodes:T}),(0,d.jsx)(ct,{open:aX,node:a2,onClose:()=>aY(!1),onSave:cI}),(0,d.jsx)(cO,{open:a$,node:a2,flowId:a?.id||"",onClose:()=>{a_(!1),a3(null)},onSave:cI}),(0,d.jsx)(ch,{open:!!a6,edge:a6,onClose:()=>a7(null),onSave:cj}),(0,d.jsx)(c0,{open:!!a8,processNodeId:a8,parentFlow:{id:a?.id||"",name:ab,description:af,folder:a?.folder,favorite:a?.favorite,permissionRules:bV(),createdAt:a?.createdAt,updatedAt:a?.updatedAt,nodes:T,edges:_},existingFlowNames:h.map(a=>a.name),onClose:()=>a9(null),onAccept:cd}),(0,d.jsx)(cU,{open:bj,flowId:a?.id,onClose:()=>bl(!1),onRestore:b0}),(0,d.jsx)(da,{open:ba,onClose:()=>bb(!1),currentFlow:{id:a?.id||"",name:ab,description:af,permissionRules:bV(),nodes:T,edges:_},onImproved:b_,initialDescription:bh}),(0,d.jsxs)(q.A,{open:aw,onClose:()=>ax(!1),fullWidth:!0,maxWidth:"md","aria-labelledby":"permission-rules-dialog-title",children:[(0,d.jsx)(r.A,{id:"permission-rules-dialog-title",children:C("flows.builder.permissionsTitle")}),(0,d.jsxs)(s.A,{children:[(0,d.jsx)(t.A,{sx:{mb:2},children:C("flows.builder.permissionsHelp")}),ay&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:2},children:ay}),0===as.length?(0,d.jsx)(j.A,{color:"text.secondary",sx:{mb:2},children:C("flows.builder.noPermissions")}):as.map((a,b)=>(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1},children:[(0,d.jsxs)(j.A,{"aria-label":C("flows.builder.rule",{number:b+1}),sx:{minWidth:24},children:[b+1,"."]}),(0,d.jsx)(u.A,{label:C("flows.builder.action"),size:"small",value:a.action,onChange:b=>bT(a.id,{action:b.target.value}),inputProps:{"aria-label":`${C("flows.builder.rule",{number:b+1})}: ${C("flows.builder.action")}`},sx:{flex:1}}),(0,d.jsx)(u.A,{label:C("flows.builder.resource"),size:"small",value:a.resource,onChange:b=>bT(a.id,{resource:b.target.value}),inputProps:{"aria-label":`${C("flows.builder.rule",{number:b+1})}: ${C("flows.builder.resource")}`},sx:{flex:1}}),(0,d.jsxs)(u.A,{select:!0,label:C("flows.builder.effect"),size:"small",value:a.effect,onChange:b=>bT(a.id,{effect:b.target.value}),inputProps:{"aria-label":`${C("flows.builder.rule",{number:b+1})}: ${C("flows.builder.effect")}`},sx:{minWidth:100},children:[(0,d.jsx)(K.A,{value:"allow",children:C("flows.builder.allow")}),(0,d.jsx)(K.A,{value:"deny",children:C("flows.builder.deny")}),(0,d.jsx)(K.A,{value:"ask",children:C("flows.builder.ask")})]}),(0,d.jsx)(n.A,{title:C("flows.builder.moveRuleUp",{number:b+1}),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.moveRuleUp",{number:b+1}),onClick:()=>bU(b,-1),disabled:0===b,children:(0,d.jsx)(c6.A,{})})})}),(0,d.jsx)(n.A,{title:C("flows.builder.moveRuleDown",{number:b+1}),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.moveRuleDown",{number:b+1}),onClick:()=>bU(b,1),disabled:b===as.length-1,children:(0,d.jsx)(c7,{})})})}),(0,d.jsx)(n.A,{title:C("flows.builder.deleteRule",{number:b+1}),children:(0,d.jsx)(m.A,{"aria-label":C("flows.builder.deleteRule",{number:b+1}),onClick:()=>{var b;return b=a.id,void(at(a=>a.filter(a=>a.id!==b)),av(!0),az(null),bS())},children:(0,d.jsx)(c5.A,{})})})]},a.id)),(0,d.jsx)(k.A,{startIcon:(0,d.jsx)(y.A,{}),onClick:()=>{at(a=>[...a,aq({action:"",resource:"",effect:"ask"})]),av(!0),az(null),bS()},children:C("flows.builder.addRule")})]}),(0,d.jsx)(v.A,{children:(0,d.jsx)(k.A,{onClick:()=>ax(!1),children:C("flows.builder.done")})})]}),(0,d.jsxs)(q.A,{open:aD,onClose:b5,children:[(0,d.jsx)(r.A,{children:"duplicate"===aF?"guided"===am?C("flows.builder.copyAgent"):C("flows.builder.copyFlow"):"rename"===aF?"guided"===am?C("flows.builder.renameAgent"):C("flows.builder.renameFlow"):C("flows.builder.unsavedChanges")}),(0,d.jsx)(s.A,{children:"unsaved"===aF?(0,d.jsx)(t.A,{children:C("flows.builder.unsavedQuestion")}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(t.A,{children:"duplicate"===aF?C("flows.builder.copyPrompt"):C("flows.builder.renameQuestion")}),(0,d.jsx)(u.A,{autoFocus:!0,margin:"dense",label:"guided"===am?C("flows.builder.agentName"):C("flows.builder.flowName"),type:"text",fullWidth:!0,value:aH,onChange:a=>{let b=a.target.value;aI(b),aK(bR(b))},error:!!aJ,helperText:aJ,sx:{mt:2}})]})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:b5,children:C("flows.builder.cancel")}),"unsaved"===aF&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{bv(!1),b4(),b5()},color:"error",children:C("flows.builder.discard")}),(0,d.jsx)(k.A,{onClick:b7,variant:"contained",color:"primary",children:C("flows.builder.saveChanges")})]}),"rename"===aF&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(k.A,{onClick:()=>{let b=bR(aH);if(b)return void aK(b);a&&b3(a,aH),b5()},children:C("flows.builder.copy")}),(0,d.jsx)(k.A,{onClick:b6,variant:"contained",color:"primary",disabled:!!aJ,children:C("flows.builder.rename")})]}),"duplicate"===aF&&(0,d.jsx)(k.A,{onClick:b6,variant:"contained",color:"primary",disabled:!!aJ,children:C("flows.builder.copy")})]})]})]})});dt.displayName="FlowBuilder";var du=c(61220),dv=c(62815),dw=c(38259),dx=c(49938);let dy=(0,L.h)("frontend/components/Flow/FlowManager/GenerateFlowDialog");function dz(a,b){return{id:(0,N.A)(),role:a,content:b,timestamp:Date.now()}}function dA(a){if("string"!=typeof a)return a;try{return JSON.parse(a)}catch{return a}}function dB(a,b,c,d){let e=c(b?"flows.generator.updated":"flows.generator.readyNamed",{name:a.flow.name}),f=Math.max(0,a.flows.length-1),g=f?d("flows.generator.helper",f):"",h=a.errorCount+a.warningCount;return[e,g,h?d("flows.generator.review",h):c("flows.generator.readyReview")].filter(Boolean).join(" ")}let dC=({open:a,onClose:b,onGenerated:c})=>{let{settings:f,settingsHydrated:g}=(0,dx.rX)(),{t:h,tp:l}=(0,ak.s9)(),o=g&&f?.experimental?.enabled===!0&&!0===f.experimental.flowBasedGenerator,[t,u]=(0,e.useState)([]),[w,x]=(0,e.useState)(""),[y,A]=(0,e.useState)(null),[B,C]=(0,e.useState)([]),[D,F]=(0,e.useState)(null),[H,I]=(0,e.useState)(!1),[J,L]=(0,e.useState)(!1),[M,P]=(0,e.useState)(!1),[R,S]=(0,e.useState)(null);(0,e.useEffect)(()=>{if(!a)return;let b=!1;return Q.N.loadModels().then(a=>{b||(u(a),x(b=>a.some(a=>a.id===b)?b:a[0]?.id??""))}).catch(a=>{dy.warn("Failed to load generator models",a),b||S(h("flows.generator.modelsFailed"))}),()=>{b=!0}},[a,h]),(0,e.useEffect)(()=>{a&&(A(null),C([]),F(null),I(!1),S(null))},[o,a]);let T=(0,e.useMemo)(()=>B.filter(a=>("user"===a.role||"assistant"===a.role)&&"string"==typeof a.content&&a.content.trim()).map((a,b)=>({id:"string"==typeof a.id?a.id:`flow-generator-${b}`,role:a.role,content:a.content,timestamp:"number"==typeof a.timestamp?a.timestamp:Date.now()+b,processNodeId:a.processNodeId})),[B]),U=(0,e.useCallback)(async()=>{if(y)return y;let a=(0,N.A)(),{flow:b}=await dw.O.synthesizeFlowGenerator({conversationId:a,modelId:w,allowInstall:H}),c=Date.now();return await dw.O.createConversation({id:a,title:h("flows.generator.conversationTitle"),flowId:b.id,flowSnapshot:b,createdAt:c,updatedAt:c}),A(a),a},[H,y,w,h]),V=(0,e.useCallback)(async a=>{let b=a.trim();if(!b||J||!w)return;let c=[...B,dz("user",b)];C(c),S(null),L(!0);try{if(o){let a=await U(),b=await dw.O.completeFlowGeneratorTurn({conversationId:a,messages:c}),d=Array.isArray(b?.messages)?b.messages:c;C(d);let e=function(a){let b=(a,c=0)=>{if(c>6)return null;let d=dA(a);if(!d||"object"!=typeof d)return null;if(d.flow&&Array.isArray(d.flows)&&"string"==typeof d.rootFlowId)return d;if(Array.isArray(d.content))for(let a=d.content.length-1;a>=0;a--){let e=b(d.content[a],c+1);if(e)return e}for(let a of["text","data","result"])if(a in d){let e=b(d[a],c+1);if(e)return e}return null};for(let c=a.length-1;c>=0;c--){let d=b(a[c]?.content);if(d)return d}return null}(d);if(!e)return void S(h("flows.generator.experimentalNoDraft"));let f={flow:e.flow,flows:e.flows,rootFlowId:e.rootFlowId,errorCount:e.validation?.errorCount??0,warningCount:e.validation?.warningCount??0,attempts:d.filter(a=>"user"===a.role).length,installedServers:function(a){let b=new Map,c=(a,d=0)=>{if(d>6)return;let e=dA(a);if(e&&"object"==typeof e)for(let a of(!0===e.installed&&"string"==typeof e.serverName&&Array.isArray(e.tools)&&b.set(e.serverName,{name:e.serverName,tools:e.tools.map(a=>"string"==typeof a?a:a&&"object"==typeof a?String(a.name??""):"").filter(Boolean),alreadyExisted:!0===e.alreadyExisted,..."string"==typeof e.plan?.command?{command:e.plan.command}:{},...Array.isArray(e.plan?.args)?{args:e.plan.args.map(String)}:{},..."string"==typeof e.plan?.verificationStatus?{verificationStatus:e.plan.verificationStatus}:{}}),Object.values(e)))c(a,d+1)};for(let b of a)c(b.content);return[...b.values()]}(d)};F(f),dy.info("Experimental Generation Flow returned a draft",{flowId:f.rootFlowId,flowCount:f.flows.length,errors:f.errorCount,warnings:f.warningCount});return}if(!D){let a=await O.g.generateFlow(b,w,{allowInstall:H,allowSubflows:!0,maxDepth:2});if(!a.success)return void S(a.error);let d={flow:a.flow,flows:a.flows.map(a=>a.flow),rootFlowId:a.rootFlowId,errorCount:a.validation.errorCount,warningCount:a.validation.warningCount,attempts:a.attempts,installedServers:a.installedServers};dy.info("Draft flow generated",{flowId:d.rootFlowId,flowCount:d.flows.length,attempts:d.attempts,errors:d.errorCount,warnings:d.warningCount,installedServers:d.installedServers.length}),F(d),C([...c,dz("assistant",dB(d,!1,h,l))]);return}let a=D.flows.filter(a=>a.id!==D.rootFlowId),d=await O.g.improveFlow(D.flow,b,w,{allowInstall:H,relatedFlows:a});if(!d.success)return void S(d.error);let e={flow:d.flow,flows:d.flows.map(a=>a.flow),rootFlowId:d.rootFlowId,errorCount:d.validation.errorCount,warningCount:d.validation.warningCount,attempts:D.attempts+d.attempts,installedServers:[...D.installedServers,...d.installedServers]};dy.info("Draft flow improved",{flowId:e.rootFlowId,flowCount:e.flows.length,attempts:e.attempts,errors:e.errorCount,warnings:e.warningCount,installedServers:e.installedServers.length}),F(e),C([...c,dz("assistant",dB(e,!0,h,l))])}catch(a){S(a instanceof Error?a.message:String(a))}finally{L(!1)}},[H,D,o,J,w,U,h,l,B]),W=(0,e.useCallback)(()=>{D&&c(D)},[D,c]),X=(0,e.useCallback)(async()=>{if(!J&&!M){P(!0),S(null);try{await dw.O.restoreFlowGenerator(),A(null),C([]),F(null)}catch(a){S(a instanceof Error?a.message:String(a))}finally{P(!1)}}},[M,J]),Y=(0,e.useCallback)(()=>{J||M||(A(null),C([]),F(null),I(!1),S(null),b())},[M,J,b]);return(0,d.jsxs)(q.A,{open:a,onClose:Y,maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(r.A,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(z,{color:"primary"}),(0,d.jsxs)(i.default,{sx:{flex:1},children:[h("flows.generator.title"),o&&(0,d.jsx)(E.A,{label:h("flows.generator.experimentalChip"),size:"small",color:"warning",variant:"outlined",sx:{ml:1}}),(0,d.jsx)(j.A,{variant:"body2",color:"text.secondary",children:o?h("flows.generator.experimentalDescription"):h("flows.generator.description")})]}),o&&(0,d.jsx)(n.A,{title:h("flows.generator.restore"),children:(0,d.jsx)("span",{children:(0,d.jsx)(m.A,{"aria-label":h("flows.generator.restore"),onClick:()=>{X()},disabled:J||M,children:(0,d.jsx)(bK.A,{})})})})]}),(0,d.jsxs)(s.A,{dividers:!0,sx:{p:0},children:[(0,d.jsxs)(i.default,{sx:{p:2,borderBottom:1,borderColor:"divider"},children:[R&&(0,d.jsx)(p.A,{severity:"error",sx:{mb:1.5},onClose:()=>S(null),children:R}),o&&(0,d.jsx)(p.A,{severity:"warning",sx:{mb:1.5},children:h("flows.generator.experimentalWarning")}),(0,d.jsxs)(i.default,{component:"details",sx:{mt:R||o?1.5:0,border:1,borderColor:"divider",borderRadius:2.5,"&[open]":{p:1.5},"&[open] > summary":{mb:1.5}},children:[(0,d.jsx)(i.default,{component:"summary",sx:{px:1.5,py:1.1,cursor:"pointer",color:"text.secondary",fontSize:"0.86rem",fontWeight:700},children:h("flows.generator.advanced")}),(0,d.jsxs)(bf.A,{size:"small",fullWidth:!0,disabled:J||o&&!!y,children:[(0,d.jsx)(bg.A,{id:"flow-generator-model-label",children:h("flows.generator.model")}),(0,d.jsx)(bh.A,{labelId:"flow-generator-model-label",label:h("flows.generator.model"),value:w,onChange:a=>x(a.target.value),children:t.map(a=>(0,d.jsx)(K.A,{value:a.id,children:a.displayName?.trim()||a.name},a.id))})]}),(0,d.jsx)(G.A,{sx:{mt:1},control:(0,d.jsx)(bo.A,{checked:H,onChange:a=>I(a.target.checked),disabled:J||o&&!!y}),label:h("flows.generator.allowTools")}),(0,d.jsxs)(j.A,{variant:"caption",color:"text.secondary",display:"block",children:[h("flows.generator.allowToolsHelp"),o&&` ${h("flows.generator.depth",{count:2})}`]}),H&&(0,d.jsx)(p.A,{severity:"warning",sx:{mt:1},children:h("flows.generator.installWarning")})]})]}),(0,d.jsx)(i.default,{sx:{minHeight:360,maxHeight:"55vh",overflowY:"auto",p:2},children:0===T.length?(0,d.jsxs)(i.default,{sx:{py:8,textAlign:"center",color:"text.secondary"},children:[(0,d.jsx)(j.A,{variant:"h6",children:h("flows.generator.question")}),(0,d.jsx)(j.A,{variant:"body2",children:h("flows.generator.example")})]}):(0,d.jsx)(dv.A,{messages:T,conversationId:"new-flow-generator",onToggleDisabled:()=>void 0,onSplitConversation:()=>void 0})}),D&&(0,d.jsx)(p.A,{severity:D.errorCount?"warning":"success",sx:{mx:2,mb:1},children:D.errorCount?l("flows.generator.draftAttention",D.errorCount):h("flows.generator.draftReady")}),(0,d.jsxs)(i.default,{sx:{p:1.5,borderTop:1,borderColor:"divider"},children:[(0,d.jsx)(du.A,{onSendMessage:a=>{V(a)},disabled:J||!w,placeholder:h("flows.generator.placeholder")}),J&&(0,d.jsx)(j.A,{variant:"caption",color:"text.secondary",children:D?h("flows.generator.applying"):o?h("flows.generator.runningExperimental"):h("flows.generator.building")})]})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:Y,disabled:J||M,children:h("flows.generator.close")}),(0,d.jsx)(k.A,{variant:"contained",onClick:W,disabled:!D||J,startIcon:(0,d.jsx)(z,{}),children:h("flows.generator.continue")})]})]})};var dD=c(58156);let dE=null;var dF=c(24077),dG=c(82666),dH=c(63757);let dI=(0,w.A)((0,d.jsx)("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList"),dJ=(0,w.A)((0,d.jsx)("path",{d:"M3 14h4v-4H3zm0 5h4v-4H3zM3 9h4V5H3zm5 5h13v-4H8zm0 5h13v-4H8zM8 5v4h13V5z"}),"ViewList"),dK=(0,w.A)((0,d.jsx)("path",{d:"M14.67 5v6.5H9.33V5zm1 6.5H21V5h-5.33zm-1 7.5v-6.5H9.33V19zm1-6.5V19H21v-6.5zm-7.34 0H3V19h5.33zm0-1V5H3v6.5z"}),"ViewModule");var dL=c(11402),dM=c(17128),dN=c(9863),dO=c(81310),dP=c(18467),dQ=c(59737),dR=c(7329),dS=c(66675),dT=c(61560),dU=c(49351),dV=c(24166);let dW=(0,L.h)("components/Flow/FlowDashboard/FlowDashboard");function dX(a,b){return a+Math.round(255*b).toString(16).padStart(2,"0")}let dY=({flows:a,selectedFlow:b,onSelectFlow:c,onDeleteFlow:f,onCopyFlow:g,onEditFlow:l,onOpenInChat:n,onCreateFlow:o,onSetFolder:p,onToggleFavorite:q,isLoading:r=!1})=>{let{t:s,tp:t,formatNumber:v}=(0,ak.s9)(),[w,x]=(0,e.useState)(""),[z,A]=(0,dh.Xk)("flujo-ui:flows:sort","name-asc"),[B,C]=(0,dh.Xk)("flujo-ui:flows:view","grid"),[E,F]=(0,e.useState)(null),[G,H]=(0,dh.Xk)("flujo-ui:flows:group",dR.FM),[L,M]=(0,e.useState)(null),[N,O]=(0,dh.Xk)("flujo-ui:flows:collapsed",[]),P=(0,e.useMemo)(()=>new Set(N),[N]),[Q,R]=(0,e.useState)({});(0,e.useEffect)(()=>{let a=!1;return(async()=>{let b={};try{let a=await fetch("/api/model");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.models=c)}}catch(a){dW.warn("Could not load models for flow badges",a)}try{let a=await fetch("/api/mcp/servers");if(a.ok){let c=await a.json();Array.isArray(c)&&(b.servers=c.map(a=>({name:a.name,status:a.disabled?"disabled":void 0})))}}catch(a){dW.warn("Could not load servers for flow badges",a)}a||R(b)})(),()=>{a=!0}},[]);let S=(0,e.useMemo)(()=>{let b={};for(let c of a)try{b[c.id]=aW(c,Q)}catch(a){dW.warn("Failed to validate flow for badge",{flowId:c.id,error:a})}return b},[a,Q]),T=(0,h.A)(),U=(0,dF.A)(T.breakpoints.down("sm")),V=(0,dF.A)(T.breakpoints.down("md")),W=()=>{F(null)},X=a=>{A(a),W()},Y=a=>{H(a),M(null)},Z=(0,e.useMemo)(()=>{dW.debug("Filtering and sorting flows",{searchTerm:w,sortOption:z});let b=a;if(""!==w.trim()){let c=w.toLowerCase();b=a.filter(a=>a.name.toLowerCase().includes(c))}return(0,dS.NP)(b,z)},[a,w,z]),{ref:$,showBackToTop:aa,scrollToTop:ab}=(0,dT.R)("flujo-ui:scroll:flows",{deps:[r,Z.length]}),ac=(0,e.useMemo)(()=>(0,dR.yF)(a,a=>a.folder),[a]),ad=(0,e.useMemo)(()=>"folder"===G?(0,dR.Je)(Z,a=>a.folder,s("flows.group.ungrouped")):"sort"===G?(0,dR.Az)(Z,a=>{let b=(0,dS.ts)(a,z),c={"recency:unknown":s("flows.group.noDate"),"recency:today":s("flows.group.today"),"recency:week":s("flows.group.week"),"recency:month":s("flows.group.month"),"recency:older":s("flows.group.older"),"nodes:0":s("flows.group.nodes0"),"nodes:1-2":s("flows.group.nodes12"),"nodes:3-5":s("flows.group.nodes35"),"nodes:6-10":s("flows.group.nodes610"),"nodes:11+":s("flows.group.nodes11"),all:s("flows.group.all")};return{...b,label:c[b.key]??b.label}}):[],[G,Z,z,s]),ae="name-asc"===z?s("flows.sort.nameAsc"):"name-desc"===z?s("flows.sort.nameDesc"):"newest"===z?s("flows.sort.newest"):"oldest"===z?s("flows.sort.oldest"):"most-nodes"===z?s("flows.sort.mostSteps"):s("flows.sort.fewestSteps"),af=a=>(0,d.jsx)(dG.Ay,{container:!0,spacing:2.5,children:a.map(a=>(0,d.jsx)(dG.Ay,{item:!0,xs:12,sm:"compact"===B?12:6,md:"compact"===B?12:3==("compact"===B||U?1:V?2:3)?4:6,children:(0,d.jsx)(ck.A,{flow:a,selected:b===a.id,onSelect:c,onDelete:f,onCopy:g,onEdit:l,onOpenInChat:n,onSetFolder:p,onToggleFavorite:q,folders:ac,validation:S[a.id]})},a.id))});return(0,d.jsxs)(i.default,{sx:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,d.jsx)(D.A,{elevation:1,sx:{mb:2,p:1},children:(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,d.jsx)(u.A,{placeholder:s("flows.dashboard.search"),variant:"outlined",size:"small",fullWidth:!0,value:w,onChange:a=>{x(a.target.value)},InputProps:{startAdornment:(0,d.jsx)(_.A,{position:"start",children:(0,d.jsx)(bL.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300}}}),(0,d.jsxs)(i.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",backgroundColor:T.palette.background.default,borderRadius:1,border:`1px solid ${T.palette.divider}`,overflow:"hidden"},children:[(0,d.jsx)(m.A,{"aria-label":s("flows.dashboard.cards"),size:"small",onClick:()=>C("grid"),color:"grid"===B?"primary":"default",sx:{borderRadius:0,backgroundColor:"grid"===B?dX(T.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(dK,{fontSize:"small"})}),(0,d.jsx)(m.A,{"aria-label":s("flows.dashboard.compact"),size:"small",onClick:()=>C("compact"),color:"compact"===B?"primary":"default",sx:{borderRadius:0,backgroundColor:"compact"===B?dX(T.palette.primary.main,.1):"transparent"},children:(0,d.jsx)(dJ,{fontSize:"small"})})]}),(0,d.jsx)(m.A,{size:"small",onClick:a=>M(a.currentTarget),color:"none"!==G?"primary":"default",sx:{border:`1px solid ${T.palette.divider}`,backgroundColor:T.palette.background.default},title:s("flows.dashboard.groupCards"),"aria-label":s("flows.dashboard.groupAgents"),children:(0,d.jsx)(dN.A,{fontSize:"small"})}),(0,d.jsx)(m.A,{"aria-label":s("flows.dashboard.sortAgents"),size:"small",onClick:a=>{F(a.currentTarget)},sx:{border:`1px solid ${T.palette.divider}`,backgroundColor:T.palette.background.default},children:(0,d.jsx)(dH.A,{fontSize:"small"})})]})]})}),(0,d.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",mb:2,px:1},children:[(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",children:[t("flows.dashboard.count",a.length,{shown:v(Z.length),total:v(a.length)}),w&&s("flows.dashboard.matching",{search:w})]}),(0,d.jsx)(j.A,{variant:"body2",color:"textSecondary",children:s("flows.dashboard.showing",{sort:ae})})]}),(0,d.jsx)(i.default,{ref:$,sx:{flex:1,overflow:"auto",px:1,pb:2},children:r?(0,d.jsx)(dG.Ay,{container:!0,spacing:2.5,children:Array(6).fill(0).map((a,b)=>(0,d.jsx)(dG.Ay,{item:!0,xs:12,sm:"compact"===B?12:6,md:"compact"===B?12:4,children:(0,d.jsx)(ck.o,{})},`skeleton-${b}`))}):Z.length>0?"none"===G?af(Z):ad.map(a=>(0,d.jsx)(dQ.A,{label:a.label,count:a.items.length,expanded:!P.has(a.key),onToggle:()=>(a=>{O(b=>b.includes(a)?b.filter(b=>b!==a):[...b,a])})(a.key),showFolderIcon:"folder"===G,children:af(a.items)},a.key)):(0,d.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",p:4,backgroundColor:T.palette.background.paper,borderRadius:1,border:`1px dashed ${T.palette.divider}`,height:"100%",minHeight:200},children:[(0,d.jsx)(j.A,{variant:"h6",gutterBottom:!0,color:"textSecondary",children:w?s("flows.dashboard.noMatches"):s("flows.dashboard.empty")}),w?(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",align:"center",children:[s("flows.dashboard.noMatchHelp"),(0,d.jsx)(i.default,{component:"span",display:"block",mt:1,children:(0,d.jsx)(dV.A,{message:"flows.dashboard.trySearch",values:{clearAction:(0,d.jsx)(k.A,{size:"small",onClick:()=>x(""),children:s("flows.dashboard.clearSearch")})}})})]}):(0,d.jsxs)(j.A,{variant:"body2",color:"textSecondary",align:"center",children:[s("flows.dashboard.emptyHelp"),o&&(0,d.jsx)(i.default,{component:"span",display:"block",mt:2,children:(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(y.A,{}),onClick:o,children:s("flows.dashboard.createFirst")})})]})]})}),(0,d.jsxs)(J.A,{anchorEl:L,open:!!L,onClose:()=>M(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(K.A,{selected:"none"===G,onClick:()=>Y("none"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dO.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.group.none")})]}),(0,d.jsxs)(K.A,{selected:"folder"===G,onClick:()=>Y("folder"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dP.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.group.folder")})]}),(0,d.jsxs)(K.A,{selected:"sort"===G,onClick:()=>Y("sort"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dN.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.group.sort")})]})]}),(0,d.jsxs)(J.A,{anchorEl:E,open:!!E,onClose:W,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,d.jsxs)(K.A,{onClick:()=>X("name-asc"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dL.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.nameAsc")})]}),(0,d.jsxs)(K.A,{onClick:()=>X("name-desc"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dL.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.nameDesc")})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(K.A,{onClick:()=>X("newest"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dM.A,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.newest")})]}),(0,d.jsxs)(K.A,{onClick:()=>X("oldest"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dM.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.oldest")})]}),(0,d.jsx)(I.A,{}),(0,d.jsxs)(K.A,{onClick:()=>X("most-nodes"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dI,{fontSize:"small"})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.mostSteps")})]}),(0,d.jsxs)(K.A,{onClick:()=>X("least-nodes"),children:[(0,d.jsx)(av.A,{children:(0,d.jsx)(dI,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,d.jsx)(aw.A,{primary:s("flows.sort.fewestSteps")})]})]}),(0,d.jsx)(dU.A,{show:aa,onClick:ab})]})},dZ=(0,L.h)("app/flows/page"),d$=()=>{dZ.debug("Rendering FlowsPage"),(0,h.A)();let a=(0,g.useRouter)(),{t:b,tp:c,formatList:f}=(0,ak.s9)(),[w,C]=(0,e.useState)([]),[D,E]=(0,e.useState)(null),[F,G]=(0,e.useState)(!0),[H,I]=(0,e.useState)(!1),J=(0,e.useRef)(null),[K,L]=(0,e.useState)(null),[M,P]=(0,e.useState)([]),[Q,R]=(0,e.useState)(!1),S=(0,e.useRef)(!1),[T,U]=(0,e.useState)(!1),[V,W]=(0,e.useState)(null),[X,Y]=(0,e.useState)(""),[Z,$]=(0,e.useState)(null),[_,aa]=(0,e.useState)({open:!1,message:"",severity:"info"});(0,e.useEffect)(()=>{dZ.info("Loading flows"),(async()=>{G(!0);try{let a=await O.g.loadFlows();dZ.debug("Flows loaded successfully",{count:a.length}),C(a),D&&(a.some(a=>a.id===D)||K?.id===D||(dZ.warn("Previously selected flow no longer exists",{flowId:D}),E(null),I(!1),af(b("flows.page.previousMissing"),"warning")))}catch(a){dZ.error("Error loading flows",a),af(b("flows.page.loadFailed"),"error")}finally{G(!1)}})()},[D,K,b]);let ab=(0,e.useCallback)(a=>{dZ.debug("Flow selected",{flowId:a}),E(a),I(!0)},[]),ac=(0,e.useCallback)(b=>{dZ.debug("Opening flow in chat",{flowId:b}),a.push(`/chat?flow=${encodeURIComponent(b)}`)},[a]),ad=(0,e.useCallback)(()=>{D&&a.push(`/chat?flow=${encodeURIComponent(D)}`)},[D,a]),ae=(0,e.useRef)(!1);(0,e.useEffect)(()=>{if(ae.current||F)return;let a=new URLSearchParams(window.location.search).get("flow");if(!a){ae.current=!0;return}w.some(b=>b.id===a)&&(ae.current=!0,ab(a))},[F,w,ab]),(0,e.useEffect)(()=>{if(!(H&&D))return;let a=a=>{J.current?J.current.requestNavigation(a):a()};return dE=a,()=>{dE===a&&(dE=null)}},[H,D]);let af=(0,e.useCallback)((a,b="info")=>{dZ.debug("Showing snackbar",{message:a,severity:b}),aa({open:!0,message:a,severity:b})},[]),ag=(0,e.useCallback)(()=>{dZ.debug("Returning to dashboard");let a=()=>{if(I(!1),K&&K.id===D){let a=M.length>0;L(null),P([]),E(null),af(a?b("flows.page.draftBundleDiscarded"):b("flows.page.draftDiscarded"),"info")}};J.current?J.current.requestNavigation(a):a()},[K,M,D,af,b]),ah=(0,e.useCallback)(()=>{aa(a=>({...a,open:!1}))},[]);(0,e.useEffect)(()=>{if(!_.open||"error"===_.severity)return;let a=setTimeout(()=>{aa(a=>({...a,open:!1}))},6e3);return()=>clearTimeout(a)},[_.open,_.message,_.severity]);let ai=(0,e.useCallback)(a=>(dZ.debug("Validating flow name",{name:a}),a.trim())?/^[\p{L}\p{N}_ -]+$/u.test(a.trim())?w.some(b=>b.name.trim().toLowerCase()===a.trim().toLowerCase())?(dZ.debug("Flow name validation failed: duplicate name"),b("flows.page.nameDuplicate")):(dZ.debug("Flow name validation passed"),null):(dZ.debug("Flow name validation failed: invalid characters"),b("flows.page.nameCharacters")):(dZ.debug("Flow name validation failed: empty name"),b("flows.page.nameEmpty")),[w,b]),aj=async a=>{dZ.info("Saving flow",{flowId:a.id,flowName:a.name});try{if(K?.id===a.id&&M.length>0){for(let a of(dZ.info("Persisting generated subflow descendants before the root",{count:M.length}),M)){let c=w.some(b=>b.id===a.id)?await O.g.updateFlow(a):await O.g.addFlow(a);if(!c.success)return dZ.error("Failed to save a generated subflow",{error:c.error,childId:a.id}),af(c.error||b("flows.page.saveSubflowFailed"),"error"),!1}C(a=>{let b=new Set(a.map(a=>a.id)),c=M.filter(a=>!b.has(a.id));return c.length?[...a,...c]:a}),P([])}let c=w.some(b=>b.id===a.id)?await O.g.updateFlow(a):await O.g.addFlow(a);if(!c.success)return dZ.error("Failed to save flow",{error:c.error}),af(c.error||b("flows.page.saveFailed"),"error"),!1;return dZ.debug("Flow saved successfully"),C(b=>{let c=b.findIndex(b=>b.id===a.id);if(!(c>=0))return dZ.debug("Adding new flow to state"),[...b,a];{dZ.debug("Updating existing flow in state");let d=[...b];return d[c]=a,d}}),K?.id===a.id&&L(null),E(a.id),af(b("flows.page.saved"),"success"),!0}catch(a){return dZ.error("Error saving flow",a),af(b("flows.page.saveFailed"),"error"),!1}},al=(0,e.useCallback)((a,c)=>{C(b=>[...b.filter(b=>b.id!==a.id&&b.id!==c.id),a,c]),E(a.id),af(b("flows.page.subflowCreated",{name:c.name}),"success")},[af,b]),am=async a=>{dZ.info("Deleting flow",{flowId:a});try{await O.g.deleteFlow(a),dZ.debug("Flow deleted successfully"),C(b=>b.filter(b=>b.id!==a)),D===a&&(dZ.debug("Clearing selected flow as it was deleted"),E(null),I(!1)),af(b("flows.page.deleted"),"success")}catch(a){dZ.error("Error deleting flow",a),af(b("flows.page.deleteFailed"),"error")}},an=(0,e.useCallback)(async(a,c)=>{dZ.info("Setting flow folder",{flowId:a,folder:c});let d=w.find(b=>b.id===a);if(!d)return void dZ.warn("Flow to move not found",{flowId:a});let e={...d,folder:c&&c.trim()?c.trim():void 0};try{let c=await O.g.updateFlow(e);if(!c.success)return void af(c.error||b("flows.page.moveFailed"),"error");C(b=>b.map(b=>b.id===a?e:b)),af(e.folder?b("flows.page.moved",{folder:e.folder}):b("flows.page.removedFolder"),"success")}catch(a){dZ.error("Error setting flow folder",a),af(b("flows.page.moveFailed"),"error")}},[w,af,b]),ao=(0,e.useCallback)(async a=>{dZ.info("Toggling flow favorite",{flowId:a});let c=w.find(b=>b.id===a);if(!c)return void dZ.warn("Flow to favorite not found",{flowId:a});let d=!c.favorite,e={...c,favorite:d||void 0};try{let c=await O.g.updateFlow(e);if(!c.success)return void af(c.error||b("flows.page.favoriteFailed"),"error");C(b=>b.map(b=>b.id===a?e:b)),af(d?b("flows.page.favoriteAdded"):b("flows.page.favoriteRemoved"),"success")}catch(a){dZ.error("Error toggling flow favorite",a),af(b("flows.page.favoriteFailed"),"error")}},[w,af,b]),ap=a=>{dZ.info("Copying flow",{flowId:a});let c=w.find(b=>b.id===a);c?(dZ.debug("Found flow to copy",{flowName:c.name}),W(c),Y(b("flows.page.copyName",{name:c.name})),U(!0)):(dZ.warn("Flow to copy not found",{flowId:a}),af(b("flows.page.notFound"),"error"))},aq=()=>{dZ.debug("Closing copy flow dialog"),U(!1),W(null),Y(""),$(null)},ar=async()=>{if(dZ.info("Confirming flow copy"),!V){dZ.warn("No flow to copy"),af(b("flows.page.noCopySelection"),"error");return}let a=ai(X);if(a){dZ.debug("Flow name validation failed",{error:a}),$(a);return}let c=(0,N.A)();dZ.debug("Creating new flow from copy",{newId:c,newName:X});let d={id:c,name:X,description:V.description,nodes:V.nodes,edges:V.edges,folder:V.folder,favorite:V.favorite};await aj(d)&&(aq(),dZ.debug("Selecting newly copied flow"),E(d.id),I(!0),af(b("flows.page.copyCreated",{name:X}),"success"))},as=(0,e.useCallback)(a=>{dZ.info("Opening generated draft flow",{flowId:a.flow.id,attempts:a.attempts,errors:a.errorCount,warnings:a.warningCount}),R(!1);let d=(a.flows??[]).filter(b=>b.id!==a.rootFlowId);L(a.flow),P(d),E(a.flow.id),I(!0);let e=a.installedServers?.filter(a=>!a.alreadyExisted)??[],g=e.length>0?b("flows.page.connectedServers",{servers:f(e.map(a=>a.name))}):"",h=[d.length>0?c("flows.page.helper",d.length):"",g].filter(Boolean).join(" ");a.errorCount>0?af(`${c("flows.page.draftAttention",a.errorCount)}${h?` ${h}`:""}`,"warning"):a.warningCount>0?af(`${b("flows.page.draftSuggestions")}${h?` ${h}`:""}`,"info"):af(`${b("flows.page.draftReady")}${h?` ${h}`:""}`,"success")},[af,b,c,f]),at=(0,e.useCallback)((a="guided")=>{dZ.info("Creating new flow");let c=b("flows.page.untitled"),d=c,e=2;for(;w.some(a=>a.name===d);)d=`${c} ${e}`,e++;let f=O.g.createNewFlow(d);(0,dh.vi)("flujo-ui:flow-builder:mode",a),L(f),P([]),E(f.id),I(!0),af("advanced"===a?b("flows.page.newExpert"):b("flows.page.newGuided"),"info")},[w,af,b]);return(0,e.useEffect)(()=>{if(!S.current&&!F){if("assistant"!==new URLSearchParams(window.location.search).get("create")){S.current=!0;return}S.current=!0,at("guided"),a.replace("/flows")}},[at,F,a]),(0,d.jsxs)(i.default,{sx:{height:{xs:"auto",md:"calc(100dvh - var(--app-bar-height))"},minHeight:"calc(100dvh - var(--app-bar-height))",display:"flex",flexDirection:"column",overflow:{xs:"visible",md:"hidden"}},children:[(0,d.jsx)(dD.default,{eyebrow:H?b("flows.page.eyebrowMine"):b("flows.page.eyebrowCreate"),icon:A.A,compact:H,title:H&&D?K?.id===D?b("flows.page.draftSuffix",{name:K.name}):w.find(a=>a.id===D)?.name||b("flows.page.agent"):b("flows.page.title"),description:H?b("flows.page.editDescription"):b("flows.page.description"),leading:H&&D?(0,d.jsx)(m.A,{color:"primary",onClick:ag,"aria-label":b("flows.page.back"),sx:{border:1,borderColor:"divider"},children:(0,d.jsx)(x,{})}):void 0,actions:H?void 0:(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.A,{title:b("flows.page.aiHelp"),describeChild:!0,children:(0,d.jsx)(k.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(z,{}),onClick:()=>R(!0),"data-tour":"generate-flow",children:b("flows.page.createAi")})}),(0,d.jsx)(n.A,{title:b("flows.page.simpleHelp"),describeChild:!0,children:(0,d.jsx)(k.A,{variant:"outlined",color:"primary",startIcon:(0,d.jsx)(y.A,{}),onClick:()=>at("guided"),"data-tour":"new-flow",children:b("flows.page.startSimple")})}),(0,d.jsx)(n.A,{title:b("flows.page.expertHelp"),describeChild:!0,children:(0,d.jsx)(k.A,{variant:"outlined",color:"primary",startIcon:(0,d.jsx)(B.A,{}),onClick:()=>at("advanced"),"data-tour":"new-expert-flow",children:b("flows.page.startExpert")})})]})}),(0,d.jsx)(o.A,{in:_.open,unmountOnExit:!0,children:(0,d.jsx)(p.A,{severity:_.severity,onClose:ah,sx:{borderRadius:0},children:_.message})}),(0,d.jsx)(i.default,{sx:{flex:1,minHeight:0,overflow:{xs:"visible",md:"hidden"}},children:(()=>{if(H&&D){let a=w.find(a=>a.id===D)??(K?.id===D?K:void 0);return a?(0,d.jsx)(l.A,{in:!0,timeout:300,children:(0,d.jsx)(i.default,{sx:{height:{xs:"auto",md:"100%"}},children:(0,d.jsx)(dt,{ref:J,initialFlow:a,onSave:aj,onDelete:am,onConversionCommitted:al,allFlows:[...w.filter(a=>!M.some(b=>b.id===a.id)),...M],relatedDraftFlows:M,onRelatedDraftFlowsChange:P,isDraft:K?.id===a.id,onTry:ad,onNavigateToFlow:ab},D)})}):(0,d.jsxs)(i.default,{sx:{p:4,textAlign:"center"},children:[(0,d.jsx)(j.A,{variant:"h6",color:"error",children:b("flows.page.notFound")}),(0,d.jsx)(k.A,{variant:"contained",onClick:ag,sx:{mt:2},children:b("flows.page.back")})]})}return(0,d.jsx)(l.A,{in:!0,timeout:300,children:(0,d.jsx)(i.default,{sx:{height:{xs:"auto",md:"100%"}},children:(0,d.jsx)(dY,{flows:w,selectedFlow:D,onSelectFlow:ab,onDeleteFlow:am,onCopyFlow:ap,onCreateFlow:()=>at("guided"),onSetFolder:an,onToggleFavorite:ao,onOpenInChat:ac,isLoading:F})})})})()}),(0,d.jsxs)(q.A,{open:T,onClose:aq,children:[(0,d.jsx)(r.A,{children:b("flows.page.copyTitle")}),(0,d.jsxs)(s.A,{children:[(0,d.jsx)(t.A,{children:b("flows.page.copyPrompt")}),(0,d.jsx)(u.A,{autoFocus:!0,margin:"dense",label:b("flows.page.nameLabel"),type:"text",fullWidth:!0,value:X,onChange:a=>{let b=a.target.value;dZ.debug("Flow name changed",{name:b}),Y(b),$(ai(b))},error:!!Z,helperText:Z})]}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(k.A,{onClick:aq,children:b("common.cancel")}),(0,d.jsx)(k.A,{onClick:ar,variant:"contained",color:"primary",disabled:!!Z,children:b("flows.page.copyAction")})]})]}),(0,d.jsx)(dC,{open:Q,onClose:()=>R(!1),onGenerated:as})]})}}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[5873,8298,773,3954,8745,7674,8730,5642,3418,7147,8897,9868,3855,6607,7883,5494,8940,5807,5446,5863,3262,7031,5444,1314,2069,1662,3945,9490,519,1227,9543,3422],()=>b(b.s=92279));module.exports=c})();
|