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
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ FLUJO is open-source and local-first: connect models, tools, and reusable subflo
|
|
|
13
13
|
[**Watch the 2:28 product film →**](https://mario-andreschak.github.io/FLUJO/githubpages/short/) · [**Install FLUJO ↓**](#-quick-install-recommended) · [**Explore features ↓**](#-key-features)
|
|
14
14
|
|
|
15
15
|
[](LICENSE)
|
|
16
|
-
[](package.json)
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flujo-ai",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.41.0",
|
|
4
4
|
"workspaces": [
|
|
5
5
|
"mcp-servers/bash",
|
|
6
6
|
"mcp-servers/browser",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"@anthropic-ai/sdk": "^0.105.0",
|
|
47
47
|
"@emotion/react": "^11.14.0",
|
|
48
48
|
"@emotion/styled": "^11.14.0",
|
|
49
|
-
"@mario.andreschak/mcp-bash": "3.
|
|
50
|
-
"@mario.andreschak/mcp-browser": "3.
|
|
51
|
-
"@mario.andreschak/mcp-filesystem": "3.
|
|
52
|
-
"@mario.andreschak/mcp-flujo": "3.
|
|
49
|
+
"@mario.andreschak/mcp-bash": "3.41.0",
|
|
50
|
+
"@mario.andreschak/mcp-browser": "3.41.0",
|
|
51
|
+
"@mario.andreschak/mcp-filesystem": "3.41.0",
|
|
52
|
+
"@mario.andreschak/mcp-flujo": "3.41.0",
|
|
53
53
|
"@google/genai": "^2.9.0",
|
|
54
54
|
"@isomorphic-git/lightning-fs": "^4.6.0",
|
|
55
55
|
"@modelcontextprotocol/client": "2.0.0-beta.5",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=7508,exports.ids=[7508],exports.modules={31411:(a,b,c)=>{c.d(b,{A:()=>q});var d=c(21124),e=c(38301),f=c(79515),g=c(81637),h=c(95587),i=c(67191),j=c(82605),k=c(50062),l=c(7675),m=c(94367),n=c(37674),o=c(49938),p=c(50551);let q=({schema:a,values:b,onChange:c,size:q="small"})=>{let{globalEnvVars:r}=(0,o.rX)(),s=(0,e.useMemo)(()=>Object.keys(r).sort((a,b)=>a.localeCompare(b)),[r]),[t,u]=(0,e.useState)({}),v=a?.properties??{},w=Array.isArray(a?.required)?a.required:[],x=Object.keys(v);if(0===x.length)return(0,d.jsx)(f.A,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let y=(a,d)=>{let e={...b};void 0===d?delete e[a]:e[a]=d,c(e)};return(0,d.jsx)(g.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:x.map(a=>{let c=v[a]??{},e=w.includes(a)?`${a} *`:a,o="string"==typeof c.description?c.description:"";if("boolean"===c.type)return(0,d.jsx)(h.A,{control:(0,d.jsx)(i.A,{size:q,checked:!0===b[a],onChange:b=>y(a,b.target.checked)}),label:(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.A,{variant:"body2",children:e}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",children:o})]})},a);if(Array.isArray(c.enum)&&c.enum.length>0){let g=b[a];return(0,d.jsxs)(j.A,{size:q,fullWidth:!0,children:[(0,d.jsx)(k.A,{id:`schema-param-${a}`,children:e}),(0,d.jsx)(l.A,{labelId:`schema-param-${a}`,label:e,value:c.enum.includes(g)?g:"",onChange:b=>y(a,b.target.value),children:c.enum.map(a=>(0,d.jsx)(m.A,{value:a,children:String(a)},String(a)))}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:o})]},a)}if("number"===c.type||"integer"===c.type)return(0,d.jsx)(n.A,{fullWidth:!0,size:q,type:"number",label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>{let d=b.target.value;if(""===d)return void y(a,void 0);let e="integer"===c.type?parseInt(d,10):parseFloat(d);y(a,Number.isNaN(e)?void 0:e)},helperText:o},a);if("object"===c.type||"array"===c.type){let f=t[a]??(void 0!==b[a]?JSON.stringify(b[a],null,2):""),g=null;if(f.trim())try{JSON.parse(f)}catch{g="Not valid JSON yet"}return(0,d.jsx)(n.A,{fullWidth:!0,size:q,multiline:!0,minRows:2,label:`${e} (JSON ${c.type})`,value:f,error:!!g,helperText:g??o,onChange:b=>{let c=b.target.value;if(u(b=>({...b,[a]:c})),!c.trim())return void y(a,void 0);try{y(a,JSON.parse(c))}catch{}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},a)}return(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.A,{variant:"body2",component:"label",sx:{display:"block",mb:.5},children:e}),(0,d.jsx)(p.Ay,{value:void 0!==b[a]?String(b[a]):"",onChange:b=>y(a,""===b?void 0:b),globalNames:s,placeholder:o||a,multiline:!1,minRows:1,ariaLabel:e}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5,mx:1.75},children:o})]},a)})})}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(68730),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(42819).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.A,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(a,b){try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return null;let e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({action:"installStream",savePath:a,installCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Dependencies installed successfully. You can now build the server."}:{type:"error",text:"Error installing dependencies. You can still try to build the server."},output:d.output||"No output was returned from the installation process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:a,installCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to install dependencies");return{success:!0,message:{type:"success",text:"Dependencies installed successfully. You can now build the server."},output:d.commandOutput||"No output was returned from the installation process."}}catch(a){return console.error("Error installing dependencies:",a),{success:!1,message:{type:"error",text:`Error installing dependencies: ${a.message||"Unknown error"}. You can still try to build the server.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},g=async(a,b,c)=>{if(c){let d=await e({action:"buildStream",savePath:a,buildCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Server built successfully."}:{type:"error",text:"Error building server."},output:d.output||"No output was returned from the build process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:a,buildCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to build repository");return{success:!0,message:{type:"success",text:"Server built successfully."},output:d.commandOutput||"No output was returned from the build process."}}catch(a){return console.error("Error building server:",a),{success:!1,message:{type:"error",text:`Error building server: ${a.message||"Unknown error"}.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}}},44920:(a,b,c)=>{function d(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a))b[c]=d&&"object"==typeof d&&"value"in d?d.value:"string"==typeof d?d:"";return b}function e(a){let b,c=[],d=[];if("string"==typeof a)try{b=JSON.parse(a)}catch(a){return{servers:d,errors:[`Invalid JSON: ${a.message}`]}}else b=a;if(!b||"object"!=typeof b)return{servers:d,errors:["Expected a JSON object."]};let e=b,f=e.mcpServers&&"object"==typeof e.mcpServers?e.mcpServers:e;if(0===Object.keys(f).length)return{servers:d,errors:['No servers found. Expected an "mcpServers" object.']};for(let[a,b]of Object.entries(f)){if(!b||"object"!=typeof b){c.push(`"${a}": entry is not an object.`);continue}let e=function(a){let b=(a.transport||a.type||"").toString().toLowerCase().trim();if(!b)return"stdio";switch(b){case"stdio":return"stdio";case"http":case"streamable-http":case"streamable":case"streamablehttp":return"streamable";case"sse":return"sse";case"ws":case"websocket":return"websocket";default:return null}}(b);if(!e){c.push(`"${a}": unknown transport type "${b.type||b.transport}".`);continue}let f={};if(b.env&&"object"==typeof b.env)for(let[a,c]of Object.entries(b.env))f[a]="string"==typeof c?c:String(c??"");let g={name:a,env:f,disabled:b.disabled??!1,autoApprove:Array.isArray(b.autoApprove)?b.autoApprove:[],rootPath:"",_buildCommand:"",_installCommand:""};if("stdio"===e){if(!b.command||"string"!=typeof b.command){c.push(`"${a}": stdio server is missing a "command".`);continue}d.push({...g,transport:"stdio",command:b.command,args:Array.isArray(b.args)?b.args:[]})}else if("websocket"===e){let e=b.url||b.websocketUrl;if(!e){c.push(`"${a}": websocket server is missing a "url".`);continue}d.push({...g,transport:"websocket",websocketUrl:e})}else{let f=b.url||b.serverUrl;if(!f){c.push(`"${a}": ${e} server is missing a "url".`);continue}let h=b.headers&&"object"==typeof b.headers?b.headers:void 0;d.push({...g,transport:e,serverUrl:f,...h?{headers:h}:{}})}}return{servers:d,errors:c}}c.d(b,{_i:()=>f,CZ:()=>h,Kt:()=>g});let f=[{id:"claude",label:"Claude",fileName:"mcp_config.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){if(b.exposeAsMcpServer){e[b.name]={type:"http",url:`${c}/mcp-proxy/${b.name}`};continue}let a={},f=d(b.env);switch(b.transport){case"stdio":a.command=b.command,a.args=b.args||[],Object.keys(f).length>0&&(a.env=f);break;case"streamable":a.type="http",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"sse":a.type="sse",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"websocket":a.type="ws",a.url=b.websocketUrl,Object.keys(f).length>0&&(a.env=f);break;default:Object.keys(f).length>0&&(a.env=f)}e[b.name]=a}return{mcpServers:e}},import:e},{id:"cline",label:"Cline",fileName:"cline_mcp_settings.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){let a={disabled:b.disabled??!1,autoApprove:b.autoApprove??[],timeout:60};if(b.exposeAsMcpServer){e[b.name]={...a,type:"streamableHttp",url:`${c}/mcp-proxy/${b.name}`};continue}let f=d(b.env),g={...a};switch(b.transport){case"stdio":g.command=b.command,g.args=b.args||[],Object.keys(f).length>0&&(g.env=f);break;case"streamable":g.type="streamableHttp",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"sse":g.type="sse",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"websocket":g.type="ws",g.url=b.websocketUrl;break;default:Object.keys(f).length>0&&(g.env=f)}e[b.name]=g}return{mcpServers:e}},import:function(a){return e(a)}}];function g(a){return f.find(b=>b.id===a)??f[0]}function h(a,b,c,d="claude"){let e=(c||"").replace(/\/$/,"");return JSON.stringify(b?g(d).export([b],{proxyBaseUrl:e}):{mcpServers:{[a]:{type:"http",url:`${e}/mcp-proxy/${a}`}}},null,2)}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(42819).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(a){try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pullUpdates",savePath:a})}),c=await b.json();if(!b.ok)return{success:!1,error:c.error||"Failed to pull updates"};return{success:!0,oldSha:c.oldSha,newSha:c.newSha,updated:c.updated}}catch(a){return{success:!1,error:a.message||"Failed to pull updates"}}}async function h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.total_commits:null,commits:f.slice(-10).reverse().map(a=>({sha:(a.sha||"").slice(0,7),message:(a.commit?.message||"").split("\n")[0]}))}}catch(a){return d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},58156:(a,b,c)=>{c.d(b,{default:()=>j});var d=c(21124),e=c(60839),f=c(81637),g=c(53773),h=c(79515),i=c(37489);function j({title:a,description:b,eyebrow:c,icon:j,leading:k,badge:l,actions:m,compact:n=!1,maxWidth:o=1440}){let p=(0,e.A)();return(0,d.jsx)(f.default,{component:"header",sx:{position:"relative",overflow:"hidden",borderBottom:1,borderColor:"divider",background:`linear-gradient(110deg, ${(0,i.X4)(p.palette.primary.main,"dark"===p.palette.mode?.09:.055)}, transparent 38%, ${(0,i.X4)(p.palette.secondary.main,.045)})`,"&::after":{position:"absolute",top:-90,right:"8%",width:220,height:160,borderRadius:"50%",content:'""',pointerEvents:"none",background:`radial-gradient(circle, ${(0,i.X4)(p.palette.primary.main,.16)}, transparent 68%)`,filter:"blur(20px)"}},children:(0,d.jsxs)(f.default,{sx:{position:"relative",zIndex:1,display:"flex",width:"100%",maxWidth:o,mx:"auto",px:{xs:2,sm:3,lg:4},py:n?{xs:1.8,sm:2}:{xs:2.2,sm:2.8},alignItems:{xs:"flex-start",md:"center"},justifyContent:"space-between",flexDirection:{xs:"column",md:"row"},gap:2},children:[(0,d.jsxs)(g.A,{direction:"row",spacing:1.5,alignItems:"center",sx:{minWidth:0},children:[k,j&&(0,d.jsx)(f.default,{"aria-hidden":"true",sx:{display:"grid",width:n?40:46,height:n?40:46,flexShrink:0,placeItems:"center",border:`1px solid ${(0,i.X4)(p.palette.primary.main,.24)}`,borderRadius:n?2.8:3.2,color:"primary.light",bgcolor:(0,i.X4)(p.palette.primary.main,.1),boxShadow:`inset 0 1px 0 ${(0,i.X4)(p.palette.common.white,.08)}, 0 10px 30px ${(0,i.X4)(p.palette.primary.main,.12)}`},children:(0,d.jsx)(j,{sx:{fontSize:n?21:24}})}),(0,d.jsxs)(f.default,{sx:{minWidth:0},children:[(c||l)&&(0,d.jsxs)(g.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.35},children:[c&&(0,d.jsx)(h.A,{sx:{color:"primary.light",fontSize:"0.67rem",fontWeight:780,letterSpacing:"0.13em",textTransform:"uppercase"},children:c}),l]}),(0,d.jsx)(h.A,{component:"h1",variant:"h5",sx:{overflow:"hidden",textOverflow:"ellipsis",fontSize:n?"1.2rem":void 0,whiteSpace:{xs:"normal",sm:"nowrap"}},children:a}),b&&(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:.45,maxWidth:720,textWrap:"balance"},children:b})]})]}),m&&(0,d.jsx)(f.default,{sx:{display:"flex",width:{xs:"100%",md:"auto"},flexShrink:0,flexWrap:"wrap",alignItems:"center",gap:1,"& > .MuiButton-root":{flex:{xs:"1 1 auto",sm:"0 0 auto"}}},children:m})]})})}},61160:(a,b,c)=>{c.d(b,{mO:()=>f,oO:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}},68774:(a,b,c)=>{c.d(b,{A:()=>aj});var d=c(21124),e=c(38301),f=c(42819),g=c(84040),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(51694),u=c(1312),v=c(25750),w=c(5501),x=c(99587),y=c(61615),z=c(78352),A=c(28055),B=c(44920),C=c(41893),D=c(56685),E=c(71756),F=c(91901),G=c(83013);let H=({transport:a,size:b="small"})=>{let{colors:c}=(0,g.Ic)(),e=c.domain.transport,f=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(D.A,{fontSize:"small"}),color:e.stdio.fg,bgColor:e.stdio.bg};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(E.A,{fontSize:"small"}),color:e.websocket.fg,bgColor:e.websocket.bg};case"sse":return{label:"SSE",icon:(0,d.jsx)(F.A,{fontSize:"small"}),color:e.sse.fg,bgColor:e.sse.bg};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(G.A,{fontSize:"small"}),color:e.streamable.fg,bgColor:e.streamable.bg};default:return{label:"UNKNOWN",icon:(0,d.jsx)(D.A,{fontSize:"small"}),color:e.default.fg,bgColor:e.default.bg}}})();return(0,d.jsx)(C.A,{icon:f.icon,label:f.label,size:b,sx:{backgroundColor:f.bgColor,color:f.color,fontWeight:500,fontSize:"small"===b?"0.75rem":"0.875rem",height:"small"===b?24:32,"& .MuiChip-icon":{color:f.color}}})};var I=c(40512),J=c(83899),K=c(52327),L=c(19925),M=c(68730),N=c(81637),O=c(79515),P=c(88745),Q=c(95587),R=c(77028),S=c(89490),T=c(71439),U=c(50553),V=c(84233),W=c(72264),X=c(53455),Y=c(33799);let Z=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),$=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,w]=(0,e.useState)(!1),[x,z]=(0,e.useState)(null),[A,B]=(0,e.useState)({}),[D,E]=(0,e.useState)(""),F=!!(g&&g.trim()),G=!!(i&&i.trim()),H=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:F},{key:"build",label:`Build (${i})`,active:G},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),w(!1),z(null),B({}),E(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,X.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let $=(0,e.useCallback)((a,b)=>{B(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{E(c=>c+(c?"\n":"")+`--- ${a} ---
|
|
2
|
-
`+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),z(null),Z.info(`Starting update for server ${c}`);let a=(a,b)=>{$(a,"error"),z(b),t(!1)};try{k&&($("stop","running"),await Promise.resolve(m(!1)),$("stop","done")),$("pull","running");let b=await (0,X.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,X.Fu)(b.oldSha)} -> ${(0,X.Fu)(b.newSha)}`),$("pull","done"),F){$("install","running");let b=await (0,Y.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);$("install","done")}if(G){$("build","running");let b=await (0,Y.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);$("build","done")}k&&($("restart","running"),await Promise.resolve(m(!0)),$("restart","done")),Z.info(`Update completed for server ${c}`),w(!0),t(!1),n?.()}catch(a){Z.error(`Update failed for server ${c}`,a),z(a.message||"Update failed"),t(!1)}},ab=s||u||Object.keys(A).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(I.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(v.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(K.A,{children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(C.A,{size:"small",label:(0,X.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(O.A,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(C.A,{size:"small",color:"primary",label:(0,X.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(N.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(O.A,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(P.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(O.A,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(N.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(O.A,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(Q.A,{sx:{mt:1},control:(0,d.jsx)(R.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(O.A,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(S.A,{dense:!0,disablePadding:!0,children:H.filter(a=>a.active).map(a=>(0,d.jsxs)(T.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(U.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(y.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(W.A,{color:"disabled",fontSize:"small"})}})(A[a.key])}),(0,d.jsx)(V.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),x&&(0,d.jsxs)(P.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[x,k&&(0,d.jsx)(O.A,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),u&&(0,d.jsxs)(P.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),D&&(0,d.jsx)(N.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:D})]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(M.A,{onClick:b,disabled:s,children:u?"Close":"Cancel"}),!u&&(0,d.jsx)(M.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(v.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":x?"Retry Update":"Update"})]})]})};var _=c(23744),aa=c(60839),ab=c(30818),ac=c(37489),ad=c(43312),ae=c(44079),af=c(27114),ag=c(67191),ah=c(98463);let ai=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),aj=({name:a,status:b,path:f,enabled:D,transport:E,onToggle:F=()=>{},onRetry:G=()=>{},onDelete:Q=()=>{},onClick:S,onEdit:T=()=>{},onAuthenticate:U,pickerMode:V=!1,error:W,stderrOutput:Y,authorizationUrl:Z,selected:aj=!1,onSelect:ak,selectionMode:al=!1,hasOAuthTokens:am=!1,exposeAsMcpServer:an=!1,enableMcpApps:ao=!1,updateInfo:ap,installCommand:aq,buildCommand:ar,onUpdated:as,folder:at,folders:au=[],onSetFolder:av,favorite:aw=!1,onToggleFavorite:ax,serverConfig:ay})=>{let[az,aA]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(null),[aD,aE]=(0,e.useState)(!1),[aF,aG]=(0,e.useState)(!1),[aH,aI]=(0,e.useState)(""),[aJ,aK]=(0,e.useState)("success"),[aL,aM]=(0,e.useState)(!1),[aN,aO]=(0,e.useState)(!1),[aP,aQ]=(0,e.useState)(an),[aR,aS]=(0,e.useState)(ao),aT=(0,aa.A)();(0,e.useEffect)(()=>{aQ(an)},[an]),(0,e.useEffect)(()=>{aS(ao)},[ao]);let aU=async b=>{aQ(b);let c=await A.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aI(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aK("success")):(aQ(!b),aI("Failed to update exposure setting."),aK("error")),aG(!0)},aV=async b=>{aS(b);let c=await A.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aI(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aK("success")):(aS(!b),aI("Failed to update the MCP Apps setting."),aK("error")),aG(!0)},aW={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&D&&!V){aM(!0);let b=setTimeout(()=>{ai.debug(`Polling status for server: ${a}`),G()},2e3);return()=>{clearTimeout(b),aM(!1)}}"connecting"!==b&&"initialization"!==b&&aM(!1)},[b,D,a,G]);let[aX,aY]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{aX&&clearTimeout(aX)},[aX]);let aZ=async b=>{b.stopPropagation(),ai.debug(`Reset OAuth tokens button clicked for server: ${a}`),aO(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();ai.info(`OAuth tokens reset successfully for ${a}`,c),aI("OAuth tokens reset successfully. Server will require re-authentication."),aK("success"),aG(!0),setTimeout(()=>{G()},500)}catch(b){ai.error(`Failed to reset OAuth tokens for ${a}`,b),aI(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aK("error"),aG(!0)}finally{aO(!1)}},{getThemeValue:a$,getThemeColor:a_,colors:a0}=(0,g.Ic)(),a1=()=>{ai.debug(`Server restart initiated for: ${a}`),F(!1),setTimeout(()=>{F(!0),ai.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(ab.A,{role:V?"button":void 0,"aria-pressed":V?aj:void 0,sx:{cursor:"pointer",position:"relative",height:V?"100%":void 0,overflow:"hidden",transition:"transform 200ms ease, box-shadow 200ms ease, border-color 180ms ease",border:a=>`1px solid ${V&&aj?a.palette.primary.main:a.palette.divider}`,boxShadow:V&&aj?`0 0 0 3px ${(0,ac.X4)(aT.palette.primary.main,.13)}`:void 0,"&:hover":{borderColor:(0,ac.X4)(aT.palette.primary.main,.38),boxShadow:`0 22px 60px ${(0,ac.X4)(aT.palette.primary.main,.12)}`,transform:"translateY(-4px)"}},onClick:()=>{ai.debug(`Server card clicked: ${a}`),S()},children:[ax&&(0,d.jsx)(ad.A,{title:aw?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(ae.A,{size:"small","aria-label":aw?"remove from favorites":"add to favorites",onClick:a=>{a.stopPropagation(),ax()},sx:{position:"absolute",top:4,left:4,zIndex:2,color:aw?aT.palette.warning.main:aT.palette.text.secondary,backgroundColor:(0,ac.X4)(aT.palette.background.paper,.6),"&:hover":{backgroundColor:(0,ac.X4)(aT.palette.background.paper,.9)}},children:aw?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),(0,d.jsxs)(af.A,{sx:{pb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[al&&ak&&(0,d.jsx)(R.A,{checked:aj,onClick:a=>a.stopPropagation(),onChange:a=>ak(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(O.A,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(N.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ap?.updateAvailable&&(0,d.jsx)(ad.A,{title:`Update available: ${(0,X.Fu)(ap.localSha)} → ${(0,X.Fu)(ap.remoteSha)}. Click to update.`,children:(0,d.jsx)(C.A,{icon:(0,d.jsx)(v.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),ai.debug(`Update badge clicked for server: ${a}`),aE(!0)}})}),(0,d.jsx)(H,{transport:E,size:"small"})]}),(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(y.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(O.A,{variant:"body2",color:aW,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(O.A,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:f,children:f}),!V&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1,p:1.1,borderRadius:2.5,border:"1px solid",borderColor:"divider",bgcolor:(0,ac.X4)(aT.palette.background.default,.42)},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aP?"primary.main":"text.disabled"}}),(0,d.jsx)(ag.A,{checked:aP,onChange:a=>aU(a.target.checked),size:"small"}),(0,d.jsx)(ad.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(O.A,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aP&&(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(O.A,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ad.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ae.A,{size:"small",onClick:()=>{navigator.clipboard.writeText(""),aI("Endpoint URL copied to clipboard."),aK("success"),aG(!0)},children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ad.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ae.A,{size:"small",onClick:()=>{navigator.clipboard.writeText((0,B.CZ)(a,ay,"")),aI("Server JSON copied to clipboard."),aK("success"),aG(!0)},children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!V&&(0,d.jsx)(N.default,{sx:{mt:1,mb:1,p:1.1,borderRadius:2.5,border:"1px solid",borderColor:"divider",bgcolor:(0,ac.X4)(aT.palette.background.default,.42)},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aR?"primary.main":"text.disabled"}}),(0,d.jsx)(ag.A,{checked:aR,onChange:a=>aV(a.target.checked),size:"small"}),(0,d.jsx)(ad.A,{title:"Allow this server's tools to render isolated interactive apps (MCP Apps / ui:// resources) and broker same-server tool/resource requests. Only enable for servers you trust.",children:(0,d.jsx)(O.A,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(O.A,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(M.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),ai.debug(`View full error clicked for server: ${a}`),aA(!0)},children:"View Full Error"})]}),(0,d.jsx)(N.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>a_("error.background"),color:a=>a_("error.text"),border:"1px solid",borderColor:a=>a_("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:W||"Unknown error"})]}),"requires_authentication"===b&&!V&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(O.A,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(M.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),ai.debug(`Authenticate button clicked for server: ${a}`),U)U();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){ai.info(`Server ${a} already authorized, no popup needed`),a1();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{ai.info(`OAuth authentication successful for ${a}`,b),ai.info(`Automatically restarting server ${a} after OAuth completion`),a1()},onError:b=>{ai.error(`OAuth authentication failed for ${a}`,b),aI("OAuth authentication failed"),aK("error"),aG(!0)}})}catch(b){ai.error(`Failed to start OAuth authentication for ${a}`,b),aI("Failed to start OAuth authentication"),aK("error"),aG(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),!V&&(0,d.jsxs)(ah.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ag.A,{checked:D,onClick:a=>a.stopPropagation(),onChange:b=>{ai.debug(`Server ${a} toggle changed to: ${b.target.checked}`),F(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(O.A,{variant:"body2",sx:{ml:.5,fontWeight:500,color:D?"primary.main":"text.secondary"},children:D?"Enabled":"Disabled"}),D&&(0,d.jsx)(ad.A,{title:"Restart server",children:(0,d.jsx)(ae.A,{size:"small",onClick:b=>{b.stopPropagation(),ai.debug(`Restart button clicked for server: ${a}`),a1()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(N.default,{children:[(0,d.jsx)(ad.A,{title:"Retry connection",children:(0,d.jsx)(ae.A,{color:"primary",onClick:c=>{c.stopPropagation(),ai.debug(`Retry button clicked for server: ${a}`),aX&&clearTimeout(aX),aM(!0),G();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aM(!1),aY(null)},1e4);aY(d)},disabled:aL,size:"small",children:aL?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===E&&am&&(0,d.jsx)(ad.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(ae.A,{color:"warning",onClick:aZ,disabled:aN,size:"small",children:aN?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),av&&(0,d.jsx)(ad.A,{title:at?`Folder: ${at}`:"Move to folder",children:(0,d.jsx)(ae.A,{color:at?"primary":"default",onClick:a=>{a.stopPropagation(),aC(a.currentTarget)},size:"small",children:(0,d.jsx)(u.A,{})})}),(0,d.jsx)(ad.A,{title:"Edit server",children:(0,d.jsx)(ae.A,{color:"primary",onClick:a=>{a.stopPropagation(),T()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(ad.A,{title:"Delete server",children:(0,d.jsx)(ae.A,{color:"error",onClick:a=>{a.stopPropagation(),Q()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),av&&(0,d.jsx)(z.A,{anchorEl:aB,open:!!aB,currentFolder:at,folders:au,onClose:()=>aC(null),onAssign:a=>av(a)}),(0,d.jsxs)(I.A,{open:az,onClose:()=>{ai.debug(`Error modal closed for server: ${a}`),aA(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(K.A,{children:[(0,d.jsx)(N.default,{sx:{p:2,borderRadius:1,bgcolor:a=>a_("error.background"),color:a=>a_("error.text"),border:"1px solid",borderColor:a=>a_("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:W||"Unknown error"}),Y&&(0,d.jsxs)(N.default,{sx:{mt:2},children:[(0,d.jsx)(O.A,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(N.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:Y})]})]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(M.A,{onClick:()=>aA(!1),children:"Close"}),(0,d.jsx)(M.A,{onClick:()=>{let b=[W||"Unknown error",Y?`
|
|
3
|
-
|
|
4
|
-
Stderr Output:
|
|
5
|
-
${Y}`:""].join("");navigator.clipboard.writeText(b),ai.debug(`Error copied to clipboard for server: ${a}`),aI("Error message copied to clipboard"),aK("success"),aG(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ap&&(0,d.jsx)($,{open:aD,onClose:()=>aE(!1),serverName:a,rootPath:f,installCommand:aq,buildCommand:ar,enabled:D,updateInfo:ap,onToggle:F,onUpdated:as}),(0,d.jsx)(_.A,{open:aF,autoHideDuration:3e3,onClose:()=>aG(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(P.A,{onClose:()=>aG(!1),severity:aJ,sx:{width:"100%"},children:aH||"Error message copied to clipboard"})})]})}}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=8598,exports.ids=[8598],exports.modules={2173:(a,b,c)=>{c.d(b,{A:()=>r});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(53773),i=c(37674),j=c(43312),k=c(44079),l=c(68730),m=c(47902),n=c(91034),o=c(30717),p=c(46410),q=c(32720);let r=({roots:a,onChange:b})=>{let c=Array.isArray(a)?a:[],[r,s]=(0,e.useState)(null),t=(a,d)=>{b(c.map((b,c)=>c===a?d:b))};return(0,d.jsxs)(f.default,{children:[(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(o.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.A,{variant:"subtitle1",children:"Workspace folders"})]}),(0,d.jsxs)(g.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Limit which folders this server may work in. Advisory only — the server is told these paths via MCP roots; it is not a hard sandbox. Leave empty to default to the server's own root dir. Supports ",(0,d.jsx)("code",{children:"${global:VAR}"}),"."]}),(0,d.jsx)(h.A,{spacing:1,children:c.map((a,e)=>(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(i.A,{size:"small",fullWidth:!0,placeholder:"/path/to/folder or file:///path",value:a,onChange:a=>t(e,a.target.value)}),(0,d.jsx)(j.A,{title:"Browse folders (on the FLUJO machine)",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>s(e),"aria-label":"browse for folder",children:(0,d.jsx)(p.A,{fontSize:"small"})})}),(0,d.jsx)(j.A,{title:"Remove",children:(0,d.jsx)(k.A,{size:"small",onClick:()=>b(c.filter((a,b)=>b!==e)),"aria-label":"remove workspace folder",children:(0,d.jsx)(n.A,{fontSize:"small"})})})]},e))}),(0,d.jsx)(l.A,{size:"small",startIcon:(0,d.jsx)(m.A,{}),onClick:()=>b([...c,""]),sx:{mt:1},children:"Add folder"}),(0,d.jsx)(q.A,{open:null!==r,title:"Choose a workspace folder",initialPath:null!==r&&c[r]||void 0,onClose:()=>s(null),onSelect:a=>{null!==r&&t(r,a)}})]})}},35406:(a,b,c)=>{c.d(b,{A:()=>x});var d=c(38301),e=c(43249),f=c(37489),g=c(2783),h=c(4007),i=c(6638),j=c(18168),k=c(60839),l=c(68333),m=c(54716),n=c(6636),o=c(79515),p=c(29565),q=c(33105);function r(a){return(0,q.Ay)("MuiLink",a)}let s=(0,p.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var t=c(97287),u=c(21124);let v={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},w=(0,j.Ay)(o.A,{name:"MuiLink",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,b[`underline${(0,i.A)(c.underline)}`],"button"===c.component&&b.button]}})((0,l.A)(({theme:a})=>({variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:({underline:a,ownerState:b})=>"always"===a&&"inherit"!==b.color,style:{textDecorationColor:"var(--Link-underlineColor)"}},...Object.entries(a.palette).filter((0,m.A)()).map(([b])=>({props:{underline:"always",color:b},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette[b].mainChannel} / 0.4)`:(0,f.X4)(a.palette[b].main,.4)}})),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.primaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":a.vars?`rgba(${a.vars.palette.text.secondaryChannel} / 0.4)`:(0,f.X4)(a.palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(a.vars||a).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${s.focusVisible}`]:{outline:"auto"}}}]}))),x=d.forwardRef(function(a,b){let c=(0,n.b)({props:a,name:"MuiLink"}),j=(0,k.A)(),{className:l,color:m="primary",component:o="a",onBlur:p,onFocus:q,TypographyClasses:s,underline:x="always",variant:y="inherit",sx:z,...A}=c,[B,C]=d.useState(!1),D={...c,color:m,component:o,focusVisible:B,underline:x,variant:y},E=(a=>{let{classes:b,component:c,focusVisible:d,underline:e}=a,f={root:["root",`underline${(0,i.A)(e)}`,"button"===c&&"button",d&&"focusVisible"]};return(0,g.A)(f,r,b)})(D);return(0,u.jsx)(w,{color:m,className:(0,e.A)(E.root,l),classes:s,component:o,onBlur:a=>{(0,h.A)(a.target)||C(!1),p&&p(a)},onFocus:a=>{(0,h.A)(a.target)&&C(!0),q&&q(a)},ref:b,ownerState:D,variant:y,...A,sx:[...void 0===v[m]?[{color:m}]:[],...Array.isArray(z)?z:[z]],style:{...A.style,..."always"===x&&"inherit"!==m&&!v[m]&&{"--Link-underlineColor":(({theme:a,ownerState:b})=>{let c=b.color,d=(0,t.Yn)(a,`palette.${c}.main`,!1)||(0,t.Yn)(a,`palette.${c}`,!1)||b.color,e=(0,t.Yn)(a,`palette.${c}.mainChannel`)||(0,t.Yn)(a,`palette.${c}Channel`);return"vars"in a&&e?`rgba(${e} / 0.4)`:(0,f.X4)(d,.4)})({theme:j,ownerState:D})}}})})},49351:(a,b,c)=>{c.d(b,{A:()=>h});var d=c(21124);c(38301);var e=c(49565),f=c(51100),g=c(73198);function h({show:a,onClick:b,sx:c}){return(0,d.jsx)(e.A,{in:a,unmountOnExit:!0,children:(0,d.jsx)(f.A,{size:"small",color:"primary","aria-label":"Back to top",onClick:b,sx:{position:"fixed",bottom:24,right:24,zIndex:1200,...c},children:(0,d.jsx)(g.A,{})})})}},61560:(a,b,c)=>{c.d(b,{R:()=>e});var d=c(38301);function e(a,b={}){let{threshold:c=200,deps:f=[]}=b,g=(0,d.useRef)(null),[h,i]=(0,d.useState)(!1);(0,d.useRef)(!1);let j=(0,d.useCallback)(()=>{let a=g.current;return a&&a.scrollHeight>a.clientHeight+1?a:null},[]);return(0,d.useCallback)(()=>{let a=j();return a?a.scrollTop:0},[j]),(0,d.useCallback)(a=>{let b=j();b&&(b.scrollTop=a)},[j]),{ref:g,showBackToTop:h,scrollToTop:(0,d.useCallback)(()=>{let a=j();a&&a.scrollTo({top:0,behavior:"smooth"}),i(!1)},[j])}}c(2560)},63650:(a,b,c)=>{c.d(b,{v:()=>h});var d=c(38301),e=c(28055);let f=(0,c(42819).h)("frontend/hooks/useServerStatus");function g(a){return"stdio"===a.transport?a.args&&a.args.length>0?a.args[0]:"Unknown path":"websocket"===a.transport?a.websocketUrl||"Unknown URL":a.serverUrl||"Unknown URL"}function h(){let[a,b]=(0,d.useState)([]),[c,h]=(0,d.useState)(!0),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(new Set),m=(0,d.useCallback)(async()=>{f.debug("Loading servers"),h(!0),j(null);try{let a=await e.S.loadServerConfigs();if(!a||"error"in a){f.warn("Failed to load server configurations:",a?.error),j(a?.error||"Failed to load server configurations"),h(!1);return}let c=await Promise.all(a.map(async a=>{f.debug(`Getting status for server: ${a.name}`);let b=await e.S.getServerStatus(a.name),c="string"==typeof b?b:b.status,d="object"==typeof b&&b.message?b.message:void 0,h="object"==typeof b&&b.stderrOutput?b.stderrOutput:void 0,i=g(a);return{...a,path:i,status:c,error:d,stderrOutput:h}}));f.debug("Final server states:",c),b(c),h(!1)}catch(a){f.warn("Failed to load servers:",a),j("Failed to load servers"),h(!1)}},[]),n=(0,d.useCallback)(async(c,d)=>{f.debug(`Toggling server ${c} to ${d?"enabled":"disabled"}`);try{let g=a.find(a=>a.name===c);if(!g)return f.warn(`Server not found: ${c}`),!1;f.debug(`Found server ${c}, current disabled state: ${g.disabled}`);let h=await e.S.updateServerConfig(c,{disabled:!d});if(h.error)return f.warn("Failed to update server config:",[h.error,c]),!1;f.debug(`Updating server ${c} state in UI, new disabled state: ${!d}`),b(a=>a.map(a=>a.name===c?{...a,disabled:!d}:a)),f.info(`Successfully toggled server ${c} to ${d?"enabled":"disabled"}`);try{let a=await e.S.getServerStatus(c),d="string"==typeof a?a:a.status,f="object"==typeof a&&a.message?a.message:void 0,g="object"==typeof a&&a.stderrOutput?a.stderrOutput:void 0;b(a=>a.map(a=>a.name===c?{...a,status:d,error:f,stderrOutput:g}:a))}catch(a){f.warn(`Failed to get status for server ${c} after toggle:`,a)}return!0}catch(a){return f.warn("Failed to toggle server:",a),!1}},[a]),o=(0,d.useCallback)(async c=>{f.debug(`Deleting server: ${c}`);try{if(!a.find(a=>a.name===c))return f.warn("Server not found:",c),!1;let d=await e.S.deleteServerConfig(c);if(d.error)return f.warn("Failed to delete server config:",d.error),!1;return b(a=>a.filter(a=>a.name!==c)),!0}catch(a){return f.warn("Failed to delete server:",a),!1}},[a]),p=(0,d.useCallback)(async a=>{f.debug("Adding server:",a);try{let c=g(a),d={...a,path:c,status:"connecting",tools:[],env:a.env||{}};b(a=>[...a,d]),l(b=>new Set(b).add(a.name));let h=await e.S.updateServerConfig(a.name,a);if(h.error)return f.warn("Failed to update server config:",h.error),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:h.error}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1;f.info(`Successfully added server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after adding:`,b)}return l(b=>{let c=new Set(b);return c.delete(a.name),c}),!0}catch(c){return f.warn("Failed to add server:",c),b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c instanceof Error?c.message:"Unknown error during server addition"}:b)),l(b=>{let c=new Set(b);return c.delete(a.name),c}),!1}},[]),q=(0,d.useCallback)(async(a,c)=>{let d=c??a.name,h=d!==a.name;f.debug("Updating server:",a);try{b(b=>b.map(b=>b.name===d?{...a,path:g(a),status:b.status,error:b.error,stderrOutput:b.stderrOutput}:b));let c=await e.S.updateServerConfig(d,a);if(c.error){if(f.warn("Failed to update server config:",c.error),h)return await m(),!1;return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c.error}:b)),!1}f.info(`Successfully updated config for server ${a.name}`);try{let c=await e.S.getServerStatus(a.name),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;b(b=>b.map(b=>b.name===a.name?{...b,status:d,error:f,stderrOutput:g}:b))}catch(b){f.warn(`Failed to get status for server ${a.name} after config update:`,b)}return!0}catch(d){if(f.warn("Failed to update server:",d),h)return await m(),!1;let c=d instanceof Error?d.message:"Unknown error during update";return b(b=>b.map(b=>b.name===a.name?{...b,status:"error",error:c}:b)),!1}},[m]),r=(0,d.useCallback)(async(a,c)=>{let d=c&&c.trim()?c.trim():"";f.debug(`Setting folder for server ${a} to ${d||"(none)"}`);try{let c=await e.S.updateServerConfig(a,{folder:d});if("error"in c&&c.error)return f.warn("Failed to update server folder:",c.error),!1;return b(b=>b.map(b=>b.name===a?{...b,folder:d||void 0}:b)),!0}catch(a){return f.warn("Failed to set server folder:",a),!1}},[]),s=(0,d.useCallback)(async(a,c)=>{f.debug(`Setting favorite for server ${a} to ${c}`);try{let d=await e.S.updateServerConfig(a,{favorite:c});if("error"in d&&d.error)return f.warn("Failed to update server favorite:",d.error),!1;return b(b=>b.map(b=>b.name===a?{...b,favorite:c}:b)),!0}catch(a){return f.warn("Failed to set server favorite:",a),!1}},[]),t=(0,d.useCallback)(async(c,d)=>{f.debug(`Saving environment variables for server: ${c}`,d);try{if(!a.find(a=>a.name===c))return f.warn(`Server not found: ${c}`),!1;let g=await e.S.updateServerConfig(c,{env:d});if(g.error)return f.warn("Failed to update server config:",g.error),!1;return f.debug(`Updating environment variables in UI for server: ${c}`),b(a=>a.map(a=>a.name===c?{...a,env:d}:a)),f.info(`Successfully saved environment variables for server: ${c}`),!0}catch(a){return f.warn("Failed to save environment variables:",a),!1}},[a]);return{servers:a,isLoading:c,loadError:i,connectingServers:k,loadServers:m,toggleServer:n,retryServer:(0,d.useCallback)(async a=>{f.debug(`Retrying server status for: ${a}`);try{let c=await e.S.getServerStatus(a),d="string"==typeof c?c:c.status,f="object"==typeof c&&c.message?c.message:void 0,g="object"==typeof c&&c.stderrOutput?c.stderrOutput:void 0;return b(b=>b.map(b=>b.name===a?{...b,status:d,error:f,stderrOutput:g}:b)),!0}catch(a){return f.warn("Failed to retry server status:",a),!1}},[]),deleteServer:o,addServer:p,updateServer:q,setServerFolder:r,setServerFavorite:s,saveEnv:t}}},88117:(a,b,c)=>{c.d(b,{O:()=>g});var d=c(38301),e=c(28055);let f=(0,c(42819).h)("frontend/hooks/useServerTools");function g(a){let[b,c]=(0,d.useState)([]),[g,h]=(0,d.useState)(!1),[i,j]=(0,d.useState)(null),[k,l]=(0,d.useState)(null),[m,n]=(0,d.useState)(null),[o,p]=(0,d.useState)(0),[q,r]=(0,d.useState)(!1),s=(0,d.useRef)(null),t=(0,d.useCallback)(async(d=!1)=>{if(!a){c([]),j(null);return}if(n(a),!d&&k&&new Date().getTime()-k.getTime()<200&&b.length>0&&a===m)return void f.debug(`Rate limiting tool refresh for server: ${a}`);f.debug(`Loading tools for server: ${a}`),h(!0),j(null);try{let b=await e.S.listServerTools(a);if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);if(b.error)f.warn(`Error loading tools for ${a}:`,b.error),j(b.error),c([]);else{let d=b.tools||[];f.debug(`Loaded ${d.length} tools for ${a}`),c(d),l(new Date),p(0)}}catch(b){if(a!==m)return void f.debug(`Server changed during tool loading from ${a} to ${m}`);f.warn(`Failed to load tools for server ${a}:`,b),j(`Failed to load tools: ${b instanceof Error?b.message:"Unknown error"}`),c([])}finally{a===m&&h(!1)}},[a,k,b.length,m]),u=(0,d.useCallback)(()=>{if(!a)return;s.current&&(clearTimeout(s.current),s.current=null),r(!0);let b=Math.min(1e3*Math.pow(2,o),1e4);return f.debug(`Retrying tool load for ${a} in ${b}ms (attempt ${o+1})`),s.current=setTimeout(()=>{p(a=>a+1),t(!0),r(!1)},b),()=>{s.current&&clearTimeout(s.current)}},[a,o,t]);return{tools:b,isLoading:g||q,error:i,loadTools:t,retryLoadTools:u,isRetrying:q,retryCount:o,testTool:(0,d.useCallback)(async(b,c,d)=>{if(!a)return{success:!1,output:"",error:"No server selected"};f.debug(`Testing tool ${b} on server ${a} with params:`,c);try{let g=await e.S.callTool(a,b,c,d);if(g.error)return f.warn(`Error calling tool ${b}:`,g.error),{success:!1,output:"",error:g.error};return f.debug(`Tool ${b} executed successfully:`,g),{success:!0,output:JSON.stringify(g,null,2)}}catch(a){return f.error(`Exception calling tool ${b}:`,a),{success:!1,output:"",error:a instanceof Error?a.message:"Unknown error occurred"}}},[a])}}}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[57,1521],{41603:(e,t,r)=>{r.d(t,{IK:()=>eo,v2:()=>el,Uw:()=>er,nH:()=>B,z9:()=>en,vp:()=>U,z3:()=>ei,vm:()=>et,lA:()=>ea,$Q:()=>z,C2:()=>W,pF:()=>es,M6:()=>G});var o=r(95155),l=r(12115),a=r(22539),n=r(76122),i=r(48116),s=r(8532),d=r(33567),c=r(2300),u=r(94049),p=r(25635),h=r(98267),m=r(20537),f=r(37960),g=r(12313),y=r(56350),x=r(77842),w=r(55930),b=r(59323),v=r(20195),k=r(11096),j=r(63186),A=r(53868);let C=/credential|token|authorization|secret|password|api[-_ ]?key|environment|(^|[_-])env($|[_-])/i,S={start:[{key:"promptTemplate",label:"Prompt template"}],process:[{key:"promptTemplate",label:"Prompt template"},{key:"boundModel",label:"Bound model"},{key:"modelName",label:"Model name"},{key:"inputMode",label:"Input mode",defaultValue:"full-history"},{key:"isolatedPrompt",label:"Isolated prompt",defaultValue:!1},{key:"allowCallerPrompt",label:"Allow caller prompt",defaultValue:!0},{key:"outputMode",label:"Output mode",defaultValue:"full-conversation"},{key:"excludeModelPrompt",label:"Exclude model prompt",defaultValue:!1},{key:"excludeStartNodePrompt",label:"Exclude start prompt",defaultValue:!1},{key:"excludeSystemPrompt",label:"Exclude system prompt",defaultValue:!1},{key:"enableTodoTool",label:"Enable todo tool",defaultValue:!1},{key:"captureVariable",label:"Capture variable"},{key:"captureResource",label:"Capture resource"},{key:"captureKv",label:"Capture key-value reference"},{key:"inputSchema",label:"Input schema"},{key:"outputSchema",label:"Output schema"},{key:"handoffTools",label:"Handoff tools"},{key:"mcpNodes",label:"Attached MCP nodes"}],finish:[{key:"successMessage",label:"Success message"},{key:"conditional",label:"Conditional completion",defaultValue:!1},{key:"condition",label:"Completion condition"}],mcp:[{key:"boundServer",label:"Bound server"},{key:"enabledTools",label:"Enabled tools"},{key:"toolTimeout",label:"Tool timeout"},{key:"roots",label:"Roots"},{key:"nameIsCustom",label:"Custom name",defaultValue:!1}],subflow:[{key:"subflowId",label:"Bound subflow"},{key:"parallelSubflowIds",label:"Parallel subflows"},{key:"parallelSubflowIdsVar",label:"Parallel subflow variable"},{key:"spawnBriefs",label:"Spawn briefs"},{key:"promptTemplate",label:"Prompt template"},{key:"inputMode",label:"Input mode",defaultValue:"full-history"},{key:"allowCallerPrompt",label:"Allow caller prompt",defaultValue:!0},{key:"allowCallerFanout",label:"Allow caller fan-out",defaultValue:!1},{key:"mapOverList",label:"Map over list",defaultValue:!1},{key:"itemSplit",label:"Item split",defaultValue:"json-array"},{key:"sequential",label:"Sequential",defaultValue:!1},{key:"concurrencyLimit",label:"Concurrency limit",defaultValue:4},{key:"errorStrategy",label:"Error strategy",defaultValue:"collect-all"},{key:"joinSeparator",label:"Join separator"},{key:"outputMode",label:"Output mode",defaultValue:"steps"},{key:"saveConversation",label:"Save conversation",defaultValue:!0}],resource:[{key:"scope",label:"Scope",defaultValue:"run"},{key:"boundServer",label:"Bound server"},{key:"uri",label:"Resource URI"},{key:"runName",label:"Run resource name"}],signal:[{key:"topic",label:"Topic"},{key:"payloadTemplate",label:"Payload template"}],trigger:[{key:"executionId",label:"Execution ID"},{key:"name",label:"Name"},{key:"enabled",label:"Enabled",defaultValue:!0},{key:"trigger",label:"Trigger configuration"},{key:"overlapStrategy",label:"Overlap strategy",defaultValue:"skip"},{key:"prompt",label:"Initial prompt"}]},F=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),T=e=>e.replace(/\s+/g," ").trim(),I=(e,t)=>{if(e.length<=t)return e;let r=e.slice(0,Math.max(0,t-1)),o=r.lastIndexOf(" "),l=o>Math.floor(.6*t)?r.slice(0,o):r;return"".concat(l.trimEnd(),"…")},P=e=>{let t=(e=>"string"==typeof e?e:void 0)(e);if(void 0!==t)return T(t)||void 0},E=e=>Array.isArray(e)?e.filter(e=>"string"==typeof e).map(T).filter(Boolean):[],N=(e,t,r)=>{if(!Object.prototype.hasOwnProperty.call(e,t))return"".concat(r," (default)");let o=e[t];return"string"==typeof o?T(o)||"empty":null===o?"null":String(o)},O=e=>{if("string"!=typeof e)return;if(!e.trim())return"empty";let t=e.split(/\r?\n/).map(T).filter(Boolean).slice(0,3).map(e=>I(e,90));return t.length?t.join("\n"):"empty"},M=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if("string"==typeof e)return I(e,500);if(null===e||"number"==typeof e||"boolean"==typeof e)return e;if(void 0===e)return"[absent]";if("bigint"==typeof e)return e.toString();if("object"!=typeof e)return String(e);if(t>=3)return"[depth limit]";if(Array.isArray(e)){let r=e.slice(0,12).map(e=>M(e,t+1));return e.length>12&&r.push("[".concat(e.length-12," more items]")),r}let r=Object.entries(e).sort((e,t)=>{let[r]=e,[o]=t;return r.localeCompare(o)}).slice(0,20),o={};for(let[e,l]of r)o[e]=C.test(e)?"[redacted]":M(l,t+1);let l=Object.keys(e).length;return l>20&&(o["…"]="[".concat(l-20," more fields]")),o},R=e=>{let t=M(e);return"string"==typeof t?t:JSON.stringify(t,null,2)},L=(e,t,r,o)=>{if(!Object.prototype.hasOwnProperty.call(r,e))return void 0!==o?{key:e,label:t,state:"default",value:"[default: ".concat(R(o),"]")}:{key:e,label:t,state:"absent",value:"[absent]"};let l=r[e],a=""===l||Array.isArray(l)&&0===l.length;return{key:e,label:t,state:a?"empty":"configured",value:a?""===l?"[empty string]":"[empty array]":R(l)}},B=A.L.light.resource,X=A.Z.resource,U=A.L.light.signal,D=A.Z.signal,z=A.L.light.trigger,W=A.Z.trigger,V={start:{main:()=>A.L.light.start,light:()=>A.L.dark.start},process:{main:e=>e.palette.primary.main,light:e=>e.palette.primary.light},finish:{main:e=>e.palette.success.main,light:e=>e.palette.success.light},mcp:{main:e=>e.palette.info.main,light:e=>e.palette.info.light},subflow:{main:e=>e.palette.warning.main,light:e=>e.palette.warning.light},resource:{main:()=>B,light:()=>X},signal:{main:()=>U,light:()=>D},trigger:{main:()=>z,light:()=>W}},H=(e,t)=>{var r;return(null!=(r=V[e])?r:V.start).main(t)},K=(0,i.Ay)(c.A,{shouldForwardProp:e=>!["nodeType","selected"].includes(e)})(e=>{let{theme:t,nodeType:r,selected:o}=e;return{padding:t.spacing(1.6),width:"210px",borderRadius:"16px",backgroundColor:t.palette.background.paper,backgroundImage:"linear-gradient(145deg, ".concat((0,s.X4)(H(r,t),.08),", transparent 42%)"),border:"1px solid ".concat(t.palette.divider),borderLeft:"3px solid ".concat(H(r,t)),boxShadow:o?"0 0 0 3px ".concat((0,s.X4)(t.palette.secondary.main,.28),", 0 18px 45px ").concat((0,s.X4)(H(r,t),.18)):"0 12px 34px ".concat((0,s.X4)(t.palette.common.black,"dark"===t.palette.mode?.28:.1)),transition:"transform 180ms ease, box-shadow 180ms ease, border-color 180ms ease","&:hover":{borderColor:(0,s.X4)(H(r,t),.58),boxShadow:"0 0 0 1px ".concat((0,s.X4)(H(r,t),.35),", 0 18px 45px ").concat((0,s.X4)(H(r,t),.16)),transform:"translateY(-2px)"}}}),J=(0,i.Ay)(u.default,{shouldForwardProp:e=>"nodeType"!==e})(e=>{let{theme:t,nodeType:r}=e;return{display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:"1px solid ".concat((0,s.X4)(((e,t)=>{var r;return(null!=(r=V[e])?r:V.start).light(t)})(r,t),.28)),marginBottom:t.spacing(1),paddingBottom:t.spacing(.5)}}),q=(0,i.Ay)(u.default)({display:"flex",alignItems:"center",gap:"8px"}),_=(0,i.Ay)(u.default)(e=>{let{theme:t}=e;return{marginTop:t.spacing(1),fontSize:"0.8rem"}}),G=(e,t)=>H(e,t),Z=e=>({backgroundColor:e.palette.info.main,borderColor:"dark"===e.palette.mode?e.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),Y=e=>({backgroundColor:e.palette.primary.main,borderColor:"dark"===e.palette.mode?e.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),$=e=>({backgroundColor:e.palette.primary.main,borderColor:"dark"===e.palette.mode?e.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),Q=e=>({backgroundColor:B,borderColor:"dark"===e.palette.mode?e.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),ee=e=>{let{id:t,data:r,nodeType:i,selected:s}=e,c=(0,d.A)(),[A,C]=(0,l.useState)(!1),T=((e,t)=>{let r=e||{},o=F(r.properties)?r.properties:{},l="signal"===t?"Signal":"No Label",a=P(r.label)||l,n="signal"===t&&P(o.topic)||a,i=[],s=P(r.description);s&&i.push({key:"description",label:"Description",value:I(s,180)}),"process"===t?((e,t)=>{e.push({key:"modes",label:"Modes",value:"".concat(N(t,"inputMode","full-history")," → ").concat(N(t,"outputMode","full-conversation"))});let r=O(t.promptTemplate);void 0!==r&&e.push({key:"prompt",label:"Prompt",value:r,multiline:!0})})(i,o):"subflow"===t?((e,t)=>{let r=P(t.subflowId),o=E(t.parallelSubflowIds),l=P(t.parallelSubflowIdsVar),a=E(t.spawnBriefs),n="Not bound";r?n=r:o.length?n="".concat(o.length," parallel flow").concat(1===o.length?"":"s"):l&&(n="Flows from ".concat(l)),e.push({key:"target",label:"Target",value:n}),e.push({key:"modes",label:"Modes",value:"".concat(N(t,"inputMode","full-history")," → ").concat(N(t,"outputMode","steps"))});let i=[];!r&&(o.length>0||l)&&i.push(!0===t.sequential?"sequential fan-out":"parallel fan-out"),!0===t.mapOverList&&i.push("map list (".concat(N(t,"itemSplit","json-array"),")")),a.length&&i.push("".concat(a.length," spawn brief").concat(1===a.length?"":"s")),i.length&&e.push({key:"execution",label:"Execution",value:i.join(" \xb7 ")})})(i,o):"mcp"===t?((e,t)=>{e.push({key:"server",label:"Server",value:P(t.boundServer)||"Not bound"});let r=E(t.enabledTools);if(r.length){let t=r.slice(0,3),o=r.length-t.length;e.push({key:"tools",label:"Tools",value:"".concat(t.join(", ")).concat(o>0?" +".concat(o," more"):""," (").concat(r.length,")")})}else e.push({key:"tools",label:"Tools",value:"None enabled"})})(i,o):((e,t,r)=>{if("start"===t){let t=O(r.promptTemplate);void 0!==t&&e.push({key:"prompt",label:"Prompt",value:t,multiline:!0})}else if("resource"===t){let t=N(r,"scope","run");e.push({key:"scope",label:"Scope",value:t});let o=P(r.uri)||P(r.runName);o&&e.push({key:"resource",label:"Resource",value:I(o,100)})}else if("signal"===t){let t=O(r.payloadTemplate);void 0!==t&&e.push({key:"payload",label:"Payload",value:t,multiline:!0})}else if("trigger"===t){let t=F(r.trigger)?r.trigger:{};e.push({key:"trigger",label:"Trigger",value:P(t.type)||"Not configured"}),e.push({key:"enabled",label:"Status",value:!1===r.enabled?"Disabled":"Enabled"})}})(i,t,o);let d={type:"string"==typeof r.type&&r.type?r.type:t,label:n};Object.prototype.hasOwnProperty.call(r,"description")&&(d.description=r.description);let c=[L("type","Type",d),L("label","Label",d),L("description","Description",d)].map(e=>({...e,key:"metadata.".concat(e.key)}));for(let e of S[t])c.push(L(e.key,e.label,o,e.defaultValue));return{label:n,summary:i,technicalDetails:c,technicalText:(e=>{let t=e.filter(e=>e.key.startsWith("metadata.")),r=e.filter(e=>!e.key.startsWith("metadata.")),o=e=>"".concat(e.label,": ").concat(e.value);return["Node metadata",...t.map(o),"","Supported properties",...r.map(o)].join("\n")})(c)}})(r,i),M=e=>{e.stopPropagation()};return(0,o.jsx)(o.Fragment,{children:(0,o.jsxs)(K,{elevation:2,nodeType:i,selected:s,children:[(()=>{if("mcp"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"mcp-top",type:"target",position:n.yX.Top,style:Z(c)}),(0,o.jsx)(a.h7,{id:"mcp-right",type:"target",position:n.yX.Right,style:Z(c)}),(0,o.jsx)(a.h7,{id:"mcp-bottom",type:"source",position:n.yX.Bottom,style:Z(c)}),(0,o.jsx)(a.h7,{id:"mcp-left",type:"target",position:n.yX.Left,style:Z(c)})]});if("process"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"process-top",type:"target",position:n.yX.Top,style:Y(c)}),(0,o.jsx)(a.h7,{id:"process-bottom",type:"source",position:n.yX.Bottom,style:Y(c)}),(0,o.jsx)(a.h7,{id:"process-left-mcp",type:"source",position:n.yX.Left,style:{...$(c),top:"30%"}}),(0,o.jsx)(a.h7,{id:"process-right-mcp",type:"source",position:n.yX.Right,style:{...$(c),top:"30%"}}),(0,o.jsx)(a.h7,{id:"process-left-resource",type:"source",position:n.yX.Left,style:{...Q(c),top:"70%"}}),(0,o.jsx)(a.h7,{id:"process-right-resource",type:"source",position:n.yX.Right,style:{...Q(c),top:"70%"}})]});if("resource"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"resource-in",type:"target",position:n.yX.Left,style:Q(c)}),(0,o.jsx)(a.h7,{id:"resource-out",type:"source",position:n.yX.Right,style:Q(c)})]});if("start"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"start-top",type:"target",position:n.yX.Top,style:Y(c)}),(0,o.jsx)(a.h7,{id:"start-bottom",type:"source",position:n.yX.Bottom,style:Y(c)})]});if("finish"===i)return(0,o.jsx)(a.h7,{id:"finish-top",type:"target",position:n.yX.Top,style:Y(c)});else if("subflow"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"subflow-top",type:"target",position:n.yX.Top,style:Y(c)}),(0,o.jsx)(a.h7,{id:"subflow-bottom",type:"source",position:n.yX.Bottom,style:Y(c)})]});else if("signal"===i)return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(a.h7,{id:"signal-top",type:"target",position:n.yX.Top,style:Y(c)}),(0,o.jsx)(a.h7,{id:"signal-bottom",type:"source",position:n.yX.Bottom,style:Y(c)})]});else if("trigger"===i)return(0,o.jsx)(a.h7,{id:"trigger-bottom",type:"source",position:n.yX.Bottom,style:{...Y(c),backgroundColor:z}});return null})(),(0,o.jsx)(J,{nodeType:i,children:(0,o.jsxs)(q,{children:[(e=>{switch(e){case"start":default:return(0,o.jsx)(g.A,{sx:{color:"#7E889E"}});case"process":return(0,o.jsx)(y.A,{color:"primary"});case"finish":return(0,o.jsx)(x.A,{color:"success"});case"mcp":return(0,o.jsx)(y.A,{color:"info"});case"subflow":return(0,o.jsx)(w.A,{sx:{color:"warning.main"}});case"resource":return(0,o.jsx)(b.A,{sx:{color:B}});case"signal":return(0,o.jsx)(v.A,{sx:{color:U}});case"trigger":return(0,o.jsx)(k.A,{sx:{color:z}})}})(i),(0,o.jsx)(p.A,{variant:"subtitle2",fontWeight:"bold",children:T.label})]})}),T.summary.length>0&&(0,o.jsx)(_,{"aria-label":"Node summary",children:T.summary.map(e=>(0,o.jsxs)(u.default,{sx:{mb:.5},children:[(0,o.jsxs)(p.A,{component:"span",variant:"caption",sx:{fontWeight:"bold",mr:.5},children:[e.label,":"]}),(0,o.jsx)(p.A,{component:"span",variant:"caption",color:"text.secondary",sx:{whiteSpace:e.multiline?"pre-line":"normal",overflowWrap:"anywhere"},children:e.value})]},e.key))}),(0,o.jsxs)(h.A,{disableGutters:!0,elevation:0,expanded:A,onChange:(e,t)=>{e.stopPropagation(),C(t)},onClick:M,onPointerDown:M,className:"nodrag nowheel",sx:{mt:1,backgroundColor:"transparent","&::before":{display:"none"}},children:[(0,o.jsx)(m.A,{expandIcon:(0,o.jsx)(j.A,{fontSize:"small"}),"aria-controls":"".concat(t,"-technical-details"),sx:{minHeight:28,px:0,"& .MuiAccordionSummary-content":{my:.25}},children:(0,o.jsx)(p.A,{variant:"caption",color:"text.secondary",children:"Technical details"})}),(0,o.jsx)(f.A,{id:"".concat(t,"-technical-details"),sx:{p:0},children:(0,o.jsx)(u.default,{component:"pre",sx:{m:0,p:1,maxHeight:220,overflow:"auto",whiteSpace:"pre-wrap",overflowWrap:"anywhere",fontSize:"0.7rem",lineHeight:1.35,backgroundColor:"action.hover",borderRadius:1},children:T.technicalText})})]})]})})},et=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"start",selected:e.selected})}),er=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"process",selected:e.selected})}),eo=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"finish",selected:e.selected})}),el=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"mcp",selected:e.selected})}),ea=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"subflow",selected:e.selected})}),en=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"resource",selected:e.selected})}),ei=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"signal",selected:e.selected})}),es=(0,l.memo)(function(e){return(0,o.jsx)(ee,{...e,nodeType:"trigger",selected:e.selected})})},48072:(e,t,r)=>{r.d(t,{CR:()=>d,Lg:()=>n,eZ:()=>s,fC:()=>a});var o=r(88107),l=r(38459);let a={"name-asc":"Name (A-Z)","name-desc":"Name (Z-A)",provider:"Provider","context-desc":"Context (largest)","context-asc":"Context (smallest)"},n=e=>e.displayName||e.name||"",i=e=>(0,o.T_)(e.provider,e.adapter).label;function s(e,t){switch(t){case"provider":{let t=i(e);return{key:"provider:".concat(t),label:t}}case"context-asc":case"context-desc":var r;return"number"!=typeof(r=e.contextWindow)||Number.isNaN(r)?{key:"ctx:unknown",label:"Unknown context"}:r<=8e3?{key:"ctx:<=8k",label:"≤ 8K tokens"}:r<=32e3?{key:"ctx:8k-32k",label:"8K–32K tokens"}:r<=128e3?{key:"ctx:32k-128k",label:"32K–128K tokens"}:r<=1e6?{key:"ctx:128k-1m",label:"128K–1M tokens"}:{key:"ctx:>1m",label:"> 1M tokens"};default:return(0,l.po)(n(e))}}function d(e,t){let r=(e,r)=>{switch(t){case"name-asc":return n(e).localeCompare(n(r));case"name-desc":return n(r).localeCompare(n(e));case"provider":return i(e).localeCompare(i(r))||n(e).localeCompare(n(r));case"context-desc":case"context-asc":{let o="number"!=typeof e.contextWindow||Number.isNaN(e.contextWindow)?void 0:e.contextWindow,l="number"!=typeof r.contextWindow||Number.isNaN(r.contextWindow)?void 0:r.contextWindow;if(void 0===o&&void 0===l)return n(e).localeCompare(n(r));if(void 0===o)return 1;if(void 0===l)return -1;let a="context-desc"===t?l-o:o-l;return 0!==a?a:n(e).localeCompare(n(r))}default:return 0}};return[...e].sort((e,t)=>{let o=Number(!!t.favorite)-Number(!!e.favorite);return 0!==o?o:r(e,t)})}},53868:(e,t,r)=>{r.d(t,{L:()=>o,Z:()=>l});let o={light:{start:"#7E889E",process:"#6355E8",finish:"#15885A",mcp:"#129DB8",subflow:"#C67A13",resource:"#18AFA3",signal:"#9A78FF",trigger:"#EF5D8E"},dark:{start:"#B7C0D2",process:"#8B7CFF",finish:"#57D59B",mcp:"#31D2ED",subflow:"#F6BC66",resource:"#63D8CE",signal:"#C4B2FF",trigger:"#FF9ABD"}},l={resource:"#63D8CE",signal:"#C4B2FF",trigger:"#FF9ABD"}},57563:(e,t,r)=>{function o(e){return!!e&&e.includes("mcp")}function l(e){return!!e&&e.includes("resource")}function a(e){var t;let r=null==e||null==(t=e.data)?void 0:t.edgeType;return"mcp"===r||"resource"===r}function n(e,t,r,a){if("trigger"===e&&"start"===r)return t&&"trigger-bottom"!==t?"Trigger nodes must connect via their bottom handle":a&&"start-top"!==a?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===r)return"Trigger nodes cannot have incoming connections";if("trigger"===e&&"start"!==r)return"Trigger nodes can only connect to the Start node";if("start"===r)return"Start nodes cannot have incoming connections";if("finish"===e)return"Finish nodes cannot have outgoing connections";if("mcp"===e||"mcp"===r||o(t)||o(a))return("mcp"!==e||"process"!==r)&&("process"!==e||"mcp"!==r)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==e||o(t)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===e||"resource"===r||l(t)||l(a)){if(("resource"!==e||"process"!==r)&&("process"!==e||"resource"!==r))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===e&&!l(t))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}function i(e,t){return"resource"===e?"resource-in":"process"===e&&l(t)?"process-left-resource":"process"===e&&o(t)?"process-left-mcp":"start"===e?"start-top":"".concat(e,"-top")}function s(e,t){if("trigger"===e)return["start"];let r=["process","finish","mcp","subflow","resource","signal","trigger"];return e&&t?r.filter(r=>null===n(e,t,r,i(r,t))):r}r.d(t,{BY:()=>a,CW:()=>i,_w:()=>s,vC:()=>n,vM:()=>l,z5:()=>o})},68503:(e,t,r)=>{r.d(t,{E:()=>c});var o=r(12115),l=r(97104),a=r(38459),n=r(48072),i=r(65818),s=r(88377);let d={models:{defaultSort:"name-asc",sort:(e,t)=>(0,n.CR)(e,t),deriveSortGroup:(e,t)=>(0,n.eZ)(e,t),getFolder:e=>e.folder,getSearchText:e=>{var t;return"".concat((0,n.Lg)(e)," ").concat(null!=(t=e.name)?t:"")}},mcp:{defaultSort:"name-asc",sort:(e,t)=>(0,i.oO)(e,t),deriveSortGroup:(e,t)=>(0,i.mO)(e,t),getFolder:e=>e.folder,getSearchText:e=>{var t,r,o;return"".concat(null!=(t=e.name)?t:""," ").concat(null!=(o=null!=(r=e.rootPath)?r:e.path)?o:"")}},flows:{defaultSort:"name-asc",sort:(e,t)=>(0,s.NP)(e,t),deriveSortGroup:(e,t)=>(0,s.ts)(e,t),getFolder:e=>e.folder,getSearchText:e=>{var t;return null!=(t=e.name)?t:""}}};function c(e,t){let r=d[e],[n,i]=(0,o.useState)(""),[s]=(0,l.Xk)("flujo-ui:".concat(e,":sort"),r.defaultSort),[c]=(0,l.Xk)("flujo-ui:".concat(e,":group"),a.FM),[u,p]=(0,l.Xk)("flujo-ui:".concat(e,":collapsed"),[]),h=(0,o.useMemo)(()=>new Set(u),[u]),m=(0,o.useMemo)(()=>{let e=n.trim().toLowerCase(),o=e?t.filter(t=>r.getSearchText(t).toLowerCase().includes(e)):t;return r.sort([...o],s)},[t,n,s,r]),f=(0,o.useMemo)(()=>"folder"===c?(0,a.Je)(m,e=>r.getFolder(e)):"sort"===c?(0,a.Az)(m,e=>r.deriveSortGroup(e,s)):null,[c,m,s,r]);return{searchTerm:n,setSearchTerm:i,sortOption:s,groupMode:c,items:m,groups:f,collapsedKeys:h,toggleGroup:(0,o.useCallback)(e=>{p(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[p])}}},88107:(e,t,r)=>{r.d(t,{T_:()=>s,g3:()=>n,xx:()=>i});let o=/(^|[/_-])(o[1-9]|gpt-5)(?:[./_-]|$)/i,l=/claude-(?:fable|mythos)-5|claude-opus-4-(?:[7-9]|\d{2,})|claude-sonnet-5/i,a=/^(?:opus|sonnet|fable)$|claude-(?:fable|mythos)-5|claude-opus-4-(?:[6-9]|\d{2,})|claude-sonnet-4-6/i;function n(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=t||"openai",i=r.trim();if("codex-cli"===n)return{effortLevels:/^gpt-5\.6-(?:sol|terra)$/i.test(i)?["low","medium","high","xhigh","max","ultra"]:/^gpt-5\.6-/i.test(i)?["low","medium","high","xhigh","max"]:["low","medium","high","xhigh"],priority:!/(?:mini|spark|review)/i.test(i),maxOutputTokens:!1};if("claude-cli"===n)return{...a.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!1};if("anthropic"===n)return{...!l.test(i)?{creativity:{min:0,max:1,step:.1}}:{},...a.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!0};if("gemini"===n)return{creativity:{min:0,max:2,step:.1},.../^gemini-2\.5/i.test(i)?{thinkingBudget:!0}:!/^gemini-2\.0/i.test(i)?{thinkingLevels:["minimal","low","medium","high"]}:{},maxOutputTokens:!0};let s="openai"===(e||"openai")&&o.test(i);return{...!s?{creativity:{min:0,max:2,step:.1}}:{},...s?{effortLevels:["low","medium","high"]}:{},maxOutputTokens:!0}}let i=[{id:"openai",label:"OpenAI",provider:"openai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0},{id:"openai-responses",label:"OpenAI (Responses API)",provider:"openai",adapter:"openai-responses",sdkLabel:"OpenAI SDK (Responses)",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0,defaultModels:["gpt-5","gpt-5-mini","o4-mini","o3"]},{id:"openrouter",label:"OpenRouter",provider:"openrouter",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://openrouter.ai/api/v1",showBaseUrl:!0},{id:"requesty",label:"Requesty",provider:"requesty",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://router.requesty.ai/v1",showBaseUrl:!0},{id:"xai",label:"X.ai",provider:"xai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.x.ai/v1",showBaseUrl:!0},{id:"ollama",label:"Ollama",provider:"ollama",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"http://localhost:11434/v1",showBaseUrl:!0},{id:"litellm",label:"LiteLLM",provider:"litellm",adapter:"openai",sdkLabel:"OpenAI SDK (via LiteLLM Proxy)",baseUrl:"http://localhost:4000/v1",showBaseUrl:!0},{id:"gemini-openai",label:"Gemini (OpenAI Format)",provider:"gemini",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",showBaseUrl:!0},{id:"gemini-native",label:"Gemini (Native)",provider:"gemini",adapter:"gemini",sdkLabel:"GenAI SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash"]},{id:"anthropic-openai",label:"Anthropic (OpenAI Format)",provider:"anthropic",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.anthropic.com/v1/",showBaseUrl:!0},{id:"anthropic-native",label:"Anthropic (Native)",provider:"anthropic",adapter:"anthropic",sdkLabel:"Anthropic SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["claude-opus-4-8","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-fable-5"]},{id:"claude-subscription",label:"Claude Subscription",provider:"claude-subscription",adapter:"claude-cli",sdkLabel:"Claude CLI",baseUrl:"",showBaseUrl:!1,defaultModels:["opus","sonnet","haiku","fable"]},{id:"codex",label:"Codex (OpenAI)",provider:"codex",adapter:"codex-cli",sdkLabel:"Codex SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4","gpt-5.4-mini"]}];function s(e,t){let r=e||"openai",o=t||"openai";return i.find(e=>e.provider===r&&e.adapter===o)||i.find(e=>e.provider===r)||i[0]}},88377:(e,t,r)=>{r.d(t,{K:()=>a,NP:()=>s,ts:()=>n});var o=r(38459);function l(e){var t,r;return null!=(r=null!=(t=e.updatedAt)?t:e.createdAt)?r:0}function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();if(!e)return{key:"recency:unknown",label:"No date"};let r=t-e;return r<864e5?{key:"recency:today",label:"Today"}:r<6048e5?{key:"recency:week",label:"This week"}:r<2592e6?{key:"recency:month",label:"This month"}:{key:"recency:older",label:"Older"}}function n(e,t){switch(t){case"name-asc":case"name-desc":return(0,o.po)(e.name);case"most-nodes":case"least-nodes":var r;return 0===(r=e.nodes.length)?{key:"nodes:0",label:"0 nodes"}:r<=2?{key:"nodes:1-2",label:"1–2 nodes"}:r<=5?{key:"nodes:3-5",label:"3–5 nodes"}:r<=10?{key:"nodes:6-10",label:"6–10 nodes"}:{key:"nodes:11+",label:"11+ nodes"};case"newest":case"oldest":return a(l(e));default:return{key:"all",label:"All flows"}}}function i(e,t){return e.name.localeCompare(t.name)||e.id.localeCompare(t.id)}function s(e,t){let r=(e,r)=>{switch(t){case"name-asc":return e.name.localeCompare(r.name);case"name-desc":return r.name.localeCompare(e.name);case"most-nodes":return r.nodes.length-e.nodes.length;case"least-nodes":return e.nodes.length-r.nodes.length;case"newest":{let t=l(r)-l(e);return 0!==t?t:i(e,r)}case"oldest":{let t=l(e)-l(r);return 0!==t?t:i(e,r)}default:return 0}};return[...e].sort((e,t)=>{let o=Number(!!t.favorite)-Number(!!e.favorite);return 0!==o?o:r(e,t)})}},90057:(e,t,r)=>{r.d(t,{g:()=>n});var o=r(74879);let l=(0,r(73288).h)("frontend/services/flow/index");class a{async loadFlows(){l.debug("loadFlows: Entering method");try{if(this.flowsCache)return l.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let e=await fetch("/api/flow");if(!e.ok){let t=await e.json();throw Error(t.error||"Failed to load flows")}let t=await e.json();return l.debug("loadFlows: Loaded flows from API",{count:t.length}),this.flowsCache=t,t}catch(e){return l.warn("loadFlows: Failed to load flows:",e),[]}}async suggestToolsForStep(e){let t=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"suggest-tools",...e})}),r=await t.json().catch(()=>null);if(!t.ok)throw Error((null==r?void 0:r.error)||"Could not suggest connected tools.");return r}async applyToolsToStep(e){let t=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply-tools",...e})}),r=await t.json().catch(()=>null);if(!t.ok)throw Error((null==r?void 0:r.error)||"Could not connect the approved tools.");return r.flow}async checkPlausibility(e){let t=await fetch("/api/flow/assist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check-plausibility",...e})}),r=await t.json().catch(()=>null);if(!t.ok)throw Error((null==r?void 0:r.error)||"Could not check flow plausibility.");return r}async getFlow(e){l.debug("getFlow: Entering method",{flowId:e});try{if(this.flowsCache){let t=this.flowsCache.find(t=>t.id===e);if(t)return l.debug("getFlow: Using cached flow",{flowId:e}),t}let t=await fetch("/api/flow/".concat(encodeURIComponent(e)));if(!t.ok){if(404===t.status)return l.debug("getFlow: Flow ".concat(e," not found")),null;let r=await t.json();throw Error(r.error||"Failed to get flow: ".concat(e))}let r=await t.json();return l.debug("getFlow: Retrieved flow from API",{flowId:e}),r}catch(t){return l.warn("getFlow: Failed to get flow ".concat(e,":"),t),null}}async addFlow(e){l.debug("addFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to add flow"}}let r=await t.json();return this.flowsCache&&this.flowsCache.push(r),l.debug("addFlow: Flow added successfully",{flowId:e.id}),{success:!0}}catch(e){return l.warn("addFlow: Failed to add flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to add flow"}}}async generateFlow(e,t,r){l.debug("generateFlow: Entering method",{modelId:t,allowInstall:null==r?void 0:r.allowInstall,allowSubflows:null==r?void 0:r.allowSubflows,maxDepth:null==r?void 0:r.maxDepth});try{var o,a,n,i,s,d,c;let u=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:e,modelId:t,allowInstall:(null==r?void 0:r.allowInstall)===!0,allowSubflows:(null==r?void 0:r.allowSubflows)!==!1,..."number"==typeof(null==r?void 0:r.maxDepth)?{maxDepth:r.maxDepth}:{}})}),p=await u.json().catch(()=>null);if(!u.ok)return{success:!1,error:(null==p?void 0:p.error)||"Failed to generate flow"};let h=Array.isArray(p.flows)&&p.flows.length>0?p.flows:[{flow:p.flow,validation:p.validation}];return l.debug("generateFlow: Draft generated",{flowId:null==(o=p.flow)?void 0:o.id,flowCount:h.length,attempts:p.attempts,errorCount:null==(a=p.validation)?void 0:a.errorCount,installedServers:null!=(s=null==(n=p.installedServers)?void 0:n.length)?s:0}),{success:!0,flow:p.flow,validation:p.validation,flows:h,rootFlowId:null!=(d=p.rootFlowId)?d:null==(i=p.flow)?void 0:i.id,attempts:p.attempts,installedServers:null!=(c=p.installedServers)?c:[]}}catch(e){return l.warn("generateFlow: Failed to generate flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to generate flow"}}}async improveFlow(e,t,r,o){l.debug("improveFlow: Entering method",{flowId:null==e?void 0:e.id,modelId:r,allowInstall:null==o?void 0:o.allowInstall});try{var a,n,i,s,d,c,u;let p=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:e,relatedFlows:null==o?void 0:o.relatedFlows,description:t,modelId:r,allowInstall:(null==o?void 0:o.allowInstall)===!0})}),h=await p.json().catch(()=>null);if(!p.ok)return{success:!1,error:(null==h?void 0:h.error)||"Failed to improve flow"};return l.debug("improveFlow: Draft revised",{flowId:null==(a=h.flow)?void 0:a.id,attempts:h.attempts,errorCount:null==(n=h.validation)?void 0:n.errorCount,installedServers:null!=(d=null==(i=h.installedServers)?void 0:i.length)?d:0}),{success:!0,flow:h.flow,validation:h.validation,flows:Array.isArray(h.flows)&&h.flows.length>0?h.flows:[{flow:h.flow,validation:h.validation}],rootFlowId:null!=(c=h.rootFlowId)?c:null==(s=h.flow)?void 0:s.id,attempts:h.attempts,installedServers:null!=(u=h.installedServers)?u:[]}}catch(e){return l.warn("improveFlow: Failed to improve flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to improve flow"}}}async convertProcessToSubflow(e,t,r,o){try{let l=await fetch("/api/flow/".concat(encodeURIComponent(e.id),"/convert-process-to-subflow"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({parentFlow:e,childFlow:t,processNodeId:r,expectedUpdatedAt:o})}),a=await l.json().catch(()=>null);if(!l.ok)return{success:!1,error:(null==a?void 0:a.error)||"Failed to convert Process to Subflow."};let n=a.parentFlow,i=a.childFlow;if(this.flowsCache){let e=this.flowsCache.findIndex(e=>e.id===n.id);e>=0?this.flowsCache[e]=n:this.flowsCache.push(n),this.flowsCache.some(e=>e.id===i.id)||this.flowsCache.push(i)}return{success:!0,parentFlow:n,childFlow:i}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Failed to convert Process to Subflow."}}}async updateFlow(e){l.debug("updateFlow: Entering method",{flowId:e.id,flowName:e.name,nodeCount:e.nodes.length,edgeCount:e.edges.length});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e.id)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to update flow"}}let r=await t.json();if(this.flowsCache){let t=this.flowsCache.findIndex(t=>t.id===e.id);t>=0?this.flowsCache[t]=r:this.flowsCache.push(r)}return l.debug("updateFlow: Flow updated successfully",{flowId:e.id}),{success:!0}}catch(e){return l.warn("updateFlow: Failed to update flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to update flow"}}}async deleteFlow(e){l.debug("deleteFlow: Entering method",{flowId:e});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e)),{method:"DELETE"});if(!t.ok){let e=await t.json();return{success:!1,error:e.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(t=>t.id!==e)),l.debug("deleteFlow: Flow deleted successfully",{flowId:e}),{success:!0}}catch(e){return l.warn("deleteFlow: Failed to delete flow:",e),{success:!1,error:e instanceof Error?e.message:"Failed to delete flow"}}}async listFlowVersions(e){l.debug("listFlowVersions: Entering method",{flowId:e});try{let t=await fetch("/api/flow/".concat(encodeURIComponent(e),"/versions"));if(!t.ok){let e=await t.json().catch(()=>null);throw Error((null==e?void 0:e.error)||"Failed to list flow versions")}let r=await t.json();return Array.isArray(r.versions)?r.versions:[]}catch(t){return l.warn("listFlowVersions: Failed for flow ".concat(e,":"),t),[]}}async getFlowVersion(e,t){l.debug("getFlowVersion: Entering method",{flowId:e,versionId:t});try{let r=await fetch("/api/flow/".concat(encodeURIComponent(e),"/versions/").concat(encodeURIComponent(t)));if(!r.ok){if(404===r.status)return null;let e=await r.json().catch(()=>null);throw Error((null==e?void 0:e.error)||"Failed to get flow version")}return await r.json()}catch(r){return l.warn("getFlowVersion: Failed for ".concat(e,"/").concat(t,":"),r),null}}createNode(e,t){return l.debug("createNode: Entering method",{type:e,position:t}),{id:(0,o.A)(),type:e,position:t,data:{label:"".concat("mcp"===e?"MCP":e.charAt(0).toUpperCase()+e.slice(1)," Node"),type:e,properties:"process"===e?{inputMode:"full-history"}:{}}}}createStartNode(){return{id:(0,o.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"NewFlow";l.debug("createNewFlow: Entering method",{name:e});let t=Date.now();return{id:(0,o.A)(),name:e,createdAt:t,updatedAt:t,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(e,t){return l.debug("createHistoryEntry: Entering method"),{nodes:[...e],edges:[...t]}}generateSampleFlow(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Sample Flow";return l.debug("generateSampleFlow: Entering method",{name:e}),{id:(0,o.A)(),name:e,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let n=new a},92241:(e,t,r)=>{r.d(t,{o:()=>L,A:()=>B});var o=r(95155),l=r(12115),a=r(48116),n=r(29767),i=r(8532),s=r(94049),d=r(33567),c=r(25635),u=r(78470),p=r(41983),h=r(53062),m=r(84578),f=r(28548),g=r(1702),y=r(91871),x=r(20699),w=r(4484),b=r(52277),v=r(14915),k=r(89296),j=r(62291),A=r(47529),C=r(12313),S=r(60691),F=r(76808),T=r(41603),I=r(57563);function P(e){var t,r,o;return String(null!=(o=null!=(r=null==e||null==(t=e.data)?void 0:t.type)?r:null==e?void 0:e.type)?o:"")}function E(e){var t;return(null==(t=e.data)?void 0:t.bidirectional)===!0}var N=r(81956);let O=(0,r(73288).h)("components/Flow/FlowDashboard/FlowCard"),M=(0,a.Ay)(n.A,{shouldForwardProp:e=>"selected"!==e})(e=>{let{theme:t,selected:r}=e;return{display:"grid",gridTemplateColumns:"minmax(138px, 1.05fr) minmax(0, 0.95fr)",gridTemplateRows:"auto minmax(0, 1fr) auto auto",gridTemplateAreas:'\n "title title"\n "preview details"\n "preview primary"\n "preview footer"\n ',height:"100%",minHeight:286,position:"relative",overflow:"hidden",border:"1px solid ".concat(r?t.palette.primary.main:t.palette.divider),boxShadow:r?"0 0 0 3px ".concat((0,i.X4)(t.palette.primary.main,.14),", 0 24px 70px ").concat((0,i.X4)(t.palette.primary.main,.18)):"0 16px 45px ".concat((0,i.X4)(t.palette.common.black,"dark"===t.palette.mode?.18:.07)),transition:"transform 220ms cubic-bezier(0.2, 0.75, 0.2, 1), border-color 220ms ease, box-shadow 220ms ease","&:hover":{borderColor:(0,i.X4)(t.palette.primary.main,.42),boxShadow:"0 26px 70px ".concat((0,i.X4)(t.palette.primary.main,"dark"===t.palette.mode?.16:.12)),transform:"translateY(-4px)"},"&::before":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:r?"3px":"1px",opacity:r?1:.5,background:"linear-gradient(90deg, ".concat(t.palette.primary.main,", ").concat(t.palette.secondary.main,", transparent)")}}}),R=(0,a.Ay)(s.default)(e=>{let{theme:t}=e;return{gridArea:"preview",flex:1,minWidth:0,height:236,backgroundColor:(0,i.X4)(t.palette.background.default,.82),backgroundImage:"\n linear-gradient(".concat((0,i.X4)(t.palette.divider,.55)," 1px, transparent 1px),\n linear-gradient(90deg, ").concat((0,i.X4)(t.palette.divider,.55)," 1px, transparent 1px),\n radial-gradient(circle at 25% 0%, ").concat((0,i.X4)(t.palette.primary.main,.12),", transparent 52%)\n "),backgroundSize:"22px 22px, 22px 22px, auto",border:"1px solid ".concat(t.palette.divider),borderRadius:14,display:"flex",alignItems:"center",justifyContent:"center",margin:t.spacing(1.25),marginRight:t.spacing(0),overflow:"hidden",position:"relative"}}),L=()=>(0,o.jsxs)(n.A,{sx:{height:"100%",minHeight:286,display:"grid",gridTemplateColumns:"minmax(138px, 1.05fr) minmax(0, 0.95fr)",gridTemplateRows:"auto 1fr auto auto"},children:[(0,o.jsx)(s.default,{sx:{gridColumn:"1 / -1",px:1.5,py:1.25,borderBottom:1,borderColor:"divider"},children:(0,o.jsx)(x.A,{variant:"text",width:"55%",height:30})}),(0,o.jsx)(s.default,{sx:{gridColumn:1,gridRow:"2 / 5",p:1.25,pr:0},children:(0,o.jsx)(x.A,{variant:"rounded",height:"100%",sx:{minHeight:220}})}),(0,o.jsxs)(m.A,{sx:{gridColumn:2,gridRow:2,p:1.5},children:[(0,o.jsx)(x.A,{variant:"text"}),(0,o.jsx)(x.A,{variant:"text",width:"85%"}),(0,o.jsxs)(s.default,{sx:{display:"flex",gap:.5,mt:1},children:[(0,o.jsx)(x.A,{variant:"rectangular",width:60,height:20}),(0,o.jsx)(x.A,{variant:"rectangular",width:55,height:20})]})]}),(0,o.jsxs)(g.A,{sx:{gridColumn:2,gridRow:3,px:1.25,pb:1},children:[(0,o.jsx)(x.A,{variant:"rounded",width:"48%",height:30}),(0,o.jsx)(x.A,{variant:"rounded",width:"48%",height:30})]}),(0,o.jsxs)(g.A,{sx:{gridColumn:2,gridRow:4,justifyContent:"flex-end",p:.75,borderTop:1,borderColor:"divider"},children:[(0,o.jsx)(x.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(x.A,{variant:"circular",width:28,height:28}),(0,o.jsx)(x.A,{variant:"circular",width:28,height:28})]})]}),B=e=>{var t,r;let{flow:a,selected:n,onSelect:x,onDelete:L,onCopy:B,onEdit:X,onOpenInChat:U,onSetFolder:D,onToggleFavorite:z,folders:W=[],validation:V,pickerMode:H=!1}=e;O.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let K=(0,d.A)(),[J,q]=(0,l.useState)(null),_=null!=(t=null==V?void 0:V.errorCount)?t:0,G=null!=(r=null==V?void 0:V.warningCount)?r:0,{stepCount:Z,subagentCount:Y,signalCount:$}=function(e){let t=Array.isArray(e.nodes)?e.nodes:[],r=Array.isArray(e.edges)?e.edges:[],o=new Map(t.map(e=>[e.id,e])),l=r.filter(e=>!(0,I.BY)(e)),a=0,n=0,i=0;for(let e of t){let t=P(e);if("process"===t){a+=1;continue}if("signal"===t){var s,d;let t=null==(d=e.data)||null==(s=d.properties)?void 0:s.topic;"string"==typeof t&&t.trim()&&(i+=1);continue}if("subflow"!==t)continue;let r=l.filter(t=>t.source===e.id||t.target===e.id),c=r.some(t=>{if(!E(t))return!1;let r=t.source===e.id?t.target:t.source;return"process"===P(o.get(r))}),u=r.filter(t=>!E(t)&&t.target===e.id),p=r.filter(t=>!E(t)&&t.source===e.id),h=u.some(e=>p.some(t=>e.source!==t.target));c||1===u.length&&0===p.length?n+=1:h&&(a+=1)}return{stepCount:a,subagentCount:n,signalCount:i}}(a),Q=_>0?"error":G>0?"warning":null,ee=V?(0,o.jsxs)(s.default,{children:[(0,o.jsx)(c.A,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:_>0?"".concat(_," problem").concat(1===_?"":"s"," — won't run"):"".concat(G," warning").concat(1===G?"":"s")}),V.issues.slice(0,5).map((e,t)=>(0,o.jsxs)(c.A,{variant:"caption",sx:{display:"block"},children:["• ",e.message]},t)),V.issues.length>5&&(0,o.jsxs)(c.A,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",V.issues.length-5," more"]})]}):null;return(0,o.jsxs)(M,{selected:n,children:[z&&(0,o.jsx)(u.A,{title:a.favorite?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,o.jsx)(p.A,{size:"small",onClick:e=>{e.stopPropagation(),z&&z(a.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:a.favorite?K.palette.warning.main:K.palette.text.secondary,backgroundColor:(0,i.X4)(K.palette.background.paper,.6),"&:hover":{backgroundColor:(0,i.X4)(K.palette.background.paper,.9)}},children:a.favorite?(0,o.jsx)(j.A,{fontSize:"small"}):(0,o.jsx)(A.A,{fontSize:"small"})})}),Q&&(0,o.jsx)(u.A,{title:ee,arrow:!0,placement:"top",children:(0,o.jsxs)(s.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===Q?K.palette.error.main:K.palette.warning.main,boxShadow:K.shadows[2],pointerEvents:"auto"},children:["error"===Q?(0,o.jsx)(S.A,{sx:{fontSize:16}}):(0,o.jsx)(F.A,{sx:{fontSize:16}}),(0,o.jsx)(c.A,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===Q?_:G})]})}),(0,o.jsx)(h.A,{onClick:()=>x(a.id),sx:{gridArea:"title",display:"block",minWidth:0,px:1.5,py:1.25,pl:z?5.5:1.5,pr:Q?7:1.5,borderBottom:"1px solid ".concat(K.palette.divider)},children:(0,o.jsx)(c.A,{variant:"h6",component:"div",noWrap:!0,title:a.name,children:a.name})}),(0,o.jsx)(h.A,{onClick:()=>x(a.id),"aria-label":"Open ".concat(a.name),sx:{gridArea:"preview",minWidth:0,height:256,display:"flex",alignItems:"stretch"},children:(0,o.jsx)(R,{children:(()=>{if(0===a.nodes.length)return(0,o.jsx)(s.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,o.jsx)(c.A,{color:"textSecondary",align:"center",children:"Nothing added yet"})});let e=a.nodes.map(e=>{var t,r;return null!=(r=null==(t=e.position)?void 0:t.x)?r:0}),t=a.nodes.map(e=>{var t,r;return null!=(r=null==(t=e.position)?void 0:t.y)?r:0}),r=Math.min(...e),l=Math.min(...t),n=Math.max(...e)+180,i=Math.max(...t)+70,d="".concat(r-40," ").concat(l-40," ").concat(n-r+80," ").concat(i-l+80),u=e=>{var t,r,o,l;return{cx:(null!=(o=null==(t=e.position)?void 0:t.x)?o:0)+90,cy:(null!=(l=null==(r=e.position)?void 0:r.y)?l:0)+35}};return(0,o.jsx)(s.default,{sx:{width:"100%",height:"100%",p:1},children:(0,o.jsxs)("svg",{width:"100%",height:"100%",viewBox:d,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.edges.map((e,t)=>{let r=a.nodes.find(t=>t.id===e.source),l=a.nodes.find(t=>t.id===e.target);if(!r||!l)return null;let n=u(r),i=u(l);return(0,o.jsx)("line",{x1:n.cx,y1:n.cy,x2:i.cx,y2:i.cy,stroke:K.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},e.id||t)}),a.nodes.map(e=>{var t,r,l,a,n,i;let s=null!=(a=null==(t=e.position)?void 0:t.x)?a:0,d=null!=(n=null==(r=e.position)?void 0:r.y)?n:0,c=null!=(i=null==(l=e.data)?void 0:l.type)?i:"process",u=(0,T.M6)(c,K);return(0,o.jsxs)("g",{children:[(0,o.jsx)("rect",{x:s,y:d,width:180,height:70,rx:12,fill:u,opacity:.85,stroke:K.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,o.jsx)("text",{x:s+90,y:d+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:c.substring(0,1).toUpperCase()})]},e.id)})]})})})()})}),(0,o.jsx)(h.A,{onClick:()=>x(a.id),sx:{gridArea:"details",gridRow:H?"2 / 5":void 0,minWidth:0,display:"flex",alignItems:"stretch"},children:(0,o.jsxs)(m.A,{sx:{width:"100%",minWidth:0,p:1.5,"&:last-child":{pb:1.25}},children:[a.description?(0,o.jsx)(u.A,{title:a.description,placement:"bottom-start",children:(0,o.jsx)(c.A,{variant:"body2",color:"text.secondary",sx:{display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.description})}):(0,o.jsx)(c.A,{variant:"body2",color:"text.secondary",sx:{fontStyle:"italic"},children:"No description yet"}),(0,o.jsxs)(s.default,{sx:{display:"flex",gap:.5,mt:1.25,flexWrap:"wrap"},children:[(0,o.jsx)(f.A,{size:"small",label:"".concat(Z," step").concat(1===Z?"":"s"),color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),Y>0&&(0,o.jsx)(f.A,{size:"small",label:"".concat(Y," subagent").concat(1===Y?"":"s"),color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,o.jsx)(f.A,{size:"small",label:"".concat($," signal").concat(1===$?"":"s"),variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})}),!H&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(g.A,{sx:{gridArea:"primary",gap:.75,px:1.25,pb:1,pt:0},children:[U&&(0,o.jsx)(y.A,{size:"small",variant:"contained",startIcon:(0,o.jsx)(C.A,{fontSize:"small"}),onClick:e=>{e.stopPropagation(),U&&U(a.id)},sx:{flex:1,minWidth:0},children:"Use"}),(0,o.jsx)(y.A,{size:"small",variant:"outlined",startIcon:(0,o.jsx)(v.A,{fontSize:"small"}),onClick:e=>{e.stopPropagation(),X?X(a.id):x(a.id)},sx:{flex:1,minWidth:0},children:"Edit"})]}),(0,o.jsxs)(g.A,{sx:{gridArea:"footer",justifyContent:"flex-end",gap:.25,px:1,py:.625,minHeight:42,borderTop:"1px solid ".concat(K.palette.divider),backgroundColor:(0,i.X4)(K.palette.background.default,.55)},children:[B&&(0,o.jsx)(u.A,{title:"Make a copy",children:(0,o.jsx)(p.A,{size:"small",onClick:e=>{e.stopPropagation(),B&&B(a.id)},"aria-label":"Make a copy",children:(0,o.jsx)(b.A,{fontSize:"small"})})}),D&&(0,o.jsx)(u.A,{title:a.folder?"Folder: ".concat(a.folder):"Organize in a folder",children:(0,o.jsx)(p.A,{size:"small",onClick:e=>{e.stopPropagation(),q(e.currentTarget)},color:a.folder?"primary":"default","aria-label":"Move to folder",children:(0,o.jsx)(k.A,{fontSize:"small"})})}),L&&(0,o.jsx)(u.A,{title:"Delete agent",children:(0,o.jsx)(p.A,{size:"small",onClick:e=>{e.stopPropagation(),L&&L(a.id)},color:"error","aria-label":"Delete agent",children:(0,o.jsx)(w.A,{fontSize:"small"})})})]})]}),!H&&D&&(0,o.jsx)(N.A,{anchorEl:J,open:!!J,currentFolder:a.folder,folders:W,onClose:()=>q(null),onAssign:e=>D(a.id,e)})]})}},93632:(e,t,r)=>{r.d(t,{P:()=>a});let o=(0,r(73288).h)("frontend/services/plannedExecutions");class l{async list(){try{let e=await fetch("/api/planned-executions");if(!e.ok)throw Error("HTTP ".concat(e.status));return await e.json()}catch(e){return o.warn("Failed to list planned executions",e),{paused:!1,executions:[]}}}async create(e){try{let t=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await t.json();if(!t.ok)return{success:!1,error:(null==r?void 0:r.error)||"HTTP ".concat(t.status)};return{success:!0,execution:r.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async update(e,t){try{let r=await fetch("/api/planned-executions/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),o=await r.json();if(!r.ok)return{success:!1,error:(null==o?void 0:o.error)||"HTTP ".concat(r.status)};return{success:!0,execution:o.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async delete(e){try{let t=await fetch("/api/planned-executions/".concat(e),{method:"DELETE"});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async setPaused(e){try{let t=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:e})});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async runNow(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/run"),{method:"POST"}),r=await t.json();if(!t.ok)return{success:!1,error:(null==r?void 0:r.error)||"HTTP ".concat(t.status)};return{success:!0,record:r.record}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async loadRuns(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/runs"));if(!t.ok)throw Error("HTTP ".concat(t.status));let r=await t.json();return Array.isArray(null==r?void 0:r.runs)?r.runs:[]}catch(t){return o.warn("Failed to load runs for ".concat(e),t),[]}}async previewSchedule(e,t){try{let r=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:e,timezone:t})});if(!r.ok)throw Error("HTTP ".concat(r.status));return await r.json()}catch(e){return{valid:!1,error:e instanceof Error?e.message:"Preview failed",nextRuns:[]}}}}let a=new l},96362:(e,t,r)=>{r.d(t,{A:()=>f});var o=r(95155);r(12115);var l=r(2778),a=r(52363),n=r(94049),i=r(25635),s=r(41983),d=r(21067),c=r(65036),u=r(75912),p=r(91871),h=r(77073),m=r(99162);let f=e=>{let{open:t,onClose:r,title:f,description:g,maxWidth:y="md",...x}=e;return(0,o.jsxs)(l.A,{open:t,onClose:r,maxWidth:y,fullWidth:!0,children:[(0,o.jsx)(a.A,{component:"div",children:(0,o.jsxs)(n.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,o.jsx)(i.A,{variant:"h6",children:f}),(0,o.jsx)(s.A,{edge:"end",color:"inherit",onClick:r,"aria-label":"close",children:(0,o.jsx)(h.A,{})})]})}),(0,o.jsx)(d.A,{}),(0,o.jsxs)(c.A,{sx:{p:3},children:[g&&(0,o.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:g}),(0,o.jsx)(m.A,{...x})]}),(0,o.jsx)(u.A,{children:(0,o.jsx)(p.A,{onClick:r,children:"Cancel"})})]})}},99162:(e,t,r)=>{r.d(t,{A:()=>m});var o=r(95155),l=r(12115),a=r(33077),n=r(94049),i=r(9562),s=r(56422),d=r(4474),c=r(25635),u=r(51611),p=r(22573);let h={xs:12,sm:6,md:4},m=e=>{let{isLoading:t=!1,error:r=null,emptyMessage:m="Nothing to choose from.",loadingMessage:f="Loading…",skeleton:g,skeletonCount:y=4,columns:x=h,items:w,searchable:b=!1,searchPlaceholder:v="Search…",searchTerm:k,onSearchChange:j,groups:A,collapsedKeys:C,onToggleGroup:S}=e,F={...h,...x},[T,I]=(0,l.useState)(""),P=void 0!==k,E=P?k:T,[N,O]=(0,l.useState)(new Set),M=null!=C?C:N,R=e=>(0,o.jsx)(a.Ay,{container:!0,spacing:2,alignItems:"stretch",children:e.map(e=>(0,o.jsx)(a.Ay,{item:!0,xs:F.xs,sm:F.sm,md:F.md,lg:F.lg,sx:{display:"flex"},children:(0,o.jsx)(n.default,{sx:{width:"100%"},children:e.content})},e.key))}),L=b?(0,o.jsx)(i.A,{placeholder:v,variant:"outlined",size:"small",fullWidth:!0,value:E,onChange:e=>(e=>{null==j||j(e),P||I(e)})(e.target.value),sx:{mb:2},InputProps:{startAdornment:(0,o.jsx)(s.A,{position:"start",children:(0,o.jsx)(u.A,{fontSize:"small"})})}}):null,B=e=>(0,o.jsxs)(n.default,{children:[L,e]});if(t)return B(g?(0,o.jsx)(a.Ay,{container:!0,spacing:2,children:Array.from({length:y}).map((e,t)=>(0,o.jsx)(a.Ay,{item:!0,xs:F.xs,sm:F.sm,md:F.md,lg:F.lg,children:g},"skeleton-".concat(t)))}):(0,o.jsxs)(n.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,o.jsx)(d.default,{size:20}),(0,o.jsx)(c.A,{variant:"body2",color:"text.secondary",children:f})]}));if(r)return B((0,o.jsx)(c.A,{color:"error",variant:"body2",sx:{py:2},children:r}));let X=P?"":E.trim().toLowerCase(),U=e=>{var t;return!X||(null!=(t=e.searchText)?t:"").toLowerCase().includes(X)},D=(0,o.jsx)(c.A,{variant:"body2",color:"text.secondary",sx:{py:2},children:m});if(A){let e=A.map(e=>({...e,items:e.items.filter(U)})).filter(e=>e.items.length>0);return B(0===e.length?D:(0,o.jsx)(o.Fragment,{children:e.map(e=>(0,o.jsx)(p.A,{label:e.label,count:e.items.length,expanded:!M.has(e.key),onToggle:()=>(e=>{if(S)return void S(e);O(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})})(e.key),children:R(e.items)},e.key))}))}let z=(null!=w?w:[]).filter(U);return B(0===z.length?D:R(z))}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1576],{69195:(e,t,n)=>{n.r(t),n.d(t,{TourProvider:()=>u,useTour:()=>s});var a=n(95155),o=n(12115),r=n(9164),d=n(77326);let l=(0,n(73288).h)("frontend/contexts/TourContext"),i=(0,o.createContext)({isActive:!1,stepIndex:0,startTour:()=>{},next:()=>{},back:()=>{},endTour:()=>{}}),s=()=>(0,o.useContext)(i),u=e=>{var t;let{children:n}=e,{settings:s,updateSettings:u,isLoading:c,settingsHydrated:h}=(0,r.useStorage)(),[p,g]=(0,o.useState)(!1),[b,f]=(0,o.useState)(0),y=(0,o.useRef)(!1),m=(0,o.useCallback)(()=>{var e;u({...s,onboarding:{...null!=(e=s.onboarding)?e:{},completed:!0}}).catch(e=>l.warn("Failed to persist onboarding completion",e))},[s,u]),v=(0,o.useCallback)(()=>{l.info("Starting guided tour"),f(0),g(!0)},[]),C=(0,o.useCallback)(()=>{l.info("Ending guided tour"),g(!1),m()},[m]),k=(0,o.useCallback)(()=>{f(e=>e>=d.$.length-1?(g(!1),m(),e):e+1)},[m]),w=(0,o.useCallback)(()=>{f(e=>Math.max(0,e-1))},[]);return(0,o.useEffect)(()=>{var e;c||!h||y.current||(y.current=!0,(null==(e=s.onboarding)?void 0:e.completed)!==!0&&(l.info("First run detected — auto-starting guided tour"),v()))},[c,h,null==(t=s.onboarding)?void 0:t.completed,v]),(0,a.jsx)(i.Provider,{value:{isActive:p,stepIndex:b,startTour:v,next:k,back:w,endTour:C},children:n})}},77326:(e,t,n)=>{n.d(t,{$:()=>a});let a=[{id:"add-model",path:"/models",target:'[data-tour="add-model"]',placement:"bottom",title:"1. Start by connecting your AI",body:"This is the one required setup step: every agent and conversation needs an AI model.\n\nChoose “Connect AI,” select the provider you use, and follow the connection steps. Recommended settings are already selected."},{id:"new-flow",path:"/flows",target:'[data-tour="new-flow"]',placement:"bottom",title:"2. Create your first agent",body:"Choose “Start simple” to open the easy recipe builder. Give your agent a name, then explain each job in everyday language.\n\nFLUJO handles the technical start, finish, and connections for you. You can open the expert editor later if you ever need it."},{id:"chat-input",path:"/chat",target:'[data-tour="chat-input"]',placement:"top",title:"3. Talk to your agent",body:"Choose the agent you just created, type a real request, and send it. That is the full setup.\n\nConnected Apps are optional; add one later only when an agent needs files or another service."}]}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2005],{32005:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ex});var a=n(95155),i=n(33567),r=n(73707),o=n(49501),l=n(17681),s=n(94049),c=n(48989),d=n(15712),p=n(63417),u=n(30354),h=n(41983),m=n(25635),x=n(80777),g=n(28548),f=n(78470),b=n(57813),v=n(26466),y=n(13315),j=n(41602),w=n(96429),A=n(91287),k=n(38343),S=n(96968),C=n(17417),I=n(92437),R=n(27530),W=n(11587),z=n(43634),N=n(70723),P=n(41610),O=n(81577),X=n(83478),H=n(8532),E=n(12115),F=n(52619),M=n.n(F),T=n(20063),L=n(91871),B=n(2778),D=n(52363),J=n(65036),U=n(22003),V=n(9562),_=n(21067),G=n(86973),K=n(4474),Y=n(75912),q=n(62617),Q=n(90363),Z=n(73288),$=n(43076),ee=n(50432);async function et(){let e="unknown",t="unknown";try{let n=await fetch("/api/update");if(n.ok){let a=await n.json();a&&"object"==typeof a&&(e="string"==typeof a.currentVersion?a.currentVersion:e,t="string"==typeof a.updateMode?a.updateMode:a.isGitRepo?"git":t)}}catch(e){}let n="".concat(window.location.pathname).concat(window.location.hash);return function(){var e,t;let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=null!=(e=n.userAgent)?e:"";return{appVersion:(n.appVersion||"").trim()||"unknown",installMode:(n.installMode||"").trim()||"unknown",os:function(e){let t=(e||"").toLowerCase();return t.includes("windows")?"Windows":t.includes("mac os")||t.includes("macintosh")?"macOS":t.includes("android")?"Android":t.includes("iphone")||t.includes("ipad")||t.includes("ios")?"iOS":t.includes("linux")?"Linux":"unknown"}(a),browser:function(e){let t=e||"";return/edg\//i.test(t)?"Edge":/opr\/|opera/i.test(t)?"Opera":/firefox\//i.test(t)?"Firefox":/chrome\//i.test(t)&&!/edg\//i.test(t)?"Chrome":/safari\//i.test(t)&&!/chrome\//i.test(t)?"Safari":"unknown"}(a),pageUrl:function(e){let t=(e||"").trim();if(!t)return"unknown";let n=t.indexOf("#"),a=n>=0?t.slice(n):"",i=n>=0?t.slice(0,n):t,r=i.indexOf("?");return r>=0&&(i=i.slice(0,r)),i=i.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]+/i,""),"".concat(i).concat(a).trim()||"unknown"}(n.pageUrl),timestamp:(null!=(t=n.now)?t:new Date).toISOString()}}({appVersion:e,installMode:t,userAgent:"undefined"!=typeof navigator?navigator.userAgent:"",pageUrl:n})}var en=n(33411);let ea=(0,Z.h)("frontend/services/bugReport");class ei{async fetchWithErrorHandling(e,t){ea.debug("Making API request",{url:e,method:(null==t?void 0:t.method)||"GET"});let n=await fetch(e,t),a=null;if(204!==n.status){let e=n.headers.get("content-type");a=e&&e.includes("application/json")?await n.json():await n.text()}if(!n.ok){let t="object"==typeof a&&null!==a?a.error||a.message||JSON.stringify(a):a||"HTTP error! status: ".concat(n.status);throw ea.error("Request failed",{url:e,status:n.status,error:t}),Error(t)}return a}async enhance(e){return this.fetchWithErrorHandling("/api/bugs/enhance",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}}let er=new ei,eo=(0,Z.h)("frontend/components/BugReport/BugReportButton");function el(e){let{variant:t="icon"}=e,[n,i]=(0,E.useState)(!1),[r,o]=(0,E.useState)(""),[l,c]=(0,E.useState)(""),[d,p]=(0,E.useState)(null),[u,g]=(0,E.useState)([]),[b,v]=(0,E.useState)(""),[y,j]=(0,E.useState)(["bug"]),[w,A]=(0,E.useState)(!1),[k,S]=(0,E.useState)(null),C=(0,E.useCallback)(async()=>{try{let e=await et();p(e)}catch(e){eo.warn("Failed to collect bug-report context",e)}try{let e=await $.N.loadModels();g(e),e.length>0&&v(t=>t||e[0].id)}catch(e){eo.warn("Failed to load models for bug-report enhancement",e)}},[]);(0,E.useEffect)(()=>{n&&C()},[n,C]);let I=(0,E.useMemo)(()=>d?(0,ee.uV)(d):"Collecting app context…",[d]),R=(0,E.useCallback)(async()=>{if(b&&d){A(!0),S(null);try{var e;let t=await er.enhance({modelId:b,title:r,description:l,context:d});o(t.title),c(t.body),j((null==(e=t.labels)?void 0:e.length)?t.labels:["bug"]),S(t.enhanced?{severity:"success",text:"AI suggestion applied — review and edit before submitting."}:{severity:"warning",text:"AI enhancement was unavailable; your original text is unchanged."})}catch(e){eo.error("Bug-report enhancement failed",e),S({severity:"error",text:"Enhancement failed — you can still submit your report as-is."})}finally{A(!1)}}},[b,d,r,l]),W=(0,E.useCallback)(()=>{let e=d?"".concat(l.trim(),"\n\n").concat((0,ee.uV)(d)):l.trim();(0,en.tr)({title:r.trim()||"Bug report",body:e,labels:y})},[r,l,d,y]),z=(0,E.useCallback)(()=>i(!1),[]),N=(0,E.useCallback)(()=>i(!0),[]);return(0,a.jsxs)(a.Fragment,{children:["icon"===t?(0,a.jsx)(f.A,{title:"Report a bug",children:(0,a.jsx)(h.A,{onClick:N,color:"inherit","aria-label":"Report a bug",children:(0,a.jsx)(q.A,{})})}):(0,a.jsx)(L.A,{variant:"contained",startIcon:(0,a.jsx)(q.A,{}),onClick:N,children:"Report a Bug"}),(0,a.jsxs)(B.A,{open:n,onClose:z,maxWidth:"md",fullWidth:!0,children:[(0,a.jsx)(D.A,{children:"Report a Bug"}),(0,a.jsx)(J.A,{dividers:!0,children:(0,a.jsxs)(x.A,{spacing:2,children:[(0,a.jsx)(m.A,{variant:"body2",color:"text.secondary",children:"Found a problem? Describe it here. FLUJO attaches only safe, non-sensitive context (app version, install mode, browser/OS, and the current page). No API keys, environment variables, or secrets are ever included. You can optionally polish the report with an AI model, then review it on GitHub before submitting."}),k&&(0,a.jsx)(U.A,{severity:k.severity,children:k.text}),(0,a.jsx)(V.A,{label:"Title",value:r,onChange:e=>o(e.target.value),fullWidth:!0,placeholder:"Short summary of the problem"}),(0,a.jsx)(V.A,{label:"Description",value:l,onChange:e=>c(e.target.value),fullWidth:!0,multiline:!0,minRows:6,placeholder:"What happened? What did you expect? Steps to reproduce?"}),(0,a.jsx)(_.A,{}),(0,a.jsxs)(s.default,{children:[(0,a.jsx)(m.A,{variant:"subtitle2",gutterBottom:!0,children:"Enhance with AI (optional)"}),0===u.length?(0,a.jsx)(m.A,{variant:"body2",color:"text.secondary",children:"No models configured — add a model in the Models page to enable AI enhancement. You can still file the report without it."}):(0,a.jsxs)(x.A,{direction:{xs:"column",sm:"row"},spacing:2,alignItems:"center",children:[(0,a.jsx)(V.A,{select:!0,label:"Model",value:b,onChange:e=>v(e.target.value),sx:{minWidth:220},size:"small",children:u.map(e=>(0,a.jsx)(G.A,{value:e.id,children:e.displayName||e.name},e.id))}),(0,a.jsx)(L.A,{variant:"outlined",startIcon:w?(0,a.jsx)(K.default,{size:16}):(0,a.jsx)(Q.A,{}),onClick:R,disabled:w||!b||!l.trim()||!d,children:w?"Enhancing…":"Enhance with AI"})]})]}),(0,a.jsx)(_.A,{}),(0,a.jsxs)(s.default,{children:[(0,a.jsx)(m.A,{variant:"subtitle2",gutterBottom:!0,children:"Included app context (read-only)"}),(0,a.jsx)(V.A,{value:I,fullWidth:!0,multiline:!0,minRows:4,InputProps:{readOnly:!0,sx:{fontFamily:"var(--font-geist-mono)",fontSize:12}}})]})]})}),(0,a.jsxs)(Y.A,{children:[(0,a.jsx)(L.A,{onClick:z,children:"Cancel"}),(0,a.jsx)(L.A,{variant:"contained",onClick:W,disabled:!l.trim(),children:"Open on GitHub"})]})]})]})}var es=n(9164),ec=n(26796),ed=n(60530);let ep=(0,Z.h)("frontend/components/Navigation"),eu=[{type:"link",name:"AI Setup",path:"/models",tour:"nav-models",icon:w.default},{type:"link",name:"Connected Apps",path:"/mcp",tour:"nav-mcp",icon:A.A},{type:"link",name:"Agents",path:"/flows",tour:"nav-flows",icon:k.A},{type:"link",name:"Talk",path:"/chat",tour:"nav-chat",icon:S.A},{type:"group",name:"More",icon:C.A,children:[{type:"link",name:"Automations",path:"/automation/triggers",aliases:["/executions","/automation/waves","/waves"],tour:"nav-executions",icon:I.A},{type:"link",name:"Extensions",path:"/packages",tour:"nav-packages",icon:R.A},{type:"link",name:"Activity",path:"/statistics",tour:"nav-statistics",icon:W.A},{type:"link",name:"Help",path:"/docs",tour:"nav-docs",icon:z.A},{type:"link",name:"Settings",path:"/settings",tour:"nav-settings",icon:N.A}]}],eh=(e,t)=>{var n;return t===e.path||t.startsWith("".concat(e.path,"/"))||(null==(n=e.aliases)?void 0:n.includes(t))===!0};function em(e){let{items:t,pathname:n,mobile:d=!1,onNavigate:p}=e,u=(0,i.A)(),h=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=eh(e,n),c=e.icon;return d?(0,a.jsxs)(r.A,{component:M(),className:"living-watershed-mobile-nav-link".concat(i?" is-active":""),href:e.path,"aria-current":i?"page":void 0,"data-tour":e.tour,onClick:p(e.path),selected:i,sx:{mx:1,mb:.5,pl:t?3:1.5,minHeight:48,"&.Mui-selected":{boxShadow:"inset 0 0 0 1px ".concat((0,H.X4)(u.palette.primary.main,.22))}},children:[(0,a.jsx)(o.A,{sx:{minWidth:38,color:i?"primary.light":"text.secondary"},children:(0,a.jsx)(c,{fontSize:"small"})}),(0,a.jsx)(l.A,{primary:e.name,primaryTypographyProps:{fontWeight:i?700:590,fontSize:"0.92rem"}}),i&&(0,a.jsx)(s.default,{"aria-hidden":"true",sx:{width:6,height:6,borderRadius:"50%",bgcolor:"secondary.main",boxShadow:"0 0 12px ".concat(u.palette.secondary.main)}})]},e.path):(0,a.jsxs)(s.default,{component:M(),className:"living-watershed-nav-link".concat(i?" is-active":""),href:e.path,"aria-current":i?"page":void 0,"data-tour":e.tour,onClick:p(e.path),sx:{position:"relative",display:"inline-flex",alignItems:"center",gap:.7,minHeight:42,px:1.35,border:"1px solid",borderColor:i?(0,H.X4)(u.palette.primary.main,.26):"transparent",borderRadius:2.5,color:i?"text.primary":"text.secondary",bgcolor:i?(0,H.X4)(u.palette.primary.main,.11):"transparent",textDecoration:"none",fontSize:"0.88rem",fontWeight:i?720:620,whiteSpace:"nowrap",transition:"all 170ms ease","&::after":i?{position:"absolute",right:10,bottom:-1,left:10,height:2,borderRadius:2,content:'""',background:"linear-gradient(90deg, ".concat(u.palette.primary.main,", ").concat(u.palette.secondary.main,")"),boxShadow:"0 0 14px ".concat((0,H.X4)(u.palette.primary.main,.7))}:void 0,"&:hover":{color:"text.primary",bgcolor:(0,H.X4)(u.palette.primary.main,i?.14:.07),transform:"translateY(-1px)"}},children:[(0,a.jsx)(c,{sx:{fontSize:17,color:i?"primary.light":"text.secondary"}}),e.name]},e.path)};return(0,a.jsx)(a.Fragment,{children:t.map(e=>{if("link"===e.type)return h(e);if(d)return(0,a.jsxs)(E.Fragment,{children:[(0,a.jsx)(c.A,{component:"div",disableSticky:!0,sx:{mt:1.5,mb:.5,px:2.5,color:"text.secondary",bgcolor:"transparent",fontSize:"0.68rem",fontWeight:760,letterSpacing:"0.13em",lineHeight:2.8,textTransform:"uppercase"},children:e.name}),e.children.map(e=>h(e,!0))]},e.name);let t=e.children.some(e=>eh(e,n)),i=e.children[0],r=e.icon;return(0,a.jsxs)(s.default,{component:M(),className:"living-watershed-nav-link living-watershed-nav-group-link".concat(t?" is-active":""),href:i.path,"aria-current":eh(i,n)?"page":void 0,"data-tour":i.tour,onClick:p(i.path),sx:{position:"relative",display:"inline-flex",alignItems:"center",gap:.7,minHeight:42,px:1.35,border:"1px solid",borderColor:t?(0,H.X4)(u.palette.primary.main,.26):"transparent",borderRadius:2.5,color:t?"text.primary":"text.secondary",bgcolor:t?(0,H.X4)(u.palette.primary.main,.11):"transparent",textDecoration:"none",fontSize:"0.88rem",fontWeight:t?720:620,whiteSpace:"nowrap",transition:"all 170ms ease","&::after":t?{position:"absolute",right:10,bottom:-1,left:10,height:2,borderRadius:2,content:'""',background:"linear-gradient(90deg, ".concat(u.palette.primary.main,", ").concat(u.palette.secondary.main,")")}:void 0,"&:hover":{color:"text.primary",bgcolor:(0,H.X4)(u.palette.primary.main,t?.14:.07),transform:"translateY(-1px)"}},children:[(0,a.jsx)(r,{sx:{fontSize:17,color:t?"primary.light":"text.secondary"}}),e.name]},e.name)})})}function ex(){var e,t,n,r;let{toggleTheme:o,isDarkMode:l}=(0,ec.useTheme)(),c=(0,i.A)(),w=(0,T.usePathname)(),A=(0,T.useRouter)(),{settings:k,settingsHydrated:S}=(0,es.useStorage)(),[I,R]=(0,E.useState)(!1),W=(0,d.A)("(max-width:1279px)");ep.debug("Rendering Navigation component with pathname: ".concat(w));let z=S&&null!=(n=null==k||null==(e=k.experimental)?void 0:e.enabled)&&n,N=eu.reduce((e,t)=>{if("link"===t.type)return(!t.experimental||z)&&e.push(t),e;let n=t.children.filter(e=>!e.experimental||z);return n.length>0&&e.push({...t,children:n}),e},[]),F=N.find(e=>"group"===e.type&&e.children.some(e=>eh(e,w))),L=null!=(r=null==F||null==(t=F.children.find(e=>eh(e,w)))?void 0:t.path)&&r,B=!!F;(0,E.useEffect)(()=>(document.documentElement.classList.toggle("has-app-subnav",B),()=>document.documentElement.classList.remove("has-app-subnav")),[B]);let D=e=>t=>{t.defaultPrevented||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||0!==t.button||(0,ed.L_)(()=>A.push(e))&&t.preventDefault()},J=e=>t=>{R(!1),D(e)(t)};return(0,a.jsxs)(p.A,{position:"sticky",color:"default",elevation:0,"data-app-navigation":!0,children:[(0,a.jsxs)(u.A,{sx:{gap:{xs:1,sm:1.5},px:{xs:1.5,sm:2.5,xl:3.5},minHeight:"var(--app-bar-height) !important"},children:[W&&(0,a.jsx)(h.A,{color:"inherit","aria-label":"Open navigation menu",onClick:()=>R(!0),sx:{border:1,borderColor:"divider"},children:(0,a.jsx)(C.A,{})}),(0,a.jsxs)(s.default,{component:M(),className:"living-watershed-brand",href:"/",onClick:D("/"),"aria-label":"FLUJO home",sx:{display:"flex",alignItems:"center",gap:1.1,mr:{xs:0,xl:.75},color:"text.primary",textDecoration:"none"},children:[(0,a.jsx)(s.default,{className:"living-watershed-brand-mark","aria-hidden":"true",sx:{position:"relative",display:"grid",width:38,height:38,placeItems:"center",overflow:"hidden",border:"1px solid ".concat((0,H.X4)(c.palette.common.white,.18)),borderRadius:"13px",color:"#fff",background:"linear-gradient(145deg, ".concat(c.palette.primary.light,", ").concat(c.palette.primary.main," 48%, ").concat(c.palette.secondary.main,")"),boxShadow:"0 10px 28px ".concat((0,H.X4)(c.palette.primary.main,.32)),fontWeight:850,letterSpacing:"-0.06em","&::after":{position:"absolute",inset:0,content:'""',background:"linear-gradient(145deg, rgba(255,255,255,.32), transparent 38%)"}},children:(0,a.jsx)(s.default,{component:"span",sx:{zIndex:1},children:"F"})}),(0,a.jsxs)(s.default,{sx:{display:{xs:"none",sm:"block"},lineHeight:1},children:[(0,a.jsx)(m.A,{sx:{fontSize:"0.98rem",fontWeight:810,letterSpacing:"-0.045em"},children:"FLUJO"}),(0,a.jsx)(m.A,{sx:{mt:.4,color:"text.secondary",fontSize:"0.59rem",fontWeight:700,letterSpacing:"0.13em",textTransform:"uppercase"},children:"Private AI, made simple"})]})]}),!W&&(0,a.jsx)(s.default,{component:"nav","aria-label":"Primary navigation",sx:{display:"flex",flex:1,alignItems:"center",gap:.3,minWidth:0},children:(0,a.jsx)(em,{items:N,pathname:w,onNavigate:D})}),W&&(0,a.jsx)(s.default,{sx:{flex:1}}),(0,a.jsxs)(x.A,{direction:"row",spacing:.7,alignItems:"center",children:[!W&&(0,a.jsx)(g.A,{size:"small",label:"Private on this device",icon:(0,a.jsx)(s.default,{component:"span",sx:{width:7,height:7,ml:.4,borderRadius:"50%",bgcolor:"primary.main",boxShadow:"0 0 10px ".concat(c.palette.primary.main)}}),sx:{height:34,border:1,borderColor:"divider",color:"text.secondary",bgcolor:(0,H.X4)(c.palette.background.paper,.5),"& .MuiChip-label":{px:1,fontSize:"0.72rem"}}}),(0,a.jsx)(el,{variant:"icon"}),(0,a.jsx)(f.A,{title:l?"Switch to light mode":"Switch to dark mode",children:(0,a.jsx)(h.A,{onClick:()=>{ep.debug("Theme toggle clicked, current mode: ".concat(l?"dark":"light")),o()},color:"inherit","aria-label":l?"Switch to light mode":"Switch to dark mode",sx:{border:1,borderColor:"divider"},children:l?(0,a.jsx)(P.A,{fontSize:"small"}):(0,a.jsx)(O.A,{fontSize:"small"})})})]})]}),F&&(0,a.jsx)(s.default,{sx:{display:{xs:"none",md:"flex"},justifyContent:"center",minHeight:"var(--subnav-height)",borderTop:1,borderColor:"divider",backgroundColor:(0,H.X4)(c.palette.background.paper,.34)},children:(0,a.jsx)(b.A,{value:L,"aria-label":"".concat(F.name," sections"),sx:{minHeight:"var(--subnav-height)"},children:F.children.map(e=>{let t=e.icon;return(0,a.jsx)(v.A,{component:M(),href:e.path,"aria-current":e.path===L?"page":void 0,value:e.path,icon:(0,a.jsx)(t,{sx:{fontSize:16}}),iconPosition:"start",label:e.name,"data-tour":e.tour,onClick:D(e.path),sx:{minHeight:"var(--subnav-height)",py:0}},e.path)})})}),(0,a.jsxs)(y.Ay,{anchor:"left",open:I,onClose:()=>R(!1),ModalProps:{keepMounted:!0},slotProps:{backdrop:{sx:{backgroundColor:(0,H.X4)(c.palette.common.black,l?.2:.1),backdropFilter:"blur(2px)"}}},PaperProps:{sx:{width:{xs:"min(88vw, 340px)",sm:340},p:1,borderRight:"1px solid ".concat((0,H.X4)(c.palette.primary.main,.16)),backgroundColor:(0,H.X4)(c.palette.background.paper,l?.68:.6),backgroundImage:"linear-gradient(145deg, ".concat((0,H.X4)(c.palette.primary.main,.06),", transparent 42%)"),boxShadow:"18px 0 56px ".concat((0,H.X4)(c.palette.common.black,l?.3:.12)),backdropFilter:"blur(20px) saturate(125%)"}},children:[(0,a.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",px:1,py:1.2},children:[(0,a.jsxs)(s.default,{component:M(),className:"living-watershed-brand",href:"/",onClick:J("/"),sx:{display:"flex",alignItems:"center",gap:1.2,color:"text.primary",textDecoration:"none"},children:[(0,a.jsx)(s.default,{className:"living-watershed-brand-mark",sx:{display:"grid",width:38,height:38,placeItems:"center",borderRadius:"13px",color:"#fff",background:"linear-gradient(145deg, ".concat(c.palette.primary.light,", ").concat(c.palette.primary.main," 48%, ").concat(c.palette.secondary.main,")"),fontWeight:850},children:"F"}),(0,a.jsxs)(s.default,{children:[(0,a.jsx)(m.A,{sx:{fontWeight:800,lineHeight:1},children:"FLUJO"}),(0,a.jsx)(m.A,{variant:"caption",color:"text.secondary",children:"Private AI, made simple"})]})]}),(0,a.jsx)(h.A,{"aria-label":"Close navigation menu",onClick:()=>R(!1),children:(0,a.jsx)(X.A,{})})]}),(0,a.jsx)(s.default,{sx:{mx:1,mb:1.4,p:1.2,border:1,borderColor:"divider",borderRadius:3,bgcolor:(0,H.X4)(c.palette.success.main,.06)},children:(0,a.jsxs)(x.A,{direction:"row",alignItems:"center",spacing:1,children:[(0,a.jsx)(s.default,{sx:{width:8,height:8,borderRadius:"50%",bgcolor:"success.main",boxShadow:"0 0 12px ".concat(c.palette.success.main)}}),(0,a.jsx)(m.A,{variant:"caption",sx:{color:"text.secondary"},children:"Private workspace on this device"})]})}),(0,a.jsx)(j.A,{disablePadding:!0,children:(0,a.jsx)(em,{items:N,pathname:w,mobile:!0,onNavigate:J})})]})]})}},60530:(e,t,n)=>{n.d(t,{L_:()=>o,QO:()=>i,bH:()=>r});let a=null;function i(e){a=e}function r(e){a===e&&(a=null)}function o(e){return!!a&&(a(e),!0)}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2499],{9898:(e,r,t)=>{t.d(r,{v:()=>l});var n=t(12115),a=t(17897);let o=(0,t(73288).h)("frontend/hooks/useServerStatus");function s(e){return"stdio"===e.transport?e.args&&e.args.length>0?e.args[0]:"Unknown path":"websocket"===e.transport?e.websocketUrl||"Unknown URL":e.serverUrl||"Unknown URL"}function l(){let[e,r]=(0,n.useState)([]),[t,l]=(0,n.useState)(!0),[i,c]=(0,n.useState)(null),[u,d]=(0,n.useState)(new Set),f=(0,n.useCallback)(async()=>{o.debug("Loading servers"),l(!0),c(null);try{let e=await a.S.loadServerConfigs();if(!e||"error"in e){o.warn("Failed to load server configurations:",null==e?void 0:e.error),c((null==e?void 0:e.error)||"Failed to load server configurations"),l(!1);return}let t=await Promise.all(e.map(async e=>{o.debug("Getting status for server: ".concat(e.name));let r=await a.S.getServerStatus(e.name),t="string"==typeof r?r:r.status,n="object"==typeof r&&r.message?r.message:void 0,l="object"==typeof r&&r.stderrOutput?r.stderrOutput:void 0,i=s(e);return{...e,path:i,status:t,error:n,stderrOutput:l}}));o.debug("Final server states:",t),r(t),l(!1)}catch(e){o.warn("Failed to load servers:",e),c("Failed to load servers"),l(!1)}},[]),p=(0,n.useCallback)(async(t,n)=>{o.debug("Toggling server ".concat(t," to ").concat(n?"enabled":"disabled"));try{let s=e.find(e=>e.name===t);if(!s)return o.warn("Server not found: ".concat(t)),!1;o.debug("Found server ".concat(t,", current disabled state: ").concat(s.disabled));let l=await a.S.updateServerConfig(t,{disabled:!n});if(l.error)return o.warn("Failed to update server config:",[l.error,t]),!1;o.debug("Updating server ".concat(t," state in UI, new disabled state: ").concat(!n)),r(e=>e.map(e=>e.name===t?{...e,disabled:!n}:e)),o.info("Successfully toggled server ".concat(t," to ").concat(n?"enabled":"disabled"));try{let e=await a.S.getServerStatus(t),n="string"==typeof e?e:e.status,o="object"==typeof e&&e.message?e.message:void 0,s="object"==typeof e&&e.stderrOutput?e.stderrOutput:void 0;r(e=>e.map(e=>e.name===t?{...e,status:n,error:o,stderrOutput:s}:e))}catch(e){o.warn("Failed to get status for server ".concat(t," after toggle:"),e)}return!0}catch(e){return o.warn("Failed to toggle server:",e),!1}},[e]),v=(0,n.useCallback)(async t=>{o.debug("Deleting server: ".concat(t));try{if(!e.find(e=>e.name===t))return o.warn("Server not found:",t),!1;let n=await a.S.deleteServerConfig(t);if(n.error)return o.warn("Failed to delete server config:",n.error),!1;return r(e=>e.filter(e=>e.name!==t)),!0}catch(e){return o.warn("Failed to delete server:",e),!1}},[e]),m=(0,n.useCallback)(async e=>{o.debug("Adding server:",e);try{let t=s(e),n={...e,path:t,status:"connecting",tools:[],env:e.env||{}};r(e=>[...e,n]),d(r=>new Set(r).add(e.name));let l=await a.S.updateServerConfig(e.name,e);if(l.error)return o.warn("Failed to update server config:",l.error),r(r=>r.map(r=>r.name===e.name?{...r,status:"error",error:l.error}:r)),d(r=>{let t=new Set(r);return t.delete(e.name),t}),!1;o.info("Successfully added server ".concat(e.name));try{let t=await a.S.getServerStatus(e.name),n="string"==typeof t?t:t.status,o="object"==typeof t&&t.message?t.message:void 0,s="object"==typeof t&&t.stderrOutput?t.stderrOutput:void 0;r(r=>r.map(r=>r.name===e.name?{...r,status:n,error:o,stderrOutput:s}:r))}catch(r){o.warn("Failed to get status for server ".concat(e.name," after adding:"),r)}return d(r=>{let t=new Set(r);return t.delete(e.name),t}),!0}catch(t){return o.warn("Failed to add server:",t),r(r=>r.map(r=>r.name===e.name?{...r,status:"error",error:t instanceof Error?t.message:"Unknown error during server addition"}:r)),d(r=>{let t=new Set(r);return t.delete(e.name),t}),!1}},[]),g=(0,n.useCallback)(async(e,t)=>{let n=null!=t?t:e.name,l=n!==e.name;o.debug("Updating server:",e);try{r(r=>r.map(r=>r.name===n?{...e,path:s(e),status:r.status,error:r.error,stderrOutput:r.stderrOutput}:r));let t=await a.S.updateServerConfig(n,e);if(t.error){if(o.warn("Failed to update server config:",t.error),l)return await f(),!1;return r(r=>r.map(r=>r.name===e.name?{...r,status:"error",error:t.error}:r)),!1}o.info("Successfully updated config for server ".concat(e.name));try{let t=await a.S.getServerStatus(e.name),n="string"==typeof t?t:t.status,o="object"==typeof t&&t.message?t.message:void 0,s="object"==typeof t&&t.stderrOutput?t.stderrOutput:void 0;r(r=>r.map(r=>r.name===e.name?{...r,status:n,error:o,stderrOutput:s}:r))}catch(r){o.warn("Failed to get status for server ".concat(e.name," after config update:"),r)}return!0}catch(n){if(o.warn("Failed to update server:",n),l)return await f(),!1;let t=n instanceof Error?n.message:"Unknown error during update";return r(r=>r.map(r=>r.name===e.name?{...r,status:"error",error:t}:r)),!1}},[f]),w=(0,n.useCallback)(async(e,t)=>{let n=t&&t.trim()?t.trim():"";o.debug("Setting folder for server ".concat(e," to ").concat(n||"(none)"));try{let t=await a.S.updateServerConfig(e,{folder:n});if("error"in t&&t.error)return o.warn("Failed to update server folder:",t.error),!1;return r(r=>r.map(r=>r.name===e?{...r,folder:n||void 0}:r)),!0}catch(e){return o.warn("Failed to set server folder:",e),!1}},[]),b=(0,n.useCallback)(async(e,t)=>{o.debug("Setting favorite for server ".concat(e," to ").concat(t));try{let n=await a.S.updateServerConfig(e,{favorite:t});if("error"in n&&n.error)return o.warn("Failed to update server favorite:",n.error),!1;return r(r=>r.map(r=>r.name===e?{...r,favorite:t}:r)),!0}catch(e){return o.warn("Failed to set server favorite:",e),!1}},[]),y=(0,n.useCallback)(async(t,n)=>{o.debug("Saving environment variables for server: ".concat(t),n);try{if(!e.find(e=>e.name===t))return o.warn("Server not found: ".concat(t)),!1;let s=await a.S.updateServerConfig(t,{env:n});if(s.error)return o.warn("Failed to update server config:",s.error),!1;return o.debug("Updating environment variables in UI for server: ".concat(t)),r(e=>e.map(e=>e.name===t?{...e,env:n}:e)),o.info("Successfully saved environment variables for server: ".concat(t)),!0}catch(e){return o.warn("Failed to save environment variables:",e),!1}},[e]);return(0,n.useEffect)(()=>{f()},[f]),{servers:e,isLoading:t,loadError:i,connectingServers:u,loadServers:f,toggleServer:p,retryServer:(0,n.useCallback)(async e=>{o.debug("Retrying server status for: ".concat(e));try{let t=await a.S.getServerStatus(e),n="string"==typeof t?t:t.status,o="object"==typeof t&&t.message?t.message:void 0,s="object"==typeof t&&t.stderrOutput?t.stderrOutput:void 0;return r(r=>r.map(r=>r.name===e?{...r,status:n,error:o,stderrOutput:s}:r)),!0}catch(e){return o.warn("Failed to retry server status:",e),!1}},[]),deleteServer:v,addServer:m,updateServer:g,setServerFolder:w,setServerFavorite:b,saveEnv:y}}},23201:(e,r,t)=>{t.d(r,{A:()=>l});var n=t(95155);t(12115);var a=t(5421),o=t(67895),s=t(97430);function l(e){let{show:r,onClick:t,sx:l}=e;return(0,n.jsx)(a.A,{in:r,unmountOnExit:!0,children:(0,n.jsx)(o.A,{size:"small",color:"primary","aria-label":"Back to top",onClick:t,sx:{position:"fixed",bottom:24,right:24,zIndex:1200,...l},children:(0,n.jsx)(s.A,{})})})}},32683:(e,r,t)=>{t.d(r,{A:()=>A});var n=t(12115),a=t(2821),o=t(8532),s=t(57001),l=t(24809),i=t(81852),c=t(48116),u=t(33567),d=t(66964),f=t(74798),p=t(16625),v=t(25635),m=t(85795),g=t(95195);function w(e){return(0,g.Ay)("MuiLink",e)}let b=(0,m.A)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var y=t(3067),h=t(95155);let S={primary:!0,secondary:!0,error:!0,info:!0,success:!0,warning:!0,textPrimary:!0,textSecondary:!0,textDisabled:!0},x=(0,c.Ay)(v.A,{name:"MuiLink",slot:"Root",overridesResolver:(e,r)=>{let{ownerState:t}=e;return[r.root,r["underline".concat((0,i.A)(t.underline))],"button"===t.component&&r.button]}})((0,d.A)(e=>{let{theme:r}=e;return{variants:[{props:{underline:"none"},style:{textDecoration:"none"}},{props:{underline:"hover"},style:{textDecoration:"none","&:hover":{textDecoration:"underline"}}},{props:{underline:"always"},style:{textDecoration:"underline","&:hover":{textDecorationColor:"inherit"}}},{props:e=>{let{underline:r,ownerState:t}=e;return"always"===r&&"inherit"!==t.color},style:{textDecorationColor:"var(--Link-underlineColor)"}},...Object.entries(r.palette).filter((0,f.A)()).map(e=>{let[t]=e;return{props:{underline:"always",color:t},style:{"--Link-underlineColor":r.vars?"rgba(".concat(r.vars.palette[t].mainChannel," / 0.4)"):(0,o.X4)(r.palette[t].main,.4)}}}),{props:{underline:"always",color:"textPrimary"},style:{"--Link-underlineColor":r.vars?"rgba(".concat(r.vars.palette.text.primaryChannel," / 0.4)"):(0,o.X4)(r.palette.text.primary,.4)}},{props:{underline:"always",color:"textSecondary"},style:{"--Link-underlineColor":r.vars?"rgba(".concat(r.vars.palette.text.secondaryChannel," / 0.4)"):(0,o.X4)(r.palette.text.secondary,.4)}},{props:{underline:"always",color:"textDisabled"},style:{"--Link-underlineColor":(r.vars||r).palette.text.disabled}},{props:{component:"button"},style:{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},["&.".concat(b.focusVisible)]:{outline:"auto"}}}]}})),A=n.forwardRef(function(e,r){let t=(0,p.b)({props:e,name:"MuiLink"}),c=(0,u.A)(),{className:d,color:f="primary",component:v="a",onBlur:m,onFocus:g,TypographyClasses:b,underline:A="always",variant:k="inherit",sx:C,...j}=t,[F,L]=n.useState(!1),T={...t,color:f,component:v,focusVisible:F,underline:A,variant:k},E=(e=>{let{classes:r,component:t,focusVisible:n,underline:a}=e,o={root:["root","underline".concat((0,i.A)(a)),"button"===t&&"button",n&&"focusVisible"]};return(0,s.A)(o,w,r)})(T);return(0,h.jsx)(x,{color:f,className:(0,a.A)(E.root,d),classes:b,component:v,onBlur:e=>{(0,l.A)(e.target)||L(!1),m&&m(e)},onFocus:e=>{(0,l.A)(e.target)&&L(!0),g&&g(e)},ref:r,ownerState:T,variant:k,...j,sx:[...void 0===S[f]?[{color:f}]:[],...Array.isArray(C)?C:[C]],style:{...j.style,..."always"===A&&"inherit"!==f&&!S[f]&&{"--Link-underlineColor":(e=>{let{theme:r,ownerState:t}=e,n=t.color,a=(0,y.Yn)(r,"palette.".concat(n,".main"),!1)||(0,y.Yn)(r,"palette.".concat(n),!1)||t.color,s=(0,y.Yn)(r,"palette.".concat(n,".mainChannel"))||(0,y.Yn)(r,"palette.".concat(n,"Channel"));return"vars"in r&&s?"rgba(".concat(s," / 0.4)"):(0,o.X4)(a,.4)})({theme:c,ownerState:T})}}})})},42063:(e,r,t)=>{t.d(r,{A:()=>o});var n=t(15485),a=t(95155);let o=(0,n.A)((0,a.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")},64598:(e,r,t)=>{t.d(r,{R:()=>o});var n=t(12115),a=t(97104);function o(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{threshold:t=200,deps:o=[]}=r,s=(0,n.useRef)(null),[l,i]=(0,n.useState)(!1),c=(0,n.useRef)(!1),u=(0,n.useCallback)(()=>{let e=s.current;return e&&e.scrollHeight>e.clientHeight+1?e:null},[]),d=(0,n.useCallback)(()=>{let e=u();return e?e.scrollTop:window.scrollY||document.documentElement.scrollTop||0},[u]),f=(0,n.useCallback)(e=>{let r=u();r?r.scrollTop=e:window.scrollTo(0,e)},[u]);return(0,n.useEffect)(()=>{let r=s.current,n=0,o="function"==typeof window.requestAnimationFrame?window.requestAnimationFrame.bind(window):e=>window.setTimeout(()=>e(0),16),l="function"==typeof window.cancelAnimationFrame?window.cancelAnimationFrame.bind(window):e=>window.clearTimeout(e),c=()=>{let r=d();i(r>t),n&&l(n),n=o(()=>(0,a.vi)(e,r))};return null==r||r.addEventListener("scroll",c,{passive:!0}),window.addEventListener("scroll",c,{passive:!0}),()=>{n&&l(n),null==r||r.removeEventListener("scroll",c),window.removeEventListener("scroll",c)}},[e,t,d]),(0,n.useEffect)(()=>{if(c.current)return;let r=(0,a.Aq)(e,0);if(r<=0){c.current=!0;return}f(r);let n=d();n>0&&(c.current=!0,i(n>t))},o),{ref:s,showBackToTop:l,scrollToTop:(0,n.useCallback)(()=>{let e=u();e?e.scrollTo({top:0,behavior:"smooth"}):window.scrollTo({top:0,behavior:"smooth"}),i(!1)},[u])}}},71651:(e,r,t)=>{t.d(r,{A:()=>w});var n=t(95155),a=t(12115),o=t(94049),s=t(25635),l=t(80777),i=t(9562),c=t(78470),u=t(41983),d=t(91871),f=t(86946),p=t(4484),v=t(80007),m=t(79299),g=t(62640);let w=e=>{let{roots:r,onChange:t}=e,w=Array.isArray(r)?r:[],[b,y]=(0,a.useState)(null),h=(e,r)=>{t(w.map((t,n)=>n===e?r:t))};return(0,n.jsxs)(o.default,{children:[(0,n.jsxs)(o.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,n.jsx)(v.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,n.jsx)(s.A,{variant:"subtitle1",children:"Workspace folders"})]}),(0,n.jsxs)(s.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:1.5},children:["Limit which folders this server may work in. Advisory only — the server is told these paths via MCP roots; it is not a hard sandbox. Leave empty to default to the server's own root dir. Supports ",(0,n.jsx)("code",{children:"${global:VAR}"}),"."]}),(0,n.jsx)(l.A,{spacing:1,children:w.map((e,r)=>(0,n.jsxs)(o.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,n.jsx)(i.A,{size:"small",fullWidth:!0,placeholder:"/path/to/folder or file:///path",value:e,onChange:e=>h(r,e.target.value)}),(0,n.jsx)(c.A,{title:"Browse folders (on the FLUJO machine)",children:(0,n.jsx)(u.A,{size:"small",onClick:()=>y(r),"aria-label":"browse for folder",children:(0,n.jsx)(m.A,{fontSize:"small"})})}),(0,n.jsx)(c.A,{title:"Remove",children:(0,n.jsx)(u.A,{size:"small",onClick:()=>t(w.filter((e,t)=>t!==r)),"aria-label":"remove workspace folder",children:(0,n.jsx)(p.A,{fontSize:"small"})})})]},r))}),(0,n.jsx)(d.A,{size:"small",startIcon:(0,n.jsx)(f.A,{}),onClick:()=>t([...w,""]),sx:{mt:1},children:"Add folder"}),(0,n.jsx)(g.A,{open:null!==b,title:"Choose a workspace folder",initialPath:null!==b&&w[b]||void 0,onClose:()=>y(null),onSelect:e=>{null!==b&&h(b,e)}})]})}},94035:(e,r,t)=>{t.d(r,{O:()=>s});var n=t(12115),a=t(17897);let o=(0,t(73288).h)("frontend/hooks/useServerTools");function s(e){let[r,t]=(0,n.useState)([]),[s,l]=(0,n.useState)(!1),[i,c]=(0,n.useState)(null),[u,d]=(0,n.useState)(null),[f,p]=(0,n.useState)(null),[v,m]=(0,n.useState)(0),[g,w]=(0,n.useState)(!1),b=(0,n.useRef)(null);(0,n.useEffect)(()=>()=>{b.current&&clearTimeout(b.current)},[]);let y=(0,n.useCallback)(async function(){let n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e){t([]),c(null);return}if(p(e),!n&&u&&new Date().getTime()-u.getTime()<200&&r.length>0&&e===f)return void o.debug("Rate limiting tool refresh for server: ".concat(e));o.debug("Loading tools for server: ".concat(e)),l(!0),c(null);try{let r=await a.S.listServerTools(e);if(e!==f)return void o.debug("Server changed during tool loading from ".concat(e," to ").concat(f));if(r.error)o.warn("Error loading tools for ".concat(e,":"),r.error),c(r.error),t([]);else{let n=r.tools||[];o.debug("Loaded ".concat(n.length," tools for ").concat(e)),t(n),d(new Date),m(0)}}catch(r){if(e!==f)return void o.debug("Server changed during tool loading from ".concat(e," to ").concat(f));o.warn("Failed to load tools for server ".concat(e,":"),r),c("Failed to load tools: ".concat(r instanceof Error?r.message:"Unknown error")),t([])}finally{e===f&&l(!1)}},[e,u,r.length,f]),h=(0,n.useCallback)(()=>{if(!e)return;b.current&&(clearTimeout(b.current),b.current=null),w(!0);let r=Math.min(1e3*Math.pow(2,v),1e4);return o.debug("Retrying tool load for ".concat(e," in ").concat(r,"ms (attempt ").concat(v+1,")")),b.current=setTimeout(()=>{m(e=>e+1),y(!0),w(!1)},r),()=>{b.current&&clearTimeout(b.current)}},[e,v,y]),S=(0,n.useCallback)(async(r,t,n)=>{if(!e)return{success:!1,output:"",error:"No server selected"};o.debug("Testing tool ".concat(r," on server ").concat(e," with params:"),t);try{let s=await a.S.callTool(e,r,t,n);if(s.error)return o.warn("Error calling tool ".concat(r,":"),s.error),{success:!1,output:"",error:s.error};return o.debug("Tool ".concat(r," executed successfully:"),s),{success:!0,output:JSON.stringify(s,null,2)}}catch(e){return o.error("Exception calling tool ".concat(r,":"),e),{success:!1,output:"",error:e instanceof Error?e.message:"Unknown error occurred"}}},[e]);return(0,n.useEffect)(()=>{o.debug("Server name changed to: ".concat(e||"null")),b.current&&(clearTimeout(b.current),b.current=null),m(0),w(!1),e?(p(e),y()):(o.debug("Clearing tools as no server is selected"),t([]),c(null),p(null))},[e,y]),{tools:r,isLoading:s||g,error:i,loadTools:y,retryLoadTools:h,isRetrying:g,retryCount:v,testTool:S}}},97430:(e,r,t)=>{t.d(r,{A:()=>o});var n=t(15485),a=t(95155);let o=(0,n.A)((0,a.jsx)("path",{d:"M7.41 15.41 12 10.83l4.59 4.58L18 14l-6-6-6 6z"}),"KeyboardArrowUp")}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[361],{361:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var l=n(95155),a=n(12115),i=n(74494),o=n(22003),s=n(25635),r=n(94049),d=n(91871),c=n(9164);let u=(0,n(73288).h)("frontend/components/TelemetryNotice");function h(){let{settings:e,settingsHydrated:t,updateSettings:n}=(0,c.useStorage)(),h=(0,a.useRef)(!1),[y,f]=(0,a.useState)(null);(0,a.useEffect)(()=>{t&&!h.current&&(h.current=!0,fetch("/api/telemetry/daily-active",{method:"POST",headers:{"Content-Type":"application/json"}}).then(async e=>e.ok?await e.json():null).then(e=>{(null==e?void 0:e.shouldNotify)&&f(e)}).catch(e=>{u.debug("Daily telemetry check failed",e)}))},[t]);let m=async t=>{var l,a;let i={enabled:(null==(l=e.telemetry)?void 0:l.enabled)!==!1,notifyDaily:(null==(a=e.telemetry)?void 0:a.notifyDaily)!==!1};await n({...e,telemetry:{...i,...t}}),f(null)};return(0,l.jsx)(i.A,{open:!!y,anchorOrigin:{vertical:"bottom",horizontal:"center"},sx:{maxWidth:720},children:(0,l.jsxs)(o.A,{severity:"info",variant:"filled",sx:{width:"100%"},children:[(0,l.jsxs)(s.A,{variant:"body2",children:["Anonymous daily activity sharing is on. FLUJO ",(null==y?void 0:y.sent)?"sent today’s rotating anonymous usage pulse.":"performed today’s usage check; no pulse was delivered."," ","It includes only the app version, platform, install method, UTC date, and a random ID that changes every day."]}),(0,l.jsxs)(r.default,{sx:{display:"flex",gap:1,mt:1,flexWrap:"wrap"},children:[(0,l.jsx)(d.A,{color:"inherit",size:"small",variant:"outlined",onClick:()=>m({enabled:!1}),children:"Turn off sharing"}),(0,l.jsx)(d.A,{color:"inherit",size:"small",onClick:()=>m({notifyDaily:!1}),children:"Don't notify again"})]})]})})}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3731],{23731:(e,t,r)=>{r.d(t,{uJ:()=>M,Ay:()=>F,Yw:()=>P});var n=r(95155),o=r(12115),i=r(33567),l=r(94049),s=r(4474),c=r(25635),a=r(22003),u=r(78470),d=r(91871),f=r(50430),p=r(26188),h=r(38952),m=r(63186),v=r(62962),g=r(39486),y=r(82446),w=r(9127),x=r(17897),b=r(41080);let C=(0,r(73288).h)("frontend/components/Chat/McpAppFrame"),E={name:"FLUJO",version:"3.40.0"},A=new Set(["https:","http:"]),R=["inline","fullscreen","pip"],j=new Set(["text"]),M=262144;function P(e){try{return new TextEncoder().encode(JSON.stringify(e)).length}catch(e){return 1/0}}let T=null;async function S(){return T||(T=fetch("/api/mcp/app-sandbox").then(async e=>{if(!e.ok)throw Error("Sandbox endpoint discovery failed (".concat(e.status,")"));return await e.json()}).catch(e=>{throw T=null,e})),function(e,t){let r;if("string"!=typeof e.token||0===e.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if(void 0!==e.url){if("string"!=typeof e.url)throw Error("Sandbox endpoint discovery returned an invalid public URL");try{r=new URL(e.url)}catch(e){throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==r.protocol&&"https:"!==r.protocol||r.username||r.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===t.protocol&&"https:"!==r.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL")}else{if("http:"!==t.protocol)throw Error("MCP Apps on HTTPS require FLUJO_MCP_APP_SANDBOX_PUBLIC_URL to be configured");if(!Number.isInteger(e.port)||e.port<1||e.port>65535)throw Error("Sandbox endpoint discovery returned an invalid port");(r=new URL("/sandbox.html",t.origin)).port=String(e.port)}if(r.origin===t.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return r.searchParams.set("token",e.token),r.href}(await T,window.location)}function k(e,t){let r=[],n=new Set;for(let o of null!=e?e:[]){if(0===o.length||o.length>2048||/[^\x21-\x7e]/.test(o))continue;let e=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(o);if(!e||!t.includes(e[1].toLowerCase()))continue;let i=e[3].split(".");if(e[3].length>253||i.some(e=>0===e.length||e.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(e)))continue;let l=e[4]?Number(e[4]):void 0;if(void 0!==l&&(!Number.isInteger(l)||l<1||l>65535))continue;let s=o.toLowerCase();if(!n.has(s)&&(n.add(s),r.push(o),r.length>=64))break}return r}function L(e){if(e)try{return JSON.parse(e)}catch(e){return}}async function U(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;if(await e.sendToolInput({arguments:function(e){let t=L(e);return t&&"object"==typeof t&&!Array.isArray(t)?t:{}}(t)}),void 0!==n)return void await e.sendToolCancelled({reason:n});let i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(void 0===e)return!0===t?{content:[],isError:!0}:null;let r=L(e);return r&&"object"==typeof r&&Array.isArray(r.content)?{...r,...!0===t?{isError:!0}:{}}:{content:[{type:"text",text:e}],...!0===t?{isError:!0}:{}}}(r,o);i&&await e.sendToolResult(i)}function H(e,t,r){return t.includes(e)&&r.includes(e)}function z(e,t){let r=e.getBoundingClientRect(),n=Math.max(1,Math.round(r.width||e.clientWidth||1));return t?{width:n,height:Math.max(1,Math.round(r.height||e.clientHeight||1))}:{width:n,maxHeight:6e3}}async function D(e,t,r){try{let n=await x.S.listServerTools(e),o=Array.isArray(n.tools)?n.tools:[],i=r?o.find(e=>(null==e?void 0:e.name)===r):o.find(e=>(0,b.Gt)(null==e?void 0:e._meta)===t);if((null==i?void 0:i.name)&&(null==i?void 0:i.inputSchema)&&(0,b.Gt)(i._meta)===t)return{tool:i}}catch(e){C.debug("Could not resolve the full MCP App tool definition",e)}}let F=e=>{let{conversationId:t,serverName:r,uri:T,toolName:L,toolArgs:F,toolResultContent:I,toolUpdateId:O,toolCancelledReason:N,toolIsError:_,onAppMessage:J,onUpdateModelContext:W,onRequestDock:q,onDockable:B,onAvailableDisplayModes:G,hostDisplayMode:$,onRequestDisplayMode:V,onRequestClose:Z,onRegisterTeardown:K,teardownRegistrationKey:X,docked:Y=!1,visible:Q=!0}=e,ee=(0,i.A)(),et=(0,o.useId)(),er=(0,o.useMemo)(()=>t?"conversation:".concat(t):"app:".concat(r,":").concat(T,":").concat(et),[t,et,r,T]),[en,eo]=(0,o.useState)(!1),[ei,el]=(0,o.useState)(!1),[es,ec]=(0,o.useState)(null),[ea,eu]=(0,o.useState)(Y?"pip":"inline"),[ed,ef]=(0,o.useState)([]),ep=null!=$?$:ea,eh=(0,o.useMemo)(()=>Y?["pip","fullscreen"]:["inline","fullscreen",...q?["pip"]:[]],[Y,q]),em=(0,o.useRef)(null),ev=(0,o.useRef)(null),eg=(0,o.useRef)(null),ey=(0,o.useRef)(!1),ew=(0,o.useRef)(0),ex=(0,o.useRef)(!1),eb=(0,o.useRef)(null),eC=(0,o.useRef)(null),eE=(0,o.useRef)(!1),eA=(0,o.useRef)(!0),eR=(0,o.useRef)([]),ej=(0,o.useRef)(ep),eM=(0,o.useRef)(eh),eP=(0,o.useRef)(Promise.resolve()),eT=(0,o.useRef)(void 0),eS=(0,o.useRef)({args:F,resultContent:I,cancelledReason:N,isError:_,updateId:O});eS.current={args:F,resultContent:I,cancelledReason:N,isError:_,updateId:O};let ek=(0,o.useRef)(J);(0,o.useEffect)(()=>{ek.current=J},[J]);let eL=(0,o.useRef)(W);(0,o.useEffect)(()=>{eL.current=W},[W]);let eU=(0,o.useRef)(q);(0,o.useEffect)(()=>{eU.current=q},[q]);let eH=(0,o.useRef)(B);(0,o.useEffect)(()=>{eH.current=B},[B]);let ez=(0,o.useRef)(G);(0,o.useEffect)(()=>{ez.current=G},[G]);let eD=(0,o.useRef)(V);(0,o.useEffect)(()=>{eD.current=V},[V]);let eF=(0,o.useRef)(Z);(0,o.useEffect)(()=>{eF.current=Z},[Z]);let eI=(0,o.useRef)(Y);(0,o.useEffect)(()=>{eI.current=Y},[Y]),(0,o.useEffect)(()=>{ej.current=ep},[ep]),(0,o.useEffect)(()=>{eM.current=eh},[eh]);let eO=(0,o.useCallback)(()=>{var e;if(eC.current)return eC.current;ew.current+=1;let t=eg.current,r=ev.current,n=ex.current;eg.current=null,ev.current=null,ex.current=!1,ey.current=!1,eR.current=[],null==(e=eb.current)||e.disconnect(),eb.current=null;let o=(async()=>{if(t&&n){let e;try{await Promise.race([t.teardownResource({},{timeout:1e3}),new Promise(t=>{e=setTimeout(t,1e3)})])}catch(e){C.debug("MCP App did not acknowledge resource teardown",e)}finally{e&&clearTimeout(e)}}try{await (null==t?void 0:t.close())}catch(e){}null==r||r.remove()})();return eC.current=o,o.finally(()=>{eC.current===o&&(eC.current=null)}),o},[]),eN=(0,o.useCallback)(()=>{!eE.current&&eU.current&&(eE.current=!0,eO().then(()=>{var e;eA.current&&(null==(e=eU.current)||e.call(eU),eo(!1))}).finally(()=>{eE.current=!1}))},[eO]),e_=(0,o.useCallback)((e,t,r,n,o)=>{eP.current=eP.current.catch(()=>void 0).then(async()=>{eg.current===e&&ex.current&&await U(e,t,r,n,o)}).catch(e=>{C.warn("MCP App tool delivery failed",e)})},[]),eJ=(0,o.useCallback)(async()=>{if(eC.current&&await eC.current,ey.current||!em.current)return;let e=ew.current+1;ew.current=e;let t=()=>ew.current===e&&ey.current;ey.current=!0,ef([]),el(!0),ec(null);try{var n,o,i;let l,[s,c]=await Promise.all([x.S.readResourceFromApp(r,T),D(r,T,L)]);if(!t())return;if((null==s?void 0:s.httpStatus)===403)throw Error((null==s?void 0:s.error)||"MCP Apps access was disabled for this server");if(!s||!1===s.success)throw Error((null==s?void 0:s.error)||"Failed to read the UI resource.");let a=function(e,t){var r,n,o;let i,l=null==e?void 0:e.contents;if(!Array.isArray(l)||0===l.length)throw Error("Resource has no contents");let s=l.find(e=>e.uri===t&&"string"==typeof e.mimeType&&(0,b.q$)(e.mimeType)&&("string"==typeof e.text||"string"==typeof e.blob));if(!s)throw Error("Resource ".concat(t," did not return MCP App HTML"));try{i="string"==typeof s.text?s.text:function(e){let t=Uint8Array.from(atob(e),e=>e.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(t)}(s.blob)}catch(e){throw Error("Resource ".concat(t," contains invalid base64 UTF-8 HTML"))}if(new TextEncoder().encode(i).length>b.Pt)throw Error("Resource exceeds the ".concat(Math.round(b.Pt/1024)," KiB size cap"));let c=null==(r=null!=(n=s._meta)?n:s.meta)?void 0:r.ui,a=w.c0.safeParse(null==c?void 0:c.csp);if((null==c?void 0:c.csp)!==void 0&&!a.success)throw Error("Resource ".concat(t," declares an invalid CSP policy"));let u=w.Ml.safeParse(null==c?void 0:c.permissions);if((null==c?void 0:c.permissions)!==void 0&&!u.success)throw Error("Resource ".concat(t," declares invalid sandbox permissions"));return{html:i,csp:a.success?{connectDomains:k((o=a.data).connectDomains,["https","wss"]),resourceDomains:k(o.resourceDomains,["https"]),frameDomains:k(o.frameDomains,["https"]),baseUriDomains:k(o.baseUriDomains,["https"])}:void 0,permissions:u.success&&u.data.clipboardWrite?{clipboardWrite:{}}:void 0}}(s.data,T),u=await S();if(!t()||!em.current)return;let d=document.createElement("iframe");d.title="MCP App: ".concat(T),d.setAttribute("sandbox","allow-scripts allow-same-origin"),d.referrerPolicy="origin";let f=(0,w.Sy)(a.permissions);f&&d.setAttribute("allow",f),d.style.cssText=eI.current?"width:100%;height:100%;border:none;background:#fff;":"width:100%;min-height:120px;height:200px;border:none;border-radius:4px;background:#fff;",em.current.appendChild(d),ev.current=d;let p=new URL(u);a.csp&&p.searchParams.set("csp",JSON.stringify(a.csp));let h=p.origin,m=new Promise((e,t)=>{let r=setTimeout(()=>{window.removeEventListener("message",n),t(Error("Timed out waiting for the sandbox proxy."))},1e4),n=t=>{var o,i;t.source===d.contentWindow&&t.origin===h&&(null==(o=t.data)?void 0:o.jsonrpc)==="2.0"&&(null==(i=t.data)?void 0:i.method)==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(r),window.removeEventListener("message",n),e())};window.addEventListener("message",n)});if(d.src=p.href,await m,!t()||ev.current!==d)return;let v=ej.current,g="inline";ej.current=g,l=new w.T1(function(e,t,r){return{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(n,o,i)=>{let{method:l,params:s}=n;if("tools/call"===l){var c;C.info("MCP App tools/call: ".concat(e,"/").concat(null==s?void 0:s.name));let n=await x.S.callToolFromApp(e,s.name,null!=(c=s.arguments)?c:{},void 0,null==i?void 0:i.signal,t);if((null==n?void 0:n.httpStatus)===403){let e=(null==n?void 0:n.error)||"MCP Apps access was disabled for this server";throw r(e),Error(e)}if(!n||!1===n.success)throw Error((null==n?void 0:n.error)||"Tool call failed: ".concat(null==s?void 0:s.name));return n.data}if("resources/read"===l){let t=await x.S.readResourceFromApp(e,s.uri);if((null==t?void 0:t.httpStatus)===403){let e=(null==t?void 0:t.error)||"MCP Apps access was disabled for this server";throw r(e),Error(e)}if(!t||!1===t.success)throw Error((null==t?void 0:t.error)||"Resource read failed: ".concat(null==s?void 0:s.uri));return t.data}if("resources/list"===l)return{resources:[]};if("resources/templates/list"===l)return{resourceTemplates:[]};throw Error("MCP App requested unsupported method: ".concat(l))}}}(r,er,t=>{ew.current===e&&eg.current===l&&(ec(t),el(!1),eO())}),E,{openLinks:{},serverTools:{},serverResources:{},logging:{},...ek.current?{message:{text:{}}}:{},...eL.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:a.csp,permissions:a.permissions}},{hostContext:{...c?{toolInfo:c}:{},theme:"dark"===ee.palette.mode?"dark":"light",platform:"web",displayMode:g,availableDisplayModes:eM.current,containerDimensions:z(em.current,eI.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:null!=(i=null==(n=(o=window).matchMedia)?void 0:n.call(o,"(hover: hover)").matches)&&i}}}),eg.current=l;let y=()=>t()&&eg.current===l;if(l.onopenlink=async e=>{let{url:t}=e;if(!y())return{isError:!0};let n=function(e){try{let t=new URL(e);if(!A.has(t.protocol)||t.username||t.password)return null;return t.href}catch(e){return null}}(t);if(!n)return C.warn("MCP App open-link rejected by URL policy",{serverName:r,uri:T}),{isError:!0};let o=window.open(n,"_blank","noopener,noreferrer");return o?(o.opener=null,{}):{isError:!0}},l.ondownloadfile=async e=>{let{contents:t}=e;if(!y())return{isError:!0};try{for(let e of null!=t?t:[]){let t,n=null==e?void 0:e.resource;if(!n)continue;let o=("string"==typeof n.uri?n.uri.split("/").pop():"")||"download",i="string"==typeof n.mimeType?n.mimeType:"application/octet-stream";if("string"==typeof n.blob){let e=Uint8Array.from(atob(n.blob),e=>e.charCodeAt(0));t=new Blob([e],{type:i})}else{var r;t=new Blob([String(null!=(r=n.text)?r:"")],{type:i})}let l=URL.createObjectURL(t),s=document.createElement("a");s.href=l,s.download=o,document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(l),4e3)}return{}}catch(e){return C.warn("MCP App download failed",e),{isError:!0}}},l.onloggingmessage=e=>{y()&&C.debug("MCP App log",null==e?void 0:e.data)},l.onmessage=async e=>{if(!y())return{};if(!ek.current)throw Error("This host cannot deliver ui/message in this surface");let t=function(e){if((null==e?void 0:e.role)!=="user")throw Error('This host accepts ui/message only with role "user"');let t=null==e?void 0:e.content,r=Array.isArray(t)?t:t&&"object"==typeof t?[t]:[];if(0===r.length||r.some(e=>(null==e?void 0:e.type)!=="text"||"string"!=typeof e.text))throw Error("This host accepts text-only ui/message content");let n=r.map(e=>e.text).join("\n").trim();if(!n)throw Error("ui/message text must not be empty");return n}(e);if(!await ek.current(t))throw Error("ui/message was not delivered");return{}},l.onupdatemodelcontext=async e=>{if(!y())return{};let t=function(e){if(!e||"object"!=typeof e||Array.isArray(e))return"ui/update-model-context params must be an object";if(void 0!==e.content){if(!Array.isArray(e.content))return"Model context content must be an array";for(let t of e.content)if(!t||"object"!=typeof t||Array.isArray(t)||!j.has(t.type))return"Model context contains a modality this host did not advertise"}return void 0!==e.structuredContent&&(!e.structuredContent||"object"!=typeof e.structuredContent||Array.isArray(e.structuredContent))?"Model structuredContent must be an object":P(e)>M?"Model context exceeds ".concat(M," bytes"):null}(e);if(t)throw Error(t);let n="".concat(r,"::").concat(T);if(!eL.current)throw Error("This host cannot preserve model context in this surface");if(!await eL.current(n,e))throw Error("MCP App model context was not stored");return{}},l.onsizechange=async e=>{var t,r;let{width:n,height:o}=e;if(!y()||eI.current)return;let i=(null==(t=em.current)?void 0:t.getBoundingClientRect().width)||(null==(r=em.current)?void 0:r.clientWidth)||0,l=function(e,t){let r={};if(Number.isFinite(e.width)&&e.width>0){let n=Number.isFinite(t)&&t>0?t:6e3;r.width=Math.min(e.width,n,6e3)}return Number.isFinite(e.height)&&e.height>0&&(r.height=Math.min(e.height,6e3)),r}({width:n,height:o},i);void 0!==l.height&&(d.style.height="".concat(l.height,"px")),void 0!==l.width&&(d.style.width="".concat(l.width,"px"),d.style.maxWidth="100%")},l.onrequestdisplaymode=async e=>{let{mode:t}=e;if(!y())return{mode:ej.current};let r=ej.current,n=eR.current;if(!H(t,eM.current,n))return{mode:r};if("pip"===t&&!eI.current&&eU.current)return setTimeout(eN,0),{mode:r};let o=r;return(o=eD.current?await eD.current(t,[...n]):t)===r||H(o,eM.current,n)||(o=r),o!==r&&(ej.current=o,eu(o),await l.sendHostContextChange({displayMode:o})),{mode:o}},l.onrequestteardown=()=>{y()&&eO().finally(()=>{eF.current?eF.current():(ej.current="inline",eu("inline"),eo(!1))})},l.oninitialized=()=>{var e,t,r,n,o,i,s,c,a;if(!y())return;let u=null==(e=l.getAppCapabilities())?void 0:e.availableDisplayModes,d=Array.isArray(u)?[...new Set(u.filter(e=>R.includes(e)))]:[];eR.current=d,ef(d),null==(t=eH.current)||t.call(eH,d.includes("pip")),null==(r=ez.current)||r.call(ez,[...d]),ex.current=!0;let f=function(e,t,r,n){return t?H("pip",r,n)?"fullscreen"===e&&H("fullscreen",r,n)?"fullscreen":"pip":null:"fullscreen"===e&&H("fullscreen",r,n)?"fullscreen":"inline"}(v,eI.current,eM.current,d);if(null===f){ec("This app does not declare support for the canvas (pip) display mode."),el(!1),eO();return}ej.current=f,eu(f),f!==g&&l.sendHostContextChange({displayMode:f});let p=em.current;if(p&&"undefined"!=typeof ResizeObserver){let e=()=>{if(!y()||!ex.current)return;let e=p.getBoundingClientRect();e.width<=0||eI.current&&e.height<=0||l.sendHostContextChange({containerDimensions:z(p,eI.current)})};null==(n=eb.current)||n.disconnect(),eb.current=new ResizeObserver(e),eb.current.observe(p),e()}let h=eS.current;eT.current=null!=(a=h.updateId)?a:"".concat(null!=(o=h.args)?o:"","\0").concat(null!=(i=h.resultContent)?i:"","\0").concat(null!=(s=h.cancelledReason)?s:"","\0").concat(null!=(c=h.isError)?c:""),(void 0!==h.args||void 0!==h.resultContent||void 0!==h.cancelledReason||!0===h.isError)&&e_(l,h.args,h.resultContent,h.cancelledReason,h.isError),el(!1)},await l.connect(function(e,t){let r=new w.hJ(e,t),n={start:async()=>{r.onmessage=(e,t)=>{var r;null==(r=n.onmessage)||r.call(n,"ui/message"!==e.method||!e.params||Array.isArray(e.params.content)||!e.params.content||"object"!=typeof e.params.content?e:{...e,params:{...e.params,content:[e.params.content]}},t)},r.onerror=e=>{var t;return null==(t=n.onerror)?void 0:t.call(n,e)},r.onclose=()=>{var e;return null==(e=n.onclose)?void 0:e.call(n)},await r.start()},send:(e,t)=>r.send(e,t),close:()=>r.close(),setProtocolVersion:e=>{var t;return null==(t=r.setProtocolVersion)?void 0:t.call(r,e)}};return n}(d.contentWindow,d.contentWindow)),!y())return;await l.sendSandboxResourceReady({html:a.html,csp:a.csp,permissions:a.permissions})}catch(e){if(!t())return;C.warn("Failed to mount MCP App ".concat(T," from ").concat(r),e),ec(e instanceof Error?e.message:"Failed to load the app."),el(!1),eO()}},[eN,er,e_,r,eO,ee.palette.mode,L,T]),eW=(0,o.useCallback)(()=>{let e=!en;if(!e&&"fullscreen"===ej.current){var t;ej.current="inline",eu("inline"),null==(t=eg.current)||t.sendHostContextChange({displayMode:"inline"})}eo(e),e&&setTimeout(()=>{eJ()},0)},[en,eJ]);if((0,o.useEffect)(()=>{Y&&!ey.current&&eJ()},[Y,eJ]),(0,o.useEffect)(()=>{let e=null!=O?O:"".concat(null!=F?F:"","\0").concat(null!=I?I:"","\0").concat(null!=N?N:"","\0").concat(null!=_?_:"");ex.current&&eg.current&&e!==eT.current&&(eT.current=e,eO().then(()=>{eA.current&&(eI.current||en)&&eJ()}))},[en,eJ,eO,F,N,_,I,O]),(0,o.useEffect)(()=>{$&&ex.current&&eg.current&&ej.current!==$&&H($,eM.current,eR.current)&&(ej.current=$,eu($),eg.current.sendHostContextChange({displayMode:$}))},[$]),(0,o.useEffect)(()=>{var e;ex.current&&eg.current&&(null==(e=eg.current)||e.sendHostContextChange({theme:"dark"===ee.palette.mode?"dark":"light"}))},[ee.palette.mode]),(0,o.useEffect)(()=>{let e=null!=X?X:"".concat(r,"::").concat(T);return null==K||K(e,eO),()=>null==K?void 0:K(e,null)},[K,r,eO,X,T]),(0,o.useEffect)(()=>{let e=e=>{var t,n;let o=e.detail;(null==o?void 0:o.serverName)===r&&((null==(t=o.config)?void 0:t.enableMcpApps)===!1||(null==(n=o.config)?void 0:n.disabled)===!0)&&(ec("MCP Apps access was disabled for this server."),el(!1),eO().finally(()=>{var e;eI.current&&(null==(e=eF.current)||e.call(eF))}))};return window.addEventListener("flujo:mcp-server-config-changed",e),()=>{window.removeEventListener("flujo:mcp-server-config-changed",e)}},[r,eO]),(0,o.useEffect)(()=>(eA.current=!0,()=>{eA.current=!1,eO()}),[eO]),Y)return(0,n.jsxs)(l.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:Q?"visible":"hidden",pointerEvents:Q?"auto":"none",flexDirection:"column"},children:[ei&&(0,n.jsxs)(l.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,n.jsx)(s.default,{size:16,thickness:6}),(0,n.jsx)(c.A,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),es&&(0,n.jsx)(a.A,{severity:"error",sx:{m:1},children:es}),(0,n.jsx)(l.default,{ref:em,sx:{flex:1,minHeight:0,width:"100%",display:es?"none":"block"}})]});let eq=ed.includes("inline")&&ed.includes("fullscreen")&&eh.includes("fullscreen"),eB=ed.includes("inline")&&ed.includes("pip")&&eh.includes("pip")&&!!q;return(0,n.jsxs)(l.default,{sx:{mt:1,border:"1px solid",borderColor:"divider",borderRadius:1,overflow:"hidden",..."fullscreen"===ea?{position:"fixed",inset:16,zIndex:1300,bgcolor:"background.paper",boxShadow:6}:{}},children:[(0,n.jsxs)(l.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover"},children:[(0,n.jsx)(p.A,{fontSize:"small",color:"primary"}),(0,n.jsxs)(c.A,{variant:"body2",sx:{fontWeight:500},children:["Interactive app from ",r]}),(0,n.jsx)(u.A,{title:"Runs in a separate-origin sandbox (no access to FLUJO's origin, cookies, storage, or DOM). Its tool calls are brokered through this server only.",children:(0,n.jsx)(h.A,{fontSize:"small",color:"action"})}),(0,n.jsx)(l.default,{sx:{flex:1}}),en&&eB&&(0,n.jsx)(d.A,{size:"small",onClick:eN,children:"Canvas"}),en&&(0,n.jsx)(u.A,{title:eq?"fullscreen"===ea?"Exit fullscreen":"Fullscreen":"This app did not declare inline and fullscreen support",children:(0,n.jsx)("span",{children:(0,n.jsx)(d.A,{size:"small",disabled:!eq,onClick:()=>{var e;let t="fullscreen"===ea?"inline":"fullscreen";H(t,eh,ed)&&(ej.current=t,eu(t),null==(e=eg.current)||e.sendHostContextChange({displayMode:t}))},sx:{minWidth:0},children:"fullscreen"===ea?(0,n.jsx)(y.A,{fontSize:"small"}):(0,n.jsx)(g.A,{fontSize:"small"})})})}),(0,n.jsx)(d.A,{size:"small",onClick:eW,startIcon:en?(0,n.jsx)(v.A,{}):(0,n.jsx)(m.A,{}),children:en?"Hide":"Open app"})]}),(0,n.jsx)(f.A,{in:en,onExited:()=>{eO()},children:(0,n.jsxs)(l.default,{sx:{p:1,height:"fullscreen"===ea?"calc(100vh - 100px)":"auto"},children:[ei&&(0,n.jsxs)(l.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,n.jsx)(s.default,{size:16,thickness:6}),(0,n.jsx)(c.A,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),es&&(0,n.jsx)(a.A,{severity:"error",sx:{my:1},children:es}),(0,n.jsx)(l.default,{ref:em,sx:{width:"100%",height:"fullscreen"===ea?"100%":"auto",display:es?"none":"block"}})]})})]})}},41080:(e,t,r)=>{r.d(t,{DG:()=>i,Gt:()=>s,Pt:()=>o,q$:()=>l}),r(81029).hp;let n="ui://",o=2097152;function i(e){return"string"==typeof e&&e.length>n.length&&e.slice(0,n.length).toLowerCase()===n&&!/\s/.test(e)}function l(e){if("string"!=typeof e)return!1;let[t,...r]=e.toLowerCase().split(";");if("text/html"!==t.trim())return!1;let n=!1;for(let e of r){let t=e.indexOf("=");if(t<=0)return!1;let r=e.slice(0,t).trim(),o=e.slice(t+1).trim();if(!r||!o)return!1;if("profile"===r){if(n||"mcp-app"!==o)return!1;n=!0}}return n}function s(e){if(!e||"object"!=typeof e)return;let t=e["ui/resourceUri"];if(i(t))return t;for(let t of[e.ui,e["io.modelcontextprotocol/ui"]])if(t&&"object"==typeof t){let e=t.resourceUri;if(i(e))return e}}}}]);
|