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([[8329],{11433:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>v});var n=r(95155),o=r(12115),a=r(94049),l=r(2300),i=r(25635),s=r(63941),d=r(80372),c=r(29985),u=r(90880);function p(e,t){let r=t.toLocaleLowerCase(),n=new Set;return e.filter(e=>{var t;return!n.has(e.value)&&(n.add(e.value),"".concat(e.label," ").concat(e.name," ").concat(e.server," ").concat(null!=(t=e.description)?t:"").toLocaleLowerCase().includes(r))}).sort((e,t)=>{let r={tool:0,resource:1,global:2,runres:3};return r[e.kind]-r[t.kind]||e.label.localeCompare(t.label)})}function m(e){let t=e.split("\n").map(e=>({type:"paragraph",children:(e=>{let t=(0,u.sE)(e);if(0===t.length)return[{text:e}];let r=[],n=0;for(let o of t)o.index>n&&r.push({text:e.slice(n,o.index)}),r.push({type:"binding-reference",kind:o.kind,server:o.server,name:o.name,children:[{text:""}]}),n=o.index+o.fullMatch.length;return n<e.length&&r.push({text:e.slice(n)}),r})(e)}));return t.length>0?t:[{type:"paragraph",children:[{text:""}]}]}function h(e){return e.map(e=>(e.children||[]).map(e=>s.EY.isText(e)?e.text:(0,u.Pj)(e.kind,e.server,e.name)).join("")).join("\n")}r(32098);let x=(e,t)=>{e.selection||s.gB.select(e,s.KE.end(e,[])),s.gB.insertNodes(e,(e=>({type:"binding-reference",kind:e.kind,server:e.server,name:e.name,children:[{text:""}]}))(t)),s.gB.move(e)},f=e=>{let{element:t,disabled:r,invalid:o}=e,a=(0,c.Zi)(),l="tool"===t.kind&&"handoff"===t.server,i="global"===t.kind?"global":"runres"===t.kind?"runres":"resource"===t.kind?"resource":l?"handoff":"",d=()=>{r||(s.gB.removeNodes(a,{at:c.rL.findPath(a,t)}),c.rL.focus(a))};return(0,n.jsxs)("span",{contentEditable:!1,className:"tool-reference-container ".concat(i).concat(o?" invalid":""),title:o?"This reference is not available in the current context":void 0,"aria-invalid":o||void 0,children:[(0,n.jsx)("span",{className:"tool-reference ".concat(i).concat(o?" invalid":""),children:(0,u.CN)(t)}),!r&&(0,n.jsx)("span",{className:"tool-reference-delete ".concat(i),role:"button","aria-label":"Remove ".concat((0,u.CN)(t)),tabIndex:0,onClick:e=>{e.preventDefault(),e.stopPropagation(),d()},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),e.stopPropagation(),d())},children:"\xd7"})]})},g=(0,o.forwardRef)((e,t)=>{let{value:r,onChange:g,globalNames:v=[],suggestions:y,placeholder:b,disabled:j=!1,multiline:A=!0,minRows:w=1,maxRows:k,autoFocus:C=!1,bare:S=!1,ariaLabel:T,dataTour:I,containerSx:O,onKeyDown:N,onPaste:P}=e,L=(0,o.useMemo)(()=>(0,d.$k)((e=>{let{isInline:t,isVoid:r,insertData:n,insertText:o}=e;return e.isInline=e=>"binding-reference"===e.type||t(e),e.isVoid=e=>"binding-reference"===e.type||r(e),e.insertText=t=>{o(t),t.includes("}")&&(e=>{if(!e.selection||!s.Q6.isCollapsed(e.selection))return;let t=e.selection.anchor,r=s.bP.get(e,t.path);if(!s.EY.isText(r))return;let n=r.text.slice(0,t.offset).match(/\$\{global:([^}\r\n]+)\}$/);if(!n||void 0===n.index)return;let o=(0,u.y4)(n[0]);o&&(s.gB.select(e,{anchor:{path:t.path,offset:n.index},focus:t}),s.gB.delete(e),x(e,o))})(e)},e.insertData=t=>{let r=t.getData("text/plain");if(r&&(0,u.sE)(r).length>0)return void s.gB.insertFragment(e,m(r));n(t)},e})((0,c.o$)((0,s.ie)()))),[]),U=(0,o.useMemo)(()=>m(r||""),[]),[M,R]=(0,o.useState)(null),[F,E]=(0,o.useState)(0),[z,W]=(0,o.useState)(0),D=(0,o.useRef)(!1),q=(0,o.useMemo)(()=>p([...null!=y?y:[],...v.map(e=>(0,u.Ub)({kind:"global",server:"",name:e},e))],""),[v,y]),B=(0,o.useMemo)(()=>y?new Set(q.map(e=>e.value)):null,[q,y]),K=(0,o.useCallback)(()=>{if(!L.selection||!s.Q6.isCollapsed(L.selection))return void R(null);let e=L.selection.anchor,t=s.bP.get(L,e.path);if(!s.EY.isText(t))return void R(null);let r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.length,r=e.slice(0,t).match(/(?:^|\s)@([^\s@{}]*)$/);if(!r||void 0===r.index)return null;let n=r.index+ +!r[0].startsWith("@");return{query:r[1],start:n,end:t}}(t.text,e.offset),n=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.length,r=e.slice(0,t).match(/\$\{global:([^{}\r\n]*)$/);return r&&void 0!==r.index?{query:r[1],start:r.index,end:t}:null}(t.text,e.offset),o=null!=r?r:n;if(!o)return void R(null);let a=r?"at":"global",l=p("at"===a?q:q.filter(e=>"global"===e.kind),o.query);E(0),R({...o,mode:a,items:l,range:{anchor:{path:e.path,offset:o.start},focus:e}})},[L,q]),G=(0,o.useCallback)(e=>{if(!M)return;s.gB.select(L,M.range),s.gB.delete(L);let t=(0,u.y4)(e.value);t&&x(L,t),R(null),c.rL.focus(L)},[M,L]);(0,o.useImperativeHandle)(t,()=>({insertText:e=>{let t=(0,u.y4)(e);t?x(L,t):L.insertText(e),g(h(L.children)),c.rL.focus(L)},focus:()=>c.rL.focus(L)}),[L,g]),(0,o.useEffect)(()=>{h(L.children)!==h(m(r||""))&&(D.current=!0,L.children=m(r||""),L.selection=null,L.onChange(),W(e=>e+1))},[L,r]);let X=(0,o.useCallback)(e=>{if(D.current){D.current=!1;return}g(h(e)),K()},[g,K]),_=(0,o.useCallback)(e=>{let{attributes:t,children:r,element:o}=e;if("binding-reference"===o.type){let e=(0,u.Pj)(o.kind,o.server,o.name);return(0,n.jsxs)("span",{...t,className:"tool-reference-wrapper",children:[(0,n.jsx)(f,{element:o,disabled:j,invalid:null!==B&&!B.has(e)}),r]})}return(0,n.jsx)("p",{...t,children:r})},[j,B]),J="".concat(1.5*Math.max(1,w),"em"),$=k?"".concat(1.5*Math.max(w,k),"em"):void 0;return(0,n.jsxs)(a.default,{sx:{position:"relative",width:"100%",...O},"data-revision":z,children:[(0,n.jsx)(a.default,{className:S?"global-reference-editor bare":"global-reference-editor",sx:{border:S?"none":"1px solid",borderColor:"rgba(0, 0, 0, 0.23)",borderRadius:+!S,px:1.75*!S,py:+!S,bgcolor:j?"action.disabledBackground":"background.paper","&:focus-within":S?{}:{borderColor:"primary.main",borderWidth:2,px:"13px",py:"7px"}},children:(0,n.jsx)(c.A,{editor:L,initialValue:U,onChange:X,children:(0,n.jsx)(c.Fo,{className:"slate-editor global-reference-editable",renderElement:_,placeholder:b,readOnly:j,autoFocus:C,"aria-label":T,"data-tour":I,role:"textbox","aria-multiline":A,onKeyDown:e=>{if(M){if("ArrowDown"===e.key&&M.items.length>0){e.preventDefault(),E(e=>(e+1)%M.items.length);return}if("ArrowUp"===e.key&&M.items.length>0){e.preventDefault(),E(e=>(e-1+M.items.length)%M.items.length);return}if(("Enter"===e.key||"Tab"===e.key)&&M.items[F]){e.preventDefault(),G(M.items[F]);return}if("Escape"===e.key){e.preventDefault(),e.stopPropagation(),R(null);return}}if(!A&&"Enter"===e.key)return void e.preventDefault();null==N||N(e)},onPaste:P,style:{minHeight:J,maxHeight:$,overflowY:$?"auto":void 0,whiteSpace:A?"pre-wrap":"nowrap"}})})}),M&&(0,n.jsx)(l.A,{elevation:8,role:"listbox","aria-label":"at"===M.mode?"Available references":"Global variables",sx:{position:"absolute",zIndex:1500,top:"100%",left:0,right:0,mt:.5,maxHeight:240,overflowY:"auto"},children:0===M.items.length?(0,n.jsx)(a.default,{sx:{px:1.5,py:1.25},children:(0,n.jsx)(i.A,{variant:"body2",color:"text.secondary",children:"No matching references"})}):M.items.map((e,t)=>{var r;let l=null==(r=M.items[t-1])?void 0:r.kind,s="tool"===e.kind?"Tools":"resource"===e.kind?"Resources":"global"===e.kind?"Globals":"Temporary data";return(0,n.jsxs)(o.Fragment,{children:[e.kind!==l&&(0,n.jsx)(i.A,{component:"div",variant:"overline",sx:{px:1.5,pt:0===t?.75:1.25,color:"text.secondary"},children:s}),(0,n.jsxs)(a.default,{role:"option","aria-selected":t===F,onMouseDown:t=>{t.preventDefault(),G(e)},sx:{px:1.5,py:1,cursor:"pointer",bgcolor:t===F?"action.selected":"background.paper","&:hover":{bgcolor:"action.hover"}},children:[(0,n.jsx)(i.A,{component:"div",sx:{fontFamily:"monospace",fontSize:14},children:e.label}),(0,n.jsx)(i.A,{variant:"caption",color:"text.secondary",sx:{wordBreak:"break-all"},children:e.description||e.value})]})]},e.value)})})]})});g.displayName="GlobalReferenceEditor";let v=g},22573:(e,t,r)=>{"use strict";r.d(t,{A:()=>p});var n=r(95155);r(12115);var o=r(33567),a=r(94049),l=r(41983),i=r(25635),s=r(28548),d=r(50430),c=r(63186),u=r(91665);let p=e=>{let{label:t,count:r,expanded:p,onToggle:m,showFolderIcon:h=!1,children:x}=e,f=(0,o.A)();return(0,n.jsxs)(a.default,{sx:{mb:1.5},children:[(0,n.jsxs)(a.default,{role:"button",tabIndex:0,"aria-expanded":p,onClick:m,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),m())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:f.palette.background.default,border:"1px solid ".concat(f.palette.divider),"&:hover":{backgroundColor:f.palette.action.hover}},children:[(0,n.jsx)(l.A,{size:"small","aria-label":p?"Collapse section":"Expand section",onClick:e=>{e.stopPropagation(),m()},sx:{transition:"transform 0.2s",transform:p?"rotate(0deg)":"rotate(-90deg)"},children:(0,n.jsx)(c.A,{fontSize:"small"})}),h&&(0,n.jsx)(u.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,n.jsx)(i.A,{variant:"subtitle2",sx:{fontWeight:600},children:t}),(0,n.jsx)(s.A,{label:r,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,n.jsx)(d.A,{in:p,unmountOnExit:!0,children:(0,n.jsx)(a.default,{sx:{pt:1.5},children:x})})]})}},23201:(e,t,r)=>{"use strict";r.d(t,{A:()=>i});var n=r(95155);r(12115);var o=r(5421),a=r(67895),l=r(97430);function i(e){let{show:t,onClick:r,sx:i}=e;return(0,n.jsx)(o.A,{in:t,unmountOnExit:!0,children:(0,n.jsx)(a.A,{size:"small",color:"primary","aria-label":"Back to top",onClick:r,sx:{position:"fixed",bottom:24,right:24,zIndex:1200,...i},children:(0,n.jsx)(l.A,{})})})}},32098:()=>{},36982:(e,t,r)=>{"use strict";r.d(t,{default:()=>i});var n=r(95155);r(12115);var o=r(94049),a=r(64598),l=r(23201);function i(e){let{storageKey:t,sx:r,threshold:i,deps:s,children:d}=e,{ref:c,showBackToTop:u,scrollToTop:p}=(0,a.R)(t,{threshold:i,deps:s});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.default,{ref:c,sx:{...r,overflow:"auto"},children:d}),(0,n.jsx)(l.A,{show:u,onClick:p})]})}},38459:(e,t,r)=>{"use strict";r.d(t,{Az:()=>o,FM:()=>n,Je:()=>l,po:()=>a,yF:()=>i});let n="folder";function o(e,t){let r=[],n=new Map;for(let o of e){let{key:e,label:a}=t(o),l=n.get(e);l||(l={key:e,label:a,items:[]},n.set(e,l),r.push(l)),l.items.push(o)}return r}function a(e){let t=(null!=e?e:"").trim().charAt(0).toUpperCase();return t>="A"&&t<="Z"?{key:"letter:".concat(t),label:t}:{key:"letter:#",label:"#"}}function l(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Ungrouped",n=new Map,o=[];for(let r of e){var a;let e=null==(a=t(r))?void 0:a.trim();if(e){let t=n.get(e);t?t.push(r):n.set(e,[r])}else o.push(r)}let l=Array.from(n.keys()).sort((e,t)=>e.localeCompare(t)).map(e=>({key:"folder:".concat(e),label:e,items:n.get(e)}));return o.length>0&&l.push({key:"folder:__ungrouped__",label:r,items:o}),l}function i(e,t){let r=new Set;for(let o of e){var n;let e=null==(n=t(o))?void 0:n.trim();e&&r.add(e)}return Array.from(r).sort((e,t)=>e.localeCompare(t))}},48072:(e,t,r)=>{"use strict";r.d(t,{CR:()=>d,Lg:()=>l,eZ:()=>s,fC:()=>a});var n=r(88107),o=r(38459);let a={"name-asc":"Name (A-Z)","name-desc":"Name (Z-A)",provider:"Provider","context-desc":"Context (largest)","context-asc":"Context (smallest)"},l=e=>e.displayName||e.name||"",i=e=>(0,n.T_)(e.provider,e.adapter).label;function s(e,t){switch(t){case"provider":{let t=i(e);return{key:"provider:".concat(t),label:t}}case"context-asc":case"context-desc":var r;return"number"!=typeof(r=e.contextWindow)||Number.isNaN(r)?{key:"ctx:unknown",label:"Unknown context"}:r<=8e3?{key:"ctx:<=8k",label:"≤ 8K tokens"}:r<=32e3?{key:"ctx:8k-32k",label:"8K–32K tokens"}:r<=128e3?{key:"ctx:32k-128k",label:"32K–128K tokens"}:r<=1e6?{key:"ctx:128k-1m",label:"128K–1M tokens"}:{key:"ctx:>1m",label:"> 1M tokens"};default:return(0,o.po)(l(e))}}function d(e,t){let r=(e,r)=>{switch(t){case"name-asc":return l(e).localeCompare(l(r));case"name-desc":return l(r).localeCompare(l(e));case"provider":return i(e).localeCompare(i(r))||l(e).localeCompare(l(r));case"context-desc":case"context-asc":{let n="number"!=typeof e.contextWindow||Number.isNaN(e.contextWindow)?void 0:e.contextWindow,o="number"!=typeof r.contextWindow||Number.isNaN(r.contextWindow)?void 0:r.contextWindow;if(void 0===n&&void 0===o)return l(e).localeCompare(l(r));if(void 0===n)return 1;if(void 0===o)return -1;let a="context-desc"===t?o-n:n-o;return 0!==a?a:l(e).localeCompare(l(r))}default:return 0}};return[...e].sort((e,t)=>{let n=Number(!!t.favorite)-Number(!!e.favorite);return 0!==n?n:r(e,t)})}},52397:(e,t,r)=>{"use strict";r.d(t,{RJ:()=>o,gF:()=>n});let n="masked:********",o="********"},58971:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>eZ});var n=r(95155),o=r(12115),a=r(20063),l=r(2300),i=r(94049),s=r(9562),d=r(56422),c=r(27845),u=r(91871),p=r(36314),m=r(86973),h=r(49501),x=r(17681),f=r(22003),g=r(86946),v=r(30989),y=r(60700),b=r(51611),j=r(25766),A=r(74879),w=r(33567),k=r(4474),C=r(33077),S=r(25635),T=r(41983),I=r(21067),O=r(64419),N=r(28466),P=r(45587),L=r(81952),U=r(94885),M=r(15686),R=r(91665),F=r(61267),E=r(22573),z=r(38459),W=r(97104),D=r(48072),q=r(73288);let B=(0,q.h)("frontend/components/models/list/ModelList"),K=e=>{let{models:t,isLoading:r,onAdd:a,onUpdate:s,onDelete:d,folders:c=[],onSetFolder:u,onToggleFavorite:f}=e,g=(0,w.A)(),[v,y]=(0,W.Xk)("flujo-ui:models:sort","name-asc"),[b,j]=(0,W.Xk)("flujo-ui:models:group",z.FM),[A,q]=(0,o.useState)(null),[K,G]=(0,o.useState)(null),[X,_]=(0,W.Xk)("flujo-ui:models:collapsed",[]),J=(0,o.useMemo)(()=>new Set(X),[X]),$=e=>{y(e),q(null)},H=e=>{j(e),G(null)},Y=async e=>{let t=await s(e);t.success||B.error("Failed to update model in ModelList",t.error)},Z=(0,o.useMemo)(()=>(0,D.CR)(t,v),[t,v]),V=(0,o.useMemo)(()=>"folder"===b?(0,z.Je)(Z,e=>e.folder):"sort"===b?(0,z.Az)(Z,e=>(0,D.eZ)(e,v)):[],[b,Z,v]);if(r)return(0,n.jsx)(i.default,{display:"flex",justifyContent:"center",py:4,children:(0,n.jsx)(k.default,{})});let Q=e=>(0,n.jsx)(C.Ay,{container:!0,spacing:2.5,children:e.map(e=>(0,n.jsx)(C.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,n.jsx)(F.A,{model:e,onEdit:()=>Y(e),onDelete:()=>d(e.id),folder:e.folder,folders:c,onSetFolder:u?t=>u(e.id,t):void 0,onToggleFavorite:f})},e.id))});return(0,n.jsxs)(i.default,{children:[(0,n.jsx)(l.A,{elevation:0,variant:"outlined",sx:{mb:2.5,p:1.1,borderRadius:3,bgcolor:"transparent"},children:(0,n.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:1},children:[(0,n.jsxs)(S.A,{variant:"body2",color:"textSecondary",children:[t.length," AI connection",1===t.length?"":"s",(0,n.jsx)(i.default,{component:"span",sx:{mx:1,opacity:.5},children:"\xb7"}),"Sorted by: ",D.fC[v]]}),(0,n.jsxs)(i.default,{sx:{display:"flex",gap:1,alignItems:"center"},children:[(0,n.jsx)(T.A,{size:"small",onClick:e=>G(e.currentTarget),color:"none"!==b?"primary":"default",sx:{border:"1px solid ".concat(g.palette.divider),backgroundColor:g.palette.background.default},title:"Group cards",children:(0,n.jsx)(U.A,{fontSize:"small"})}),(0,n.jsx)(T.A,{size:"small",onClick:e=>q(e.currentTarget),sx:{border:"1px solid ".concat(g.palette.divider),backgroundColor:g.palette.background.default},title:"Sort models",children:(0,n.jsx)(O.A,{fontSize:"small"})})]})]})}),t&&0!==t.length?"none"===b?Q(Z):V.map(e=>(0,n.jsx)(E.A,{label:e.label,count:e.items.length,expanded:!J.has(e.key),onToggle:()=>(e=>{_(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])})(e.key),showFolderIcon:"folder"===b,children:Q(e.items)},e.key)):(0,n.jsx)(l.A,{variant:"outlined",sx:{display:"grid",minHeight:240,p:4,placeItems:"center",textAlign:"center",borderStyle:"dashed",bgcolor:"transparent"},children:(0,n.jsxs)(i.default,{children:[(0,n.jsx)(L.A,{sx:{mb:1.5,fontSize:38,color:"primary.light"}}),(0,n.jsx)(S.A,{variant:"h6",children:"Your AI is not connected yet"}),(0,n.jsx)(S.A,{variant:"body2",color:"text.secondary",sx:{mt:.7,mb:2},children:"Connect a provider once, then use it across agents and conversations."}),(0,n.jsx)(i.default,{children:(0,n.jsx)(T.A,{color:"primary",onClick:a,title:"Connect AI",children:(0,n.jsx)(L.A,{})})})]})}),(0,n.jsxs)(p.A,{anchorEl:K,open:!!K,onClose:()=>G(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,n.jsxs)(m.A,{selected:"none"===b,onClick:()=>H("none"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(M.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"No grouping"})]}),(0,n.jsxs)(m.A,{selected:"folder"===b,onClick:()=>H("folder"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(R.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"By folder"})]}),(0,n.jsxs)(m.A,{selected:"sort"===b,onClick:()=>H("sort"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(U.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"By sort setting"})]})]}),(0,n.jsxs)(p.A,{anchorEl:A,open:!!A,onClose:()=>q(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:[(0,n.jsxs)(m.A,{selected:"name-asc"===v,onClick:()=>$("name-asc"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(N.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"Name (A-Z)"})]}),(0,n.jsxs)(m.A,{selected:"name-desc"===v,onClick:()=>$("name-desc"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(N.A,{fontSize:"small",sx:{transform:"scaleX(-1)"}})}),(0,n.jsx)(x.A,{primary:"Name (Z-A)"})]}),(0,n.jsx)(I.A,{}),(0,n.jsxs)(m.A,{selected:"provider"===v,onClick:()=>$("provider"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(P.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"Provider"})]}),(0,n.jsx)(I.A,{}),(0,n.jsxs)(m.A,{selected:"context-desc"===v,onClick:()=>$("context-desc"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(L.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"Context (largest)"})]}),(0,n.jsxs)(m.A,{selected:"context-asc"===v,onClick:()=>$("context-asc"),children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(L.A,{fontSize:"small",sx:{transform:"scaleY(-1)"}})}),(0,n.jsx)(x.A,{primary:"Context (smallest)"})]})]})]})};var G=r(2778),X=r(52363),_=r(65036),J=r(52641),$=r(95436),H=r(55606),Y=r(98286),Z=r(75912),V=r(12857),Q=r(48363),ee=r(9164),et=r(95480),er=r(88107),en=r(52397),eo=r(43076);let ea=(0,q.h)("frontend/components/models/modal"),el=e=>({...void 0!==e.contextWindow?{contextWindow:e.contextWindow}:{},...void 0!==e.maxTokens?{maxTokens:e.maxTokens}:{},...void 0!==e.supportsTools?{supportsTools:e.supportsTools}:{},...void 0!==e.supportedParameters?{supportedParameters:e.supportedParameters}:{},...void 0!==e.inputModalities?{inputModalities:e.inputModalities}:{},...void 0!==e.outputModalities?{outputModalities:e.outputModalities}:{},...void 0!==e.visionInputCapability?{visionInputCapability:e.visionInputCapability}:{}}),ei=e=>{var t,r,l,d,c,p,h;let{open:x,model:g,onSave:v,onClose:y}=e,b=(0,a.useRouter)(),{globalEnvVars:j,settings:A}=(0,ee.useStorage)(),[w,I]=(0,o.useState)({}),[O,N]=(0,o.useState)({}),[P,L]=(0,o.useState)(null),[U,M]=(0,o.useState)(!1),[R,F]=(0,o.useState)(null),[E,z]=(0,o.useState)(!1),[W,D]=(0,o.useState)([]),[q,B]=(0,o.useState)(!1),K=(0,o.useRef)(null),ei=(0,o.useRef)(null);(0,o.useEffect)(()=>{x&&D([])},[x]),(0,o.useEffect)(()=>{w.baseUrl&&(ea.debug("Base URL or API Key changed",{baseUrl:w.baseUrl}),D([]))},[w.baseUrl,w.ApiKey]),(0,o.useEffect)(()=>(ei.current&&clearTimeout(ei.current),w.baseUrl&&(ei.current=setTimeout(()=>{ea.debug("Debounced fetchModels triggered",{name:w.name,baseUrl:w.baseUrl,searchTerm:w.name?'"'.concat(w.name,'"'):"none"}),es(w.baseUrl,w.name)},100)),()=>{ei.current&&clearTimeout(ei.current)}),[w.name,w.baseUrl]),(0,o.useEffect)(()=>()=>{ei.current&&clearTimeout(ei.current)},[]);let es=async(e,t)=>{ea.debug("fetchModels called",{baseUrl:e,searchTerm:t?'"'.concat(t,'"'):"none",apiKey:w.ApiKey?"present":"not present",isApiKeyBound:U}),B(!0),N({});try{let r=U&&R?"${global:".concat(R,"}"):w.ApiKey&&w.ApiKey!==en.RJ?w.ApiKey:void 0,n=await eo.N.fetchProviderModels(e,g.id,t,r);if(ea.debug("Models fetched successfully",{count:null==n?void 0:n.length,searchTerm:t?'"'.concat(t,'"'):"none"}),Array.isArray(n)){D(n);let e=n.find(e=>e.id===w.name);e&&I(t=>t.name===e.id?{...t,...el(e)}:t),ea.info("Models set in state",{count:n.length,searchTerm:t?'"'.concat(t,'"'):"none"})}else ea.warn("Unexpected API response format",{models:n}),D([])}catch(r){ea.warn("Error fetching models",{baseUrl:e,searchTerm:t,error:r}),D([])}finally{B(!1)}};(0,o.useEffect)(()=>{if(x){I({...g,displayName:g.displayName||g.name});let e=(g.ApiKey||"").match(/\$\{global:([^}]+)\}/);e?(M(!0),F(e[1])):(M(!1),F(null),I(e=>({...e,ApiKey:g.name?en.RJ:""})))}else I({name:"",displayName:"",description:"",ApiKey:"",baseUrl:"https://api.openai.com/v1",provider:"openai",adapter:"openai",promptTemplate:"",temperature:"0.0"}),M(!1),F(null);N({}),L(null)},[x,g]);let ed=(0,er.T_)(w.provider,w.adapter),ec=(0,er.g3)(w.provider,w.adapter,w.name),eu=(0,o.useMemo)(()=>{var e;return(null==A||null==(e=A.experimental)?void 0:e.showModelsWithoutToolCapabilities)?W:W.filter(e=>!1!==e.supportsTools)},[W,null==A||null==(t=A.experimental)?void 0:t.showModelsWithoutToolCapabilities]),ep=(e,t)=>{I(r=>({...r,[e]:t})),N(t=>({...t,[e]:""}))},em=async e=>{var t,r,n,o,a,l,i;e.preventDefault();let s={};if((null==(t=w.name)?void 0:t.trim())||(s.name="Name is required"),(null==(r=w.displayName)?void 0:r.trim())||(s.displayName="Display Name is required"),ec.creativity&&(null==(n=w.temperature)?void 0:n.trim())){let e=Number(w.temperature);(!Number.isFinite(e)||e<ec.creativity.min||e>ec.creativity.max)&&(s.temperature="Creativity must be between ".concat(ec.creativity.min," and ").concat(ec.creativity.max))}if(U||(null==(o=w.ApiKey)?void 0:o.trim())||"codex-cli"===ed.adapter||(s.ApiKey="API key is required"),Object.keys(s).length>0)return void N(s);try{let e=await v({id:g.id,name:w.name,displayName:w.displayName,description:w.description,ApiKey:w.ApiKey,baseUrl:w.baseUrl,provider:w.provider,adapter:w.adapter||"openai",promptTemplate:w.promptTemplate,temperature:ec.creativity?w.temperature:void 0,reasoningEffort:(null==(a=ec.effortLevels)?void 0:a.includes(w.reasoningEffort))?w.reasoningEffort:void 0,thinkingLevel:(null==(l=ec.thinkingLevels)?void 0:l.includes(w.thinkingLevel))?w.thinkingLevel:void 0,thinkingBudget:ec.thinkingBudget?w.thinkingBudget:void 0,serviceTier:ec.priority?w.serviceTier||"default":void 0,contextWindow:w.contextWindow,supportsTools:w.supportsTools,supportedParameters:w.supportedParameters,inputModalities:w.inputModalities,outputModalities:w.outputModalities,visionInputCapability:null!=(i=w.visionInputCapability)?i:Array.isArray(w.inputModalities)?w.inputModalities.some(e=>/^(?:image|vision)$/i.test(e))?"supported":"unsupported":"unknown",maxTurns:w.maxTurns,maxTokens:ec.maxOutputTokens?w.maxTokens:void 0});e.success?b.refresh():N({submit:e.error||"Failed to save model"})}catch(e){ea.error("Failed to save model",{error:e}),N({submit:(null==e?void 0:e.message)||"Failed to save model"})}};return(0,n.jsx)(G.A,{open:x,onClose:y,maxWidth:"xl",fullWidth:!0,PaperProps:{sx:{width:"95vw",height:"90vh",maxWidth:"95vw",maxHeight:"90vh"}},children:(0,n.jsxs)("form",{onSubmit:em,children:[(0,n.jsx)(X.A,{children:g.name?"Edit AI connection":"Connect your AI"}),(0,n.jsxs)(_.A,{sx:{display:"flex",flexDirection:"column",height:"calc(90vh - 130px)"},children:[O.submit&&(0,n.jsx)(f.A,{severity:"error",sx:{mb:2},children:O.submit}),P&&(0,n.jsx)(f.A,{severity:"info",sx:{mb:2},children:P}),(0,n.jsxs)(C.Ay,{container:!0,spacing:2,sx:{flexGrow:1},children:[(0,n.jsx)(C.Ay,{item:!0,xs:6,sx:{height:"100%"},children:(0,n.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pr:2,overflowY:"auto"},children:[(0,n.jsx)(S.A,{variant:"h6",gutterBottom:!0,children:"Connection details"}),(0,n.jsx)(s.A,{autoFocus:!0,margin:"dense",label:"Display Name",fullWidth:!0,required:!0,value:w.displayName||"",onChange:e=>ep("displayName",e.target.value),error:!!O.displayName,helperText:O.displayName||"The name shown in the UI"}),(0,n.jsxs)(J.A,{fullWidth:!0,margin:"dense",children:[(0,n.jsx)($.A,{id:"provider-profile-label",children:"Provider"}),(0,n.jsx)(H.A,{labelId:"provider-profile-label",label:"Provider",value:ed.id,onChange:e=>(e=>{let t=er.xx.find(t=>t.id===e);t&&(I(e=>({...e,provider:t.provider,adapter:t.adapter,baseUrl:t.baseUrl})),N(e=>({...e,baseUrl:""})))})(e.target.value),children:er.xx.map(e=>(0,n.jsx)(m.A,{value:e.id,children:e.label},e.id))})]}),(0,n.jsxs)(S.A,{variant:"caption",color:"text.secondary",sx:{mt:.5,mb:1,display:"block"},children:["Uses the ",(0,n.jsx)("strong",{children:ed.sdkLabel}),"claude-cli"===ed.adapter?". Paste an OAuth token from `claude setup-token` into the API Key field.":"codex-cli"===ed.adapter?". Paste an OpenAI API key — or leave it empty to use your ChatGPT plan via `codex login`.":""]}),ed.showBaseUrl&&(0,n.jsx)(s.A,{margin:"dense",label:"Base URL",fullWidth:!0,value:w.baseUrl||"",onChange:e=>ep("baseUrl",e.target.value),helperText:"Endpoint for the OpenAI-compatible API."}),(0,n.jsx)(i.default,{sx:{position:"relative",mt:1,mb:1},children:(0,n.jsx)(s.A,{margin:"dense",label:"API Key",fullWidth:!0,required:!U&&"codex-cli"!==ed.adapter,type:U?"text":"password",value:w.ApiKey||"",onChange:e=>ep("ApiKey",e.target.value),error:!!O.ApiKey,helperText:O.ApiKey||("codex-cli"===ed.adapter?"Optional — leave empty to use your ChatGPT plan (codex login)":"API key is required for this provider"),InputProps:{readOnly:U,endAdornment:(0,n.jsx)(i.default,{sx:{display:"flex",alignItems:"center"},children:U?(0,n.jsx)(T.A,{onClick:()=>{M(!1),F(null),I(e=>({...e,ApiKey:""}))},size:"small",title:"Unbind from global variable",children:(0,n.jsx)(V.A,{})}):(0,n.jsx)(T.A,{onClick:()=>{z(!0)},size:"small",title:"Bind to global variable",children:(0,n.jsx)(Q.A,{})})})}})}),(0,n.jsx)(Y.A,{freeSolo:!0,loading:q,options:ed.showBaseUrl?eu.map(e=>e.id):null!=(r=ed.defaultModels)?r:[],value:w.name||"",onChange:(e,t)=>{let r=W.find(e=>e.id===t);I(e=>{var n;return{...e,name:t||"",...r?{description:null!=(n=r.description)?n:e.description,...el(r)}:{}}}),N(e=>({...e,name:""}))},onInputChange:(e,t)=>{ep("name",t)},filterOptions:(e,t)=>{let r=t.inputValue.toLowerCase();return r?e.filter(e=>{let t=e.toLowerCase();if(t.includes(r))return!0;let n=0,o=0;for(;n<t.length&&o<r.length;)t[n]===r[o]&&o++,n++;return o===r.length}):e},ListboxProps:{style:{maxHeight:"300px",overflow:"auto"}},renderInput:e=>(0,n.jsx)(s.A,{...e,margin:"dense",label:"Technical Name",required:!0,error:!!O.name,helperText:O.name||"Used for API calls to the LLM. Type to search available models.",InputProps:{...e.InputProps,endAdornment:(0,n.jsxs)(n.Fragment,{children:[q?(0,n.jsx)(k.default,{color:"inherit",size:20}):null,e.InputProps.endAdornment]})}}),renderOption:(e,t)=>{let r=W.find(e=>e.id===t),{key:o,...a}=e;return(0,n.jsx)("li",{...a,style:{borderBottom:"1px solid rgba(0,0,0,0.1)",padding:"8px 16px"},children:(0,n.jsxs)(i.default,{children:[(0,n.jsx)(S.A,{variant:"body1",fontWeight:"bold",children:t}),(null==r?void 0:r.description)&&(0,n.jsx)(S.A,{variant:"body2",color:"text.secondary",sx:{fontSize:"0.75rem"},children:r.description})]})},o)},noOptionsText:"No matching models found",loadingText:"Loading models..."}),(0,n.jsx)(s.A,{margin:"dense",label:"Description",fullWidth:!0,multiline:!0,rows:3,value:w.description||"",onChange:e=>ep("description",e.target.value)}),ec.creativity&&(0,n.jsx)(s.A,{margin:"dense",label:"Creativity",fullWidth:!0,type:"number",value:null!=(l=w.temperature)?l:"",onChange:e=>ep("temperature",e.target.value),error:!!O.temperature,inputProps:ec.creativity,helperText:O.temperature||"Sampling temperature (".concat(ec.creativity.min,"–").concat(ec.creativity.max,"). Blank uses FLUJO's deterministic default (0).")}),ec.effortLevels&&(0,n.jsxs)(J.A,{fullWidth:!0,margin:"dense",children:[(0,n.jsx)($.A,{id:"reasoning-effort-label",children:"Effort"}),(0,n.jsxs)(H.A,{labelId:"reasoning-effort-label",label:"Effort",value:w.reasoningEffort||"",onChange:e=>I(t=>({...t,reasoningEffort:e.target.value?e.target.value:void 0})),children:[(0,n.jsx)(m.A,{value:"",children:(0,n.jsx)("em",{children:"Provider default"})}),ec.effortLevels.map(e=>(0,n.jsx)(m.A,{value:e,children:"xhigh"===e?"Extra high":e.charAt(0).toUpperCase()+e.slice(1)},e))]}),(0,n.jsx)(S.A,{variant:"caption",color:"text.secondary",sx:{mt:.5,ml:1.75},children:"Controls how much reasoning the model performs."})]}),ec.thinkingLevels&&(0,n.jsxs)(J.A,{fullWidth:!0,margin:"dense",children:[(0,n.jsx)($.A,{id:"thinking-level-label",children:"Thinking Level"}),(0,n.jsxs)(H.A,{labelId:"thinking-level-label",label:"Thinking Level",value:w.thinkingLevel||"",onChange:e=>I(t=>({...t,thinkingLevel:e.target.value?e.target.value:void 0})),children:[(0,n.jsx)(m.A,{value:"",children:(0,n.jsx)("em",{children:"Provider default"})}),ec.thinkingLevels.map(e=>(0,n.jsx)(m.A,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))]})]}),ec.thinkingBudget&&(0,n.jsx)(s.A,{margin:"dense",label:"Thinking Budget",fullWidth:!0,type:"number",value:null!=(d=w.thinkingBudget)?d:"",onChange:e=>{let t=e.target.value,r=""===t?void 0:Number(t);I(e=>({...e,thinkingBudget:void 0!==r&&Number.isFinite(r)&&r>=-1?Math.floor(r):void 0}))},inputProps:{min:-1,step:1},helperText:"Gemini 2.5 thinking tokens. -1 = adaptive, 0 = disabled where supported, blank = provider default."}),ec.priority&&(0,n.jsxs)(J.A,{fullWidth:!0,margin:"dense",children:[(0,n.jsx)($.A,{id:"service-tier-label",children:"Priority"}),(0,n.jsxs)(H.A,{labelId:"service-tier-label",label:"Priority",value:w.serviceTier||"default",onChange:e=>I(t=>({...t,serviceTier:e.target.value})),children:[(0,n.jsx)(m.A,{value:"default",children:"Standard"}),(0,n.jsx)(m.A,{value:"priority",children:"Priority (faster)"})]}),(0,n.jsx)(S.A,{variant:"caption",color:"text.secondary",sx:{mt:.5,ml:1.75},children:"Priority uses Codex Fast mode and may consume more plan usage."})]}),(0,n.jsx)(s.A,{margin:"dense",label:"Context Window (tokens)",fullWidth:!0,type:"number",value:null!=(c=w.contextWindow)?c:"",onChange:e=>{let t=e.target.value,r=""===t?void 0:Number(t);I(e=>({...e,contextWindow:void 0!==r&&Number.isFinite(r)&&r>0?Math.floor(r):void 0}))},helperText:"Discovered automatically when the provider advertises it; you can override it manually."}),(0,n.jsx)(s.A,{margin:"dense",label:"Max Turns",fullWidth:!0,type:"number",value:null!=(p=w.maxTurns)?p:"",onChange:e=>{let t=e.target.value,r=""===t?void 0:Number(t);I(e=>({...e,maxTurns:void 0!==r&&Number.isFinite(r)&&r>0?Math.floor(r):void 0}))},inputProps:{min:1},helperText:"Max agentic turns before a run stops (default 50). Process nodes can override this per-node."}),ec.maxOutputTokens&&(0,n.jsx)(s.A,{margin:"dense",label:"Max Output Tokens (optional)",fullWidth:!0,type:"number",value:null!=(h=w.maxTokens)?h:"",onChange:e=>{let t=e.target.value,r=""===t?void 0:Number(t);I(e=>({...e,maxTokens:void 0!==r&&Number.isFinite(r)&&r>0?Math.floor(r):void 0}))},inputProps:{min:1},helperText:"Optional. Default cap on generated tokens. A request's max_tokens overrides this. Anthropic uses 8192 when unset."})]})}),(0,n.jsx)(C.Ay,{item:!0,xs:6,sx:{height:"100%"},children:(0,n.jsxs)(i.default,{sx:{display:"flex",flexDirection:"column",height:"100%",pl:2},children:[(0,n.jsx)(S.A,{variant:"h6",gutterBottom:!0,children:"Prompt Template"}),(0,n.jsx)(i.default,{sx:{flexGrow:1,display:"flex",flexDirection:"column",height:"calc(100% - 32px)"},children:(0,n.jsx)(et.A,{ref:K,value:w.promptTemplate||"",onChange:e=>ep("promptTemplate",e),label:"",height:"100%"})})]})})]}),E&&(0,n.jsxs)(i.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:1,zIndex:9999},children:[(0,n.jsx)(S.A,{variant:"h6",component:"h2",sx:{mb:2},children:"Bind to Global Variable"}),0===Object.keys(j).length?(0,n.jsx)(S.A,{sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,n.jsx)(i.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(j).map(e=>{let[t,r]=e;return(0,n.jsx)(u.A,{onClick:()=>(e=>{M(!0),F(e),I(t=>({...t,ApiKey:"${global:".concat(e,"}")})),z(!1)})(t),fullWidth:!0,sx:{justifyContent:"flex-start",textAlign:"left",mb:1,p:1,"&:hover":{bgcolor:"action.hover"}},children:(0,n.jsxs)(i.default,{sx:{display:"flex",justifyContent:"space-between",width:"100%"},children:[(0,n.jsx)(S.A,{children:t}),(0,n.jsx)(S.A,{variant:"body2",color:"text.secondary",children:t.toLowerCase().includes("key")||t.toLowerCase().includes("secret")||t.toLowerCase().includes("token")||t.toLowerCase().includes("password")?"********":"object"==typeof r&&null!==r&&"value"in r?r.value:r})]})},t)})}),(0,n.jsx)(i.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,n.jsx)(u.A,{onClick:()=>z(!1),children:"Cancel"})})]})]}),(0,n.jsxs)(Z.A,{children:[(0,n.jsx)(u.A,{onClick:y,children:"Cancel"}),(0,n.jsx)(u.A,{type:"submit",variant:"contained",color:"primary",children:"Save"})]})]})})};var es=r(3648),ed=r(28548),ec=r(78470),eu=r(80777),ep=r(52005),em=r(99944),eh=r(22822),ex=r(10225),ef=r(8532),eg=r(88500),ev=r(92437),ey=r(14418),eb=r(83478),ej=r(93896),eA=r(42675),ew=r(36866),ek=r(825),eC=r(99352),eS=r(73703),eT=r(30351),eI=r(40463),eO=r(81685),eN=r(90123),eP=r(62984),eL=r(80345),eU=r(7072),eM=r(38786),eR=r(56290);let eF={"openrouter-free":[{name:"openrouter/free",displayName:"OpenRouter Free",description:"Automatically routes each request to an available free OpenRouter model.",provider:"openrouter",adapter:"openai",baseUrl:"https://openrouter.ai/api/v1",supportsTools:!0}],"requesty-free":[{name:"openrouter/free",displayName:"Requesty Free Router",description:"Routes to OpenRouter’s free-model router through your Requesty account.",provider:"requesty",adapter:"openai",baseUrl:"https://router.requesty.ai/v1",supportsTools:!0}],"openrouter-paid":[{name:"openrouter/auto",displayName:"OpenRouter Auto",description:"A balanced automatic router for everyday work.",provider:"openrouter",adapter:"openai",baseUrl:"https://openrouter.ai/api/v1",supportsTools:!0},{name:"deepseek/deepseek-v3.2",displayName:"DeepSeek V3.2",description:"A cost-conscious model for fast general-purpose work.",provider:"openrouter",adapter:"openai",baseUrl:"https://openrouter.ai/api/v1",supportsTools:!0},{name:"openai/gpt-5.6-sol",displayName:"GPT-5.6 Sol via OpenRouter",description:"A high-capability model for demanding agentic work.",provider:"openrouter",adapter:"openai",baseUrl:"https://openrouter.ai/api/v1",reasoningEffort:"medium",supportsTools:!0}],"requesty-paid":[{name:"deepseek/deepseek-v3.2",displayName:"DeepSeek V3.2 via Requesty",description:"A cost-conscious default routed through Requesty.",provider:"requesty",adapter:"openai",baseUrl:"https://router.requesty.ai/v1",supportsTools:!0},{name:"anthropic/claude-sonnet-4-6",displayName:"Claude Sonnet via Requesty",description:"A balanced model for planning, writing, and tool use.",provider:"requesty",adapter:"openai",baseUrl:"https://router.requesty.ai/v1",supportsTools:!0},{name:"openai/gpt-5.6-sol",displayName:"GPT-5.6 Sol via Requesty",description:"A high-capability model for demanding agentic work.",provider:"requesty",adapter:"openai",baseUrl:"https://router.requesty.ai/v1",reasoningEffort:"medium",supportsTools:!0}],"claude-subscription":[{name:"haiku",displayName:"Claude Haiku",description:"Fast and light for small tasks through your Claude subscription.",provider:"claude-subscription",adapter:"claude-cli",supportsTools:!0},{name:"sonnet",displayName:"Claude Sonnet",description:"The balanced everyday choice through your Claude subscription.",provider:"claude-subscription",adapter:"claude-cli",reasoningEffort:"medium",supportsTools:!0},{name:"opus",displayName:"Claude Opus",description:"The strongest Claude option for complex work.",provider:"claude-subscription",adapter:"claude-cli",reasoningEffort:"high",supportsTools:!0},{name:"fable",displayName:"Claude Fable",description:"An additional Claude subscription model for flexible routing.",provider:"claude-subscription",adapter:"claude-cli",reasoningEffort:"medium",supportsTools:!0}],"codex-subscription":[{name:"gpt-5.6-terra",displayName:"Codex Terra",description:"A balanced Codex model for everyday agent work.",provider:"codex",adapter:"codex-cli",reasoningEffort:"medium",supportsTools:!0},{name:"gpt-5.6-sol",displayName:"Codex Sol",description:"The high-capability Codex model for difficult work.",provider:"codex",adapter:"codex-cli",reasoningEffort:"high",supportsTools:!0},{name:"gpt-5.4-mini",displayName:"Codex Mini",description:"A quick, efficient Codex option for smaller tasks.",provider:"codex",adapter:"codex-cli",reasoningEffort:"medium",supportsTools:!0}],"gemini-native":[{name:"gemini-2.5-flash-lite",displayName:"Gemini Flash Lite",description:"A quick and economical native Gemini model.",provider:"gemini",adapter:"gemini",supportsTools:!0},{name:"gemini-2.5-flash",displayName:"Gemini Flash",description:"A balanced native Gemini model for everyday work.",provider:"gemini",adapter:"gemini",supportsTools:!0},{name:"gemini-2.5-pro",displayName:"Gemini Pro",description:"A stronger native Gemini model for complex work.",provider:"gemini",adapter:"gemini",supportsTools:!0}]};function eE(e){var t,r,n,o;let a=null!=(o=null==(t=e.apiKey)?void 0:t.trim())?o:"";return("ollama"===e.kind?[{name:(null==(r=e.ollamaModel)?void 0:r.trim())||"llama3.2:3b",displayName:"Local ".concat((null==(n=e.ollamaModel)?void 0:n.trim())||"Llama 3.2"),description:"Runs privately on this machine through Ollama.",provider:"ollama",adapter:"openai",baseUrl:"".concat((e.ollamaUrl||"http://localhost:11434").replace(/\/+$/,""),"/v1"),supportsTools:!0}]:eF[e.kind]).map(t=>({id:(0,A.A)(),name:t.name,displayName:t.displayName,description:t.description,ApiKey:"ollama"===e.kind?"ollama":a,baseUrl:t.baseUrl||"",provider:t.provider,adapter:t.adapter,promptTemplate:"",temperature:"openai"===t.adapter||"gemini"===t.adapter?"0.0":void 0,reasoningEffort:t.reasoningEffort,supportsTools:t.supportsTools}))}function ez(){let e=(0,es._)(["\n 0%, 100% { transform: translate3d(0, 0, 0) rotate(0deg); }\n 50% { transform: translate3d(0, -9px, 0) rotate(5deg); }\n"]);return ez=function(){return e},e}function eW(){let e=(0,es._)(["\n from { opacity: 0; transform: translate3d(18px, 0, 0) scale(.985); }\n to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }\n"]);return eW=function(){return e},e}function eD(){let e=(0,es._)(["\n 0% { transform: scale(.6) rotate(-12deg); opacity: 0; }\n 70% { transform: scale(1.08) rotate(3deg); opacity: 1; }\n 100% { transform: scale(1) rotate(0); opacity: 1; }\n"]);return eD=function(){return e},e}let eq=(0,ex.i7)(ez()),eB=(0,ex.i7)(eW()),eK=(0,ex.i7)(eD()),eG={"openrouter-free":{eyebrow:"Free \xb7 online",title:"Meet your free AI router",summary:"OpenRouter will pick an available zero-cost model for every request. It is ideal for learning and light use.",accountUrl:"https://openrouter.ai/settings/keys",accountLabel:"Create an OpenRouter key",keyLabel:"OpenRouter API key",note:"Free models have lower rate limits and can change as availability shifts. FLUJO creates the exact technical model openrouter/free."},"requesty-free":{eyebrow:"Free \xb7 online",title:"Connect through Requesty",summary:"Requesty gives you one gateway for many providers. This starter connection targets OpenRouter’s free router.",accountUrl:"https://app.requesty.ai/api-keys",accountLabel:"Create a Requesty key",keyLabel:"Requesty API key",note:"The target model is free, but Requesty account terms and routing limits still apply. Check the dashboard before heavier use."},"openrouter-paid":{eyebrow:"Pay as you go \xb7 online",title:"One key, a useful starter team",summary:"Add credits when you need them—no monthly subscription. FLUJO will create an automatic router, a cost-conscious model, and a high-capability model.",accountUrl:"https://openrouter.ai/settings/keys",accountLabel:"Open OpenRouter keys",keyLabel:"OpenRouter API key",note:"Provider usage is metered. Set a spending limit in OpenRouter before connecting if you want a hard ceiling."},"requesty-paid":{eyebrow:"Pay as you go \xb7 online",title:"Route a starter team with Requesty",summary:"Use a single funded account for DeepSeek, Claude, and OpenAI models, with Requesty handling the gateway.",accountUrl:"https://app.requesty.ai/api-keys",accountLabel:"Open Requesty keys",keyLabel:"Requesty API key",note:"Usage is billed through your Requesty account. Add budgets or policies in Requesty when you need tighter controls."},"claude-subscription":{eyebrow:"Existing subscription \xb7 Claude",title:"Bring your Claude plan to FLUJO",summary:"Claude Code signs in to your Pro or Max plan. One setup token powers four useful aliases in FLUJO.",keyLabel:"Token from claude setup-token",note:"The token is stored using FLUJO’s normal encrypted model-key storage. Your plan’s usage limits still apply."},"codex-subscription":{eyebrow:"Existing subscription \xb7 ChatGPT",title:"Bring your ChatGPT plan through Codex",summary:"Codex uses its local ChatGPT sign-in. FLUJO does not need your password or a copied browser token.",note:"Run codex login in a terminal and complete the browser flow. FLUJO then creates a balanced Codex model set."},"gemini-native":{eyebrow:"Google \xb7 native SDK",title:"Connect Gemini natively",summary:"FLUJO talks directly to Google’s GenAI SDK and creates light, balanced, and pro Gemini choices.",accountUrl:"https://aistudio.google.com/app/apikey",accountLabel:"Create a Gemini API key",keyLabel:"Gemini API key",note:"A Gemini app subscription and Gemini API billing are separate products. The API key controls this connection."}};function eX(e){let{icon:t,title:r,description:o,badge:a,onClick:s}=e,d=(0,w.A)();return(0,n.jsxs)(l.A,{component:"button",type:"button",variant:"outlined",onClick:s,sx:{position:"relative",width:"100%",minHeight:132,p:2.2,borderRadius:3,color:"text.primary",textAlign:"left",cursor:"pointer",font:"inherit",background:"linear-gradient(145deg, ".concat((0,ef.X4)(d.palette.primary.main,.08),", ").concat((0,ef.X4)(d.palette.background.paper,.72)," 55%)"),transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease","&:hover":{transform:"translateY(-3px) rotate(-.2deg)",borderColor:(0,ef.X4)(d.palette.primary.main,.7),boxShadow:"0 16px 38px ".concat((0,ef.X4)(d.palette.primary.main,.16))},"&:focus-visible":{outline:"3px solid ".concat((0,ef.X4)(d.palette.primary.main,.3)),outlineOffset:3}},children:[a?(0,n.jsx)(ed.A,{label:a,size:"small",color:"primary",sx:{position:"absolute",top:12,right:12}}):null,(0,n.jsx)(i.default,{sx:{width:43,height:43,display:"grid",placeItems:"center",mb:1.3,borderRadius:2.4,color:"primary.main",bgcolor:(0,ef.X4)(d.palette.primary.main,.12)},children:(0,n.jsx)(t,{})}),(0,n.jsx)(S.A,{variant:"subtitle1",sx:{fontWeight:720,pr:7*!!a},children:r}),(0,n.jsx)(S.A,{variant:"body2",color:"text.secondary",sx:{mt:.45},children:o})]})}function e_(e){let{children:t}=e;return(0,n.jsx)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"repeat(3, minmax(0, 1fr))"},gap:1.5},children:t})}function eJ(e){let{command:t,copied:r,onCopy:o}=e,a=(0,w.A)();return(0,n.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1.5,py:1,borderRadius:2,bgcolor:(0,ef.X4)(a.palette.common.black,"dark"===a.palette.mode?.26:.055)},children:[(0,n.jsx)(eU.A,{fontSize:"small",color:"action"}),(0,n.jsx)(S.A,{component:"code",variant:"body2",sx:{flex:1,overflowWrap:"anywhere",fontFamily:"var(--font-geist-mono), ui-monospace, monospace"},children:t}),(0,n.jsx)(ec.A,{title:r?"Copied":"Copy command",children:(0,n.jsx)(T.A,{size:"small",onClick:o,"aria-label":"Copy ".concat(t),children:r?(0,n.jsx)(ey.A,{color:"success",fontSize:"small"}):(0,n.jsx)(ew.A,{fontSize:"small"})})})]})}function e$(e){var t;let{open:r,onClose:a,onManualCreation:d,onCreateModels:c}=e,p=(0,w.A)(),[m,h]=(0,o.useState)("welcome"),[x,g]=(0,o.useState)([]),[v,b]=(0,o.useState)("beginner"),[A,C]=(0,o.useState)(null),[I,O]=(0,o.useState)(""),[N,P]=(0,o.useState)(!1),[L,U]=(0,o.useState)(!1),[M,R]=(0,o.useState)(null),[F,E]=(0,o.useState)([]),[z,W]=(0,o.useState)([]),[D,q]=(0,o.useState)(null),[B,K]=(0,o.useState)(null),[X,J]=(0,o.useState)([]),[$,H]=(0,o.useState)("idle"),[Y,Z]=(0,o.useState)(null),[V,Q]=(0,o.useState)(!1),[ee,et]=(0,o.useState)(!1),[er,en]=(0,o.useState)(!1),[eo,ea]=(0,o.useState)([]);(0,o.useEffect)(()=>{r&&(h("welcome"),g([]),b("beginner"),C(null),O(""),P(!1),U(!1),R(null),E([]),W([]),q(null),K(null),J([]),H("idle"),Z(null),et(!1),ea([]))},[r]);let el=e=>{g(e=>[...e,m]),h(e),R(null)},ei=e=>{C(e),el("setup")},es=async e=>{try{await navigator.clipboard.writeText(e),q(e),window.setTimeout(()=>q(t=>t===e?null:t),1600)}catch(e){R("Could not copy automatically. Select the command and copy it manually.")}},ec=(0,o.useCallback)(async()=>{Q(!0),R(null);try{let e=await fetch("/api/local-models/capability",{cache:"no-store"});if(!e.ok)throw Error("Could not inspect this machine.");Z(await e.json())}catch(e){R(e instanceof Error?e.message:"Could not inspect this machine.")}finally{et(!0),Q(!1)}},[]);(0,o.useEffect)(()=>{!r||"setup"!==m||"ollama"!==A||ee||V||ec()},[A,ec,ee,V,r,m]);let ex=async e=>{K(e),H("idle"),J([]),R(null);try{let t=await fetch("/api/setup/ai-cli",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({tool:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||"The installer could not be started.")}let r=!1,n="";if(await (0,eR.z)(t,e=>{("stdout"===e.type||"stderr"===e.type)&&J(t=>[...t,e.data].slice(-8)),"status"===e.type&&e.message&&J(t=>[...t,e.message].slice(-8)),"result"===e.type&&(r=e.success,n=e.error||"")}),!r)throw Error(n||"WinGet did not finish successfully.");H("success"),"ollama"===e&&window.setTimeout(()=>void ec(),1200)}catch(e){H("error"),R(e instanceof Error?e.message:"Installation failed.")}finally{K(null)}},ew=async e=>{U(!0),R(null);try{let t=await c(e);if(!t.success)throw Error(t.error||"FLUJO could not create the model connection.");E(t.created),W(t.existing),el("success")}catch(e){R(e instanceof Error?e.message:"FLUJO could not create the model connection.")}finally{U(!1)}},eF=async()=>A&&"ollama"!==A?"codex-subscription"===A||I.trim()?"codex-subscription"!==A||N?void await ew(eE({kind:A,apiKey:I})):void R("Confirm that codex login is complete before creating the models."):void R("claude-subscription"===A?"Paste the token produced by claude setup-token first.":"Paste your API key first."):void 0,ez=async()=>{var e;let t=(null==Y?void 0:Y.suggestedModel)||"llama3.2:3b",r=null==Y||null==(e=Y.installedModels)?void 0:e.some(e=>e===t);if(!(null==Y?void 0:Y.ollamaReachable))return void R("Start Ollama, then use “Check again” before downloading a model.");if(!r){en(!0),ea([]),R(null);try{let e=await fetch("/api/local-models/pull",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t})});if(!e.ok)throw Error("Ollama could not start the model download.");let r=!1,n="";if(await (0,eR.z)(e,e=>{("stdout"===e.type||"stderr"===e.type)&&ea(t=>[...t,e.data].slice(-6)),"result"===e.type&&(r=e.success,n=e.error||"")}),!r)throw Error(n||"Could not download ".concat(t,"."))}catch(e){R(e instanceof Error?e.message:"The model download failed."),en(!1);return}en(!1)}await ew(eE({kind:"ollama",ollamaModel:t,ollamaUrl:null==Y?void 0:Y.ollamaUrl}))},eW="beginner"===v,eD=Math.min(96,"welcome"===m?8:"success"===m?100:22+15*x.length),e$=A&&"ollama"!==A?eG[A]:null,eH=(0,o.useMemo)(()=>A?eE({kind:A}).map(e=>e.displayName||e.name):[],[A]),eY=(null==Y?void 0:Y.suggestedModel)||"llama3.2:3b",eZ=!!(null==Y||null==(t=Y.installedModels)?void 0:t.includes(eY)),eV=(e,t,r)=>(0,n.jsxs)(eu.A,{spacing:1.1,children:[(0,n.jsx)(eJ,{command:t,copied:D===t,onCopy:()=>void es(t)}),(0,n.jsx)(u.A,{variant:"outlined",startIcon:B===e?(0,n.jsx)(k.default,{size:17}):(0,n.jsx)(eC.A,{}),disabled:!!B,onClick:()=>void ex(e),sx:{alignSelf:"flex-start"},children:B===e?"Installing…":"Install with WinGet"}),r?(0,n.jsx)(eJ,{command:r,copied:D===r,onCopy:()=>void es(r)}):null,"success"===$?(0,n.jsx)(f.A,{severity:"success",children:"Installed. Continue with the sign-in command below."}):null,X.length?(0,n.jsx)(i.default,{component:"pre",sx:{m:0,p:1.4,maxHeight:110,overflow:"auto",borderRadius:2,bgcolor:(0,ef.X4)(p.palette.common.black,"dark"===p.palette.mode?.3:.06),color:"text.secondary",whiteSpace:"pre-wrap",fontSize:11},children:X.join("\n")}):null]});return(0,n.jsx)(G.A,{open:r,onClose:L||er||B?void 0:a,fullWidth:!0,maxWidth:"md","aria-label":"Connect AI setup wizard",children:(0,n.jsxs)(_.A,{sx:{position:"relative",minHeight:{xs:560,sm:590},p:{xs:2.2,sm:4},overflowX:"hidden",overflowY:"auto"},children:[(0,n.jsx)(i.default,{"aria-hidden":!0,sx:{position:"absolute",width:220,height:220,borderRadius:"50%",top:-120,right:-70,bgcolor:(0,ef.X4)(p.palette.secondary.main,.12),filter:"blur(1px)",animation:"".concat(eq," 6s ease-in-out infinite")}}),(0,n.jsx)(i.default,{"aria-hidden":!0,sx:{position:"absolute",width:150,height:150,borderRadius:5,bottom:-100,left:-70,bgcolor:(0,ef.X4)(p.palette.primary.main,.1),transform:"rotate(24deg)",animation:"".concat(eq," 7s ease-in-out -2s infinite")}}),(0,n.jsxs)(i.default,{sx:{position:"relative",zIndex:1},children:[(0,n.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:2},children:[x.length&&"success"!==m?(0,n.jsx)(T.A,{onClick:()=>{let e=x[x.length-1];e&&(g(e=>e.slice(0,-1)),h(e),R(null))},"aria-label":"Back",children:(0,n.jsx)(eg.A,{})}):(0,n.jsx)(i.default,{sx:{width:40}}),(0,n.jsx)(i.default,{sx:{flex:1},children:(0,n.jsx)(ep.A,{variant:"determinate",value:eD,"aria-label":"Connection progress"})}),(0,n.jsx)(T.A,{onClick:a,"aria-label":"Close connection wizard",disabled:L||er||!!B,children:(0,n.jsx)(eb.A,{})})]}),M?(0,n.jsx)(f.A,{severity:"error",onClose:()=>R(null),sx:{mb:2},children:M}):null,(0,n.jsx)(i.default,{sx:{animation:"".concat(eB," 260ms ease-out both"),"@media (prefers-reduced-motion: reduce)":{animation:"none"}},children:(()=>{if("welcome"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ed.A,{icon:(0,n.jsx)(y.A,{}),label:"A two-minute setup",color:"primary",variant:"outlined",sx:{mb:2}}),(0,n.jsx)(S.A,{variant:"h4",children:"Let’s connect your AI!"}),(0,n.jsx)(S.A,{variant:"body1",color:"text.secondary",sx:{mt:1,mb:3,maxWidth:680},children:"Do you already know how model providers, API keys, and local AI work?"}),(0,n.jsxs)(e_,{children:[(0,n.jsx)(eX,{icon:eP.A,title:"No idea",description:"Explain the choices and guide me one small step at a time.",badge:"Gentle guide",onClick:()=>{b("beginner"),el("budget")}}),(0,n.jsx)(eX,{icon:ev.A,title:"I know a bit",description:"Give me the important tradeoffs, then let me move quickly.",onClick:()=>{b("familiar"),el("budget")}}),(0,n.jsx)(eX,{icon:j.A,title:"I’m an expert",description:"Skip the wizard and open every model setting.",onClick:d})]})]});if("budget"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"First things first"}),(0,n.jsx)(S.A,{variant:"h4",children:"How would you like to pay for AI?"}),eW?(0,n.jsx)(S.A,{variant:"body1",color:"text.secondary",sx:{mt:1,mb:3,maxWidth:700},children:"Free services are great for learning but have tighter limits. A subscription reuses a plan you already have. Pay-as-you-go APIs charge only for what your flows use and are usually the most flexible."}):(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:3},children:"Pick the billing style you want FLUJO to build around."}),(0,n.jsxs)(e_,{children:[(0,n.jsx)(eX,{icon:eN.A,title:"Let’s start free",description:"No model usage bill; expect lower limits and changing availability.",badge:"Start here",onClick:()=>el("location")}),(0,n.jsx)(eX,{icon:eM.A,title:"I already subscribe",description:"Use Claude, ChatGPT/Codex, or a native Gemini developer key.",onClick:()=>el("subscription-provider")}),(0,n.jsx)(eX,{icon:ek.A,title:"I can pay—no subscription",description:"Fund an API account and pay only for the requests you make.",onClick:()=>el("paid-provider")})]})]});if("location"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"Free route"}),(0,n.jsx)(S.A,{variant:"h4",children:"Online or offline?"}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:3},children:eW?"Online is easier and uses someone else’s hardware. Offline keeps prompts on this machine but downloads a model and uses your RAM or GPU.":"Online is quickest; offline is private and uses this computer."}),(0,n.jsxs)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"1fr 1fr"},gap:1.5},children:[(0,n.jsx)(eX,{icon:ej.A,title:"Online",description:"Fastest setup. Create a provider account and an API key.",badge:"Easy",onClick:()=>el("free-provider")}),(0,n.jsx)(eX,{icon:eA.A,title:"Offline",description:"Install Ollama and download a model sized for this computer.",badge:"Private",onClick:()=>ei("ollama")})]})]});if("free-provider"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"Free \xb7 online"}),(0,n.jsx)(S.A,{variant:"h4",children:"Choose your gateway"}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:3},children:eW?"Both use the same free-router target; OpenRouter is the most direct route.":"OpenRouter is the direct route; Requesty adds gateway features."}),(0,n.jsxs)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"1fr 1fr"},gap:1.5},children:[(0,n.jsx)(eX,{icon:eO.A,title:"OpenRouter",description:"Direct access to openrouter/free, with no model charges.",badge:"Recommended",onClick:()=>ei("openrouter-free")}),(0,n.jsx)(eX,{icon:ej.A,title:"Requesty",description:"A unified gateway that can grow into policies and paid models later.",onClick:()=>ei("requesty-free")})]})]});if("subscription-provider"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"Use what you already have"}),(0,n.jsx)(S.A,{variant:"h4",children:"Which service are you connecting?"}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:3},children:eW?"FLUJO will create a ready-to-use bundle, not just one empty model record.":"Pick the account you already use."}),(0,n.jsxs)(e_,{children:[(0,n.jsx)(eX,{icon:eL.A,title:"Claude",description:"Use a Claude Pro or Max plan through Claude Code.",onClick:()=>ei("claude-subscription")}),(0,n.jsx)(eX,{icon:eU.A,title:"ChatGPT / Codex",description:"Use the local Codex sign-in attached to your ChatGPT plan.",badge:"No key paste",onClick:()=>ei("codex-subscription")}),(0,n.jsx)(eX,{icon:y.A,title:"Gemini Native",description:"Use Google’s native GenAI SDK with a Gemini developer key.",onClick:()=>ei("gemini-native")})]})]});if("paid-provider"===m)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"Pay only for usage"}),(0,n.jsx)(S.A,{variant:"h4",children:"Choose your model gateway"}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:3},children:eW?"You fund one account, and FLUJO creates several model choices that share its encrypted key.":"Both gateways share one encrypted key across the starter bundle."}),(0,n.jsxs)(i.default,{sx:{display:"grid",gridTemplateColumns:{xs:"1fr",sm:"1fr 1fr"},gap:1.5},children:[(0,n.jsx)(eX,{icon:eO.A,title:"OpenRouter",description:"Broad model catalog with direct auto-routing and spending limits.",badge:"Recommended",onClick:()=>ei("openrouter-paid")}),(0,n.jsx)(eX,{icon:ej.A,title:"Requesty",description:"Unified routing with policies, observability, and provider fallbacks.",onClick:()=>ei("requesty-paid")})]})]});if("setup"===m&&"ollama"===A)return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:"Free \xb7 offline"}),(0,n.jsx)(S.A,{variant:"h4",children:"Make this computer the AI provider"}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:2.5},children:"Ollama runs the model locally. The first model download can be several gigabytes; after that, prompts stay on this machine."}),V?(0,n.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1.5,py:3},children:[(0,n.jsx)(k.default,{size:22}),(0,n.jsx)(S.A,{children:"Checking Ollama and this machine…"})]}):null,!V&&Y?(0,n.jsx)(l.A,{variant:"outlined",sx:{p:2,mb:2,borderRadius:3},children:(0,n.jsxs)(eu.A,{direction:{xs:"column",sm:"row"},justifyContent:"space-between",spacing:1.5,children:[(0,n.jsxs)(i.default,{children:[(0,n.jsxs)(S.A,{variant:"subtitle1",sx:{fontWeight:720},children:["Recommended: ",eY]}),(0,n.jsx)(S.A,{variant:"body2",color:"text.secondary",children:Y.ollamaReachable?eZ?"Ollama is ready and this model is already downloaded.":"Ollama is ready. FLUJO can download this model now.":"Ollama is not running yet. Install or start it, then check again."})]}),(0,n.jsx)(ed.A,{color:Y.ollamaReachable?"success":"warning",label:Y.ollamaReachable?"Ollama ready":"Not running"})]})}):null,V||(null==Y?void 0:Y.ollamaReachable)?null:(0,n.jsxs)(i.default,{sx:{mb:2},children:[eV("ollama","winget install --id Ollama.Ollama -e --source winget"),(0,n.jsx)(u.A,{startIcon:(0,n.jsx)(eI.A,{}),onClick:()=>void ec(),disabled:V||!!B,sx:{mt:1},children:"Check again"})]}),er?(0,n.jsxs)(i.default,{sx:{my:2},children:[(0,n.jsx)(ep.A,{}),(0,n.jsxs)(S.A,{variant:"body2",sx:{mt:1},children:["Downloading ",eY,"… keep FLUJO open."]}),eo.length?(0,n.jsx)(S.A,{component:"pre",variant:"caption",color:"text.secondary",sx:{whiteSpace:"pre-wrap"},children:eo.join("\n")}):null]}):null,(0,n.jsx)(u.A,{variant:"contained",size:"large",startIcon:L||er?(0,n.jsx)(k.default,{size:18,color:"inherit"}):(0,n.jsx)(eC.A,{}),onClick:()=>void ez(),disabled:!(null==Y?void 0:Y.ollamaReachable)||L||er,children:eZ?"Connect ".concat(eY):"Download ".concat(eY," & connect")})]});if("setup"===m&&A&&e$){let e="claude-subscription"===A,t="codex-subscription"===A;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(S.A,{variant:"overline",color:"primary.main",children:e$.eyebrow}),(0,n.jsx)(S.A,{variant:"h4",children:e$.title}),(0,n.jsx)(S.A,{color:"text.secondary",sx:{mt:1,mb:2.2,maxWidth:720},children:e$.summary}),e?(0,n.jsxs)(i.default,{sx:{mb:2},children:[(0,n.jsx)(S.A,{variant:"subtitle2",sx:{mb:1},children:"1. Install Claude Code, then create a setup token"}),eV("claude","winget install --id Anthropic.ClaudeCode -e --source winget","claude setup-token")]}):null,t?(0,n.jsxs)(i.default,{sx:{mb:2},children:[(0,n.jsx)(S.A,{variant:"subtitle2",sx:{mb:1},children:"1. Install Codex, then sign in with ChatGPT"}),eV("codex","winget install --id OpenAI.Codex -e --source winget","codex login"),(0,n.jsx)(em.A,{sx:{mt:1},control:(0,n.jsx)(eh.A,{checked:N,onChange:e=>P(e.target.checked)}),label:"I completed the Codex browser sign-in"})]}):null,e$.accountUrl?(0,n.jsx)(u.A,{href:e$.accountUrl,target:"_blank",rel:"noreferrer",variant:"outlined",startIcon:(0,n.jsx)(eT.A,{}),sx:{mb:2},children:e$.accountLabel}):null,t?null:(0,n.jsx)(s.A,{fullWidth:!0,type:"password",autoComplete:"off",label:"".concat(e?"2. ":"").concat(e$.keyLabel),value:I,onChange:e=>{O(e.target.value),R(null)},InputProps:{startAdornment:(0,n.jsx)(eS.A,{color:"action",sx:{mr:1}})},helperText:"Saved only when you finish; FLUJO encrypts it through the existing model-storage path.",sx:{mb:2}}),(0,n.jsx)(f.A,{severity:"info",sx:{mb:2},children:e$.note}),(0,n.jsx)(S.A,{variant:"subtitle2",sx:{mb:1},children:"FLUJO will add"}),(0,n.jsx)(eu.A,{direction:"row",gap:.8,flexWrap:"wrap",sx:{mb:2.5},children:eH.map(e=>(0,n.jsx)(ed.A,{label:e,variant:"outlined"},e))}),(0,n.jsxs)(u.A,{variant:"contained",size:"large",startIcon:L?(0,n.jsx)(k.default,{size:18,color:"inherit"}):(0,n.jsx)(y.A,{}),onClick:()=>void eF(),disabled:L||!!B,children:["Create ",1===eH.length?"my model":"my ".concat(eH.length," models")]})]})}if("success"===m){let e=[...F,...z].map(e=>e.displayName||e.name);return(0,n.jsxs)(i.default,{sx:{textAlign:"center",py:2},children:[(0,n.jsx)(i.default,{sx:{width:78,height:78,mx:"auto",mb:2,display:"grid",placeItems:"center",borderRadius:"50%",color:"success.main",bgcolor:(0,ef.X4)(p.palette.success.main,.13),animation:"".concat(eK," 520ms cubic-bezier(.2,.8,.2,1) both")},children:(0,n.jsx)(ey.A,{sx:{fontSize:47}})}),(0,n.jsx)(S.A,{variant:"h4",children:"Your AI is ready to flow"}),(0,n.jsxs)(S.A,{color:"text.secondary",sx:{mt:1,mb:2.2},children:[F.length?"".concat(F.length," new connection").concat(1===F.length?"":"s"," created."):"Your matching connections were already here.",z.length?" ".concat(z.length," existing connection").concat(1===z.length?" was":"s were"," kept."):""]}),(0,n.jsx)(eu.A,{direction:"row",gap:.8,justifyContent:"center",flexWrap:"wrap",sx:{mb:3},children:e.map(e=>(0,n.jsx)(ed.A,{icon:(0,n.jsx)(eL.A,{}),label:e,color:"primary",variant:"outlined"},e))}),(0,n.jsx)(u.A,{variant:"contained",size:"large",onClick:a,children:"See my models"})]})}return null})()},m)]})]})})}var eH=r(94929);let eY=(0,q.h)("app/models/ModelClient");function eZ(e){var t;let{initialModels:r}=e,w=(0,a.useRouter)(),k=(0,a.useSearchParams)(),[C,S]=(0,o.useState)(r),[T,I]=(0,o.useState)(""),[O,N]=(0,o.useState)(null),[P,L]=(0,o.useState)(!1),[U,M]=(0,o.useState)(!1),[R,F]=(0,o.useState)(null),[E,W]=(0,o.useState)(null),D=k.get("add"),q="manual"===D;if((0,o.useEffect)(()=>{q?W(e=>null!=e?e:{id:(0,A.A)(),name:"",displayName:"",description:"",ApiKey:"",baseUrl:"",provider:"openai",promptTemplate:"",temperature:"0.0"}):W(null)},[q]),(0,o.useEffect)(()=>{try{let e=(0,eo.X)();e&&"function"==typeof e.loadModels&&(M(!0),eY.debug("Model service is ready"))}catch(t){eY.warn("Model service not ready, retrying...",t);let e=setTimeout(()=>{try{let e=(0,eo.X)();e&&"function"==typeof e.loadModels&&(M(!0),eY.debug("Model service is now ready"))}catch(e){eY.warn("Model service still not ready",e)}},100);return()=>clearTimeout(e)}},[]),!U)return eY.debug("Waiting for model service to be ready..."),(0,n.jsx)(eH.default,{});let B=k.get("edit"),G=q?E:B&&null!=(t=C.find(e=>e.id===B))?t:null,X=q?!!E:!!B,_=async e=>{eY.info("Saving model",{modelId:e.id,modelName:e.name,mode:q?"add":"update"}),L(!0);try{let t=(0,eo.X)(),r=q?await t.addModel(e):await t.updateModel(e);if(!r.success)return N(r.error||"Failed to save model."),{success:!1,error:r.error};{let e=await t.loadModels();return S(e),W(null),w.push("/models"),{success:!0,model:r.model}}}catch(e){return eY.error("Failed to save model",e),N((null==e?void 0:e.message)||"Failed to save model. Please try again."),{success:!1,error:(null==e?void 0:e.message)||"Failed to save model"}}finally{L(!1)}},J=async e=>(eY.info("Editing model",{modelId:e.id,modelName:e.name}),w.push("/models?edit=".concat(e.id)),{success:!0}),$=async()=>{eY.info("Opening guided model connection wizard"),F(null),w.push("/models?add=1")},H=()=>{eY.info("Opening manual add-model modal"),F(null),w.push("/models?add=manual")},Y=async e=>{eY.info("Creating guided model bundle",{count:e.length}),L(!0),N(null);let t=[],r=[];try{let n=(0,eo.X)(),o=[...await n.loadModels()];for(let a of e){let e=o.find(e=>e.provider===a.provider&&(e.adapter||"openai")===(a.adapter||"openai")&&e.name.trim().toLowerCase()===a.name.trim().toLowerCase());if(e){r.push(e);continue}let l=a.displayName||a.name,i=l,s=2;for(;o.some(e=>{var t;return(null==(t=e.displayName)?void 0:t.trim().toLowerCase())===i.trim().toLowerCase()});)i="".concat(l," (").concat(s,")"),s+=1;let d=await n.addModel({...a,displayName:i});if(!d.success||!d.model){let e=await n.loadModels();return S(e),{success:!1,created:t,existing:r,error:d.error||"Could not create ".concat(i,".")}}t.push(d.model),o.push(d.model)}let a=await n.loadModels();return S(a),w.refresh(),{success:!0,created:t,existing:r}}catch(n){eY.error("Failed to create guided model bundle",n);let e=(null==n?void 0:n.message)||"Failed to create the guided model bundle.";return N(e),{success:!1,created:t,existing:r,error:e}}finally{L(!1)}},Z=async e=>{eY.info("Deleting model",{modelId:e}),L(!0);try{let t=(0,eo.X)();await t.deleteModel(e);let r=await t.loadModels();S(r)}catch(e){eY.error("Failed to delete model",e),N("Failed to delete model. Please try again.")}finally{L(!1)}},V=async(e,t)=>{eY.info("Setting model folder",{modelId:e,folder:t}),L(!0);try{let r=(0,eo.X)(),n=await r.getModel(e);if(!n)return void N("Model not found.");let o=await r.updateModel({...n,folder:t});if(!o.success)return void N(o.error||"Failed to move model to folder.");let a=await r.loadModels();S(a)}catch(e){eY.error("Failed to set model folder",e),N((null==e?void 0:e.message)||"Failed to move model to folder. Please try again.")}finally{L(!1)}},Q=async e=>{eY.info("Toggling model favorite",{modelId:e}),L(!0);try{let t=(0,eo.X)(),r=await t.getModel(e);if(!r)return void N("Model not found.");let n=!r.favorite,o=await t.updateModel({...r,favorite:n||void 0});if(!o.success)return void N(o.error||"Failed to update favorite.");let a=await t.loadModels();S(a)}catch(e){eY.error("Failed to toggle model favorite",e),N((null==e?void 0:e.message)||"Failed to update favorite. Please try again.")}finally{L(!1)}},ee=async()=>{W(null),w.push("/models")},et=T.trim()?C.filter(e=>{let t=T.toLowerCase();return(e.displayName||"").toLowerCase().includes(t)||(e.name||"").toLowerCase().includes(t)}):C;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.A,{elevation:0,variant:"outlined",sx:{mb:2.5,p:1.2,borderRadius:3},children:(0,n.jsxs)(i.default,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},gap:1,alignItems:{xs:"stretch",sm:"center"},justifyContent:"space-between"},children:[(0,n.jsx)(s.A,{placeholder:"Search AI connections...",variant:"outlined",size:"small",value:T,onChange:e=>I(e.target.value),InputProps:{startAdornment:(0,n.jsx)(d.A,{position:"start",children:(0,n.jsx)(b.A,{fontSize:"small"})})},sx:{maxWidth:{sm:300},width:"100%"}}),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(c.A,{variant:"contained",color:"primary","aria-label":"AI connection options",children:[(0,n.jsx)(u.A,{startIcon:(0,n.jsx)(g.A,{}),onClick:$,"data-tour":"add-model",children:"Connect AI"}),(0,n.jsx)(u.A,{size:"small","aria-label":"More AI connection options","aria-controls":R?"add-model-menu":void 0,"aria-haspopup":"menu","aria-expanded":R?"true":void 0,onClick:e=>F(e.currentTarget),sx:{px:.8,minWidth:40},children:(0,n.jsx)(v.A,{})})]}),(0,n.jsxs)(p.A,{id:"add-model-menu",anchorEl:R,open:!!R,onClose:()=>F(null),children:[(0,n.jsxs)(m.A,{onClick:$,children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(y.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"Guided connection",secondary:"Let FLUJO choose the setup"})]}),(0,n.jsxs)(m.A,{onClick:H,children:[(0,n.jsx)(h.A,{children:(0,n.jsx)(j.A,{fontSize:"small"})}),(0,n.jsx)(x.A,{primary:"Manual Creation",secondary:"Configure every model field"})]})]})]})]})}),O&&(0,n.jsx)(i.default,{sx:{mb:2},children:(0,n.jsx)(f.A,{severity:"error",onClose:()=>N(null),children:O})}),(0,n.jsx)(K,{models:et,isLoading:P,onAdd:$,onUpdate:J,onDelete:Z,folders:(0,z.yF)(C,e=>e.folder),onSetFolder:V,onToggleFavorite:Q}),(0,n.jsx)(e$,{open:"1"===D,onClose:ee,onManualCreation:H,onCreateModels:Y}),X&&G?(0,n.jsx)(ei,{open:X,model:G,onSave:_,onClose:ee}):null]})}},61033:(e,t,r)=>{"use strict";r.d(t,{A$:()=>c,X8:()=>i,YP:()=>u,js:()=>d});let n="_-_-_",o=/^(tool|resource):(.+)$/,a=/\$\{((?:tool|resource):[^}]+|_-_-_[^}]+)\}/g;function l(e,t){return"".concat(e,"__").concat(t)}function i(e,t,r){return"${".concat(e,":").concat(l(t,r),"}")}function s(e){let t=o.exec(e);if(t){let e=t[1],r=function(e){let t=e.indexOf("__");if(t<=0)return null;let r=e.slice(t+2);return r?{server:e.slice(0,t),name:r}:null}(t[2]);return r?{kind:e,server:r.server,name:r.name}:null}if(e.startsWith(n)){let t=e.split(n);if(3===t.length&&t[1]&&t[2])return{kind:"tool",server:t[1],name:t[2]}}return null}function d(e){return e.startsWith("${")&&e.endsWith("}")?s(e.slice(2,-1)):null}function c(e){let t,r=[];for(a.lastIndex=0;null!==(t=a.exec(e));){let e=s(t[1]);e&&r.push({...e,fullMatch:t[0],index:t.index})}return r}function u(e){return"tool"===e.kind&&"handoff"===e.server?"handoff:".concat(e.name):"".concat(e.kind,":").concat(l(e.server,e.name))}},61267:(e,t,r)=>{"use strict";r.d(t,{A:()=>D});var n=r(95155),o=r(12115),a=r(33567),l=r(78470),i=r(41983),s=r(8532),d=r(84578),c=r(94049),u=r(25635),p=r(28548),m=r(29767),h=r(53062),x=r(1702),f=r(14915),g=r(4484),v=r(89623),y=r(11665),b=r(91665),j=r(62291),A=r(47529),w=r(88107),k=r(43076),C=r(73288),S=r(2778),T=r(52363),I=r(65036),O=r(4474),N=r(22003),P=r(21067),L=r(75912),U=r(91871),M=r(36741),R=r(48563);let F=e=>{var t,r,o,a,l,i,s,d,m;let{title:h,attempt:x}=e;return(0,n.jsxs)(c.default,{sx:{mb:2},children:[(0,n.jsxs)(c.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5},children:[x.ok?(0,n.jsx)(M.A,{color:"success",fontSize:"small"}):(0,n.jsx)(R.A,{color:"error",fontSize:"small"}),(0,n.jsx)(u.A,{variant:"subtitle2",children:h}),"number"==typeof x.status&&(0,n.jsx)(p.A,{size:"small",label:"HTTP ".concat(x.status)}),(0,n.jsx)(p.A,{size:"small",variant:"outlined",label:"".concat(x.durationMs," ms")})]}),x.ok?(0,n.jsxs)(u.A,{variant:"body2",color:"text.secondary",sx:{pl:3},children:["Response: ",x.content?'"'.concat(x.content,'"'):"(empty)"]}):(0,n.jsxs)(c.default,{sx:{pl:3},children:[(0,n.jsx)(u.A,{variant:"body2",color:"error.main",children:null==(t=x.error)?void 0:t.message}),((null==(r=x.error)?void 0:r.code)||(null==(o=x.error)?void 0:o.type))&&(0,n.jsxs)(u.A,{variant:"caption",color:"text.secondary",display:"block",children:[(null==(a=x.error)?void 0:a.type)?"type: ".concat(x.error.type):"",(null==(l=x.error)?void 0:l.type)&&(null==(i=x.error)?void 0:i.code)?" \xb7 ":"",(null==(s=x.error)?void 0:s.code)?"code: ".concat(x.error.code):""]}),(null==(d=x.error)?void 0:d.retryAfter)&&(0,n.jsxs)(u.A,{variant:"caption",color:"text.secondary",display:"block",children:["retry-after: ",x.error.retryAfter,"s"]}),(null==(m=x.error)?void 0:m.body)!==void 0&&(0,n.jsx)(c.default,{component:"pre",sx:{mt:.5,p:1,bgcolor:"action.hover",borderRadius:1,fontSize:"0.7rem",overflowX:"auto",maxHeight:160},children:JSON.stringify(x.error.body,null,2)})]})]})},E=e=>{let{open:t,modelLabel:r,loading:o,result:a,error:l,onClose:i,onRetry:s}=e,d=(null==a?void 0:a.provider)==="codex"?"Codex SDK (used by flows)":"OpenAI SDK (used by flows)";return(0,n.jsxs)(S.A,{open:t,onClose:i,maxWidth:"sm",fullWidth:!0,children:[(0,n.jsxs)(T.A,{children:["Test model: ",r]}),(0,n.jsx)(I.A,{dividers:!0,children:o?(0,n.jsxs)(c.default,{sx:{display:"flex",alignItems:"center",gap:2,py:3},children:[(0,n.jsx)(O.default,{size:24}),(0,n.jsx)(u.A,{variant:"body2",children:"Sending a direct test request (SDK + axios)…"})]}):l?(0,n.jsx)(N.A,{severity:"error",children:l}):a?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(N.A,{severity:a.ok?"success":"warning",sx:{mb:2},children:a.diagnosis}),(0,n.jsxs)(u.A,{variant:"caption",color:"text.secondary",display:"block",sx:{mb:2},children:["model: ",a.model,a.baseUrl?" \xb7 ".concat(a.baseUrl):"",a.provider?" \xb7 ".concat(a.provider):""]}),(0,n.jsx)(P.A,{sx:{mb:2}}),(0,n.jsx)(F,{title:d,attempt:a.sdk}),(0,n.jsx)(F,{title:"axios (independent cross-check)",attempt:a.axios})]}):null}),(0,n.jsxs)(L.A,{children:[(0,n.jsx)(U.A,{onClick:s,disabled:o,children:"Run again"}),(0,n.jsx)(U.A,{onClick:i,variant:"contained",children:"Close"})]})]})};var z=r(81956);let W=(0,C.h)("frontend/components/models/list/ModelCard"),D=e=>{let{model:t,onEdit:r,onDelete:C,folder:S,folders:T=[],onSetFolder:I,selectable:O=!1,selected:N=!1,onSelect:P,onToggleFavorite:L}=e,U=(0,a.A)(),[M,R]=(0,o.useState)(!1),[F,D]=(0,o.useState)(!1),[q,B]=(0,o.useState)(null),[K,G]=(0,o.useState)(null),[X,_]=(0,o.useState)(null),J=async()=>{D(!0),G(null),B(null);try{let e=await (0,k.X)().testModel({modelId:t.id});B(e)}catch(e){W.error("Model test failed",{modelId:t.id,error:e}),G(e instanceof Error?e.message:"Failed to run test")}finally{D(!1)}},$=L?(0,n.jsx)(l.A,{title:t.favorite?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,n.jsx)(i.A,{size:"small","aria-label":t.favorite?"remove from favorites":"add to favorites",onClick:e=>{e.stopPropagation(),null==L||L(t.id)},sx:{position:"absolute",top:4,left:4,zIndex:2,color:t.favorite?U.palette.warning.main:U.palette.text.secondary,backgroundColor:(0,s.X4)(U.palette.background.paper,.6),"&:hover":{backgroundColor:(0,s.X4)(U.palette.background.paper,.9)}},children:t.favorite?(0,n.jsx)(j.A,{fontSize:"small"}):(0,n.jsx)(A.A,{fontSize:"small"})})}):null,H=(0,n.jsx)(n.Fragment,{children:(0,n.jsxs)(d.A,{sx:{flexGrow:1,p:2.25},children:[(0,n.jsxs)(c.default,{sx:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:1,mb:1.2},children:[(0,n.jsx)(u.A,{variant:"h6",sx:{pr:1},children:t.displayName||t.name}),(0,n.jsx)(p.A,{label:(0,w.T_)(t.provider,t.adapter).label,size:"small",sx:{flexShrink:0,color:"primary.light",bgcolor:(0,s.X4)(U.palette.primary.main,.09),border:"1px solid ".concat((0,s.X4)(U.palette.primary.main,.16))}})]}),(0,n.jsx)(u.A,{variant:"body2",color:"text.secondary",sx:{mb:2,minHeight:42},style:{display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis"},children:t.description}),(0,n.jsxs)(c.default,{sx:{mb:1,p:1.25,border:1,borderColor:"divider",borderRadius:2.5,bgcolor:(0,s.X4)(U.palette.background.default,.44)},children:[t.displayName&&(0,n.jsxs)(u.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:[(0,n.jsx)(c.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:"Model"})," \xb7 ",t.name]}),"number"==typeof t.contextWindow&&(0,n.jsxs)(u.A,{variant:"body2",color:"text.secondary",children:[(0,n.jsx)(c.default,{component:"span",sx:{color:"text.primary",fontWeight:650},children:"Context"})," \xb7 ",t.contextWindow.toLocaleString()," tokens"]})]}),t.baseUrl&&(0,n.jsx)(l.A,{title:t.baseUrl,arrow:!0,placement:"top",children:(0,n.jsxs)(u.A,{variant:"body2",color:"text.secondary",noWrap:!0,children:["Base URL: ",t.baseUrl]})}),S&&(0,n.jsx)(p.A,{icon:(0,n.jsx)(b.A,{}),label:S,size:"small",variant:"outlined",sx:{mt:1,maxWidth:"100%"}})]})});return O?(0,n.jsxs)(m.A,{elevation:0,role:"radio","aria-checked":N,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",border:e=>"1px solid ".concat(N?e.palette.primary.main:e.palette.divider),boxShadow:N?"0 0 0 3px ".concat((0,s.X4)(U.palette.primary.main,.13)):void 0,transition:"transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease","&:hover":{borderColor:(0,s.X4)(U.palette.primary.main,.42),transform:"translateY(-3px)"}},children:[$,(0,n.jsx)(h.A,{onClick:()=>null==P?void 0:P(t.id),sx:{height:"100%",display:"flex",flexDirection:"column",alignItems:"stretch"},children:H})]}):(0,n.jsxs)(m.A,{elevation:0,sx:{height:"100%",display:"flex",flexDirection:"column",position:"relative",transition:"transform 200ms ease, border-color 200ms ease, box-shadow 200ms ease","&:hover":{borderColor:(0,s.X4)(U.palette.primary.main,.38),boxShadow:"0 22px 60px ".concat((0,s.X4)(U.palette.primary.main,.12)),transform:"translateY(-4px)"}},children:[$,H,(0,n.jsxs)(x.A,{disableSpacing:!0,sx:{px:1.5,pb:1.4,borderTop:1,borderColor:"divider"},children:[(0,n.jsx)(l.A,{title:"Test model (direct SDK call, no flow)",arrow:!0,children:(0,n.jsx)(i.A,{"aria-label":"test",onClick:()=>{R(!0),J()},children:(0,n.jsx)(v.A,{})})}),(0,n.jsx)(i.A,{"aria-label":"edit",onClick:r,children:(0,n.jsx)(f.A,{})}),(0,n.jsx)(i.A,{"aria-label":"delete",onClick:C,children:(0,n.jsx)(g.A,{})}),I&&(0,n.jsx)(l.A,{title:"Move to folder…",arrow:!0,children:(0,n.jsx)(i.A,{"aria-label":"move to folder",onClick:e=>_(e.currentTarget),sx:{ml:"auto"},children:(0,n.jsx)(y.A,{})})})]}),I&&(0,n.jsx)(z.A,{anchorEl:X,open:!!X,currentFolder:S,folders:T,onClose:()=>_(null),onAssign:I}),(0,n.jsx)(E,{open:M,modelLabel:t.displayName||t.name,loading:F,result:q,error:K,onClose:()=>R(!1),onRetry:J})]})}},64598:(e,t,r)=>{"use strict";r.d(t,{R:()=>a});var n=r(12115),o=r(97104);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{threshold:r=200,deps:a=[]}=t,l=(0,n.useRef)(null),[i,s]=(0,n.useState)(!1),d=(0,n.useRef)(!1),c=(0,n.useCallback)(()=>{let e=l.current;return e&&e.scrollHeight>e.clientHeight+1?e:null},[]),u=(0,n.useCallback)(()=>{let e=c();return e?e.scrollTop:window.scrollY||document.documentElement.scrollTop||0},[c]),p=(0,n.useCallback)(e=>{let t=c();t?t.scrollTop=e:window.scrollTo(0,e)},[c]);return(0,n.useEffect)(()=>{let t=l.current,n=0,a="function"==typeof window.requestAnimationFrame?window.requestAnimationFrame.bind(window):e=>window.setTimeout(()=>e(0),16),i="function"==typeof window.cancelAnimationFrame?window.cancelAnimationFrame.bind(window):e=>window.clearTimeout(e),d=()=>{let t=u();s(t>r),n&&i(n),n=a(()=>(0,o.vi)(e,t))};return null==t||t.addEventListener("scroll",d,{passive:!0}),window.addEventListener("scroll",d,{passive:!0}),()=>{n&&i(n),null==t||t.removeEventListener("scroll",d),window.removeEventListener("scroll",d)}},[e,r,u]),(0,n.useEffect)(()=>{if(d.current)return;let t=(0,o.Aq)(e,0);if(t<=0){d.current=!0;return}p(t);let n=u();n>0&&(d.current=!0,s(n>r))},a),{ref:l,showBackToTop:i,scrollToTop:(0,n.useCallback)(()=>{let e=c();e?e.scrollTo({top:0,behavior:"smooth"}):window.scrollTo({top:0,behavior:"smooth"}),s(!1)},[c])}}},69586:(e,t,r)=>{Promise.resolve().then(r.bind(r,96429)),Promise.resolve().then(r.bind(r,94049)),Promise.resolve().then(r.bind(r,24437)),Promise.resolve().then(r.bind(r,36552)),Promise.resolve().then(r.bind(r,58971)),Promise.resolve().then(r.bind(r,79508)),Promise.resolve().then(r.bind(r,36982)),Promise.resolve().then(r.bind(r,94929))},79508:(e,t,r)=>{"use strict";r.d(t,{default:()=>d});var n=r(95155),o=r(33567),a=r(94049),l=r(80777),i=r(25635),s=r(8532);function d(e){let{title:t,description:r,eyebrow:d,icon:c,leading:u,badge:p,actions:m,compact:h=!1,maxWidth:x=1440}=e,f=(0,o.A)();return(0,n.jsx)(a.default,{component:"header",sx:{position:"relative",overflow:"hidden",borderBottom:1,borderColor:"divider",background:"linear-gradient(110deg, ".concat((0,s.X4)(f.palette.primary.main,"dark"===f.palette.mode?.09:.055),", transparent 38%, ").concat((0,s.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,s.X4)(f.palette.primary.main,.16),", transparent 68%)"),filter:"blur(20px)"}},children:(0,n.jsxs)(a.default,{sx:{position:"relative",zIndex:1,display:"flex",width:"100%",maxWidth:x,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,n.jsxs)(l.A,{direction:"row",spacing:1.5,alignItems:"center",sx:{minWidth:0},children:[u,c&&(0,n.jsx)(a.default,{"aria-hidden":"true",sx:{display:"grid",width:h?40:46,height:h?40:46,flexShrink:0,placeItems:"center",border:"1px solid ".concat((0,s.X4)(f.palette.primary.main,.24)),borderRadius:h?2.8:3.2,color:"primary.light",bgcolor:(0,s.X4)(f.palette.primary.main,.1),boxShadow:"inset 0 1px 0 ".concat((0,s.X4)(f.palette.common.white,.08),", 0 10px 30px ").concat((0,s.X4)(f.palette.primary.main,.12))},children:(0,n.jsx)(c,{sx:{fontSize:h?21:24}})}),(0,n.jsxs)(a.default,{sx:{minWidth:0},children:[(d||p)&&(0,n.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.35},children:[d&&(0,n.jsx)(i.A,{sx:{color:"primary.light",fontSize:"0.67rem",fontWeight:780,letterSpacing:"0.13em",textTransform:"uppercase"},children:d}),p]}),(0,n.jsx)(i.A,{component:"h1",variant:"h5",sx:{overflow:"hidden",textOverflow:"ellipsis",fontSize:h?"1.2rem":void 0,whiteSpace:{xs:"normal",sm:"nowrap"}},children:t}),r&&(0,n.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mt:.45,maxWidth:720,textWrap:"balance"},children:r})]})]}),m&&(0,n.jsx)(a.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})]})})}},81956:(e,t,r)=>{"use strict";r.d(t,{A:()=>b});var n=r(95155),o=r(12115),a=r(36314),l=r(86973),i=r(49501),s=r(17681),d=r(21067),c=r(2778),u=r(52363),p=r(65036),m=r(9562),h=r(75912),x=r(91871),f=r(9693),g=r(91665),v=r(7517),y=r(8190);let b=e=>{let{anchorEl:t,open:r,currentFolder:b,folders:j,onClose:A,onAssign:w}=e,[k,C]=(0,o.useState)(!1),[S,T]=(0,o.useState)(""),I=e=>{w(e),A()},O=()=>{let e=S.trim();e&&(C(!1),I(e))};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a.A,{anchorEl:t,open:r,onClose:A,onClick:e=>e.stopPropagation(),children:[j.length>0&&j.map(e=>(0,n.jsxs)(l.A,{onClick:()=>I(e),selected:e===b,children:[(0,n.jsx)(i.A,{children:e===b?(0,n.jsx)(f.A,{fontSize:"small"}):(0,n.jsx)(g.A,{fontSize:"small"})}),(0,n.jsx)(s.A,{primary:e})]},e)),j.length>0&&(0,n.jsx)(d.A,{}),(0,n.jsxs)(l.A,{onClick:()=>{T(""),C(!0)},children:[(0,n.jsx)(i.A,{children:(0,n.jsx)(v.A,{fontSize:"small"})}),(0,n.jsx)(s.A,{primary:"New folder…"})]}),b&&(0,n.jsxs)(l.A,{onClick:()=>I(void 0),children:[(0,n.jsx)(i.A,{children:(0,n.jsx)(y.A,{fontSize:"small"})}),(0,n.jsx)(s.A,{primary:"Remove from folder"})]})]}),(0,n.jsxs)(c.A,{open:k,onClose:()=>C(!1),maxWidth:"xs",fullWidth:!0,onClick:e=>e.stopPropagation(),children:[(0,n.jsx)(u.A,{children:"New folder"}),(0,n.jsx)(p.A,{children:(0,n.jsx)(m.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:S,onChange:e=>T(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),O())}})}),(0,n.jsxs)(h.A,{children:[(0,n.jsx)(x.A,{onClick:()=>C(!1),children:"Cancel"}),(0,n.jsx)(x.A,{variant:"contained",disabled:!S.trim(),onClick:O,children:"Create"})]})]})]})}},88107:(e,t,r)=>{"use strict";r.d(t,{T_:()=>s,g3:()=>l,xx:()=>i});let n=/(^|[/_-])(o[1-9]|gpt-5)(?:[./_-]|$)/i,o=/claude-(?:fable|mythos)-5|claude-opus-4-(?:[7-9]|\d{2,})|claude-sonnet-5/i,a=/^(?:opus|sonnet|fable)$|claude-(?:fable|mythos)-5|claude-opus-4-(?:[6-9]|\d{2,})|claude-sonnet-4-6/i;function l(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",l=t||"openai",i=r.trim();if("codex-cli"===l)return{effortLevels:/^gpt-5\.6-(?:sol|terra)$/i.test(i)?["low","medium","high","xhigh","max","ultra"]:/^gpt-5\.6-/i.test(i)?["low","medium","high","xhigh","max"]:["low","medium","high","xhigh"],priority:!/(?:mini|spark|review)/i.test(i),maxOutputTokens:!1};if("claude-cli"===l)return{...a.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!1};if("anthropic"===l)return{...!o.test(i)?{creativity:{min:0,max:1,step:.1}}:{},...a.test(i)?{effortLevels:["low","medium","high","xhigh","max"]}:{},maxOutputTokens:!0};if("gemini"===l)return{creativity:{min:0,max:2,step:.1},.../^gemini-2\.5/i.test(i)?{thinkingBudget:!0}:!/^gemini-2\.0/i.test(i)?{thinkingLevels:["minimal","low","medium","high"]}:{},maxOutputTokens:!0};let s="openai"===(e||"openai")&&n.test(i);return{...!s?{creativity:{min:0,max:2,step:.1}}:{},...s?{effortLevels:["low","medium","high"]}:{},maxOutputTokens:!0}}let i=[{id:"openai",label:"OpenAI",provider:"openai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0},{id:"openai-responses",label:"OpenAI (Responses API)",provider:"openai",adapter:"openai-responses",sdkLabel:"OpenAI SDK (Responses)",baseUrl:"https://api.openai.com/v1",showBaseUrl:!0,defaultModels:["gpt-5","gpt-5-mini","o4-mini","o3"]},{id:"openrouter",label:"OpenRouter",provider:"openrouter",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://openrouter.ai/api/v1",showBaseUrl:!0},{id:"requesty",label:"Requesty",provider:"requesty",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://router.requesty.ai/v1",showBaseUrl:!0},{id:"xai",label:"X.ai",provider:"xai",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.x.ai/v1",showBaseUrl:!0},{id:"ollama",label:"Ollama",provider:"ollama",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"http://localhost:11434/v1",showBaseUrl:!0},{id:"litellm",label:"LiteLLM",provider:"litellm",adapter:"openai",sdkLabel:"OpenAI SDK (via LiteLLM Proxy)",baseUrl:"http://localhost:4000/v1",showBaseUrl:!0},{id:"gemini-openai",label:"Gemini (OpenAI Format)",provider:"gemini",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",showBaseUrl:!0},{id:"gemini-native",label:"Gemini (Native)",provider:"gemini",adapter:"gemini",sdkLabel:"GenAI SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.0-flash"]},{id:"anthropic-openai",label:"Anthropic (OpenAI Format)",provider:"anthropic",adapter:"openai",sdkLabel:"OpenAI SDK",baseUrl:"https://api.anthropic.com/v1/",showBaseUrl:!0},{id:"anthropic-native",label:"Anthropic (Native)",provider:"anthropic",adapter:"anthropic",sdkLabel:"Anthropic SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["claude-opus-4-8","claude-sonnet-4-6","claude-haiku-4-5-20251001","claude-fable-5"]},{id:"claude-subscription",label:"Claude Subscription",provider:"claude-subscription",adapter:"claude-cli",sdkLabel:"Claude CLI",baseUrl:"",showBaseUrl:!1,defaultModels:["opus","sonnet","haiku","fable"]},{id:"codex",label:"Codex (OpenAI)",provider:"codex",adapter:"codex-cli",sdkLabel:"Codex SDK",baseUrl:"",showBaseUrl:!1,defaultModels:["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-5.5","gpt-5.4","gpt-5.4-mini"]}];function s(e,t){let r=e||"openai",n=t||"openai";return i.find(e=>e.provider===r&&e.adapter===n)||i.find(e=>e.provider===r)||i[0]}},90880:(e,t,r)=>{"use strict";r.d(t,{CN:()=>c,Pj:()=>s,Ub:()=>d,jX:()=>u,sE:()=>l,y4:()=>i});var n=r(61033);let o=/\$\{res:([^}]+)\}/g,a=/\$\{global:([^}]+)\}/g;function l(e){let t,r=(0,n.A$)(e).map(e=>({kind:e.kind,server:e.server,name:e.name,fullMatch:e.fullMatch,index:e.index}));for(o.lastIndex=0;null!==(t=o.exec(e));)r.push({kind:"runres",server:"",name:t[1],fullMatch:t[0],index:t.index});for(a.lastIndex=0;null!==(t=a.exec(e));)r.push({kind:"global",server:"",name:t[1],fullMatch:t[0],index:t.index});return r.sort((e,t)=>e.index-t.index)}function i(e){if(e.startsWith("${res:")&&e.endsWith("}")){let t=e.slice(6,-1);return t?{kind:"runres",server:"",name:t}:null}if(e.startsWith("${global:")&&e.endsWith("}")){let t=e.slice(9,-1);return t?{kind:"global",server:"",name:t}:null}let t=(0,n.js)(e);return t?{kind:t.kind,server:t.server,name:t.name}:null}function s(e,t,r){return"runres"===e?"${res:".concat(r,"}"):"global"===e?"${global:".concat(r,"}"):(0,n.X8)(e,t,r)}function d(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.name,r=arguments.length>2?arguments[2]:void 0;return{...e,label:t,value:s(e.kind,e.server,e.name),description:r}}function c(e){return"runres"===e.kind?"res:".concat(e.name):"global"===e.kind?"global:".concat(e.name):(0,n.YP)({kind:e.kind,server:e.server,name:e.name})}function u(e){let t=new Set;for(let r of e){let e;if("string"==typeof r&&0!==r.length)for(o.lastIndex=0;null!==(e=o.exec(r));){let r=e[1].trim();r&&t.add(r)}}return[...t].sort((e,t)=>e.localeCompare(t))}},95480:(e,t,r)=>{"use strict";r.d(t,{A:()=>C});var n=r(95155),o=r(12115),a=r(94049),l=r(25635),i=r(14913),s=r(57883),d=r(2300),c=r(89218),u=r(42063),p=r(17897),m=r(9164),h=r(73288),x=r(90880),f=r(11433);r(32098);let g=(0,h.h)("frontend/components/shared/PromptBuilder"),v=e=>{let{server:t,name:r}=e,a="handoff"===t,[l,i]=(0,o.useState)(null),[s,d]=(0,o.useState)(!0);return((0,o.useEffect)(()=>{let e=!1;return(async()=>{try{var n;d(!0);let o=null==(n=(await p.S.listServerTools(t)).tools)?void 0:n.find(e=>e.name===r);e||i(o||null)}catch(e){g.error("Failed to fetch tool info for ".concat(t,":").concat(r),e)}finally{e||d(!1)}})(),()=>{e=!0}},[t,r]),s)?(0,n.jsx)("span",{className:"tool-reference-preview loading ".concat(a?"handoff":""),children:"tool:".concat(t,"__").concat(r)}):l?(0,n.jsxs)("span",{className:"tool-reference-preview ".concat(a?"handoff":""),children:["[The user is referencing a ",a?"handoff":"tool"," `tool:",t,"__",r,"` (",l.description||"No description",")]"]}):(0,n.jsx)("span",{className:"tool-reference-preview not-found ".concat(a?"handoff":""),children:"tool:".concat(t,"__").concat(r," (Tool not found)")})},y=e=>{let{server:t,name:r}=e,[a,l]=(0,o.useState)(null),[i,s]=(0,o.useState)(!0);return((0,o.useEffect)(()=>{let e=!1;return(async()=>{try{s(!0);let n=await p.S.listServerResources(t),o=[...n.resources||[],...n.resourceTemplates||[]].find(e=>e.uri===r||e.uriTemplate===r);e||l((null==o?void 0:o.description)||(null==o?void 0:o.name)||null)}catch(e){g.error("Failed to fetch resource info for ".concat(t,":").concat(r),e)}finally{e||s(!1)}})(),()=>{e=!0}},[t,r]),i)?(0,n.jsx)("span",{className:"tool-reference-preview loading resource",children:"resource:".concat(t,"__").concat(r)}):(0,n.jsxs)("span",{className:"tool-reference-preview resource",children:["[The contents of resource `",r,"` from `",t,"`",a?" (".concat(a,")"):""," will be inserted here]"]})},b=e=>{let{name:t}=e;return(0,n.jsxs)("span",{className:"tool-reference-preview runres",children:["[The contents of the Temporary Data `",t,"` will be inserted here at run time]"]})},j=e=>{let{name:t}=e;return(0,n.jsxs)("span",{className:"tool-reference-preview global",children:["[Global variable ",(0,n.jsx)("code",{children:"${global:".concat(t,"}")})," will be inserted at run time]"]})},A=e=>{let{binding:t}=e;return"global"===t.kind?(0,n.jsx)(j,{name:t.name}):"runres"===t.kind?(0,n.jsx)(b,{name:t.name}):"resource"===t.kind?(0,n.jsx)(y,{server:t.server,name:t.name}):(0,n.jsx)(v,{server:t.server,name:t.name})},w=e=>{let{value:t}=e,r=[],o=0;for(let e of(0,x.sE)(t))e.index>o&&r.push({type:"text",value:t.slice(o,e.index)}),r.push({type:"binding",binding:e,key:e.index}),o=e.index+e.fullMatch.length;o<t.length&&r.push({type:"text",value:t.slice(o)});let a=[],l=[],i=()=>{a.push((0,n.jsx)("p",{children:l},"p-".concat(a.length))),l=[]};for(let e of r)if("text"===e.type){let t=e.value.split("\n");for(let e=0;e<t.length;e++)l.push(t[e]),e<t.length-1&&i()}else l.push((0,n.jsx)(A,{binding:e.binding},"binding-".concat(e.key)));return(l.length>0||0===a.length)&&i(),(0,n.jsx)("div",{className:"preview-content",children:a})},k=(0,o.forwardRef)((e,t)=>{let{value:r,onChange:p,label:h="Prompt Builder",height:g=300,onModeChange:v,customPreviewRenderer:y,suggestions:b=[]}=e,{globalEnvVars:j}=(0,m.useStorage)(),A=(0,o.useMemo)(()=>Object.entries(j).filter(e=>{var t;let[,r]=e;return!(null==(t=r.metadata)?void 0:t.isSecret)}).map(e=>{let[t]=e;return t}).sort((e,t)=>e.localeCompare(t)),[j]),k=(0,o.useMemo)(()=>[...b,...A.map(e=>(0,x.Ub)({kind:"global",server:"",name:e},e))],[A,b]),C=(0,o.useRef)(null),[S,T]=(0,o.useState)("raw");return(0,o.useImperativeHandle)(t,()=>({insertText:e=>{var t;return null==(t=C.current)?void 0:t.insertText(e)},getMode:()=>S}),[S]),(0,n.jsxs)(a.default,{sx:{width:"100%",height:"100%",display:"flex",flexDirection:"column"},children:[h&&(0,n.jsx)(l.A,{variant:"subtitle1",gutterBottom:!0,sx:{fontWeight:"medium",mb:1},children:h}),(0,n.jsx)(a.default,{sx:{mb:1},children:(0,n.jsxs)(i.A,{value:S,exclusive:!0,onChange:(e,t)=>{t&&(T(t),null==v||v(t))},size:"small",children:[(0,n.jsxs)(s.A,{value:"raw",children:[(0,n.jsx)(c.A,{fontSize:"small",sx:{mr:.5}}),"Raw"]}),(0,n.jsxs)(s.A,{value:"preview",children:[(0,n.jsx)(u.A,{fontSize:"small",sx:{mr:.5}}),"Preview"]})]})}),(0,n.jsx)(d.A,{elevation:0,sx:{border:"1px solid rgba(0, 0, 0, 0.12)",borderRadius:1,overflow:"visible",flexGrow:1,display:"flex",flexDirection:"column"},children:"raw"===S?(0,n.jsx)(a.default,{className:"slate-editor-container",sx:{height:"number"==typeof g?g:"100%",overflow:"visible",p:2},children:(0,n.jsx)(f.Ay,{ref:C,value:r,onChange:p,suggestions:k,placeholder:"Write your prompt here...",bare:!0,minRows:4,containerSx:{height:"100%"},ariaLabel:h||"Prompt editor"})}):y?(0,n.jsx)(a.default,{className:"custom-preview-container",sx:{height:"number"==typeof g?g:"100%",overflow:"auto"},children:y()}):(0,n.jsx)(a.default,{className:"preview-container",sx:{height:"number"==typeof g?g:"100%",overflow:"auto",p:2},children:(0,n.jsx)(w,{value:r})})})]})});k.displayName="PromptBuilder";let C=k},97104:(e,t,r)=>{"use strict";r.d(t,{Aq:()=>o,Xk:()=>l,vi:()=>a});var n=r(12115);function o(e,t){try{let r=window.localStorage.getItem(e);if(null===r)return t;return JSON.parse(r)}catch(e){return t}}function a(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch(e){}}function l(e,t){let[r,l]=(0,n.useState)(()=>o(e,t));return[r,(0,n.useCallback)(t=>{l(r=>{let n="function"==typeof t?t(r):t;return a(e,n),n})},[e])]}}},e=>{e.O(0,[1137,7926,4754,7758,3392,2678,981,1983,1871,5954,9562,3816,3272,155,4123,3303,1675,4386,8326,889,1161,8441,1255,7358],()=>e(e.s=69586)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7262],{70479:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>e2});var n=a(95155),s=a(12115),r=a(94049),l=a(20063),i=a(28548),o=a(91871),c=a(2300),d=a(25635),u=a(86946),h=a(40047),p=a(33567),m=a(15712),x=a(9562),g=a(56422),f=a(41602),y=a(23820),v=a(73707),j=a(49501),b=a(22822),A=a(17681),w=a(4474),k=a(80777),S=a(22003),C=a(41275),T=a(21067),I=a(55606),P=a(86973),E=a(99944),W=a(9957),z=a(2778),N=a(52363),R=a(65036),O=a(95844),F=a(71908),L=a(64246),H=a(75912),M=a(51611),U=a(66087),q=a(57813),J=a(26466),D=a(73288);let _=(0,D.h)("frontend/services/registry");async function G(e){return await e.json().catch(()=>({}))}class B{async getStatus(){let e=await fetch("/api/registry/auth",{method:"GET"});if(!e.ok)throw Error("HTTP ".concat(e.status));return G(e)}async auth(e,t,a,n){let s=await fetch("/api/registry/auth",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,email:t,password:a,...n?{handle:n}:{}})}),r=await G(s);if(!s.ok&&(null==r?void 0:r.status)===void 0)throw Error((null==r?void 0:r.error)||"HTTP ".concat(s.status));return r}signup(e,t,a){return this.auth("signup",e,t,a)}login(e,t){return this.auth("login",e,t)}async logout(){let e=await fetch("/api/registry/auth",{method:"DELETE"});if(!e.ok)throw Error("HTTP ".concat(e.status))}async beginOAuth(e){let t=await fetch("/api/registry/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e})}),a=await G(t);if(!t.ok||!(null==a?void 0:a.authorizationUrl))throw Error((null==a?void 0:a.error)||"HTTP ".concat(t.status));return{authorizationUrl:a.authorizationUrl}}async resendConfirmation(e){return G(await fetch("/api/registry/auth/resend",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e?{email:e}:{})}))}async requestPasswordReset(e){return G(await fetch("/api/registry/auth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e})}))}async getSettings(){let e=await fetch("/api/registry/settings",{method:"GET"});if(!e.ok)throw Error("HTTP ".concat(e.status));return G(e)}async saveSettings(e){return G(await fetch("/api/registry/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:e})}))}async publish(e){let t=await fetch("/api/registry/publish",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({manifest:e})}),a=await G(t);return(null==a?void 0:a.ok)===void 0?(_.warn("Unexpected publish response shape",{status:t.status}),{ok:!1,code:"error",error:"HTTP ".concat(t.status)}):a}async deletePackage(e){let t=await fetch("/api/registry/packages",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageId:e})}),a=await G(t);return(null==a?void 0:a.ok)===void 0?(_.warn("Unexpected package deletion response shape",{status:t.status}),{ok:!1,code:"error",error:(null==a?void 0:a.error)||"HTTP ".concat(t.status)}):a}}let V=null,Z=()=>(V||(V=new B),V),$=new Proxy({},{get(e,t){let a=Z(),n=a[t];return"function"==typeof n?n.bind(a):n}}),X=(0,D.h)("frontend/components/Packages/RegistryAccountSettings");function K(){let[e,t]=(0,s.useState)(null),[a,l]=(0,s.useState)(!0),[c,u]=(0,s.useState)(!1),[h,p]=(0,s.useState)(null),[m,g]=(0,s.useState)("login"),[f,y]=(0,s.useState)(""),[v,j]=(0,s.useState)(""),[b,A]=(0,s.useState)(""),[C,I]=(0,s.useState)(""),[P,E]=(0,s.useState)(""),W=(0,s.useCallback)(async()=>{try{let[e,a]=await Promise.all([$.getStatus(),$.getSettings()]);t(e),E(a.defaultUrl),I(a.usingDefault?"":a.baseUrl)}catch(e){X.warn("Failed to load registry account status",e)}finally{l(!1)}},[]);(0,s.useEffect)(()=>{W()},[W]),(0,s.useEffect)(()=>{let e=new URLSearchParams(window.location.search),t=e.get("registry_oauth");if(!t)return;p("success"===t?{type:"success",text:"Signed in to the package registry."}:{type:"error",text:"OAuth sign-in did not complete. Please try again."}),W(),e.delete("registry_oauth");let a=e.toString();window.history.replaceState({},"",window.location.pathname+(a?"?".concat(a):""))},[W]);let z=async()=>{u(!0),p(null);try{let e="signup"===m?await $.signup(f.trim(),v,b.trim()):await $.login(f.trim(),v);"authenticated"===e.status?(p({type:"success",text:"Signed in to the package registry."}),j("")):"confirmation_required"===e.status?(p({type:"info",text:e.message||"Check your inbox to confirm your email."}),j("")):p({type:"error",text:e.message||"Authentication failed."}),e.account?t(e.account):await W()}catch(e){p({type:"error",text:e instanceof Error?e.message:"Authentication failed."})}finally{u(!1)}},N=async()=>{u(!0),p(null);try{await $.logout(),await W(),p({type:"success",text:"Logged out."})}catch(e){p({type:"error",text:e instanceof Error?e.message:"Failed to log out."})}finally{u(!1)}},R=async e=>{u(!0),p(null);try{let{authorizationUrl:t}=await $.beginOAuth(e);window.location.assign(t)}catch(e){p({type:"error",text:e instanceof Error?e.message:"Failed to start OAuth sign-in."}),u(!1)}},O=async()=>{u(!0),p(null);try{let e=await $.resendConfirmation();p(e.success?{type:"success",text:"Confirmation email sent."}:{type:"error",text:e.message||"Failed to resend confirmation."})}finally{u(!1)}},F=async()=>{let e=f.trim();if(!e)return void p({type:"info",text:"Enter your account email above, then tap “Forgot password?”."});u(!0),p(null);try{await $.requestPasswordReset(e),p({type:"info",text:"If an account exists for that email, a password-reset link is on its way. Follow the link to set a new password."})}catch(e){p({type:"error",text:e instanceof Error?e.message:"Failed to request a password reset."})}finally{u(!1)}},L=async()=>{u(!0),p(null);try{let e=await $.saveSettings(C.trim());p(e.success?{type:"success",text:"Registry URL saved."}:{type:"error",text:e.message||"Invalid registry URL."})}finally{u(!1)}};if(a)return(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:3},children:(0,n.jsx)(w.default,{size:28})});let H=!!(null==e?void 0:e.signedIn),M=!!((null==e?void 0:e.email)&&!H&&e&&!e.isConfirmed);return(0,n.jsxs)(r.default,{sx:{width:"100%"},children:[(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Sign in to the FLUJO package registry to publish packages. Browsing and installing packages does not require an account — only publishing does, and your email must be confirmed first. Your registry tokens are encrypted at rest and never shown here."}),h&&(0,n.jsx)(S.A,{severity:h.type,sx:{mb:2},onClose:()=>p(null),children:h.text}),H?(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(d.A,{variant:"subtitle1",children:null==e?void 0:e.email}),(null==e?void 0:e.publisherHandle)&&(0,n.jsx)(i.A,{size:"small",label:"@".concat(e.publisherHandle)}),(null==e?void 0:e.isConfirmed)?(0,n.jsx)(i.A,{size:"small",color:"success",label:"Confirmed"}):(0,n.jsx)(i.A,{size:"small",color:"warning",label:"Unconfirmed"})]}),(0,n.jsx)(r.default,{children:(0,n.jsx)(o.A,{variant:"outlined",onClick:N,disabled:c,children:"Log out"})})]}):M?(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsxs)(S.A,{severity:"info",children:["We sent a confirmation link to ",(0,n.jsx)("strong",{children:null==e?void 0:e.email}),". Confirm your email, then log in to start publishing."]}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,children:[(0,n.jsx)(o.A,{variant:"outlined",onClick:O,disabled:c,children:"Resend confirmation email"}),(0,n.jsx)(o.A,{onClick:N,disabled:c,children:"Use a different account"})]})]}):(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsxs)(q.A,{value:m,onChange:(e,t)=>g(t),children:[(0,n.jsx)(J.A,{value:"login",label:"Log in"}),(0,n.jsx)(J.A,{value:"signup",label:"Sign up"})]}),(0,n.jsx)(x.A,{label:"Email",type:"email",value:f,onChange:e=>y(e.target.value),fullWidth:!0,autoComplete:"username"}),(0,n.jsx)(x.A,{label:"Password",type:"password",value:v,onChange:e=>j(e.target.value),fullWidth:!0,autoComplete:"signup"===m?"new-password":"current-password"}),"signup"===m&&(0,n.jsx)(x.A,{label:"Publisher handle",value:b,onChange:e=>A(e.target.value),fullWidth:!0,autoComplete:"username",helperText:"A unique handle for publishing packages, e.g. your-name"}),(0,n.jsx)(r.default,{children:(0,n.jsx)(o.A,{variant:"contained",onClick:z,disabled:c||!f.trim()||!v||"signup"===m&&!b.trim(),children:"signup"===m?"Sign up":"Log in"})}),"login"===m&&(0,n.jsx)(r.default,{children:(0,n.jsx)(o.A,{variant:"text",size:"small",onClick:F,disabled:c,sx:{textTransform:"none",px:0},children:"Forgot password?"})}),(0,n.jsx)(T.A,{children:"or"}),(0,n.jsx)(k.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:(0,n.jsx)(o.A,{variant:"outlined",onClick:()=>R("github"),disabled:c,children:"Continue with GitHub"})})]}),(0,n.jsx)(T.A,{sx:{my:3}}),(0,n.jsx)(d.A,{variant:"subtitle2",gutterBottom:!0,children:"Registry URL"}),(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["Leave blank to use the default (",P,")."]}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(x.A,{size:"small",placeholder:P,value:C,onChange:e=>I(e.target.value),sx:{minWidth:320}}),(0,n.jsx)(o.A,{variant:"outlined",onClick:L,disabled:c,children:"Save"})]})]})}var Y=a(90057),Q=a(43076),ee=a(17897),et=a(93632);let ea=(0,D.h)("frontend/services/packages");class en{async resolve(e){let t=await fetch("/api/packages/resolve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await t.json();if(!t.ok)throw Error((null==a?void 0:a.error)||"HTTP ".concat(t.status));return a}async deriveSecrets(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=await fetch("/api/packages/derive-secrets",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e,modelIdentifier:t.modelIdentifier,enableEntropy:t.enableEntropy,enableRepoSlug:t.enableRepoSlug})}),n=await a.json();if(!a.ok)throw Error((null==n?void 0:n.error)||"HTTP ".concat(a.status));return n}async scanTargets(e){var t;let a=await fetch("/api/packages/scan-targets",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e})}),n=await a.json();if(!a.ok)throw Error((null==n?void 0:n.error)||"HTTP ".concat(a.status));return null!=(t=null==n?void 0:n.candidates)?t:[]}async searchRegistry(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new URLSearchParams;e.q&&t.set("q",e.q),e.tag&&t.set("tag",e.tag),e.page&&t.set("page",String(e.page)),e.pageSize&&t.set("pageSize",String(e.pageSize));let a=await fetch("/api/packages/search".concat(t.toString()?"?".concat(t.toString()):"")),n=await a.json();if(!a.ok&&!(null==n?void 0:n.items))throw Error((null==n?void 0:n.error)||"HTTP ".concat(a.status));return n}async installFromRegistry(e){let t=await fetch("/api/packages/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({source:"registry",...e})}),a=await t.json();if(!t.ok&&(null==a?void 0:a.ok)===void 0)throw Error((null==a?void 0:a.error)||"HTTP ".concat(t.status));return a}async build(e,t){var a;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],l=await fetch("/api/packages/build",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selection:e,metadata:t,acceptedSecrets:n,globals:s,excludedSecrets:r})}),i=null!=(a=l.headers.get("content-type"))?a:"";if(!i.includes("application/json")){let e=await l.text();throw ea.error("Package build returned a non-JSON response",{status:l.status,contentType:i,preview:e.slice(0,200)}),Error("Package build failed: HTTP ".concat(l.status," returned a non-JSON response"))}let o=await l.json();if(!l.ok&&(null==o?void 0:o.ok)===void 0)throw Error((null==o?void 0:o.error)||"HTTP ".concat(l.status));return o}}let es=null,er=()=>(es||(es=new en),es),el=new Proxy({},{get(e,t){let a=er(),n=a[t];return"function"==typeof n?n.bind(a):n}}),ei=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,eo="encrypted:",ec=/^[A-Za-z0-9_.-]+$/,ed=["path","repo","token","email","url-cred","name","other"];function eu(e){let t=new Set,a=e=>{if("string"==typeof e){for(let a of function(e){let t;if("string"!=typeof e)return[];let a=[],n=RegExp(ei.source,"g");for(;null!==(t=n.exec(e));)a.includes(t[1])||a.push(t[1]);return a}(e))t.add(a);return}if(Array.isArray(e)){for(let t of e)a(t);return}if(e&&"object"==typeof e)for(let t of Object.values(e))a(t)};return a(e),Array.from(t)}var eh=a(2750);let ep=eh.object({name:eh.string().min(1).regex(ec,"invalid secret name"),description:eh.string().optional(),required:eh.boolean(),default:eh.string().optional()}).strict(),em=eh.object({name:eh.string().min(1).regex(ec,"invalid global variable name"),description:eh.string().optional(),required:eh.boolean(),isSecret:eh.boolean().optional()}).strict(),ex=eh.discriminatedUnion("kind",[eh.object({kind:eh.literal("secret"),secret:eh.string().min(1)}).strict(),eh.object({kind:eh.literal("global"),var:eh.string().min(1)}).strict(),eh.object({kind:eh.literal("none")}).strict()]),eg=eh.object({id:eh.string().min(1),name:eh.string().min(1),displayName:eh.string().optional(),description:eh.string().optional(),baseUrl:eh.string().optional(),provider:eh.string().optional(),adapter:eh.string().optional(),promptTemplate:eh.string().optional(),reasoningSchema:eh.string().optional(),temperature:eh.string().optional(),reasoningEffort:eh.enum(["minimal","low","medium","high","xhigh","max","ultra"]).optional(),thinkingLevel:eh.enum(["minimal","low","medium","high"]).optional(),thinkingBudget:eh.number().int().min(-1).optional(),serviceTier:eh.enum(["default","priority"]).optional(),functionCallingSchema:eh.string().optional(),contextWindow:eh.number().optional(),maxTurns:eh.number().optional(),maxTokens:eh.number().optional(),folder:eh.string().optional(),favorite:eh.boolean().optional(),apiKeyRef:ex}).strict(),ef=eh.object({sourceType:eh.enum(["github","registry","marketplace","remote"]),ref:eh.string().optional(),gitRef:eh.string().min(1).optional(),subdirectory:eh.string().min(1).optional(),installCommand:eh.string().min(1).max(4096).optional(),buildCommand:eh.string().min(1).max(4096).optional(),url:eh.string().optional(),name:eh.string().optional()}).strict().superRefine((e,t)=>{"remote"!==e.sourceType||e.url||t.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==e.sourceType&&"registry"!==e.sourceType||e.ref||t.addIssue({code:"custom",message:"installOrigin '".concat(e.sourceType,"' requires a ref")})}),ey=eh.object({name:eh.string().min(1),isSecret:eh.boolean(),secretRef:eh.string().optional(),globalVar:eh.string().optional(),globalTemplate:eh.string().optional()}).strict().superRefine((e,t)=>{void 0===e.globalTemplate||/\$\{global:[A-Za-z0-9_.-]+\}/.test(e.globalTemplate)||t.addIssue({code:"custom",path:["globalTemplate"],message:"globalTemplate must contain at least one ${global:NAME} reference"})}),ev=eh.object({index:eh.number().int().nonnegative(),value:eh.string().min(1)}).strict().superRefine((e,t)=>{/\$\{global:[A-Za-z0-9_.-]+\}/.test(e.value)||t.addIssue({code:"custom",path:["value"],message:"argument template must contain at least one ${global:NAME} reference"})}),ej=eh.object({name:eh.string().min(1),transport:eh.enum(["stdio","sse","streamable","websocket"]),disabled:eh.boolean().optional(),autoApprove:eh.array(eh.string()).optional(),folder:eh.string().optional(),installOrigin:ef,envDeclarations:eh.array(ey),headerDeclarations:eh.array(ey).optional(),argTemplates:eh.array(ev).optional()}).strict(),eb=eh.object({flow:eh.object({id:eh.string().min(1),name:eh.string().min(1),nodes:eh.array(eh.any()),edges:eh.array(eh.any())}).catchall(eh.unknown()),references:eh.object({flowIds:eh.array(eh.string()).optional(),modelIds:eh.array(eh.string()).optional(),mcpServerNames:eh.array(eh.string()).optional()}).optional()}),eA=eh.object({id:eh.string().min(1),name:eh.string().min(1),enabled:eh.boolean(),flowId:eh.string().min(1),prompt:eh.string(),trigger:eh.any()}).catchall(eh.unknown()),ew=eh.object({schemaVersion:eh.literal(1),id:eh.string().min(1),name:eh.string().min(1),description:eh.string().optional(),version:eh.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/,"version must be valid semver"),author:eh.string().optional(),publisher:eh.string().optional(),tags:eh.array(eh.string()).optional(),requiredGlobals:eh.array(eh.string()).optional(),globals:eh.array(em).optional(),secrets:eh.array(ep),models:eh.array(eg),mcpServers:eh.array(ej),flows:eh.array(eb),plannedExecutions:eh.array(eA)}).superRefine((e,t)=>{(function e(t){return"string"==typeof t?t.startsWith(eo):Array.isArray(t)?t.some(e):!!t&&"object"==typeof t&&Object.values(t).some(e)})(e)&&t.addIssue({code:"custom",message:"package contains an '".concat(eo,"' value; secret material must never be serialized")});let a=new Set(e.secrets.map(e=>e.name)),n=new Set(eu(e));for(let t of e.models)"secret"===t.apiKeyRef.kind&&n.add(t.apiKeyRef.secret);for(let t of e.mcpServers){var s;for(let e of[...t.envDeclarations,...null!=(s=t.headerDeclarations)?s:[]])e.secretRef&&n.add(e.secretRef)}for(let e of n)a.has(e)||t.addIssue({code:"custom",message:'secret "'.concat(e,'" is referenced but not declared in secrets[]')});let r=new Set(e.flows.map(e=>e.flow.id));e.plannedExecutions.forEach((e,a)=>{r.has(e.flowId)||t.addIssue({code:"custom",path:["plannedExecutions",a,"flowId"],message:'plannedExecution "'.concat(e.name,'" references unknown flow id "').concat(e.flowId,'"')})}),e.flows.forEach((e,a)=>{var n,s;for(let l of null!=(s=null==(n=e.references)?void 0:n.flowIds)?s:[])r.has(l)||t.addIssue({code:"custom",path:["flows",a,"references","flowIds"],message:'flow "'.concat(e.flow.name,'" references unknown subflow id "').concat(l,'"')})})}),ek=(0,D.h)("frontend/components/Packages/PackageWizard"),eS=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/,eC=["Select contents","Resolve & validate","Secret review","Metadata","Export"];function eT(e){return e.replace(/^SECRET_/,"")}function eI(e){let{open:t,onClose:a}=e,l=(0,p.A)(),c=(0,m.A)(l.breakpoints.down("sm")),[u,h]=(0,s.useState)(0),[q,J]=(0,s.useState)({flows:[],models:[],mcpServers:[],plannedExecutions:[]}),[D,_]=(0,s.useState)(!0),[G,B]=(0,s.useState)(new Set),[V,$]=(0,s.useState)(new Set),[X,ea]=(0,s.useState)(new Set),[en,es]=(0,s.useState)(new Set),[el,ei]=(0,s.useState)(""),[eo,eh]=(0,s.useState)(""),[ep,em]=(0,s.useState)(""),[ex,eg]=(0,s.useState)(""),[ef,ey]=(0,s.useState)(null),[ev,ej]=(0,s.useState)([]),[eb,eA]=(0,s.useState)(!1),[eI,eP]=(0,s.useState)(null),[eE,eW]=(0,s.useState)(null),[ez,eN]=(0,s.useState)({}),[eR,eO]=(0,s.useState)(new Set),[eF,eL]=(0,s.useState)([]),[eH,eM]=(0,s.useState)(!1),[eU,eq]=(0,s.useState)(!1),[eJ,eD]=(0,s.useState)(null),[e_,eG]=(0,s.useState)([]),[eB,eV]=(0,s.useState)(""),[eZ,e$]=(0,s.useState)(""),[eX,eK]=(0,s.useState)(!1),[eY,eQ]=(0,s.useState)(!1),[e0,e1]=(0,s.useState)(""),[e2,e5]=(0,s.useState)(""),[e4,e3]=(0,s.useState)("other"),[e6,e7]=(0,s.useState)(null),[e8,e9]=(0,s.useState)(!1),[te,tt]=(0,s.useState)(!1),[ta,tn]=(0,s.useState)(null),[ts,tr]=(0,s.useState)([]),[tl,ti]=(0,s.useState)(""),[to,tc]=(0,s.useState)(!1),[td,tu]=(0,s.useState)(""),[th,tp]=(0,s.useState)("1.0.0"),[tm,tx]=(0,s.useState)(""),[tg,tf]=(0,s.useState)(""),[ty,tv]=(0,s.useState)(!1),[tj,tb]=(0,s.useState)(null),[tA,tw]=(0,s.useState)(null),[tk,tS]=(0,s.useState)(!1),[tC,tT]=(0,s.useState)(null);(0,s.useEffect)(()=>{if(!t)return;let e=!1;return(async()=>{_(!0);try{var t;let[a,n,s,r]=await Promise.all([Y.g.loadFlows(),Q.N.loadModels(),ee.S.loadServerConfigs(),et.P.list()]);if(e)return;let l=Array.isArray(s)?s:[];J({flows:(null!=a?a:[]).map(e=>({id:e.id,label:e.name||e.id})),models:(null!=n?n:[]).map(e=>({id:e.id,label:e.displayName||e.name||e.id})),mcpServers:l.map(e=>({id:e.name,label:e.name})),plannedExecutions:(null!=(t=null==r?void 0:r.executions)?t:[]).map(e=>({id:e.execution.id,label:e.execution.name||e.execution.id}))})}catch(e){ek.warn("Failed to load packageable entities",e)}finally{e||_(!1)}})(),()=>{e=!0}},[t]);let tI=(0,s.useMemo)(()=>({flowIds:Array.from(G),modelIds:Array.from(V),mcpServerNames:Array.from(X),plannedExecutionIds:Array.from(en)}),[G,V,X,en]),tP=0===G.size&&0===V.size&&0===X.size&&0===en.size,tE=e=>t=>{e(e=>{let a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a})},tW=(0,s.useCallback)(async e=>{let t;ej([]);try{t=await e.text()}catch(e){ej([e instanceof Error?e.message:"Failed to read the file"]);return}let a=function(e){let t;try{t=JSON.parse(e)}catch(e){return{ok:!1,errors:["Not valid JSON: ".concat(e instanceof Error?e.message:String(e))]}}let a=function(e){let t=ew.safeParse(e);if(!t.success)return{success:!1,errors:t.error.issues.map(e=>{let t=e.path.join(".");return t?"".concat(t,": ").concat(e.message):e.message})};let a=t.data;return{success:!0,data:a,warnings:function(e){let t=new Set(eu(e));for(let a of e.models)"secret"===a.apiKeyRef.kind&&t.add(a.apiKeyRef.secret);for(let n of e.mcpServers){var a;for(let e of[...n.envDeclarations,...null!=(a=n.headerDeclarations)?a:[]])e.secretRef&&t.add(e.secretRef)}return e.secrets.filter(e=>!t.has(e.name)).map(e=>'secret "'.concat(e.name,'" is declared but never referenced'))}(a)}}(t);if(!a.success||!a.data){var n;return{ok:!1,errors:null!=(n=a.errors)?n:["Not a valid FLUJO package manifest"]}}return{ok:!0,package:a.data}}(t);if(!a.ok){ey(null),ej(a.errors.slice(0,8));return}let n=function(e,t){var a,n,s,r,l,i,o,c,d,u;let h=new Set(t.flowIds),p=new Set(t.modelIds),m=new Set(t.mcpServerNames),x=new Set(t.plannedExecutionIds),g=[],f={flowIds:[],modelIds:[],mcpServerNames:[],plannedExecutionIds:[]};for(let t of null!=(a=e.flows)?a:[]){let e=null==t||null==(n=t.flow)?void 0:n.id;e&&(h.has(e)?f.flowIds.push(e):g.push({type:"flow",label:(null==(s=t.flow)?void 0:s.name)?"".concat(t.flow.name," (").concat(e,")"):e}))}for(let t of null!=(r=e.models)?r:[])(null==t?void 0:t.id)&&(p.has(t.id)?f.modelIds.push(t.id):g.push({type:"model",label:t.displayName||t.name||t.id}));for(let t of null!=(l=e.mcpServers)?l:[])(null==t?void 0:t.name)&&(m.has(t.name)?f.mcpServerNames.push(t.name):g.push({type:"mcpServer",label:t.name}));for(let t of null!=(i=e.plannedExecutions)?i:[]){let e=null==t?void 0:t.id;e&&(x.has(e)?f.plannedExecutionIds.push(e):g.push({type:"plannedExecution",label:t.name||e}))}return{selection:f,metadata:{name:null!=(o=e.name)?o:"",version:null!=(c=e.version)?c:"",description:null!=(d=e.description)?d:"",tags:e.tags?[...e.tags]:[]},secretNames:(null!=(u=e.secrets)?u:[]).map(e=>e.name).filter(Boolean),missing:g}}(a.package,{flowIds:q.flows.map(e=>e.id),modelIds:q.models.map(e=>e.id),mcpServerNames:q.mcpServers.map(e=>e.id),plannedExecutionIds:q.plannedExecutions.map(e=>e.id)});B(new Set(n.selection.flowIds)),$(new Set(n.selection.modelIds)),ea(new Set(n.selection.mcpServerNames)),es(new Set(n.selection.plannedExecutionIds)),tu(n.metadata.name),tp(n.metadata.version),tx(n.metadata.description),tf(n.metadata.tags.join(", ")),eP(null),eW(null),eN({}),eO(new Set),eL([]),eq(!1),eD(null),eG([]),tb(null),tw(null),tT(null),ey(n),ek.info("Imported package manifest into the wizard",{name:n.metadata.name,version:n.metadata.version,missing:n.missing.length})},[q]),tz=(0,s.useCallback)(async()=>{eA(!0),eW(null),eP(null),eN({}),eO(new Set),eL([]),eq(!1),eD(null),eG([]);try{var e;let t=await er().resolve(tI);eP(t),eN(Object.fromEntries((null!=(e=t.globals)?e:[]).map(e=>{var t;return[e.name,null!=(t=e.description)?t:""]})))}catch(e){eW(e instanceof Error?e.message:"Failed to resolve dependencies")}finally{eA(!1)}},[tI]),tN=(0,s.useMemo)(()=>ef?new Set(ef.secretNames):null,[ef]),tR=(0,s.useCallback)(async e=>{eM(!0),eD(null);try{var t;let a=await er().deriveSecrets(tI,{modelIdentifier:e,enableEntropy:eX,enableRepoSlug:eY});eL(e=>{let t=new Map(e.map(e=>[e.id,e.accepted])),n=new Map(e.map(e=>[e.id,e.suggestedSecretName])),s=e.filter(e=>"manual"===e.source),r=a.proposals.map(e=>{var a;return{...e,accepted:t.has(e.id)?t.get(e.id):tN?tN.has(e.suggestedSecretName):"low"!==e.confidence,suggestedSecretName:null!=(a=n.get(e.id))?a:e.suggestedSecretName}}),l=new Set(r.map(e=>e.id));return[...r,...s.filter(e=>!l.has(e.id))]}),eG(null!=(t=a.warnings)?t:[])}catch(e){eD(e instanceof Error?e.message:"Failed to derive secrets")}finally{eM(!1),eq(!0)}},[tI,eX,eY,tN]),tO=e=>eL(t=>t.map(t=>({...t,accepted:e}))),tF=()=>{e7(null);let e=function(e){var t,a,n,s,r;let l=(null!=(a=e.excerpt)?a:"").trim();if(!l||l.length>2e3)return null;let i=(null!=(n=e.secretName)?n:"").trim();if(i.length>128)return null;let o=null!=(s=e.kind)?s:"other",c=ec.test(i)?i.toUpperCase():function(e,t){let a="".concat(e,"_").concat(t).toUpperCase().replace(/[^A-Z0-9_.-]+/g,"_").replace(/^[_.-]+|[_.-]+$/g,"")||"".concat(e,"_SECRET");return ec.test(a)?a:"".concat(e,"_SECRET")}("SECRET",i||l.slice(0,16)),d=(null!=(r=e.location)?r:"manual").trim()||"manual";return{id:"sp_".concat(function(e){let t=5381;for(let a=0;a<e.length;a++)t=(t<<5)+t^e.charCodeAt(a);return(t>>>0).toString(16).padStart(8,"0")}("".concat(d,"\0").concat(l))),location:d,excerpt:l,kind:o,source:"manual",confidence:"high",suggestedSecretName:c,suggestedDescription:(null==(t=e.description)?void 0:t.trim())||void 0,rationale:"Added manually",accepted:!0}}({excerpt:e0,secretName:e2,kind:e4});if(!e)return void e7("Enter a non-empty value to redact (under 2000 characters).");eL(t=>t.some(t=>t.id===e.id)?t:[e,...t]),e1(""),e5(""),e3("other")},tL=(0,s.useCallback)(async()=>{e9(!0),tn(null),ti(""),tt(!0);try{let e=await er().scanTargets(tI);tr(e)}catch(e){tn(e instanceof Error?e.message:"Failed to load candidate values"),tr([])}finally{tt(!1)}},[tI]),tH=(0,s.useMemo)(()=>{let e=tl.trim().toLowerCase();return e?ts.filter(t=>"".concat(t.text," ").concat(t.location," ").concat(t.source).toLowerCase().includes(e)):ts},[ts,tl]),tM=(0,s.useMemo)(()=>{let e=new Map;for(let t of eF){let a="".concat(t.kind,"::").concat(t.excerpt),n=e.get(a);n?(n.ids.push(t.id),n.locations.push(t.location)):e.set(a,{key:a,ids:[t.id],locations:[t.location],kind:t.kind,source:t.source,confidence:t.confidence,excerpt:t.excerpt,suggestedSecretName:t.suggestedSecretName,rationale:t.rationale,accepted:t.accepted})}return Array.from(e.values())},[eF]),tU=(0,s.useMemo)(()=>{let e=eZ.trim().toLowerCase();return e?tM.filter(t=>"".concat(t.excerpt," ").concat(t.locations.join(" ")," ").concat(t.kind," ").concat(t.suggestedSecretName).toLowerCase().includes(e)):tM},[tM,eZ]),tq=(0,s.useMemo)(()=>{var e;if(!ef||!eU)return[];let t=new Set([...(null!=(e=null==eI?void 0:eI.secrets)?e:[]).map(e=>e.name),...eF.map(e=>e.suggestedSecretName)]);return ef.secretNames.filter(e=>!t.has(e))},[ef,eU,eI,eF]),tJ=(0,s.useMemo)(()=>{var e;let t=new Map;for(let a of tM)t.set(a.kind,(null!=(e=t.get(a.kind))?e:0)+1);return Array.from(t.entries()).sort((e,t)=>t[1]-e[1])},[tM]);(0,s.useEffect)(()=>{2!==u||!eI||eU||eH||tR()},[u,eI,eU,eH,tR]);let tD=(0,s.useCallback)(async()=>{tv(!0),tw(null),tb(null);try{var e;let t=tg.split(",").map(e=>e.trim()).filter(Boolean),a=await er().build(tI,{id:"pkg-".concat(Date.now()),name:td.trim(),version:th.trim(),description:tm.trim()||void 0,tags:t.length?t:void 0},eF.filter(e=>e.accepted),(null!=(e=null==eI?void 0:eI.globals)?e:[]).map(e=>{var t;return{...e,description:(null==(t=ez[e.name])?void 0:t.trim())||e.description}}),Array.from(eR));tb(a),a.ok||tw(a.errors&&a.errors[0]||"Package build failed")}catch(e){tw(e instanceof Error?e.message:"Failed to build package")}finally{tv(!1)}},[tI,td,th,tm,tg,eF,eI,ez,eR]),t_=(0,s.useCallback)(async()=>{if(null==tj?void 0:tj.json){tS(!0),tT(null);try{let e=JSON.parse(tj.json),t=await Z().publish(e);tT(t)}catch(e){tT({ok:!1,code:"error",error:e instanceof Error?e.message:"Failed to publish package"})}finally{tS(!1)}}},[tj]),tG=()=>{if(!(null==tj?void 0:tj.json))return;let e=new Blob([tj.json],{type:"application/json"}),t=URL.createObjectURL(e),a=document.createElement("a");a.href=t;let n=td.trim().replace(/[^A-Za-z0-9_.-]+/g,"-").replace(/^-+|-+$/g,"")||"package";a.download="".concat(n,"-").concat(th.trim(),".flujo-package.json"),document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(t)},tB=async()=>{if(0===u){await tz(),h(1);return}if(3===u){h(4),await tD();return}h(e=>Math.min(e+1,eC.length-1))},tV=eS.test(th.trim()),tZ=td.trim().length>0&&tV,t$=!!(eI&&!eI.mcp.ok),tX=0===u?tP||eb:1===u?eb||!!eE||t$:3===u?!tZ:4===u,tK=(e,t,a,s,l,o)=>{let c=l.trim().toLowerCase(),u=c?t.filter(e=>e.label.toLowerCase().includes(c)):t;return(0,n.jsxs)(r.default,{sx:{flex:1,minWidth:240},children:[(0,n.jsxs)(d.A,{variant:"subtitle2",gutterBottom:!0,children:[e," ",a.size>0&&(0,n.jsx)(i.A,{label:a.size,size:"small"})]}),(0,n.jsx)(x.A,{size:"small",fullWidth:!0,placeholder:"Search ".concat(e.toLowerCase(),"…"),value:l,onChange:e=>o(e.target.value),InputProps:{startAdornment:(0,n.jsx)(g.A,{position:"start",children:(0,n.jsx)(M.A,{fontSize:"small"})})},sx:{mb:1}}),0===t.length?(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"None available"}):0===u.length?(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["No matches for “",l,"”."]}):(0,n.jsx)(f.A,{dense:!0,sx:{maxHeight:{xs:240,md:"45vh"},overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:u.map(e=>(0,n.jsx)(y.Ay,{disablePadding:!0,children:(0,n.jsxs)(v.A,{onClick:()=>s(e.id),dense:!0,children:[(0,n.jsx)(j.A,{sx:{minWidth:36},children:(0,n.jsx)(b.A,{edge:"start",checked:a.has(e.id),tabIndex:-1,disableRipple:!0})}),(0,n.jsx)(A.A,{primary:e.label})]})},e.id))})]})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(z.A,{open:t,onClose:a,maxWidth:"lg",fullWidth:!0,fullScreen:c,PaperProps:{sx:{height:c?"100%":"90vh",maxHeight:c?"100%":"90vh"}},children:[(0,n.jsx)(N.A,{children:"Create package"}),(0,n.jsxs)(R.A,{dividers:!0,sx:{overflow:"auto"},children:[(0,n.jsx)(O.A,{activeStep:u,sx:{mb:3},children:eC.map(e=>(0,n.jsx)(F.A,{children:(0,n.jsx)(L.A,{children:e})},e))}),(()=>{switch(u){case 0:return D?(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,n.jsx)(w.default,{})}):(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"Pick the entities to include. Dependencies (subflows, referenced models and MCP servers, planned-execution flows) are pulled in automatically in the next step."}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsxs)(o.A,{component:"label",variant:"outlined",startIcon:(0,n.jsx)(U.A,{}),children:["Import manifest (.json)",(0,n.jsx)("input",{type:"file",accept:"application/json,.json",hidden:!0,onChange:e=>{var t;let a=null==(t=e.target.files)?void 0:t[0];e.target.value="",a&&tW(a)}})]}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",children:"Restores the selection, metadata and accepted secrets from a package you exported earlier."})]}),ev.length>0&&(0,n.jsxs)(S.A,{severity:"error",onClose:()=>ej([]),children:[(0,n.jsx)(C.A,{children:"Could not import that file"}),ev.map((e,t)=>(0,n.jsx)("div",{children:e},t))]}),ef&&(0,n.jsxs)(S.A,{severity:ef.missing.length>0?"warning":"success",children:[(0,n.jsxs)(C.A,{children:["Imported “",ef.metadata.name,"” v",ef.metadata.version]}),"Restored ",ef.selection.flowIds.length," flow(s),"," ",ef.selection.modelIds.length," model(s),"," ",ef.selection.mcpServerNames.length," MCP server(s),"," ",ef.selection.plannedExecutionIds.length," planned execution(s) and"," ",ef.secretNames.length," secret name(s).",ef.missing.length>0&&(0,n.jsxs)(r.default,{sx:{mt:1},children:["No longer on this host (left unselected):",ef.missing.map((e,t)=>(0,n.jsxs)("div",{children:[e.type,": ",e.label]},t))]})]}),(0,n.jsxs)(k.A,{direction:"row",spacing:2,flexWrap:"wrap",useFlexGap:!0,children:[tK("Flows",q.flows,G,tE(B),el,ei),tK("Models",q.models,V,tE($),eo,eh),tK("MCP servers",q.mcpServers,X,tE(ea),ep,em),tK("Planned executions",q.plannedExecutions,en,tE(es),ex,eg)]})]});case 1:if(eb)return(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,n.jsx)(w.default,{})});if(eE)return(0,n.jsx)(S.A,{severity:"error",children:eE});if(!eI)return null;return(0,n.jsxs)(k.A,{spacing:2,children:[t$&&(0,n.jsxs)(S.A,{severity:"error",children:[(0,n.jsx)(C.A,{children:"Local MCP server(s) cannot be packaged"}),eI.mcp.errors.map((e,t)=>(0,n.jsx)("div",{children:e},t))]}),eI.resolved.autoAdded.length>0&&(0,n.jsxs)(S.A,{severity:"info",children:[(0,n.jsx)(C.A,{children:"Automatically included dependencies"}),eI.resolved.autoAdded.map((e,t)=>(0,n.jsxs)("div",{children:[e.type,": ",(0,n.jsx)("code",{children:e.id})," — ",e.reason]},t))]}),eI.resolved.warnings.length>0&&(0,n.jsxs)(S.A,{severity:"warning",children:[(0,n.jsx)(C.A,{children:"Warnings"}),eI.resolved.warnings.map((e,t)=>(0,n.jsx)("div",{children:e},t))]}),(0,n.jsx)(T.A,{}),(0,n.jsxs)(d.A,{variant:"body2",children:["Resolved: ",eI.resolved.flowIds.length," flow(s),"," ",eI.resolved.modelIds.length," model(s),"," ",eI.resolved.mcpServerNames.length," MCP server(s),"," ",eI.resolved.plannedExecutionIds.length," planned execution(s)."]}),eI.mcp.servers.length>0&&(0,n.jsx)(k.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:eI.mcp.servers.map(e=>(0,n.jsx)(i.A,{label:"".concat(e.name," \xb7 ").concat(e.sourceType),size:"small",color:"success",variant:"outlined"},e.name))})]});case 2:var e;return(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsx)(d.A,{variant:"subtitle2",children:"Global variables"}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"Global variables referenced by the package. Add a useful description for each one; installers will supply values and FLUJO will create them in Global Variables."}),eI&&0!==(null!=(e=eI.globals)?e:[]).length?(0,n.jsx)(k.A,{spacing:1.5,children:eI.globals.map(e=>{var t;return(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"flex-start",children:[(0,n.jsx)(x.A,{size:"small",label:e.name,value:null!=(t=ez[e.name])?t:"",onChange:t=>eN(a=>({...a,[e.name]:t.target.value})),helperText:e.isSecret?"Secret global; its value is never included in the package":"Description shown during package installation",fullWidth:!0}),e.isSecret&&(0,n.jsx)(i.A,{label:"secret global",size:"small",color:"warning",variant:"outlined"})]},e.name)})}):(0,n.jsx)(S.A,{severity:"success",children:"No global variables referenced by this package."}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Declared secrets (entity keys)"}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"Secrets the package will declare from model API keys and MCP env/headers. Values are never included — whoever installs must supply them."}),eI&&0!==eI.secrets.length?(0,n.jsx)(f.A,{dense:!0,children:eI.secrets.map(e=>(0,n.jsxs)(y.Ay,{children:[(0,n.jsx)(b.A,{edge:"start",checked:!eR.has(e.name),onChange:t=>eO(a=>{let n=new Set(a);return t.target.checked?n.delete(e.name):n.add(e.name),n}),inputProps:{"aria-label":"Include ".concat(e.name," in package secrets")}}),(0,n.jsx)(A.A,{primary:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("code",{children:eT(e.name)})," ",e.required&&(0,n.jsx)(i.A,{label:"required",size:"small",color:"warning"})]}),secondary:eR.has(e.name)?"Excluded — the package will not request this value":e.description})]},e.name))}):(0,n.jsx)(S.A,{severity:"success",children:"No entity secrets to declare."}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Detected secrets in content"}),(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["Values that look secret or instance-specific (paths, repos, tokens, URLs, emails) found in flow prompts, node properties, model config and planned- execution prompts. Accepted rows are replaced with a"," ",(0,n.jsx)("code",{children:"{{secret.NAME}}"})," placeholder everywhere they occur."]}),eH&&(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:2},children:(0,n.jsx)(w.default,{size:28})}),eJ&&(0,n.jsx)(S.A,{severity:"error",children:eJ}),!eH&&eU&&0===eF.length&&(0,n.jsx)(S.A,{severity:"success",children:"No likely secrets detected in the packaged content."}),eF.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(k.A,{direction:"row",spacing:.5,flexWrap:"wrap",useFlexGap:!0,children:tJ.map(e=>{let[t,a]=e;return(0,n.jsx)(i.A,{size:"small",variant:"outlined",label:"".concat(t,": ").concat(a)},t)})}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(o.A,{size:"small",onClick:()=>tO(!0),children:"Accept all"}),(0,n.jsx)(o.A,{size:"small",onClick:()=>tO(!1),children:"Reject all"}),(0,n.jsx)(x.A,{size:"small",placeholder:"Filter detected secrets…",value:eZ,onChange:e=>e$(e.target.value),sx:{minWidth:200,flex:1}}),(0,n.jsxs)(d.A,{variant:"caption",color:"text.secondary",sx:{alignSelf:"center"},children:[tM.filter(e=>e.accepted).length," of ",tM.length," accepted"]})]}),(0,n.jsxs)(f.A,{dense:!0,sx:{border:1,borderColor:"divider",borderRadius:1,maxHeight:280,overflow:"auto"},children:[0===tU.length&&(0,n.jsx)(y.Ay,{children:(0,n.jsx)(A.A,{primary:(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["No rows match “",eZ,"”."]})})}),tU.map(e=>(0,n.jsxs)(y.Ay,{alignItems:"flex-start",divider:!0,children:[(0,n.jsx)(j.A,{sx:{minWidth:36,mt:1},children:(0,n.jsx)(b.A,{edge:"start",checked:!!e.accepted,onChange:()=>{let t;return t=e.ids,eL(e=>{var a;let n=new Set(t),s=!(null==(a=e.find(e=>n.has(e.id)))?void 0:a.accepted);return e.map(e=>n.has(e.id)?{...e,accepted:s}:e)})},tabIndex:-1,disableRipple:!0})}),(0,n.jsx)(A.A,{primary:(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(i.A,{label:e.kind,size:"small"}),(0,n.jsx)(i.A,{label:e.source,size:"small",variant:"outlined",color:"model"===e.source?"secondary":"manual"===e.source?"primary":"default"}),e.confidence&&(0,n.jsx)(i.A,{label:e.confidence,size:"small",variant:"outlined",color:"high"===e.confidence?"success":"low"===e.confidence?"warning":"default"}),e.locations.length>1&&(0,n.jsx)(i.A,{label:"".concat(e.locations.length,"\xd7"),size:"small",variant:"outlined"}),(0,n.jsx)(r.default,{component:"code",sx:{wordBreak:"break-all"},children:e.excerpt.length>80?"".concat(e.excerpt.slice(0,80),"…"):e.excerpt})]}),secondary:(0,n.jsxs)(k.A,{spacing:.5,sx:{mt:.5},children:[(0,n.jsxs)(d.A,{variant:"caption",color:"text.secondary",children:[e.locations.length>1?"".concat(e.locations.length," locations: ").concat(e.locations.slice(0,3).join(", ")).concat(e.locations.length>3?", …":""):e.locations[0],e.rationale?" — ".concat(e.rationale):""]}),(0,n.jsx)(x.A,{size:"small",label:"Secret name",value:eT(e.suggestedSecretName),onChange:t=>{var a,n;let s,r;return s=e.ids,a=e.suggestedSecretName,n=t.target.value,r=a.startsWith("SECRET_")?"SECRET_".concat(n.replace(/^SECRET_/,"")):n,eL(e=>{let t=new Set(s);return e.map(e=>t.has(e.id)?{...e,suggestedSecretName:r}:e)})},disabled:!e.accepted,sx:{maxWidth:320}})]}),primaryTypographyProps:{component:"div"},secondaryTypographyProps:{component:"div"}})]},e.key))]})]}),tq.length>0&&(0,n.jsxs)(S.A,{severity:"warning",children:[(0,n.jsx)(C.A,{children:"Secrets from the imported manifest that need re-adding"}),"A manifest never carries secret values, so these declarations could not be matched to anything in the current content — re-add them below if they still apply: ",tq.map(eT).join(", "),"."]}),e_.length>0&&(0,n.jsxs)(S.A,{severity:"warning",children:[(0,n.jsx)(C.A,{children:"Notes"}),e_.map((e,t)=>(0,n.jsx)("div",{children:e},t))]}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Add a secret manually"}),(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["Enter any value that should be redacted from the package. It is treated purely as text to replace with a ",(0,n.jsx)("code",{children:"{{secret.NAME}}"})," placeholder — it is never executed."]}),e6&&(0,n.jsx)(S.A,{severity:"error",children:e6}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"flex-start",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(x.A,{size:"small",label:"Value to redact",value:e0,onChange:e=>e1(e.target.value),sx:{minWidth:240,flex:1}}),(0,n.jsx)(x.A,{size:"small",label:"Secret name",value:e2,onChange:e=>e5(e.target.value),sx:{minWidth:180}}),(0,n.jsx)(I.A,{size:"small",value:e4,onChange:e=>e3(e.target.value),sx:{minWidth:120},children:ed.map(e=>(0,n.jsx)(P.A,{value:e,children:e},e))}),(0,n.jsx)(o.A,{variant:"outlined",onClick:tF,disabled:!e0.trim(),children:"Add"}),(0,n.jsx)(o.A,{variant:"text",startIcon:(0,n.jsx)(M.A,{}),onClick:()=>void tL(),disabled:tP,children:"Pick from app"})]}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Advanced scan options"}),(0,n.jsxs)(k.A,{direction:"row",spacing:2,flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(E.A,{control:(0,n.jsx)(W.A,{checked:eX,onChange:e=>{eK(e.target.checked),eq(!1)}}),label:"Aggressive entropy scan"}),(0,n.jsx)(E.A,{control:(0,n.jsx)(W.A,{checked:eY,onChange:e=>{eQ(e.target.checked),eq(!1)}}),label:"Detect bare owner/repo slugs"}),(0,n.jsx)(o.A,{size:"small",variant:"text",onClick:()=>void tR(),disabled:eH,children:"Re-scan"})]}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Optional: model-driven scan"}),(0,n.jsx)(S.A,{severity:"info",children:"Running the model-driven pass sends the packaged content above to the selected model provider. The offline heuristic scan never leaves your machine."}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsxs)(I.A,{size:"small",displayEmpty:!0,value:eB,onChange:e=>eV(e.target.value),sx:{minWidth:220},children:[(0,n.jsx)(P.A,{value:"",children:(0,n.jsx)("em",{children:"Select a model…"})}),q.models.map(e=>(0,n.jsx)(P.A,{value:e.id,children:e.label},e.id))]}),(0,n.jsx)(o.A,{variant:"outlined",disabled:!eB||eH,onClick:()=>void tR(eB),children:"Scan with model"})]})]});case 3:return(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsx)(x.A,{label:"Package name",value:td,onChange:e=>tu(e.target.value),required:!0,fullWidth:!0,error:td.length>0&&0===td.trim().length}),(0,n.jsx)(x.A,{label:"Version",value:th,onChange:e=>tp(e.target.value),required:!0,fullWidth:!0,error:th.length>0&&!tV,helperText:th.length>0&&!tV?"Must be a semantic version (e.g. 1.0.0)":" "}),(0,n.jsx)(x.A,{label:"Description",value:tm,onChange:e=>tx(e.target.value),fullWidth:!0,multiline:!0,minRows:2}),(0,n.jsx)(x.A,{label:"Tags (comma-separated)",value:tg,onChange:e=>tf(e.target.value),fullWidth:!0})]});case 4:if(ty)return(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,n.jsx)(w.default,{})});if(tA)return(0,n.jsx)(S.A,{severity:"error",children:tA});if(null==tj?void 0:tj.ok)return(0,n.jsxs)(k.A,{spacing:2,children:[(0,n.jsxs)(S.A,{severity:"success",children:[(0,n.jsx)(C.A,{children:"Package built"}),(0,n.jsx)("code",{children:td.trim()})," v",th.trim()," is ready to export."]}),tj.warnings.length>0&&(0,n.jsxs)(S.A,{severity:"warning",children:[(0,n.jsx)(C.A,{children:"Warnings"}),tj.warnings.map((e,t)=>(0,n.jsx)("div",{children:e},t))]}),(0,n.jsx)(o.A,{variant:"contained",onClick:tG,children:"Download package manifest (.json)"}),(0,n.jsx)(T.A,{}),(0,n.jsx)(d.A,{variant:"subtitle2",children:"Publish to the FLUJO package registry"}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"Publishing requires a confirmed registry account (set one up on the Packages page). Only the secret-safe manifest above is uploaded — no secret values ever leave your machine."}),(null==tC?void 0:tC.ok)?(0,n.jsxs)(S.A,{severity:"success",children:[(0,n.jsx)(C.A,{children:"Published"}),tC.name||td.trim()," v",tC.version||th.trim()," is live.",tC.url&&(0,n.jsx)("div",{children:(0,n.jsx)("a",{href:tC.url,target:"_blank",rel:"noreferrer",children:tC.url})})]}):(0,n.jsxs)(n.Fragment,{children:[tC&&!tC.ok&&(0,n.jsx)(S.A,{severity:"unconfirmed"===tC.code||"not_authenticated"===tC.code?"warning":"error",children:tC.error||"Failed to publish package."}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,flexWrap:"wrap",useFlexGap:!0,children:[(0,n.jsx)(o.A,{variant:"outlined",onClick:()=>void t_(),disabled:tk,children:tk?"Publishing…":"Publish to registry"}),tC&&!tC.ok&&("not_authenticated"===tC.code||"unconfirmed"===tC.code)&&(0,n.jsx)(o.A,{variant:"contained",onClick:()=>tc(!0),disabled:tk,children:"Log in to registry"})]})]})]});return null;default:return null}})()]}),(0,n.jsxs)(H.A,{children:[(0,n.jsx)(o.A,{onClick:a,children:(null==tj?void 0:tj.ok)?"Close":"Cancel"}),(0,n.jsx)(r.default,{sx:{flex:1}}),(0,n.jsx)(o.A,{onClick:()=>h(e=>Math.max(e-1,0)),disabled:0===u||ty||eb,children:"Back"}),u<4&&(0,n.jsx)(o.A,{variant:"contained",onClick:tB,disabled:tX,children:3===u?"Build":"Next"})]})]}),(0,n.jsxs)(z.A,{open:to,onClose:()=>tc(!1),maxWidth:"sm",fullWidth:!0,children:[(0,n.jsx)(N.A,{children:"Log in to the package registry"}),(0,n.jsx)(R.A,{dividers:!0,children:(0,n.jsx)(K,{})}),(0,n.jsxs)(H.A,{children:[(0,n.jsx)(o.A,{onClick:()=>tc(!1),children:"Done"}),(0,n.jsx)(o.A,{variant:"contained",onClick:()=>{tc(!1),t_()},disabled:tk,children:"Retry publish"})]})]}),(0,n.jsxs)(z.A,{open:e8,onClose:()=>e9(!1),maxWidth:"md",fullWidth:!0,children:[(0,n.jsx)(N.A,{children:"Pick a value to redact"}),(0,n.jsxs)(R.A,{dividers:!0,children:[(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"These are plaintext values found in the packaged flows, models and planned executions. Pick one to pre-fill the value to redact. API keys and MCP env/header values are never listed — they are already declared as secrets."}),(0,n.jsx)(x.A,{size:"small",fullWidth:!0,placeholder:"Search values…",value:tl,onChange:e=>ti(e.target.value),InputProps:{startAdornment:(0,n.jsx)(g.A,{position:"start",children:(0,n.jsx)(M.A,{fontSize:"small"})})},sx:{mb:2}}),te?(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:4},children:(0,n.jsx)(w.default,{})}):ta?(0,n.jsx)(S.A,{severity:"error",children:ta}):0===ts.length?(0,n.jsx)(S.A,{severity:"info",children:"No pickable plaintext values found in the packaged content."}):0===tH.length?(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["No values match “",tl,"”."]}):(0,n.jsx)(f.A,{dense:!0,sx:{border:1,borderColor:"divider",borderRadius:1,maxHeight:"50vh",overflow:"auto"},children:tH.map((e,t)=>(0,n.jsx)(y.Ay,{disablePadding:!0,divider:!0,children:(0,n.jsx)(v.A,{onClick:()=>{e1(e.text),e7(null),e9(!1)},alignItems:"flex-start",children:(0,n.jsx)(A.A,{primary:(0,n.jsx)(r.default,{component:"code",sx:{wordBreak:"break-all"},children:e.text.length>120?"".concat(e.text.slice(0,120),"…"):e.text}),secondary:(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",flexWrap:"wrap",useFlexGap:!0,sx:{mt:.5},children:[(0,n.jsx)(i.A,{label:e.source,size:"small",variant:"outlined"}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",children:e.location})]}),primaryTypographyProps:{component:"div"},secondaryTypographyProps:{component:"div"}})})},"".concat(e.location,"-").concat(t)))})]}),(0,n.jsx)(H.A,{children:(0,n.jsx)(o.A,{onClick:()=>e9(!1),children:"Close"})})]})]})}var eP=a(50001),eE=a(51314),eW=a(76530);let ez=(0,D.h)("frontend/components/Packages/InstalledPackagesList");function eN(){let[e,t]=(0,s.useState)([]),[a,l]=(0,s.useState)(!0),[u,h]=(0,s.useState)(null),[p,m]=(0,s.useState)(null),[f,y]=(0,s.useState)(!1),[v,j]=(0,s.useState)(null),[b,A]=(0,s.useState)(""),C=(0,s.useCallback)(async()=>{l(!0),h(null);try{var e;let a=await fetch("/api/packages/installed");if(!a.ok)throw Error("Failed to load installed packages (".concat(a.status,")"));let n=await a.json();t(null!=(e=n.packages)?e:[])}catch(e){ez.warn("Failed to load installed packages",e),h(e instanceof Error?e.message:String(e))}finally{l(!1)}},[]);(0,s.useEffect)(()=>{C()},[C]);let T=(0,s.useCallback)(async e=>{y(!0),j(null);try{let a=await fetch("/api/packages/uninstall",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({packageName:e.packageName})}),n=await a.json();if(!a.ok){var t;throw Error(null!=(t=n.error)?t:"Uninstall failed (".concat(a.status,")"))}j(n),await C()}catch(e){ez.warn("Uninstall failed",e),h(e instanceof Error?e.message:String(e))}finally{y(!1),m(null)}},[C]),I=(0,s.useMemo)(()=>{let t=b.trim().toLowerCase();return t?e.filter(e=>"".concat(e.packageName," ").concat(e.version).toLowerCase().includes(t)):e},[e,b]);return(0,n.jsxs)(r.default,{sx:{maxWidth:{xs:"100%",md:1100},mx:"auto",mt:3},children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:1},children:[(0,n.jsx)(d.A,{variant:"h6",children:"Installed packages"}),(0,n.jsx)(o.A,{size:"small",startIcon:(0,n.jsx)(eW.A,{}),onClick:()=>void C(),disabled:a,children:"Refresh"})]}),e.length>0&&(0,n.jsx)(x.A,{size:"small",fullWidth:!0,placeholder:"Search installed packages…",value:b,onChange:e=>A(e.target.value),InputProps:{startAdornment:(0,n.jsx)(g.A,{position:"start",children:(0,n.jsx)(M.A,{fontSize:"small"})})},sx:{mb:2}}),u&&(0,n.jsx)(S.A,{severity:"error",sx:{mb:2},onClose:()=>h(null),children:u}),v&&(0,n.jsxs)(S.A,{severity:v.hasErrors?"warning":"success",sx:{mb:2},onClose:()=>j(null),children:['Uninstalled "',v.packageName,'": ',v.removed.length," removed,"," ",v.skipped.length," preserved/skipped",v.hasErrors?", ".concat(v.errors.length," error(s)"):"","."]}),a?(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",p:3},children:(0,n.jsx)(w.default,{size:24})}):0===e.length?(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"No packages installed yet."}):0===I.length?(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["No packages match “",b,"”."]}):(0,n.jsx)(k.A,{spacing:1,children:I.map(e=>(0,n.jsxs)(c.A,{variant:"outlined",sx:{p:2,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,n.jsxs)(r.default,{children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,n.jsx)(d.A,{variant:"subtitle1",children:e.packageName}),(0,n.jsx)(i.A,{label:"v".concat(e.version),size:"small",variant:"outlined"})]}),(0,n.jsxs)(d.A,{variant:"caption",color:"text.secondary",children:[e.entityCounts.flows," flows \xb7 ",e.entityCounts.models," models \xb7"," ",e.entityCounts.servers," servers \xb7 ",e.entityCounts.plannedExecutions," planned \xb7 installed ",new Date(e.installedAt).toLocaleString()]})]}),(0,n.jsx)(o.A,{color:"error",size:"small",startIcon:(0,n.jsx)(eE.A,{}),onClick:()=>m(e),disabled:f,children:"Uninstall"})]},e.packageName))}),(0,n.jsxs)(z.A,{open:null!==p,onClose:()=>f?void 0:m(null),children:[(0,n.jsxs)(N.A,{children:['Uninstall "',null==p?void 0:p.packageName,'"?']}),(0,n.jsx)(R.A,{children:(0,n.jsxs)(eP.A,{children:["This removes the flows, models, MCP servers and planned executions this package",(0,n.jsx)("strong",{children:" created"}),". Pre-existing entities the package merely updated in place are preserved. This cannot be undone."]})}),(0,n.jsxs)(H.A,{children:[(0,n.jsx)(o.A,{onClick:()=>m(null),disabled:f,children:"Cancel"}),(0,n.jsx)(o.A,{color:"error",variant:"contained",onClick:()=>p&&void T(p),disabled:f,startIcon:f?(0,n.jsx)(w.default,{size:16}):(0,n.jsx)(eE.A,{}),children:"Uninstall"})]})]})]})}var eR=a(33077),eO=a(29767),eF=a(53062),eL=a(84578),eH=a(1702),eM=a(41983),eU=a(23789),eq=a(17438),eJ=a(14418),eD=a(52550),e_=a(12402),eG=a(61563),eB=a(42063),eV=a(68212);let eZ=(0,D.h)("frontend/components/Packages/InstallPackageCard");function e$(e){var t,a,l,c,u;let{onInstalled:h}=e,[p,m]=(0,s.useState)(""),[f,y]=(0,s.useState)([]),[v,j]=(0,s.useState)(!1),[b,A]=(0,s.useState)(null),[C,I]=(0,s.useState)(!1),[P,E]=(0,s.useState)(null),[W,U]=(0,s.useState)(null),[q,J]=(0,s.useState)(!1),[D,_]=(0,s.useState)(null),[G,B]=(0,s.useState)(null),[V,Z]=(0,s.useState)(!1),[X,K]=(0,s.useState)(null),[Y,Q]=(0,s.useState)(null),[ee,et]=(0,s.useState)({}),[ea,en]=(0,s.useState)({}),[es,er]=(0,s.useState)({}),[ei,eo]=(0,s.useState)(null),[ec,ed]=(0,s.useState)(!1),[eu,eh]=(0,s.useState)(0),[ep,em]=(0,s.useState)(null),[ex,eg]=(0,s.useState)({}),ef=(0,s.useCallback)(async e=>{j(!0),A(null);try{var t;let a=await el.searchRegistry({q:e.trim()||void 0,pageSize:24});y(null!=(t=a.items)?t:[]),I(!0)}catch(e){eZ.warn("Failed to search package registry",e),A(e instanceof Error?e.message:String(e)),y([])}finally{j(!1)}},[]);(0,s.useEffect)(()=>{ef(""),$.getStatus().then(e=>E(e.signedIn?e.publisherHandle:null)).catch(e=>eZ.debug("Registry account status unavailable",e))},[ef]);let ey=(0,s.useCallback)(async()=>{if(W){J(!0),_(null);try{let e=await $.deletePackage(W.id);if(!e.ok)return void _(e.error||"Failed to delete package.");y(e=>e.filter(e=>e.id!==W.id)),U(null),await ef(p)}catch(e){eZ.warn("Package deletion failed",e),_(e instanceof Error?e.message:String(e))}finally{J(!1)}}},[W,p,ef]),ev=(0,s.useCallback)(async e=>{B(e),Q(null),em(null),et({}),en({}),er({}),eo(null),ed(!1),eh(0),eg({}),K(null),Z(!0);try{var t,a,n;let s=await el.installFromRegistry({packageId:e.id,version:e.latestVersion,consentGranted:!1});if(!s.ok)return void K((null==(a=s.errors)?void 0:a[0])||"Failed to fetch package preview.");Q(s);let r=null==(t=s.preview)?void 0:t.models[0];eo(null!=(n=null==r?void 0:r.id)?n:null),eh(+!r)}catch(e){eZ.warn("Failed to fetch package preview",e),K(e instanceof Error?e.message:String(e))}finally{Z(!1)}},[]),ej=(0,s.useCallback)(async()=>{if(G&&Y){Z(!0),K(null);try{var e,t;let a=Object.fromEntries((null!=(t=null==(e=Y.preview)?void 0:e.globals)?t:[]).map(e=>{var t,a;return[e.name,{value:null!=(a=null==(t=ea[e.name])?void 0:t.trim())?a:"",metadata:{isSecret:!0===e.isSecret}}]}).filter(e=>{let[,t]=e;return t.value.length>0}));if(Object.keys(a).length>0){let e=await fetch("/api/env",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"setAll",variables:a})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error((null==t?void 0:t.error)||"Failed to save package globals (HTTP ".concat(e.status,")"))}}let n=await el.installFromRegistry({packageId:G.id,version:G.latestVersion,secrets:ee,modelMappings:Object.fromEntries(Object.entries(es).filter(e=>{let[,t]=e;return""!==t})),consentGranted:!0});em(n),Q(null),n.ok&&(null==h||h())}catch(e){eZ.warn("Install failed",e),K(e instanceof Error?e.message:String(e))}finally{Z(!1)}}},[G,Y,ee,ea,es,h]),eb=(0,s.useCallback)(()=>{B(null),Q(null),em(null),et({}),en({}),er({}),eo(null),ed(!1),eh(0),eg({}),K(null)},[]),eA=null==Y?void 0:Y.preview,ew=null!=(a=null==eA?void 0:eA.models.find(e=>e.id===ei))?a:null==eA?void 0:eA.models[0],ek=null!=(l=null==eA?void 0:eA.models.filter(e=>Object.prototype.hasOwnProperty.call(es,e.id)).length)?l:0,eS=null==(c=null==eA?void 0:eA.models.every(e=>Object.prototype.hasOwnProperty.call(es,e.id)))||c,eC=(0,s.useCallback)(e=>{eo(e),ed(!!es[e])},[es]),eT=(0,s.useCallback)(e=>{er(t=>({...t,[e]:""})),ed(!1)},[]),eI=(0,s.useCallback)((e,t)=>{er(a=>({...a,[e]:t}))},[]);return(0,n.jsxs)(r.default,{sx:{maxWidth:{xs:"100%",md:1100},mx:"auto",mt:3},children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:1},children:[(0,n.jsx)(e_.A,{color:"action"}),(0,n.jsx)(d.A,{variant:"h6",children:"Browse registry"})]}),(0,n.jsx)(x.A,{size:"small",fullWidth:!0,placeholder:"Search published packages…",value:p,onChange:e=>m(e.target.value),onKeyDown:e=>{"Enter"===e.key&&ef(p)},InputProps:{startAdornment:(0,n.jsx)(g.A,{position:"start",children:(0,n.jsx)(M.A,{fontSize:"small"})}),endAdornment:v?(0,n.jsx)(g.A,{position:"end",children:(0,n.jsx)(w.default,{size:16})}):void 0},sx:{mb:2}}),b&&(0,n.jsx)(S.A,{severity:"error",sx:{mb:2},onClose:()=>A(null),children:b}),C&&!v&&0===f.length&&!b&&(0,n.jsxs)(d.A,{variant:"body2",color:"text.secondary",children:["No packages match “",p,"”."]}),(0,n.jsx)(eR.Ay,{container:!0,spacing:2,children:f.map(e=>(0,n.jsx)(eR.Ay,{item:!0,xs:12,sm:6,md:4,children:(0,n.jsxs)(eO.A,{variant:"outlined",sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,n.jsx)(eF.A,{onClick:()=>void ev(e),sx:{flex:1},children:(0,n.jsxs)(eL.A,{children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"baseline",justifyContent:"space-between",children:[(0,n.jsx)(d.A,{variant:"subtitle1",noWrap:!0,children:e.name}),(0,n.jsx)(i.A,{size:"small",variant:"outlined",label:"v".concat(e.latestVersion)})]}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",display:"block",children:e.handle}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",sx:{mt:.5,minHeight:"2.5em"},children:e.description||"No description provided."}),(0,n.jsx)(k.A,{direction:"row",spacing:.5,sx:{mt:1,flexWrap:"wrap",gap:.5},children:e.tags.map(e=>(0,n.jsx)(i.A,{size:"small",label:e},e))}),(0,n.jsxs)(k.A,{direction:"row",spacing:.5,alignItems:"center",sx:{mt:1},children:[(0,n.jsx)(eG.A,{fontSize:"inherit",color:"disabled"}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",children:e.downloads})]})]})}),function(e,t){var a;let n=null==t?void 0:t.trim().replace(/^@/,"").toLocaleLowerCase();if(!n)return!1;let s=null==(a=e.handle)?void 0:a.trim().replace(/^@/,"");if(s)return s.split("/")[0].toLocaleLowerCase()===n;let r=e.id.trim().replace(/^@/,"");return r.includes("/")&&r.split("/")[0].toLocaleLowerCase()===n}(e,P)&&(0,n.jsx)(eH.A,{sx:{justifyContent:"flex-end",pt:0},children:(0,n.jsx)(eM.A,{size:"small",color:"error","aria-label":"Delete ".concat(e.name),onClick:()=>{_(null),U(e)},children:(0,n.jsx)(eE.A,{fontSize:"small"})})})]})},e.id))}),(0,n.jsxs)(z.A,{open:null!==W,onClose:q?void 0:()=>U(null),maxWidth:"xs",fullWidth:!0,children:[(0,n.jsx)(N.A,{children:"Delete package?"}),(0,n.jsxs)(R.A,{children:[D&&(0,n.jsx)(S.A,{severity:"error",sx:{mb:2},children:D}),(0,n.jsxs)(d.A,{variant:"body2",children:["This permanently deletes ",(0,n.jsx)("strong",{children:null==W?void 0:W.name})," and all of its published versions from the registry. This action cannot be undone."]})]}),(0,n.jsxs)(H.A,{children:[(0,n.jsx)(o.A,{onClick:()=>U(null),disabled:q,children:"Cancel"}),(0,n.jsx)(o.A,{color:"error",variant:"contained",onClick:()=>void ey(),disabled:q,startIcon:q?(0,n.jsx)(w.default,{size:16,color:"inherit"}):(0,n.jsx)(eE.A,{}),children:"Delete package"})]})]}),(0,n.jsxs)(z.A,{open:null!==G,onClose:V?void 0:eb,maxWidth:!1,fullWidth:!0,PaperProps:{sx:{width:"min(1400px, calc(100vw - 32px))",maxWidth:"none",minHeight:{xs:"calc(100vh - 32px)",md:760},maxHeight:"calc(100vh - 32px)",borderRadius:{xs:2,md:3}}},children:[(0,n.jsxs)(N.A,{sx:{px:{xs:2,md:4},pt:{xs:2,md:3},pb:1},children:[(0,n.jsxs)(d.A,{component:"span",variant:"h5",fontWeight:700,children:["Install ",null==G?void 0:G.name]}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",sx:{mt:.5},children:"Match the package to your FLUJO, then review and install it."})]}),(0,n.jsxs)(R.A,{sx:{px:{xs:2,md:4},pb:3},children:[X&&(0,n.jsx)(S.A,{severity:"error",sx:{mb:2},onClose:()=>K(null),children:X}),V&&!Y&&!ep&&(0,n.jsx)(r.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:420},children:(0,n.jsx)(w.default,{size:24})}),eA&&(null==Y?void 0:Y.package)&&(0,n.jsxs)(r.default,{children:[(0,n.jsxs)(k.A,{direction:{xs:"column",sm:"row"},spacing:1,alignItems:{sm:"center"},justifyContent:"space-between",sx:{mb:2.5},children:[(0,n.jsxs)(k.A,{direction:"row",spacing:1,alignItems:"center",children:[(0,n.jsx)(i.A,{size:"small",variant:"outlined",label:"v".concat(Y.package.version)}),Y.package.publisher&&(0,n.jsx)(i.A,{size:"small",variant:"outlined",label:Y.package.publisher}),(0,n.jsxs)(d.A,{variant:"caption",color:"text.secondary",children:[eA.servers.length," server(s) \xb7 ",eA.models.length," model(s) \xb7"," ",eA.flows.length," flow(s) \xb7 ",eA.plannedExecutions.length," planned execution(s)"]})]}),(0,n.jsxs)(d.A,{variant:"caption",color:"text.secondary",children:["Step ",eu+1," of 2"]})]}),(0,n.jsxs)(O.A,{activeStep:eu,sx:{maxWidth:720,mx:"auto",mb:3},children:[(0,n.jsx)(F.A,{children:(0,n.jsx)(L.A,{children:"Match models"})}),(0,n.jsx)(F.A,{children:(0,n.jsx)(L.A,{children:"Review & install"})})]}),0===eu&&eA.models.length>0&&ew&&(0,n.jsxs)(r.default,{children:[(0,n.jsxs)(r.default,{sx:{textAlign:"center",maxWidth:820,mx:"auto",mb:3},children:[(0,n.jsx)(d.A,{variant:"h4",fontWeight:750,sx:{mb:1},children:"The package was created with models that are not installed in your FLUJO."}),(0,n.jsx)(d.A,{variant:"h6",color:"text.secondary",fontWeight:400,children:"Let's replace or recreate them!"})]}),(0,n.jsxs)(r.default,{sx:{display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"minmax(260px, 0.85fr) 88px minmax(420px, 1.35fr)"},gap:{xs:2,md:2.5},alignItems:"stretch"},children:[(0,n.jsxs)(r.default,{children:[(0,n.jsxs)(k.A,{direction:"row",alignItems:"center",justifyContent:"space-between",sx:{mb:1.25},children:[(0,n.jsx)(d.A,{variant:"overline",color:"text.secondary",fontWeight:700,children:"Models in this package"}),(0,n.jsx)(i.A,{size:"small",color:eS?"success":"default",label:"".concat(ek,"/").concat(eA.models.length," ready")})]}),(0,n.jsx)(k.A,{spacing:1.25,children:eA.models.map(e=>{let t=e.id===ew.id,a=Object.prototype.hasOwnProperty.call(es,e.id),s=eA.installedModels.find(t=>t.id===es[e.id]);return(0,n.jsx)(eO.A,{variant:"outlined",sx:{borderWidth:t?2:1,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"background.paper",transition:"border-color 120ms ease, background-color 120ms ease"},children:(0,n.jsx)(eF.A,{onClick:()=>eC(e.id),"aria-label":"Configure ".concat(e.displayName),sx:{minHeight:104,p:2},children:(0,n.jsxs)(k.A,{direction:"row",spacing:1.5,alignItems:"center",children:[(0,n.jsx)(r.default,{sx:{width:44,height:44,borderRadius:2,display:"grid",placeItems:"center",bgcolor:t?"primary.main":"action.hover",color:t?"primary.contrastText":"text.secondary",flex:"0 0 auto"},children:(0,n.jsx)(eD.A,{})}),(0,n.jsxs)(r.default,{sx:{minWidth:0,flex:1},children:[(0,n.jsx)(d.A,{variant:"subtitle1",fontWeight:700,noWrap:!0,children:e.displayName}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",display:"block",children:"Package model"}),a&&(0,n.jsxs)(k.A,{direction:"row",spacing:.5,alignItems:"center",sx:{mt:.5},children:[(0,n.jsx)(eJ.A,{color:"success",sx:{fontSize:16}}),(0,n.jsx)(d.A,{variant:"caption",color:"success.main",noWrap:!0,children:s?"Using ".concat(s.displayName):"Will be created"})]})]})]})})},e.id)})})]}),(0,n.jsx)(r.default,{"aria-hidden":!0,sx:{display:"grid",placeItems:"center",minHeight:{xs:64,md:360}},children:(0,n.jsx)(r.default,{sx:{width:64,height:64,borderRadius:"50%",display:"grid",placeItems:"center",bgcolor:"primary.main",color:"primary.contrastText",boxShadow:3,transform:{xs:"rotate(90deg)",md:"none"}},children:(0,n.jsx)(eq.A,{sx:{fontSize:38}})})}),(0,n.jsxs)(eO.A,{variant:"outlined",sx:{p:{xs:2,md:3},minHeight:{md:420},bgcolor:"background.default"},children:[(0,n.jsxs)(d.A,{variant:"overline",color:"text.secondary",fontWeight:700,children:["Replace ",ew.displayName]}),(0,n.jsx)(d.A,{variant:"h5",fontWeight:700,sx:{mt:.25,mb:2.5},children:"What would you like to do?"}),(0,n.jsxs)(eR.Ay,{container:!0,spacing:2,children:[(0,n.jsx)(eR.Ay,{item:!0,xs:12,sm:6,children:(0,n.jsx)(o.A,{fullWidth:!0,"aria-label":"Create new one",variant:Object.prototype.hasOwnProperty.call(es,ew.id)&&""===es[ew.id]?"contained":"outlined",onClick:()=>eT(ew.id),sx:{minHeight:154,p:2.5,textTransform:"none",alignItems:"stretch",justifyContent:"flex-start",textAlign:"left"},children:(0,n.jsxs)(k.A,{spacing:1,alignItems:"flex-start",children:[(0,n.jsx)(eU.A,{sx:{fontSize:36}}),(0,n.jsx)(d.A,{variant:"h6",fontWeight:700,children:"Create new one"}),(0,n.jsx)(d.A,{variant:"body2",color:Object.prototype.hasOwnProperty.call(es,ew.id)&&""===es[ew.id]?"inherit":"text.secondary",children:"Recreate this model in your FLUJO with the package's configuration."})]})})}),(0,n.jsx)(eR.Ay,{item:!0,xs:12,sm:6,children:(0,n.jsx)(o.A,{fullWidth:!0,"aria-label":"Use one of yours",variant:es[ew.id]?"contained":"outlined",onClick:()=>ed(!0),sx:{minHeight:154,p:2.5,textTransform:"none",alignItems:"stretch",justifyContent:"flex-start",textAlign:"left"},children:(0,n.jsxs)(k.A,{spacing:1,alignItems:"flex-start",children:[(0,n.jsx)(eD.A,{sx:{fontSize:36}}),(0,n.jsx)(d.A,{variant:"h6",fontWeight:700,children:"Use one of yours"}),(0,n.jsx)(d.A,{variant:"body2",color:es[ew.id]?"inherit":"text.secondary",children:"Connect the package to a model you already have installed."})]})})})]}),ec&&(0,n.jsxs)(r.default,{sx:{mt:2.5},children:[(0,n.jsx)(T.A,{sx:{mb:2}}),(0,n.jsx)(d.A,{variant:"subtitle1",fontWeight:700,sx:{mb:1},children:"Choose one of your installed models"}),eA.installedModels.length>0?(0,n.jsx)(eR.Ay,{container:!0,spacing:1.25,children:eA.installedModels.map(e=>{let t=es[ew.id]===e.id;return(0,n.jsx)(eR.Ay,{item:!0,xs:12,sm:6,children:(0,n.jsx)(eO.A,{variant:"outlined",sx:{height:"100%",borderWidth:t?2:1,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"background.paper"},children:(0,n.jsx)(eF.A,{onClick:()=>eI(ew.id,e.id),"aria-label":"Use ".concat(e.displayName),sx:{minHeight:76,p:1.5},children:(0,n.jsxs)(k.A,{direction:"row",spacing:1.25,alignItems:"center",children:[(0,n.jsx)(eD.A,{color:t?"primary":"action"}),(0,n.jsxs)(r.default,{sx:{minWidth:0},children:[(0,n.jsx)(d.A,{variant:"subtitle2",fontWeight:700,noWrap:!0,children:e.displayName}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",noWrap:!0,display:"block",children:e.name})]}),t&&(0,n.jsx)(eJ.A,{color:"primary",sx:{ml:"auto !important",flex:"0 0 auto"}})]})})})},e.id)})}):(0,n.jsx)(S.A,{severity:"info",children:"You do not have any installed models yet. Create this package model as new instead."})]})]})]}),(0,n.jsx)(T.A,{sx:{my:3}}),(0,n.jsxs)(k.A,{direction:"row",spacing:1.5,justifyContent:"space-between",alignItems:"center",children:[(0,n.jsx)(o.A,{onClick:eb,children:"Cancel"}),(0,n.jsxs)(k.A,{direction:"row",spacing:1.5,alignItems:"center",children:[!eS&&(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"Choose an option for every model to continue."}),(0,n.jsx)(o.A,{variant:"contained",size:"large",disabled:!eS,endIcon:(0,n.jsx)(eq.A,{}),onClick:()=>eh(1),children:"Continue to review"})]})]})]}),1===eu&&(0,n.jsxs)(r.default,{sx:{maxWidth:980,mx:"auto"},children:[(0,n.jsxs)(k.A,{direction:{xs:"column",sm:"row"},spacing:1,alignItems:{sm:"center"},justifyContent:"space-between",sx:{mb:2},children:[(0,n.jsxs)(r.default,{children:[(0,n.jsx)(d.A,{variant:"h4",fontWeight:750,children:"Review and install"}),(0,n.jsx)(d.A,{variant:"body1",color:"text.secondary",children:"Check your model choices and add the package configuration."})]}),eA.models.length>0&&(0,n.jsx)(o.A,{onClick:()=>{var e,t;eh(0),eo(null!=(t=null==(e=eA.models.find(e=>!Object.prototype.hasOwnProperty.call(es,e.id)))?void 0:e.id)?t:eA.models[0].id),ed(!1)},children:"Change model choices"})]}),eA.models.length>0&&(0,n.jsxs)(r.default,{sx:{mb:2.5},children:[(0,n.jsx)(d.A,{variant:"subtitle2",sx:{mb:1},children:"Model plan"}),(0,n.jsx)(eR.Ay,{container:!0,spacing:1.5,children:eA.models.map(e=>{var t;let a=eA.installedModels.find(t=>t.id===es[e.id]);return(0,n.jsx)(eR.Ay,{item:!0,xs:12,sm:6,children:(0,n.jsx)(eO.A,{variant:"outlined",sx:{p:1.75,height:"100%"},children:(0,n.jsxs)(k.A,{direction:"row",spacing:1.25,alignItems:"center",children:[(0,n.jsxs)(r.default,{sx:{minWidth:0,flex:1},children:[(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",children:"Package model"}),(0,n.jsx)(d.A,{variant:"subtitle2",noWrap:!0,children:e.displayName})]}),(0,n.jsx)(eq.A,{color:"action"}),(0,n.jsxs)(r.default,{sx:{minWidth:0,flex:1},children:[(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",children:a?"Your model":"New model"}),(0,n.jsx)(d.A,{variant:"subtitle2",noWrap:!0,children:null!=(t=null==a?void 0:a.displayName)?t:e.displayName})]})]})})},e.id)})})]}),eA.servers.some(e=>e.requiredEnvMissing.length>0)&&(0,n.jsx)(S.A,{severity:"warning",sx:{mb:1.5},children:"Some MCP servers require environment values that aren't covered by a secret below — those servers will install disabled."}),eA.servers.some(e=>e.installCommand||e.buildCommand)&&(0,n.jsxs)(r.default,{sx:{mb:2.5},children:[(0,n.jsx)(S.A,{severity:"warning",sx:{mb:1.5},children:"This package will run these repository-provided commands on your machine. Review them before installing."}),(0,n.jsx)(k.A,{spacing:1.5,children:eA.servers.filter(e=>e.installCommand||e.buildCommand).map(e=>(0,n.jsxs)(eO.A,{variant:"outlined",sx:{p:1.75},children:[(0,n.jsx)(d.A,{variant:"subtitle2",children:e.localName}),(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",sx:{overflowWrap:"anywhere"},children:e.source}),e.installCommand&&(0,n.jsxs)(r.default,{sx:{mt:1.25},children:[(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",display:"block",children:"Install command"}),(0,n.jsx)(r.default,{component:"code",sx:{display:"block",mt:.5,p:1,bgcolor:"action.hover",overflowWrap:"anywhere"},children:e.installCommand})]}),e.buildCommand&&(0,n.jsxs)(r.default,{sx:{mt:1.25},children:[(0,n.jsx)(d.A,{variant:"caption",color:"text.secondary",display:"block",children:"Build command"}),(0,n.jsx)(r.default,{component:"code",sx:{display:"block",mt:.5,p:1,bgcolor:"action.hover",overflowWrap:"anywhere"},children:e.buildCommand})]})]},"".concat(e.localName,":").concat(e.source)))})]}),eA.globals.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.A,{variant:"subtitle2",sx:{mb:1},children:"Global variables requested by this package"}),(0,n.jsx)(k.A,{spacing:1.5,sx:{mb:2.5},children:eA.globals.map(e=>{var t,a;return(0,n.jsx)(x.A,{size:"small",type:e.isSecret&&!ex["global:".concat(e.name)]?"password":"text",label:e.name,helperText:"".concat(null!=(t=e.description)?t:e.required?"Required":"Optional").concat(eA.missingGlobals.includes(e.name)?" — not currently set":" — leave blank to keep the current value"),value:null!=(a=ea[e.name])?a:"",onChange:t=>en(a=>({...a,[e.name]:t.target.value})),fullWidth:!0,InputProps:e.isSecret?{endAdornment:(0,n.jsx)(g.A,{position:"end",children:(0,n.jsx)(eM.A,{size:"small",tabIndex:-1,"aria-label":ex["global:".concat(e.name)]?"Hide global":"Show global",onClick:()=>eg(t=>({...t,["global:".concat(e.name)]:!t["global:".concat(e.name)]})),children:ex["global:".concat(e.name)]?(0,n.jsx)(eV.A,{fontSize:"small"}):(0,n.jsx)(eB.A,{fontSize:"small"})})})}:void 0},e.name)})})]}),(0,n.jsx)(T.A,{sx:{my:2.5}}),eA.secrets.length>0?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(d.A,{variant:"subtitle2",sx:{mb:1},children:"Secrets requested by this package"}),(0,n.jsx)(k.A,{spacing:1.5,sx:{mb:2.5},children:eA.secrets.map(e=>{var t;return(0,n.jsx)(x.A,{size:"small",type:ex[e.key]?"text":"password",label:e.label||e.key,helperText:e.required?"Required — leave blank to install the dependent entity disabled":"Optional",value:null!=(t=ee[e.key])?t:"",onChange:t=>et(a=>({...a,[e.key]:t.target.value})),fullWidth:!0,InputProps:{endAdornment:(0,n.jsx)(g.A,{position:"end",children:(0,n.jsx)(eM.A,{size:"small",tabIndex:-1,"aria-label":ex[e.key]?"Hide secret":"Show secret",onClick:()=>eg(t=>({...t,[e.key]:!t[e.key]})),children:ex[e.key]?(0,n.jsx)(eV.A,{fontSize:"small"}):(0,n.jsx)(eB.A,{fontSize:"small"})})})}},e.key)})})]}):(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",sx:{mb:2.5},children:"This package doesn't request any secrets."}),(0,n.jsxs)(k.A,{direction:"row",spacing:1,justifyContent:"space-between",children:[(0,n.jsx)(o.A,{onClick:eA.models.length>0?()=>eh(0):eb,disabled:V,children:eA.models.length>0?"Back":"Cancel"}),(0,n.jsx)(o.A,{variant:"contained",color:"primary",size:"large",onClick:()=>void ej(),disabled:V,startIcon:V?(0,n.jsx)(w.default,{size:16}):(0,n.jsx)(e_.A,{}),children:"Install package"})]})]})]}),ep&&(0,n.jsxs)(r.default,{children:[(0,n.jsx)(S.A,{severity:ep.ok?"success":"error",sx:{mb:1},children:ep.ok?'Installed "'.concat(null==(t=ep.package)?void 0:t.name,'": ').concat(ep.created.length," created, ").concat(ep.updated.length," updated, ").concat(ep.disabled.length," disabled."):"Install failed: ".concat(null!=(u=ep.errors[0])?u:"unknown error")}),ep.missingGlobals.length>0&&(0,n.jsxs)(S.A,{severity:"warning",sx:{mb:1},children:["Set these global variable(s) in Settings for the installed entities to work:"," ",ep.missingGlobals.join(", "),"."]}),(0,n.jsx)(o.A,{size:"small",onClick:eb,children:"Close"})]})]})]})]})}var eX=a(79508);let eK=(0,D.h)("frontend/components/Packages");function eY(){let[e,t]=(0,s.useState)(!1),[a,l]=(0,s.useState)(0);return eK.debug("Rendering PackagesManager",{wizardOpen:e}),(0,n.jsxs)(r.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,n.jsx)(eX.default,{eyebrow:"Share",title:"Packages",description:"Bundle complete FLUJO systems into portable, secret-safe manifests.",icon:h.A,badge:(0,n.jsx)(i.A,{label:"Experimental",size:"small",color:"warning",variant:"outlined"}),actions:(0,n.jsx)(o.A,{variant:"contained",startIcon:(0,n.jsx)(u.A,{}),onClick:()=>t(!0),"data-tour":"packages-create",children:"Create package"})}),(0,n.jsxs)(r.default,{sx:{flex:1,overflow:"auto",p:3},children:[(0,n.jsxs)(c.A,{variant:"outlined",sx:{p:4,display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gap:2,maxWidth:{xs:"100%",md:1100},mx:"auto"},children:[(0,n.jsx)(h.A,{sx:{fontSize:48,color:"text.secondary"}}),(0,n.jsx)(d.A,{variant:"h6",children:"Bundle your FLUJO setup into a shareable package"}),(0,n.jsx)(d.A,{variant:"body2",color:"text.secondary",children:"A package bundles flows, models, MCP servers (by reference) and planned executions into a single manifest you can export and share. Secret values (API keys, tokens) are never included — only declarations of the secrets a recipient must supply at install time."}),(0,n.jsx)(o.A,{variant:"contained",startIcon:(0,n.jsx)(u.A,{}),onClick:()=>t(!0),children:"Create package"})]}),(0,n.jsxs)(c.A,{variant:"outlined",sx:{p:3,mt:3,maxWidth:{xs:"100%",md:1100},mx:"auto"},children:[(0,n.jsx)(d.A,{variant:"h6",gutterBottom:!0,children:"Package registry account"}),(0,n.jsx)(K,{})]}),(0,n.jsx)(e$,{onInstalled:()=>l(e=>e+1)}),(0,n.jsx)(eN,{},a)]}),e&&(0,n.jsx)(eI,{open:e,onClose:()=>t(!1)})]})}var eQ=a(9164),e0=a(94929);let e1=(0,D.h)("app/packages/page");function e2(){var e,t;let a=(0,l.useRouter)(),{settings:i,settingsHydrated:o}=(0,eQ.useStorage)(),c=o&&null!=(t=null==i||null==(e=i.experimental)?void 0:e.enabled)&&t;return((0,s.useEffect)(()=>{o&&!c&&(e1.debug("Experimental features disabled — redirecting away from /packages"),a.replace("/settings"))},[o,c,a]),o&&c)?(0,n.jsx)(r.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,n.jsx)(eY,{})}):(0,n.jsx)(e0.default,{})}},79508:(e,t,a)=>{"use strict";a.d(t,{default:()=>c});var n=a(95155),s=a(33567),r=a(94049),l=a(80777),i=a(25635),o=a(8532);function c(e){let{title:t,description:a,eyebrow:c,icon:d,leading:u,badge:h,actions:p,compact:m=!1,maxWidth:x=1440}=e,g=(0,s.A)();return(0,n.jsx)(r.default,{component:"header",sx:{position:"relative",overflow:"hidden",borderBottom:1,borderColor:"divider",background:"linear-gradient(110deg, ".concat((0,o.X4)(g.palette.primary.main,"dark"===g.palette.mode?.09:.055),", transparent 38%, ").concat((0,o.X4)(g.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,o.X4)(g.palette.primary.main,.16),", transparent 68%)"),filter:"blur(20px)"}},children:(0,n.jsxs)(r.default,{sx:{position:"relative",zIndex:1,display:"flex",width:"100%",maxWidth:x,mx:"auto",px:{xs:2,sm:3,lg:4},py:m?{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,n.jsxs)(l.A,{direction:"row",spacing:1.5,alignItems:"center",sx:{minWidth:0},children:[u,d&&(0,n.jsx)(r.default,{"aria-hidden":"true",sx:{display:"grid",width:m?40:46,height:m?40:46,flexShrink:0,placeItems:"center",border:"1px solid ".concat((0,o.X4)(g.palette.primary.main,.24)),borderRadius:m?2.8:3.2,color:"primary.light",bgcolor:(0,o.X4)(g.palette.primary.main,.1),boxShadow:"inset 0 1px 0 ".concat((0,o.X4)(g.palette.common.white,.08),", 0 10px 30px ").concat((0,o.X4)(g.palette.primary.main,.12))},children:(0,n.jsx)(d,{sx:{fontSize:m?21:24}})}),(0,n.jsxs)(r.default,{sx:{minWidth:0},children:[(c||h)&&(0,n.jsxs)(l.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.35},children:[c&&(0,n.jsx)(i.A,{sx:{color:"primary.light",fontSize:"0.67rem",fontWeight:780,letterSpacing:"0.13em",textTransform:"uppercase"},children:c}),h]}),(0,n.jsx)(i.A,{component:"h1",variant:"h5",sx:{overflow:"hidden",textOverflow:"ellipsis",fontSize:m?"1.2rem":void 0,whiteSpace:{xs:"normal",sm:"nowrap"}},children:t}),a&&(0,n.jsx)(i.A,{variant:"body2",color:"text.secondary",sx:{mt:.45,maxWidth:720,textWrap:"balance"},children:a})]})]}),p&&(0,n.jsx)(r.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:p})]})})}},93632:(e,t,a)=>{"use strict";a.d(t,{P:()=>r});let n=(0,a(73288).h)("frontend/services/plannedExecutions");class s{async list(){try{let e=await fetch("/api/planned-executions");if(!e.ok)throw Error("HTTP ".concat(e.status));return await e.json()}catch(e){return n.warn("Failed to list planned executions",e),{paused:!1,executions:[]}}}async create(e){try{let t=await fetch("/api/planned-executions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await t.json();if(!t.ok)return{success:!1,error:(null==a?void 0:a.error)||"HTTP ".concat(t.status)};return{success:!0,execution:a.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async update(e,t){try{let a=await fetch("/api/planned-executions/".concat(e),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await a.json();if(!a.ok)return{success:!1,error:(null==n?void 0:n.error)||"HTTP ".concat(a.status)};return{success:!0,execution:n.execution}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async delete(e){try{let t=await fetch("/api/planned-executions/".concat(e),{method:"DELETE"});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async setPaused(e){try{let t=await fetch("/api/planned-executions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({paused:e})});if(!t.ok){let e=await t.json().catch(()=>null);return{success:!1,error:(null==e?void 0:e.error)||"HTTP ".concat(t.status)}}return{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async runNow(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/run"),{method:"POST"}),a=await t.json();if(!t.ok)return{success:!1,error:(null==a?void 0:a.error)||"HTTP ".concat(t.status)};return{success:!0,record:a.record}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Request failed"}}}async loadRuns(e){try{let t=await fetch("/api/planned-executions/".concat(e,"/runs"));if(!t.ok)throw Error("HTTP ".concat(t.status));let a=await t.json();return Array.isArray(null==a?void 0:a.runs)?a.runs:[]}catch(t){return n.warn("Failed to load runs for ".concat(e),t),[]}}async previewSchedule(e,t){try{let a=await fetch("/api/planned-executions/preview-schedule",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cron:e,timezone:t})});if(!a.ok)throw Error("HTTP ".concat(a.status));return await a.json()}catch(e){return{valid:!1,error:e instanceof Error?e.message:"Preview failed",nextRuns:[]}}}}let r=new s},94460:(e,t,a)=>{Promise.resolve().then(a.bind(a,70479))}},e=>{e.O(0,[4754,7758,3392,2678,981,1983,1871,5954,9562,3272,155,4123,9611,6547,4122,8620,4156,1161,57,8441,1255,7358],()=>e(e.s=94460)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{3195:(e,t,a)=>{Promise.resolve().then(a.bind(a,4969))},4969:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>X});var i=a(95155),n=a(33567),s=a(97322),r=a(94049),l=a(80777),o=a(22003),c=a(91871),d=a(4474),p=a(25635),h=a(2300),u=a(28548),x=a(8532),m=a(96429),f=a(60700),y=a(96968),g=a(44971),b=a(33009),j=a(14418),v=a(17438),A=a(91287),w=a(38343),k=a(52619),S=a.n(k),C=a(12115),O=a(14913),I=a(57883),T=a(9562),U=a(98142),N=a(37553),F=a(33411);function J(){let[e,t]=(0,C.useState)(null),[a,n]=(0,C.useState)(""),[s,l]=(0,C.useState)(!1),[d,u]=(0,C.useState)(!1),[x,m]=(0,C.useState)(null),[f,y]=(0,C.useState)(!1),g=Array.from(a).length,b=Array.from(a.trim()).length,j=null!==e&&b>=1&&b<=255,v=async()=>{if(e&&j){l(!0),m(null),y(!1);try{let t=await fetch("/api/registry/feedback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({notice:a.trim(),rating:"happy"===e?5:1})}),i=await t.json().catch(()=>({}));if(!t.ok){m("string"==typeof i.error?i.error:"Could not submit feedback."),y(t.status>=500);return}u(!0)}catch(e){m("The feedback service is temporarily unavailable."),y(!0)}finally{l(!1)}}};return d?(0,i.jsx)(o.A,{severity:"success",sx:{mb:4},children:"Thanks for helping improve FLUJO."}):(0,i.jsxs)(h.A,{component:"section","aria-labelledby":"feedback-banner-title",variant:"outlined",sx:{mb:4,p:{xs:2,sm:2.5}},children:[(0,i.jsxs)(r.default,{sx:{display:"flex",flexDirection:{xs:"column",md:"row"},alignItems:{xs:"stretch",md:"center"},gap:2},children:[(0,i.jsxs)(r.default,{sx:{flex:"0 0 auto"},children:[(0,i.jsx)(p.A,{id:"feedback-banner-title",variant:"subtitle1",fontWeight:600,children:"Are you happy with FLUJO?"}),(0,i.jsx)(p.A,{variant:"body2",color:"text.secondary",children:"Tell us what is working—or what could be better."})]}),(0,i.jsxs)(O.A,{exclusive:!0,value:e,onChange:(e,a)=>{a&&t(a)},"aria-label":"Are you happy with FLUJO?",size:"small",children:[(0,i.jsxs)(I.A,{value:"happy","aria-label":"Yes, I am happy",children:[(0,i.jsx)(N.A,{sx:{mr:.75}}),"Yes"]}),(0,i.jsxs)(I.A,{value:"unhappy","aria-label":"No, I am not happy",children:[(0,i.jsx)(U.A,{sx:{mr:.75}}),"Not really"]})]}),(0,i.jsx)(T.A,{value:a,onChange:e=>n(e.target.value),placeholder:"Share your feedback",size:"small",multiline:!0,maxRows:3,inputProps:{maxLength:255,"aria-label":"Feedback"},helperText:"".concat(g,"/255"),sx:{flex:"1 1 280px"}}),(0,i.jsx)(c.A,{variant:"contained",onClick:v,disabled:!j||s,sx:{alignSelf:{xs:"stretch",md:"flex-start"},minWidth:96},children:s?"Sending…":"Send"})]}),x&&(0,i.jsxs)(o.A,{severity:"error",sx:{mt:2},onClose:()=>{m(null),y(!1)},action:f?(0,i.jsx)(c.A,{color:"inherit",size:"small",onClick:()=>{e&&(0,F.tr)({title:"FLUJO feedback",body:"Sentiment: ".concat("happy"===e?"Happy":"Not really","\n\n").concat(a.trim())})},children:"Open on GitHub"}):void 0,children:[x,f&&" You can send it through a pre-filled GitHub issue instead."]})]})}var W=a(9164),z=a(69195),L=a(90057),E=a(43076);let R=(0,a(73288).h)("app/page");function X(){var e;let t=(0,n.A)(),{settings:a}=(0,W.useStorage)(),{startTour:k}=(0,z.useTour)(),[O,I]=(0,C.useState)(!0),[T,U]=(0,C.useState)(!1),[N,F]=(0,C.useState)(null),[X,_]=(0,C.useState)(!1),[P,H]=(0,C.useState)(null),[Y,B]=(0,C.useState)({models:null,assistants:0,loading:!0}),G=(0,C.useRef)(!1);(0,C.useEffect)(()=>{let e=!0;return Promise.allSettled([E.N.tryLoadModels(),L.g.loadFlows()]).then(t=>{let[a,i]=t;e&&B({models:"fulfilled"===a.status&&null!==a.value?a.value.length:null,assistants:"fulfilled"===i.status?i.value.length:0,loading:!1})}),()=>{e=!1}},[]),(0,C.useEffect)(()=>{var e;(null==a||null==(e=a.update)?void 0:e.checkOnStartup)&&!G.current&&(G.current=!0,fetch("/api/update").then(async e=>e.ok?e.json():null).then(e=>{(null==e?void 0:e.updateAvailable)&&F({behindBy:e.behindBy,branch:e.branch})}).catch(e=>R.warn("Update check failed",e)))},[null==a||null==(e=a.update)?void 0:e.checkOnStartup]),(0,C.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_initialized"})});if(!e.ok)return void I(!1);let t=await e.json(),a=!0===t.initialized;if(I(a),!a)return;let i=await fetch("/api/encryption/secure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check_user_encryption"})});if(i.ok){let e=await i.json();U(!0===e.userEncryption)}}catch(e){R.error("Error checking encryption status",e),I(!1)}})()},[]);let D=async()=>{_(!0),H(null);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){H(t.error||"Update failed."),_(!1);return}if(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 _(!1),F(null)}catch(e){R.error("Update failed",e),H("Update failed."),_(!1)}},M=null!==Y.models&&Y.models>0,q=!Y.loading&&null===Y.models,K=Y.assistants>0,Q=[{id:"ai",number:1,title:"Connect your AI",description:"Choose the AI provider and model FLUJO will use. Everything else starts here.",icon:m.default,complete:M,available:!0,status:Y.loading?"Checking…":M?"Connected":q?"Open to check":"Required",href:M||q?"/models":"/models?add=1",action:M?"Manage AI setup":q?"Open AI setup":"Connect AI"},{id:"assistant",number:2,title:"Create an agent",description:"Name it and add its job one plain-language step at a time in the simple builder.",icon:f.A,complete:K,available:M,status:K?"".concat(Y.assistants," ready"):M?"Next":"After AI setup",href:M?"/flows?create=assistant":void 0,action:K?"Create another":M?"Open simple builder":"Connect AI first"},{id:"talk",number:3,title:"Talk to your agent",description:"Use it in a familiar chat. Return to its recipe whenever you want to improve it.",icon:y.A,complete:!1,available:M&&K,status:M?K?"Ready":"After your first agent":"After AI setup",href:M&&K?"/chat":void 0,action:M?K?"Start talking":"Create an agent first":"Finish AI setup first"}];return(0,i.jsx)(s.A,{maxWidth:!1,disableGutters:!0,children:(0,i.jsxs)(r.default,{sx:{width:"min(100%, 1320px)",mx:"auto",px:{xs:2,sm:3,lg:5},pb:{xs:7,md:10}},children:[(0,i.jsxs)(l.A,{spacing:1.2,sx:{pt:{xs:2,md:3}},children:[N&&(0,i.jsx)(o.A,{severity:"info",action:(0,i.jsx)(c.A,{color:"inherit",size:"small",onClick:D,disabled:X,startIcon:X?(0,i.jsx)(d.default,{size:16,color:"inherit"}):void 0,children:X?"Updating…":"Update now"}),children:X?"Updating FLUJO and restarting — this page will reconnect automatically.":"A FLUJO update is ready (".concat(N.behindBy," new commit").concat(1===N.behindBy?"":"s"," on ").concat(N.branch,").")}),P&&(0,i.jsx)(o.A,{severity:"error",onClose:()=>H(null),children:P}),O?T?null:(0,i.jsxs)(o.A,{severity:"info",icon:(0,i.jsx)(b.A,{}),children:["Your information stays on this device. For extra protection, choose a private password in"," ",(0,i.jsx)(S(),{href:"/settings",style:{fontWeight:700},children:"Settings"}),"."]}):(0,i.jsxs)(o.A,{severity:"warning",icon:(0,i.jsx)(g.A,{}),children:["Add a private password to protect your connected accounts in"," ",(0,i.jsx)(S(),{href:"/settings",style:{fontWeight:700},children:"Settings"}),"."]})]}),(0,i.jsx)(r.default,{component:"section",sx:{pt:{xs:5,md:7},pb:{xs:4,md:5}},children:(0,i.jsxs)(l.A,{direction:{xs:"column",md:"row"},justifyContent:"space-between",alignItems:{xs:"flex-start",md:"flex-end"},spacing:2.5,children:[(0,i.jsxs)(r.default,{sx:{maxWidth:760},children:[(0,i.jsx)(p.A,{className:"premium-eyebrow",children:"Your FLUJO setup"}),(0,i.jsx)(p.A,{variant:"h2",sx:{mt:1,maxWidth:720},children:"Set up once. Then just use it."}),(0,i.jsx)(p.A,{variant:"h6",color:"text.secondary",sx:{mt:1.5,maxWidth:700,fontWeight:450,lineHeight:1.55},children:"Follow these three steps in order. FLUJO keeps the technical details available without putting them in your way."})]}),(0,i.jsx)(c.A,{variant:"outlined",onClick:k,startIcon:(0,i.jsx)(f.A,{}),children:"Open setup guide"})]})}),(0,i.jsx)(r.default,{component:"section","aria-label":"Getting started",sx:{display:"grid",gridTemplateColumns:{xs:"1fr",lg:"repeat(3, minmax(0, 1fr))"},gap:2},children:Q.map(e=>{let a=e.icon,n=e.available&&!e.complete;return(0,i.jsxs)(h.A,{component:"article",className:"stagger-in",elevation:0,"aria-current":n?"step":void 0,sx:{position:"relative",display:"flex",minHeight:{xs:250,lg:310},p:{xs:2.5,sm:3},overflow:"hidden",flexDirection:"column",border:1,borderColor:e.complete?(0,x.X4)(t.palette.success.main,.45):n?(0,x.X4)(t.palette.primary.main,.48):"divider",borderRadius:4,bgcolor:(0,x.X4)(t.palette.background.paper,e.available?.78:.5),opacity:e.available?1:.7,boxShadow:n?"0 22px 70px ".concat((0,x.X4)(t.palette.primary.main,.13)):"none",transition:"transform 220ms ease, border-color 220ms ease, box-shadow 220ms ease","&:hover":e.available?{transform:"translateY(-4px)",boxShadow:"0 26px 74px ".concat((0,x.X4)(t.palette.primary.main,.16))}:void 0,"&::before":{position:"absolute",top:-80,right:-70,width:190,height:190,borderRadius:"50%",content:'""',background:"radial-gradient(circle, ".concat((0,x.X4)(e.complete?t.palette.success.main:t.palette.primary.main,e.available?.18:.07),", transparent 68%)")}},children:[(0,i.jsxs)(l.A,{direction:"row",justifyContent:"space-between",alignItems:"center",spacing:1,children:[(0,i.jsx)(r.default,{sx:{display:"grid",width:46,height:46,placeItems:"center",borderRadius:3,color:e.complete?"success.main":e.available?"primary.main":"text.disabled",bgcolor:(0,x.X4)(e.complete?t.palette.success.main:t.palette.primary.main,.1)},children:e.complete?(0,i.jsx)(j.A,{}):(0,i.jsx)(a,{})}),(0,i.jsx)(u.A,{size:"small",color:e.complete?"success":n?"primary":"default",variant:"outlined",label:e.status})]}),(0,i.jsxs)(p.A,{variant:"overline",color:"text.secondary",sx:{mt:3},children:["Step ",e.number]}),(0,i.jsx)(p.A,{variant:"h5",sx:{mt:.3},children:e.title}),(0,i.jsx)(p.A,{variant:"body2",color:"text.secondary",sx:{mt:1,lineHeight:1.65},children:e.description}),(0,i.jsx)(r.default,{sx:{mt:"auto",pt:3},children:e.href?(0,i.jsx)(c.A,{component:S(),href:e.href,variant:n?"contained":"outlined",endIcon:(0,i.jsx)(v.A,{}),fullWidth:!0,children:e.action}):(0,i.jsx)(c.A,{variant:"outlined",disabled:!0,fullWidth:!0,children:e.action})})]},e.id)})}),(0,i.jsxs)(h.A,{component:"section",elevation:0,sx:{mt:2,p:{xs:2.2,sm:2.5},display:"flex",flexDirection:{xs:"column",sm:"row"},alignItems:{xs:"flex-start",sm:"center"},gap:2,border:1,borderColor:"divider",borderRadius:4,bgcolor:(0,x.X4)(t.palette.background.paper,.62)},children:[(0,i.jsx)(r.default,{sx:{display:"grid",width:44,height:44,flexShrink:0,placeItems:"center",borderRadius:3,color:"secondary.main",bgcolor:(0,x.X4)(t.palette.secondary.main,.1)},children:(0,i.jsx)(A.A,{})}),(0,i.jsxs)(r.default,{sx:{flex:1},children:[(0,i.jsx)(p.A,{variant:"subtitle1",fontWeight:760,children:"Connected Apps are optional"}),(0,i.jsx)(p.A,{variant:"body2",color:"text.secondary",children:"Add files or services only when an agent needs them. A basic agent works with AI setup alone."})]}),(0,i.jsx)(c.A,{component:S(),href:"/mcp",variant:"text",endIcon:(0,i.jsx)(v.A,{}),children:"Connected Apps"})]}),(0,i.jsxs)(l.A,{direction:{xs:"column",sm:"row"},spacing:{xs:1,sm:3},sx:{mt:3.5,color:"text.secondary"},children:[(0,i.jsxs)(l.A,{direction:"row",spacing:.8,alignItems:"center",children:[(0,i.jsx)(b.A,{sx:{fontSize:17,color:"primary.main"}}),(0,i.jsx)(p.A,{variant:"caption",children:"Private on your device"})]}),(0,i.jsxs)(l.A,{direction:"row",spacing:.8,alignItems:"center",children:[(0,i.jsx)(w.A,{sx:{fontSize:17,color:"primary.main"}}),(0,i.jsx)(p.A,{variant:"caption",children:"Simple mode by default"})]}),(0,i.jsxs)(l.A,{direction:"row",spacing:.8,alignItems:"center",children:[(0,i.jsx)(g.A,{sx:{fontSize:17,color:"primary.main"}}),(0,i.jsx)(p.A,{variant:"caption",children:"Expert controls when you need them"})]})]}),(0,i.jsx)(r.default,{sx:{mt:{xs:5,md:7}},children:(0,i.jsx)(J,{})})]})})}}},e=>{e.O(0,[4754,7758,3392,2678,981,1983,1871,5954,9562,1675,5962,7203,684,9195,57,760,8441,1255,7358],()=>e(e.s=3195)),_N_E=e.O()}]);
|