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 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4662],{52397:(e,t,a)=>{"use strict";a.d(t,{RJ:()=>r,gF:()=>n});let n="masked:********",r="********"},71892:(e,t,a)=>{"use strict";a.d(t,{A:()=>R});var n=a(95155),r=a(12115),s=a(2300),o=a(94049),i=a(25635),l=a(91871),c=a(80777),d=a(33077),u=a(9562),h=a(56422),p=a(28548),m=a(99944),x=a(22822),b=a(41983),g=a(56682),y=a(73288),f=a(9164),v=a(86946),j=a(21422),A=a(12857),w=a(48363),k=a(4484),S=a(1877),C=a(52397);let E=(0,y.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),F=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,R=e=>{let{serverName:t,initialEnv:a,onSave:y,onDelete:R,onServerRestart:W}=e,{globalEnvVars:P}=(0,f.useStorage)(),[I,O]=(0,r.useState)([]),[T,B]=(0,r.useState)(!1),[z,M]=(0,r.useState)(!1),[U,D]=(0,r.useState)(!1),[L,X]=(0,r.useState)(null);(0,r.useEffect)(()=>{E.debug("Initializing environment variables for server: ".concat(t),{variableCount:Object.keys(a).length}),O(Object.entries(a).map(e=>{let[t,a]=e,n="object"==typeof a&&null!==a&&"value"in a?a.value:a,r="object"==typeof a&&null!==a&&"metadata"in a?a.metadata:{isSecret:(0,S.xc)(t)},s=n.match(F);if(s){let e=s[1];return{key:t,value:n,isSecret:r.isSecret,isBound:!0,boundTo:e}}let o="string"==typeof n&&(n.startsWith("encrypted:")||n.startsWith("encrypted_failed:"));return{key:t,value:o?C.gF:n,isSecret:r.isSecret,isEncrypted:o}}))},[a]);let V=async e=>{E.debug("Removing environment variable at index: ".concat(e));let a=I[e];if("Global"===t&&R&&a.key)try{await R(a.key),O(I.filter((t,a)=>a!==e))}catch(e){E.error("Failed to delete environment variable: ".concat(a.key),e)}else O(I.filter((t,a)=>a!==e)),B(!0)},G=(e,t,a)=>{let n=[...I];if("isSecret"===t){let t=n[e];t.isSecret&&!a?n[e]={...t,isSecret:a,value:"",isEncrypted:!1,showWarning:!0}:n[e]={...t,isSecret:a}}else{let r={...n[e],[t]:a,isSecret:"key"===t?(0,S.xc)(a):n[e].isSecret};if("key"===t&&(r.isValidKey=""===a||/^[a-zA-Z0-9_]+$/.test(a)),"value"===t){let t=a.match(F);r.isBound=!!t,r.boundTo=null==t?void 0:t[1],n[e].isEncrypted&&(r.isEncrypted=!1),n[e].showWarning&&a&&(r.showWarning=!1)}n[e]=r}O(n),B(!0)},K=async()=>{if(I.some(e=>""!==e.key&&!1===e.isValidKey))return void E.error("Cannot save: Some variable names contain invalid characters");E.debug("Saving environment variables for server: ".concat(t),{variableCount:I.length}),M(!0);try{let e=I.reduce((e,t)=>{let{key:a,value:n,isBound:r,boundTo:s,isSecret:o,isEncrypted:i}=t;return a&&(r&&s?e[a]={value:"${global:".concat(s,"}"),metadata:{isSecret:o}}:o&&n===C.gF||(e[a]={value:n,metadata:{isSecret:o}})),e},{});await y(e),B(!1),W&&"Global"!==t&&(E.debug("Restarting server after env variable changes: ".concat(t)),await W(t))}catch(e){E.error("Failed to save environment variables:",e)}M(!1)};return(0,n.jsxs)(s.A,{sx:{p:3,borderRadius:2,border:1,borderColor:e=>"dark"===e.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,n.jsxs)(o.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,n.jsxs)(i.A,{variant:"h6",sx:{fontWeight:"semibold"},children:["Environment Variables - ",t]}),(0,n.jsx)(l.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,n.jsx)(v.A,{}),onClick:()=>{E.debug("Adding new environment variable"),O([...I,{key:"",value:"",isSecret:!1}]),B(!0)},children:"Add Variable"})]}),(0,n.jsx)(c.A,{spacing:3,children:I.map((e,t)=>(0,n.jsxs)(d.Ay,{container:!0,spacing:2,alignItems:"flex-start",children:[(0,n.jsx)(d.Ay,{item:!0,xs:12,sm:5,children:(0,n.jsx)(u.A,{fullWidth:!0,placeholder:"Variable name",value:e.key,onChange:e=>G(t,"key",e.target.value),error:!1===e.isValidKey,helperText:!1===e.isValidKey?"Only alphanumeric characters and underscores allowed":"",size:"small"})}),(0,n.jsx)(d.Ay,{item:!0,xs:12,sm:5,children:(0,n.jsx)(u.A,{fullWidth:!0,type:e.isSecret?"password":"text",placeholder:e.showWarning?"Re-enter value":"Value",value:e.value,onChange:e=>G(t,"value",e.target.value),InputProps:{readOnly:e.isBound,startAdornment:e.isEncrypted?(0,n.jsx)(h.A,{position:"start",children:(0,n.jsx)(j.A,{fontSize:"small",titleAccess:"This value is stored encrypted"})}):null,endAdornment:e.isBound?(0,n.jsx)(h.A,{position:"end",children:(0,n.jsx)(p.A,{size:"small",label:"Bound to global: ".concat(e.boundTo),color:"primary",variant:"outlined",onDelete:()=>(e=>{E.debug("Unbinding variable at index: ".concat(e));let t=[...I];t[e]={...t[e],isBound:!1,boundTo:void 0},O(t),B(!0)})(t),deleteIcon:(0,n.jsx)(A.A,{fontSize:"small"})})}):null},error:e.showWarning,helperText:e.showWarning?"You must re-enter the value after switching from secret to normal mode":"",size:"small",sx:{bgcolor:t=>e.isBound?"dark"===t.palette.mode?"#1a1a1a":"#f9fafb":t.palette.background.paper}})}),(0,n.jsx)(d.Ay,{item:!0,xs:12,sm:2,children:(0,n.jsxs)(o.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,n.jsx)(m.A,{control:(0,n.jsx)(x.A,{checked:e.isSecret,onChange:e=>G(t,"isSecret",e.target.checked),size:"small"}),label:"Secret",sx:{mr:1}}),!e.isBound&&(0,n.jsx)(b.A,{size:"small",color:"primary",onClick:()=>(e=>{E.debug("Opening bind modal for variable at index: ".concat(e)),X(e),D(!0)})(t),title:"Bind to global variable",sx:{mr:1},children:(0,n.jsx)(w.A,{fontSize:"small"})}),(0,n.jsx)(b.A,{size:"small",color:"error",onClick:()=>V(t),title:"Remove variable",children:(0,n.jsx)(k.A,{fontSize:"small"})})]})})]},t))}),(0,n.jsx)(g.A,{open:U,onClose:()=>{D(!1),X(null)},children:(0,n.jsxs)(o.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,n.jsx)(i.A,{variant:"h6",sx:{mb:2},children:"Bind to Global Variable"}),0===Object.keys(P).length?(0,n.jsx)(i.A,{color:"text.secondary",sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,n.jsx)(o.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(P).map(e=>{let[t,a]=e;return(0,n.jsxs)(l.A,{fullWidth:!0,variant:"text",onClick:()=>(e=>{if(null!==L){E.debug("Binding variable at index ".concat(L," to global variable: ").concat(e));let t=[...I];t[L]={...t[L],isBound:!0,boundTo:e,value:"${global:".concat(e,"}")},O(t),D(!1),X(null),B(!0)}})(t),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,n.jsx)(i.A,{variant:"body2",children:t}),(0,n.jsx)(i.A,{variant:"caption",color:"text.secondary",children:a&&"object"==typeof a&&a.metadata&&a.metadata.isSecret?C.gF:a&&"object"==typeof a?a.value:a})]},t)})}),(0,n.jsx)(o.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,n.jsx)(l.A,{variant:"outlined",onClick:()=>{D(!1),X(null)},children:"Cancel"})})]})}),T&&(0,n.jsx)(o.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,n.jsx)(l.A,{variant:"contained",color:"success",onClick:K,disabled:z||I.some(e=>""!==e.key&&!1===e.isValidKey),children:z?"Saving...":"Save Changes"})})]})}},84869:(e,t,a)=>{"use strict";a.d(t,{G:()=>o,S:()=>s});let n=(0,a(73288).h)("frontend/services/transcription/webSpeech"),r=()=>"webkitSpeechRecognition"in window||"SpeechRecognition"in window;async function s(e,t){if(!r())throw Error("Web Speech API is not supported in this browser");n.debug("Starting Web Speech API transcription");try{let a=URL.createObjectURL(e),r=new Audio(a),s=new(window.SpeechRecognition||window.webkitSpeechRecognition);return s.continuous=!0,s.interimResults=!0,(null==t?void 0:t.language)&&(s.lang=t.language),new Promise((e,a)=>{let o="";s.onresult=e=>{let a="";for(let t=e.resultIndex;t<e.results.length;t++){let n=e.results[t][0].transcript;e.results[t].isFinal?o+=n+" ":a+=n}(null==t?void 0:t.onInterimResult)&&t.onInterimResult(o+a),n.debug("Recognition interim result",{finalLength:o.length,interimLength:a.length})},s.onend=()=>{n.debug("Recognition ended",{transcriptLength:o.length}),e(o.trim())},s.onerror=e=>{n.error("Recognition error",{error:e.error}),a(Error("Speech recognition error: ".concat(e.error)))},r.onplay=()=>{s.start(),n.debug("Recognition started")},r.onended=()=>{s.stop(),n.debug("Audio playback ended")},r.onerror=e=>{n.error("Audio playback error",{error:e}),s.stop(),a(Error("Error playing audio"))},r.play().catch(e=>{n.error("Error starting audio playback",{error:e}),a(e)})})}catch(e){throw n.error("Error in Web Speech API transcription",{error:e}),e}}function o(){return{supported:r(),message:r()?"Web Speech API is supported":"Web Speech API is not supported in this browser"}}},88495:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>eA});var n=a(95155),r=a(94049),s=a(12115),o=a(48989),i=a(86973),l=a(49501),c=a(2300),d=a(80777),u=a(28548),h=a(25635),p=a(52641),m=a(95436),x=a(55606),b=a(41602),g=a(73707),y=a(17681),f=a(33567),v=a(8532),j=a(13538),A=a(43633),w=a(35465),k=a(33009),S=a(37019),C=a(12267),E=a(47275),F=a(81685),R=a(66636),W=a(4097),P=a(61615),I=a(25766),O=a(22003),T=a(9562),B=a(56422),z=a(41983),M=a(91871),U=a(21422),D=a(87830),L=a(68212),X=a(42063),V=a(9164),G=a(95070),K=a(26842),N=a(14817),J=a(65187),_=a(26796),H=a(73288);let Y=(0,H.h)("frontend/components/Settings/ThemeSettings"),Z=[{mode:"light",style:"modern",label:"Modern Light",description:"Airy surfaces, soft depth and vivid violet accents.",base:"#F5F7FF",surface:"#FFFFFF",text:"#171A2B",accent:"#6355E8"},{mode:"dark",style:"modern",label:"Modern Dark",description:"Deep-space surfaces with luminous interaction color.",base:"#070912",surface:"#12182C",text:"#F4F6FF",accent:"#8B7CFF"},{mode:"light",style:"legacy",label:"Legacy Light",description:"The familiar compact FLUJO look with classic blue.",base:"#FFFFFF",surface:"#F5F6FA",text:"#2C3E50",accent:"#007BFF"},{mode:"dark",style:"legacy",label:"Legacy Dark",description:"The original slate workspace and compact controls.",base:"#0F1319",surface:"#1A212B",text:"#EEF1F5",accent:"#4F93F5"}];var q=a(71892),$=a(52397),Q=a(17325),ee=a(99944),et=a(22822),ea=a(4474),en=a(21067),er=a(2778),es=a(52363),eo=a(65036),ei=a(50001),el=a(75912),ec=a(27156);let ed=(0,H.h)("frontend/components/Settings/BackupSettings"),eu=[{key:"models",label:"Models",description:"AI model configurations",storageKey:ec.Z.MODELS},{key:"mcpServers",label:"MCP Servers Configuration",description:"MCP server settings",storageKey:ec.Z.MCP_SERVERS},{key:"mcpServersFolder",label:"MCP Servers Folder",description:"MCP server code and files",isFolder:!0},{key:"flows",label:"Flows",description:"Flow configurations",storageKey:ec.Z.FLOWS},{key:"chatHistory",label:"Chat History",description:"Conversation history",storageKey:ec.Z.CHAT_HISTORY},{key:"settings",label:"Settings",description:"Application settings",storageKey:ec.Z.THEME},{key:"globalEnvVars",label:"Global Environment Variables",description:"Global environment variables",storageKey:ec.Z.GLOBAL_ENV_VARS},{key:"encryptionKey",label:"Encryption Key",description:"Data encryption key",storageKey:ec.Z.ENCRYPTION_KEY}];var eh=a(9957),ep=a(84869);(0,H.h)("frontend/components/Settings/SpeechRecognitionSettings");let em=(0,H.h)("frontend/components/Settings/UpdateSettings");var ex=a(8907),eb=a(69195);let eg=(0,H.h)("frontend/components/Settings/ExperimentalFeaturesSettings"),ey=[{id:"globalEnv",title:"Global variables",description:"Manage shared values and secrets used by your connected services.",icon:w.A,component:function(){let{globalEnvVars:e,setGlobalEnvVars:t,deleteGlobalEnvVar:a}=(0,V.useStorage)(),[o,i]=(0,s.useState)(null),l=async e=>{try{let a=Object.fromEntries(Object.entries(e).filter(e=>{let[t,a]=e;return"string"==typeof a||!a.metadata.isSecret||a.value!==$.gF}));await t(a),i({type:"success",text:"Global environment variables updated successfully"}),setTimeout(()=>{i(null)},3e3)}catch(e){i({type:"error",text:"Failed to update global environment variables"})}};return(0,n.jsxs)(r.default,{sx:{width:"100%"},children:[(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Define global environment variables that can be bound to MCP servers. This allows you to manage API keys and other sensitive information in one place."}),o&&(0,n.jsx)(O.A,{severity:o.type,sx:{mb:2},children:o.text}),(0,n.jsx)(q.A,{serverName:"Global",initialEnv:e,onSave:l,onDelete:a})]})}},{id:"encryption",title:"Encryption",description:"Control how credentials and other sensitive local data are protected.",icon:k.A,component:function(){let{setKey:e,changeKey:t,verifyKey:a,isEncryptionInitialized:o,isUserEncryptionEnabled:i}=(0,V.useStorage)(),[l,d]=(0,s.useState)(""),[p,m]=(0,s.useState)(""),[x,b]=(0,s.useState)(!1),[g,y]=(0,s.useState)(""),[f,v]=(0,s.useState)(""),[j,A]=(0,s.useState)(!1),[w,k]=(0,s.useState)(!1),[S,C]=(0,s.useState)(null),[E,F]=(0,s.useState)(!1),[R,W]=(0,s.useState)(!1),[P,I]=(0,s.useState)(!1),G=()=>{setTimeout(()=>window.location.reload(),800)};(0,s.useEffect)(()=>{(async()=>{let e=await o(),t=await i();F(e),W(t)})()},[o,i]);let K=async t=>{t.preventDefault(),I(!0),C(null);try{if(l.length<12){C({type:"error",text:"Encryption password must be at least 12 characters long for security"}),I(!1);return}if(l!==p){C({type:"error",text:"Passwords do not match"}),I(!1);return}await e(l),C({type:"success",text:"Encryption password set successfully"}),d(""),m(""),F(!0),G()}catch(e){C({type:"error",text:"Failed to set encryption password"})}finally{I(!1)}},N=async e=>{e.preventDefault(),I(!0),C(null);try{if(f.length<12){C({type:"error",text:"New password must be at least 12 characters long for security"}),I(!1);return}if(!await a(g)){C({type:"error",text:"Current password is incorrect"}),I(!1);return}await t(g,f)?(C({type:"success",text:"Encryption password changed successfully"}),y(""),v(""),G()):C({type:"error",text:"Failed to change encryption password"})}catch(e){C({type:"error",text:"An error occurred while changing the password"})}finally{I(!1)}};return(0,n.jsxs)(r.default,{sx:{width:"100%"},children:[(0,n.jsx)(h.A,{variant:"h6",gutterBottom:!0,children:"Encryption Settings"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:3},children:"Set an encryption password to secure sensitive data like API keys and credentials. This password is used to encrypt your data and is never stored directly."}),S&&(0,n.jsx)(O.A,{severity:S.type,sx:{mb:3},children:S.text}),(0,n.jsxs)(r.default,{sx:{display:"flex",alignItems:"center",mb:3},children:[(0,n.jsx)(h.A,{variant:"body1",sx:{mr:2},children:"Current encryption status:"}),E?R?(0,n.jsx)(u.A,{icon:(0,n.jsx)(U.A,{}),label:"Custom Password Protection",color:"success",variant:"outlined"}):(0,n.jsx)(u.A,{icon:(0,n.jsx)(D.A,{}),label:"Default Encryption",color:"primary",variant:"outlined"}):(0,n.jsx)(u.A,{label:"No Encryption",color:"error",variant:"outlined"})]}),E&&R?R?(0,n.jsxs)(c.A,{elevation:2,sx:{p:3},children:[(0,n.jsx)(h.A,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Change Encryption Password"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"You can change your custom encryption password here. This will re-encrypt your data with the new password. Your data will remain intact."}),(0,n.jsxs)(r.default,{component:"form",onSubmit:N,children:[(0,n.jsx)(T.A,{fullWidth:!0,label:"Current Password",variant:"outlined",value:g,onChange:e=>y(e.target.value),type:j?"text":"password",InputProps:{endAdornment:(0,n.jsx)(B.A,{position:"end",children:(0,n.jsx)(z.A,{"aria-label":"toggle current password visibility",onClick:()=>A(!j),edge:"end",children:j?(0,n.jsx)(L.A,{}):(0,n.jsx)(X.A,{})})})},sx:{mb:2}}),(0,n.jsx)(T.A,{fullWidth:!0,label:"New Password",variant:"outlined",value:f,onChange:e=>v(e.target.value),type:w?"text":"password",InputProps:{endAdornment:(0,n.jsx)(B.A,{position:"end",children:(0,n.jsx)(z.A,{"aria-label":"toggle new password visibility",onClick:()=>k(!w),edge:"end",children:w?(0,n.jsx)(L.A,{}):(0,n.jsx)(X.A,{})})})},sx:{mb:3}}),(0,n.jsx)(M.A,{type:"submit",variant:"contained",color:"primary",disabled:!g||!f||P,children:"Change Password"})]})]}):null:(0,n.jsxs)(c.A,{elevation:2,sx:{p:3,mb:4},children:[(0,n.jsx)(h.A,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Set Custom Encryption Password"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:E?"Your data is currently protected with default encryption. Set a custom password for enhanced security.":"Create a strong password to protect your sensitive data. Make sure to remember this password as it cannot be recovered if lost."}),(0,n.jsxs)(r.default,{component:"form",onSubmit:K,children:[(0,n.jsx)(T.A,{fullWidth:!0,label:"New Password",variant:"outlined",value:l,onChange:e=>d(e.target.value),type:x?"text":"password",InputProps:{endAdornment:(0,n.jsx)(B.A,{position:"end",children:(0,n.jsx)(z.A,{"aria-label":"toggle password visibility",onClick:()=>b(!x),edge:"end",children:x?(0,n.jsx)(L.A,{}):(0,n.jsx)(X.A,{})})})},sx:{mb:2}}),(0,n.jsx)(T.A,{fullWidth:!0,label:"Confirm Password",variant:"outlined",value:p,onChange:e=>m(e.target.value),type:x?"text":"password",sx:{mb:3}}),(0,n.jsx)(M.A,{type:"submit",variant:"contained",color:"primary",disabled:!l||!p||P,children:E?"Upgrade to Custom Password":"Set Encryption Password"})]})]}),(0,n.jsx)(r.default,{sx:{mt:4},children:(0,n.jsxs)(O.A,{severity:R?"warning":"info",children:[(0,n.jsx)(h.A,{variant:"subtitle2",fontWeight:"bold",children:R?"Important Security Information":"About Default Encryption"}),R?(0,n.jsxs)(h.A,{variant:"body2",children:["• Your custom encryption password is never stored directly on the server",(0,n.jsx)("br",{}),"• If you forget your password, you will not be able to access your encrypted data",(0,n.jsx)("br",{}),"• Consider using a password manager to securely store this password"]}):(0,n.jsxs)(h.A,{variant:"body2",children:["• Your data is currently encrypted with a built-in default key",(0,n.jsx)("br",{}),"• This provides basic protection without requiring password setup",(0,n.jsx)("br",{}),"• For maximum security, set a custom password using the form above"]})]})})]})}},{id:"backup",title:"Backup & restore",description:"Export your setup for safekeeping or restore it on this installation.",icon:j.A,component:function(){let[e,t]=(0,s.useState)(eu.reduce((e,t)=>({...e,[t.key]:!0}),{})),[a,o]=(0,s.useState)(eu.reduce((e,t)=>({...e,[t.key]:!0}),{})),[i,l]=(0,s.useState)(null),d=(0,s.useRef)(null),[u,p]=(0,s.useState)(null),[m,x]=(0,s.useState)(!1),[b,g]=(0,s.useState)(!1),y=a=>{t({...e,[a.target.name]:a.target.checked})},f=e=>{o({...a,[e.target.name]:e.target.checked})},v=async()=>{ed.debug("Creating backup with selections:",e),x(!0),p(null);try{let t=Object.entries(e).filter(e=>{let[t,a]=e;return a}).map(e=>{let[t]=e;return t});if(0===t.length){p({type:"error",text:"Please select at least one item to backup"}),x(!1);return}let a=await fetch("/api/backup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selections:t})});if(!a.ok)throw Error("Failed to create backup");let n=await a.blob(),r=window.URL.createObjectURL(n),s=document.createElement("a");s.style.display="none",s.href=r;let o=new Date().toISOString().replace(/[:.]/g,"-").substring(0,19);s.download="flujo-backup-".concat(o,".zip"),document.body.appendChild(s),s.click(),window.URL.revokeObjectURL(r),document.body.removeChild(s),p({type:"success",text:"Backup created successfully"})}catch(e){ed.error("Error creating backup:",e),p({type:"error",text:e instanceof Error?e.message:"Failed to create backup"})}finally{x(!1)}},j=async()=>{ed.debug("Restoring from backup with selections:",a),x(!0),p(null),g(!1);try{let e=Object.entries(a).filter(e=>{let[t,a]=e;return a}).map(e=>{let[t]=e;return t}),t=new FormData;t.append("file",i),t.append("selections",JSON.stringify(e));let n=await fetch("/api/restore",{method:"POST",body:t});if(!n.ok){let e=await n.json();throw Error(e.error||"Failed to restore from backup")}p({type:"success",text:"Restore completed successfully. You may need to refresh the page to see the changes."}),d.current&&(d.current.value=""),l(null)}catch(e){ed.error("Error restoring from backup:",e),p({type:"error",text:e instanceof Error?e.message:"Failed to restore from backup"})}finally{x(!1)}},A=a=>{let n={...e};eu.forEach(e=>{n[e.key]=a}),t(n)},w=e=>{let t={...a};eu.forEach(a=>{t[a.key]=e}),o(t)};return(0,n.jsxs)(r.default,{sx:{width:"100%"},children:[(0,n.jsx)(h.A,{variant:"h6",gutterBottom:!0,children:"Backup and Restore"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Create backups of your application data or restore from a previous backup."}),u&&(0,n.jsx)(O.A,{severity:u.type,sx:{mb:2},children:u.text}),(0,n.jsxs)(c.A,{sx:{p:3,mb:3},children:[(0,n.jsx)(h.A,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Create Backup"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select the components you want to include in the backup."}),(0,n.jsxs)(r.default,{sx:{mb:2},children:[(0,n.jsx)(M.A,{size:"small",onClick:()=>A(!0),sx:{mr:1},children:"Select All"}),(0,n.jsx)(M.A,{size:"small",onClick:()=>A(!1),children:"Deselect All"})]}),(0,n.jsx)(Q.A,{sx:{mb:3},children:eu.map(t=>(0,n.jsx)(ee.A,{control:(0,n.jsx)(et.A,{checked:e[t.key],onChange:y,name:t.key}),label:(0,n.jsxs)(r.default,{children:[(0,n.jsx)(h.A,{variant:"body1",children:t.label}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",children:t.description})]})},t.key))}),(0,n.jsx)(M.A,{variant:"contained",onClick:v,disabled:m||Object.values(e).every(e=>!e),startIcon:m?(0,n.jsx)(ea.default,{size:20}):null,children:m?"Creating Backup...":"Create Backup"})]}),(0,n.jsxs)(c.A,{sx:{p:3},children:[(0,n.jsx)(h.A,{variant:"subtitle1",gutterBottom:!0,fontWeight:"bold",children:"Restore from Backup"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Select a backup file and choose which components to restore."}),(0,n.jsxs)(r.default,{sx:{mb:3},children:[(0,n.jsxs)(M.A,{variant:"outlined",component:"label",sx:{mb:2},children:["Select Backup File",(0,n.jsx)("input",{type:"file",hidden:!0,accept:".zip",onChange:e=>{let t=e.target.files;t&&t.length>0&&(l(t[0]),p(null))},ref:d})]}),i&&(0,n.jsxs)(h.A,{variant:"body2",sx:{ml:1},children:["Selected file: ",i.name]})]}),(0,n.jsx)(en.A,{sx:{mb:2}}),(0,n.jsx)(h.A,{variant:"subtitle2",gutterBottom:!0,children:"Restore Options"}),(0,n.jsxs)(r.default,{sx:{mb:2},children:[(0,n.jsx)(M.A,{size:"small",onClick:()=>w(!0),sx:{mr:1},children:"Select All"}),(0,n.jsx)(M.A,{size:"small",onClick:()=>w(!1),children:"Deselect All"})]}),(0,n.jsx)(Q.A,{sx:{mb:3},children:eu.map(e=>(0,n.jsx)(ee.A,{control:(0,n.jsx)(et.A,{checked:a[e.key],onChange:f,name:e.key}),label:(0,n.jsxs)(r.default,{children:[(0,n.jsx)(h.A,{variant:"body1",children:e.label}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",children:e.description})]})},e.key))}),(0,n.jsx)(M.A,{variant:"contained",color:"warning",onClick:()=>i?0===Object.entries(a).filter(e=>{let[t,a]=e;return a}).map(e=>{let[t]=e;return t}).length?void p({type:"error",text:"Please select at least one item to restore"}):void g(!0):void p({type:"error",text:"Please select a backup file"}),disabled:m||!i||Object.values(a).every(e=>!e),startIcon:m?(0,n.jsx)(ea.default,{size:20}):null,children:m?"Restoring...":"Restore from Backup"})]}),(0,n.jsxs)(er.A,{open:b,onClose:()=>g(!1),children:[(0,n.jsx)(es.A,{children:"Confirm Restore"}),(0,n.jsx)(eo.A,{children:(0,n.jsx)(ei.A,{children:"This will overwrite your existing data with the contents of the backup file. This action cannot be undone. Are you sure you want to continue?"})}),(0,n.jsxs)(el.A,{children:[(0,n.jsx)(M.A,{onClick:()=>g(!1),children:"Cancel"}),(0,n.jsx)(M.A,{onClick:j,color:"warning",variant:"contained",children:"Restore"})]})]})]})}},{id:"theme",title:"Appearance",description:"Choose the visual mode that makes FLUJO most comfortable to use.",icon:C.A,component:function(){let{isDarkMode:e,visualStyle:t,setThemePreset:a}=(0,_.useTheme)(),s=(0,f.A)();return Y.debug("Rendering ThemeSettings with preset: ".concat(t,"/").concat(e?"dark":"light")),(0,n.jsxs)(r.default,{sx:{maxWidth:860},children:[(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2.5},children:"Pick a complete look. The sun and moon button still switches between light and dark within your chosen style."}),(0,n.jsx)(r.default,{role:"radiogroup","aria-label":"Visual theme",sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"repeat(2, minmax(0, 1fr))"},gap:2,mb:2.5},children:Z.map(o=>{let i=t===o.style&&e===("dark"===o.mode),l="dark"===o.mode?N.A:J.A;return(0,n.jsxs)(G.A,{role:"radio","aria-checked":i,"aria-label":o.label,onClick:()=>{i||a({mode:o.mode,style:o.style})},sx:{display:"block",overflow:"hidden",border:"1px solid",borderColor:i?"primary.main":"divider",borderRadius:"legacy"===t?2:3.5,textAlign:"left",boxShadow:i?"0 0 0 3px ".concat((0,v.X4)(s.palette.primary.main,.13)):"none",transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease","&:hover":{borderColor:"primary.main",transform:"modern"===o.style?"translateY(-2px)":"none"},"&:focus-visible":{outline:"3px solid ".concat((0,v.X4)(s.palette.primary.main,.3)),outlineOffset:2}},children:[(0,n.jsxs)(r.default,{sx:{height:126,p:2,color:o.text,bgcolor:o.base,backgroundImage:"modern"===o.style?"radial-gradient(circle at 20% 0%, ".concat((0,v.X4)(o.accent,.22),", transparent 48%)"):"none"},children:[(0,n.jsxs)(d.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,n.jsx)(r.default,{sx:{width:50,height:8,borderRadius:999,bgcolor:o.text,opacity:.18}}),(0,n.jsx)(r.default,{sx:{width:8,height:8,ml:"auto !important",borderRadius:"50%",bgcolor:o.accent}})]}),(0,n.jsxs)(r.default,{sx:{mt:2,height:68,p:1.2,border:"1px solid ".concat((0,v.X4)(o.text,.1)),borderRadius:"modern"===o.style?2:1,bgcolor:o.surface,boxShadow:"modern"===o.style?"dark"===o.mode?"0 12px 30px rgba(0,0,0,.28)":"0 12px 30px rgba(55,50,105,.1)":"dark"===o.mode?"0 4px 6px rgba(0,0,0,.4)":"0 4px 6px rgba(0,0,0,.1)"},children:[(0,n.jsx)(r.default,{sx:{width:"62%",height:7,mb:1,borderRadius:999,bgcolor:o.text,opacity:.72}}),(0,n.jsx)(r.default,{sx:{width:"84%",height:5,mb:.7,borderRadius:999,bgcolor:o.text,opacity:.18}}),(0,n.jsx)(r.default,{sx:{width:"46%",height:5,borderRadius:999,bgcolor:o.accent,opacity:.65}})]})]}),(0,n.jsxs)(d.A,{direction:"row",spacing:1.2,alignItems:"flex-start",sx:{p:1.7},children:[(0,n.jsx)(l,{sx:{mt:.15,color:i?"primary.main":"text.secondary"}}),(0,n.jsxs)(r.default,{sx:{flex:1,minWidth:0},children:[(0,n.jsxs)(d.A,{direction:"row",spacing:.8,alignItems:"center",useFlexGap:!0,flexWrap:"wrap",children:[(0,n.jsx)(h.A,{variant:"subtitle2",sx:{fontWeight:"modern"===t?720:600},children:o.label}),"modern"===o.style&&(0,n.jsx)(u.A,{label:"Modern",size:"small",variant:"outlined",sx:{height:21,fontSize:"0.65rem"}})]}),(0,n.jsx)(h.A,{variant:"caption",color:"text.secondary",children:o.description})]}),i&&(0,n.jsx)(K.A,{color:"primary",fontSize:"small","aria-hidden":"true"})]})]},o.label)})})]})}},{id:"speech",title:"Speech recognition",description:"Configure voice input and browser speech-recognition preferences.",icon:S.A,component:function(){let{settings:e,updateSettings:t}=(0,V.useStorage)(),a=(0,ep.G)(),s=(null==e?void 0:e.speech)||{enabled:!0};return(0,n.jsxs)(r.default,{sx:{p:2},children:[!a.supported&&(0,n.jsx)(O.A,{severity:"warning",sx:{mb:3},children:"Speech recognition is not supported in your browser. Please use Chrome, Edge, or Safari for the best experience."}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:3},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:s.enabled,onChange:a=>{t({...e,speech:{...s,enabled:a.target.checked}})},name:"enabled",disabled:!a.supported}),label:"Enable speech recognition"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"When enabled, audio recordings will be transcribed using your browser's built-in offfline speech recognition capabilities."})]}),(0,n.jsxs)(c.A,{variant:"outlined",sx:{p:2,mb:3},children:[(0,n.jsx)(h.A,{variant:"subtitle2",gutterBottom:!0,children:"Speech Recognition Information"}),(0,n.jsxs)(r.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,n.jsx)(h.A,{variant:"body2",children:"Technology:"}),(0,n.jsx)(h.A,{variant:"body2",children:"Web Speech API"})]}),(0,n.jsxs)(r.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,n.jsx)(h.A,{variant:"body2",children:"Processing:"}),(0,n.jsx)(h.A,{variant:"body2",children:"Browser-based"})]}),(0,n.jsxs)(r.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,n.jsx)(h.A,{variant:"body2",children:"Language:"}),(0,n.jsx)(h.A,{variant:"body2",children:"Automatically uses browser language"})]}),(0,n.jsxs)(r.default,{sx:{display:"flex",justifyContent:"space-between",mb:1},children:[(0,n.jsx)(h.A,{variant:"body2",children:"Privacy:"}),(0,n.jsx)(h.A,{variant:"body2",children:"Depends on browser implementation"})]})]}),(0,n.jsx)(O.A,{severity:"info",sx:{mt:3},children:(0,n.jsx)(h.A,{variant:"body2",children:"Speech recognition quality may vary based on your browser, microphone quality, and background noise. For best results, speak clearly and use a good quality microphone."})})]})}},{id:"onboarding",title:"Onboarding",description:"Review the guided setup experience or launch the product tour again.",icon:F.A,component:function(){let{startTour:e}=(0,eb.useTour)();return(0,n.jsxs)(r.default,{sx:{p:2},children:[(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"The guided tour walks you through the full first-run path — adding a model, connecting an MCP tool server, building a flow, and running it in chat. It launches automatically the first time you open FLUJO; replay it any time below."}),(0,n.jsx)(M.A,{variant:"outlined",startIcon:(0,n.jsx)(ex.A,{}),onClick:e,children:"Replay guided tour"})]})}},{id:"updates",title:"Updates",description:"Check your installed version and manage automatic update checks.",icon:P.A,component:function(){let{settings:e,updateSettings:t}=(0,V.useStorage)(),a=(null==e?void 0:e.update)||{checkOnStartup:!1},[o,i]=(0,s.useState)(!1),[l,c]=(0,s.useState)(!1),[d,u]=(0,s.useState)(null),[m,x]=(0,s.useState)(null),b=null===m||"git"===m,g=async()=>{i(!0),u(null);try{let e=await fetch("/api/update"),t=await e.json();"string"==typeof t.updateMode&&x(t.updateMode),e.ok&&!1!==t.success?!1===t.isGitRepo?u({severity:"info",message:t.message}):t.updateAvailable?u({severity:"warning",message:"An update is available (".concat(t.behindBy," new commit").concat(1===t.behindBy?"":"s"," on ").concat(t.branch,").")}):u({severity:"success",message:"FLUJO is up to date (v".concat(t.currentVersion,").")}):u({severity:"error",message:t.error||"Failed to check for updates."})}catch(e){em.error("Update check failed",e),u({severity:"error",message:"Failed to check for updates."})}finally{i(!1)}},y=async()=>{c(!0),u({severity:"info",message:"Updating FLUJO - this may take a few minutes..."});try{let e=await fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"apply"})}),t=await e.json();if(!e.ok||!1===t.success){u({severity:"error",message:t.error||"Update failed."}),c(!1);return}if(u({severity:"success",message:t.message}),t.restarting){let e=!1,t=async()=>{try{if((await fetch("/api/cwd",{cache:"no-store"})).ok&&e)return void window.location.reload()}catch(t){e=!0}setTimeout(t,3e3)};setTimeout(t,5e3)}else c(!1)}catch(e){em.error("Update failed",e),u({severity:"error",message:"Update failed."}),c(!1)}};return(0,n.jsxs)(r.default,{sx:{p:2},children:[(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:a.checkOnStartup,onChange:n=>{t({...e,update:{...a,checkOnStartup:n.target.checked}})},name:"checkOnStartup"}),label:"Check for updates on startup"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["When enabled, FLUJO checks GitHub for a newer version when the home page loads and shows a one-click update banner if one is available. Updates run ",(0,n.jsx)("code",{children:"git pull"})," + rebuild in your install folder; your data is preserved."]}),!b&&(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["This install can't update itself in place","container"===m?" (running in Docker) — pull a newer image instead.":"npm"===m?" (installed via npm) — rerun with the latest version instead.":" — it is not running from a git clone."]})]}),(0,n.jsxs)(r.default,{sx:{display:"flex",gap:2,mb:2},children:[(0,n.jsxs)(M.A,{variant:"outlined",onClick:g,disabled:o||l,children:[o?(0,n.jsx)(ea.default,{size:20,sx:{mr:1}}):null,"Check now"]}),(0,n.jsxs)(M.A,{variant:"contained",onClick:y,disabled:l||!b,children:[l?(0,n.jsx)(ea.default,{size:20,sx:{mr:1}}):null,"Update now"]})]}),d&&(0,n.jsx)(O.A,{severity:d.severity,sx:{mt:1},children:d.message})]})}},{id:"privacy",title:"Privacy & usage",description:"Decide which anonymous usage signals this installation may share.",icon:E.A,component:function(){var e,t;let{settings:a,updateSettings:o}=(0,V.useStorage)(),[i,l]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1),u={enabled:(null==(e=a.telemetry)?void 0:e.enabled)!==!1,notifyDaily:(null==(t=a.telemetry)?void 0:t.notifyDaily)!==!1},m=e=>o({...a,telemetry:{...u,...e}});return(0,s.useEffect)(()=>{let e=new AbortController;return fetch("/api/telemetry/daily-active",{headers:{Accept:"application/json"},signal:e.signal}).then(async e=>{if(!e.ok)throw Error("count request returned ".concat(e.status));return e.json()}).then(l).catch(e=>{"AbortError"!==e.name&&d(!0)}),()=>e.abort()},[]),(0,n.jsxs)(r.default,{sx:{p:2},children:[(0,n.jsx)(O.A,{severity:"info",sx:{mb:2},children:i?"".concat(i.count.toLocaleString()," anonymous active ").concat(1===i.count?"installation":"installations"," today (UTC)."):c?"Today’s anonymous activity count is currently unavailable.":"Loading today’s anonymous activity count…"}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:u.enabled,onChange:e=>m({enabled:e.target.checked}),name:"anonymousDailyActivity"}),label:"Share anonymous daily activity"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Helps count daily active FLUJO installations. At most one pulse is attempted per UTC day. It contains the app version, platform, install method, UTC date, and a random ID that changes daily. It never includes flows, prompts, models, keys, filenames, or a permanent installation ID."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:u.enabled&&u.notifyDaily,disabled:!u.enabled,onChange:e=>m({notifyDaily:e.target.checked}),name:"dailyTelemetryNotice"}),label:"Show the daily activity-sharing notification"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Turning this off hides the daily notification but does not disable anonymous activity sharing."})]}),(0,n.jsx)(O.A,{severity:"info",children:"Anonymous activity sharing is enabled by default and can be disabled here at any time. Collector failures never block FLUJO."})]})}},{id:"experimental",title:"Experimental features",description:"Preview advanced capabilities that are still under active development.",icon:R.A,component:function(){var e,t,a,s,o,i,l,c,d,u;let{settings:m,updateSettings:x}=(0,V.useStorage)(),b=null!=(e=null==m?void 0:m.experimental)?e:{enabled:!1};return(0,n.jsxs)(r.default,{sx:{p:2},children:[(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:b.enabled,onChange:e=>{eg.debug("Experimental features toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,enabled:e.target.checked}})},name:"experimentalEnabled"}),label:"Enable Experimental Features"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Experimental features may be incomplete or unstable and can change or be removed at any time. Enabling this makes them visible in the app — for example the ",(0,n.jsx)("strong",{children:"Waves"})," entry in the top navigation — and also turns on the new ",(0,n.jsx)("strong",{children:"Living Watershed"})," animated interface in Modern themes."]})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(t=b.claudeSessionResume)&&t,onChange:e=>{eg.debug("Claude session resume toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,claudeSessionResume:e.target.checked}})},name:"claudeSessionResume"}),label:"Reuse Claude session across turns (reduce token usage)"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["For models using the ",(0,n.jsx)("strong",{children:"Claude\xa0subscription"})," (Agent\xa0SDK) adapter, resume one session per node instead of re-sending the whole conversation each turn — so only the newest message is sent. This can dramatically cut token usage on long chats. It changes how conversation context reaches the model, so it is off by default; if you notice a model losing track of earlier context, turn it back off."]})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(a=b.visualCompactionEnabled)&&a,onChange:e=>{eg.debug("Visual context compaction toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,visualCompactionEnabled:e.target.checked}})},name:"visualCompactionEnabled"}),label:"Visual context compaction"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Experimental and off by default. For explicitly vision-capable models, FLUJO may replace a complete old, bulky context range with dense PNG pages only when provider-aware estimates show a context reduction. Exact source remains in run data; secrets, uncertain capability, and failures always keep the safe text route."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2,ml:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:!1!==b.visualCompactionToolResultsOnly,onChange:e=>{eg.debug("Visual compaction tool-results-only toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,visualCompactionToolResultsOnly:e.target.checked}})},name:"visualCompactionToolResultsOnly",disabled:!b.visualCompactionEnabled}),label:"Only archive old tool results"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Safe default: only complete oversized tool-call/result groups are eligible. Turn this off to let the router consider other old bulky text; recent turns and incomplete tool pairs are never archived."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2,ml:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(s=b.visualCompactionEvaluationMode)&&s,onChange:e=>{eg.debug("Visual compaction evaluation mode toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,visualCompactionEvaluationMode:e.target.checked}})},name:"visualCompactionEvaluationMode",disabled:!b.visualCompactionEnabled}),label:"Evaluate visual routing without sending images"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Records comparable raw, text, summary, and image estimates in the debugger while preserving the current text wire. Use this for live evaluation before enabling automatic image selection."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(o=b.autoUnloadOllamaModels)&&o,onChange:e=>{eg.debug("Auto-unload Ollama models toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,autoUnloadOllamaModels:e.target.checked}})},name:"autoUnloadOllamaModels"}),label:"Auto-unload idle Ollama models"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"When a flow switches between different Ollama models on the same server, automatically unload the previous model from VRAM before loading the new one. Recommended for GPU-constrained hardware. Note: concurrent Ollama requests to the same server are serialised while this is on."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(i=b.showModelsWithoutToolCapabilities)&&i,onChange:e=>{eg.debug("Show models without tool capabilities toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,showModelsWithoutToolCapabilities:e.target.checked}})},name:"showModelsWithoutToolCapabilities"}),label:"Show Models without tool capabilities"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Provider model lists hide models explicitly known not to support tool calls. Turn this on to reveal image generators and other non-tool models. Models with unknown capabilities remain visible either way."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(l=b.mcpBetaProtocol)&&l,onChange:e=>{eg.debug("MCP beta protocol toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,mcpBetaProtocol:e.target.checked}})},name:"mcpBetaProtocol"}),label:"MCP beta protocol (spec 2026-07-28)"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Connect to MCP servers using the ",(0,n.jsx)("strong",{children:"v2 beta SDK"})," with automatic version negotiation: servers that already speak the new stateless 2026-07-28 protocol are used natively, and every other server transparently falls back to the classic handshake — so existing servers keep working. The beta SDK's API may still change before its stable release; if a server misbehaves with this on, turn it off and reconnect. Websocket servers always use the stable SDK. Changing this rebuilds server connections on their next use."]})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(c=b.flowBasedGenerator)&&c,onChange:e=>{eg.debug("Flow-based generator toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,flowBasedGenerator:e.target.checked}})},name:"flowBasedGenerator",disabled:!b.enabled}),label:"Flow-based Flow Generator"}),(0,n.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:"Run Generate Flow through an editable, multi-stage FLUJO Flow. Its architect inventories real building blocks and authors the complete specification; its compiler validates, repairs, and returns an unsaved draft. The proven generator plus AI-Improve remains the default when this is off."})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null!=(d=b.protectedPathsEnabled)&&d,onChange:e=>{eg.debug("Protected paths toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,protectedPathsEnabled:e.target.checked}})},name:"protectedPathsEnabled"}),label:"Protect sensitive home-directory paths"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Add a defense-in-depth deny list to installed ",(0,n.jsx)("strong",{children:"filesystem"})," ","and ",(0,n.jsx)("strong",{children:"bash"})," MCP packages. When enabled, sensitive locations such as Documents, Desktop, Downloads, and credential directories remain blocked even when they are included in a configured root. This is off by default, so configured roots normally grant access to their full contents."]})]}),(0,n.jsxs)(p.A,{fullWidth:!0,sx:{mb:2},children:[(0,n.jsx)(ee.A,{control:(0,n.jsx)(eh.A,{checked:null==(u=b.snapshotsEnabled)||u,onChange:e=>{eg.debug("Filesystem snapshots toggled: ".concat(e.target.checked)),x({...m,experimental:{...b,snapshotsEnabled:e.target.checked}})},name:"snapshotsEnabled"}),label:"Enable filesystem snapshots"}),(0,n.jsxs)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Capture restorable snapshots around installed ",(0,n.jsx)("strong",{children:"filesystem"})," ","and ",(0,n.jsx)("strong",{children:"bash"})," package writes. Turning this off prevents new captures and snapshot-based revert. An operator can always disable snapshots with ",(0,n.jsx)("strong",{children:"FLUJO_SNAPSHOTS=0"}),"."]})]}),(0,n.jsx)(O.A,{severity:"info",children:(0,n.jsx)(h.A,{variant:"body2",children:"Turning this off again hides experimental features from the navigation. It does not delete any data."})})]})}}],ef=[{id:"security",title:"Data & security",description:"Credentials, protection and portability",sectionIds:["globalEnv","encryption","backup"]},{id:"experience",title:"Experience",description:"Appearance, voice and guidance",sectionIds:["theme","speech","onboarding"]},{id:"system",title:"System",description:"Maintenance, privacy and labs",sectionIds:["updates","privacy","experimental"]}];function ev(){var e;let t=(0,f.A)(),[a,j]=(0,s.useState)("globalEnv"),w=(0,s.useMemo)(()=>new Map(ey.map(e=>[e.id,e])),[]),k=null!=(e=w.get(a))?e:ey[0],S=k.icon,C=ef.flatMap(e=>[(0,n.jsx)(o.A,{children:e.title},"".concat(e.id,"-heading")),...e.sectionIds.map(e=>{let t=w.get(e);if(!t)return null;let a=t.icon;return(0,n.jsxs)(i.A,{value:t.id,children:[(0,n.jsx)(l.A,{children:(0,n.jsx)(a,{fontSize:"small"})}),t.title]},t.id)})]);return(0,n.jsx)(r.default,{component:"section",sx:{minHeight:"100%",px:{xs:2,sm:3,lg:4},py:{xs:2,sm:3,lg:4},background:"dark"===t.palette.mode?"radial-gradient(circle at 12% 8%, ".concat((0,v.X4)(t.palette.primary.main,.1),", transparent 28%)"):"radial-gradient(circle at 12% 8%, ".concat((0,v.X4)(t.palette.primary.main,.07),", transparent 30%)")},children:(0,n.jsxs)(r.default,{sx:{width:"100%",maxWidth:1440,mx:"auto"},children:[(0,n.jsx)(c.A,{component:"header",variant:"outlined",sx:{position:"relative",overflow:"hidden",mb:{xs:2,md:3},p:{xs:2.5,sm:3.5,md:4},borderRadius:4,background:"linear-gradient(135deg, ".concat((0,v.X4)(t.palette.primary.main,"dark"===t.palette.mode?.2:.12)," 0%, ").concat((0,v.X4)(t.palette.background.paper,.96)," 58%, ").concat((0,v.X4)(t.palette.info.main,"dark"===t.palette.mode?.1:.06)," 100%)"),boxShadow:"dark"===t.palette.mode?"0 24px 70px rgba(0, 0, 0, 0.24)":"0 24px 70px rgba(31, 41, 55, 0.08)","&::after":{content:'""',position:"absolute",width:260,height:260,right:-90,top:-130,borderRadius:"50%",background:(0,v.X4)(t.palette.primary.main,"dark"===t.palette.mode?.12:.08),filter:"blur(2px)",pointerEvents:"none"}},children:(0,n.jsxs)(d.A,{direction:"row",alignItems:"center",justifyContent:"space-between",spacing:3,sx:{position:"relative",zIndex:1},children:[(0,n.jsxs)(r.default,{children:[(0,n.jsx)(u.A,{icon:(0,n.jsx)(I.A,{}),label:"Workspace controls",size:"small",variant:"outlined",sx:{mb:1.5,borderColor:(0,v.X4)(t.palette.primary.main,.3),bgcolor:(0,v.X4)(t.palette.background.paper,.52),fontWeight:650}}),(0,n.jsx)(h.A,{component:"h1",variant:"h3",sx:{mb:1,fontSize:{xs:"2rem",sm:"2.5rem",md:"3rem"},letterSpacing:"-0.04em",lineHeight:1.04},children:"Settings"}),(0,n.jsx)(h.A,{color:"text.secondary",sx:{maxWidth:660,fontSize:{sm:"1.05rem"}},children:"Shape FLUJO around the way you work. Your data, experience, and system controls now live in one focused workspace."})]}),(0,n.jsx)(r.default,{"aria-hidden":!0,sx:{display:{xs:"none",sm:"grid"},placeItems:"center",flex:"0 0 auto",width:{sm:88,md:108},height:{sm:88,md:108},borderRadius:4,color:"primary.main",border:"1px solid ".concat((0,v.X4)(t.palette.primary.main,.22)),bgcolor:(0,v.X4)(t.palette.background.paper,.56),backdropFilter:"blur(14px)",boxShadow:"inset 0 1px 0 ".concat((0,v.X4)(t.palette.common.white,.15))},children:(0,n.jsx)(W.A,{sx:{fontSize:{sm:46,md:58}}})})]})}),(0,n.jsx)(c.A,{variant:"outlined",sx:{display:{xs:"block",md:"none"},p:1.5,mb:2,borderRadius:3,boxShadow:t.shadows[1]},children:(0,n.jsxs)(p.A,{fullWidth:!0,size:"small",children:[(0,n.jsx)(m.A,{id:"mobile-settings-section-label",children:"Settings section"}),(0,n.jsx)(x.A,{labelId:"mobile-settings-section-label",value:a,label:"Settings section",onChange:e=>{j(e.target.value)},renderValue:()=>(0,n.jsxs)(d.A,{direction:"row",alignItems:"center",spacing:1.25,children:[(0,n.jsx)(S,{color:"primary",fontSize:"small"}),(0,n.jsx)(h.A,{variant:"body2",fontWeight:650,children:k.title})]}),children:C})]})}),(0,n.jsxs)(r.default,{sx:{display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"300px minmax(0, 1fr)",lg:"320px minmax(0, 1fr)"},gap:{xs:2,md:3},alignItems:"start"},children:[(0,n.jsx)(d.A,{component:"nav","aria-label":"Settings sections",spacing:1.5,sx:{display:{xs:"none",md:"flex"}},children:ef.map(e=>(0,n.jsxs)(c.A,{variant:"outlined",sx:{p:1,borderRadius:3,boxShadow:t.shadows[1],bgcolor:(0,v.X4)(t.palette.background.paper,.88)},children:[(0,n.jsxs)(r.default,{sx:{px:1.25,pt:1,pb:1.25},children:[(0,n.jsx)(h.A,{variant:"overline",color:"text.secondary",sx:{fontWeight:750,letterSpacing:"0.1em"},children:e.title}),(0,n.jsx)(h.A,{variant:"caption",color:"text.secondary",display:"block",children:e.description})]}),(0,n.jsx)(b.A,{disablePadding:!0,children:e.sectionIds.map(e=>{let s=w.get(e);if(!s)return null;let o=s.icon,i=a===s.id;return(0,n.jsxs)(g.A,{id:"settings-nav-".concat(s.id),selected:i,"aria-current":i?"page":void 0,onClick:()=>j(s.id),sx:{mb:.5,minHeight:52,borderRadius:2,border:"1px solid transparent","&:last-of-type":{mb:0},"&.Mui-selected":{borderColor:(0,v.X4)(t.palette.primary.main,.24),bgcolor:(0,v.X4)(t.palette.primary.main,"dark"===t.palette.mode?.16:.09)},"&.Mui-selected:hover":{bgcolor:(0,v.X4)(t.palette.primary.main,"dark"===t.palette.mode?.2:.13)}},children:[(0,n.jsx)(l.A,{sx:{minWidth:44},children:(0,n.jsx)(r.default,{sx:{display:"grid",placeItems:"center",width:34,height:34,borderRadius:1.75,color:i?"primary.main":"text.secondary",bgcolor:i?(0,v.X4)(t.palette.primary.main,.13):(0,v.X4)(t.palette.text.primary,.05)},children:(0,n.jsx)(o,{fontSize:"small"})})}),(0,n.jsx)(y.A,{primary:s.title,primaryTypographyProps:{fontSize:"0.9rem",fontWeight:i?700:550}}),(0,n.jsx)(A.A,{fontSize:"small",sx:{color:i?"primary.main":"text.disabled",transform:i?"translateX(2px)":"none",transition:"transform 160ms ease"}})]},s.id)})})]},e.id))}),(0,n.jsxs)(c.A,{component:"section","aria-labelledby":"settings-panel-title-".concat(k.id),variant:"outlined",sx:{minWidth:0,overflow:"hidden",borderRadius:{xs:3,md:4},bgcolor:(0,v.X4)(t.palette.background.paper,.94),boxShadow:"dark"===t.palette.mode?"0 24px 70px rgba(0, 0, 0, 0.2)":"0 24px 70px rgba(31, 41, 55, 0.07)"},children:[(0,n.jsxs)(r.default,{sx:{display:"flex",alignItems:"center",gap:{xs:1.5,sm:2},p:{xs:2,sm:3},borderBottom:1,borderColor:"divider",background:"linear-gradient(120deg, ".concat((0,v.X4)(t.palette.primary.main,.08),", transparent 58%)")},children:[(0,n.jsx)(r.default,{sx:{display:"grid",placeItems:"center",flex:"0 0 auto",width:{xs:44,sm:52},height:{xs:44,sm:52},borderRadius:2.5,color:"primary.main",bgcolor:(0,v.X4)(t.palette.primary.main,"dark"===t.palette.mode?.18:.1),border:"1px solid ".concat((0,v.X4)(t.palette.primary.main,.18))},children:(0,n.jsx)(S,{sx:{fontSize:{xs:24,sm:28}}})}),(0,n.jsxs)(r.default,{sx:{minWidth:0,flex:1},children:[(0,n.jsx)(h.A,{id:"settings-panel-title-".concat(k.id),component:"h2",variant:"h4",sx:{fontSize:{xs:"1.35rem",sm:"1.65rem"},letterSpacing:"-0.02em"},children:k.title}),(0,n.jsx)(h.A,{color:"text.secondary",variant:"body2",sx:{mt:.35},children:k.description})]}),(0,n.jsx)(u.A,{label:"".concat(ey.findIndex(e=>e.id===k.id)+1," / ").concat(ey.length),size:"small",variant:"outlined",sx:{display:{xs:"none",sm:"inline-flex"},color:"text.secondary"}})]}),(0,n.jsx)(r.default,{sx:{p:{xs:2,sm:3,lg:4}},children:ey.map(e=>{let t=e.component,a=k.id===e.id;return(0,n.jsx)(r.default,{hidden:!a,children:(0,n.jsx)(t,{})},e.id)})})]})]})]})})}let ej=(0,H.h)("app/settings/page");function eA(){return ej.debug("Rendering SettingsPage"),(0,n.jsx)(r.default,{component:"div",sx:{minHeight:"100%"},children:(0,n.jsx)(ev,{})})}},96040:(e,t,a)=>{Promise.resolve().then(a.bind(a,88495))}},e=>{e.O(0,[4754,7758,3392,2678,981,1983,1871,5954,9562,3272,155,4123,8598,9611,7203,9001,9195,8135,8441,1255,7358],()=>e(e.s=96040)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3888],{1877:(e,t,a)=>{"use strict";a.d(t,{Hm:()=>i,xc:()=>n,yo:()=>s});let r=["key","secret","token","password"],n=e=>r.some(t=>e.toLowerCase().includes(t)),i=e=>n(e)||"authorization"===e.trim().toLowerCase(),s=e=>{if(!e)return e;if(e.includes("_-_-_")){let t=e.split("_-_-_");return 3===t.length?t[2]:e}let t=/^mcp_(.+)_[0-9a-z]+$/.exec(e);if(t&&t[1])return t[1];let a=e.indexOf("__");return a>0&&a+2<e.length?e.slice(a+2):e}},9164:(e,t,a)=>{"use strict";a.r(t),a.d(t,{StorageProvider:()=>p,default:()=>m,useStorage:()=>u});var r=a(95155),n=a(12115),i=a(29692),s=a(1877),o=a(73288),l=a(31373);let c=(0,o.h)("frontend/contexts/StorageContext"),d=(0,n.createContext)({setKey:async()=>{},changeKey:async()=>!1,verifyKey:async()=>!1,isEncryptionInitialized:async()=>!1,globalEnvVars:{},setGlobalEnvVars:async()=>{},deleteGlobalEnvVar:async()=>{},encryptValue:async()=>null,decryptValue:async()=>null,isUserEncryptionEnabled:async()=>!1,isLoading:!0,settings:{speech:{enabled:!0},update:{checkOnStartup:!1}},settingsHydrated:!1,updateSettings:async()=>{}}),u=()=>(0,n.useContext)(d),p=e=>{let{children:t}=e,[a,o]=(0,n.useState)(!1),[u,p]=(0,n.useState)(!1),[m,h]=(0,n.useState)({}),[g,f]=(0,n.useState)({speech:{enabled:!0},update:{checkOnStartup:!1}}),y=(0,n.useCallback)(async()=>{c.debug("isEncryptionInitialized: Entering method");try{let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_initialized"})});if(!e.ok)throw Error("Failed to check encryption status");let t=await e.json();return!0===t.initialized}catch(e){return c.warn("isEncryptionInitialized: Failed to check encryption status:",e),!1}},[]),x=(0,n.useCallback)(async e=>{c.debug("setKey: Entering method");try{if(!(await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"initialize",password:e})})).ok)throw Error("Failed to set encryption key")}catch(e){c.warn("setKey: Failed to set encryption key:",e)}},[]),v=(0,n.useCallback)(async(e,t)=>{c.debug("changeKey: Entering method");try{let a=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"change_password",oldPassword:e,newPassword:t})});if(!a.ok)throw Error("Failed to change encryption key");let r=await a.json();if(r.success&&sessionStorage.getItem("encryption_token")){let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"authenticate",password:t})});if(e.ok){let t=await e.json();t.success&&t.token&&(sessionStorage.setItem("encryption_token",t.token),sessionStorage.setItem("encryption_authenticated","true"),sessionStorage.removeItem("encryption_key"))}}return!0===r.success}catch(e){return c.warn("changeKey: Failed to change encryption key:",e),!1}},[]),b=(0,n.useCallback)(async e=>{c.debug("verifyKey: Entering method");try{let t=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"verify_password",password:e})});if(!t.ok)throw Error("Failed to verify encryption key");let a=await t.json();return a.valid&&a.token&&(sessionStorage.setItem("encryption_token",a.token),sessionStorage.setItem("encryption_authenticated","true"),sessionStorage.removeItem("encryption_key")),!0===a.valid}catch(e){return c.warn("verifyKey: Failed to verify encryption key:",e),!1}},[]),E=(0,n.useCallback)(async()=>{let e={speech:{enabled:!0},update:{checkOnStartup:!1}};try{var t;let a=await fetch("/api/storage?key=".concat(encodeURIComponent(i.Zg.SPEECH_SETTINGS),"&defaultValue=").concat(encodeURIComponent(JSON.stringify(e))));if(!a.ok)return void c.debug("loadSettings: settings read not ok, keeping defaults",{status:a.status});let r=await a.json();c.debug("Loaded settings from storage",{settings:r.value}),f(null!=(t=r.value)?t:e),p(!0)}catch(e){c.warn("loadSettings: failed to load settings:",e)}},[]);(0,n.useEffect)(()=>{let e=()=>{c.info("Encryption unlocked signal received; reloading settings"),E()};return window.addEventListener(l.ZB,e),()=>window.removeEventListener(l.ZB,e)},[E]),(0,n.useEffect)(()=>{(async()=>{c.debug("loadData: Entering method");try{c.info("Calling initialization API to verify storage");let e=await fetch("/api/init");if(e.ok)c.info("Storage initialization completed successfully");else{let t=await e.json();c.warn("Storage initialization warning:",t.error)}await y()||await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"initialize_default"})});let t=await fetch("/api/env?includeSecrets=false");if(t.ok){let e=await t.json();c.debug("Loaded environment variables",{count:Object.keys(e.variables||{}).length}),h(e.variables||{})}else c.error("loadData: Failed to load environment variables"),h({});await E(),o(!0)}catch(e){c.error("loadData: Error loading data:",e),o(!0)}})()},[y,E]);let w=(0,n.useCallback)(async(e,t)=>{c.debug("encryptValue: Entering method");try{let a=sessionStorage.getItem("encryption_token"),r=sessionStorage.getItem("encryption_key"),n={action:"encrypt",data:e};a?n.token=a:t?n.password=t:r&&(n.password=r);let i=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!i.ok)throw Error("Failed to encrypt value");return(await i.json()).result}catch(e){return c.warn("encryptValue: Failed to encrypt value:",e),null}},[]),S=(0,n.useCallback)(async(e,t)=>(c.debug("decryptValue: Entering method - THIS METHOD IS DEPRECATED"),c.warn("decryptValue: Frontend decryption is deprecated for security reasons"),null),[]),j=(0,n.useCallback)(async()=>{c.debug("isUserEncryptionEnabled: Entering method");try{let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_user_encryption"})});if(!e.ok)throw Error("Failed to check user encryption status");let t=await e.json();return!0===t.userEncryption}catch(e){return c.warn("isUserEncryptionEnabled: Failed to check user encryption status:",e),!1}},[]),A=(0,n.useCallback)(async e=>{c.debug("setGlobalEnvVars: Entering method");try{await y()||await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"initialize_default"})});let t=await fetch("/api/env",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"setAll",variables:e})});if(!t.ok){let e=await t.json();c.error("setGlobalEnvVars: Failed to set environment variables:",e.error);return}let a={};for(let[t,r]of Object.entries(e)){let e="object"==typeof r&&null!==r&&"value"in r?r.value:r,n="object"==typeof r&&null!==r&&"metadata"in r?r.metadata:{isSecret:(0,s.xc)(t)};n.isSecret?a[t]={value:"********",metadata:n}:a[t]={value:e,metadata:n}}h(a)}catch(e){c.error("setGlobalEnvVars: Error setting environment variables:",e)}},[y]),_=(0,n.useCallback)(async e=>{c.debug("deleteGlobalEnvVar: Deleting environment variable: ".concat(e));try{let t=await fetch("/api/env",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",key:e})});if(!t.ok){let e=await t.json();c.error("deleteGlobalEnvVar: Failed to delete environment variable:",e.error);return}h(t=>{let a={...t};return delete a[e],a})}catch(e){c.error("deleteGlobalEnvVar: Error deleting environment variable:",e)}},[]),I=(0,n.useCallback)(async e=>{c.debug("updateSettings: Updating settings",{newSettings:e});try{await (0,i.VH)(i.Zg.SPEECH_SETTINGS,e),f(e)}catch(e){c.error("updateSettings: Error updating settings:",e)}},[]);return(0,r.jsx)(d.Provider,{value:{setKey:x,changeKey:v,verifyKey:b,isEncryptionInitialized:y,globalEnvVars:m,setGlobalEnvVars:A,deleteGlobalEnvVar:_,encryptValue:w,decryptValue:S,isUserEncryptionEnabled:j,isLoading:!a,settings:g,settingsHydrated:u,updateSettings:I},children:t})},m=d},25094:(e,t,a)=>{Promise.resolve().then(a.bind(a,71769))},27156:(e,t,a)=>{"use strict";a.d(t,{Z:()=>r});var r=function(e){return e.MODELS="models",e.FLOWS="flows",e.CHAT_HISTORY="history",e.THEME="theme",e.THEME_STYLE="theme_style",e.ENCRYPTION_KEY="encryption_key",e.MCP_SERVERS="mcp_servers",e.GLOBAL_ENV_VARS="global_env_vars",e.CURRENT_CONVERSATION_ID="current_conversation_id",e.SELECTED_FLOW_ID="selected_flow_id",e.LAST_PICKED_FLOW_ID="last_picked_flow_id",e.SPEECH_SETTINGS="speech_settings",e.SPOTLIGHT_SERVERS="spotlight_servers",e.PLANNED_EXECUTIONS="planned_executions",e.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",e.MCP_QUALITY_SETTINGS="mcp_quality_settings",e.RUN_RESOURCE_SETTINGS="run_resource_settings",e.KV_STORE_SETTINGS="kv_store_settings",e.PENDING_APPROVALS="pending_approvals",e.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",e.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",e.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",e.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",e.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",e.PACKAGE_INSTALLS="package_installs",e.EXPERIMENTAL_SETTINGS="experimental_settings",e.REGISTRY_ACCOUNT="registry_account",e.REGISTRY_SETTINGS="registry_settings",e.TELEMETRY_STATE="telemetry_state",e}({})},29692:(e,t,a)=>{"use strict";a.d(t,{Zg:()=>r.Z,YM:()=>l,VH:()=>o,Mj:()=>s});var r=a(27156),n=a(12115);let i=(0,a(73288).h)("utils/storage/frontend.ts");function s(e,t){i.verbose("useLocalStorage: Entering method");let[a,r]=(0,n.useState)(t),[s,o]=(0,n.useState)(!0),l=(0,n.useRef)(a);return(0,n.useEffect)(()=>{l.current=a},[a]),(0,n.useEffect)(()=>{(async()=>{i.verbose("loadValue: Entering method");try{let a=await fetch("/api/storage?key=".concat(encodeURIComponent(e),"&defaultValue=").concat(encodeURIComponent(JSON.stringify(t)))),n=await a.json();a.ok&&r(n.value)}catch(t){i.warn('Error reading storage key "'.concat(e,'":'),t)}finally{o(!1)}})()},[e]),[a,(0,n.useCallback)(async t=>{i.verbose("setValue: Entering method");try{let a=t instanceof Function?t(l.current):t;if(r(a),!(await fetch("/api/storage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,value:a})})).ok)throw Error("Failed to save value")}catch(t){i.warn('Error setting storage key "'.concat(e,'":'),t)}},[e]),s]}let o=async(e,t)=>{i.verbose("saveItem: Entering method");try{if(!(await fetch("/api/storage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,value:t})})).ok)throw Error("Failed to save item")}catch(e){throw i.error("Error saving to storage:",e),e}},l=async(e,t)=>{i.verbose("loadItem: Entering method");try{let a=await fetch("/api/storage?key=".concat(encodeURIComponent(e),"&defaultValue=").concat(encodeURIComponent(JSON.stringify(t))));if(!a.ok)throw Error("Failed to load item");return(await a.json()).value}catch(e){return i.error("Error loading from storage:",e),t}}},31373:(e,t,a)=>{"use strict";a.d(t,{UJ:()=>r,ZB:()=>n,bx:()=>s});let r="flujo:encryption-locked",n="flujo:encryption-unlocked",i=!1;function s(){if(i||"function"!=typeof window.fetch)return;i=!0;let e=window.fetch.bind(window);window.fetch=async function(){for(var t=arguments.length,a=Array(t),n=0;n<t;n++)a[n]=arguments[n];let i=await e(...a);return 423===i.status&&function(){try{sessionStorage.removeItem("encryption_authenticated"),sessionStorage.removeItem("encryption_token")}catch(e){}window.dispatchEvent(new CustomEvent(r))}(),i}}},53228:(e,t,a)=>{"use strict";a.d(t,{G:()=>r});let r={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_REVERT_TO_HERE:!1}},71769:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>et});var r=a(95155),n=a(12115),i=a(94049),s=a(20063),o=a(9562),l=a(29767),c=a(84578),d=a(25635),u=a(2300),p=a(78470),m=a(95070),h=a(43070),g=a(16963),f=a(2456),y=a(64792),x=a(71356),v=a(45202),b=a(28548),E=a(91871),w=a(52641),S=a(95436),j=a(55606),A=a(86973),_=a(80777),I=a(52005),k=a(22003),T=a(57813),C=a(26466),O=a(76530),R=a(25541),N=a(11587),P=a(94929),L=a(79508);let D=[{field:"flowIds",query:"flowId"},{field:"plannedExecutionIds",query:"plannedExecutionId"},{field:"sources",query:"source"},{field:"statuses",query:"status"},{field:"modelIds",query:"modelId"},{field:"providerIds",query:"providerId"},{field:"credentialIds",query:"credentialId"}];function F(e){return e.toISOString().slice(0,10)}function V(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date,t=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate())),a=new Date(t);return a.setUTCDate(a.getUTCDate()-6),{range:{from:F(a),to:F(t)}}}class U{async get(e,t){let a=await fetch(function(e){let t=new URLSearchParams;for(let{field:a,query:r}of(t.set("from",e.range.from),t.set("to",e.range.to),D)){let n=e[a];null==n||n.forEach(e=>t.append(r,e))}return"/api/statistics?".concat(t.toString())}(e),{method:"GET",cache:"no-store",signal:t}),r=await a.json().catch(()=>void 0);if(!a.ok)throw Error("string"==typeof(null==r?void 0:r.message)?r.message:"Statistics request failed (HTTP ".concat(a.status,")."));if(!function(e){if(!e||"object"!=typeof e)return!1;let t=e.range,a=e.summary,r=e.rankings;return!!t&&"string"==typeof t.from&&"string"==typeof t.to&&!!a&&"number"==typeof a.runs&&Array.isArray(e.daily)&&!!r&&Array.isArray(r.flows)&&Array.isArray(r.plannedExecutions)&&Array.isArray(r.models)&&Array.isArray(r.providers)&&Array.isArray(r.credentials)&&Array.isArray(r.nodes)&&Array.isArray(r.tools)}(r))throw Error("The statistics service returned an invalid response.");return r}}let G=new U,M=["chat","api","schedule","trigger","subflow","mcp","internal","internal-tool"],z=["completed","error","capped","cancelled","paused","skipped"],W=[{field:"flowIds",label:"Flow IDs"},{field:"plannedExecutionIds",label:"Planned execution IDs"},{field:"modelIds",label:"Model IDs"},{field:"providerIds",label:"Provider IDs"},{field:"credentialIds",label:"Credential IDs"}],B=new Intl.NumberFormat,H=new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1});function J(e){if(e<1e3)return"".concat(Math.round(e)," ms");let t=e/1e3;if(t<60)return"".concat(t.toFixed(+(t<10))," s");let a=t/60;if(a<60)return"".concat(a.toFixed(+(a<10))," min");let r=a/60;return r<24?"".concat(r.toFixed(+(r<10))," hr"):"".concat((r/24).toFixed(1)," days")}function K(e){return"".concat((100*e).toFixed(+(e>0&&e<.1)),"%")}function q(e){let{label:t,values:a,onChange:i}=e,[s,l]=(0,n.useState)(a.join(", "));(0,n.useEffect)(()=>{l(a.join(", "))},[a]);let c=()=>i(Array.from(new Set(s.split(",").map(e=>e.trim()).filter(Boolean))));return(0,r.jsx)(o.A,{label:t,value:s,onChange:e=>l(e.target.value),onBlur:c,onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c())},size:"small",fullWidth:!0,helperText:"Comma-separated exact IDs",inputProps:{"aria-label":"".concat(t,", comma-separated")}})}function X(e){let{label:t,value:a,detail:n}=e;return(0,r.jsx)(l.A,{variant:"outlined",sx:{minWidth:0},children:(0,r.jsxs)(c.A,{children:[(0,r.jsx)(d.A,{color:"text.secondary",variant:"body2",children:t}),(0,r.jsx)(d.A,{component:"p",variant:"h5",sx:{my:.5,fontWeight:650},children:a}),(0,r.jsx)(d.A,{color:"text.secondary",variant:"caption",children:n})]})})}function Y(e){let{title:t,description:a,buckets:n,metric:s,formatValue:o,onSelectDate:l}=e,c=n.map(s),h=Math.max(...c,1);return(0,r.jsxs)(u.A,{component:"section",variant:"outlined",sx:{p:2,minWidth:0},children:[(0,r.jsx)(d.A,{component:"h3",variant:"h6",children:t}),(0,r.jsx)(d.A,{color:"text.secondary",variant:"body2",sx:{mb:2},children:a}),(0,r.jsx)(i.default,{component:"ul","aria-label":"".concat(t," by UTC day"),sx:{display:"grid",gridTemplateColumns:"repeat(".concat(Math.max(n.length,1),", minmax(40px, 1fr))"),gap:1,listStyle:"none",m:0,p:0,minWidth:Math.max(48*n.length,280)},children:n.map((e,a)=>{var n;let s=c[a];return(0,r.jsx)(i.default,{component:"li",sx:{minWidth:0},children:(0,r.jsx)(p.A,{title:"Filter the dashboard to this UTC day",children:(0,r.jsxs)(m.A,{onClick:()=>l(e.date),"aria-label":"".concat(t,": ").concat(o(s)," on ").concat(e.date,". Filter to this day."),sx:{width:"100%",height:180,display:"flex",flexDirection:"column",justifyContent:"flex-end",borderRadius:1,px:.5,"&:focus-visible":{outline:"2px solid",outlineColor:"primary.main"}},children:[(0,r.jsx)(d.A,{variant:"caption",sx:{mb:.5},children:o(s)}),(0,r.jsx)(i.default,{"aria-hidden":"true",sx:{width:"70%",minHeight:4,height:"".concat(Math.max(4,s/h*125),"px"),maxHeight:125,bgcolor:"primary.main",borderRadius:"4px 4px 0 0"}}),(0,r.jsx)(d.A,{variant:"caption",color:"text.secondary",sx:{mt:.5},children:(n=e.date,new Intl.DateTimeFormat(void 0,{month:"short",day:"numeric",timeZone:"UTC"}).format(new Date("".concat(n,"T00:00:00Z"))))})]})})},e.date)})})]})}function Z(e){let{title:t,rows:a,selectedIds:n,mode:s,onSelect:o}=e,l="providers"===s;return(0,r.jsxs)(u.A,{component:"section",variant:"outlined",sx:{minWidth:0},children:[(0,r.jsxs)(i.default,{sx:{px:2,pt:2},children:[(0,r.jsx)(d.A,{component:"h3",variant:"h6",children:t}),(0,r.jsx)(d.A,{color:"text.secondary",variant:"body2",children:"Select a row to apply it as a dashboard-wide filter."})]}),(0,r.jsx)(h.A,{sx:{mt:1},children:(0,r.jsxs)(g.A,{size:"small","aria-label":"".concat(t," ranking"),children:[(0,r.jsx)(f.A,{children:(0,r.jsxs)(y.A,{children:[(0,r.jsx)(x.A,{children:"Name"}),(0,r.jsx)(x.A,{align:"right",children:l?"Attempts":"Logical runs"}),(0,r.jsx)(x.A,{align:"right",children:l?"Provider failures":"Failures"}),!l&&(0,r.jsx)(x.A,{align:"right",children:"Skips"}),(0,r.jsx)(x.A,{align:"right",children:"Tokens"}),(0,r.jsx)(x.A,{align:"right",children:l?"Provider wall-clock":"Run wall-clock"}),l?(0,r.jsx)(x.A,{align:"right",children:"Peak context"}):(0,r.jsx)(x.A,{align:"right",children:"Tool failures"})]})}),(0,r.jsx)(v.A,{children:0===a.length?(0,r.jsx)(y.A,{children:(0,r.jsx)(x.A,{colSpan:l?6:7,children:(0,r.jsx)(d.A,{color:"text.secondary",align:"center",sx:{py:2},children:"No ranked items match the current filters."})})}):a.map(e=>{let a="Credentials"===t?e.id:e.name||e.id;return(0,r.jsxs)(y.A,{hover:!0,selected:n.includes(e.id),tabIndex:0,"aria-label":"Filter by ".concat(t,": ").concat(a),onClick:()=>o(e),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),o(e))},sx:{cursor:"pointer","&:focus-visible":{outline:"2px solid",outlineColor:"primary.main"}},children:[(0,r.jsxs)(x.A,{children:[(0,r.jsx)(d.A,{variant:"body2",fontWeight:600,children:a}),"Credentials"!==t&&e.name&&(0,r.jsx)(d.A,{variant:"caption",color:"text.secondary",children:e.id})]}),(0,r.jsx)(x.A,{align:"right",children:B.format(l?e.providerAttempts:e.runs)}),(0,r.jsx)(x.A,{align:"right",children:B.format(l?e.providerErrors:e.errors)}),!l&&(0,r.jsx)(x.A,{align:"right",children:B.format(e.schedulerSkips)}),(0,r.jsx)(x.A,{align:"right",children:H.format(e.usage.totalTokens)}),(0,r.jsx)(x.A,{align:"right",children:J(l?e.providerDuration.totalMs:e.runDuration.totalMs)}),l?(0,r.jsx)(x.A,{align:"right",children:K(e.peakContextUtilization)}):(0,r.jsx)(x.A,{align:"right",children:B.format(e.toolFailures)})]},e.id)})})]})})]})}function Q(){var e,t,a,s,l,c,p;let[m,h]=(0,n.useState)(()=>V()),[g,f]=(0,n.useState)(null),[y,x]=(0,n.useState)(!0),[v,D]=(0,n.useState)(null),[F,U]=(0,n.useState)(0),[Q,$]=(0,n.useState)("overview"),ee=m.range.from&&m.range.to?m.range.from>m.range.to?"The start date must be on or before the end date.":null:"Choose both UTC dates.";(0,n.useEffect)(()=>{if(ee){x(!1),D(ee);return}let e=new AbortController;return x(!0),D(null),G.get(m,e.signal).then(e=>f(e)).catch(t=>{e.signal.aborted||D(t instanceof Error?t.message:"Statistics are unavailable.")}).finally(()=>{e.signal.aborted||x(!1)}),()=>e.abort()},[m,F,ee]);let et=(e,t)=>{h(a=>({...a,[e]:t.length>0?Array.from(new Set(t)):void 0}))},ea=(0,n.useMemo)(()=>{let e=[],t={flowIds:"Flow",plannedExecutionIds:"Execution",sources:"Source",statuses:"Status",modelIds:"Model",providerIds:"Provider",credentialIds:"Credential"};return Object.keys(t).forEach(a=>{let r=m[a];null==r||r.forEach(r=>e.push({field:a,value:r,label:"".concat(t[a],": ").concat(r)}))}),e},[m]),er=e=>t=>{et(e,[t.id])},en=e=>{h(t=>({...t,range:{from:e,to:e}}))},ei=!!g&&(g.summary.runs>0||g.summary.schedulerSkips>0||g.summary.providerAttempts>0||g.summary.nodeVisits>0||g.summary.toolCalls>0),es=g&&g.summary.runs>0?g.summary.successes/g.summary.runs:0;return(0,r.jsxs)(i.default,{component:"section",sx:{overflow:"auto"},children:[(0,r.jsx)(L.default,{eyebrow:"Observe",title:"Statistics",description:"Redacted execution analytics that reveal how your agent systems are behaving.",icon:N.A,badge:(0,r.jsx)(b.A,{label:"Experimental",size:"small",color:"secondary",variant:"outlined"}),actions:(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(E.A,{variant:"outlined",startIcon:(0,r.jsx)(R.A,{}),onClick:()=>h(V()),disabled:y&&!g,children:"Reset"}),(0,r.jsx)(E.A,{variant:"contained",startIcon:(0,r.jsx)(O.A,{}),onClick:()=>U(e=>e+1),disabled:y||!!ee,children:"Refresh"})]})}),(0,r.jsxs)(i.default,{sx:{p:{xs:2,md:3},width:"100%",maxWidth:1440,mx:"auto"},children:[(0,r.jsxs)(u.A,{component:"section",variant:"outlined",sx:{p:2,mb:2},children:[(0,r.jsx)(d.A,{component:"h2",variant:"h6",sx:{mb:1.5},children:"Shared filters"}),(0,r.jsxs)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"repeat(2, 1fr)",lg:"repeat(4, 1fr)"},gap:2,alignItems:"start"},children:[(0,r.jsx)(o.A,{label:"From (UTC)",type:"date",value:m.range.from,onChange:e=>h(t=>({...t,range:{...t.range,from:e.target.value}})),size:"small",fullWidth:!0,InputLabelProps:{shrink:!0},inputProps:{"aria-label":"Statistics start date in UTC"}}),(0,r.jsx)(o.A,{label:"To (UTC)",type:"date",value:m.range.to,onChange:e=>h(t=>({...t,range:{...t.range,to:e.target.value}})),size:"small",fullWidth:!0,InputLabelProps:{shrink:!0},inputProps:{"aria-label":"Statistics end date in UTC"}}),(0,r.jsxs)(w.A,{size:"small",fullWidth:!0,children:[(0,r.jsx)(S.A,{id:"statistics-source-label",children:"Sources"}),(0,r.jsx)(j.A,{labelId:"statistics-source-label",multiple:!0,label:"Sources",value:null!=(e=m.sources)?e:[],onChange:e=>et("sources","string"==typeof e.target.value?e.target.value.split(","):e.target.value),renderValue:e=>e.join(", "),children:M.map(e=>(0,r.jsx)(A.A,{value:e,children:e},e))})]}),(0,r.jsxs)(w.A,{size:"small",fullWidth:!0,children:[(0,r.jsx)(S.A,{id:"statistics-status-label",children:"Statuses"}),(0,r.jsx)(j.A,{labelId:"statistics-status-label",multiple:!0,label:"Statuses",value:null!=(t=m.statuses)?t:[],onChange:e=>et("statuses","string"==typeof e.target.value?e.target.value.split(","):e.target.value),renderValue:e=>e.join(", "),children:z.map(e=>(0,r.jsx)(A.A,{value:e,children:e},e))})]}),W.map(e=>{var t;let{field:a,label:n}=e;return(0,r.jsx)(q,{label:n,values:null!=(t=m[a])?t:[],onChange:e=>et(a,e)},a)})]}),(0,r.jsx)(_.A,{direction:"row",flexWrap:"wrap",gap:1,alignItems:"center","aria-label":"Active statistics filters",sx:{mt:ea.length>0?2:1},children:0===ea.length?(0,r.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"No dimension filters applied."}):ea.map(e=>(0,r.jsx)(b.A,{label:e.label,onDelete:()=>((e,t)=>{var a;let r=null!=(a=m[e])?a:[];et(e,r.filter(e=>e!==t))})(e.field,e.value),size:"small"},"".concat(e.field,":").concat(e.value)))})]}),y&&(0,r.jsx)(I.A,{"aria-label":"Refreshing statistics",sx:{mb:2}}),v&&(0,r.jsx)(k.A,{severity:"error",sx:{mb:2},action:(0,r.jsx)(E.A,{color:"inherit",size:"small",onClick:()=>U(e=>e+1),children:"Retry"}),children:v}),y&&!g?(0,r.jsxs)(_.A,{alignItems:"center",spacing:1.5,sx:{py:8},children:[(0,r.jsx)(P.default,{size:"large"}),(0,r.jsx)(d.A,{children:"Loading aggregate statistics…"})]}):g?ei?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(i.default,{component:"section","aria-label":"Statistics summary",sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"repeat(2, 1fr)",lg:"repeat(5, 1fr)"},gap:2,mb:2},children:[(0,r.jsx)(X,{label:"Logical runs",value:B.format(g.summary.runs),detail:"".concat(B.format(g.summary.schedulerSkips)," scheduler skips")}),(0,r.jsx)(X,{label:"Success rate",value:K(es),detail:"".concat(B.format(g.summary.successes)," completed successfully")}),(0,r.jsx)(X,{label:"Tokens",value:H.format(g.summary.usage.totalTokens),detail:"".concat(H.format(g.summary.usage.inputTokens)," input \xb7 ").concat(H.format(g.summary.usage.outputTokens)," output")}),(0,r.jsx)(X,{label:"Run wall-clock time",value:J(g.summary.runDuration.totalMs),detail:"P95 ".concat(J(g.summary.runDuration.p95Ms))}),(0,r.jsx)(X,{label:"Failed tool calls",value:B.format(g.summary.toolFailures),detail:"".concat(B.format(g.summary.toolCalls)," total tool calls")})]}),(0,r.jsx)(u.A,{variant:"outlined",sx:{mb:2},children:(0,r.jsxs)(T.A,{value:Q,onChange:(e,t)=>$(t),variant:"scrollable",scrollButtons:"auto","aria-label":"Statistics views",children:[(0,r.jsx)(C.A,{value:"overview",label:"Overview",id:"statistics-tab-overview"}),(0,r.jsx)(C.A,{value:"flows",label:"Flows",id:"statistics-tab-flows"}),(0,r.jsx)(C.A,{value:"executions",label:"Executions",id:"statistics-tab-executions"}),(0,r.jsx)(C.A,{value:"models",label:"Models",id:"statistics-tab-models"}),(0,r.jsx)(C.A,{value:"providers",label:"Providers & Keys",id:"statistics-tab-providers"})]})}),(0,r.jsxs)(i.default,{role:"tabpanel","aria-labelledby":"statistics-tab-".concat(Q),children:["overview"===Q&&(0,r.jsxs)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",lg:"repeat(2, minmax(0, 1fr))"},gap:2,overflowX:"auto"},children:[(0,r.jsx)(Y,{title:"Executions",description:"Logical runs by UTC day. Select a bar to drill into that day.",buckets:g.daily,metric:e=>e.summary.runs,formatValue:e=>B.format(e),onSelectDate:en}),(0,r.jsx)(Y,{title:"Tokens",description:"Aggregate token usage by UTC day. Select a bar to drill into that day.",buckets:g.daily,metric:e=>e.summary.usage.totalTokens,formatValue:e=>H.format(e),onSelectDate:en})]}),"flows"===Q&&(0,r.jsx)(Z,{title:"Flows",rows:g.rankings.flows,selectedIds:null!=(a=m.flowIds)?a:[],mode:"runs",onSelect:er("flowIds")}),"executions"===Q&&(0,r.jsx)(Z,{title:"Planned executions",rows:g.rankings.plannedExecutions,selectedIds:null!=(s=m.plannedExecutionIds)?s:[],mode:"runs",onSelect:er("plannedExecutionIds")}),"models"===Q&&(0,r.jsxs)(i.default,{children:[(0,r.jsx)(k.A,{severity:"info",sx:{mb:2},children:"Summed active time is not available in the current aggregate contract. The table reports summed provider-attempt wall-clock duration without inferring a new metric."}),(0,r.jsx)(Z,{title:"Models",rows:g.rankings.models,selectedIds:null!=(l=m.modelIds)?l:[],mode:"providers",onSelect:er("modelIds")})]}),"providers"===Q&&(0,r.jsxs)(_.A,{spacing:2,children:[(0,r.jsx)(k.A,{severity:"info",children:"Summed active time is not available in the current aggregate contract. Credential values below are opaque backend-generated identifiers only."}),(0,r.jsx)(Z,{title:"Providers",rows:g.rankings.providers,selectedIds:null!=(c=m.providerIds)?c:[],mode:"providers",onSelect:er("providerIds")}),(0,r.jsx)(Z,{title:"Credentials",rows:g.rankings.credentials,selectedIds:null!=(p=m.credentialIds)?p:[],mode:"providers",onSelect:er("credentialIds")})]})]})]}):(0,r.jsxs)(u.A,{variant:"outlined",sx:{p:4,textAlign:"center"},children:[(0,r.jsx)(d.A,{component:"h2",variant:"h6",children:"No telemetry for this selection"}),(0,r.jsx)(d.A,{color:"text.secondary",sx:{mt:1,maxWidth:620,mx:"auto"},children:"Reliable collection begins after experimental statistics are enabled. Runs from before collection started are not reconstructed, and no raw conversations or credentials are downloaded to build this view."})]}):null]})]})}var $=a(9164);let ee=(0,a(73288).h)("app/statistics/page");function et(){var e,t;let a=(0,s.useRouter)(),{settings:o,settingsHydrated:l}=(0,$.useStorage)(),c=l&&null!=(t=null==o||null==(e=o.experimental)?void 0:e.enabled)&&t;return((0,n.useEffect)(()=>{l&&!c&&(ee.debug("Experimental features disabled — redirecting away from /statistics"),a.replace("/settings"))},[l,c,a]),l&&c)?(0,r.jsx)(i.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,r.jsx)(Q,{})}):(0,r.jsx)(P.default,{})}},73288:(e,t,a)=>{"use strict";a.d(t,{h:()=>l});var r=a(53228);let n={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},i="number"==typeof r.G.LOG_LEVEL?r.G.LOG_LEVEL:n.ERROR;function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>6)return String(e);if(!(e instanceof Error))return e;let a={name:e.name,message:e.message};for(let r of Object.getOwnPropertyNames(e)){if("name"===r||"message"===r)continue;let n=e[r];"function"!=typeof n&&("stack"===r?a.stack=n:"cause"===r?a.cause=s(n,t+1):"errors"===r&&Array.isArray(n)?a.errors=n.map(e=>s(e,t+1)):a[r]=n)}return a}function o(e,t,a,r,o){if(e>=("number"==typeof o?o:i)){if("function"==typeof r)try{r=r()}catch(e){r="[lazy log data threw]"}let i=new Date().toISOString(),o="[".concat(i,"] [").concat(t,"]"),l="".concat(o," ").concat(a);if(void 0!==r)if(r instanceof Error||"object"==typeof r)try{let e=r instanceof Error?s(r):r,t=JSON.stringify(e,(e,t)=>t instanceof Error?s(t):t,2);l+=":\n".concat(t)}catch(e){l+=": [Object cannot be stringified]"}else l+=": ".concat(r);switch(e){case n.VERBOSE:console.debug("[VERBOSE] ".concat(l));break;case n.DEBUG:console.debug(l);break;case n.INFO:console.info(l);break;case n.WARN:console.warn(l);break;case n.ERROR:console.error(l);break;default:console.log(l)}}}function l(e,t){let a,r=((a=e.replace(/^src\//,"")).startsWith("/")&&(a=a.substring(1)),a);return{verbose:(e,a)=>{o(n.VERBOSE,r,e,a,t)},debug:(e,a)=>{o(n.DEBUG,r,e,a,t)},info:(e,a)=>{o(n.INFO,r,e,a,t)},warn:(e,a)=>{o(n.WARN,r,e,a,t)},error:(e,a)=>{o(n.ERROR,r,e,a,t)}}}},79508:(e,t,a)=>{"use strict";a.d(t,{default:()=>c});var r=a(95155),n=a(33567),i=a(94049),s=a(80777),o=a(25635),l=a(8532);function c(e){let{title:t,description:a,eyebrow:c,icon:d,leading:u,badge:p,actions:m,compact:h=!1,maxWidth:g=1440}=e,f=(0,n.A)();return(0,r.jsx)(i.default,{component:"header",sx:{position:"relative",overflow:"hidden",borderBottom:1,borderColor:"divider",background:"linear-gradient(110deg, ".concat((0,l.X4)(f.palette.primary.main,"dark"===f.palette.mode?.09:.055),", transparent 38%, ").concat((0,l.X4)(f.palette.secondary.main,.045),")"),"&::after":{position:"absolute",top:-90,right:"8%",width:220,height:160,borderRadius:"50%",content:'""',pointerEvents:"none",background:"radial-gradient(circle, ".concat((0,l.X4)(f.palette.primary.main,.16),", transparent 68%)"),filter:"blur(20px)"}},children:(0,r.jsxs)(i.default,{sx:{position:"relative",zIndex:1,display:"flex",width:"100%",maxWidth:g,mx:"auto",px:{xs:2,sm:3,lg:4},py:h?{xs:1.8,sm:2}:{xs:2.2,sm:2.8},alignItems:{xs:"flex-start",md:"center"},justifyContent:"space-between",flexDirection:{xs:"column",md:"row"},gap:2},children:[(0,r.jsxs)(s.A,{direction:"row",spacing:1.5,alignItems:"center",sx:{minWidth:0},children:[u,d&&(0,r.jsx)(i.default,{"aria-hidden":"true",sx:{display:"grid",width:h?40:46,height:h?40:46,flexShrink:0,placeItems:"center",border:"1px solid ".concat((0,l.X4)(f.palette.primary.main,.24)),borderRadius:h?2.8:3.2,color:"primary.light",bgcolor:(0,l.X4)(f.palette.primary.main,.1),boxShadow:"inset 0 1px 0 ".concat((0,l.X4)(f.palette.common.white,.08),", 0 10px 30px ").concat((0,l.X4)(f.palette.primary.main,.12))},children:(0,r.jsx)(d,{sx:{fontSize:h?21:24}})}),(0,r.jsxs)(i.default,{sx:{minWidth:0},children:[(c||p)&&(0,r.jsxs)(s.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.35},children:[c&&(0,r.jsx)(o.A,{sx:{color:"primary.light",fontSize:"0.67rem",fontWeight:780,letterSpacing:"0.13em",textTransform:"uppercase"},children:c}),p]}),(0,r.jsx)(o.A,{component:"h1",variant:"h5",sx:{overflow:"hidden",textOverflow:"ellipsis",fontSize:h?"1.2rem":void 0,whiteSpace:{xs:"normal",sm:"nowrap"}},children:t}),a&&(0,r.jsx)(o.A,{variant:"body2",color:"text.secondary",sx:{mt:.45,maxWidth:720,textWrap:"balance"},children:a})]})]}),m&&(0,r.jsx)(i.default,{sx:{display:"flex",width:{xs:"100%",md:"auto"},flexShrink:0,flexWrap:"wrap",alignItems:"center",gap:1,"& > .MuiButton-root":{flex:{xs:"1 1 auto",sm:"0 0 auto"}}},children:m})]})})}},94929:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var r=a(95155);a(12115);var n=a(94049),i=a(4474);let s=e=>{let{size:t="medium",color:a="primary",className:s="",sx:o={}}=e,l="white"===a?{color:"#fff",...o}:o;return(0,r.jsxs)(n.default,{component:"span",sx:{display:"inline-block",lineHeight:0,...l},className:s,role:"status",children:[(0,r.jsx)(i.default,{size:{small:16,medium:24,large:36}[t],color:"white"===a?"inherit":a,"aria-hidden":"true"}),(0,r.jsx)(n.default,{component:"span",sx:{position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:0},children:"Loading..."})]})}}},e=>{e.O(0,[4754,7758,3392,2678,981,1983,1871,5954,9562,3816,4386,4122,8853,8441,1255,7358],()=>e(e.s=25094)),_N_E=e.O()}]);
|
|
File without changes
|
|
File without changes
|