flujo-ai 3.40.0 → 3.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +400 -384
- package/.next/app-path-routes-manifest.json +53 -53
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +33 -33
- package/.next/react-loadable-manifest.json +9 -9
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers/page.js +1 -1
- package/.next/server/app/automation/triggers/page.js.nft.json +1 -1
- package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers.html +1 -1
- package/.next/server/app/automation/triggers.rsc +4 -4
- package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/waves.html +1 -1
- package/.next/server/app/automation/waves.rsc +4 -4
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +4 -4
- package/.next/server/app/docs/page.js +3 -3
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +4 -4
- package/.next/server/app/executions/page.js +1 -1
- package/.next/server/app/executions/page.js.nft.json +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +4 -4
- package/.next/server/app/flows/page.js +5 -3
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +4 -4
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/mcp/page.js +73 -44
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +4 -4
- package/.next/server/app/models/page.js +7 -7
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +1 -1
- package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages.html +1 -1
- package/.next/server/app/packages.rsc +4 -4
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +2 -2
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +4 -4
- package/.next/server/app/statistics/page.js +2 -2
- package/.next/server/app/statistics/page_client-reference-manifest.js +1 -1
- package/.next/server/app/statistics.html +1 -1
- package/.next/server/app/statistics.rsc +4 -4
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +4 -4
- package/.next/server/app-paths-manifest.json +53 -53
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/1403.js +2 -2
- package/.next/server/chunks/1539.js +1 -1
- package/.next/server/chunks/2069.js +1 -1
- package/.next/server/chunks/2372.js +1 -1
- package/.next/server/chunks/2828.js +2 -2
- package/.next/server/chunks/3422.js +1 -0
- package/.next/server/chunks/3945.js +3 -3
- package/.next/server/chunks/519.js +2 -2
- package/.next/server/chunks/5444.js +2 -2
- package/.next/server/chunks/5750.js +1 -1
- package/.next/server/chunks/5918.js +10 -10
- package/.next/server/chunks/6226.js +2 -2
- package/.next/server/chunks/9088.js +2 -2
- package/.next/server/chunks/9490.js +5 -0
- package/.next/server/chunks/9543.js +3 -3
- package/.next/server/chunks/9624.js +8 -8
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1161-19176c3e7c655121.js → 1161-563a8028f59f00de.js} +1 -1
- package/.next/static/chunks/1521-9ad145dcb8e3abfc.js +1 -0
- package/.next/static/chunks/1576.06797b29a19fa26c.js +1 -0
- package/.next/static/chunks/{4386-e9621d3c94969a68.js → 2005-f9d38c39f10c321f.js} +1 -1
- package/.next/static/chunks/2493-da85c47ef972c066.js +1 -0
- package/.next/static/chunks/361.c88d43436e974006.js +1 -0
- package/.next/static/chunks/3731-c18f48522b159d7f.js +1 -0
- package/.next/static/chunks/3781.5086bce03aa281f7.js +1 -0
- package/.next/static/chunks/3969-15a32253b112652c.js +1 -0
- package/.next/static/chunks/4167.2ce97ca450815df1.js +1 -0
- package/.next/static/chunks/4814-52b7254ab573a455.js +1 -0
- package/.next/static/chunks/4965.d401547984d71b7a.js +1 -0
- package/.next/static/chunks/5148-9174ba300221fd1b.js +1 -0
- package/.next/static/chunks/5417-fb7d3760cc288ab1.js +1 -0
- package/.next/static/chunks/5967-34735763d1b03ccc.js +1 -0
- package/.next/static/chunks/7260-743e4b0cc4211dcb.js +1 -0
- package/.next/static/chunks/7711-7323dabe7dc02311.js +1 -0
- package/.next/static/chunks/8124-f99060fe1dfc119e.js +1 -0
- package/.next/static/chunks/8135-7fe07a34a8c49967.js +1 -0
- package/.next/static/chunks/8529.6187e01de8e9a692.js +1 -0
- package/.next/static/chunks/9136-e9ee57cc581ddd50.js +1 -0
- package/.next/static/chunks/9140.9180b569c4b26168.js +1 -0
- package/.next/static/chunks/9195-6a18a5867bb76c64.js +1 -0
- package/.next/static/chunks/app/automation/triggers/{page-594a6294c58344bf.js → page-34b9a8a2e6f28c2f.js} +1 -1
- package/.next/static/chunks/app/automation/waves/{page-ce2fef4996cad8e6.js → page-fd4929ea308183b2.js} +1 -1
- package/.next/static/chunks/app/chat/page-fb8a33db7628ecd0.js +1 -0
- package/.next/static/chunks/app/docs/page-3e21583b1cd5d7ca.js +1 -0
- package/.next/static/chunks/app/executions/{page-fcc848de86714386.js → page-56ecca56c17c05d7.js} +1 -1
- package/.next/static/chunks/app/flows/page-8c1a656197b15894.js +1 -0
- package/.next/static/chunks/app/layout-6e2756704ddc9f39.js +1 -0
- package/.next/static/chunks/app/mcp/page-4c4390354fdd94c8.js +1 -0
- package/.next/static/chunks/app/models/error-ea477f0ad52f4dcb.js +1 -0
- package/.next/static/chunks/app/models/page-e237ac64a0f62c3d.js +1 -0
- package/.next/static/chunks/app/packages/page-8680e4bea6b7ea45.js +1 -0
- package/.next/static/chunks/app/page-6dca06b6b7667181.js +1 -0
- package/.next/static/chunks/app/settings/page-a5f7fedcbf9e3a7f.js +1 -0
- package/.next/static/chunks/app/statistics/page-f9f9627d1c1ff963.js +1 -0
- package/.next/static/chunks/app/waves/{page-5b53af3eb9409414.js → page-7529febc48eb473d.js} +1 -1
- package/.next/static/chunks/{webpack-9fbd3587b9ef4dca.js → webpack-f3df493faa0bd612.js} +1 -1
- package/.next/static/css/{400b1b927c3ffaf6.css → 9f9b7f1374ac2d01.css} +1 -1
- package/.next/trace +11 -11
- package/README.md +1 -1
- package/mcp-servers/bash/package.json +1 -1
- package/mcp-servers/browser/package.json +1 -1
- package/mcp-servers/filesystem/package.json +1 -1
- package/mcp-servers/flujo/package.json +1 -1
- package/package.json +5 -5
- package/.next/server/chunks/7508.js +0 -5
- package/.next/server/chunks/8598.js +0 -1
- package/.next/static/chunks/1521-1c98c9a56726e053.js +0 -1
- package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +0 -1
- package/.next/static/chunks/2005.300528b5119c2d38.js +0 -1
- package/.next/static/chunks/2499-92cd97ce4993999f.js +0 -1
- package/.next/static/chunks/361.51d642c530c84295.js +0 -1
- package/.next/static/chunks/3731-64070760ae44448f.js +0 -1
- package/.next/static/chunks/4814-31eb5f3b10c651c1.js +0 -1
- package/.next/static/chunks/4965.39e24b54c3c6ca58.js +0 -1
- package/.next/static/chunks/5967-59fde8c214c9ca9f.js +0 -1
- package/.next/static/chunks/6417.70056fe81ca21682.js +0 -1
- package/.next/static/chunks/7711-4b017720ec49c96d.js +0 -1
- package/.next/static/chunks/8124-94140ee1dd8ed87c.js +0 -1
- package/.next/static/chunks/8135-5b975b9014f8920b.js +0 -1
- package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +0 -1
- package/.next/static/chunks/9001-4c27a608feddb878.js +0 -1
- package/.next/static/chunks/9136-9c415453ec02519c.js +0 -1
- package/.next/static/chunks/9140.6502327a2c098d33.js +0 -1
- package/.next/static/chunks/9195-3c9c4300e7505d9e.js +0 -1
- package/.next/static/chunks/9524-b9d2c7e4426edd07.js +0 -1
- package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +0 -1
- package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +0 -1
- package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +0 -1
- package/.next/static/chunks/app/layout-a6ca531683a518a7.js +0 -1
- package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +0 -1
- package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +0 -1
- package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +0 -1
- package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +0 -1
- package/.next/static/chunks/app/page-04189aa1b1318c2d.js +0 -1
- package/.next/static/chunks/app/settings/page-906c229c87011ead.js +0 -1
- package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +0 -1
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_buildManifest.js +0 -0
- /package/.next/static/{b1aMk0634gkkiunttd1SQ → utOrEUSzguWncIosxgCeR}/_ssgManifest.js +0 -0
|
@@ -1,123 +1,123 @@
|
|
|
1
1
|
{
|
|
2
2
|
"/api/approvals/[id]/route": "app/api/approvals/[id]/route.js",
|
|
3
|
-
"/api/approvals/route": "app/api/approvals/route.js",
|
|
4
|
-
"/api/browse/route": "app/api/browse/route.js",
|
|
5
|
-
"/api/backup/route": "app/api/backup/route.js",
|
|
6
3
|
"/api/bugs/enhance/route": "app/api/bugs/enhance/route.js",
|
|
4
|
+
"/api/backup/route": "app/api/backup/route.js",
|
|
5
|
+
"/api/browse/route": "app/api/browse/route.js",
|
|
7
6
|
"/api/cwd/route": "app/api/cwd/route.js",
|
|
7
|
+
"/api/approvals/route": "app/api/approvals/route.js",
|
|
8
8
|
"/api/encryption/secure/route": "app/api/encryption/secure/route.js",
|
|
9
|
+
"/api/flow/[id]/route": "app/api/flow/[id]/route.js",
|
|
9
10
|
"/api/flow/[id]/convert-process-to-subflow/route": "app/api/flow/[id]/convert-process-to-subflow/route.js",
|
|
10
11
|
"/api/env/route": "app/api/env/route.js",
|
|
11
12
|
"/api/flow/[id]/versions/[versionId]/route": "app/api/flow/[id]/versions/[versionId]/route.js",
|
|
12
|
-
"/
|
|
13
|
-
"/api/flow/[id]/versions/route": "app/api/flow/[id]/versions/route.js",
|
|
13
|
+
"/_not-found/page": "app/_not-found/page.js",
|
|
14
14
|
"/api/flow/assist/route": "app/api/flow/assist/route.js",
|
|
15
|
-
"/api/flow/generate/route": "app/api/flow/generate/route.js",
|
|
16
|
-
"/api/flow/compile/route": "app/api/flow/compile/route.js",
|
|
17
15
|
"/api/flow/generator/route": "app/api/flow/generator/route.js",
|
|
16
|
+
"/api/flow/[id]/versions/route": "app/api/flow/[id]/versions/route.js",
|
|
18
17
|
"/api/flow/improve/route": "app/api/flow/improve/route.js",
|
|
19
18
|
"/api/flow/prompt-renderer/route": "app/api/flow/prompt-renderer/route.js",
|
|
20
|
-
"/_not-found/page": "app/_not-found/page.js",
|
|
21
|
-
"/api/flow/quick-chat/route": "app/api/flow/quick-chat/route.js",
|
|
22
19
|
"/api/flow/repair/route": "app/api/flow/repair/route.js",
|
|
23
|
-
"/api/flow/route": "app/api/flow/route.js",
|
|
24
20
|
"/api/init/route": "app/api/init/route.js",
|
|
25
|
-
"/api/
|
|
26
|
-
"/api/
|
|
27
|
-
"/api/
|
|
21
|
+
"/api/flow/quick-chat/route": "app/api/flow/quick-chat/route.js",
|
|
22
|
+
"/api/flow/route": "app/api/flow/route.js",
|
|
23
|
+
"/api/flow/generate/route": "app/api/flow/generate/route.js",
|
|
24
|
+
"/api/flow/compile/route": "app/api/flow/compile/route.js",
|
|
25
|
+
"/api/mcp/flujo/authoring/route": "app/api/mcp/flujo/authoring/route.js",
|
|
28
26
|
"/api/mcp/app-sandbox/route": "app/api/mcp/app-sandbox/route.js",
|
|
27
|
+
"/api/mcp-registry/route": "app/api/mcp-registry/route.js",
|
|
29
28
|
"/api/mcp/cancel/route": "app/api/mcp/cancel/route.js",
|
|
30
|
-
"/api/
|
|
29
|
+
"/api/git/route": "app/api/git/route.js",
|
|
31
30
|
"/api/mcp/flujo/automation/route": "app/api/mcp/flujo/automation/route.js",
|
|
32
31
|
"/api/mcp/flujo/flows/route": "app/api/mcp/flujo/flows/route.js",
|
|
33
|
-
"/api/mcp/flujo/resources/read/route": "app/api/mcp/flujo/resources/read/route.js",
|
|
34
|
-
"/api/mcp/flujo/resources/route": "app/api/mcp/flujo/resources/route.js",
|
|
35
32
|
"/api/mcp/flujo/servers/route": "app/api/mcp/flujo/servers/route.js",
|
|
36
|
-
"/api/mcp/
|
|
33
|
+
"/api/mcp-registry/spotlight/route": "app/api/mcp-registry/spotlight/route.js",
|
|
37
34
|
"/api/mcp/flujo/state/route": "app/api/mcp/flujo/state/route.js",
|
|
38
|
-
"/api/mcp/
|
|
39
|
-
"/api/mcp/
|
|
40
|
-
"/api/mcp/
|
|
35
|
+
"/api/mcp/flujo/tools/route": "app/api/mcp/flujo/tools/route.js",
|
|
36
|
+
"/api/mcp/flujo/resources/read/route": "app/api/mcp/flujo/resources/read/route.js",
|
|
37
|
+
"/api/mcp/flujo/resources/route": "app/api/mcp/flujo/resources/route.js",
|
|
38
|
+
"/api/mcp/servers/[name]/prompts/route": "app/api/mcp/servers/[name]/prompts/route.js",
|
|
39
|
+
"/api/mcp/servers/[name]/prompts/get/route": "app/api/mcp/servers/[name]/prompts/get/route.js",
|
|
40
|
+
"/api/mcp/servers/[name]/tools/[toolName]/route": "app/api/mcp/servers/[name]/tools/[toolName]/route.js",
|
|
41
41
|
"/api/mcp/servers/[name]/status/route": "app/api/mcp/servers/[name]/status/route.js",
|
|
42
42
|
"/api/mcp/servers/[name]/tools/route": "app/api/mcp/servers/[name]/tools/route.js",
|
|
43
|
-
"/api/mcp/servers/[name]/
|
|
43
|
+
"/api/mcp/servers/[name]/route": "app/api/mcp/servers/[name]/route.js",
|
|
44
|
+
"/api/mcp/servers/[name]/resources/read/route": "app/api/mcp/servers/[name]/resources/read/route.js",
|
|
44
45
|
"/api/mcp/test-connection/route": "app/api/mcp/test-connection/route.js",
|
|
45
|
-
"/api/mcp/servers/route": "app/api/mcp/servers/route.js",
|
|
46
|
-
"/api/model/provider/route": "app/api/model/provider/route.js",
|
|
47
|
-
"/api/model/test/route": "app/api/model/test/route.js",
|
|
46
|
+
"/api/mcp/servers/[name]/resources/route": "app/api/mcp/servers/[name]/resources/route.js",
|
|
48
47
|
"/api/model/[id]/route": "app/api/model/[id]/route.js",
|
|
49
48
|
"/api/model/route": "app/api/model/route.js",
|
|
50
|
-
"/api/
|
|
51
|
-
"/api/
|
|
52
|
-
"/api/mcp/servers/[name]/prompts/route": "app/api/mcp/servers/[name]/prompts/route.js",
|
|
49
|
+
"/api/model/test/route": "app/api/model/test/route.js",
|
|
50
|
+
"/api/model/provider/route": "app/api/model/provider/route.js",
|
|
53
51
|
"/api/oauth/reset/route": "app/api/oauth/reset/route.js",
|
|
54
|
-
"/api/
|
|
52
|
+
"/api/oauth/initiate/route": "app/api/oauth/initiate/route.js",
|
|
55
53
|
"/api/packages/install/route": "app/api/packages/install/route.js",
|
|
56
54
|
"/api/packages/install/status/route": "app/api/packages/install/status/route.js",
|
|
57
|
-
"/api/packages/
|
|
58
|
-
"/api/
|
|
55
|
+
"/api/packages/derive-secrets/route": "app/api/packages/derive-secrets/route.js",
|
|
56
|
+
"/api/oauth/callback/route": "app/api/oauth/callback/route.js",
|
|
59
57
|
"/api/packages/resolve/route": "app/api/packages/resolve/route.js",
|
|
58
|
+
"/api/packages/scan-targets/route": "app/api/packages/scan-targets/route.js",
|
|
60
59
|
"/api/packages/search/route": "app/api/packages/search/route.js",
|
|
61
|
-
"/api/mcp/servers/[name]/prompts/get/route": "app/api/mcp/servers/[name]/prompts/get/route.js",
|
|
62
60
|
"/api/packages/uninstall/route": "app/api/packages/uninstall/route.js",
|
|
63
61
|
"/api/planned-executions/[id]/route": "app/api/planned-executions/[id]/route.js",
|
|
64
62
|
"/api/planned-executions/[id]/run/route": "app/api/planned-executions/[id]/run/route.js",
|
|
65
|
-
"/api/planned-executions/[id]/runs/route": "app/api/planned-executions/[id]/runs/route.js",
|
|
66
63
|
"/api/planned-executions/preview-schedule/route": "app/api/planned-executions/preview-schedule/route.js",
|
|
64
|
+
"/api/planned-executions/route": "app/api/planned-executions/route.js",
|
|
67
65
|
"/api/packages/build/route": "app/api/packages/build/route.js",
|
|
68
66
|
"/api/planned-executions/reconcile/route": "app/api/planned-executions/reconcile/route.js",
|
|
69
|
-
"/api/planned-executions/route": "app/api/planned-executions/route.js",
|
|
67
|
+
"/api/planned-executions/[id]/runs/route": "app/api/planned-executions/[id]/runs/route.js",
|
|
70
68
|
"/api/registry/auth/resend/route": "app/api/registry/auth/resend/route.js",
|
|
71
|
-
"/api/
|
|
69
|
+
"/api/mcp/servers/route": "app/api/mcp/servers/route.js",
|
|
72
70
|
"/api/registry/auth/route": "app/api/registry/auth/route.js",
|
|
73
|
-
"/api/registry/feedback/route": "app/api/registry/feedback/route.js",
|
|
74
|
-
"/api/registry/oauth/callback/route": "app/api/registry/oauth/callback/route.js",
|
|
75
71
|
"/api/registry/oauth/initiate/route": "app/api/registry/oauth/initiate/route.js",
|
|
76
|
-
"/api/
|
|
77
|
-
"/api/registry/
|
|
72
|
+
"/api/packages/installed/route": "app/api/packages/installed/route.js",
|
|
73
|
+
"/api/registry/auth/reset/route": "app/api/registry/auth/reset/route.js",
|
|
78
74
|
"/api/registry/settings/route": "app/api/registry/settings/route.js",
|
|
79
|
-
"/api/
|
|
75
|
+
"/api/registry/publish/route": "app/api/registry/publish/route.js",
|
|
80
76
|
"/api/runs/active/route": "app/api/runs/active/route.js",
|
|
81
|
-
"/api/
|
|
77
|
+
"/api/registry/oauth/callback/route": "app/api/registry/oauth/callback/route.js",
|
|
78
|
+
"/api/restore/route": "app/api/restore/route.js",
|
|
79
|
+
"/api/registry/packages/route": "app/api/registry/packages/route.js",
|
|
82
80
|
"/api/waves/route": "app/api/waves/route.js",
|
|
81
|
+
"/api/storage/route": "app/api/storage/route.js",
|
|
83
82
|
"/api/webhooks/[id]/route": "app/api/webhooks/[id]/route.js",
|
|
84
|
-
"/v1/chat/completions/route": "app/v1/chat/completions/route.js",
|
|
85
83
|
"/v1/chat/conversations/[conversationId]/breakpoints/route": "app/v1/chat/conversations/[conversationId]/breakpoints/route.js",
|
|
86
|
-
"/v1/chat/conversations/[conversationId]/debug/continue/route": "app/v1/chat/conversations/[conversationId]/debug/continue/route.js",
|
|
87
84
|
"/v1/chat/conversations/[conversationId]/cancel/route": "app/v1/chat/conversations/[conversationId]/cancel/route.js",
|
|
88
|
-
"/v1/chat/conversations/[conversationId]/
|
|
85
|
+
"/v1/chat/conversations/[conversationId]/debug/continue/route": "app/v1/chat/conversations/[conversationId]/debug/continue/route.js",
|
|
86
|
+
"/v1/chat/completions/route": "app/v1/chat/completions/route.js",
|
|
89
87
|
"/v1/chat/conversations/[conversationId]/debug/step/route": "app/v1/chat/conversations/[conversationId]/debug/step/route.js",
|
|
88
|
+
"/v1/chat/conversations/[conversationId]/edit-state/route": "app/v1/chat/conversations/[conversationId]/edit-state/route.js",
|
|
90
89
|
"/v1/chat/conversations/[conversationId]/inject/route": "app/v1/chat/conversations/[conversationId]/inject/route.js",
|
|
91
|
-
"/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route": "app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js",
|
|
92
90
|
"/v1/chat/conversations/[conversationId]/resources/route": "app/v1/chat/conversations/[conversationId]/resources/route.js",
|
|
93
|
-
"/v1/chat/conversations/[conversationId]/
|
|
94
|
-
"/v1/chat/conversations/[conversationId]/revert/route": "app/v1/chat/conversations/[conversationId]/revert/route.js",
|
|
91
|
+
"/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route": "app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js",
|
|
95
92
|
"/v1/chat/conversations/route": "app/v1/chat/conversations/route.js",
|
|
93
|
+
"/v1/chat/conversations/[conversationId]/respond/route": "app/v1/chat/conversations/[conversationId]/respond/route.js",
|
|
96
94
|
"/v1/chat/conversations/[conversationId]/route": "app/v1/chat/conversations/[conversationId]/route.js",
|
|
97
95
|
"/v1/models/route": "app/v1/models/route.js",
|
|
96
|
+
"/api/registry/feedback/route": "app/api/registry/feedback/route.js",
|
|
97
|
+
"/v1/chat/conversations/[conversationId]/revert/route": "app/v1/chat/conversations/[conversationId]/revert/route.js",
|
|
98
98
|
"/api/local-models/capability/route": "app/api/local-models/capability/route.js",
|
|
99
99
|
"/api/local-models/pull/route": "app/api/local-models/pull/route.js",
|
|
100
100
|
"/api/local-models/suggest/route": "app/api/local-models/suggest/route.js",
|
|
101
101
|
"/api/mcp/oauth-capability/route": "app/api/mcp/oauth-capability/route.js",
|
|
102
102
|
"/api/mcp/test-connection/stream/route": "app/api/mcp/test-connection/stream/route.js",
|
|
103
|
-
"/api/setup/ai-cli/route": "app/api/setup/ai-cli/route.js",
|
|
104
|
-
"/api/statistics/route": "app/api/statistics/route.js",
|
|
105
103
|
"/api/telemetry/daily-active/route": "app/api/telemetry/daily-active/route.js",
|
|
104
|
+
"/api/statistics/route": "app/api/statistics/route.js",
|
|
105
|
+
"/api/setup/ai-cli/route": "app/api/setup/ai-cli/route.js",
|
|
106
106
|
"/api/update/route": "app/api/update/route.js",
|
|
107
107
|
"/mcp-flows/route": "app/mcp-flows/route.js",
|
|
108
108
|
"/mcp-proxy/[server]/route": "app/mcp-proxy/[server]/route.js",
|
|
109
109
|
"/v1/chat/conversations/[conversationId]/events/route": "app/v1/chat/conversations/[conversationId]/events/route.js",
|
|
110
110
|
"/v1/chat/events/route": "app/v1/chat/events/route.js",
|
|
111
|
+
"/chat/page": "app/chat/page.js",
|
|
111
112
|
"/automation/waves/page": "app/automation/waves/page.js",
|
|
112
|
-
"/
|
|
113
|
+
"/docs/page": "app/docs/page.js",
|
|
113
114
|
"/executions/page": "app/executions/page.js",
|
|
114
|
-
"/
|
|
115
|
-
"/mcp/page": "app/mcp/page.js",
|
|
115
|
+
"/automation/triggers/page": "app/automation/triggers/page.js",
|
|
116
116
|
"/flows/page": "app/flows/page.js",
|
|
117
|
+
"/mcp/page": "app/mcp/page.js",
|
|
117
118
|
"/packages/page": "app/packages/page.js",
|
|
118
|
-
"/docs/page": "app/docs/page.js",
|
|
119
|
-
"/page": "app/page.js",
|
|
120
119
|
"/settings/page": "app/settings/page.js",
|
|
120
|
+
"/page": "app/page.js",
|
|
121
121
|
"/statistics/page": "app/statistics/page.js",
|
|
122
122
|
"/waves/page": "app/waves/page.js",
|
|
123
123
|
"/models/page": "app/models/page.js"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1227,exports.ids=[1227],exports.modules={34641:(a,b,c)=>{c.d(b,{uJ:()=>B,Ay:()=>L,Yw:()=>C});var d=c(21124),e=c(38301),f=c(60839),g=c(81637),h=c(8521),i=c(79515),j=c(88745),k=c(43312),l=c(68730),m=c(99561),n=c(5748),o=c(1994),p=c(17332),q=c(63908),r=c(36636),s=c(93516),t=c(92543),u=c(28055),v=c(59060);let w=(0,c(42819).h)("frontend/components/Chat/McpAppFrame"),x={name:"FLUJO",version:"3.40.0"},y=new Set(["https:","http:"]),z=["inline","fullscreen","pip"],A=new Set(["text"]),B=262144;function C(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let D=null;async function E(){return D||(D=fetch("/api/mcp/app-sandbox").then(async a=>{if(!a.ok)throw Error(`Sandbox endpoint discovery failed (${a.status})`);return await a.json()}).catch(a=>{throw D=null,a})),function(a,b){let c;if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if(void 0!==a.url){if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery returned an invalid public URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL")}else{if("http:"!==b.protocol)throw Error("MCP Apps on HTTPS require FLUJO_MCP_APP_SANDBOX_PUBLIC_URL to be configured");if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("Sandbox endpoint discovery returned an invalid port");(c=new URL("/sandbox.html",b.origin)).port=String(a.port)}if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(await D,window.location)}function F(a,b){let c=[],d=new Set;for(let e of a??[]){if(0===e.length||e.length>2048||/[^\x21-\x7e]/.test(e))continue;let a=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(e);if(!a||!b.includes(a[1].toLowerCase()))continue;let f=a[3].split(".");if(a[3].length>253||f.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))continue;let g=a[4]?Number(a[4]):void 0;if(void 0!==g&&(!Number.isInteger(g)||g<1||g>65535))continue;let h=e.toLowerCase();if(!d.has(h)&&(d.add(h),c.push(e),c.length>=64))break}return c}function G(a){if(a)try{return JSON.parse(a)}catch{return}}async function H(a,b,c,d,e){if(await a.sendToolInput({arguments:function(a){let b=G(a);return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}(b)}),void 0!==d)return void await a.sendToolCancelled({reason:d});let f=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=G(a);return c&&"object"==typeof c&&Array.isArray(c.content)?{...c,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);f&&await a.sendToolResult(f)}function I(a,b,c){return b.includes(a)&&c.includes(a)}function J(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function K(a,b,c){try{let d=await u.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,v.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,v.Gt)(f._meta)===b)return{tool:f}}catch(a){w.debug("Could not resolve the full MCP App tool definition",a)}}let L=({conversationId:a,serverName:b,uri:c,toolName:D,toolArgs:G,toolResultContent:L,toolUpdateId:M,toolCancelledReason:N,toolIsError:O,onAppMessage:P,onUpdateModelContext:Q,onRequestDock:R,onDockable:S,onAvailableDisplayModes:T,hostDisplayMode:U,onRequestDisplayMode:V,onRequestClose:W,onRegisterTeardown:X,teardownRegistrationKey:Y,docked:Z=!1,visible:$=!0})=>{let _=(0,f.A)(),aa=(0,e.useId)(),ab=(0,e.useMemo)(()=>a?`conversation:${a}`:`app:${b}:${c}:${aa}`,[a,aa,b,c]),[ac,ad]=(0,e.useState)(!1),[ae,af]=(0,e.useState)(!1),[ag,ah]=(0,e.useState)(null),[ai,aj]=(0,e.useState)(Z?"pip":"inline"),[ak,al]=(0,e.useState)([]),am=U??ai,an=(0,e.useMemo)(()=>Z?["pip","fullscreen"]:["inline","fullscreen",...R?["pip"]:[]],[Z,R]),ao=(0,e.useRef)(null),ap=(0,e.useRef)(null),aq=(0,e.useRef)(null),ar=(0,e.useRef)(!1),as=(0,e.useRef)(0),at=(0,e.useRef)(!1),au=(0,e.useRef)(null),av=(0,e.useRef)(null),aw=(0,e.useRef)(!1),ax=(0,e.useRef)(!0),ay=(0,e.useRef)([]),az=(0,e.useRef)(am),aA=(0,e.useRef)(an),aB=(0,e.useRef)(Promise.resolve()),aC=(0,e.useRef)(void 0),aD=(0,e.useRef)({args:G,resultContent:L,cancelledReason:N,isError:O,updateId:M});aD.current={args:G,resultContent:L,cancelledReason:N,isError:O,updateId:M};let aE=(0,e.useRef)(P);(0,e.useEffect)(()=>{aE.current=P},[P]);let aF=(0,e.useRef)(Q);(0,e.useEffect)(()=>{aF.current=Q},[Q]);let aG=(0,e.useRef)(R);(0,e.useEffect)(()=>{aG.current=R},[R]);let aH=(0,e.useRef)(S);(0,e.useEffect)(()=>{aH.current=S},[S]);let aI=(0,e.useRef)(T);(0,e.useEffect)(()=>{aI.current=T},[T]);let aJ=(0,e.useRef)(V);(0,e.useEffect)(()=>{aJ.current=V},[V]);let aK=(0,e.useRef)(W);(0,e.useEffect)(()=>{aK.current=W},[W]);let aL=(0,e.useRef)(Z);(0,e.useEffect)(()=>{aL.current=Z},[Z]),(0,e.useEffect)(()=>{az.current=am},[am]),(0,e.useEffect)(()=>{aA.current=an},[an]);let aM=(0,e.useCallback)(()=>{if(av.current)return av.current;as.current+=1;let a=aq.current,b=ap.current,c=at.current;aq.current=null,ap.current=null,at.current=!1,ar.current=!1,ay.current=[],au.current?.disconnect(),au.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){w.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return av.current=d,d.finally(()=>{av.current===d&&(av.current=null)}),d},[]),aN=(0,e.useCallback)(()=>{!aw.current&&aG.current&&(aw.current=!0,aM().then(()=>{ax.current&&(aG.current?.(),ad(!1))}).finally(()=>{aw.current=!1}))},[aM]),aO=(0,e.useCallback)((a,b,c,d,e)=>{aB.current=aB.current.catch(()=>void 0).then(async()=>{aq.current===a&&at.current&&await H(a,b,c,d,e)}).catch(a=>{w.warn("MCP App tool delivery failed",a)})},[]),aP=(0,e.useCallback)(async()=>{if(av.current&&await av.current,ar.current||!ao.current)return;let a=as.current+1;as.current=a;let d=()=>as.current===a&&ar.current;ar.current=!0,al([]),af(!0),ah(null);try{let e,[f,g]=await Promise.all([u.S.readResourceFromApp(b,c),K(b,c,D)]);if(!d())return;if(f?.httpStatus===403)throw Error(f?.error||"MCP Apps access was disabled for this server");if(!f||!1===f.success)throw Error(f?.error||"Failed to read the UI resource.");let h=function(a,b){var c;let d,e=a?.contents;if(!Array.isArray(e)||0===e.length)throw Error("Resource has no contents");let f=e.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,v.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!f)throw Error(`Resource ${b} did not return MCP App HTML`);try{d="string"==typeof f.text?f.text:function(a){let b=Uint8Array.from(atob(a),a=>a.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(b)}(f.blob)}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(d).length>v.Pt)throw Error(`Resource exceeds the ${Math.round(v.Pt/1024)} KiB size cap`);let g=(f._meta??f.meta)?.ui,h=t.c0.safeParse(g?.csp);if(g?.csp!==void 0&&!h.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let i=t.Ml.safeParse(g?.permissions);if(g?.permissions!==void 0&&!i.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:d,csp:h.success?{connectDomains:F((c=h.data).connectDomains,["https","wss"]),resourceDomains:F(c.resourceDomains,["https"]),frameDomains:F(c.frameDomains,["https"]),baseUriDomains:F(c.baseUriDomains,["https"])}:void 0,permissions:i.success&&i.data.clipboardWrite?{clipboardWrite:{}}:void 0}}(f.data,c),i=await E();if(!d()||!ao.current)return;let j=document.createElement("iframe");j.title=`MCP App: ${c}`,j.setAttribute("sandbox","allow-scripts allow-same-origin"),j.referrerPolicy="origin";let k=(0,t.Sy)(h.permissions);k&&j.setAttribute("allow",k),j.style.cssText=aL.current?"width:100%;height:100%;border:none;background:#fff;":"width:100%;min-height:120px;height:200px;border:none;border-radius:4px;background:#fff;",ao.current.appendChild(j),ap.current=j;let l=new URL(i);h.csp&&l.searchParams.set("csp",JSON.stringify(h.csp));let m=l.origin,n=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error("Timed out waiting for the sandbox proxy."))},1e4),d=b=>{b.source===j.contentWindow&&b.origin===m&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(j.src=l.href,await n,!d()||ap.current!==j)return;let o=az.current,p="inline";az.current=p,e=new t.T1(function(a,b,c){return{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(d,e,f)=>{let{method:g,params:h}=d;if("tools/call"===g){w.info(`MCP App tools/call: ${a}/${h?.name}`);let d=await u.S.callToolFromApp(a,h.name,h.arguments??{},void 0,f?.signal,b);if(d?.httpStatus===403){let a=d?.error||"MCP Apps access was disabled for this server";throw c(a),Error(a)}if(!d||!1===d.success)throw Error(d?.error||`Tool call failed: ${h?.name}`);return d.data}if("resources/read"===g){let b=await u.S.readResourceFromApp(a,h.uri);if(b?.httpStatus===403){let a=b?.error||"MCP Apps access was disabled for this server";throw c(a),Error(a)}if(!b||!1===b.success)throw Error(b?.error||`Resource read failed: ${h?.uri}`);return b.data}if("resources/list"===g)return{resources:[]};if("resources/templates/list"===g)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${g}`)}}}(b,ab,b=>{as.current===a&&aq.current===e&&(ah(b),af(!1),aM())}),x,{openLinks:{},serverTools:{},serverResources:{},logging:{},...aE.current?{message:{text:{}}}:{},...aF.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:h.csp,permissions:h.permissions}},{hostContext:{...g?{toolInfo:g}:{},theme:"dark"===_.palette.mode?"dark":"light",platform:"web",displayMode:p,availableDisplayModes:aA.current,containerDimensions:J(ao.current,aL.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}}),aq.current=e;let q=()=>d()&&aq.current===e;if(e.onopenlink=async({url:a})=>{if(!q())return{isError:!0};let d=function(a){try{let b=new URL(a);if(!y.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!d)return w.warn("MCP App open-link rejected by URL policy",{serverName:b,uri:c}),{isError:!0};let e=window.open(d,"_blank","noopener,noreferrer");return e?(e.opener=null,{}):{isError:!0}},e.ondownloadfile=async({contents:a})=>{if(!q())return{isError:!0};try{for(let b of a??[]){let a,c=b?.resource;if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return w.warn("MCP App download failed",a),{isError:!0}}},e.onloggingmessage=a=>{q()&&w.debug("MCP App log",a?.data)},e.onmessage=async a=>{if(!q())return{};if(!aE.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){if(a?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let b=a?.content,c=Array.isArray(b)?b:b&&"object"==typeof b?[b]:[];if(0===c.length||c.some(a=>a?.type!=="text"||"string"!=typeof a.text))throw Error("This host accepts text-only ui/message content");let d=c.map(a=>a.text).join("\n").trim();if(!d)throw Error("ui/message text must not be empty");return d}(a);if(!await aE.current(b))throw Error("ui/message was not delivered");return{}},e.onupdatemodelcontext=async a=>{if(!q())return{};let d=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!A.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":C(a)>B?`Model context exceeds ${B} bytes`:null}(a);if(d)throw Error(d);let e=`${b}::${c}`;if(!aF.current)throw Error("This host cannot preserve model context in this surface");if(!await aF.current(e,a))throw Error("MCP App model context was not stored");return{}},e.onsizechange=async({width:a,height:b})=>{if(!q()||aL.current)return;let c=ao.current?.getBoundingClientRect().width||ao.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(j.style.height=`${d.height}px`),void 0!==d.width&&(j.style.width=`${d.width}px`,j.style.maxWidth="100%")},e.onrequestdisplaymode=async({mode:a})=>{if(!q())return{mode:az.current};let b=az.current,c=ay.current;if(!I(a,aA.current,c))return{mode:b};if("pip"===a&&!aL.current&&aG.current)return setTimeout(aN,0),{mode:b};let d=b;return(d=aJ.current?await aJ.current(a,[...c]):a)===b||I(d,aA.current,c)||(d=b),d!==b&&(az.current=d,aj(d),await e.sendHostContextChange({displayMode:d})),{mode:d}},e.onrequestteardown=()=>{q()&&aM().finally(()=>{aK.current?aK.current():(az.current="inline",aj("inline"),ad(!1))})},e.oninitialized=()=>{if(!q())return;let a=e.getAppCapabilities()?.availableDisplayModes,b=Array.isArray(a)?[...new Set(a.filter(a=>z.includes(a)))]:[];ay.current=b,al(b),aH.current?.(b.includes("pip")),aI.current?.([...b]),at.current=!0;let c=function(a,b,c,d){return b?I("pip",c,d)?"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"inline"}(o,aL.current,aA.current,b);if(null===c){ah("This app does not declare support for the canvas (pip) display mode."),af(!1),aM();return}az.current=c,aj(c),c!==p&&e.sendHostContextChange({displayMode:c});let d=ao.current;if(d&&"undefined"!=typeof ResizeObserver){let a=()=>{if(!q()||!at.current)return;let a=d.getBoundingClientRect();a.width<=0||aL.current&&a.height<=0||e.sendHostContextChange({containerDimensions:J(d,aL.current)})};au.current?.disconnect(),au.current=new ResizeObserver(a),au.current.observe(d),a()}let f=aD.current;aC.current=f.updateId??`${f.args??""}\u0000${f.resultContent??""}\u0000${f.cancelledReason??""}\u0000${f.isError??""}`,(void 0!==f.args||void 0!==f.resultContent||void 0!==f.cancelledReason||!0===f.isError)&&aO(e,f.args,f.resultContent,f.cancelledReason,f.isError),af(!1)},await e.connect(function(a,b){let c=new t.hJ(a,b),d={start:async()=>{c.onmessage=(a,b)=>{d.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},c.onerror=a=>d.onerror?.(a),c.onclose=()=>d.onclose?.(),await c.start()},send:(a,b)=>c.send(a,b),close:()=>c.close(),setProtocolVersion:a=>c.setProtocolVersion?.(a)};return d}(j.contentWindow,j.contentWindow)),!q())return;await e.sendSandboxResourceReady({html:h.html,csp:h.csp,permissions:h.permissions})}catch(a){if(!d())return;w.warn(`Failed to mount MCP App ${c} from ${b}`,a),ah(a instanceof Error?a.message:"Failed to load the app."),af(!1),aM()}},[aN,ab,aO,b,aM,_.palette.mode,D,c]),aQ=(0,e.useCallback)(()=>{let a=!ac;a||"fullscreen"!==az.current||(az.current="inline",aj("inline"),aq.current?.sendHostContextChange({displayMode:"inline"})),ad(a),a&&setTimeout(()=>{aP()},0)},[ac,aP]);if((0,e.useEffect)(()=>{Z&&!ar.current&&aP()},[Z,aP]),(0,e.useEffect)(()=>{let a=M??`${G??""}\u0000${L??""}\u0000${N??""}\u0000${O??""}`;at.current&&aq.current&&a!==aC.current&&(aC.current=a,aM().then(()=>{ax.current&&(aL.current||ac)&&aP()}))},[ac,aP,aM,G,N,O,L,M]),(0,e.useEffect)(()=>{U&&at.current&&aq.current&&az.current!==U&&I(U,aA.current,ay.current)&&(az.current=U,aj(U),aq.current.sendHostContextChange({displayMode:U}))},[U]),(0,e.useEffect)(()=>{at.current&&aq.current&&aq.current?.sendHostContextChange({theme:"dark"===_.palette.mode?"dark":"light"})},[_.palette.mode]),(0,e.useEffect)(()=>{let a=Y??`${b}::${c}`;return X?.(a,aM),()=>X?.(a,null)},[X,b,aM,Y,c]),(0,e.useEffect)(()=>{let a=a=>{let c=a.detail;c?.serverName===b&&(c.config?.enableMcpApps===!1||c.config?.disabled===!0)&&(ah("MCP Apps access was disabled for this server."),af(!1),aM().finally(()=>{aL.current&&aK.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[b,aM]),(0,e.useEffect)(()=>(ax.current=!0,()=>{ax.current=!1,aM()}),[aM]),Z)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:$?"visible":"hidden",pointerEvents:$?"auto":"none",flexDirection:"column"},children:[ae&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ag&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:ag}),(0,d.jsx)(g.default,{ref:ao,sx:{flex:1,minHeight:0,width:"100%",display:ag?"none":"block"}})]});let aR=ak.includes("inline")&&ak.includes("fullscreen")&&an.includes("fullscreen"),aS=ak.includes("inline")&&ak.includes("pip")&&an.includes("pip")&&!!R;return(0,d.jsxs)(g.default,{sx:{mt:1,border:"1px solid",borderColor:"divider",borderRadius:1,overflow:"hidden",..."fullscreen"===ai?{position:"fixed",inset:16,zIndex:1300,bgcolor:"background.paper",boxShadow:6}:{}},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover"},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsxs)(i.A,{variant:"body2",sx:{fontWeight:500},children:["Interactive app from ",b]}),(0,d.jsx)(k.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,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),ac&&aS&&(0,d.jsx)(l.A,{size:"small",onClick:aN,children:"Canvas"}),ac&&(0,d.jsx)(k.A,{title:aR?"fullscreen"===ai?"Exit fullscreen":"Fullscreen":"This app did not declare inline and fullscreen support",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",disabled:!aR,onClick:()=>{let a="fullscreen"===ai?"inline":"fullscreen";I(a,an,ak)&&(az.current=a,aj(a),aq.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===ai?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{size:"small",onClick:aQ,startIcon:ac?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:ac?"Hide":"Open app"})]}),(0,d.jsx)(m.A,{in:ac,onExited:()=>{aM()},children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===ai?"calc(100vh - 100px)":"auto"},children:[ae&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ag&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:ag}),(0,d.jsx)(g.default,{ref:ao,sx:{width:"100%",height:"fullscreen"===ai?"100%":"auto",display:ag?"none":"block"}})]})})]})}},59060:(a,b,c)=>{c.d(b,{DG:()=>f,Gt:()=>h,Pt:()=>e,q$:()=>g});let d="ui://",e=2097152;function f(a){return"string"==typeof a&&a.length>d.length&&a.slice(0,d.length).toLowerCase()===d&&!/\s/.test(a)}function g(a){if("string"!=typeof a)return!1;let[b,...c]=a.toLowerCase().split(";");if("text/html"!==b.trim())return!1;let d=!1;for(let a of c){let b=a.indexOf("=");if(b<=0)return!1;let c=a.slice(0,b).trim(),e=a.slice(b+1).trim();if(!c||!e)return!1;if("profile"===c){if(d||"mcp-app"!==e)return!1;d=!0}}return d}function h(a){if(!a||"object"!=typeof a)return;let b=a["ui/resourceUri"];if(f(b))return b;for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if(f(a))return a}}},82571:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}}};
|
|
1
|
+
"use strict";exports.id=1227,exports.ids=[1227],exports.modules={34641:(a,b,c)=>{c.d(b,{uJ:()=>C,Ay:()=>M,Yw:()=>D});var d=c(21124),e=c(38301),f=c(60839),g=c(81637),h=c(8521),i=c(79515),j=c(88745),k=c(43312),l=c(68730),m=c(99561),n=c(5748),o=c(1994),p=c(17332),q=c(63908),r=c(36636),s=c(93516),t=c(92543),u=c(18305),v=c(28055),w=c(59060);let x=(0,c(42819).h)("frontend/components/Chat/McpAppFrame"),y={name:"FLUJO",version:"3.41.0"},z=new Set(["https:","http:"]),A=["inline","fullscreen","pip"],B=new Set(["text"]),C=262144;function D(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let E=null;async function F(){return E||(E=fetch("/api/mcp/app-sandbox").then(async a=>{if(!a.ok)throw Error(`Sandbox endpoint discovery failed (${a.status})`);return await a.json()}).catch(a=>{throw E=null,a})),function(a,b){let c;if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if(void 0!==a.url){if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery returned an invalid public URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL")}else{if("http:"!==b.protocol)throw Error("MCP Apps on HTTPS require FLUJO_MCP_APP_SANDBOX_PUBLIC_URL to be configured");if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("Sandbox endpoint discovery returned an invalid port");(c=new URL("/sandbox.html",b.origin)).port=String(a.port)}if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(await E,window.location)}function G(a,b){let c=[],d=new Set;for(let e of a??[]){if(0===e.length||e.length>2048||/[^\x21-\x7e]/.test(e))continue;let a=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(e);if(!a||!b.includes(a[1].toLowerCase()))continue;let f=a[3].split(".");if(a[3].length>253||f.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))continue;let g=a[4]?Number(a[4]):void 0;if(void 0!==g&&(!Number.isInteger(g)||g<1||g>65535))continue;let h=e.toLowerCase();if(!d.has(h)&&(d.add(h),c.push(e),c.length>=64))break}return c}function H(a){if(a)try{return JSON.parse(a)}catch{return}}async function I(a,b,c,d,e){if(await a.sendToolInput({arguments:function(a){let b=H(a);return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}(b)}),void 0!==d)return void await a.sendToolCancelled({reason:d});let f=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=H(a);return c&&"object"==typeof c&&Array.isArray(c.content)?{...c,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);f&&await a.sendToolResult(f)}function J(a,b,c){return b.includes(a)&&c.includes(a)}function K(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function L(a,b,c){try{let d=await v.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,w.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,w.Gt)(f._meta)===b)return{tool:f}}catch(a){x.debug("Could not resolve the full MCP App tool definition",a)}}let M=({conversationId:a,serverName:b,uri:c,toolName:E,toolArgs:H,toolResultContent:M,toolUpdateId:N,toolCancelledReason:O,toolIsError:P,onAppMessage:Q,onUpdateModelContext:R,onRequestDock:S,onDockable:T,onAvailableDisplayModes:U,hostDisplayMode:V,onRequestDisplayMode:W,onRequestClose:X,onRegisterTeardown:Y,teardownRegistrationKey:Z,docked:$=!1,visible:_=!0})=>{let{t:aa}=(0,u.s9)(),ab=(0,f.A)(),ac=(0,e.useId)(),ad=(0,e.useMemo)(()=>a?`conversation:${a}`:`app:${b}:${c}:${ac}`,[a,ac,b,c]),[ae,af]=(0,e.useState)(!1),[ag,ah]=(0,e.useState)(!1),[ai,aj]=(0,e.useState)(null),[ak,al]=(0,e.useState)($?"pip":"inline"),[am,an]=(0,e.useState)([]),ao=V??ak,ap=(0,e.useMemo)(()=>$?["pip","fullscreen"]:["inline","fullscreen",...S?["pip"]:[]],[$,S]),aq=(0,e.useRef)(null),ar=(0,e.useRef)(null),as=(0,e.useRef)(null),at=(0,e.useRef)(!1),au=(0,e.useRef)(0),av=(0,e.useRef)(!1),aw=(0,e.useRef)(null),ax=(0,e.useRef)(null),ay=(0,e.useRef)(!1),az=(0,e.useRef)(!0),aA=(0,e.useRef)([]),aB=(0,e.useRef)(ao),aC=(0,e.useRef)(ap),aD=(0,e.useRef)(Promise.resolve()),aE=(0,e.useRef)(void 0),aF=(0,e.useRef)({args:H,resultContent:M,cancelledReason:O,isError:P,updateId:N});aF.current={args:H,resultContent:M,cancelledReason:O,isError:P,updateId:N};let aG=(0,e.useRef)(Q);(0,e.useEffect)(()=>{aG.current=Q},[Q]);let aH=(0,e.useRef)(R);(0,e.useEffect)(()=>{aH.current=R},[R]);let aI=(0,e.useRef)(S);(0,e.useEffect)(()=>{aI.current=S},[S]);let aJ=(0,e.useRef)(T);(0,e.useEffect)(()=>{aJ.current=T},[T]);let aK=(0,e.useRef)(U);(0,e.useEffect)(()=>{aK.current=U},[U]);let aL=(0,e.useRef)(W);(0,e.useEffect)(()=>{aL.current=W},[W]);let aM=(0,e.useRef)(X);(0,e.useEffect)(()=>{aM.current=X},[X]);let aN=(0,e.useRef)($);(0,e.useEffect)(()=>{aN.current=$},[$]),(0,e.useEffect)(()=>{aB.current=ao},[ao]),(0,e.useEffect)(()=>{aC.current=ap},[ap]);let aO=(0,e.useCallback)(()=>{if(ax.current)return ax.current;au.current+=1;let a=as.current,b=ar.current,c=av.current;as.current=null,ar.current=null,av.current=!1,at.current=!1,aA.current=[],aw.current?.disconnect(),aw.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){x.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return ax.current=d,d.finally(()=>{ax.current===d&&(ax.current=null)}),d},[]),aP=(0,e.useCallback)(()=>{!ay.current&&aI.current&&(ay.current=!0,aO().then(()=>{az.current&&(aI.current?.(),af(!1))}).finally(()=>{ay.current=!1}))},[aO]),aQ=(0,e.useCallback)((a,b,c,d,e)=>{aD.current=aD.current.catch(()=>void 0).then(async()=>{as.current===a&&av.current&&await I(a,b,c,d,e)}).catch(a=>{x.warn("MCP App tool delivery failed",a)})},[]),aR=(0,e.useCallback)(async()=>{if(ax.current&&await ax.current,at.current||!aq.current)return;let a=au.current+1;au.current=a;let d=()=>au.current===a&&at.current;at.current=!0,an([]),ah(!0),aj(null);try{let e,[f,g]=await Promise.all([v.S.readResourceFromApp(b,c),L(b,c,E)]);if(!d())return;if(f?.httpStatus===403)throw Error(f?.error||aa("chat.app.accessDisabled"));if(!f||!1===f.success)throw Error(f?.error||aa("chat.app.readFailed"));let h=function(a,b){var c;let d,e=a?.contents;if(!Array.isArray(e)||0===e.length)throw Error("Resource has no contents");let f=e.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,w.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!f)throw Error(`Resource ${b} did not return MCP App HTML`);try{d="string"==typeof f.text?f.text:function(a){let b=Uint8Array.from(atob(a),a=>a.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(b)}(f.blob)}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(d).length>w.Pt)throw Error(`Resource exceeds the ${Math.round(w.Pt/1024)} KiB size cap`);let g=(f._meta??f.meta)?.ui,h=t.c0.safeParse(g?.csp);if(g?.csp!==void 0&&!h.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let i=t.Ml.safeParse(g?.permissions);if(g?.permissions!==void 0&&!i.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:d,csp:h.success?{connectDomains:G((c=h.data).connectDomains,["https","wss"]),resourceDomains:G(c.resourceDomains,["https"]),frameDomains:G(c.frameDomains,["https"]),baseUriDomains:G(c.baseUriDomains,["https"])}:void 0,permissions:i.success&&i.data.clipboardWrite?{clipboardWrite:{}}:void 0}}(f.data,c),i=await F();if(!d()||!aq.current)return;let j=document.createElement("iframe");j.title=aa("chat.app.frameTitle",{uri:c}),j.setAttribute("sandbox","allow-scripts allow-same-origin"),j.referrerPolicy="origin";let k=(0,t.Sy)(h.permissions);k&&j.setAttribute("allow",k),j.style.cssText=aN.current?"width:100%;height:100%;border:none;background:#fff;":"width:100%;min-height:120px;height:200px;border:none;border-radius:4px;background:#fff;",aq.current.appendChild(j),ar.current=j;let l=new URL(i);h.csp&&l.searchParams.set("csp",JSON.stringify(h.csp));let m=l.origin,n=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error(aa("chat.app.proxyTimeout")))},1e4),d=b=>{b.source===j.contentWindow&&b.origin===m&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(j.src=l.href,await n,!d()||ar.current!==j)return;let o=aB.current,p="inline";aB.current=p,e=new t.T1(function(a,b,c){return{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(d,e,f)=>{let{method:g,params:h}=d;if("tools/call"===g){x.info(`MCP App tools/call: ${a}/${h?.name}`);let d=await v.S.callToolFromApp(a,h.name,h.arguments??{},void 0,f?.signal,b);if(d?.httpStatus===403){let a=d?.error||"MCP Apps access was disabled for this server";throw c(a),Error(a)}if(!d||!1===d.success)throw Error(d?.error||`Tool call failed: ${h?.name}`);return d.data}if("resources/read"===g){let b=await v.S.readResourceFromApp(a,h.uri);if(b?.httpStatus===403){let a=b?.error||"MCP Apps access was disabled for this server";throw c(a),Error(a)}if(!b||!1===b.success)throw Error(b?.error||`Resource read failed: ${h?.uri}`);return b.data}if("resources/list"===g)return{resources:[]};if("resources/templates/list"===g)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${g}`)}}}(b,ad,b=>{au.current===a&&as.current===e&&(aj(b),ah(!1),aO())}),y,{openLinks:{},serverTools:{},serverResources:{},logging:{},...aG.current?{message:{text:{}}}:{},...aH.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:h.csp,permissions:h.permissions}},{hostContext:{...g?{toolInfo:g}:{},theme:"dark"===ab.palette.mode?"dark":"light",platform:"web",displayMode:p,availableDisplayModes:aC.current,containerDimensions:K(aq.current,aN.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}}),as.current=e;let q=()=>d()&&as.current===e;if(e.onopenlink=async({url:a})=>{if(!q())return{isError:!0};let d=function(a){try{let b=new URL(a);if(!z.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(a);if(!d)return x.warn("MCP App open-link rejected by URL policy",{serverName:b,uri:c}),{isError:!0};let e=window.open(d,"_blank","noopener,noreferrer");return e?(e.opener=null,{}):{isError:!0}},e.ondownloadfile=async({contents:a})=>{if(!q())return{isError:!0};try{for(let b of a??[]){let a,c=b?.resource;if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return x.warn("MCP App download failed",a),{isError:!0}}},e.onloggingmessage=a=>{q()&&x.debug("MCP App log",a?.data)},e.onmessage=async a=>{if(!q())return{};if(!aG.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){if(a?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let b=a?.content,c=Array.isArray(b)?b:b&&"object"==typeof b?[b]:[];if(0===c.length||c.some(a=>a?.type!=="text"||"string"!=typeof a.text))throw Error("This host accepts text-only ui/message content");let d=c.map(a=>a.text).join("\n").trim();if(!d)throw Error("ui/message text must not be empty");return d}(a);if(!await aG.current(b))throw Error("ui/message was not delivered");return{}},e.onupdatemodelcontext=async a=>{if(!q())return{};let d=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!B.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":D(a)>C?`Model context exceeds ${C} bytes`:null}(a);if(d)throw Error(d);let e=`${b}::${c}`;if(!aH.current)throw Error("This host cannot preserve model context in this surface");if(!await aH.current(e,a))throw Error("MCP App model context was not stored");return{}},e.onsizechange=async({width:a,height:b})=>{if(!q()||aN.current)return;let c=aq.current?.getBoundingClientRect().width||aq.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(j.style.height=`${d.height}px`),void 0!==d.width&&(j.style.width=`${d.width}px`,j.style.maxWidth="100%")},e.onrequestdisplaymode=async({mode:a})=>{if(!q())return{mode:aB.current};let b=aB.current,c=aA.current;if(!J(a,aC.current,c))return{mode:b};if("pip"===a&&!aN.current&&aI.current)return setTimeout(aP,0),{mode:b};let d=b;return(d=aL.current?await aL.current(a,[...c]):a)===b||J(d,aC.current,c)||(d=b),d!==b&&(aB.current=d,al(d),await e.sendHostContextChange({displayMode:d})),{mode:d}},e.onrequestteardown=()=>{q()&&aO().finally(()=>{aM.current?aM.current():(aB.current="inline",al("inline"),af(!1))})},e.oninitialized=()=>{if(!q())return;let a=e.getAppCapabilities()?.availableDisplayModes,b=Array.isArray(a)?[...new Set(a.filter(a=>A.includes(a)))]:[];aA.current=b,an(b),aJ.current?.(b.includes("pip")),aK.current?.([...b]),av.current=!0;let c=function(a,b,c,d){return b?J("pip",c,d)?"fullscreen"===a&&J("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&J("fullscreen",c,d)?"fullscreen":"inline"}(o,aN.current,aC.current,b);if(null===c){aj(aa("chat.app.canvasUnsupported")),ah(!1),aO();return}aB.current=c,al(c),c!==p&&e.sendHostContextChange({displayMode:c});let d=aq.current;if(d&&"undefined"!=typeof ResizeObserver){let a=()=>{if(!q()||!av.current)return;let a=d.getBoundingClientRect();a.width<=0||aN.current&&a.height<=0||e.sendHostContextChange({containerDimensions:K(d,aN.current)})};aw.current?.disconnect(),aw.current=new ResizeObserver(a),aw.current.observe(d),a()}let f=aF.current;aE.current=f.updateId??`${f.args??""}\u0000${f.resultContent??""}\u0000${f.cancelledReason??""}\u0000${f.isError??""}`,(void 0!==f.args||void 0!==f.resultContent||void 0!==f.cancelledReason||!0===f.isError)&&aQ(e,f.args,f.resultContent,f.cancelledReason,f.isError),ah(!1)},await e.connect(function(a,b){let c=new t.hJ(a,b),d={start:async()=>{c.onmessage=(a,b)=>{d.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},c.onerror=a=>d.onerror?.(a),c.onclose=()=>d.onclose?.(),await c.start()},send:(a,b)=>c.send(a,b),close:()=>c.close(),setProtocolVersion:a=>c.setProtocolVersion?.(a)};return d}(j.contentWindow,j.contentWindow)),!q())return;await e.sendSandboxResourceReady({html:h.html,csp:h.csp,permissions:h.permissions})}catch(a){if(!d())return;x.warn(`Failed to mount MCP App ${c} from ${b}`,a),aj(a instanceof Error?a.message:aa("chat.app.loadFailed")),ah(!1),aO()}},[aP,ad,aQ,b,aO,ab.palette.mode,E,c,aa]),aS=(0,e.useCallback)(()=>{let a=!ae;a||"fullscreen"!==aB.current||(aB.current="inline",al("inline"),as.current?.sendHostContextChange({displayMode:"inline"})),af(a),a&&setTimeout(()=>{aR()},0)},[ae,aR]);if((0,e.useEffect)(()=>{$&&!at.current&&aR()},[$,aR]),(0,e.useEffect)(()=>{let a=N??`${H??""}\u0000${M??""}\u0000${O??""}\u0000${P??""}`;av.current&&as.current&&a!==aE.current&&(aE.current=a,aO().then(()=>{az.current&&(aN.current||ae)&&aR()}))},[ae,aR,aO,H,O,P,M,N]),(0,e.useEffect)(()=>{V&&av.current&&as.current&&aB.current!==V&&J(V,aC.current,aA.current)&&(aB.current=V,al(V),as.current.sendHostContextChange({displayMode:V}))},[V]),(0,e.useEffect)(()=>{av.current&&as.current&&as.current?.sendHostContextChange({theme:"dark"===ab.palette.mode?"dark":"light"})},[ab.palette.mode]),(0,e.useEffect)(()=>{let a=Z??`${b}::${c}`;return Y?.(a,aO),()=>Y?.(a,null)},[Y,b,aO,Z,c]),(0,e.useEffect)(()=>{let a=a=>{let c=a.detail;c?.serverName===b&&(c.config?.enableMcpApps===!1||c.config?.disabled===!0)&&(aj(aa("chat.app.accessDisabled")),ah(!1),aO().finally(()=>{aN.current&&aM.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",a),()=>{window.removeEventListener("flujo:mcp-server-config-changed",a)}},[b,aO,aa]),(0,e.useEffect)(()=>(az.current=!0,()=>{az.current=!1,aO()}),[aO]),$)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:_?"visible":"hidden",pointerEvents:_?"auto":"none",flexDirection:"column"},children:[ag&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:aa("chat.app.loading")})]}),ai&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:ai}),(0,d.jsx)(g.default,{ref:aq,sx:{flex:1,minHeight:0,width:"100%",display:ai?"none":"block"}})]});let aT=am.includes("inline")&&am.includes("fullscreen")&&ap.includes("fullscreen"),aU=am.includes("inline")&&am.includes("pip")&&ap.includes("pip")&&!!S;return(0,d.jsxs)(g.default,{sx:{mt:1,border:"1px solid",borderColor:"divider",borderRadius:1,overflow:"hidden",..."fullscreen"===ak?{position:"fixed",inset:16,zIndex:1300,bgcolor:"background.paper",boxShadow:6}:{}},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover"},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsx)(i.A,{variant:"body2",sx:{fontWeight:500},children:aa("chat.app.fromServer",{server:b})}),(0,d.jsx)(k.A,{title:aa("chat.app.sandboxHelp"),children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),ae&&aU&&(0,d.jsx)(l.A,{size:"small",onClick:aP,children:aa("chat.app.canvas")}),ae&&(0,d.jsx)(k.A,{title:aT?"fullscreen"===ak?aa("chat.app.exitFullscreen"):aa("chat.app.fullscreen"):aa("chat.app.fullscreenUnsupported"),children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",disabled:!aT,onClick:()=>{let a="fullscreen"===ak?"inline":"fullscreen";J(a,ap,am)&&(aB.current=a,al(a),as.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===ak?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{size:"small",onClick:aS,startIcon:ae?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:ae?aa("chat.app.hide"):aa("chat.app.open")})]}),(0,d.jsx)(m.A,{in:ae,onExited:()=>{aO()},children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===ak?"calc(100vh - 100px)":"auto"},children:[ag&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:aa("chat.app.loading")})]}),ai&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:ai}),(0,d.jsx)(g.default,{ref:aq,sx:{width:"100%",height:"fullscreen"===ak?"100%":"auto",display:ai?"none":"block"}})]})})]})}},59060:(a,b,c)=>{c.d(b,{DG:()=>f,Gt:()=>h,Pt:()=>e,q$:()=>g});let d="ui://",e=2097152;function f(a){return"string"==typeof a&&a.length>d.length&&a.slice(0,d.length).toLowerCase()===d&&!/\s/.test(a)}function g(a){if("string"!=typeof a)return!1;let[b,...c]=a.toLowerCase().split(";");if("text/html"!==b.trim())return!1;let d=!1;for(let a of c){let b=a.indexOf("=");if(b<=0)return!1;let c=a.slice(0,b).trim(),e=a.slice(b+1).trim();if(!c||!e)return!1;if("profile"===c){if(d||"mcp-app"!==e)return!1;d=!0}}return d}function h(a){if(!a||"object"!=typeof a)return;let b=a["ui/resourceUri"];if(f(b))return b;for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if(f(a))return a}}},82571:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}}};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";exports.id=1403,exports.ids=[1403],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},38296:(a,b,c)=>{c.d(b,{A:()=>
|
|
1
|
+
"use strict";exports.id=1403,exports.ids=[1403],exports.modules={13516:(a,b,c)=>{c.d(b,{G:()=>d});let d={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},38296:(a,b,c)=>{c.d(b,{A:()=>E});var d=c(21124),e=c(38301),f=c(54573),g=c(81637),h=c(79515),i=c(68730),j=c(53773),k=c(82666),l=c(37674),m=c(67101),n=c(41893),o=c(95587),p=c(77028),q=c(44079),r=c(6537),s=c(42819),t=c(49938),u=c(47902),v=c(11480),w=c(93083),x=c(85557),y=c(91034),z=c(82571),A=c(92173),B=c(18305);let C=(0,s.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),D=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,E=({serverName:a,initialEnv:b,onSave:c,onDelete:s,onServerRestart:E})=>{let{t:F}=(0,B.s9)(),{globalEnvVars:G}=(0,t.rX)(),[H,I]=(0,e.useState)([]),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(!1),[P,Q]=(0,e.useState)(null);(0,e.useEffect)(()=>{C.debug(`Initializing environment variables for server: ${a}`,{variableCount:Object.keys(b).length}),I(Object.entries(b).map(([a,b])=>{let c="object"==typeof b&&null!==b&&"value"in b?b.value:b,d="object"==typeof b&&null!==b&&"metadata"in b?b.metadata:{isSecret:(0,z.xc)(a)},e=c.match(D);if(e){let b=e[1];return{key:a,value:c,isSecret:d.isSecret,isBound:!0,boundTo:b}}let f="string"==typeof c&&(c.startsWith("encrypted:")||c.startsWith("encrypted_failed:"));return{key:a,value:f?A.gF:c,isSecret:d.isSecret,isEncrypted:f}}))},[b]);let R=async b=>{C.debug(`Removing environment variable at index: ${b}`);let c=H[b];if("Global"===a&&s&&c.key)try{await s(c.key),I(H.filter((a,c)=>c!==b))}catch(a){C.error(`Failed to delete environment variable: ${c.key}`,a)}else I(H.filter((a,c)=>c!==b)),K(!0)},S=(a,b,c)=>{let d=[...H];if("isSecret"===b){let b=d[a];b.isSecret&&!c?d[a]={...b,isSecret:c,value:"",isEncrypted:!1,showWarning:!0}:d[a]={...b,isSecret:c}}else{let e={...d[a],[b]:c,isSecret:"key"===b?(0,z.xc)(c):d[a].isSecret};if("key"===b&&(e.isValidKey=""===c||/^[a-zA-Z0-9_]+$/.test(c)),"value"===b){let b=c.match(D);e.isBound=!!b,e.boundTo=b?.[1],d[a].isEncrypted&&(e.isEncrypted=!1),d[a].showWarning&&c&&(e.showWarning=!1)}d[a]=e}I(d),K(!0)},T=async()=>{if(H.some(a=>""!==a.key&&!1===a.isValidKey))return void C.error("Cannot save: Some variable names contain invalid characters");C.debug(`Saving environment variables for server: ${a}`,{variableCount:H.length}),M(!0);try{let b=H.reduce((a,b)=>{let{key:c,value:d,isBound:e,boundTo:f,isSecret:g,isEncrypted:h}=b;return c&&(e&&f?a[c]={value:`$\{global:${f}}`,metadata:{isSecret:g}}:g&&d===A.gF||(a[c]={value:d,metadata:{isSecret:g}})),a},{});await c(b),K(!1),E&&"Global"!==a&&(C.debug(`Restarting server after env variable changes: ${a}`),await E(a))}catch(a){C.error("Failed to save environment variables:",a)}M(!1)};return(0,d.jsxs)(f.A,{sx:{p:3,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{fontWeight:"semibold"},children:F("mcp.env.title",{server:a})}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,d.jsx)(u.A,{}),onClick:()=>{C.debug("Adding new environment variable"),I([...H,{key:"",value:"",isSecret:!1}]),K(!0)},children:F("mcp.env.add")})]}),(0,d.jsx)(j.A,{spacing:3,children:H.map((a,b)=>(0,d.jsxs)(k.Ay,{container:!0,spacing:2,alignItems:"flex-start",children:[(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,placeholder:F("mcp.env.name"),value:a.key,onChange:a=>S(b,"key",a.target.value),error:!1===a.isValidKey,helperText:!1===a.isValidKey?F("mcp.env.invalidName"):"",size:"small"})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,type:a.isSecret?"password":"text",placeholder:a.showWarning?F("mcp.env.reenter"):F("mcp.env.value"),value:a.value,onChange:a=>S(b,"value",a.target.value),InputProps:{readOnly:a.isBound,startAdornment:a.isEncrypted?(0,d.jsx)(m.A,{position:"start",children:(0,d.jsx)(v.A,{fontSize:"small",titleAccess:F("mcp.env.encrypted")})}):null,endAdornment:a.isBound?(0,d.jsx)(m.A,{position:"end",children:(0,d.jsx)(n.A,{size:"small",label:F("mcp.env.bound",{name:a.boundTo??""}),color:"primary",variant:"outlined",onDelete:()=>(a=>{C.debug(`Unbinding variable at index: ${a}`);let b=[...H];b[a]={...b[a],isBound:!1,boundTo:void 0},I(b),K(!0)})(b),deleteIcon:(0,d.jsx)(w.A,{fontSize:"small"})})}):null},error:a.showWarning,helperText:a.showWarning?F("mcp.env.reenterHelp"):"",size:"small",sx:{bgcolor:b=>a.isBound?"dark"===b.palette.mode?"#1a1a1a":"#f9fafb":b.palette.background.paper}})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:2,children:(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:a.isSecret,onChange:a=>S(b,"isSecret",a.target.checked),size:"small"}),label:F("mcp.env.secret"),sx:{mr:1}}),!a.isBound&&(0,d.jsx)(q.A,{size:"small",color:"primary",onClick:()=>(a=>{C.debug(`Opening bind modal for variable at index: ${a}`),Q(a),O(!0)})(b),title:F("mcp.env.bind"),sx:{mr:1},children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(q.A,{size:"small",color:"error",onClick:()=>R(b),title:F("mcp.env.remove"),children:(0,d.jsx)(y.A,{fontSize:"small"})})]})})]},b))}),(0,d.jsx)(r.A,{open:N,onClose:()=>{O(!1),Q(null)},children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(h.A,{variant:"h6",sx:{mb:2},children:F("mcp.env.bindTitle")}),0===Object.keys(G).length?(0,d.jsx)(h.A,{color:"text.secondary",sx:{mb:2},children:F("mcp.env.noGlobals")}):(0,d.jsx)(g.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(G).map(([a,b])=>(0,d.jsxs)(i.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{if(null!==P){C.debug(`Binding variable at index ${P} to global variable: ${a}`);let b=[...H];b[P]={...b[P],isBound:!0,boundTo:a,value:`$\{global:${a}}`},I(b),O(!1),Q(null),K(!0)}})(a),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,d.jsx)(h.A,{variant:"body2",children:a}),(0,d.jsx)(h.A,{variant:"caption",color:"text.secondary",children:b&&"object"==typeof b&&b.metadata&&b.metadata.isSecret?A.gF:b&&"object"==typeof b?b.value:b})]},a))}),(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(i.A,{variant:"outlined",onClick:()=>{O(!1),Q(null)},children:F("mcp.env.cancel")})})]})}),J&&(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,d.jsx)(i.A,{variant:"contained",color:"success",onClick:T,disabled:L||H.some(a=>""!==a.key&&!1===a.isValidKey),children:L?F("mcp.env.saving"):F("mcp.env.save")})})]})}},50846:(a,b,c)=>{c.d(b,{h:()=>i});var d=c(13516);let e={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},f="number"==typeof d.G.LOG_LEVEL?d.G.LOG_LEVEL:e.ERROR;function g(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=g(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>g(a,b+1)):c[d]=e)}return c}function h(a,b,c,d,h){if(a>=("number"==typeof h?h:f)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let f=new Date().toISOString(),h=`[${f}] [${b}]`,i=`${h} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?g(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?g(b):b,2);i+=`:
|
|
2
2
|
${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case e.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case e.DEBUG:console.debug(i);break;case e.INFO:console.info(i);break;case e.WARN:console.warn(i);break;case e.ERROR:console.error(i);break;default:console.log(i)}}}function i(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{h(e.VERBOSE,d,a,c,b)},debug:(a,c)=>{h(e.DEBUG,d,a,c,b)},info:(a,c)=>{h(e.INFO,d,a,c,b)},warn:(a,c)=>{h(e.WARN,d,a,c,b)},error:(a,c)=>{h(e.ERROR,d,a,c,b)}}}},81017:(a,b,c)=>{c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>U,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>W});var d=c(91488);c(27806);let e={LOG_LEVEL:3},f={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},g="number"==typeof e.LOG_LEVEL?e.LOG_LEVEL:f.ERROR;function h(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=h(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>h(a,b+1)):c[d]=e)}return c}function i(a,b,c,d,e){if(a>=("number"==typeof e?e:g)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,i=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?h(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?h(b):b,2);i+=`:
|
|
3
|
-
${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case f.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case f.DEBUG:console.debug(i);break;case f.INFO:console.info(i);break;case f.WARN:console.warn(i);break;case f.ERROR:console.error(i);break;default:console.log(i)}}}function j(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{i(f.VERBOSE,d,a,c,b)},debug:(a,c)=>{i(f.DEBUG,d,a,c,b)},info:(a,c)=>{i(f.INFO,d,a,c,b)},warn:(a,c)=>{i(f.WARN,d,a,c,b)},error:(a,c)=>{i(f.ERROR,d,a,c,b)}}}var k=c(29021),l=c(33873),m=c.n(l),n=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.THEME_STYLE="theme_style",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",a.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",a.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",a.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({});function o(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?m().resolve(a):process.cwd()}c(21820);let p=j("utils/storage/backend"),q=m().join(o(),"db"),r=m().join(o(),".next","storage"),s=a=>m().join(q,`${a}.json`);async function t(){try{await k.promises.access(q),p.verbose(`Storage directory exists: ${q}`)}catch{p.debug(`Creating storage directory: ${q}`),await k.promises.mkdir(q,{recursive:!0})}try{await k.promises.access(r),p.warn(`Old storage directory found: ${r}. This may cause data inconsistency issues.`)}catch{}}let u=new Map,v=0;async function w(a,b){let c=m().dirname(a);await k.promises.mkdir(c,{recursive:!0});let d=`${a}.tmp.${process.pid}.${++v}`;try{await k.promises.writeFile(d,b),await k.promises.rename(d,a)}catch(a){try{await k.promises.unlink(d)}catch{}throw a}}async function x(a,b){let c=s(a),d=(u.get(a)??Promise.resolve()).catch(()=>{}).then(()=>w(c,JSON.stringify(b,null,2)));u.set(a,d);try{await d,p.verbose(`Successfully saved item to: ${c}`)}catch(b){throw p.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{u.get(a)===d&&u.delete(a)}}async function y(a,b){try{await t();let c=s(a),d=await k.promises.readFile(c,"utf-8");if(0===d.trim().length)return p.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return p.verbose(`Successfully loaded item from: ${c}`),a}catch(b){p.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await k.promises.writeFile(a,d),p.info(`Created backup of corrupted file at: ${a}`)}catch(a){p.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return p.verbose(`Item with key "${a}" not found at ${s(a)}, returning default.`),b;throw p.error(`CRITICAL: Error loading item with key "${a}" from ${s(a)}:`,c),c}}var z=c(92347),A=c.n(z);let B=j("utils/encryption/session"),C=global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map),D=j("utils/encryption/secure");class E extends Error{constructor(a="Encryption is locked: user password required to access secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,E.prototype)}}let F="data_encryption_key",G="data_encryption_iv",H="data_encryption_salt",I="encryption_type";var J=function(a){return a.DEFAULT="default",a.USER="user",a}(J||{});function K(){let a=A().enc.Utf8.parse("flujo_fixed_salt_v1");return A().PBKDF2("FLUJO~",a,{keySize:8,iterations:1e5})}function L(a){let b;try{b=a.toString(A().enc.Utf8)}catch{return null}return RegExp("^[0-9a-f]{16}$").test(b)?b:null}async function M(){D.debug("initializeDefaultEncryption: Entering method");try{if(await R())return!0;let a=K(),b=A().lib.WordArray.random(8),c=A().lib.WordArray.random(16),d=A().AES.encrypt(b.toString(),a,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7}),e=A().enc.Utf8.parse("flujo_fixed_salt_v1"),f={[F]:d.toString(),[G]:c.toString(),[H]:e.toString(),encryption_version:1,[I]:"default"};return await x(n.ENCRYPTION_KEY,f),!0}catch(a){return D.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function N(){D.debug("getDefaultDEK: Entering method");try{let a=await y(n.ENCRYPTION_KEY,null);if(!a){if(!await M())return D.error("getDefaultDEK: Failed to initialize default encryption"),null;return await N()}if("default"!==a[I])return D.error("getDefaultDEK: Not using default encryption"),null;let b=a[F],c=A().enc.Hex.parse(a[G]),d=K(),e=A().AES.decrypt(b,d,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(e))return D.error("getDefaultDEK: Failed to decrypt DEK with default key"),null;return A().enc.Hex.parse(e.toString())}catch(a){return D.error("getDefaultDEK: Failed to get default DEK:",a),null}}async function O(a){D.debug("getUserDEK: Entering method");try{let b=await y(n.ENCRYPTION_KEY,null);if(!b)return D.error("getUserDEK: No encryption metadata found"),null;if("user"!==b[I])return D.error("getUserDEK: Not using user encryption"),null;let c=b[F],d=A().enc.Hex.parse(b[G]),e=A().enc.Hex.parse(b[H]),f=A().PBKDF2(a,e,{keySize:8,iterations:1e5}),g=A().AES.decrypt(c,f,{iv:d,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(g))return D.error("getUserDEK: Failed to decrypt DEK with provided password"),null;return A().enc.Hex.parse(g.toString())}catch(a){return D.error("getUserDEK: Failed to get user DEK:",a),null}}async function P(a,b=!1){D.debug("getDEK: Entering method");try{if(b&&a){D.debug("getDEK: Using session token");let b=function(a){let b=C.get(a);if(!b)return B.warn(`Session not found: ${a}`),null;let c=Date.now();return c-b.createdAt>72e5?(B.warn(`Session expired: ${a}`),C.delete(a),null):(b.lastUsed=c,b.dek)}(a);if(b)return A().enc.Hex.parse(b);D.warn("getDEK: Invalid or expired session token, falling back to default encryption")}let c=await y(n.ENCRYPTION_KEY,null);if(!c){if(D.info("getDEK: No encryption metadata found, initializing default encryption"),!await M())return D.error("getDEK: Failed to initialize default encryption"),null;return await P(a,b)}if("user"!==c[I])return await N();{let c=global.__flujo_server_dek??null;if(c)return D.debug("getDEK: Using server unlock state for user encryption"),A().enc.Hex.parse(c);if(a&&!b){let b=await O(a);if(b)return b;D.warn("getDEK: Provided password did not yield a valid user DEK")}throw D.warn("getDEK: User encryption is locked (no unlock state or valid credential)"),new E}}catch(a){if(a instanceof E)throw a;D.error("getDEK: Failed to get DEK:",a);try{if(D.warn("getDEK: Attempting to initialize default encryption as error recovery"),await M())return await N()}catch(a){D.error("getDEK: Failed to initialize default encryption as error recovery:",a)}return null}}async function Q(a,b,c=!1){D.debug("decryptWithPassword: Entering method");try{let d=await P(b,c);if(!d)return null;let e=a.split(":");if(2!==e.length)return D.error("decryptWithPassword: Invalid ciphertext format"),null;let f=A().enc.Hex.parse(e[0]),g=e[1];return A().AES.decrypt(g,d,{iv:f,mode:A().mode.CBC,padding:A().pad.Pkcs7}).toString(A().enc.Utf8)}catch(a){if(a instanceof E)throw a;return D.error("decryptWithPassword: Failed to decrypt data:",a),null}}async function R(){return D.debug("isEncryptionInitialized: Entering method"),null!==await y(n.ENCRYPTION_KEY,null)}var S=c(40410);let T=j("backend/utils/resolveGlobalVars");async function U(a,b={}){T.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await y(n.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);T.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let f={},g=new Set;if(e)for(let[a,b]of Object.entries(d))f[a]=b.value,b.metadata.isSecret&&g.add(a);else f={...d};let h=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==f[b]){let e=f[b];if(!c&&(g.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){T.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){T.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await Q(a);if(c)e=c,T.debug(`Successfully decrypted global variable: ${b}`);else{T.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){T.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){T.warn(`Skipping failed encrypted global variable: ${b}`);continue}T.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else T.warn(`Global variable not found: ${b}`)}return d},i=async a=>{if("string"==typeof a)return await h(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},j=await i(a);return"object"==typeof a&&null!==a&&T.debug("Resolved global variables result:",JSON.stringify(j,null,2)),T.debug("Completed global variable resolution"),j}async function V(a){return U(a,{resolveSecrets:!1})}async function W(a,b=0){if(T.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return T.warn("Empty value provided"),null;if(b>=10)return T.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){T.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await Q(a);if(!d)return T.warn(`Failed to decrypt value at depth ${b}`),null;T.debug(`Successfully decrypted value at depth ${b}`),T.verbose(d),c=d}catch(a){return T.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(T.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){T.debug(`Resolving global variables at depth ${b}`);try{let a=await U(c);if(T.verbose(a),a!==c)return T.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),W(a,b+1);c=a}catch(a){return T.error(`Error resolving global variables at depth ${b}:`,a),null}}return T.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,S.D)([U,V,W]),(0,d.A)(U,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(V,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(W,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},92173:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"}};
|
|
3
|
+
${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case f.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case f.DEBUG:console.debug(i);break;case f.INFO:console.info(i);break;case f.WARN:console.warn(i);break;case f.ERROR:console.error(i);break;default:console.log(i)}}}function j(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{i(f.VERBOSE,d,a,c,b)},debug:(a,c)=>{i(f.DEBUG,d,a,c,b)},info:(a,c)=>{i(f.INFO,d,a,c,b)},warn:(a,c)=>{i(f.WARN,d,a,c,b)},error:(a,c)=>{i(f.ERROR,d,a,c,b)}}}var k=c(29021),l=c(33873),m=c.n(l),n=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.THEME_STYLE="theme_style",a.LIVING_WORLD_ENABLED="living_world_enabled",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",a.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",a.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",a.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({});function o(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?m().resolve(a):process.cwd()}c(21820);let p=j("utils/storage/backend"),q=m().join(o(),"db"),r=m().join(o(),".next","storage"),s=a=>m().join(q,`${a}.json`);async function t(){try{await k.promises.access(q),p.verbose(`Storage directory exists: ${q}`)}catch{p.debug(`Creating storage directory: ${q}`),await k.promises.mkdir(q,{recursive:!0})}try{await k.promises.access(r),p.warn(`Old storage directory found: ${r}. This may cause data inconsistency issues.`)}catch{}}let u=new Map,v=0;async function w(a,b){let c=m().dirname(a);await k.promises.mkdir(c,{recursive:!0});let d=`${a}.tmp.${process.pid}.${++v}`;try{await k.promises.writeFile(d,b),await k.promises.rename(d,a)}catch(a){try{await k.promises.unlink(d)}catch{}throw a}}async function x(a,b){let c=s(a),d=(u.get(a)??Promise.resolve()).catch(()=>{}).then(()=>w(c,JSON.stringify(b,null,2)));u.set(a,d);try{await d,p.verbose(`Successfully saved item to: ${c}`)}catch(b){throw p.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{u.get(a)===d&&u.delete(a)}}async function y(a,b){try{await t();let c=s(a),d=await k.promises.readFile(c,"utf-8");if(0===d.trim().length)return p.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return p.verbose(`Successfully loaded item from: ${c}`),a}catch(b){p.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await k.promises.writeFile(a,d),p.info(`Created backup of corrupted file at: ${a}`)}catch(a){p.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return p.verbose(`Item with key "${a}" not found at ${s(a)}, returning default.`),b;throw p.error(`CRITICAL: Error loading item with key "${a}" from ${s(a)}:`,c),c}}var z=c(92347),A=c.n(z);let B=j("utils/encryption/session"),C=global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map),D=j("utils/encryption/secure");class E extends Error{constructor(a="Encryption is locked: user password required to access secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,E.prototype)}}let F="data_encryption_key",G="data_encryption_iv",H="data_encryption_salt",I="encryption_type";var J=function(a){return a.DEFAULT="default",a.USER="user",a}(J||{});function K(){let a=A().enc.Utf8.parse("flujo_fixed_salt_v1");return A().PBKDF2("FLUJO~",a,{keySize:8,iterations:1e5})}function L(a){let b;try{b=a.toString(A().enc.Utf8)}catch{return null}return RegExp("^[0-9a-f]{16}$").test(b)?b:null}async function M(){D.debug("initializeDefaultEncryption: Entering method");try{if(await R())return!0;let a=K(),b=A().lib.WordArray.random(8),c=A().lib.WordArray.random(16),d=A().AES.encrypt(b.toString(),a,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7}),e=A().enc.Utf8.parse("flujo_fixed_salt_v1"),f={[F]:d.toString(),[G]:c.toString(),[H]:e.toString(),encryption_version:1,[I]:"default"};return await x(n.ENCRYPTION_KEY,f),!0}catch(a){return D.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function N(){D.debug("getDefaultDEK: Entering method");try{let a=await y(n.ENCRYPTION_KEY,null);if(!a){if(!await M())return D.error("getDefaultDEK: Failed to initialize default encryption"),null;return await N()}if("default"!==a[I])return D.error("getDefaultDEK: Not using default encryption"),null;let b=a[F],c=A().enc.Hex.parse(a[G]),d=K(),e=A().AES.decrypt(b,d,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(e))return D.error("getDefaultDEK: Failed to decrypt DEK with default key"),null;return A().enc.Hex.parse(e.toString())}catch(a){return D.error("getDefaultDEK: Failed to get default DEK:",a),null}}async function O(a){D.debug("getUserDEK: Entering method");try{let b=await y(n.ENCRYPTION_KEY,null);if(!b)return D.error("getUserDEK: No encryption metadata found"),null;if("user"!==b[I])return D.error("getUserDEK: Not using user encryption"),null;let c=b[F],d=A().enc.Hex.parse(b[G]),e=A().enc.Hex.parse(b[H]),f=A().PBKDF2(a,e,{keySize:8,iterations:1e5}),g=A().AES.decrypt(c,f,{iv:d,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(g))return D.error("getUserDEK: Failed to decrypt DEK with provided password"),null;return A().enc.Hex.parse(g.toString())}catch(a){return D.error("getUserDEK: Failed to get user DEK:",a),null}}async function P(a,b=!1){D.debug("getDEK: Entering method");try{if(b&&a){D.debug("getDEK: Using session token");let b=function(a){let b=C.get(a);if(!b)return B.warn(`Session not found: ${a}`),null;let c=Date.now();return c-b.createdAt>72e5?(B.warn(`Session expired: ${a}`),C.delete(a),null):(b.lastUsed=c,b.dek)}(a);if(b)return A().enc.Hex.parse(b);D.warn("getDEK: Invalid or expired session token, falling back to default encryption")}let c=await y(n.ENCRYPTION_KEY,null);if(!c){if(D.info("getDEK: No encryption metadata found, initializing default encryption"),!await M())return D.error("getDEK: Failed to initialize default encryption"),null;return await P(a,b)}if("user"!==c[I])return await N();{let c=global.__flujo_server_dek??null;if(c)return D.debug("getDEK: Using server unlock state for user encryption"),A().enc.Hex.parse(c);if(a&&!b){let b=await O(a);if(b)return b;D.warn("getDEK: Provided password did not yield a valid user DEK")}throw D.warn("getDEK: User encryption is locked (no unlock state or valid credential)"),new E}}catch(a){if(a instanceof E)throw a;D.error("getDEK: Failed to get DEK:",a);try{if(D.warn("getDEK: Attempting to initialize default encryption as error recovery"),await M())return await N()}catch(a){D.error("getDEK: Failed to initialize default encryption as error recovery:",a)}return null}}async function Q(a,b,c=!1){D.debug("decryptWithPassword: Entering method");try{let d=await P(b,c);if(!d)return null;let e=a.split(":");if(2!==e.length)return D.error("decryptWithPassword: Invalid ciphertext format"),null;let f=A().enc.Hex.parse(e[0]),g=e[1];return A().AES.decrypt(g,d,{iv:f,mode:A().mode.CBC,padding:A().pad.Pkcs7}).toString(A().enc.Utf8)}catch(a){if(a instanceof E)throw a;return D.error("decryptWithPassword: Failed to decrypt data:",a),null}}async function R(){return D.debug("isEncryptionInitialized: Entering method"),null!==await y(n.ENCRYPTION_KEY,null)}var S=c(40410);let T=j("backend/utils/resolveGlobalVars");async function U(a,b={}){T.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await y(n.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);T.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let f={},g=new Set;if(e)for(let[a,b]of Object.entries(d))f[a]=b.value,b.metadata.isSecret&&g.add(a);else f={...d};let h=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==f[b]){let e=f[b];if(!c&&(g.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){T.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){T.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await Q(a);if(c)e=c,T.debug(`Successfully decrypted global variable: ${b}`);else{T.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){T.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){T.warn(`Skipping failed encrypted global variable: ${b}`);continue}T.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else T.warn(`Global variable not found: ${b}`)}return d},i=async a=>{if("string"==typeof a)return await h(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},j=await i(a);return"object"==typeof a&&null!==a&&T.debug("Resolved global variables result:",JSON.stringify(j,null,2)),T.debug("Completed global variable resolution"),j}async function V(a){return U(a,{resolveSecrets:!1})}async function W(a,b=0){if(T.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return T.warn("Empty value provided"),null;if(b>=10)return T.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){T.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await Q(a);if(!d)return T.warn(`Failed to decrypt value at depth ${b}`),null;T.debug(`Successfully decrypted value at depth ${b}`),T.verbose(d),c=d}catch(a){return T.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(T.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){T.debug(`Resolving global variables at depth ${b}`);try{let a=await U(c);if(T.verbose(a),a!==c)return T.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),W(a,b+1);c=a}catch(a){return T.error(`Error resolving global variables at depth ${b}:`,a),null}}return T.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,S.D)([U,V,W]),(0,d.A)(U,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(V,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(W,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},92173:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1539,exports.ids=[1539],exports.modules={2826:(a,b,c)=>{c.d(b,{R:()=>e,j:()=>d});let d="flujo://run/",e={autoCaptureEnabled:!0,textThresholdChars:8192,maxResourceBytes:0x3200000,maxConversationBytes:0x10000000,replaceLargeTextWithStub:!1,toolResultMaxLines:2e3,toolResultMaxBytes:51200,retentionAgeDays:7}},61539:(a,b,c)=>{c.d(b,{Bt:()=>C,FA:()=>E,Ns:()=>v,UC:()=>u,fg:()=>
|
|
1
|
+
"use strict";exports.id=1539,exports.ids=[1539],exports.modules={2826:(a,b,c)=>{c.d(b,{R:()=>e,j:()=>d});let d="flujo://run/",e={autoCaptureEnabled:!0,textThresholdChars:8192,maxResourceBytes:0x3200000,maxConversationBytes:0x10000000,replaceLargeTextWithStub:!1,toolResultMaxLines:2e3,toolResultMaxBytes:51200,retentionAgeDays:7}},61539:(a,b,c)=>{c.d(b,{Bt:()=>C,FA:()=>E,Ns:()=>v,QT:()=>H,UC:()=>u,fg:()=>I,gy:()=>F,iQ:()=>J,jR:()=>x,pz:()=>G,tm:()=>B,wc:()=>K,yP:()=>D});var d=c(29021),e=c(33873),f=c.n(e),g=c(55511),h=c(50846),i=c(43326),j=c(92372),k=c(38844),l=c(2826);let m=(0,h.h)("backend/services/runResources"),n=f().join((0,i.getDataDir)(),"db","run-resources"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a,b){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe run-resource ${b}: ${JSON.stringify(a)}`)}let q=a=>f().join(n,a),r=a=>f().join(q(a),"index.json"),s=(a,b)=>f().join(q(a),`${b}.dat`),t=a=>`run-resources/${a}`;function u(a,b){return`${l.j}${a}/${b}`}function v(a){if("string"!=typeof a||!a.startsWith(l.j))return null;let b=a.slice(l.j.length).split("/");if(2!==b.length)return null;let[c,d]=b;return o.test(c)&&o.test(d)?{conversationId:c,id:d}:null}let w=null;async function x(){let a;if(w&&Date.now()-w.at<3e4)return w.value;try{let b=await (0,j.loadItem)(k.Z.RUN_RESOURCE_SETTINGS,l.R);a={...l.R,...b}}catch(b){m.warn("Failed to load run-resource settings; using defaults",b),a=l.R}return w={value:a,at:Date.now()},a}let y=global.__flujo_run_resources??(global.__flujo_run_resources=new Map);async function z(a){let b=y.get(a);if(b)return b;let c=[];try{let b=await d.promises.readFile(r(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&m.error(`Failed to read run-resource index for ${a}; treating as empty`,b)}return y.set(a,c),c}async function A(a,b){return(0,j.l_)(t(a),async()=>{let c=await z(a),{next:d,result:e}=await b(c);return d!==c&&(y.set(a,d),await (0,j.Zf)(r(a),JSON.stringify(d,null,2))),e})}async function B(a){let b;p(a.conversationId,"conversationId");let c=await x(),e=null,f="utf8";a.data&&("text"in a.data?(e=Buffer.from(a.data.text,"utf8"),f="utf8"):(e=Buffer.from(a.data.base64,"base64"),f="base64"));let h=e?.byteLength??0;if(h>c.maxResourceBytes)return m.warn(`Run-resource write skipped (size ${h} > cap ${c.maxResourceBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"size-cap"};let i=(0,g.randomUUID)(),j=await A(a.conversationId,async j=>{let k=a.name?j.find(b=>b.name===a.name):void 0,l=j.reduce((a,b)=>a+(b===k?0:b.size),0);if(l+h>c.maxConversationBytes)return m.warn(`Run-resource write skipped (conversation budget ${l}+${h} > ${c.maxConversationBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{next:j,result:{skipped:"conversation-cap"}};let n={id:i,uri:u(a.conversationId,i),conversationId:a.conversationId,name:a.name,mimeType:a.mimeType,size:h,sha256:e?(0,g.createHash)("sha256").update(e).digest("hex"):void 0,kind:a.kind,encoding:f,createdAt:Date.now(),producedBy:a.producedBy,origin:a.origin,archive:a.archive,readBy:[],verifications:[]};e&&(await d.promises.mkdir(q(a.conversationId),{recursive:!0}),await d.promises.writeFile(s(a.conversationId,i),e));let o=k?j.filter(a=>a!==k):j.slice();return o.push(n),b=k&&k.size>0?k:void 0,m.debug(`Stored run resource ${n.uri}`,{kind:n.kind,size:h,name:n.name}),{next:o,result:n}});return b&&d.promises.unlink(s(a.conversationId,b.id)).catch(()=>{}),j}async function C(a){return p(a,"conversationId"),(await z(a)).slice()}async function D(a=200,b=0){let c=[];try{c=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return[];throw a}let e=[];for(let a of c)e.push(...await z(a));return e.sort((a,b)=>b.createdAt-a.createdAt),e.slice(Math.max(0,b),Math.max(0,b)+Math.max(0,a))}async function E(a,b){return p(a,"conversationId"),(await z(a)).find(a=>a.name===b)??null}async function F(a,b){let c,e=v(a);if(!e)return null;let f=(await z(e.conversationId)).find(a=>a.id===e.id);if(!f)return null;if("link"===f.kind)c={contents:[{uri:f.uri,mimeType:f.mimeType??"text/plain",text:`Run resource link → ${f.origin?`${f.origin.server}: ${f.origin.uri}`:"unknown origin"}`}]};else{let b;try{b=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}c="utf8"===f.encoding?{contents:[{uri:f.uri,mimeType:f.mimeType??"text/plain",text:b.toString("utf8")}]}:{contents:[{uri:f.uri,mimeType:f.mimeType??"application/octet-stream",blob:b.toString("base64")}]}}if(b)try{await A(e.conversationId,async a=>{let c=a.find(a=>a.id===e.id);if(!c)return{next:a,result:void 0};let d={...c,readBy:[...c.readBy,b]};return{next:a.map(a=>a===c?d:a),result:void 0}}),f.readBy.push(b)}catch(b){m.warn(`Failed to persist readBy for ${a}`,b)}return{entry:f,contents:c}}async function G(a){let b;p(a.conversationId,"conversationId");let c=await F(a.uri);if(!c)return null;if(c.entry.conversationId===a.conversationId)return c.entry;let d=c.contents.contents[0];if("link"!==c.entry.kind)if("string"==typeof d?.text)b={text:d.text};else{if("string"!=typeof d?.blob)return m.warn(`Run-resource copy has no readable payload: ${a.uri}`),null;b={base64:d.blob}}return B({conversationId:a.conversationId,name:a.name,mimeType:c.entry.mimeType,kind:c.entry.kind,data:b,producedBy:a.producedBy,origin:"link"===c.entry.kind?c.entry.origin:{server:"flujo",uri:c.entry.uri},archive:c.entry.archive})}async function H(a){let b=v(a);if(!b)return null;let c=(await z(b.conversationId)).find(a=>a.id===b.id);if(!c||"link"===c.kind||c.size<=0)return null;let e=f().resolve(s(b.conversationId,b.id));try{return await d.promises.access(e),e}catch{return null}}async function I(a,b){let c,e=v(a);if(!e)return null;let f=(await z(e.conversationId)).find(a=>a.id===e.id);if(!f||"link"===f.kind)return null;try{c=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}let h=(0,g.createHash)("sha256").update(c).digest("hex"),i=b.expectedSha256?.trim().toLowerCase(),j=i?{expectedSha256:i,actualSha256:h,ok:i===h}:void 0,k=Math.max(1,Math.min(2e5,Math.floor(b.maxChars??5e4))),l="utf8"===f.encoding?c.toString("utf8"):`[binary run resource ${f.mimeType??f.kind} (${f.size} bytes) at ${f.uri}]`,n=l.slice(0,k);try{await A(e.conversationId,async a=>{let c=a.find(a=>a.id===e.id);if(!c)return{next:a,result:void 0};let d={...c,readBy:[...c.readBy,b.access],verifications:j?[...c.verifications??[],{at:b.access.at,expectedSha256:j.expectedSha256,actualSha256:j.actualSha256,ok:j.ok,source:b.access.source,nodeId:b.access.nodeId}]:c.verifications};return{next:a.map(a=>a===c?d:a),result:void 0}})}catch(b){m.warn(`Failed to persist bounded read lineage for ${a}`,b)}return{entry:f,content:n,truncated:l.length>n.length,verification:j}}async function J(a){p(a,"conversationId"),y.delete(a),await (0,j.l_)(t(a),async()=>{try{await d.promises.rm(q(a),{recursive:!0,force:!0}),m.debug(`Deleted run resources for conversation ${a}`)}catch(b){m.warn(`Failed to delete run resources for ${a}`,b)}})}async function K(a=Date.now()){let b=(await x()).retentionAgeDays??0;if(!b||b<=0)return{removed:0};let c=a-864e5*b,e=[];try{e=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return{removed:0};throw a}let f=0;for(let a of e){let b=[];for(let e of(await A(a,async a=>{let d=a.filter(a=>{let d=a.createdAt<c;return d&&b.push(a),!d});return d.length===a.length?{next:a,result:void 0}:{next:d,result:void 0}}),b))e.size>0&&await d.promises.unlink(s(a,e.id)).catch(()=>{}),f++}return f>0&&m.debug(`Retention sweep removed ${f} run resource(s) older than ${b}d`),{removed:f}}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=2069,exports.ids=[2069],exports.modules={2560:(a,b,c)=>{"use strict";c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},7329:(a,b,c)=>{"use strict";c.d(b,{Az:()=>e,FM:()=>d,Je:()=>g,po:()=>f,yF:()=>h});let d="folder";function e(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function f(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function g(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let f=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&f.push({key:"folder:__ungrouped__",label:c,items:e}),f}function h(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}},43010:()=>{},50551:(a,b,c)=>{"use strict";c.d(b,{Ay:()=>t});var d=c(21124),e=c(38301),f=c.n(e),g=c(81637),h=c(54573),i=c(79515),j=c(90647),k=c(74576),l=c(49257),m=c(80518);function n(a,b){let c=b.toLocaleLowerCase(),d=new Set;return a.filter(a=>!d.has(a.value)&&(d.add(a.value),`${a.label} ${a.name} ${a.server} ${a.description??""}`.toLocaleLowerCase().includes(c))).sort((a,b)=>{let c={tool:0,resource:1,global:2,runres:3};return c[a.kind]-c[b.kind]||a.label.localeCompare(b.label)})}function o(a){let b=a.split("\n").map(a=>({type:"paragraph",children:(a=>{let b=(0,m.sE)(a);if(0===b.length)return[{text:a}];let c=[],d=0;for(let e of b)e.index>d&&c.push({text:a.slice(d,e.index)}),c.push({type:"binding-reference",kind:e.kind,server:e.server,name:e.name,children:[{text:""}]}),d=e.index+e.fullMatch.length;return d<a.length&&c.push({text:a.slice(d)}),c})(a)}));return b.length>0?b:[{type:"paragraph",children:[{text:""}]}]}function p(a){return a.map(a=>(a.children||[]).map(a=>j.EY.isText(a)?a.text:(0,m.Pj)(a.kind,a.server,a.name)).join("")).join("\n")}c(43010);let q=(a,b)=>{a.selection||j.gB.select(a,j.KE.end(a,[])),j.gB.insertNodes(a,(a=>({type:"binding-reference",kind:a.kind,server:a.server,name:a.name,children:[{text:""}]}))(b)),j.gB.move(a)},r=({element:a,disabled:b,invalid:c})=>{let e=(0,l.Zi)(),f="tool"===a.kind&&"handoff"===a.server,g="global"===a.kind?"global":"runres"===a.kind?"runres":"resource"===a.kind?"resource":f?"handoff":"",h=()=>{b||(j.gB.removeNodes(e,{at:l.rL.findPath(e,a)}),l.rL.focus(e))};return(0,d.jsxs)("span",{contentEditable:!1,className:`tool-reference-container ${g}${c?" invalid":""}`,title:c?"This reference is not available in the current context":void 0,"aria-invalid":c||void 0,children:[(0,d.jsx)("span",{className:`tool-reference ${g}${c?" invalid":""}`,children:(0,m.CN)(a)}),!b&&(0,d.jsx)("span",{className:`tool-reference-delete ${g}`,role:"button","aria-label":`Remove ${(0,m.CN)(a)}`,tabIndex:0,onClick:a=>{a.preventDefault(),a.stopPropagation(),h()},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),a.stopPropagation(),h())},children:"\xd7"})]})},s=(0,e.forwardRef)(({value:a,onChange:b,globalNames:c=[],suggestions:s,placeholder:t,disabled:u=!1,multiline:v=!0,minRows:w=1,maxRows:x,autoFocus:y=!1,bare:z=!1,ariaLabel:A,dataTour:B,containerSx:C,onKeyDown:D,onPaste:E},F)=>{let G=(0,e.useMemo)(()=>(0,k.$k)((a=>{let{isInline:b,isVoid:c,insertData:d,insertText:e}=a;return a.isInline=a=>"binding-reference"===a.type||b(a),a.isVoid=a=>"binding-reference"===a.type||c(a),a.insertText=b=>{e(b),b.includes("}")&&(a=>{if(!a.selection||!j.Q6.isCollapsed(a.selection))return;let b=a.selection.anchor,c=j.bP.get(a,b.path);if(!j.EY.isText(c))return;let d=c.text.slice(0,b.offset).match(/\$\{global:([^}\r\n]+)\}$/);if(!d||void 0===d.index)return;let e=(0,m.y4)(d[0]);e&&(j.gB.select(a,{anchor:{path:b.path,offset:d.index},focus:b}),j.gB.delete(a),q(a,e))})(a)},a.insertData=b=>{let c=b.getData("text/plain");if(c&&(0,m.sE)(c).length>0)return void j.gB.insertFragment(a,o(c));d(b)},a})((0,l.o$)((0,j.ie)()))),[]),H=(0,e.useMemo)(()=>o(a||""),[]),[I,J]=(0,e.useState)(null),[K,L]=(0,e.useState)(0),[M,N]=(0,e.useState)(0),O=(0,e.useRef)(!1),P=(0,e.useMemo)(()=>n([...s??[],...c.map(a=>(0,m.Ub)({kind:"global",server:"",name:a},a))],""),[c,s]),Q=(0,e.useMemo)(()=>s?new Set(P.map(a=>a.value)):null,[P,s]),R=(0,e.useCallback)(()=>{if(!G.selection||!j.Q6.isCollapsed(G.selection))return void J(null);let a=G.selection.anchor,b=j.bP.get(G,a.path);if(!j.EY.isText(b))return void J(null);let c=function(a,b=a.length){let c=a.slice(0,b).match(/(?:^|\s)@([^\s@{}]*)$/);if(!c||void 0===c.index)return null;let d=c.index+ +!c[0].startsWith("@");return{query:c[1],start:d,end:b}}(b.text,a.offset),d=function(a,b=a.length){let c=a.slice(0,b).match(/\$\{global:([^{}\r\n]*)$/);return c&&void 0!==c.index?{query:c[1],start:c.index,end:b}:null}(b.text,a.offset),e=c??d;if(!e)return void J(null);let f=c?"at":"global",g=n("at"===f?P:P.filter(a=>"global"===a.kind),e.query);L(0),J({...e,mode:f,items:g,range:{anchor:{path:a.path,offset:e.start},focus:a}})},[G,P]),S=(0,e.useCallback)(a=>{if(!I)return;j.gB.select(G,I.range),j.gB.delete(G);let b=(0,m.y4)(a.value);b&&q(G,b),J(null),l.rL.focus(G)},[I,G]);(0,e.useImperativeHandle)(F,()=>({insertText:a=>{let c=(0,m.y4)(a);c?q(G,c):G.insertText(a),b(p(G.children)),l.rL.focus(G)},focus:()=>l.rL.focus(G)}),[G,b]),(0,e.useEffect)(()=>{p(G.children)!==p(o(a||""))&&(O.current=!0,G.children=o(a||""),G.selection=null,G.onChange(),N(a=>a+1))},[G,a]);let T=(0,e.useCallback)(a=>{if(O.current){O.current=!1;return}b(p(a)),R()},[b,R]),U=(0,e.useCallback)(({attributes:a,children:b,element:c})=>{if("binding-reference"===c.type){let e=(0,m.Pj)(c.kind,c.server,c.name);return(0,d.jsxs)("span",{...a,className:"tool-reference-wrapper",children:[(0,d.jsx)(r,{element:c,disabled:u,invalid:null!==Q&&!Q.has(e)}),b]})}return(0,d.jsx)("p",{...a,children:b})},[u,Q]),V=`${1.5*Math.max(1,w)}em`,W=x?`${1.5*Math.max(w,x)}em`:void 0;return(0,d.jsxs)(g.default,{sx:{position:"relative",width:"100%",...C},"data-revision":M,children:[(0,d.jsx)(g.default,{className:z?"global-reference-editor bare":"global-reference-editor",sx:{border:z?"none":"1px solid",borderColor:"rgba(0, 0, 0, 0.23)",borderRadius:+!z,px:1.75*!z,py:+!z,bgcolor:u?"action.disabledBackground":"background.paper","&:focus-within":z?{}:{borderColor:"primary.main",borderWidth:2,px:"13px",py:"7px"}},children:(0,d.jsx)(l.A,{editor:G,initialValue:H,onChange:T,children:(0,d.jsx)(l.Fo,{className:"slate-editor global-reference-editable",renderElement:U,placeholder:t,readOnly:u,autoFocus:y,"aria-label":A,"data-tour":B,role:"textbox","aria-multiline":v,onKeyDown:a=>{if(I){if("ArrowDown"===a.key&&I.items.length>0){a.preventDefault(),L(a=>(a+1)%I.items.length);return}if("ArrowUp"===a.key&&I.items.length>0){a.preventDefault(),L(a=>(a-1+I.items.length)%I.items.length);return}if(("Enter"===a.key||"Tab"===a.key)&&I.items[K]){a.preventDefault(),S(I.items[K]);return}if("Escape"===a.key){a.preventDefault(),a.stopPropagation(),J(null);return}}if(!v&&"Enter"===a.key)return void a.preventDefault();D?.(a)},onPaste:E,style:{minHeight:V,maxHeight:W,overflowY:W?"auto":void 0,whiteSpace:v?"pre-wrap":"nowrap"}})})}),I&&(0,d.jsx)(h.A,{elevation:8,role:"listbox","aria-label":"at"===I.mode?"Available references":"Global variables",sx:{position:"absolute",zIndex:1500,top:"100%",left:0,right:0,mt:.5,maxHeight:240,overflowY:"auto"},children:0===I.items.length?(0,d.jsx)(g.default,{sx:{px:1.5,py:1.25},children:(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:"No matching references"})}):I.items.map((a,b)=>{let c=I.items[b-1]?.kind,e="tool"===a.kind?"Tools":"resource"===a.kind?"Resources":"global"===a.kind?"Globals":"Temporary data";return(0,d.jsxs)(f().Fragment,{children:[a.kind!==c&&(0,d.jsx)(i.A,{component:"div",variant:"overline",sx:{px:1.5,pt:0===b?.75:1.25,color:"text.secondary"},children:e}),(0,d.jsxs)(g.default,{role:"option","aria-selected":b===K,onMouseDown:b=>{b.preventDefault(),S(a)},sx:{px:1.5,py:1,cursor:"pointer",bgcolor:b===K?"action.selected":"background.paper","&:hover":{bgcolor:"action.hover"}},children:[(0,d.jsx)(i.A,{component:"div",sx:{fontFamily:"monospace",fontSize:14},children:a.label}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{wordBreak:"break-all"},children:a.description||a.value})]})]},a.value)})})]})});s.displayName="GlobalReferenceEditor";let t=s},59737:(a,b,c)=>{"use strict";c.d(b,{A:()=>m});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467);let m=({label:a,count:b,expanded:c,onToggle:m,showFolderIcon:n=!1,children:o})=>{let p=(0,e.A)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:m,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:p.palette.background.default,border:`1px solid ${p.palette.divider}`,"&:hover":{backgroundColor:p.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":c?"Collapse section":"Expand section",onClick:a=>{a.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),n&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.A,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:o})})]})}},64535:(a,b,c)=>{"use strict";c.d(b,{A$:()=>j,X8:()=>g,YP:()=>k,js:()=>i});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a,b,c){return`\${${a}:${b}__${c}}`}function h(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}function i(a){return a.startsWith("${")&&a.endsWith("}")?h(a.slice(2,-1)):null}function j(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=h(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}function k(a){var b,c;return"tool"===a.kind&&"handoff"===a.server?`handoff:${a.name}`:`${a.kind}:${b=a.server,c=a.name,`${b}__${c}`}`}},78352:(a,b,c)=>{"use strict";c.d(b,{A:()=>u});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354);let u=({anchorEl:a,open:b,currentFolder:c,folders:u,onClose:v,onAssign:w})=>{let[x,y]=(0,e.useState)(!1),[z,A]=(0,e.useState)(""),B=a=>{w(a),v()},C=()=>{let a=z.trim();a&&(y(!1),B(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:v,onClick:a=>a.stopPropagation(),children:[u.length>0&&u.map(a=>(0,d.jsxs)(g.A,{onClick:()=>B(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),u.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{A(""),y(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"New folder…"})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>B(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,d.jsxs)(k.A,{open:x,onClose:()=>y(!1),maxWidth:"xs",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsx)(l.A,{children:"New folder"}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),C())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>y(!1),children:"Cancel"}),(0,d.jsx)(p.A,{variant:"contained",disabled:!z.trim(),onClick:C,children:"Create"})]})]})]})}},80518:(a,b,c)=>{"use strict";c.d(b,{CN:()=>k,Pj:()=>i,Ub:()=>j,jX:()=>l,sE:()=>g,y4:()=>h});var d=c(64535);let e=/\$\{res:([^}]+)\}/g,f=/\$\{global:([^}]+)\}/g;function g(a){let b,c=(0,d.A$)(a).map(a=>({kind:a.kind,server:a.server,name:a.name,fullMatch:a.fullMatch,index:a.index}));for(e.lastIndex=0;null!==(b=e.exec(a));)c.push({kind:"runres",server:"",name:b[1],fullMatch:b[0],index:b.index});for(f.lastIndex=0;null!==(b=f.exec(a));)c.push({kind:"global",server:"",name:b[1],fullMatch:b[0],index:b.index});return c.sort((a,b)=>a.index-b.index)}function h(a){if(a.startsWith("${res:")&&a.endsWith("}")){let b=a.slice(6,-1);return b?{kind:"runres",server:"",name:b}:null}if(a.startsWith("${global:")&&a.endsWith("}")){let b=a.slice(9,-1);return b?{kind:"global",server:"",name:b}:null}let b=(0,d.js)(a);return b?{kind:b.kind,server:b.server,name:b.name}:null}function i(a,b,c){return"runres"===a?`\${res:${c}}`:"global"===a?`\${global:${c}}`:(0,d.X8)(a,b,c)}function j(a,b=a.name,c){return{...a,label:b,value:i(a.kind,a.server,a.name),description:c}}function k(a){return"runres"===a.kind?`res:${a.name}`:"global"===a.kind?`global:${a.name}`:(0,d.YP)({kind:a.kind,server:a.server,name:a.name})}function l(a){let b=new Set;for(let c of a){let a;if("string"==typeof c&&0!==c.length)for(e.lastIndex=0;null!==(a=e.exec(c));){let c=a[1].trim();c&&b.add(c)}}return[...b].sort((a,b)=>a.localeCompare(b))}}};
|
|
1
|
+
exports.id=2069,exports.ids=[2069],exports.modules={2560:(a,b,c)=>{"use strict";c.d(b,{Aq:()=>e,Xk:()=>g,vi:()=>f});var d=c(38301);function e(a,b){return b}function f(a,b){}function g(a,b){let[c,e]=(0,d.useState)(()=>b);return[c,(0,d.useCallback)(b=>{e(c=>{let d="function"==typeof b?b(c):b;return f(a,d),d})},[a])]}},7329:(a,b,c)=>{"use strict";c.d(b,{Az:()=>e,FM:()=>d,Je:()=>g,po:()=>f,yF:()=>h});let d="folder";function e(a,b){let c=[],d=new Map;for(let e of a){let{key:a,label:f}=b(e),g=d.get(a);g||(g={key:a,label:f,items:[]},d.set(a,g),c.push(g)),g.items.push(e)}return c}function f(a){let b=(a??"").trim().charAt(0).toUpperCase();return b>="A"&&b<="Z"?{key:`letter:${b}`,label:b}:{key:"letter:#",label:"#"}}function g(a,b,c="Ungrouped"){let d=new Map,e=[];for(let c of a){let a=b(c)?.trim();if(a){let b=d.get(a);b?b.push(c):d.set(a,[c])}else e.push(c)}let f=Array.from(d.keys()).sort((a,b)=>a.localeCompare(b)).map(a=>({key:`folder:${a}`,label:a,items:d.get(a)}));return e.length>0&&f.push({key:"folder:__ungrouped__",label:c,items:e}),f}function h(a,b){let c=new Set;for(let d of a){let a=b(d)?.trim();a&&c.add(a)}return Array.from(c).sort((a,b)=>a.localeCompare(b))}},43010:()=>{},50551:(a,b,c)=>{"use strict";c.d(b,{Ay:()=>u});var d=c(21124),e=c(38301),f=c.n(e),g=c(81637),h=c(54573),i=c(79515),j=c(90647),k=c(74576),l=c(49257),m=c(80518);c(43010);var n=c(18305);function o(a,b){let c=b.toLocaleLowerCase(),d=new Set;return a.filter(a=>!d.has(a.value)&&(d.add(a.value),`${a.label} ${a.name} ${a.server} ${a.description??""}`.toLocaleLowerCase().includes(c))).sort((a,b)=>{let c={tool:0,resource:1,global:2,runres:3};return c[a.kind]-c[b.kind]||a.label.localeCompare(b.label)})}function p(a){let b=a.split("\n").map(a=>({type:"paragraph",children:(a=>{let b=(0,m.sE)(a);if(0===b.length)return[{text:a}];let c=[],d=0;for(let e of b)e.index>d&&c.push({text:a.slice(d,e.index)}),c.push({type:"binding-reference",kind:e.kind,server:e.server,name:e.name,children:[{text:""}]}),d=e.index+e.fullMatch.length;return d<a.length&&c.push({text:a.slice(d)}),c})(a)}));return b.length>0?b:[{type:"paragraph",children:[{text:""}]}]}function q(a){return a.map(a=>(a.children||[]).map(a=>j.EY.isText(a)?a.text:(0,m.Pj)(a.kind,a.server,a.name)).join("")).join("\n")}let r=(a,b)=>{a.selection||j.gB.select(a,j.KE.end(a,[])),j.gB.insertNodes(a,(a=>({type:"binding-reference",kind:a.kind,server:a.server,name:a.name,children:[{text:""}]}))(b)),j.gB.move(a)},s=({element:a,disabled:b,invalid:c})=>{let e=(0,l.Zi)(),{t:f}=(0,n.s9)(),g="tool"===a.kind&&"handoff"===a.server,h="global"===a.kind?"global":"runres"===a.kind?"runres":"resource"===a.kind?"resource":g?"handoff":"",i=()=>{b||(j.gB.removeNodes(e,{at:l.rL.findPath(e,a)}),l.rL.focus(e))};return(0,d.jsxs)("span",{contentEditable:!1,className:`tool-reference-container ${h}${c?" invalid":""}`,title:c?f("references.invalid"):void 0,"aria-invalid":c||void 0,children:[(0,d.jsx)("span",{className:`tool-reference ${h}${c?" invalid":""}`,children:(0,m.CN)(a)}),!b&&(0,d.jsx)("span",{className:`tool-reference-delete ${h}`,role:"button","aria-label":f("references.remove",{name:(0,m.CN)(a)}),tabIndex:0,onClick:a=>{a.preventDefault(),a.stopPropagation(),i()},onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),a.stopPropagation(),i())},children:"\xd7"})]})},t=(0,e.forwardRef)(({value:a,onChange:b,globalNames:c=[],suggestions:t,placeholder:u,disabled:v=!1,multiline:w=!0,minRows:x=1,maxRows:y,autoFocus:z=!1,bare:A=!1,ariaLabel:B,dataTour:C,containerSx:D,onKeyDown:E,onPaste:F},G)=>{let{t:H}=(0,n.s9)(),I=(0,e.useMemo)(()=>(0,k.$k)((a=>{let{isInline:b,isVoid:c,insertData:d,insertText:e}=a;return a.isInline=a=>"binding-reference"===a.type||b(a),a.isVoid=a=>"binding-reference"===a.type||c(a),a.insertText=b=>{e(b),b.includes("}")&&(a=>{if(!a.selection||!j.Q6.isCollapsed(a.selection))return;let b=a.selection.anchor,c=j.bP.get(a,b.path);if(!j.EY.isText(c))return;let d=c.text.slice(0,b.offset).match(/\$\{global:([^}\r\n]+)\}$/);if(!d||void 0===d.index)return;let e=(0,m.y4)(d[0]);e&&(j.gB.select(a,{anchor:{path:b.path,offset:d.index},focus:b}),j.gB.delete(a),r(a,e))})(a)},a.insertData=b=>{let c=b.getData("text/plain");if(c&&(0,m.sE)(c).length>0)return void j.gB.insertFragment(a,p(c));d(b)},a})((0,l.o$)((0,j.ie)()))),[]),J=(0,e.useMemo)(()=>p(a||""),[]),[K,L]=(0,e.useState)(null),[M,N]=(0,e.useState)(0),[O,P]=(0,e.useState)(0),Q=(0,e.useRef)(!1),R=(0,e.useMemo)(()=>o([...t??[],...c.map(a=>(0,m.Ub)({kind:"global",server:"",name:a},a))],""),[c,t]),S=(0,e.useMemo)(()=>t?new Set(R.map(a=>a.value)):null,[R,t]),T=(0,e.useCallback)(()=>{if(!I.selection||!j.Q6.isCollapsed(I.selection))return void L(null);let a=I.selection.anchor,b=j.bP.get(I,a.path);if(!j.EY.isText(b))return void L(null);let c=function(a,b=a.length){let c=a.slice(0,b).match(/(?:^|\s)@([^\s@{}]*)$/);if(!c||void 0===c.index)return null;let d=c.index+ +!c[0].startsWith("@");return{query:c[1],start:d,end:b}}(b.text,a.offset),d=function(a,b=a.length){let c=a.slice(0,b).match(/\$\{global:([^{}\r\n]*)$/);return c&&void 0!==c.index?{query:c[1],start:c.index,end:b}:null}(b.text,a.offset),e=c??d;if(!e)return void L(null);let f=c?"at":"global",g=o("at"===f?R:R.filter(a=>"global"===a.kind),e.query);N(0),L({...e,mode:f,items:g,range:{anchor:{path:a.path,offset:e.start},focus:a}})},[I,R]),U=(0,e.useCallback)(a=>{if(!K)return;j.gB.select(I,K.range),j.gB.delete(I);let b=(0,m.y4)(a.value);b&&r(I,b),L(null),l.rL.focus(I)},[K,I]);(0,e.useImperativeHandle)(G,()=>({insertText:a=>{let c=(0,m.y4)(a);c?r(I,c):I.insertText(a),b(q(I.children)),l.rL.focus(I)},focus:()=>l.rL.focus(I)}),[I,b]),(0,e.useEffect)(()=>{q(I.children)!==q(p(a||""))&&(Q.current=!0,I.children=p(a||""),I.selection=null,I.onChange(),P(a=>a+1))},[I,a]);let V=(0,e.useCallback)(a=>{if(Q.current){Q.current=!1;return}b(q(a)),T()},[b,T]),W=(0,e.useCallback)(({attributes:a,children:b,element:c})=>{if("binding-reference"===c.type){let e=(0,m.Pj)(c.kind,c.server,c.name);return(0,d.jsxs)("span",{...a,className:"tool-reference-wrapper",children:[(0,d.jsx)(s,{element:c,disabled:v,invalid:null!==S&&!S.has(e)}),b]})}return(0,d.jsx)("p",{...a,children:b})},[v,S]),X=`${1.5*Math.max(1,x)}em`,Y=y?`${1.5*Math.max(x,y)}em`:void 0;return(0,d.jsxs)(g.default,{sx:{position:"relative",width:"100%",...D},"data-revision":O,children:[(0,d.jsx)(g.default,{className:A?"global-reference-editor bare":"global-reference-editor",sx:{border:A?"none":"1px solid",borderColor:"rgba(0, 0, 0, 0.23)",borderRadius:+!A,px:1.75*!A,py:+!A,bgcolor:v?"action.disabledBackground":"background.paper","&:focus-within":A?{}:{borderColor:"primary.main",borderWidth:2,px:"13px",py:"7px"}},children:(0,d.jsx)(l.A,{editor:I,initialValue:J,onChange:V,children:(0,d.jsx)(l.Fo,{className:"slate-editor global-reference-editable",renderElement:W,placeholder:u,readOnly:v,autoFocus:z,"aria-label":B,"data-tour":C,role:"textbox","aria-multiline":w,onKeyDown:a=>{if(K){if("ArrowDown"===a.key&&K.items.length>0){a.preventDefault(),N(a=>(a+1)%K.items.length);return}if("ArrowUp"===a.key&&K.items.length>0){a.preventDefault(),N(a=>(a-1+K.items.length)%K.items.length);return}if(("Enter"===a.key||"Tab"===a.key)&&K.items[M]){a.preventDefault(),U(K.items[M]);return}if("Escape"===a.key){a.preventDefault(),a.stopPropagation(),L(null);return}}if(!w&&"Enter"===a.key)return void a.preventDefault();E?.(a)},onPaste:F,style:{minHeight:X,maxHeight:Y,overflowY:Y?"auto":void 0,whiteSpace:w?"pre-wrap":"nowrap"}})})}),K&&(0,d.jsx)(h.A,{elevation:8,role:"listbox","aria-label":"at"===K.mode?H("references.available"):H("references.globals"),sx:{position:"absolute",zIndex:1500,top:"100%",left:0,right:0,mt:.5,maxHeight:240,overflowY:"auto"},children:0===K.items.length?(0,d.jsx)(g.default,{sx:{px:1.5,py:1.25},children:(0,d.jsx)(i.A,{variant:"body2",color:"text.secondary",children:H("references.none")})}):K.items.map((a,b)=>{let c=K.items[b-1]?.kind,e="tool"===a.kind?H("references.tools"):"resource"===a.kind?H("references.resources"):"global"===a.kind?H("references.globals"):H("references.temporaryData");return(0,d.jsxs)(f().Fragment,{children:[a.kind!==c&&(0,d.jsx)(i.A,{component:"div",variant:"overline",sx:{px:1.5,pt:0===b?.75:1.25,color:"text.secondary"},children:e}),(0,d.jsxs)(g.default,{role:"option","aria-selected":b===M,onMouseDown:b=>{b.preventDefault(),U(a)},sx:{px:1.5,py:1,cursor:"pointer",bgcolor:b===M?"action.selected":"background.paper","&:hover":{bgcolor:"action.hover"}},children:[(0,d.jsx)(i.A,{component:"div",sx:{fontFamily:"monospace",fontSize:14},children:a.label}),(0,d.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{wordBreak:"break-all"},children:a.description||a.value})]})]},a.value)})})]})});t.displayName="GlobalReferenceEditor";let u=t},59737:(a,b,c)=>{"use strict";c.d(b,{A:()=>n});var d=c(21124);c(38301);var e=c(60839),f=c(81637),g=c(44079),h=c(79515),i=c(41893),j=c(99561),k=c(17332),l=c(18467),m=c(18305);let n=({label:a,count:b,expanded:c,onToggle:n,showFolderIcon:o=!1,children:p})=>{let q=(0,e.A)(),{t:r}=(0,m.s9)();return(0,d.jsxs)(f.default,{sx:{mb:1.5},children:[(0,d.jsxs)(f.default,{role:"button",tabIndex:0,"aria-expanded":c,onClick:n,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),n())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:q.palette.background.default,border:`1px solid ${q.palette.divider}`,"&:hover":{backgroundColor:q.palette.action.hover}},children:[(0,d.jsx)(g.A,{size:"small","aria-label":r(c?"common.collapseSection":"common.expandSection"),onClick:a=>{a.stopPropagation(),n()},sx:{transition:"transform 0.2s",transform:c?"rotate(0deg)":"rotate(-90deg)"},children:(0,d.jsx)(k.A,{fontSize:"small"})}),o&&(0,d.jsx)(l.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,d.jsx)(h.A,{variant:"subtitle2",sx:{fontWeight:600},children:a}),(0,d.jsx)(i.A,{label:b,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(j.A,{in:c,unmountOnExit:!0,children:(0,d.jsx)(f.default,{sx:{pt:1.5},children:p})})]})}},64535:(a,b,c)=>{"use strict";c.d(b,{A$:()=>j,X8:()=>g,YP:()=>k,js:()=>i});let d="_-_-_",e=/^(tool|resource):(.+)$/,f=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function g(a,b,c){return`\${${a}:${b}__${c}}`}function h(a){let b=e.exec(a);if(b){let a=b[1],c=function(a){let b=a.indexOf("__");if(b<=0)return null;let c=a.slice(b+2);return c?{server:a.slice(0,b),name:c}:null}(b[2]);return c?{kind:a,server:c.server,name:c.name}:null}if(a.startsWith(d)){let b=a.split(d);if(3===b.length&&b[1]&&b[2])return{kind:"tool",server:b[1],name:b[2]}}return null}function i(a){return a.startsWith("${")&&a.endsWith("}")?h(a.slice(2,-1)):null}function j(a){let b,c=[];for(f.lastIndex=0;null!==(b=f.exec(a));){let a=h(b[1]);a&&c.push({...a,fullMatch:b[0],index:b.index})}return c}function k(a){var b,c;return"tool"===a.kind&&"handoff"===a.server?`handoff:${a.name}`:`${a.kind}:${b=a.server,c=a.name,`${b}__${c}`}`}},78352:(a,b,c)=>{"use strict";c.d(b,{A:()=>v});var d=c(21124),e=c(38301),f=c(7118),g=c(94367),h=c(50553),i=c(84233),j=c(91059),k=c(40512),l=c(83899),m=c(52327),n=c(37674),o=c(19925),p=c(68730),q=c(36698),r=c(18467),s=c(31973),t=c(354),u=c(18305);let v=({anchorEl:a,open:b,currentFolder:c,folders:v,onClose:w,onAssign:x})=>{let{t:y}=(0,u.s9)(),[z,A]=(0,e.useState)(!1),[B,C]=(0,e.useState)(""),D=a=>{x(a),w()},E=()=>{let a=B.trim();a&&(A(!1),D(a))};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(f.A,{anchorEl:a,open:b,onClose:w,onClick:a=>a.stopPropagation(),children:[v.length>0&&v.map(a=>(0,d.jsxs)(g.A,{onClick:()=>D(a),selected:a===c,children:[(0,d.jsx)(h.A,{children:a===c?(0,d.jsx)(q.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:a})]},a)),v.length>0&&(0,d.jsx)(j.A,{}),(0,d.jsxs)(g.A,{onClick:()=>{C(""),A(!0)},children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(s.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:y("folderAssign.newAction")})]}),c&&(0,d.jsxs)(g.A,{onClick:()=>D(void 0),children:[(0,d.jsx)(h.A,{children:(0,d.jsx)(t.A,{fontSize:"small"})}),(0,d.jsx)(i.A,{primary:y("folderAssign.remove")})]})]}),(0,d.jsxs)(k.A,{open:z,onClose:()=>A(!1),maxWidth:"xs",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsx)(l.A,{children:y("folderAssign.newTitle")}),(0,d.jsx)(m.A,{children:(0,d.jsx)(n.A,{autoFocus:!0,margin:"dense",label:y("folderAssign.name"),fullWidth:!0,value:B,onChange:a=>C(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),E())}})}),(0,d.jsxs)(o.A,{children:[(0,d.jsx)(p.A,{onClick:()=>A(!1),children:y("common.cancel")}),(0,d.jsx)(p.A,{variant:"contained",disabled:!B.trim(),onClick:E,children:y("common.create")})]})]})]})}},80518:(a,b,c)=>{"use strict";c.d(b,{CN:()=>k,Pj:()=>i,Ub:()=>j,jX:()=>l,sE:()=>g,y4:()=>h});var d=c(64535);let e=/\$\{res:([^}]+)\}/g,f=/\$\{global:([^}]+)\}/g;function g(a){let b,c=(0,d.A$)(a).map(a=>({kind:a.kind,server:a.server,name:a.name,fullMatch:a.fullMatch,index:a.index}));for(e.lastIndex=0;null!==(b=e.exec(a));)c.push({kind:"runres",server:"",name:b[1],fullMatch:b[0],index:b.index});for(f.lastIndex=0;null!==(b=f.exec(a));)c.push({kind:"global",server:"",name:b[1],fullMatch:b[0],index:b.index});return c.sort((a,b)=>a.index-b.index)}function h(a){if(a.startsWith("${res:")&&a.endsWith("}")){let b=a.slice(6,-1);return b?{kind:"runres",server:"",name:b}:null}if(a.startsWith("${global:")&&a.endsWith("}")){let b=a.slice(9,-1);return b?{kind:"global",server:"",name:b}:null}let b=(0,d.js)(a);return b?{kind:b.kind,server:b.server,name:b.name}:null}function i(a,b,c){return"runres"===a?`\${res:${c}}`:"global"===a?`\${global:${c}}`:(0,d.X8)(a,b,c)}function j(a,b=a.name,c){return{...a,label:b,value:i(a.kind,a.server,a.name),description:c}}function k(a){return"runres"===a.kind?`res:${a.name}`:"global"===a.kind?`global:${a.name}`:(0,d.YP)({kind:a.kind,server:a.server,name:a.name})}function l(a){let b=new Set;for(let c of a){let a;if("string"==typeof c&&0!==c.length)for(e.lastIndex=0;null!==(a=e.exec(c));){let c=a[1].trim();c&&b.add(c)}}return[...b].sort((a,b)=>a.localeCompare(b))}}};
|