flujo-ai 3.38.0 → 3.40.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 +617 -433
- package/.next/app-path-routes-manifest.json +42 -26
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +90 -18
- package/.next/react-loadable-manifest.json +40 -47
- package/.next/routes-manifest.json +34 -0
- package/.next/server/app/_not-found/page.js +3 -4
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- 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 +5 -5
- package/.next/server/app/api/approvals/[id]/route.js +1 -1
- package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route.js +2 -2
- package/.next/server/app/api/approvals/route.js.nft.json +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route.js +1 -1
- package/.next/server/app/api/backup/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/bugs/enhance/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route.js +2 -2
- 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.js +1 -0
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/flow/[id]/route.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +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.js +1 -0
- package/.next/server/app/api/flow/assist/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/assist/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/flow/compile/route.js +1 -1
- package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route.js +1 -1
- package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route.js +2 -2
- package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route.js +1 -1
- package/.next/server/app/api/flow/improve/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route.js +1 -1
- package/.next/server/app/api/flow/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route.js +6 -6
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/init/route.js.nft.json +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route.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.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.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.js +2 -2
- package/.next/server/app/api/mcp/cancel/route.js.nft.json +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.js +1 -0
- package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/authoring/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/automation/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/automation/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/flows/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/flows/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/resources/read/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/resources/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/resources/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/servers/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/servers/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/state/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/state/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/flujo/tools/route.js +1 -0
- package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -0
- package/.next/server/app/api/mcp/flujo/tools/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/mcp-registry/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route.js +2 -2
- package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route.js +1 -1
- package/.next/server/app/api/model/route.js.nft.json +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route.js +2 -2
- package/.next/server/app/api/model/test/route.js.nft.json +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.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.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.js +2 -2
- package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route.js +1 -1
- package/.next/server/app/api/packages/build/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/install/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/install/status/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route.js +1 -1
- package/.next/server/app/api/packages/resolve/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/uninstall/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +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.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/planned-executions/route.js.nft.json +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.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.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.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.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.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.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.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.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route.js +1 -1
- package/.next/server/app/api/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route.js +2 -2
- package/.next/server/app/api/runs/active/route.js.nft.json +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.js +3 -0
- package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -0
- package/.next/server/app/api/setup/ai-cli/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/statistics/route.js +2 -0
- package/.next/server/app/api/statistics/route.js.nft.json +1 -0
- package/.next/server/app/api/statistics/route_client-reference-manifest.js +1 -0
- 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.js +1 -1
- package/.next/server/app/api/waves/route.js.nft.json +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/automation/triggers/page.js +2 -0
- package/.next/server/app/automation/triggers/page.js.nft.json +1 -0
- package/.next/server/app/automation/triggers/page_client-reference-manifest.js +1 -0
- package/.next/server/app/automation/triggers.html +1 -0
- package/.next/server/app/automation/triggers.meta +7 -0
- package/.next/server/app/automation/triggers.rsc +23 -0
- package/.next/server/app/automation/waves/page.js +2 -0
- package/.next/server/app/automation/waves/page.js.nft.json +1 -0
- package/.next/server/app/automation/waves/page_client-reference-manifest.js +1 -0
- package/.next/server/app/automation/waves.html +1 -0
- package/.next/server/app/automation/waves.meta +7 -0
- package/.next/server/app/automation/waves.rsc +22 -0
- package/.next/server/app/chat/page.js +6 -58
- package/.next/server/app/chat/page.js.nft.json +1 -1
- 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 +7 -6
- package/.next/server/app/docs/page.js +3 -4
- package/.next/server/app/docs/page.js.nft.json +1 -1
- 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 +6 -6
- package/.next/server/app/executions/page.js +2 -3
- 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 +7 -6
- package/.next/server/app/flows/page.js +3 -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 +7 -7
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -6
- package/.next/server/app/mcp/page.js +6 -57
- 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 +2 -1
- package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +2 -1
- package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +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 +7 -6
- package/.next/server/app/models/page.js +64 -2
- package/.next/server/app/models/page.js.nft.json +1 -1
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +2 -2
- package/.next/server/app/packages/page.js.nft.json +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 +6 -6
- package/.next/server/app/page.js +3 -4
- package/.next/server/app/page.js.nft.json +1 -1
- 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.js.nft.json +1 -1
- 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 +6 -6
- package/.next/server/app/statistics/page.js +54 -0
- package/.next/server/app/statistics/page.js.nft.json +1 -0
- package/.next/server/app/statistics/page_client-reference-manifest.js +1 -0
- package/.next/server/app/statistics.html +1 -0
- package/.next/server/app/statistics.meta +7 -0
- package/.next/server/app/statistics.rsc +22 -0
- package/.next/server/app/v1/chat/completions/route.js +1 -1
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +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.js +3 -3
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +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.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +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.js +2 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route_client-reference-manifest.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +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.js +2 -2
- package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route.js +6 -6
- package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route.js +2 -2
- package/.next/server/app/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page.js +2 -4
- package/.next/server/app/waves/page.js.nft.json +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 +6 -6
- package/.next/server/app-paths-manifest.json +42 -26
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/1314.js +1 -1
- package/.next/server/chunks/1403.js +3 -0
- package/.next/server/chunks/{180.js → 1532.js} +1 -1
- package/.next/server/chunks/1539.js +1 -0
- package/.next/server/chunks/1662.js +2 -0
- package/.next/server/chunks/1805.js +1 -1
- package/.next/server/chunks/1925.js +1 -1
- package/.next/server/chunks/2069.js +1 -0
- package/.next/server/chunks/227.js +1 -1
- package/.next/server/chunks/2372.js +2 -2
- package/.next/server/chunks/2446.js +1 -0
- package/.next/server/chunks/2828.js +2 -0
- package/.next/server/chunks/2949.js +1 -0
- package/.next/server/chunks/{6034.js → 300.js} +15 -15
- package/.next/server/chunks/3032.js +29 -0
- package/.next/server/chunks/3206.js +2 -0
- package/.next/server/chunks/3262.js +90 -0
- package/.next/server/chunks/3418.js +1 -0
- package/.next/server/chunks/3945.js +10 -0
- package/.next/server/chunks/{6967.js → 3954.js} +3 -3
- package/.next/server/chunks/3963.js +6 -0
- package/.next/server/chunks/3991.js +2 -0
- package/.next/server/chunks/4265.js +1 -1
- package/.next/server/chunks/4306.js +1 -1
- package/.next/server/chunks/4671.js +1 -1
- package/.next/server/chunks/4681.js +1 -1
- package/.next/server/chunks/4771.js +2 -2
- package/.next/server/chunks/5096.js +1 -1
- package/.next/server/chunks/5141.js +2 -0
- package/.next/server/chunks/519.js +2 -2
- package/.next/server/chunks/5444.js +2 -0
- package/.next/server/chunks/5446.js +1 -0
- package/.next/server/chunks/{7058.js → 5494.js} +2 -2
- package/.next/server/chunks/558.js +1 -1
- package/.next/server/chunks/5591.js +1 -0
- package/.next/server/chunks/{3312.js → 5642.js} +1 -1
- package/.next/server/chunks/566.js +2 -0
- package/.next/server/chunks/5750.js +1 -0
- package/.next/server/chunks/{7519.js → 5807.js} +1 -1
- package/.next/server/chunks/5858.js +1 -0
- package/.next/server/chunks/5918.js +436 -0
- package/.next/server/chunks/5936.js +1 -0
- package/.next/server/chunks/6033.js +1 -0
- package/.next/server/chunks/6226.js +4 -4
- package/.next/server/chunks/6607.js +1 -0
- package/.next/server/chunks/6687.js +1 -0
- package/.next/server/chunks/701.js +2 -2
- package/.next/server/chunks/7031.js +1 -0
- package/.next/server/chunks/7147.js +1 -0
- package/.next/server/chunks/7480.js +2 -0
- package/.next/server/chunks/{8284.js → 7498.js} +2 -2
- package/.next/server/chunks/7506.js +2 -2
- package/.next/server/chunks/7508.js +5 -0
- package/.next/server/chunks/7628.js +1 -1
- package/.next/server/chunks/7630.js +1 -1
- package/.next/server/chunks/773.js +9 -0
- package/.next/server/chunks/7821.js +1 -1
- package/.next/server/chunks/7883.js +1 -0
- package/.next/server/chunks/7969.js +1 -1
- package/.next/server/chunks/8001.js +1 -1
- package/.next/server/chunks/8092.js +1 -1
- package/.next/server/chunks/8291.js +1 -0
- package/.next/server/chunks/8598.js +1 -0
- package/.next/server/chunks/8645.js +1 -1
- package/.next/server/chunks/{3489.js → 8730.js} +1 -1
- package/.next/server/chunks/8897.js +1 -0
- package/.next/server/chunks/8903.js +4 -0
- package/.next/server/chunks/8940.js +1 -0
- package/.next/server/chunks/9088.js +6 -0
- package/.next/server/chunks/9543.js +8 -0
- package/.next/server/chunks/9624.js +136 -0
- package/.next/server/functions-config-manifest.json +4 -3
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- 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/b1aMk0634gkkiunttd1SQ/_buildManifest.js +1 -0
- package/.next/static/chunks/1161-19176c3e7c655121.js +1 -0
- package/.next/static/chunks/1521-1c98c9a56726e053.js +1 -0
- package/.next/static/chunks/155-12f2a537db5dacec.js +1 -0
- package/.next/static/chunks/1576.bc6ae6c9e6d939d8.js +1 -0
- package/.next/static/chunks/1871-dd8c10ed9d37100b.js +1 -0
- package/.next/static/chunks/1983-242862b3dc022a26.js +1 -0
- package/.next/static/chunks/2005.300528b5119c2d38.js +1 -0
- package/.next/static/chunks/2141-dba0d13715fe1a28.js +1 -0
- package/.next/static/chunks/2498-4f7f5de1cac6feba.js +1 -0
- package/.next/static/chunks/2499-92cd97ce4993999f.js +1 -0
- package/.next/static/chunks/3272-42d1acae08d1ef0a.js +1 -0
- package/.next/static/chunks/3303-febfba58226aebed.js +1 -0
- package/.next/static/chunks/{361.bb75b03b740930cd.js → 361.51d642c530c84295.js} +1 -1
- package/.next/static/chunks/3731-64070760ae44448f.js +1 -0
- package/.next/static/chunks/3776.72638b35ce9bb874.js +1 -0
- package/.next/static/chunks/3816-807978463638bb71.js +1 -0
- package/.next/static/chunks/4122-d82fad8d1fca26d6.js +1 -0
- package/.next/static/chunks/4123-906362aeb986d6db.js +1 -0
- package/.next/static/chunks/4156-3823d1c89c4a7e3d.js +1 -0
- package/.next/static/chunks/{4555-c9070f8c79bccfad.js → 4483-00dc5c1b601ec898.js} +3 -3
- package/.next/static/chunks/4755-83df83d0dbd97483.js +1 -0
- package/.next/static/chunks/4814-31eb5f3b10c651c1.js +1 -0
- package/.next/static/chunks/4965.39e24b54c3c6ca58.js +1 -0
- package/.next/static/chunks/57-64bab7d5db89c9cc.js +1 -0
- package/.next/static/chunks/5954-dd2b25224f389fc0.js +1 -0
- package/.next/static/chunks/5962-8c59d06b3ee1c42a.js +1 -0
- package/.next/static/chunks/5967-59fde8c214c9ca9f.js +1 -0
- package/.next/static/chunks/6417.70056fe81ca21682.js +1 -0
- package/.next/static/chunks/6420-25dd04f98f3b34b8.js +1 -0
- package/.next/static/chunks/6547-2adc20e1ace927fc.js +1 -0
- package/.next/static/chunks/684-289a73150568def2.js +1 -0
- package/.next/static/chunks/7203-2704865539fa551d.js +1 -0
- package/.next/static/chunks/760-2ad13a61701630da.js +1 -0
- package/.next/static/chunks/7711-4b017720ec49c96d.js +1 -0
- package/.next/static/chunks/7758-42ab0b9cce1dc0e3.js +1 -0
- package/.next/static/chunks/8124-94140ee1dd8ed87c.js +1 -0
- package/.next/static/chunks/8135-5b975b9014f8920b.js +1 -0
- package/.next/static/chunks/{8198.cd0d3f8429c02862.js → 8198.a9cc35771b354b03.js} +1 -1
- package/.next/static/chunks/8326-4915403bc93459d2.js +1 -0
- package/.next/static/chunks/8529.b5a43e728bb5bb8a.js +1 -0
- package/.next/static/chunks/{6428-951188daa6f74b86.js → 8620-c9fa9d75cdc18a5e.js} +3 -3
- package/.next/static/chunks/8853-b80e50cbec6fd13c.js +1 -0
- package/.next/static/chunks/8862-0e37dd5488b21c77.js +1 -0
- package/.next/static/chunks/889-e64385ddb2259b1b.js +1 -0
- package/.next/static/chunks/9001-4c27a608feddb878.js +1 -0
- package/.next/static/chunks/9050-fcb7a0c89314acb4.js +1 -0
- package/.next/static/chunks/9053-283dd8d615f904a5.js +8 -0
- package/.next/static/chunks/9136-9c415453ec02519c.js +1 -0
- package/.next/static/chunks/9140.6502327a2c098d33.js +1 -0
- package/.next/static/chunks/9195-3c9c4300e7505d9e.js +1 -0
- package/.next/static/chunks/9524-b9d2c7e4426edd07.js +1 -0
- package/.next/static/chunks/9562-5494feecd8c6f7a3.js +1 -0
- package/.next/static/chunks/9611-190b55ade8b3af3c.js +1 -0
- package/.next/static/chunks/app/api/approvals/[id]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/approvals/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/backup/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/browse/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/bugs/enhance/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/env/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/convert-process-to-subflow/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/assist/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/generator/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/repair/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/flow/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/git/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/init/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/authoring/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/automation/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/flows/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/resources/read/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/resources/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/servers/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/state/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/flujo/tools/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/model/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/build/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/derive-secrets/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/install/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/install/status/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/installed/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/resolve/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/scan-targets/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/search/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/packages/uninstall/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/resend/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/reset/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/feedback/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/callback/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/packages/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/publish/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/registry/settings/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/restore/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/runs/active/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/setup/ai-cli/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/statistics/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/storage/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/telemetry/daily-active/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/update/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/waves/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/automation/triggers/page-594a6294c58344bf.js +1 -0
- package/.next/static/chunks/app/automation/waves/page-ce2fef4996cad8e6.js +1 -0
- package/.next/static/chunks/app/chat/page-203cb7bf21638ada.js +1 -0
- package/.next/static/chunks/app/docs/page-c466a58caf5e3336.js +1 -0
- package/.next/static/chunks/app/executions/page-fcc848de86714386.js +1 -0
- package/.next/static/chunks/app/flows/page-172c759ca81ba02f.js +1 -0
- package/.next/static/chunks/app/layout-a6ca531683a518a7.js +1 -0
- package/.next/static/chunks/app/mcp/page-0a96e6b30e45b1e6.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/models/error-1964203c5c6e7d0e.js +1 -0
- package/.next/static/chunks/app/models/{loading-1687ae86584f5b1b.js → loading-0cdcf9bae7d3b8f3.js} +1 -1
- package/.next/static/chunks/app/models/page-ad1cbea6d3324966.js +1 -0
- package/.next/static/chunks/app/packages/page-dda48425be9fc137.js +1 -0
- package/.next/static/chunks/app/page-04189aa1b1318c2d.js +1 -0
- package/.next/static/chunks/app/settings/page-906c229c87011ead.js +1 -0
- package/.next/static/chunks/app/statistics/page-9b13a95549f438c0.js +1 -0
- package/.next/static/chunks/app/v1/chat/completions/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/revert/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/chat/events/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/v1/models/route-e70b5e2b4e09002b.js +1 -0
- package/.next/static/chunks/app/waves/page-5b53af3eb9409414.js +1 -0
- package/.next/static/chunks/webpack-9fbd3587b9ef4dca.js +1 -0
- package/.next/static/css/400b1b927c3ffaf6.css +1 -0
- package/.next/static/css/82efa7d39b03a714.css +1 -0
- package/.next/trace +11 -10
- package/.next/types/app/api/flow/[id]/convert-process-to-subflow/route.ts +347 -0
- package/.next/types/app/api/flow/assist/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/authoring/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/automation/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/flows/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/resources/read/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/resources/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/servers/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/state/route.ts +347 -0
- package/.next/types/app/api/mcp/flujo/tools/route.ts +347 -0
- package/.next/types/app/api/setup/ai-cli/route.ts +347 -0
- package/.next/types/app/api/statistics/route.ts +347 -0
- package/.next/types/app/{layout.ts → automation/triggers/page.ts} +6 -6
- package/.next/types/app/{waves → automation/waves}/page.ts +3 -3
- package/.next/types/app/{executions → statistics}/page.ts +3 -3
- package/.next/types/app/v1/chat/conversations/[conversationId]/revert/route.ts +347 -0
- package/.next/types/routes.d.ts +18 -2
- package/.next/types/validator.ts +144 -0
- package/README.md +79 -52
- package/bin/flujo.mjs +42 -5
- package/mcp-servers/README.md +94 -0
- package/mcp-servers/bash/dist/index.d.ts +3 -0
- package/mcp-servers/bash/dist/index.js +85 -0
- package/mcp-servers/bash/dist/index.js.map +1 -0
- package/mcp-servers/bash/dist/resources.d.ts +13 -0
- package/mcp-servers/bash/dist/resources.js +298 -0
- package/mcp-servers/bash/dist/resources.js.map +1 -0
- package/mcp-servers/bash/dist/shared.d.ts +24 -0
- package/mcp-servers/bash/dist/shared.js +161 -0
- package/mcp-servers/bash/dist/shared.js.map +1 -0
- package/mcp-servers/bash/dist/tools.d.ts +59 -0
- package/mcp-servers/bash/dist/tools.js +1493 -0
- package/mcp-servers/bash/dist/tools.js.map +1 -0
- package/mcp-servers/bash/package.json +33 -0
- package/mcp-servers/browser/dist/index.d.ts +4 -0
- package/mcp-servers/browser/dist/index.js +34 -0
- package/mcp-servers/browser/dist/index.js.map +1 -0
- package/mcp-servers/browser/dist/resources.d.ts +6 -0
- package/mcp-servers/browser/dist/resources.js +78 -0
- package/mcp-servers/browser/dist/resources.js.map +1 -0
- package/mcp-servers/browser/dist/runtime.d.ts +26 -0
- package/mcp-servers/browser/dist/runtime.js +343 -0
- package/mcp-servers/browser/dist/runtime.js.map +1 -0
- package/mcp-servers/browser/dist/tools.d.ts +3 -0
- package/mcp-servers/browser/dist/tools.js +283 -0
- package/mcp-servers/browser/dist/tools.js.map +1 -0
- package/mcp-servers/browser/package.json +31 -0
- package/mcp-servers/filesystem/dist/index.d.ts +3 -0
- package/mcp-servers/filesystem/dist/index.js +56 -0
- package/mcp-servers/filesystem/dist/index.js.map +1 -0
- package/mcp-servers/filesystem/dist/resources.d.ts +49 -0
- package/{.next/server/chunks/9724.js → mcp-servers/filesystem/dist/resources.js} +592 -391
- package/mcp-servers/filesystem/dist/resources.js.map +1 -0
- package/mcp-servers/filesystem/dist/shared.d.ts +24 -0
- package/mcp-servers/filesystem/dist/shared.js +161 -0
- package/mcp-servers/filesystem/dist/shared.js.map +1 -0
- package/mcp-servers/filesystem/dist/tools.d.ts +3 -0
- package/mcp-servers/filesystem/dist/tools.js +1229 -0
- package/mcp-servers/filesystem/dist/tools.js.map +1 -0
- package/mcp-servers/filesystem/package.json +30 -0
- package/mcp-servers/flujo/dist/client.d.ts +12 -0
- package/mcp-servers/flujo/dist/client.js +144 -0
- package/mcp-servers/flujo/dist/client.js.map +1 -0
- package/mcp-servers/flujo/dist/index.d.ts +2 -0
- package/mcp-servers/flujo/dist/index.js +31 -0
- package/mcp-servers/flujo/dist/index.js.map +1 -0
- package/mcp-servers/flujo/package.json +29 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.d.ts +11 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js +161 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/link-page.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.d.ts +53 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js +206 -0
- package/mcp-servers/mcp-whatsapp-web/dist/auth/oauth-provider.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/index.d.ts +2 -0
- package/mcp-servers/mcp-whatsapp-web/dist/index.js +128 -0
- package/mcp-servers/mcp-whatsapp-web/dist/index.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/server.d.ts +28 -0
- package/mcp-servers/mcp-whatsapp-web/dist/server.js +268 -0
- package/mcp-servers/mcp-whatsapp-web/dist/server.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.d.ts +149 -0
- package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js +818 -0
- package/mcp-servers/mcp-whatsapp-web/dist/services/whatsapp.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.d.ts +8 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js +232 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/auth.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.d.ts +3 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js +90 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/chats.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.d.ts +3 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js +65 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/contacts.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/media.d.ts +3 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js +245 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/media.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.d.ts +3 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js +141 -0
- package/mcp-servers/mcp-whatsapp-web/dist/tools/messages.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/index.d.ts +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/index.js +3 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/index.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.d.ts +16 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js +5 -0
- package/mcp-servers/mcp-whatsapp-web/dist/types/whatsapp.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.d.ts +23 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js +99 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/audio.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.d.ts +12 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js +72 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-finder.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.d.ts +84 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js +297 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/browser-process-manager.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.d.ts +12 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js +141 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/cleanup-browsers.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.d.ts +2 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js +69 -0
- package/mcp-servers/mcp-whatsapp-web/dist/utils/logger.js.map +1 -0
- package/mcp-servers/mcp-whatsapp-web/package.json +75 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/index.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/index.js +95 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/index.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js +195 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/prompts/index.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js +214 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/resources/index.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.d.ts +21 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js +108 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/server/server.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js +301 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/control.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js +22 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/index.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js +146 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/keyboard.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js +179 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/mouse.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js +236 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/process.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.d.ts +8 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js +300 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/tools/window.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.d.ts +50 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js +78 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/logger/logger.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.d.ts +51 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js +61 -0
- package/mcp-servers/mcp-windows-desktop-automation/dist/utils/types.js.map +1 -0
- package/mcp-servers/mcp-windows-desktop-automation/package.json +38 -0
- package/mcp-servers/patchright-mcp/package.json +32 -0
- package/mcp-servers/reddit-mcp-server/package.json +88 -0
- package/mcp-servers/servers/package.json +31 -0
- package/mcp-servers/shared/dist/index.d.ts +24 -0
- package/mcp-servers/shared/dist/index.js +161 -0
- package/mcp-servers/shared/dist/index.js.map +1 -0
- package/mcp-servers/shared/package.json +26 -0
- package/package.json +119 -99
- package/scripts/launch-next.mjs +13 -1
- package/.next/server/chunks/1114.js +0 -1
- package/.next/server/chunks/1439.js +0 -1
- package/.next/server/chunks/1578.js +0 -5
- package/.next/server/chunks/1634.js +0 -1
- package/.next/server/chunks/166.js +0 -5
- package/.next/server/chunks/1664.js +0 -2
- package/.next/server/chunks/1690.js +0 -1
- package/.next/server/chunks/2859.js +0 -1
- package/.next/server/chunks/3629.js +0 -1
- package/.next/server/chunks/3653.js +0 -2
- package/.next/server/chunks/366.js +0 -2
- package/.next/server/chunks/3717.js +0 -1
- package/.next/server/chunks/3935.js +0 -4
- package/.next/server/chunks/3984.js +0 -9
- package/.next/server/chunks/4013.js +0 -1
- package/.next/server/chunks/4436.js +0 -1
- package/.next/server/chunks/4466.js +0 -1
- package/.next/server/chunks/4551.js +0 -6
- package/.next/server/chunks/4663.js +0 -1
- package/.next/server/chunks/4822.js +0 -1
- package/.next/server/chunks/5200.js +0 -1
- package/.next/server/chunks/5285.js +0 -1
- package/.next/server/chunks/5309.js +0 -78
- package/.next/server/chunks/544.js +0 -136
- package/.next/server/chunks/5463.js +0 -1
- package/.next/server/chunks/5544.js +0 -5
- package/.next/server/chunks/5880.js +0 -1
- package/.next/server/chunks/6747.js +0 -435
- package/.next/server/chunks/6793.js +0 -1
- package/.next/server/chunks/7069.js +0 -6
- package/.next/server/chunks/7104.js +0 -1
- package/.next/server/chunks/7634.js +0 -4
- package/.next/server/chunks/793.js +0 -403
- package/.next/server/chunks/7965.js +0 -39
- package/.next/server/chunks/7993.js +0 -2
- package/.next/server/chunks/8356.js +0 -1
- package/.next/server/chunks/8387.js +0 -1
- package/.next/server/chunks/87.js +0 -1
- package/.next/server/chunks/9085.js +0 -2
- package/.next/server/chunks/9174.js +0 -1
- package/.next/server/chunks/9235.js +0 -29
- package/.next/server/chunks/94.js +0 -1
- package/.next/server/chunks/9983.js +0 -2
- package/.next/static/chunks/1871-14c3e63ca865d85e.js +0 -1
- package/.next/static/chunks/2003-f826c607d609d1fa.js +0 -1
- package/.next/static/chunks/2005.4eea65c00d9a29cd.js +0 -1
- package/.next/static/chunks/2318-13ef0d3048e97834.js +0 -1
- package/.next/static/chunks/3077-565833c67440a7fa.js +0 -1
- package/.next/static/chunks/3217.260785c2198d1e9d.js +0 -1
- package/.next/static/chunks/3272-fd8d59523f61da96.js +0 -1
- package/.next/static/chunks/3429-34fb1a84aed96703.js +0 -1
- package/.next/static/chunks/3545.353a62a68d3b7fd1.js +0 -1
- package/.next/static/chunks/3659-0ab9580d5ee5deea.js +0 -1
- package/.next/static/chunks/3772-20197853c04a6993.js +0 -1
- package/.next/static/chunks/422-61b173ba64cf0c94.js +0 -1
- package/.next/static/chunks/4523-a540747aa2ed34e8.js +0 -1
- package/.next/static/chunks/454.5fc2f8eef98483e3.js +0 -1
- package/.next/static/chunks/488-7ab54d8ae2b4b550.js +0 -1
- package/.next/static/chunks/4919-6c8a48e3cc642349.js +0 -1
- package/.next/static/chunks/4929-150b03595474c9d8.js +0 -1
- package/.next/static/chunks/5733-1419095a28c1ddc3.js +0 -1
- package/.next/static/chunks/639-90ed75d402dc872b.js +0 -1
- package/.next/static/chunks/6404-86615a5f5ce5c00f.js +0 -1
- package/.next/static/chunks/6430-8c6dac4a758119f2.js +0 -1
- package/.next/static/chunks/6539-118a0084e0bfae34.js +0 -1
- package/.next/static/chunks/7264-91d1fa99abcd91ad.js +0 -1
- package/.next/static/chunks/7328-c8a51bb8c7470d77.js +0 -1
- package/.next/static/chunks/7391-5a0abd837ba241f5.js +0 -1
- package/.next/static/chunks/7445-d8a8be6e451c522e.js +0 -1
- package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +0 -1
- package/.next/static/chunks/8124-4a80e3201b8e51b0.js +0 -1
- package/.next/static/chunks/8345.bc5534ec13abc9ee.js +0 -1
- package/.next/static/chunks/8404-5aa8ea49197b98b8.js +0 -1
- package/.next/static/chunks/8405.a425f94b6b13d2be.js +0 -1
- package/.next/static/chunks/8470-72cf748472d4d501.js +0 -1
- package/.next/static/chunks/8551-a28272acfda62ac9.js +0 -1
- package/.next/static/chunks/8650-f879564a0ed89bc3.js +0 -1
- package/.next/static/chunks/8989-5fa9c7c670eb9a1a.js +0 -1
- package/.next/static/chunks/9164-de1d167d87614a6d.js +0 -1
- package/.next/static/chunks/9195.294887f083b1a11b.js +0 -1
- package/.next/static/chunks/9203-786f457ecf60b49c.js +0 -1
- package/.next/static/chunks/9244-3281f7fd02003a2c.js +0 -1
- package/.next/static/chunks/9345-11d6e48d892b1862.js +0 -8
- package/.next/static/chunks/9562-f8371be653010627.js +0 -1
- package/.next/static/chunks/9581-6d2523fd68a5e3c4.js +0 -1
- package/.next/static/chunks/9611-9867e6e8e65172ec.js +0 -1
- package/.next/static/chunks/9951-566fc6b05c12209e.js +0 -1
- package/.next/static/chunks/app/api/approvals/[id]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/approvals/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/backup/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/browse/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/chat/page-e37bbc561f40ce60.js +0 -1
- package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +0 -1
- package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +0 -1
- package/.next/static/chunks/app/flows/page-e52c8943555e38dd.js +0 -1
- package/.next/static/chunks/app/layout-abed1f211e03152f.js +0 -1
- package/.next/static/chunks/app/mcp/page-4a3e5a643d84ee89.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/models/error-1718b538d6967e56.js +0 -1
- package/.next/static/chunks/app/models/page-595597042e227970.js +0 -1
- package/.next/static/chunks/app/packages/page-2f2d29c17841b3cf.js +0 -1
- package/.next/static/chunks/app/page-2f9da78a4891731a.js +0 -1
- package/.next/static/chunks/app/settings/page-f35e939032b0277d.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +0 -1
- package/.next/static/chunks/app/waves/page-dc99a16141dd902b.js +0 -1
- package/.next/static/chunks/webpack-9d09d53b271f49e2.js +0 -1
- package/.next/static/css/30253fcfa8035221.css +0 -1
- package/.next/static/css/69ab44eb350e0b6c.css +0 -1
- package/.next/static/kIFnN4S0HHOnvpPGsSzi9/_buildManifest.js +0 -1
- /package/.next/static/{kIFnN4S0HHOnvpPGsSzi9 → b1aMk0634gkkiunttd1SQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";exports.id=7480,exports.ids=[1925,4306,6687,7480],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},3233:(a,b,c)=>{c.d(b,{g:()=>f});var d=c(79646);let e=(0,c(50846).h)("utils/process/killProcessTree");function f(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,d.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>e.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){e.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let g=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return g.unref?.(),()=>clearTimeout(g)}},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},34262:(a,b,c)=>{c.d(b,{cP:()=>g,rq:()=>f,t_:()=>e});let d=new Set(["http:","https:","git:","ssh:"]);function e(a){let b;if("string"!=typeof a)return!1;let c=a.trim();if(!c||c.startsWith("-")||/[\s\x00-\x1f]/.test(c))return!1;if(!c.includes("://")&&/^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+:[^-][^\s]*$/.test(c))return!0;try{b=new URL(c)}catch{return!1}return d.has(b.protocol)}function f(a){if("string"!=typeof a)return!1;let b=a.trim();return!(!b||b.startsWith("-")||/[\s\x00-\x1f]/.test(b))}function g(a,b,c=process.platform){let d=a||"";if(b&&b.length>0){let a=b.filter(a=>""!==a.trim());if(a.length>0){let b=a.map(a=>(function(a,b=process.platform){return"win32"===b?`"${a.replace(/"/g,'""')}"`:`'${a.replace(/'/g,"'\\''")}'`})(a,c)).join(" ");d=`${d} ${b}`}}return d}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},68014:(a,b,c)=>{c.d(b,{qf:()=>O,Ed:()=>N,ae:()=>P,jA:()=>Q});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(33873),n=c.n(m),o=c(79748),p=c.n(o),q=c(79646),r=c(34322),s=c(43326),t=c(34262),u=c(3233),v=c(49877);let w=Math.max(6e4,Number(process.env.FLUJO_GITHUB_INSTALL_TIMEOUT_MS)||9e5);function x(a){return a.trim().replace(/\/+$/,"").replace(/\.git$/i,"").toLowerCase()}function y(a,b){return b.reduce((a,b)=>b?a.split(b).join("[REDACTED]"):a,a)}function z(a,b,c){return new Promise((d,e)=>{let f,g=!1,h="";try{f=(0,q.spawn)(a,{cwd:b,shell:!0,windowsHide:!0,stdio:["ignore","pipe","pipe"],detached:"win32"!==process.platform})}catch(a){e(a);return}let i=a=>{h=`${h}${String(a)}`.slice(-8e3)};f.stdout?.on("data",i),f.stderr?.on("data",i);let j=setTimeout(()=>{if(g)return;g=!0;let b=(0,u.g)(f);f.once("close",b),e(Error(`${a} timed out after ${w}ms`))},w);j.unref?.();let k=a=>{g||(g=!0,clearTimeout(j),a?e(a):d())};f.once("error",a=>k(a)),f.once("close",b=>{if(0===b)return void k();let d=h.trim();k(Error(y(`${a} exited with code ${b}${d?`: ${d}`:""}`,c)))})})}async function A(a){try{return await p().access(a),!0}catch{return!1}}async function B(a,b){let c=await p().realpath(a);if(!b||"."===b.trim())return c;let d=b.trim().replace(/\\/g,"/");if(n().isAbsolute(d)||d.split("/").some(a=>".."===a))throw Error("GitHub server subdirectory must stay inside the repository");let e=await p().realpath(n().resolve(c,d)),f=n().relative(c,e);if(f.startsWith("..")||n().isAbsolute(f))throw Error("GitHub server subdirectory resolves outside the repository");return e}async function C(a,b){let c=a.packageManager?.split("@")[0];return"pnpm"===c||"yarn"===c||"bun"===c||"npm"===c?c:await A(n().join(b,"pnpm-lock.yaml"))?"pnpm":await A(n().join(b,"yarn.lock"))?"yarn":await A(n().join(b,"bun.lock"))||await A(n().join(b,"bun.lockb"))?"bun":"npm"}function D(a,b){if(void 0===a)return;let c=a.trim();if(!c)return"";if(c.length>4096||/[\0]/.test(c))throw Error(`Invalid GitHub ${b} command`);return c}async function E(a,b,c){let d=await A(n().join(c,".git"));if(!d){let b=[];try{b=await p().readdir(c)}catch(a){if("ENOENT"!==a.code)throw a}if(b.length>0)throw Error(`Refusing to clone into non-empty directory: ${c}`);await (0,r.Ay)().clone(a,c,{"--depth":1})}let e=(0,r.Ay)({baseDir:c,timeout:{block:12e4}});if(x(String(await e.remote(["get-url","origin"])).trim())!==x(a))throw Error("Existing clone origin does not match the requested GitHub repository");if(!(await e.status()).isClean())throw Error("Existing GitHub server clone has local changes; refusing to overwrite them");(d||b)&&(await e.raw(["fetch","--depth=1","origin",b??"HEAD"]),await e.raw(["checkout","--detach","FETCH_HEAD"]))}async function F(a){let b;try{b=function(a,b){let c=a.trim(),d=b?.trim()||void 0;if(!d){let a=c.lastIndexOf("@");a>Math.max(c.lastIndexOf("/"),c.lastIndexOf(":"))&&(d=c.slice(a+1),c=c.slice(0,a))}if(!c.includes("://")&&!/^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+:/.test(c)){let a=c.match(/^([^/\s]+)\/([^/\s]+)$/);a&&(c=`https://github.com/${a[1]}/${a[2]}`)}if(!(0,t.t_)(c))throw Error("Unsafe or unsupported GitHub repository URL");if(d&&!(0,t.rq)(d))throw Error("Unsafe or unsupported Git ref");return{repositoryUrl:c,...d?{ref:d}:{}}}(a.repositoryUrl,a.ref)}catch(a){return{installed:!1,error:a instanceof Error?a.message:String(a)}}let c=new Set(a.secretEnvNames??[]),e=[...c].map(b=>a.env[b]).filter(a=>!!a),f=n().join((0,s.getDataDir)(),"mcp-servers"),g=n().join(f,function(a,b){let c=a.replace(/[\\/]+$/,"").replace(/\.git$/i,""),e=(c.includes("://")?new URL(c).pathname:c.slice(c.indexOf(":")+1)).split(/[\\/]/).filter(Boolean).slice(-2).join("-").replace(/[^A-Za-z0-9._-]/g,"-")||"repository",f=(0,d.createHash)("sha256").update(`${x(a)}\0${b??""}`).digest("hex").slice(0,10);return`${e}-${f}`}(b.repositoryUrl,b.ref));try{await p().mkdir(f,{recursive:!0}),await E(b.repositoryUrl,b.ref,g);let d=await B(g,a.subdirectory),h=n().join(d,"package.json");if(!await A(h))throw Error(`GitHub package install currently requires package.json in ${a.subdirectory||"the repository root"}`);let i=JSON.parse(await p().readFile(h,"utf8")),j=await C(i,d),k=D(a.installCommand,"install")??("npm"===j?"npm install --include=dev":`${j} install`),l=D(a.buildCommand,"build")??function(a,b={}){let c=["build","compile","dist"].find(a=>!!b[a]);return c?"yarn"===a?`yarn ${c}`:`${a} run ${c}`:""}(j,i.scripts);k&&await z(k,d,e),l&&await z(l,d,e);let m=function(a){let b="string"==typeof a.bin?a.bin:a.bin?Object.values(a.bin)[0]:void 0;if(b)return b;if(a.main)return a.main;let c=a.scripts?.start,d=c?.match(/(?:^|\s)node\s+["']?([^"'\s]+)["']?/);return d?.[1]||"dist/index.js"}(i),o=n().resolve(d,m),q=n().relative(d,o);if(q.startsWith("..")||n().isAbsolute(q))throw Error("GitHub server entry point resolves outside its working directory");if(!await A(o))throw Error(`GitHub server entry point was not produced by the build: ${m}`);let r={type:"github",repositoryUrl:b.repositoryUrl,...b.ref?{ref:b.ref}:{},...a.subdirectory?{subdirectory:a.subdirectory}:{}},s=Object.fromEntries(Object.entries(a.env).map(([a,b])=>[a,c.has(a)?{value:b,metadata:{isSecret:!0}}:b])),t={name:a.name,transport:"stdio",command:"node",args:function(a,b=[]){let c=[a];for(let a of[...b].sort((a,b)=>a.index-b.index)){if(a.index>c.length)throw Error(`argument template index ${a.index} cannot be reconstructed`);if(a.index<c.length&&c[a.index]!==a.value)throw Error(`argument template index ${a.index} cannot replace a static argument`);c[a.index]=a.value}return c}(m,a.argTemplates),rootPath:d,env:s,disabled:a.disabled??!1,autoApprove:a.autoApprove??[],folder:a.folder,source:r,_installCommand:k,_buildCommand:l},u=await v.mcpService.updateServerConfig(a.name,t);if(!Array.isArray(u)&&u&&"success"in u&&!1===u.success)return{installed:!1,error:u.error??"Saving the GitHub server failed"};return{installed:!0,serverName:a.name}}catch(a){return{installed:!1,error:y(a instanceof Error?a.message:String(a),e)}}}var G=c(20433),H=c(87821),I=c(4771);let J=(0,f.h)("backend/services/packages/installPackage");function K(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function L(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>L(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=L(e,b);return c}return a}async function M(a){let b=new Set(a.requiredGlobals??[]);for(let c of a.globals??[])c.required&&b.add(c.name);if(0===b.size)return[];let c=await (0,g.loadItem)(h.Z.GLOBAL_ENV_VARS,{});return[...b].filter(a=>!Object.prototype.hasOwnProperty.call(c,a))}async function N(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await S(e,j),missingGlobals:await M(e)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let m=await G.modelService.loadModels(),n=new Set((e.models??[]).map(a=>a.id)),o=new Map(m.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!n.has(b)||!o.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let p={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await M(e)},q=(e.models??[]).map(a=>L(a,f)),r=(e.flows??[]).map(a=>L(a,f)),s=(e.plannedExecutions??[]).map(a=>L(a,f)),t={flows:{},models:{},servers:[],plannedExecutions:[]},u={flows:[],models:[],servers:[],plannedExecutions:[]},w=new Set,x=new Map;try{let a=await v.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)w.add(b.name),x.set(b.name,b)}catch(a){J.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await V(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:p,ledgerEntities:t,ledgerCreated:u,existingServerNames:w,existingServerConfigs:x});let y={};for(let b of q){let c=a.modelMappings?.[b.id];if(c){let a=o.get(c);y[b.id]={id:a.id,name:a.name},p.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await Y(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:p,ledgerEntities:t,ledgerCreated:u,existingServerNames:w,existingServerConfigs:x});d&&(y[b.id]=d)}let z=await Z(e.name,r,y,p,t,u);for(let a of s)await $(a,e.name,z,p,t,u);try{let a=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:p,entities:t,created:u},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){J.warn("installPackage: failed to persist install ledger",a)}return p}async function O(a){let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function P(){return Object.values(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function Q(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,I.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>H.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>v.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>G.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){J.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function R(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function S(a,b){let c=await G.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:R(c),..."github"===c.installOrigin.sourceType&&c.installOrigin.installCommand?{installCommand:c.installOrigin.installCommand}:{},..."github"===c.installOrigin.sourceType&&c.installOrigin.buildCommand?{buildCommand:c.installOrigin.buildCommand}:{},requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)})),globals:a.globals??[]}}function T(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar?(f[b.name]=`\${global:${b.globalVar}}`,b.isSecret&&g.add(b.name)):b.globalTemplate&&(f[b.name]=b.globalTemplate,b.isSecret&&g.add(b.name));return{values:f,secretNames:g,missingRequired:h}}async function U(a,b,c,d,e,f={}){let{packageFolder:g,summary:h,ledgerEntities:i,existingServerConfigs:j}=b,k=R(a),l=j.get(a.name);if(!l){h.servers.push({localName:a.name,source:k,installed:!1,error:"server vanished between snapshot and install"}),h.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let m={...l.env??{}};for(let[a,b]of Object.entries(d))m[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let n=l.args,o=Array.isArray(n)?[...n]:[];for(let b of a.argTemplates??[]){if(b.index>o.length||b.index<o.length&&!/\$\{global:[A-Za-z0-9_.-]+\}/.test(o[b.index])){let c=`argument template index ${b.index} cannot replace a static existing argument`;h.servers.push({localName:a.name,source:k,installed:!1,error:c}),h.skipped.push({type:"server",name:a.name,note:c});return}o[b.index]=b.value}let p=await v.mcpService.updateServerConfig(a.name,{env:m,...Object.keys(f).length>0?{headers:{..."headers"in l?l.headers??{}:{},...f}}:{},folder:g,...a.argTemplates?.length?{args:o}:{}});if(!Array.isArray(p)&&p&&"success"in p&&!1===p.success){let b=p.error??"unknown error";h.servers.push({localName:a.name,source:k,installed:!1,error:b}),h.skipped.push({type:"server",name:a.name,note:b});return}i.servers.push(a.name),h.servers.push({localName:a.name,source:k,installed:!0,serverName:a.name,alreadyExisted:!0});let q=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;h.updated.push({type:"server",name:a.name,id:a.name,...q?{note:q}:{}})}async function V(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=R(a),i=a.installOrigin,j=T(a.envDeclarations,b),k=T(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){if(!i.ref){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing GitHub repository URL"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no GitHub ref"});return}if(g.has(a.name))return void await U(a,b,m,j.values,j.secretNames,n);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let c=await F({name:a.name,repositoryUrl:i.ref,ref:i.gitRef,subdirectory:i.subdirectory,installCommand:i.installCommand,buildCommand:i.buildCommand,env:j.values,secretEnvNames:[...j.secretNames],argTemplates:a.argTemplates,disabled:a.disabled,autoApprove:a.autoApprove,folder:b.packageFolder});if(d.servers.push({localName:a.name,source:h,installed:c.installed,...c.serverName?{serverName:c.serverName}:{},...c.alreadyExisted?{alreadyExisted:!0}:{},...c.error?{error:c.error}:{}}),c.installed){e.servers.push(c.serverName??a.name);let b={type:"server",name:a.name,id:c.serverName??a.name};c.alreadyExisted?d.updated.push(b):(f.servers.push(c.serverName??a.name),d.created.push(b))}else d.skipped.push({type:"server",name:a.name,note:c.error??"GitHub install failed"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await U(a,b,m,j.values,j.secretNames,n);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=await (0,l.aM)(c,j.values,{preferredTransport:a.transport,headerOverrides:n,...a.argTemplates?.length?{argTemplates:a.argTemplates}:{}}),o={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(o),k.installed){k.serverName&&await W(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await X(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let o=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,o,n,j.secretNames),i=await v.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...o?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};o?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function W(a,b){try{let c=await v.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&J.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){J.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function X(a,b,c){if(0===c.size)return;let d=await v.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await v.mcpService.updateServerConfig(a,{env:f})}catch(b){J.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function Y(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let m=a.displayName||a.name,n={name:a.name,displayName:m,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},o=(await G.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===m.toLowerCase());if(o){let b=await G.modelService.updateModel({...o,...n,id:o.id});if(b.success){j.models[m]=o.id;let b={type:"model",name:m,id:o.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:o.id,name:a.name}}return void i.skipped.push({type:"model",name:m,note:b.error})}let p=(0,e.A)(),q=await G.modelService.addModel({id:p,...n});if(q.success){j.models[m]=p,k.models.push(p);let b={type:"model",name:m,id:p};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:p,name:a.name}}i.skipped.push({type:"model",name:m,note:q.error})}async function Z(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${K(a)}-${K(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await H.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await H.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function $(a,b,c,d,e,f){var g;let h=(0,I.getSchedulerService)(),i=(g=a.name,`pkg-${K(b)}-${K(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,p={...o,id:i,flowId:j,folder:b,enabled:!1},q=await h.create(p);if(q.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(q.conflict){let{id:b,...c}=p,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:q.error})}},68633:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},75943:(a,b,c)=>{c.d(b,{g:()=>h,i:()=>g});var d=c(50846),e=c(80233);let f=(0,d.h)("backend/services/packages/packageRegistry");async function g(a){let{status:b,body:c}=await (0,e.sB)(a);return b<200||b>=300?(f.warn(`searchPackageRegistry: registry responded with status ${b}`),{items:[],page:a.page??1,pageSize:a.pageSize??20,total:0,error:c?.error??`Registry responded with status ${b}`}):c}async function h(a,b){if(!a||"string"!=typeof a)throw Error("A package id is required");let{status:c,body:d}=await (0,e.wf)(a,b&&b.trim()?b.trim():"latest");if(c<200||c>=300)throw Error(d?.error??d?.message??`Registry responded with status ${c}`);return d}},80233:(a,b,c)=>{c.d(b,{$5:()=>p,Nb:()=>s,Ow:()=>r,Tr:()=>x,Wz:()=>w,eo:()=>u,iD:()=>q,s2:()=>v,sB:()=>n,uJ:()=>j,w2:()=>t,wf:()=>o});var d=c(50846),e=c(92372),f=c(38844),g=c(21508);let h=(0,d.h)("backend/utils/packageRegistryClient");function i(a){return a.trim().replace(/\/+$/,"")}async function j(){let a=process.env.FLUJO_REGISTRY_BASE_URL?.trim();if(a)return i(a);let b=await (0,e.loadItem)(f.Z.REGISTRY_SETTINGS,{});return b?.baseUrl&&b.baseUrl.trim()?i(b.baseUrl):i(g.Qs)}async function k(a,b,c){let d=await j(),e=`${d}${a}`,f=new AbortController,g=setTimeout(()=>f.abort(),2e4);try{let d={"Content-Type":"application/json",Accept:"application/json"};c&&(d.Authorization=`Bearer ${c}`),h.info(`POST ${a}`);let g=await fetch(e,{method:"POST",headers:d,body:JSON.stringify(b??{}),signal:f.signal,cache:"no-store"}),i=await g.text(),j=null;if(i)try{j=JSON.parse(i)}catch{j={message:i}}return{status:g.status,body:j}}catch(b){return h.warn(`POST ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(g)}}async function l(a){let b=await j(),c=`${b}${a}`,d=new AbortController,e=setTimeout(()=>d.abort(),2e4);try{h.info(`GET ${a}`);let b=await fetch(c,{headers:{Accept:"application/json"},signal:d.signal,cache:"no-store"}),e=await b.text(),f=null;if(e)try{f=JSON.parse(e)}catch{f={message:e}}return{status:b.status,body:f}}catch(b){return h.warn(`GET ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(e)}}async function m(a,b){let c=await j(),d=`${c}${a}`,e=new AbortController,f=setTimeout(()=>e.abort(),2e4);try{h.info(`DELETE ${a}`);let c=await fetch(d,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${b}`},signal:e.signal,cache:"no-store"}),f=await c.text(),g=null;if(f)try{g=JSON.parse(f)}catch{g={message:f}}return{status:c.status,body:g}}catch(b){return h.warn(`DELETE ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(f)}}function n(a){let b=new URLSearchParams;a.q&&b.set("q",a.q),a.tag&&b.set("tag",a.tag),a.page&&b.set("page",String(a.page)),a.pageSize&&b.set("pageSize",String(a.pageSize));let c=b.toString()?`?${b.toString()}`:"";return l(`/v1/packages${c}`)}function o(a,b="latest"){return l(`/v1/packages/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}/manifest`)}function p(a,b,c){return k("/v1/auth/signup",{email:a,password:b,handle:c})}function q(a,b){return k("/v1/auth/login",{email:a,password:b})}function r(a){return k("/v1/auth/refresh",{refresh_token:a})}function s(a){return k("/v1/auth/resend-confirmation",{email:a})}function t(a){return k("/v1/auth/forgot-password",{email:a})}function u(a,b){return k("/v1/packages",a,b)}function v(a,b){return m(`/v1/packages/${encodeURIComponent(a)}`,b)}function w(a,b){return k("/v1/feedback",{notice:a,rating:b})}function x(a){return k("/v1/auth/oauth/token",{code:a.code,code_verifier:a.codeVerifier,redirect_uri:a.redirectUri,provider:a.provider})}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=
|
|
1
|
+
"use strict";exports.id=7498,exports.ids=[1925,4306,6687,7498],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},23310:(a,b,c)=>{c.d(b,{GN:()=>x,UC:()=>z,Xg:()=>y});var d=c(50846),e=c(20433),f=c(22994),g=c(46496),h=c(81226),i=c(84671),j=c(88185),k=c(14265),l=c(1905),m=c(33233),n=c(9312),o=c(97630);let p=(0,d.h)("backend/services/flow/generateFlow"),q=o.Jt;function r(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
|
|
2
2
|
- A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
|
|
3
3
|
- "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
|
|
4
4
|
- "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
|
|
@@ -39,4 +39,4 @@ ${s(c.issues)}`:"";return y({flow:b,description:`Repair this flow's wiring so it
|
|
|
39
39
|
- add a Start node if one is missing, connected to the first step;
|
|
40
40
|
- add a Finish node if one is missing, connected from the last step;
|
|
41
41
|
- connect any disconnected process/subflow nodes.
|
|
42
|
-
Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}}
|
|
42
|
+
Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}}};
|
|
@@ -5,6 +5,6 @@ ${b.condition}
|
|
|
5
5
|
Tool result (untrusted data):
|
|
6
6
|
\`\`\`json
|
|
7
7
|
${m}
|
|
8
|
-
\`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(
|
|
8
|
+
\`\`\``;try{let c="llm-gate"===b.mode?await j(b.modelId,n):await k(b.flowId,n),g=function(a){let b=a.match(/\{[\s\S]*\}/);if(!b)return null;try{let a=JSON.parse(b[0]);if("boolean"!=typeof a?.fire)return null;return{fire:a.fire,reason:"string"==typeof a.reason?a.reason:""}}catch{return null}}(c);if(!g)return f.warn(`Gate returned unparseable output: ${c.slice(0,200)}`),{fire:!1,newState:{lastHash:d,...l},error:"The AI check returned an unreadable answer — did not run the flow"};if(!g.fire)return{fire:!1,newState:{lastHash:d,...l}};return{fire:!0,summary:"flow-gate"===b.mode?"Flow condition met":"AI condition met",context:{result:(0,e.Je)(a),aiReason:g.reason},newState:{lastHash:d,...l}}}catch(b){let a=b instanceof Error?b.message:String(b);return f.warn(`Gate check failed: ${a}`),{fire:!1,newState:a.startsWith("config:")?{lastHash:d}:l,error:a.replace(/^config:\s*/,"")}}}async function j(a,b){let{modelService:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(300),c.e(7821),c.e(1539),c.e(5096),c.e(9624),c.e(4306)]).then(c.bind(c,20433)),{getCompletionAdapter:e}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(300),c.e(7821),c.e(1539),c.e(5096),c.e(9624),c.e(4306)]).then(c.bind(c,22994)),{normalizeMaxTokens:f}=await c.e(6496).then(c.bind(c,46496)),g=await d.getModel(a);if(!g)throw Error(`config: The AI-check model no longer exists (${a})`);let i=await d.resolveAndDecryptApiKey(g.ApiKey);if(!i)throw Error("config: Could not resolve the AI-check model API key");let j=e(g),{completion:k}=await j.createCompletion({model:g,apiKey:i,temperature:0,maxTokens:f(g.maxTokens),messages:[{role:"system",content:h},{role:"user",content:b}]}),l=k.choices?.[0]?.message?.content;return"string"==typeof l?l:""}async function k(a,b){let{runFlow:d}=await Promise.all([c.e(3128),c.e(4322),c.e(5067),c.e(300),c.e(7821),c.e(1539),c.e(5096),c.e(9624),c.e(4671),c.e(2446),c.e(6226),c.e(6687)]).then(c.bind(c,16226)),e=await d({flowId:a,prompt:`${b}
|
|
9
9
|
|
|
10
|
-
${g}`,mode:"ephemeral",requireApproval:!1,debug:!1,userTurn:!0});if("completed"!==e.status)throw Error(e.error?.message??`The checker flow ended with status "${e.status}"`);return e.outputText??""}}};
|
|
10
|
+
${g}`,source:"trigger",mode:"ephemeral",requireApproval:!1,debug:!1,userTurn:!0});if("completed"!==e.status)throw Error(e.error?.message??`The checker flow ended with status "${e.status}"`);return e.outputText??""}}};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";exports.id=7508,exports.ids=[7508],exports.modules={31411:(a,b,c)=>{c.d(b,{A:()=>q});var d=c(21124),e=c(38301),f=c(79515),g=c(81637),h=c(95587),i=c(67191),j=c(82605),k=c(50062),l=c(7675),m=c(94367),n=c(37674),o=c(49938),p=c(50551);let q=({schema:a,values:b,onChange:c,size:q="small"})=>{let{globalEnvVars:r}=(0,o.rX)(),s=(0,e.useMemo)(()=>Object.keys(r).sort((a,b)=>a.localeCompare(b)),[r]),[t,u]=(0,e.useState)({}),v=a?.properties??{},w=Array.isArray(a?.required)?a.required:[],x=Object.keys(v);if(0===x.length)return(0,d.jsx)(f.A,{variant:"body2",color:"text.secondary",children:"This tool takes no parameters."});let y=(a,d)=>{let e={...b};void 0===d?delete e[a]:e[a]=d,c(e)};return(0,d.jsx)(g.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:x.map(a=>{let c=v[a]??{},e=w.includes(a)?`${a} *`:a,o="string"==typeof c.description?c.description:"";if("boolean"===c.type)return(0,d.jsx)(h.A,{control:(0,d.jsx)(i.A,{size:q,checked:!0===b[a],onChange:b=>y(a,b.target.checked)}),label:(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.A,{variant:"body2",children:e}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",children:o})]})},a);if(Array.isArray(c.enum)&&c.enum.length>0){let g=b[a];return(0,d.jsxs)(j.A,{size:q,fullWidth:!0,children:[(0,d.jsx)(k.A,{id:`schema-param-${a}`,children:e}),(0,d.jsx)(l.A,{labelId:`schema-param-${a}`,label:e,value:c.enum.includes(g)?g:"",onChange:b=>y(a,b.target.value),children:c.enum.map(a=>(0,d.jsx)(m.A,{value:a,children:String(a)},String(a)))}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",sx:{mt:.5,mx:1.75},children:o})]},a)}if("number"===c.type||"integer"===c.type)return(0,d.jsx)(n.A,{fullWidth:!0,size:q,type:"number",label:e,value:void 0!==b[a]?String(b[a]):"",onChange:b=>{let d=b.target.value;if(""===d)return void y(a,void 0);let e="integer"===c.type?parseInt(d,10):parseFloat(d);y(a,Number.isNaN(e)?void 0:e)},helperText:o},a);if("object"===c.type||"array"===c.type){let f=t[a]??(void 0!==b[a]?JSON.stringify(b[a],null,2):""),g=null;if(f.trim())try{JSON.parse(f)}catch{g="Not valid JSON yet"}return(0,d.jsx)(n.A,{fullWidth:!0,size:q,multiline:!0,minRows:2,label:`${e} (JSON ${c.type})`,value:f,error:!!g,helperText:g??o,onChange:b=>{let c=b.target.value;if(u(b=>({...b,[a]:c})),!c.trim())return void y(a,void 0);try{y(a,JSON.parse(c))}catch{}},slotProps:{input:{sx:{fontFamily:"monospace",fontSize:13}}}},a)}return(0,d.jsxs)(g.default,{children:[(0,d.jsx)(f.A,{variant:"body2",component:"label",sx:{display:"block",mb:.5},children:e}),(0,d.jsx)(p.Ay,{value:void 0!==b[a]?String(b[a]):"",onChange:b=>y(a,""===b?void 0:b),globalNames:s,placeholder:o||a,multiline:!1,minRows:1,ariaLabel:e}),o&&(0,d.jsx)(f.A,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5,mx:1.75},children:o})]},a)})})}},32720:(a,b,c)=>{c.d(b,{A:()=>B});var d=c(21124),e=c(38301),f=c(40512),g=c(83899),h=c(52327),i=c(81637),j=c(43312),k=c(44079),l=c(37674),m=c(41893),n=c(88745),o=c(8521),p=c(79515),q=c(89490),r=c(75983),s=c(50553),t=c(84233),u=c(19925),v=c(68730),w=c(30717),x=c(98810),y=c(52399),z=c(91314);let A=(0,c(42819).h)("frontend/components/shared/FolderPickerDialog"),B=({open:a,title:b="Choose a folder",selectFiles:c=!1,initialPath:B,onClose:C,onSelect:D})=>{let[E,F]=(0,e.useState)(null),[G,H]=(0,e.useState)(""),[I,J]=(0,e.useState)(!1),[K,L]=(0,e.useState)(null),M=(0,e.useCallback)(async a=>{J(!0),L(null);try{let b=a?`?path=${encodeURIComponent(a)}`:"",c=await fetch(`/api/browse${b}`),d=await c.json();if(!c.ok||d.error)return void L(d.error||`HTTP ${c.status}`);F(d),H(d.path)}catch(a){A.warn("Browse failed",a),L("Could not reach the backend to browse folders.")}finally{J(!1)}},[]);(0,e.useEffect)(()=>{a?M(B||void 0):(F(null),L(null))},[a,B,M]);let N=a=>{D(a),C()};return(0,d.jsxs)(f.A,{open:a,onClose:C,maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(g.A,{children:b}),(0,d.jsxs)(h.A,{dividers:!0,sx:{display:"flex",flexDirection:"column",gap:1.5},children:[(0,d.jsxs)(i.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(j.A,{title:"Up one folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:!E?.parent||I,onClick:()=>E?.parent&&void M(E.parent),children:(0,d.jsx)(y.A,{fontSize:"small"})})})}),(0,d.jsx)(j.A,{title:"Home folder",children:(0,d.jsx)("span",{children:(0,d.jsx)(k.A,{size:"small",disabled:I,onClick:()=>void M(),children:(0,d.jsx)(z.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{fullWidth:!0,size:"small",value:G,onChange:a=>H(a.target.value),onKeyDown:a=>{"Enter"===a.key&&(a.preventDefault(),M(G))},placeholder:"Type a path and press Enter"})]}),E&&E.drives.length>0&&(0,d.jsx)(i.default,{sx:{display:"flex",gap:.75,flexWrap:"wrap"},children:E.drives.map(a=>(0,d.jsx)(m.A,{label:a,size:"small",variant:E.path.toLowerCase().startsWith(a.toLowerCase())?"filled":"outlined",onClick:()=>void M(a)},a))}),K&&(0,d.jsx)(n.A,{severity:"error",children:K}),(0,d.jsxs)(i.default,{sx:{minHeight:240,maxHeight:"45vh",overflow:"auto",border:1,borderColor:"divider",borderRadius:1},children:[I&&(0,d.jsx)(i.default,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,d.jsx)(o.default,{size:24})}),!I&&E&&0===E.entries.length&&(0,d.jsx)(p.A,{variant:"body2",color:"text.secondary",sx:{p:2},children:"This folder is empty."}),!I&&(0,d.jsx)(q.A,{dense:!0,disablePadding:!0,children:E?.entries.map(a=>(0,d.jsxs)(r.A,{disabled:!a.isDirectory&&!c,onClick:()=>a.isDirectory?void M(a.path):N(a.path),children:[(0,d.jsx)(s.A,{sx:{minWidth:34},children:a.isDirectory?(0,d.jsx)(w.A,{fontSize:"small",color:"primary"}):(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(t.A,{primary:a.name,primaryTypographyProps:{noWrap:!0}})]},a.path))})]})]}),(0,d.jsxs)(u.A,{children:[(0,d.jsx)(v.A,{onClick:C,children:"Cancel"}),(0,d.jsx)(v.A,{variant:"contained",disabled:!E||I,onClick:()=>E&&N(E.path),children:"Select this folder"})]})]})}},33799:(a,b,c)=>{c.d(b,{b:()=>f,c:()=>g});var d=c(50648);async function e(a,b){try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!c.ok||!c.body)return null;let e=null;return await (0,d.z)(c,a=>{"stdout"===a.type||"stderr"===a.type?b(a.data):"result"===a.type&&(e={success:a.success,output:a.commandOutput??""})}),e}catch(a){return console.error("Error streaming git command:",a),null}}let f=async(a,b,c)=>{if(c){let d=await e({action:"installStream",savePath:a,installCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Dependencies installed successfully. You can now build the server."}:{type:"error",text:"Error installing dependencies. You can still try to build the server."},output:d.output||"No output was returned from the installation process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"install",savePath:a,installCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to install dependencies");return{success:!0,message:{type:"success",text:"Dependencies installed successfully. You can now build the server."},output:d.commandOutput||"No output was returned from the installation process."}}catch(a){return console.error("Error installing dependencies:",a),{success:!1,message:{type:"error",text:`Error installing dependencies: ${a.message||"Unknown error"}. You can still try to build the server.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}},g=async(a,b,c)=>{if(c){let d=await e({action:"buildStream",savePath:a,buildCommand:b},c);if(d)return{success:d.success,message:d.success?{type:"success",text:"Server built successfully."}:{type:"error",text:"Error building server."},output:d.output||"No output was returned from the build process."}}try{let c=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"build",savePath:a,buildCommand:b})}),d=await c.json();if(!c.ok)throw Error(d.error||"Failed to build repository");return{success:!0,message:{type:"success",text:"Server built successfully."},output:d.commandOutput||"No output was returned from the build process."}}catch(a){return console.error("Error building server:",a),{success:!1,message:{type:"error",text:`Error building server: ${a.message||"Unknown error"}.`},output:a instanceof Response?await a.text():a?.message||"Unknown error"}}}},44920:(a,b,c)=>{function d(a){let b={};if(!a)return b;for(let[c,d]of Object.entries(a))b[c]=d&&"object"==typeof d&&"value"in d?d.value:"string"==typeof d?d:"";return b}function e(a){let b,c=[],d=[];if("string"==typeof a)try{b=JSON.parse(a)}catch(a){return{servers:d,errors:[`Invalid JSON: ${a.message}`]}}else b=a;if(!b||"object"!=typeof b)return{servers:d,errors:["Expected a JSON object."]};let e=b,f=e.mcpServers&&"object"==typeof e.mcpServers?e.mcpServers:e;if(0===Object.keys(f).length)return{servers:d,errors:['No servers found. Expected an "mcpServers" object.']};for(let[a,b]of Object.entries(f)){if(!b||"object"!=typeof b){c.push(`"${a}": entry is not an object.`);continue}let e=function(a){let b=(a.transport||a.type||"").toString().toLowerCase().trim();if(!b)return"stdio";switch(b){case"stdio":return"stdio";case"http":case"streamable-http":case"streamable":case"streamablehttp":return"streamable";case"sse":return"sse";case"ws":case"websocket":return"websocket";default:return null}}(b);if(!e){c.push(`"${a}": unknown transport type "${b.type||b.transport}".`);continue}let f={};if(b.env&&"object"==typeof b.env)for(let[a,c]of Object.entries(b.env))f[a]="string"==typeof c?c:String(c??"");let g={name:a,env:f,disabled:b.disabled??!1,autoApprove:Array.isArray(b.autoApprove)?b.autoApprove:[],rootPath:"",_buildCommand:"",_installCommand:""};if("stdio"===e){if(!b.command||"string"!=typeof b.command){c.push(`"${a}": stdio server is missing a "command".`);continue}d.push({...g,transport:"stdio",command:b.command,args:Array.isArray(b.args)?b.args:[]})}else if("websocket"===e){let e=b.url||b.websocketUrl;if(!e){c.push(`"${a}": websocket server is missing a "url".`);continue}d.push({...g,transport:"websocket",websocketUrl:e})}else{let f=b.url||b.serverUrl;if(!f){c.push(`"${a}": ${e} server is missing a "url".`);continue}let h=b.headers&&"object"==typeof b.headers?b.headers:void 0;d.push({...g,transport:e,serverUrl:f,...h?{headers:h}:{}})}}return{servers:d,errors:c}}c.d(b,{_i:()=>f,CZ:()=>h,Kt:()=>g});let f=[{id:"claude",label:"Claude",fileName:"mcp_config.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){if(b.exposeAsMcpServer){e[b.name]={type:"http",url:`${c}/mcp-proxy/${b.name}`};continue}let a={},f=d(b.env);switch(b.transport){case"stdio":a.command=b.command,a.args=b.args||[],Object.keys(f).length>0&&(a.env=f);break;case"streamable":a.type="http",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"sse":a.type="sse",a.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(a.headers=d(b.headers)),Object.keys(f).length>0&&(a.env=f);break;case"websocket":a.type="ws",a.url=b.websocketUrl,Object.keys(f).length>0&&(a.env=f);break;default:Object.keys(f).length>0&&(a.env=f)}e[b.name]=a}return{mcpServers:e}},import:e},{id:"cline",label:"Cline",fileName:"cline_mcp_settings.json",export:function(a,b={}){let c=(b.proxyBaseUrl||"").replace(/\/$/,""),e={};for(let b of a){let a={disabled:b.disabled??!1,autoApprove:b.autoApprove??[],timeout:60};if(b.exposeAsMcpServer){e[b.name]={...a,type:"streamableHttp",url:`${c}/mcp-proxy/${b.name}`};continue}let f=d(b.env),g={...a};switch(b.transport){case"stdio":g.command=b.command,g.args=b.args||[],Object.keys(f).length>0&&(g.env=f);break;case"streamable":g.type="streamableHttp",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"sse":g.type="sse",g.url=b.serverUrl,b.headers&&Object.keys(b.headers).length>0&&(g.headers=d(b.headers));break;case"websocket":g.type="ws",g.url=b.websocketUrl;break;default:Object.keys(f).length>0&&(g.env=f)}e[b.name]=g}return{mcpServers:e}},import:function(a){return e(a)}}];function g(a){return f.find(b=>b.id===a)??f[0]}function h(a,b,c,d="claude"){let e=(c||"").replace(/\/$/,"");return JSON.stringify(b?g(d).export([b],{proxyBaseUrl:e}):{mcpServers:{[a]:{type:"http",url:`${e}/mcp-proxy/${a}`}}},null,2)}},53455:(a,b,c)=>{c.d(b,{Fu:()=>i,M8:()=>f,Qv:()=>g,Qz:()=>h});let d=(0,c(42819).h)("frontend/components/mcp/MCPServerManager/utils/serverUpdates"),e=new Map;async function f(a,b=!1){let c=Date.now(),g={},h=[];for(let d of new Set(a.filter(Boolean))){let a=e.get(d);!b&&a&&c-a.at<6e5?g[d]=a.info:h.push(d)}if(h.length>0)try{let a=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"checkUpdatesBatch",paths:h})}),b=await a.json();if(a.ok&&b.results)for(let[a,d]of Object.entries(b.results))e.set(a,{at:c,info:d}),g[a]=d;else d.warn("Batch update check failed",b.error)}catch(a){d.warn("Batch update check request failed",a)}return g}async function g(a){try{let b=await fetch("/api/git",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pullUpdates",savePath:a})}),c=await b.json();if(!b.ok)return{success:!1,error:c.error||"Failed to pull updates"};return{success:!0,oldSha:c.oldSha,newSha:c.newSha,updated:c.updated}}catch(a){return{success:!1,error:a.message||"Failed to pull updates"}}}async function h(a,b,c){let e=a.match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?\/?$/i);if(!e)return null;try{let a=await fetch(`https://api.github.com/repos/${e[1]}/${e[2]}/compare/${b}...${c}`);if(!a.ok)return null;let d=await a.json(),f=Array.isArray(d.commits)?d.commits:[];return{behindBy:"number"==typeof d.total_commits?d.total_commits:null,commits:f.slice(-10).reverse().map(a=>({sha:(a.sha||"").slice(0,7),message:(a.commit?.message||"").split("\n")[0]}))}}catch(a){return d.debug("GitHub compare preview failed (non-fatal)",a),null}}function i(a){return a?a.slice(0,7):""}},58156:(a,b,c)=>{c.d(b,{default:()=>j});var d=c(21124),e=c(60839),f=c(81637),g=c(53773),h=c(79515),i=c(37489);function j({title:a,description:b,eyebrow:c,icon:j,leading:k,badge:l,actions:m,compact:n=!1,maxWidth:o=1440}){let p=(0,e.A)();return(0,d.jsx)(f.default,{component:"header",sx:{position:"relative",overflow:"hidden",borderBottom:1,borderColor:"divider",background:`linear-gradient(110deg, ${(0,i.X4)(p.palette.primary.main,"dark"===p.palette.mode?.09:.055)}, transparent 38%, ${(0,i.X4)(p.palette.secondary.main,.045)})`,"&::after":{position:"absolute",top:-90,right:"8%",width:220,height:160,borderRadius:"50%",content:'""',pointerEvents:"none",background:`radial-gradient(circle, ${(0,i.X4)(p.palette.primary.main,.16)}, transparent 68%)`,filter:"blur(20px)"}},children:(0,d.jsxs)(f.default,{sx:{position:"relative",zIndex:1,display:"flex",width:"100%",maxWidth:o,mx:"auto",px:{xs:2,sm:3,lg:4},py:n?{xs:1.8,sm:2}:{xs:2.2,sm:2.8},alignItems:{xs:"flex-start",md:"center"},justifyContent:"space-between",flexDirection:{xs:"column",md:"row"},gap:2},children:[(0,d.jsxs)(g.A,{direction:"row",spacing:1.5,alignItems:"center",sx:{minWidth:0},children:[k,j&&(0,d.jsx)(f.default,{"aria-hidden":"true",sx:{display:"grid",width:n?40:46,height:n?40:46,flexShrink:0,placeItems:"center",border:`1px solid ${(0,i.X4)(p.palette.primary.main,.24)}`,borderRadius:n?2.8:3.2,color:"primary.light",bgcolor:(0,i.X4)(p.palette.primary.main,.1),boxShadow:`inset 0 1px 0 ${(0,i.X4)(p.palette.common.white,.08)}, 0 10px 30px ${(0,i.X4)(p.palette.primary.main,.12)}`},children:(0,d.jsx)(j,{sx:{fontSize:n?21:24}})}),(0,d.jsxs)(f.default,{sx:{minWidth:0},children:[(c||l)&&(0,d.jsxs)(g.A,{direction:"row",spacing:1,alignItems:"center",sx:{mb:.35},children:[c&&(0,d.jsx)(h.A,{sx:{color:"primary.light",fontSize:"0.67rem",fontWeight:780,letterSpacing:"0.13em",textTransform:"uppercase"},children:c}),l]}),(0,d.jsx)(h.A,{component:"h1",variant:"h5",sx:{overflow:"hidden",textOverflow:"ellipsis",fontSize:n?"1.2rem":void 0,whiteSpace:{xs:"normal",sm:"nowrap"}},children:a}),b&&(0,d.jsx)(h.A,{variant:"body2",color:"text.secondary",sx:{mt:.45,maxWidth:720,textWrap:"balance"},children:b})]})]}),m&&(0,d.jsx)(f.default,{sx:{display:"flex",width:{xs:"100%",md:"auto"},flexShrink:0,flexWrap:"wrap",alignItems:"center",gap:1,"& > .MuiButton-root":{flex:{xs:"1 1 auto",sm:"0 0 auto"}}},children:m})]})})}},61160:(a,b,c)=>{c.d(b,{mO:()=>f,oO:()=>g});var d=c(7329);let e=["stdio","websocket","sse","streamable"];function f(a,b){switch(b){case"name-asc":case"name-desc":return(0,d.po)(a.name);case"status-connected":case"status-disconnected":{let b=a.status;if("connected"===b)return{key:"status:connected",label:"Connected"};if("error"===b)return{key:"status:error",label:"Error"};if("requires_authentication"===b)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let b=a.transport||"unknown";return{key:`transport:${b}`,label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[b]||b}}default:return{key:"all",label:"All servers"}}}function g(a,b){let c=(a,c)=>{switch(b){case"name-asc":return a.name.localeCompare(c.name);case"name-desc":return c.name.localeCompare(a.name);case"status-connected":if("connected"===a.status&&"connected"!==c.status)return -1;if("connected"!==a.status&&"connected"===c.status)return 1;return a.name.localeCompare(c.name);case"status-disconnected":if("disconnected"===a.status&&"disconnected"!==c.status)return -1;if("disconnected"!==a.status&&"disconnected"===c.status)return 1;return a.name.localeCompare(c.name);case"transport":{let b=e.indexOf(a.transport??""),d=e.indexOf(c.transport??"");if(b!==d)return b-d;return a.name.localeCompare(c.name)}default:return 0}};return[...a].sort((a,b)=>{let d=Number(!!b.favorite)-Number(!!a.favorite);return 0!==d?d:c(a,b)})}},68774:(a,b,c)=>{c.d(b,{A:()=>aj});var d=c(21124),e=c(38301),f=c(42819),g=c(84040),h=c(8165),i=c(93083),j=c(65343),k=c(53222),l=c(12033),m=c(91034),n=c(95786),o=c(64956),p=c(55641),q=c(29320),r=c(5748),s=c(38941),t=c(51694),u=c(1312),v=c(25750),w=c(5501),x=c(99587),y=c(61615),z=c(78352),A=c(28055),B=c(44920),C=c(41893),D=c(56685),E=c(71756),F=c(91901),G=c(83013);let H=({transport:a,size:b="small"})=>{let{colors:c}=(0,g.Ic)(),e=c.domain.transport,f=(()=>{switch(a){case"stdio":return{label:"STDIO",icon:(0,d.jsx)(D.A,{fontSize:"small"}),color:e.stdio.fg,bgColor:e.stdio.bg};case"websocket":return{label:"WebSocket",icon:(0,d.jsx)(E.A,{fontSize:"small"}),color:e.websocket.fg,bgColor:e.websocket.bg};case"sse":return{label:"SSE",icon:(0,d.jsx)(F.A,{fontSize:"small"}),color:e.sse.fg,bgColor:e.sse.bg};case"streamable":return{label:"HTTP Stream",icon:(0,d.jsx)(G.A,{fontSize:"small"}),color:e.streamable.fg,bgColor:e.streamable.bg};default:return{label:"UNKNOWN",icon:(0,d.jsx)(D.A,{fontSize:"small"}),color:e.default.fg,bgColor:e.default.bg}}})();return(0,d.jsx)(C.A,{icon:f.icon,label:f.label,size:b,sx:{backgroundColor:f.bgColor,color:f.color,fontWeight:500,fontSize:"small"===b?"0.75rem":"0.875rem",height:"small"===b?24:32,"& .MuiChip-icon":{color:f.color}}})};var I=c(40512),J=c(83899),K=c(52327),L=c(19925),M=c(68730),N=c(81637),O=c(79515),P=c(88745),Q=c(95587),R=c(77028),S=c(89490),T=c(71439),U=c(50553),V=c(84233),W=c(72264),X=c(53455),Y=c(33799);let Z=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerUpdateDialog"),$=({open:a,onClose:b,serverName:c,rootPath:f,installCommand:g,buildCommand:i,enabled:k,updateInfo:l,onToggle:m,onUpdated:n})=>{let[o,p]=(0,e.useState)(null),[q,r]=(0,e.useState)(!1),[s,t]=(0,e.useState)(!1),[u,w]=(0,e.useState)(!1),[x,z]=(0,e.useState)(null),[A,B]=(0,e.useState)({}),[D,E]=(0,e.useState)(""),F=!!(g&&g.trim()),G=!!(i&&i.trim()),H=[{key:"stop",label:"Stop server",active:k},{key:"pull",label:"Pull latest changes",active:!0},{key:"install",label:`Install dependencies (${g})`,active:F},{key:"build",label:`Build (${i})`,active:G},{key:"restart",label:"Restart server",active:k}];(0,e.useEffect)(()=>{a&&(r(!1),t(!1),w(!1),z(null),B({}),E(""))},[a,c]),(0,e.useEffect)(()=>{if(a&&l.remoteUrl&&l.localSha&&l.remoteSha){let a=!1;return(0,X.Qz)(l.remoteUrl,l.localSha,l.remoteSha).then(b=>{a||p(b)}),()=>{a=!0}}p(null)},[a,l.remoteUrl,l.localSha,l.remoteSha]);let $=(0,e.useCallback)((a,b)=>{B(c=>({...c,[a]:b}))},[]),_=(0,e.useCallback)((a,b)=>{E(c=>c+(c?"\n":"")+`--- ${a} ---
|
|
2
|
+
`+(b||"").trim()+"\n")},[]),aa=async()=>{t(!0),z(null),Z.info(`Starting update for server ${c}`);let a=(a,b)=>{$(a,"error"),z(b),t(!1)};try{k&&($("stop","running"),await Promise.resolve(m(!1)),$("stop","done")),$("pull","running");let b=await (0,X.Qv)(f);if(!b.success)return void a("pull",b.error||"Failed to pull updates");if(_("Pull",`Updated ${(0,X.Fu)(b.oldSha)} -> ${(0,X.Fu)(b.newSha)}`),$("pull","done"),F){$("install","running");let b=await (0,Y.b)(f,g.trim());if(_("Install",b.output),!b.success)return void a("install",b.message.text);$("install","done")}if(G){$("build","running");let b=await (0,Y.c)(f,i.trim());if(_("Build",b.output),!b.success)return void a("build",b.message.text);$("build","done")}k&&($("restart","running"),await Promise.resolve(m(!0)),$("restart","done")),Z.info(`Update completed for server ${c}`),w(!0),t(!1),n?.()}catch(a){Z.error(`Update failed for server ${c}`,a),z(a.message||"Update failed"),t(!1)}},ab=s||u||Object.keys(A).length>0,ac=l.hasLocalChanges&&!q;return(0,d.jsxs)(I.A,{open:a,onClose:s?void 0:b,maxWidth:"sm",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.A,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(v.A,{color:"primary"}),"Update ",c]}),(0,d.jsxs)(K.A,{children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:1,flexWrap:"wrap"},children:[(0,d.jsx)(C.A,{size:"small",label:(0,X.Fu)(l.localSha),sx:{fontFamily:"monospace"}}),(0,d.jsx)(O.A,{variant:"body2",color:"text.secondary",children:"→"}),(0,d.jsx)(C.A,{size:"small",color:"primary",label:(0,X.Fu)(l.remoteSha),sx:{fontFamily:"monospace"}}),l.branch&&"HEAD"!==l.branch&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",children:["on ",(0,d.jsx)("code",{children:l.branch})]}),o?.behindBy!=null&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",children:["(",o.behindBy," commit",1===o.behindBy?"":"s"," behind)"]})]}),l.repoRoot&&l.repoRoot.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()!==f.replace(/\\/g,"/").replace(/\/+$/,"").toLowerCase()&&(0,d.jsxs)(O.A,{variant:"body2",color:"text.secondary",sx:{mb:1},children:["This server lives inside a larger repository — the update pulls"," ",(0,d.jsx)("code",{children:l.repoRoot})," as a whole (other servers from the same repository are updated along with it)."]}),o&&o.commits.length>0&&!ab&&(0,d.jsx)(N.default,{sx:{mb:2,p:1,borderRadius:1,border:"1px solid",borderColor:"divider",maxHeight:160,overflow:"auto"},children:o.commits.map(a=>(0,d.jsxs)(O.A,{variant:"body2",sx:{fontSize:"0.8rem"},noWrap:!0,title:a.message,children:[(0,d.jsx)("code",{children:a.sha})," ",a.message]},a.sha))}),l.hasLocalChanges&&!ab&&(0,d.jsxs)(P.A,{severity:"warning",sx:{mb:2},children:[(0,d.jsxs)(O.A,{variant:"body2",sx:{mb:1},children:["This repository has local changes to tracked files. Updating will ",(0,d.jsx)("strong",{children:"discard"})," them. Untracked files (e.g. a ",(0,d.jsx)("code",{children:".env"})," you created) and all FLUJO settings for this server are kept."]}),(0,d.jsx)(N.default,{component:"ul",sx:{m:0,pl:3,maxHeight:100,overflow:"auto"},children:l.dirtyFiles.map(a=>(0,d.jsx)("li",{children:(0,d.jsx)(O.A,{variant:"body2",component:"span",sx:{fontFamily:"monospace",fontSize:"0.8rem"},children:a})},a))}),(0,d.jsx)(Q.A,{sx:{mt:1},control:(0,d.jsx)(R.A,{size:"small",checked:q,onChange:a=>r(a.target.checked)}),label:(0,d.jsx)(O.A,{variant:"body2",children:"Discard my local changes and update"})})]}),(0,d.jsx)(S.A,{dense:!0,disablePadding:!0,children:H.filter(a=>a.active).map(a=>(0,d.jsxs)(T.Ay,{disableGutters:!0,sx:{py:.25},children:[(0,d.jsx)(U.A,{sx:{minWidth:32},children:(a=>{switch(a){case"running":return(0,d.jsx)(y.default,{size:"small",color:"primary"});case"done":return(0,d.jsx)(h.A,{color:"success",fontSize:"small"});case"error":return(0,d.jsx)(j.A,{color:"error",fontSize:"small"});default:return(0,d.jsx)(W.A,{color:"disabled",fontSize:"small"})}})(A[a.key])}),(0,d.jsx)(V.A,{primary:a.label,primaryTypographyProps:{variant:"body2",noWrap:!0,title:a.label}})]},a.key))}),x&&(0,d.jsxs)(P.A,{severity:"error",sx:{mt:2,whiteSpace:"pre-wrap"},children:[x,k&&(0,d.jsx)(O.A,{variant:"body2",sx:{mt:1},children:"The server was left stopped. Adjust the install/build commands via Edit, then re-enable it."})]}),u&&(0,d.jsxs)(P.A,{severity:"success",sx:{mt:2},children:["Server updated successfully",k?" and restarted":"","."]}),D&&(0,d.jsx)(N.default,{sx:{mt:2,p:1,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:200},children:D})]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(M.A,{onClick:b,disabled:s,children:u?"Close":"Cancel"}),!u&&(0,d.jsx)(M.A,{variant:"contained",color:"primary",startIcon:(0,d.jsx)(v.A,{}),onClick:aa,disabled:s||ac,children:s?"Updating…":x?"Retry Update":"Update"})]})]})};var _=c(23744),aa=c(60839),ab=c(30818),ac=c(37489),ad=c(43312),ae=c(44079),af=c(27114),ag=c(67191),ah=c(98463);let ai=(0,f.h)("frontend/components/mcp/MCPServerManager/ServerCard"),aj=({name:a,status:b,path:f,enabled:D,transport:E,onToggle:F=()=>{},onRetry:G=()=>{},onDelete:Q=()=>{},onClick:S,onEdit:T=()=>{},onAuthenticate:U,pickerMode:V=!1,error:W,stderrOutput:Y,authorizationUrl:Z,selected:aj=!1,onSelect:ak,selectionMode:al=!1,hasOAuthTokens:am=!1,exposeAsMcpServer:an=!1,enableMcpApps:ao=!1,updateInfo:ap,installCommand:aq,buildCommand:ar,onUpdated:as,folder:at,folders:au=[],onSetFolder:av,favorite:aw=!1,onToggleFavorite:ax,serverConfig:ay})=>{let[az,aA]=(0,e.useState)(!1),[aB,aC]=(0,e.useState)(null),[aD,aE]=(0,e.useState)(!1),[aF,aG]=(0,e.useState)(!1),[aH,aI]=(0,e.useState)(""),[aJ,aK]=(0,e.useState)("success"),[aL,aM]=(0,e.useState)(!1),[aN,aO]=(0,e.useState)(!1),[aP,aQ]=(0,e.useState)(an),[aR,aS]=(0,e.useState)(ao),aT=(0,aa.A)();(0,e.useEffect)(()=>{aQ(an)},[an]),(0,e.useEffect)(()=>{aS(ao)},[ao]);let aU=async b=>{aQ(b);let c=await A.S.updateServerConfig(a,{exposeAsMcpServer:b});"success"in c&&c.success?(aI(b?"Server is now exposed to external apps.":"Server is no longer exposed."),aK("success")):(aQ(!b),aI("Failed to update exposure setting."),aK("error")),aG(!0)},aV=async b=>{aS(b);let c=await A.S.updateServerConfig(a,{enableMcpApps:b});"success"in c&&c.success?(aI(b?"This server may now render interactive apps in chat (sandboxed).":"Interactive apps disabled for this server."),aK("success")):(aS(!b),aI("Failed to update the MCP Apps setting."),aK("error")),aG(!0)},aW={connected:"success.main",disconnected:"text.secondary",error:"error.main",connecting:"info.main",initialization:"info.main",requires_authentication:"warning.main"}[b];(0,e.useEffect)(()=>{if(("connecting"===b||"initialization"===b)&&D&&!V){aM(!0);let b=setTimeout(()=>{ai.debug(`Polling status for server: ${a}`),G()},2e3);return()=>{clearTimeout(b),aM(!1)}}"connecting"!==b&&"initialization"!==b&&aM(!1)},[b,D,a,G]);let[aX,aY]=(0,e.useState)(null);(0,e.useEffect)(()=>()=>{aX&&clearTimeout(aX)},[aX]);let aZ=async b=>{b.stopPropagation(),ai.debug(`Reset OAuth tokens button clicked for server: ${a}`),aO(!0);try{let b=await fetch("/api/oauth/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to reset OAuth tokens")}let c=await b.json();ai.info(`OAuth tokens reset successfully for ${a}`,c),aI("OAuth tokens reset successfully. Server will require re-authentication."),aK("success"),aG(!0),setTimeout(()=>{G()},500)}catch(b){ai.error(`Failed to reset OAuth tokens for ${a}`,b),aI(`Failed to reset OAuth tokens: ${b instanceof Error?b.message:"Unknown error"}`),aK("error"),aG(!0)}finally{aO(!1)}},{getThemeValue:a$,getThemeColor:a_,colors:a0}=(0,g.Ic)(),a1=()=>{ai.debug(`Server restart initiated for: ${a}`),F(!1),setTimeout(()=>{F(!0),ai.info(`Server ${a} restarted`)},1e3)};return(0,d.jsxs)(ab.A,{role:V?"button":void 0,"aria-pressed":V?aj:void 0,sx:{cursor:"pointer",position:"relative",height:V?"100%":void 0,overflow:"hidden",transition:"transform 200ms ease, box-shadow 200ms ease, border-color 180ms ease",border:a=>`1px solid ${V&&aj?a.palette.primary.main:a.palette.divider}`,boxShadow:V&&aj?`0 0 0 3px ${(0,ac.X4)(aT.palette.primary.main,.13)}`:void 0,"&:hover":{borderColor:(0,ac.X4)(aT.palette.primary.main,.38),boxShadow:`0 22px 60px ${(0,ac.X4)(aT.palette.primary.main,.12)}`,transform:"translateY(-4px)"}},onClick:()=>{ai.debug(`Server card clicked: ${a}`),S()},children:[ax&&(0,d.jsx)(ad.A,{title:aw?"Remove from favorites":"Add to favorites",arrow:!0,placement:"top",children:(0,d.jsx)(ae.A,{size:"small","aria-label":aw?"remove from favorites":"add to favorites",onClick:a=>{a.stopPropagation(),ax()},sx:{position:"absolute",top:4,left:4,zIndex:2,color:aw?aT.palette.warning.main:aT.palette.text.secondary,backgroundColor:(0,ac.X4)(aT.palette.background.paper,.6),"&:hover":{backgroundColor:(0,ac.X4)(aT.palette.background.paper,.9)}},children:aw?(0,d.jsx)(w.A,{fontSize:"small"}):(0,d.jsx)(x.A,{fontSize:"small"})})}),(0,d.jsxs)(af.A,{sx:{pb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",mb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",flex:1},children:[al&&ak&&(0,d.jsx)(R.A,{checked:aj,onClick:a=>a.stopPropagation(),onChange:a=>ak(a.target.checked),size:"small",sx:{mr:1,p:.5}}),(0,d.jsx)(O.A,{variant:"h6",component:"h3",sx:{flex:1},children:a})]}),(0,d.jsxs)(N.default,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:.5},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[ap?.updateAvailable&&(0,d.jsx)(ad.A,{title:`Update available: ${(0,X.Fu)(ap.localSha)} → ${(0,X.Fu)(ap.remoteSha)}. Click to update.`,children:(0,d.jsx)(C.A,{icon:(0,d.jsx)(v.A,{}),label:"Update",color:"warning",size:"small",onClick:b=>{b.stopPropagation(),ai.debug(`Update badge clicked for server: ${a}`),aE(!0)}})}),(0,d.jsx)(H,{transport:E,size:"small"})]}),(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:["connected"===b&&(0,d.jsx)(h.A,{color:"success",sx:{mr:.5},fontSize:"small"}),"disconnected"===b&&(0,d.jsx)(i.A,{color:"action",sx:{mr:.5},fontSize:"small"}),"error"===b&&(0,d.jsx)(j.A,{color:"error",sx:{mr:.5},fontSize:"small"}),"requires_authentication"===b&&(0,d.jsx)(n.A,{color:"warning",sx:{mr:.5},fontSize:"small"}),("connecting"===b||"initialization"===b)&&(0,d.jsx)(y.default,{size:"small",color:"primary",sx:{mr:.5}}),(0,d.jsx)(O.A,{variant:"body2",color:aW,children:"requires_authentication"===b?"Requires Authentication":b})]})]})]}),(0,d.jsx)(O.A,{variant:"body2",color:"text.secondary",sx:{mb:1,fontSize:"0.875rem"},noWrap:!0,title:f,children:f}),!V&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1,p:1.1,borderRadius:2.5,border:"1px solid",borderColor:"divider",bgcolor:(0,ac.X4)(aT.palette.background.default,.42)},onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(q.A,{fontSize:"small",sx:{mr:.5,color:aP?"primary.main":"text.disabled"}}),(0,d.jsx)(ag.A,{checked:aP,onChange:a=>aU(a.target.checked),size:"small"}),(0,d.jsx)(ad.A,{title:"Re-expose this server's tools to external MCP clients (Claude Desktop, Cursor, …) at a local URL.",children:(0,d.jsx)(O.A,{variant:"body2",sx:{fontWeight:500},children:"Expose to external apps"})})]}),aP&&(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(O.A,{variant:"caption",sx:{flex:1,fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:"",children:""}),(0,d.jsx)(ad.A,{title:"Copy endpoint URL",children:(0,d.jsx)(ae.A,{size:"small",onClick:()=>{navigator.clipboard.writeText(""),aI("Endpoint URL copied to clipboard."),aK("success"),aG(!0)},children:(0,d.jsx)(s.A,{fontSize:"small"})})}),(0,d.jsx)(ad.A,{title:"Copy MCP server JSON",children:(0,d.jsx)(ae.A,{size:"small",onClick:()=>{navigator.clipboard.writeText((0,B.CZ)(a,ay,"")),aI("Server JSON copied to clipboard."),aK("success"),aG(!0)},children:(0,d.jsx)(t.A,{fontSize:"small"})})})]})]}),!V&&(0,d.jsx)(N.default,{sx:{mt:1,mb:1,p:1.1,borderRadius:2.5,border:"1px solid",borderColor:"divider",bgcolor:(0,ac.X4)(aT.palette.background.default,.42)},onClick:a=>a.stopPropagation(),children:(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(r.A,{fontSize:"small",sx:{mr:.5,color:aR?"primary.main":"text.disabled"}}),(0,d.jsx)(ag.A,{checked:aR,onChange:a=>aV(a.target.checked),size:"small"}),(0,d.jsx)(ad.A,{title:"Allow this server's tools to render isolated interactive apps (MCP Apps / ui:// resources) and broker same-server tool/resource requests. Only enable for servers you trust.",children:(0,d.jsx)(O.A,{variant:"body2",sx:{fontWeight:500},children:"Render interactive apps"})})]})}),"error"===b&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:.5},children:[(0,d.jsx)(O.A,{variant:"body2",fontWeight:"medium",color:"error",children:"Error:"}),(0,d.jsx)(M.A,{size:"small",color:"primary",onClick:b=>{b.stopPropagation(),ai.debug(`View full error clicked for server: ${a}`),aA(!0)},children:"View Full Error"})]}),(0,d.jsx)(N.default,{sx:{maxHeight:"80px",overflow:"auto",p:1,borderRadius:1,bgcolor:a=>a_("error.background"),color:a=>a_("error.text"),border:"1px solid",borderColor:a=>a_("error.border"),fontSize:"0.75rem",fontWeight:500,whiteSpace:"pre-wrap"},children:W||"Unknown error"})]}),"requires_authentication"===b&&!V&&(0,d.jsxs)(N.default,{sx:{mt:1,mb:1},children:[(0,d.jsx)(N.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:1},children:(0,d.jsx)(O.A,{variant:"body2",fontWeight:"medium",color:"warning.main",children:"Authentication Required"})}),(0,d.jsxs)(M.A,{variant:"contained",color:"warning",size:"small",startIcon:(0,d.jsx)(o.A,{}),onClick:async b=>{if(b.stopPropagation(),ai.debug(`Authenticate button clicked for server: ${a}`),U)U();else try{let b=await fetch("/api/oauth/initiate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({serverName:a})});if(!b.ok){let a=await b.json();throw Error(a.error||"Failed to initiate OAuth")}let{authorizationUrl:d,alreadyAuthorized:e}=await b.json();if(e||!d){ai.info(`Server ${a} already authorized, no popup needed`),a1();return}let{openOAuthPopup:f}=await c.e(558).then(c.bind(c,60558));await f({url:d,windowName:`oauth_${a}`,onSuccess:b=>{ai.info(`OAuth authentication successful for ${a}`,b),ai.info(`Automatically restarting server ${a} after OAuth completion`),a1()},onError:b=>{ai.error(`OAuth authentication failed for ${a}`,b),aI("OAuth authentication failed"),aK("error"),aG(!0)}})}catch(b){ai.error(`Failed to start OAuth authentication for ${a}`,b),aI("Failed to start OAuth authentication"),aK("error"),aG(!0)}},sx:{width:"100%"},children:["Authenticate with ",a]})]})]}),!V&&(0,d.jsxs)(ah.A,{sx:{justifyContent:"space-between",px:2,py:1},children:[(0,d.jsxs)(N.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(ag.A,{checked:D,onClick:a=>a.stopPropagation(),onChange:b=>{ai.debug(`Server ${a} toggle changed to: ${b.target.checked}`),F(b.target.checked)},color:"primary",size:"small"}),(0,d.jsx)(O.A,{variant:"body2",sx:{ml:.5,fontWeight:500,color:D?"primary.main":"text.secondary"},children:D?"Enabled":"Disabled"}),D&&(0,d.jsx)(ad.A,{title:"Restart server",children:(0,d.jsx)(ae.A,{size:"small",onClick:b=>{b.stopPropagation(),ai.debug(`Restart button clicked for server: ${a}`),a1()},sx:{ml:1},children:(0,d.jsx)(k.A,{fontSize:"small"})})})]}),(0,d.jsxs)(N.default,{children:[(0,d.jsx)(ad.A,{title:"Retry connection",children:(0,d.jsx)(ae.A,{color:"primary",onClick:c=>{c.stopPropagation(),ai.debug(`Retry button clicked for server: ${a}`),aX&&clearTimeout(aX),aM(!0),G();let d=setTimeout(()=>{"connecting"!==b&&"initialization"!==b&&aM(!1),aY(null)},1e4);aY(d)},disabled:aL,size:"small",children:aL?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(k.A,{})})}),"streamable"===E&&am&&(0,d.jsx)(ad.A,{title:"Reset OAuth tokens",children:(0,d.jsx)(ae.A,{color:"warning",onClick:aZ,disabled:aN,size:"small",children:aN?(0,d.jsx)(y.default,{size:"small",color:"primary"}):(0,d.jsx)(p.A,{})})}),av&&(0,d.jsx)(ad.A,{title:at?`Folder: ${at}`:"Move to folder",children:(0,d.jsx)(ae.A,{color:at?"primary":"default",onClick:a=>{a.stopPropagation(),aC(a.currentTarget)},size:"small",children:(0,d.jsx)(u.A,{})})}),(0,d.jsx)(ad.A,{title:"Edit server",children:(0,d.jsx)(ae.A,{color:"primary",onClick:a=>{a.stopPropagation(),T()},size:"small",children:(0,d.jsx)(l.A,{})})}),(0,d.jsx)(ad.A,{title:"Delete server",children:(0,d.jsx)(ae.A,{color:"error",onClick:a=>{a.stopPropagation(),Q()},size:"small",children:(0,d.jsx)(m.A,{})})})]})]}),av&&(0,d.jsx)(z.A,{anchorEl:aB,open:!!aB,currentFolder:at,folders:au,onClose:()=>aC(null),onAssign:a=>av(a)}),(0,d.jsxs)(I.A,{open:az,onClose:()=>{ai.debug(`Error modal closed for server: ${a}`),aA(!1)},maxWidth:"md",fullWidth:!0,onClick:a=>a.stopPropagation(),children:[(0,d.jsxs)(J.A,{component:"div",children:["Error Details for ",a]}),(0,d.jsxs)(K.A,{children:[(0,d.jsx)(N.default,{sx:{p:2,borderRadius:1,bgcolor:a=>a_("error.background"),color:a=>a_("error.text"),border:"1px solid",borderColor:a=>a_("error.border"),fontFamily:"monospace",fontSize:"0.875rem",fontWeight:500,whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px",mb:2},children:W||"Unknown error"}),Y&&(0,d.jsxs)(N.default,{sx:{mt:2},children:[(0,d.jsx)(O.A,{variant:"h6",gutterBottom:!0,children:"Stderr Output:"}),(0,d.jsx)(N.default,{sx:{p:2,borderRadius:1,bgcolor:"background.paper",border:"1px solid",borderColor:"divider",fontFamily:"monospace",fontSize:"0.875rem",whiteSpace:"pre-wrap",overflow:"auto",maxHeight:"300px"},children:Y})]})]}),(0,d.jsxs)(L.A,{children:[(0,d.jsx)(M.A,{onClick:()=>aA(!1),children:"Close"}),(0,d.jsx)(M.A,{onClick:()=>{let b=[W||"Unknown error",Y?`
|
|
3
|
+
|
|
4
|
+
Stderr Output:
|
|
5
|
+
${Y}`:""].join("");navigator.clipboard.writeText(b),ai.debug(`Error copied to clipboard for server: ${a}`),aI("Error message copied to clipboard"),aK("success"),aG(!0)},color:"primary",children:"Copy to Clipboard"})]})]}),ap&&(0,d.jsx)($,{open:aD,onClose:()=>aE(!1),serverName:a,rootPath:f,installCommand:aq,buildCommand:ar,enabled:D,updateInfo:ap,onToggle:F,onUpdated:as}),(0,d.jsx)(_.A,{open:aF,autoHideDuration:3e3,onClose:()=>aG(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},children:(0,d.jsx)(P.A,{onClose:()=>aG(!1),severity:aJ,sx:{width:"100%"},children:aH||"Error message copied to clipboard"})})]})}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
exports.id=7628,exports.ids=[7628],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},22084:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(93868);function e(a){let b=new Set,c=a=>{if("string"==typeof a){for(let c of function(a){let b;if("string"!=typeof a)return[];let c=[],e=RegExp(d.HQ.source,"g");for(;null!==(b=e.exec(a));)c.includes(b[1])||c.push(b[1]);return c}(a))b.add(c);return}if(Array.isArray(a)){for(let b of a)c(b);return}if(a&&"object"==typeof a)for(let b of Object.values(a))c(b)};return c(a),Array.from(b)}},25113:(a,b,c)=>{"use strict";c.d(b,{$j:()=>k,Xw:()=>g,Zp:()=>j});var d=c(93868),e=c(22084),f=c(63564);function g(a){let b=new Set,c=new Set,d=new Set;for(let e of a.nodes??[]){let a=e.data?.properties??{},f=e.data?.type??e.type,g=a.flowId??a.subflowId??a.subFlowId;"subflow"===f&&"string"==typeof g&&g&&b.add(g);let h=a.boundModel??a.modelId??a.model;if("string"==typeof h&&h&&c.add(h),"mcp"===f){let b=a.boundServer??a.mcpServer??a.serverName??a.server;"string"==typeof b&&b&&d.add(b)}}let e={};return b.size&&(e.flowIds=Array.from(b)),c.size&&(e.modelIds=Array.from(c)),d.size&&(e.mcpServerNames=Array.from(d)),e}function h({model:a,apiKeyRef:b}){let{ApiKey:c,...d}=a;return{...d,apiKeyRef:b??{kind:"none"}}}function i(a){let b=JSON.parse(JSON.stringify(a));return b.trigger&&"webhook"===b.trigger.type&&delete b.trigger.token,b}function j(a){let b={schemaVersion:1,id:a.id,name:a.name,description:a.description,version:a.version,author:a.author,publisher:a.publisher,tags:a.tags,requiredGlobals:a.requiredGlobals,globals:a.globals,secrets:a.secrets??[],models:(a.models??[]).map(h),mcpServers:a.mcpServers??[],flows:(a.flows??[]).map(a=>{let b=g(a);return Object.keys(b).length?{flow:a,references:b}:{flow:a}}),plannedExecutions:(a.plannedExecutions??[]).map(i)};if((0,f.AG)(b))throw Error("Refusing to serialize package: an 'encrypted:' value was found (secret material must never be packaged).");let c=f._M.parse(b),e=JSON.stringify(c),j=new TextEncoder().encode(e).length;if(j>d.j6)throw Error(`Package exceeds size cap: ${j} bytes > ${d.j6} bytes.`);return{json:e,package:c}}function k(a){let b=f._M.safeParse(a);if(!b.success)return{success:!1,errors:b.error.issues.map(a=>{let b=a.path.join(".");return b?`${b}: ${a.message}`:a.message})};let c=b.data;return{success:!0,data:c,warnings:function(a){let b=new Set((0,e.D)(a));for(let c of a.models)"secret"===c.apiKeyRef.kind&&b.add(c.apiKeyRef.secret);for(let c of a.mcpServers)for(let a of[...c.envDeclarations,...c.headerDeclarations??[]])a.secretRef&&b.add(a.secretRef);return a.secrets.filter(a=>!b.has(a.name)).map(a=>`secret "${a.name}" is declared but never referenced`)}(c)}}},41115:(a,b,c)=>{"use strict";c.d(b,{$:()=>h,v5:()=>g});var d=c(10641);let e=new Set(["localhost","127.0.0.1","::1"]);function f(a){let b=a.toLowerCase();return!!e.has(b)||(function(){let a=process.env.FLUJO_EXTRA_LOCAL_HOSTS;return a?a.split(",").map(a=>a.trim().toLowerCase()).filter(a=>a.length>0&&"."!==a):[]})().some(a=>a.startsWith(".")?b.endsWith(a):b===a)}function g(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!f(c))return!1;if(b)try{if(!f(new URL(b).hostname))return!1}catch{return!1}return!0}function h(a){return g(a.headers.get("host"),a.headers.get("origin"))?null:d.NextResponse.json({error:"Forbidden: this endpoint only accepts local requests."},{status:403})}},63564:(a,b,c)=>{"use strict";c.d(b,{AG:()=>g,_M:()=>r});var d=c(10522),e=c(93868),f=c(22084);function g(a){return"string"==typeof a?a.startsWith(e.Mp):Array.isArray(a)?a.some(g):!!a&&"object"==typeof a&&Object.values(a).some(g)}let h=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid secret name"),description:d.Yj().optional(),required:d.zM(),default:d.Yj().optional()}).strict(),i=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid global variable name"),description:d.Yj().optional(),required:d.zM(),isSecret:d.zM().optional()}).strict(),j=d.gM("kind",[d.Ik({kind:d.eu("secret"),secret:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("global"),var:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("none")}).strict()]),k=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),displayName:d.Yj().optional(),description:d.Yj().optional(),baseUrl:d.Yj().optional(),provider:d.Yj().optional(),adapter:d.Yj().optional(),promptTemplate:d.Yj().optional(),reasoningSchema:d.Yj().optional(),temperature:d.Yj().optional(),reasoningEffort:d.k5(["minimal","low","medium","high","xhigh","max","ultra"]).optional(),thinkingLevel:d.k5(["minimal","low","medium","high"]).optional(),thinkingBudget:d.ai().int().min(-1).optional(),serviceTier:d.k5(["default","priority"]).optional(),functionCallingSchema:d.Yj().optional(),contextWindow:d.ai().optional(),maxTurns:d.ai().optional(),maxTokens:d.ai().optional(),folder:d.Yj().optional(),favorite:d.zM().optional(),apiKeyRef:j}).strict(),l=d.Ik({sourceType:d.k5(["github","registry","marketplace","remote"]),ref:d.Yj().optional(),url:d.Yj().optional(),name:d.Yj().optional()}).strict().superRefine((a,b)=>{"remote"!==a.sourceType||a.url||b.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==a.sourceType&&"registry"!==a.sourceType||a.ref||b.addIssue({code:"custom",message:`installOrigin '${a.sourceType}' requires a ref`})}),m=d.Ik({name:d.Yj().min(1),isSecret:d.zM(),secretRef:d.Yj().optional(),globalVar:d.Yj().optional(),globalTemplate:d.Yj().optional()}).strict().superRefine((a,b)=>{void 0===a.globalTemplate||/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.globalTemplate)||b.addIssue({code:"custom",path:["globalTemplate"],message:"globalTemplate must contain at least one ${global:NAME} reference"})}),n=d.Ik({index:d.ai().int().nonnegative(),value:d.Yj().min(1)}).strict().superRefine((a,b)=>{/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.value)||b.addIssue({code:"custom",path:["value"],message:"argument template must contain at least one ${global:NAME} reference"})}),o=d.Ik({name:d.Yj().min(1),transport:d.k5(["stdio","sse","streamable","websocket"]),disabled:d.zM().optional(),autoApprove:d.YO(d.Yj()).optional(),folder:d.Yj().optional(),installOrigin:l,envDeclarations:d.YO(m),headerDeclarations:d.YO(m).optional(),argTemplates:d.YO(n).optional()}).strict(),p=d.Ik({flow:d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),nodes:d.YO(d.bz()),edges:d.YO(d.bz())}).catchall(d.L5()),references:d.Ik({flowIds:d.YO(d.Yj()).optional(),modelIds:d.YO(d.Yj()).optional(),mcpServerNames:d.YO(d.Yj()).optional()}).optional()}),q=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),enabled:d.zM(),flowId:d.Yj().min(1),prompt:d.Yj(),trigger:d.bz()}).catchall(d.L5()),r=d.Ik({schemaVersion:d.eu(e.EL),id:d.Yj().min(1),name:d.Yj().min(1),description:d.Yj().optional(),version:d.Yj().regex(e.po,"version must be valid semver"),author:d.Yj().optional(),publisher:d.Yj().optional(),tags:d.YO(d.Yj()).optional(),requiredGlobals:d.YO(d.Yj()).optional(),globals:d.YO(i).optional(),secrets:d.YO(h),models:d.YO(k),mcpServers:d.YO(o),flows:d.YO(p),plannedExecutions:d.YO(q)}).superRefine((a,b)=>{g(a)&&b.addIssue({code:"custom",message:`package contains an '${e.Mp}' value; secret material must never be serialized`});let c=new Set(a.secrets.map(a=>a.name)),d=new Set((0,f.D)(a));for(let b of a.models)"secret"===b.apiKeyRef.kind&&d.add(b.apiKeyRef.secret);for(let b of a.mcpServers)for(let a of[...b.envDeclarations,...b.headerDeclarations??[]])a.secretRef&&d.add(a.secretRef);for(let a of d)c.has(a)||b.addIssue({code:"custom",message:`secret "${a}" is referenced but not declared in secrets[]`});let h=new Set(a.flows.map(a=>a.flow.id));a.plannedExecutions.forEach((a,c)=>{h.has(a.flowId)||b.addIssue({code:"custom",path:["plannedExecutions",c,"flowId"],message:`plannedExecution "${a.name}" references unknown flow id "${a.flowId}"`})}),a.flows.forEach((a,c)=>{for(let d of a.references?.flowIds??[])h.has(d)||b.addIssue({code:"custom",path:["flows",c,"references","flowIds"],message:`flow "${a.flow.name}" references unknown subflow id "${d}"`})})})},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(38844),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Z.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(l,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(m,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},78335:()=>{},91959:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>d.V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>d.resolveGlobalVars,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>d.G});var d=c(73456)},93868:(a,b,c)=>{"use strict";c.d(b,{EL:()=>d,HQ:()=>f,IE:()=>i,Mp:()=>g,j6:()=>e,mQ:()=>h,po:()=>j});let d=1,e=2097152,f=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,g="encrypted:",h=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,i=/^[A-Za-z0-9_.-]+$/,j=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/},96487:()=>{}};
|
|
1
|
+
exports.id=7628,exports.ids=[7628],exports.modules={3676:(a,b,c)=>{"use strict";c.d(b,{Wj:()=>h,ln:()=>g});var d=c(10641),e=c(58739);let f="encryption_locked";async function g(){return(0,e.isEncryptionLocked)()}async function h(a){return await g()?a?.openai?d.NextResponse.json({error:{message:"Encryption is locked. Unlock FLUJO to continue.",type:f,code:f,param:null}},{status:423}):d.NextResponse.json({error:f},{status:423}):null}},22084:(a,b,c)=>{"use strict";c.d(b,{D:()=>e});var d=c(93868);function e(a){let b=new Set,c=a=>{if("string"==typeof a){for(let c of function(a){let b;if("string"!=typeof a)return[];let c=[],e=RegExp(d.HQ.source,"g");for(;null!==(b=e.exec(a));)c.includes(b[1])||c.push(b[1]);return c}(a))b.add(c);return}if(Array.isArray(a)){for(let b of a)c(b);return}if(a&&"object"==typeof a)for(let b of Object.values(a))c(b)};return c(a),Array.from(b)}},25113:(a,b,c)=>{"use strict";c.d(b,{$j:()=>k,Xw:()=>g,Zp:()=>j});var d=c(93868),e=c(22084),f=c(63564);function g(a){let b=new Set,c=new Set,d=new Set;for(let e of a.nodes??[]){let a=e.data?.properties??{},f=e.data?.type??e.type,g=a.flowId??a.subflowId??a.subFlowId;"subflow"===f&&"string"==typeof g&&g&&b.add(g);let h=a.boundModel??a.modelId??a.model;if("string"==typeof h&&h&&c.add(h),"mcp"===f){let b=a.boundServer??a.mcpServer??a.serverName??a.server;"string"==typeof b&&b&&d.add(b)}}let e={};return b.size&&(e.flowIds=Array.from(b)),c.size&&(e.modelIds=Array.from(c)),d.size&&(e.mcpServerNames=Array.from(d)),e}function h({model:a,apiKeyRef:b}){let{ApiKey:c,...d}=a;return{...d,apiKeyRef:b??{kind:"none"}}}function i(a){let b=JSON.parse(JSON.stringify(a));return b.trigger&&"webhook"===b.trigger.type&&delete b.trigger.token,b}function j(a){let b={schemaVersion:1,id:a.id,name:a.name,description:a.description,version:a.version,author:a.author,publisher:a.publisher,tags:a.tags,requiredGlobals:a.requiredGlobals,globals:a.globals,secrets:a.secrets??[],models:(a.models??[]).map(h),mcpServers:a.mcpServers??[],flows:(a.flows??[]).map(a=>{let b=g(a);return Object.keys(b).length?{flow:a,references:b}:{flow:a}}),plannedExecutions:(a.plannedExecutions??[]).map(i)};if((0,f.AG)(b))throw Error("Refusing to serialize package: an 'encrypted:' value was found (secret material must never be packaged).");let c=f._M.parse(b),e=JSON.stringify(c),j=new TextEncoder().encode(e).length;if(j>d.j6)throw Error(`Package exceeds size cap: ${j} bytes > ${d.j6} bytes.`);return{json:e,package:c}}function k(a){let b=f._M.safeParse(a);if(!b.success)return{success:!1,errors:b.error.issues.map(a=>{let b=a.path.join(".");return b?`${b}: ${a.message}`:a.message})};let c=b.data;return{success:!0,data:c,warnings:function(a){let b=new Set((0,e.D)(a));for(let c of a.models)"secret"===c.apiKeyRef.kind&&b.add(c.apiKeyRef.secret);for(let c of a.mcpServers)for(let a of[...c.envDeclarations,...c.headerDeclarations??[]])a.secretRef&&b.add(a.secretRef);return a.secrets.filter(a=>!b.has(a.name)).map(a=>`secret "${a.name}" is declared but never referenced`)}(c)}}},41115:(a,b,c)=>{"use strict";c.d(b,{$:()=>h,v5:()=>g});var d=c(10641);let e=new Set(["localhost","127.0.0.1","::1"]);function f(a){let b=a.toLowerCase();return!!e.has(b)||(function(){let a=process.env.FLUJO_EXTRA_LOCAL_HOSTS;return a?a.split(",").map(a=>a.trim().toLowerCase()).filter(a=>a.length>0&&"."!==a):[]})().some(a=>a.startsWith(".")?b.endsWith(a):b===a)}function g(a,b){let c=function(a){if(!a)return null;let b=a.trim();if(b.startsWith("[")){let a=b.indexOf("]");return a>0?b.slice(1,a):null}return b.split(":")[0]||null}(a);if(!c||!f(c))return!1;if(b)try{if(!f(new URL(b).hostname))return!1}catch{return!1}return!0}function h(a){return g(a.headers.get("host"),a.headers.get("origin"))?null:d.NextResponse.json({error:"Forbidden: this endpoint only accepts local requests."},{status:403})}},63564:(a,b,c)=>{"use strict";c.d(b,{AG:()=>g,_M:()=>r});var d=c(10522),e=c(93868),f=c(22084);function g(a){return"string"==typeof a?a.startsWith(e.Mp):Array.isArray(a)?a.some(g):!!a&&"object"==typeof a&&Object.values(a).some(g)}let h=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid secret name"),description:d.Yj().optional(),required:d.zM(),default:d.Yj().optional()}).strict(),i=d.Ik({name:d.Yj().min(1).regex(e.IE,"invalid global variable name"),description:d.Yj().optional(),required:d.zM(),isSecret:d.zM().optional()}).strict(),j=d.gM("kind",[d.Ik({kind:d.eu("secret"),secret:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("global"),var:d.Yj().min(1)}).strict(),d.Ik({kind:d.eu("none")}).strict()]),k=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),displayName:d.Yj().optional(),description:d.Yj().optional(),baseUrl:d.Yj().optional(),provider:d.Yj().optional(),adapter:d.Yj().optional(),promptTemplate:d.Yj().optional(),reasoningSchema:d.Yj().optional(),temperature:d.Yj().optional(),reasoningEffort:d.k5(["minimal","low","medium","high","xhigh","max","ultra"]).optional(),thinkingLevel:d.k5(["minimal","low","medium","high"]).optional(),thinkingBudget:d.ai().int().min(-1).optional(),serviceTier:d.k5(["default","priority"]).optional(),functionCallingSchema:d.Yj().optional(),contextWindow:d.ai().optional(),maxTurns:d.ai().optional(),maxTokens:d.ai().optional(),folder:d.Yj().optional(),favorite:d.zM().optional(),apiKeyRef:j}).strict(),l=d.Ik({sourceType:d.k5(["github","registry","marketplace","remote"]),ref:d.Yj().optional(),gitRef:d.Yj().min(1).optional(),subdirectory:d.Yj().min(1).optional(),installCommand:d.Yj().min(1).max(4096).optional(),buildCommand:d.Yj().min(1).max(4096).optional(),url:d.Yj().optional(),name:d.Yj().optional()}).strict().superRefine((a,b)=>{"remote"!==a.sourceType||a.url||b.addIssue({code:"custom",message:"installOrigin 'remote' requires a url"}),"github"!==a.sourceType&&"registry"!==a.sourceType||a.ref||b.addIssue({code:"custom",message:`installOrigin '${a.sourceType}' requires a ref`})}),m=d.Ik({name:d.Yj().min(1),isSecret:d.zM(),secretRef:d.Yj().optional(),globalVar:d.Yj().optional(),globalTemplate:d.Yj().optional()}).strict().superRefine((a,b)=>{void 0===a.globalTemplate||/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.globalTemplate)||b.addIssue({code:"custom",path:["globalTemplate"],message:"globalTemplate must contain at least one ${global:NAME} reference"})}),n=d.Ik({index:d.ai().int().nonnegative(),value:d.Yj().min(1)}).strict().superRefine((a,b)=>{/\$\{global:[A-Za-z0-9_.-]+\}/.test(a.value)||b.addIssue({code:"custom",path:["value"],message:"argument template must contain at least one ${global:NAME} reference"})}),o=d.Ik({name:d.Yj().min(1),transport:d.k5(["stdio","sse","streamable","websocket"]),disabled:d.zM().optional(),autoApprove:d.YO(d.Yj()).optional(),folder:d.Yj().optional(),installOrigin:l,envDeclarations:d.YO(m),headerDeclarations:d.YO(m).optional(),argTemplates:d.YO(n).optional()}).strict(),p=d.Ik({flow:d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),nodes:d.YO(d.bz()),edges:d.YO(d.bz())}).catchall(d.L5()),references:d.Ik({flowIds:d.YO(d.Yj()).optional(),modelIds:d.YO(d.Yj()).optional(),mcpServerNames:d.YO(d.Yj()).optional()}).optional()}),q=d.Ik({id:d.Yj().min(1),name:d.Yj().min(1),enabled:d.zM(),flowId:d.Yj().min(1),prompt:d.Yj(),trigger:d.bz()}).catchall(d.L5()),r=d.Ik({schemaVersion:d.eu(e.EL),id:d.Yj().min(1),name:d.Yj().min(1),description:d.Yj().optional(),version:d.Yj().regex(e.po,"version must be valid semver"),author:d.Yj().optional(),publisher:d.Yj().optional(),tags:d.YO(d.Yj()).optional(),requiredGlobals:d.YO(d.Yj()).optional(),globals:d.YO(i).optional(),secrets:d.YO(h),models:d.YO(k),mcpServers:d.YO(o),flows:d.YO(p),plannedExecutions:d.YO(q)}).superRefine((a,b)=>{g(a)&&b.addIssue({code:"custom",message:`package contains an '${e.Mp}' value; secret material must never be serialized`});let c=new Set(a.secrets.map(a=>a.name)),d=new Set((0,f.D)(a));for(let b of a.models)"secret"===b.apiKeyRef.kind&&d.add(b.apiKeyRef.secret);for(let b of a.mcpServers)for(let a of[...b.envDeclarations,...b.headerDeclarations??[]])a.secretRef&&d.add(a.secretRef);for(let a of d)c.has(a)||b.addIssue({code:"custom",message:`secret "${a}" is referenced but not declared in secrets[]`});let h=new Set(a.flows.map(a=>a.flow.id));a.plannedExecutions.forEach((a,c)=>{h.has(a.flowId)||b.addIssue({code:"custom",path:["plannedExecutions",c,"flowId"],message:`plannedExecution "${a.name}" references unknown flow id "${a.flowId}"`})}),a.flows.forEach((a,c)=>{for(let d of a.references?.flowIds??[])h.has(d)||b.addIssue({code:"custom",path:["flows",c,"references","flowIds"],message:`flow "${a.flow.name}" references unknown subflow id "${d}"`})})})},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(38844),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Z.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i={},l=new Set;if(e)for(let[a,b]of Object.entries(d))i[a]=b.value,b.metadata.isSecret&&l.add(a);else i={...d};let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==i[b]){let e=i[b];if(!c&&(l.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await n(d);return b}return a},o=await n(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(o,null,2)),j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(l,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(m,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},78335:()=>{},91959:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>d.V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>d.resolveGlobalVars,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>d.G});var d=c(73456)},93868:(a,b,c)=>{"use strict";c.d(b,{EL:()=>d,HQ:()=>f,IE:()=>i,Mp:()=>g,j6:()=>e,mQ:()=>h,po:()=>j});let d=1,e=2097152,f=/\{\{secret\.([A-Za-z0-9_.-]+)\}\}/g,g="encrypted:",h=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,i=/^[A-Za-z0-9_.-]+$/,j=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?(?:\+[0-9A-Za-z-.]+)?$/},96487:()=>{}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=7630,exports.ids=[7630],exports.modules={5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":d&&"start-top"!==d?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},9312:(a,b,c)=>{c.d(b,{RB:()=>l,bD:()=>i,jY:()=>k,xv:()=>j});var d=c(50846),e=c(20433),f=c(60453),g=c(87821);let h=(0,d.h)("backend/services/flow/generationContext"),i=300;function j(a,b){let c=String(a).replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b).trimEnd()}…`}async function k(){let a=await e.modelService.loadModels(),b=a.map(a=>({id:a.id,name:a.name,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:j(a.description,100)}:{}})),c=[],d={};try{let a=await f.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a){if(b.disabled)continue;let a=!1;try{let c=await f.mcpService.getServerStatus(b.name);a=c?.status==="connected"}catch(a){h.debug(`getServerStatus failed for ${b.name}; listing name only`,a)}if(!a){c.push({name:b.name,connected:!1});continue}let{tools:e}=await f.mcpService.listServerTools(b.name),g=(e??[]).filter(a=>a.name).map(a=>({name:a.name,...a.description?{description:j(a.description,100)}:{}}));d[b.name]=g.map(a=>a.name),c.push({name:b.name,connected:!0,tools:g})}}catch(a){h.warn("Could not load MCP servers for the authoring context",a)}let k=[];try{k=await g.flowService.loadFlows()}catch(a){h.warn("Could not load flows for the authoring context",a)}let l={models:b,servers:c,flows:k.map(a=>({id:a.id,name:a.name,...a.description?{description:j(a.description,i)}:{},nodeCount:a.nodes?.length??0}))};return{blocks:l,compile:{models:a.map(a=>({id:a.id,name:a.name,displayName:a.displayName})),servers:c.map(a=>({name:a.name})),serverTools:d,flows:k.map(a=>({id:a.id,name:a.name}))},catalog:function(a){let b=[];for(let c of(b.push("AVAILABLE MODELS (reference by id or name):"),0===a.models.length&&b.push(" (none configured)"),a.models)){let a=c.displayName&&c.displayName!==c.name?`"${c.displayName}" (${c.name})`:c.name,d=c.description?` — ${c.description}`:"";b.push(` - id: ${c.id} — ${a}${d}`)}for(let c of(b.push("",'AVAILABLE MCP SERVERS (attach to process nodes via "servers"):'),0===a.servers.length&&b.push(" (none configured)"),a.servers)){if(!c.connected){b.push(` - ${c.name} (offline — tools unknown; may still be used)`);continue}b.push(` - ${c.name}:`);let a=(c.tools??[]).slice(0,20);for(let c of a){let a=c.description?` — ${c.description}`:"";b.push(` - ${c.name}${a}`)}let d=(c.tools?.length??0)-a.length;d>0&&b.push(` - …and ${d} more`)}for(let c of(b.push("",'EXISTING FLOWS (usable as subflow targets via "flow"):'),0===a.flows.length&&b.push(" (none)"),a.flows.slice(0,15))){let a=c.description?` — ${c.description}`:` — ${c.nodeCount} nodes`;b.push(` - "${c.name}"${a}`)}return a.flows.length>15&&b.push(` - …and ${a.flows.length-15} more`),b.join("\n")}(l),validatorServers:c.map(a=>({name:a.name,status:a.connected?"connected":"disconnected"}))}}function l(a,b){let c=[...a.map(a=>({severity:a.severity,code:a.code,message:a.message})),...b.issues],d=c.filter(a=>"error"===a.severity).length;return{issues:c,errorCount:d,warningCount:c.length-d,isRunnable:0===d}}},97630:(a,b,c)=>{c.d(b,{Jt:()=>m,Mr:()=>n,oW:()=>o});var d=c(81226),e=c(5248),f=c(84671),g=c(41527);let h=["prompt","isolatedPrompt","payloadTemplate"];function i(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function j(a,b){for(let c of h){let d=a[c];"string"==typeof d&&(a[c]=b(d))}Array.isArray(a.spawnBriefs)&&(a.spawnBriefs=a.spawnBriefs.map(a=>"string"==typeof a?b(a):a))}function k(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}var l=c(9312);let m=2,n=`GENERATED-FLOW PROCESS INPUT POLICY: every process node receives the full conversation. Use inputMode "full-history" or leave inputMode unset; NEVER emit inputMode "latest-message" on a process node. Generated process nodes that omit inputMode, or incorrectly request "latest-message", are deterministically compiled as "full-history". The advanced "isolated" mode remains available only when the task genuinely requires ignoring conversation history.
|
|
1
|
+
"use strict";exports.id=7630,exports.ids=[7630],exports.modules={5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":d&&"start-top"!==d?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},9312:(a,b,c)=>{c.d(b,{RB:()=>l,bD:()=>i,jY:()=>k,xv:()=>j});var d=c(50846),e=c(20433),f=c(49877),g=c(87821);let h=(0,d.h)("backend/services/flow/generationContext"),i=300;function j(a,b){let c=String(a).replace(/\s+/g," ").trim();return c.length<=b?c:`${c.slice(0,b).trimEnd()}…`}async function k(){let a=await e.modelService.loadModels(),b=a.map(a=>({id:a.id,name:a.name,...a.displayName?{displayName:a.displayName}:{},...a.description?{description:j(a.description,100)}:{}})),c=[],d={};try{let a=await f.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a){if(b.disabled)continue;let a=!1;try{let c=await f.mcpService.getServerStatus(b.name);a=c?.status==="connected"}catch(a){h.debug(`getServerStatus failed for ${b.name}; listing name only`,a)}if(!a){c.push({name:b.name,connected:!1});continue}let{tools:e}=await f.mcpService.listServerTools(b.name),g=(e??[]).filter(a=>a.name).map(a=>({name:a.name,...a.description?{description:j(a.description,100)}:{}}));d[b.name]=g.map(a=>a.name),c.push({name:b.name,connected:!0,tools:g})}}catch(a){h.warn("Could not load MCP servers for the authoring context",a)}let k=[];try{k=await g.flowService.loadFlows()}catch(a){h.warn("Could not load flows for the authoring context",a)}let l={models:b,servers:c,flows:k.map(a=>({id:a.id,name:a.name,...a.description?{description:j(a.description,i)}:{},nodeCount:a.nodes?.length??0}))};return{blocks:l,compile:{models:a.map(a=>({id:a.id,name:a.name,displayName:a.displayName})),servers:c.map(a=>({name:a.name})),serverTools:d,flows:k.map(a=>({id:a.id,name:a.name}))},catalog:function(a){let b=[];for(let c of(b.push("AVAILABLE MODELS (reference by id or name):"),0===a.models.length&&b.push(" (none configured)"),a.models)){let a=c.displayName&&c.displayName!==c.name?`"${c.displayName}" (${c.name})`:c.name,d=c.description?` — ${c.description}`:"";b.push(` - id: ${c.id} — ${a}${d}`)}for(let c of(b.push("",'AVAILABLE MCP SERVERS (attach to process nodes via "servers"):'),0===a.servers.length&&b.push(" (none configured)"),a.servers)){if(!c.connected){b.push(` - ${c.name} (offline — tools unknown; may still be used)`);continue}b.push(` - ${c.name}:`);let a=(c.tools??[]).slice(0,20);for(let c of a){let a=c.description?` — ${c.description}`:"";b.push(` - ${c.name}${a}`)}let d=(c.tools?.length??0)-a.length;d>0&&b.push(` - …and ${d} more`)}for(let c of(b.push("",'EXISTING FLOWS (usable as subflow targets via "flow"):'),0===a.flows.length&&b.push(" (none)"),a.flows.slice(0,15))){let a=c.description?` — ${c.description}`:` — ${c.nodeCount} nodes`;b.push(` - "${c.name}"${a}`)}return a.flows.length>15&&b.push(` - …and ${a.flows.length-15} more`),b.join("\n")}(l),validatorServers:c.map(a=>({name:a.name,status:a.connected?"connected":"disconnected"}))}}function l(a,b){let c=[...a.map(a=>({severity:a.severity,code:a.code,message:a.message})),...b.issues],d=c.filter(a=>"error"===a.severity).length;return{issues:c,errorCount:d,warningCount:c.length-d,isRunnable:0===d}}},97630:(a,b,c)=>{c.d(b,{Jt:()=>m,Mr:()=>n,oW:()=>o});var d=c(81226),e=c(5248),f=c(84671),g=c(41527);let h=["prompt","isolatedPrompt","payloadTemplate"];function i(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function j(a,b){for(let c of h){let d=a[c];"string"==typeof d&&(a[c]=b(d))}Array.isArray(a.spawnBriefs)&&(a.spawnBriefs=a.spawnBriefs.map(a=>"string"==typeof a?b(a):a))}function k(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}var l=c(9312);let m=2,n=`GENERATED-FLOW PROCESS INPUT POLICY: every process node receives the full conversation. Use inputMode "full-history" or leave inputMode unset; NEVER emit inputMode "latest-message" on a process node. Generated process nodes that omit inputMode, or incorrectly request "latest-message", are deterministically compiled as "full-history". The advanced "isolated" mode remains available only when the task genuinely requires ignoring conversation history.
|
|
2
2
|
|
|
3
3
|
GENERATED-FLOW OUTPUT DEFAULT (context saving): process nodes you leave without an explicit outputMode are compiled with outputMode "latest-message", so later steps see the node's final response but not its tool calls/results. When later steps need that intermediate work, set outputMode "full-conversation" explicitly.
|
|
4
4
|
|