flujo-ai 3.31.0 → 3.34.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 +384 -342
- package/.next/app-path-routes-manifest.json +23 -19
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +24 -24
- package/.next/react-loadable-manifest.json +29 -14
- package/.next/server/app/_not-found/page.js +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 +2 -2
- 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.js +1 -1
- package/.next/server/app/api/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route.js +3 -3
- 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.js +1 -1
- package/.next/server/app/api/cwd/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- 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/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 +28 -0
- package/.next/server/app/api/flow/generator/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -0
- 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 +1 -1
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +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/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.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/oauth/callback/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/oauth/initiate/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/packages/search/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route.js +1 -0
- package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -0
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +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.js.nft.json +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 -0
- package/.next/server/app/api/registry/packages/route.js.nft.json +1 -0
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/registry/publish/route.js +1 -1
- package/.next/server/app/api/registry/publish/route.js.nft.json +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.js.nft.json +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/storage/route.js +1 -1
- package/.next/server/app/api/storage/route.js.nft.json +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -0
- package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -0
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/update/route.js +1 -1
- package/.next/server/app/api/update/route.js.nft.json +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/chat/page.js +58 -10
- 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 +3 -3
- package/.next/server/app/docs/page.js +4 -5
- 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 +3 -3
- package/.next/server/app/executions/page.js +3 -2
- 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 +3 -3
- 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 +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/mcp/page.js +56 -5
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route.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 +1 -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 +3 -3
- package/.next/server/app/models/page.js +2 -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 +3 -3
- package/.next/server/app/page.js +5 -3
- 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 +3 -3
- 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 +2 -2
- 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/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]/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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/.next/server/app-paths-manifest.json +23 -19
- package/.next/server/chunks/1114.js +1 -1
- package/.next/server/chunks/1226.js +1 -1
- package/.next/server/chunks/1227.js +1 -0
- package/.next/server/chunks/1314.js +1 -1
- package/.next/server/chunks/1439.js +1 -0
- package/.next/server/chunks/1578.js +1 -1
- package/.next/server/chunks/1634.js +1 -1
- package/.next/server/chunks/166.js +5 -5
- package/.next/server/chunks/1664.js +2 -0
- package/.next/server/chunks/180.js +12 -0
- package/.next/server/chunks/227.js +1 -5
- package/.next/server/chunks/2273.js +2 -2
- package/.next/server/chunks/2372.js +2 -0
- package/.next/server/chunks/2859.js +1 -1
- package/.next/server/chunks/3128.js +4 -4
- package/.next/server/chunks/3653.js +2 -0
- package/.next/server/chunks/3717.js +1 -0
- package/.next/server/chunks/3855.js +1 -0
- package/.next/server/chunks/4013.js +1 -0
- package/.next/server/chunks/4308.js +4 -0
- package/.next/server/chunks/{4685.js → 4466.js} +1 -1
- package/.next/server/chunks/4551.js +1 -1
- package/.next/server/chunks/4663.js +1 -0
- package/.next/server/chunks/4771.js +1 -1
- package/.next/server/chunks/4822.js +1 -0
- package/.next/server/chunks/5067.js +1 -1
- package/.next/server/chunks/519.js +2 -0
- package/.next/server/chunks/5285.js +1 -0
- package/.next/server/chunks/5309.js +78 -0
- package/.next/server/chunks/544.js +28 -27
- package/.next/server/chunks/5463.js +1 -1
- package/.next/server/chunks/5544.js +5 -5
- package/.next/server/chunks/5703.js +2 -0
- package/.next/server/chunks/6034.js +1 -1
- package/.next/server/chunks/{5708.js → 6041.js} +3 -4
- package/.next/server/chunks/6226.js +1 -1
- package/.next/server/chunks/6747.js +435 -0
- package/.next/server/chunks/6967.js +82 -0
- package/.next/server/chunks/{5548.js → 7058.js} +2 -2
- package/.next/server/chunks/{4566.js → 7069.js} +3 -3
- package/.next/server/chunks/{2388.js → 7104.js} +1 -1
- package/.next/server/chunks/7519.js +1 -0
- package/.next/server/chunks/7628.js +1 -0
- package/.next/server/chunks/7630.js +11 -0
- package/.next/server/chunks/{3030.js → 7674.js} +1 -1
- package/.next/server/chunks/{2866.js → 7891.js} +2 -2
- package/.next/server/chunks/793.js +3 -3
- package/.next/server/chunks/7965.js +39 -0
- package/.next/server/chunks/{6404.js → 7993.js} +2 -2
- package/.next/server/chunks/8284.js +42 -0
- package/.next/server/chunks/8645.js +1 -1
- package/.next/server/chunks/87.js +1 -0
- package/.next/server/chunks/8739.js +1 -2
- package/.next/server/chunks/{3912.js → 9085.js} +2 -2
- package/.next/server/chunks/9235.js +29 -0
- package/.next/server/chunks/9724.js +3 -3
- package/.next/server/chunks/9983.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -1
- 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 +5 -5
- 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/Zz_Vh59XdtLIPcf-PxCpo/_buildManifest.js +1 -0
- package/.next/static/chunks/1675-773454288de4309d.js +1 -0
- package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
- package/.next/static/chunks/2318-13ef0d3048e97834.js +1 -0
- package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
- package/.next/static/chunks/361.bb75b03b740930cd.js +1 -0
- package/.next/static/chunks/3772-20197853c04a6993.js +1 -0
- package/.next/static/chunks/422-61b173ba64cf0c94.js +1 -0
- package/.next/static/chunks/{3189-fa8ec6d719d5e72b.js → 4386-e9621d3c94969a68.js} +1 -1
- package/.next/static/chunks/4555-c9070f8c79bccfad.js +39 -0
- package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
- package/.next/static/chunks/4929-150b03595474c9d8.js +1 -0
- package/.next/static/chunks/5733-1419095a28c1ddc3.js +1 -0
- package/.next/static/chunks/639-90ed75d402dc872b.js +1 -0
- package/.next/static/chunks/{3452-a639f121f2953f50.js → 6428-951188daa6f74b86.js} +3 -3
- package/.next/static/chunks/6430-8c6dac4a758119f2.js +1 -0
- package/.next/static/chunks/6539-118a0084e0bfae34.js +1 -0
- package/.next/static/chunks/6733-c9029143901e62e9.js +1 -0
- package/.next/static/chunks/7264-91d1fa99abcd91ad.js +1 -0
- package/.next/static/chunks/7328-c8a51bb8c7470d77.js +1 -0
- package/.next/static/chunks/7391-5a0abd837ba241f5.js +1 -0
- package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
- package/.next/static/chunks/8124-4a80e3201b8e51b0.js +1 -0
- package/.next/static/chunks/{2969.eb9ff8cd2a5034b0.js → 8345.bc5534ec13abc9ee.js} +1 -1
- package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
- package/.next/static/chunks/{8405.73e8be2c8e5b55c5.js → 8405.a425f94b6b13d2be.js} +1 -1
- package/.next/static/chunks/8551-a28272acfda62ac9.js +1 -0
- package/.next/static/chunks/8650-5294c6ed1173b014.js +1 -0
- package/.next/static/chunks/{9164-840f056a0e11d979.js → 9164-de1d167d87614a6d.js} +1 -1
- package/.next/static/chunks/9203-786f457ecf60b49c.js +1 -0
- package/.next/static/chunks/9345-11d6e48d892b1862.js +8 -0
- package/.next/static/chunks/9562-f8371be653010627.js +1 -0
- package/.next/static/chunks/981-dd289e60d81da0d1.js +1 -0
- package/.next/static/chunks/9951-566fc6b05c12209e.js +1 -0
- package/.next/static/chunks/app/api/approvals/[id]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/approvals/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/backup/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/browse/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/chat/page-bc7807593b8b7394.js +1 -0
- package/.next/static/chunks/app/docs/page-3b9ce48854b2147d.js +1 -0
- package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
- package/.next/static/chunks/app/flows/page-87fb466e491fc068.js +1 -0
- package/.next/static/chunks/app/layout-abed1f211e03152f.js +1 -0
- package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/models/page-a5e2437356b06db8.js +1 -0
- package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +1 -0
- package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
- package/.next/static/chunks/app/settings/page-2fc3a70bfd25c48b.js +1 -0
- package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +1 -0
- package/.next/static/chunks/app/waves/{page-3cf4b47b12662196.js → page-dc99a16141dd902b.js} +1 -1
- package/.next/static/chunks/webpack-d5d737ff6a86674f.js +1 -0
- package/.next/trace +10 -10
- package/.next/types/app/api/flow/generator/route.ts +347 -0
- package/.next/types/app/api/registry/feedback/route.ts +347 -0
- package/.next/types/app/api/registry/packages/route.ts +347 -0
- package/.next/types/app/api/telemetry/daily-active/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/README.md +58 -18
- package/next.config.mjs +2 -2
- package/package.json +3 -2
- package/.next/server/chunks/2180.js +0 -1
- package/.next/server/chunks/237.js +0 -1
- package/.next/server/chunks/3392.js +0 -82
- package/.next/server/chunks/3570.js +0 -372
- package/.next/server/chunks/4366.js +0 -2
- package/.next/server/chunks/4961.js +0 -2
- package/.next/server/chunks/5040.js +0 -53
- package/.next/server/chunks/510.js +0 -1
- package/.next/server/chunks/5150.js +0 -1
- package/.next/server/chunks/5561.js +0 -1
- package/.next/server/chunks/5705.js +0 -1
- package/.next/server/chunks/5829.js +0 -1
- package/.next/server/chunks/694.js +0 -3
- package/.next/server/chunks/7579.js +0 -83
- package/.next/server/chunks/7724.js +0 -1
- package/.next/server/chunks/8034.js +0 -1
- package/.next/server/chunks/8037.js +0 -1
- package/.next/server/chunks/8192.js +0 -12
- package/.next/server/chunks/826.js +0 -2
- package/.next/server/chunks/8366.js +0 -90
- package/.next/server/chunks/848.js +0 -39
- package/.next/server/chunks/8615.js +0 -1
- package/.next/server/chunks/8851.js +0 -1
- package/.next/server/chunks/9313.js +0 -1
- package/.next/server/chunks/9537.js +0 -39
- package/.next/server/chunks/9576.js +0 -2
- package/.next/server/chunks/9632.js +0 -1
- package/.next/server/chunks/9671.js +0 -1
- package/.next/server/chunks/9857.js +0 -1
- package/.next/static/chunks/1496-d478bce7d7c85080.js +0 -1
- package/.next/static/chunks/1572-b663a83bba28a0a1.js +0 -8
- package/.next/static/chunks/1641-e5ff8f112da0a335.js +0 -1
- package/.next/static/chunks/1988-bd73f26184e930c1.js +0 -1
- package/.next/static/chunks/2266-d812473724cc6643.js +0 -1
- package/.next/static/chunks/3089.a0856f8093b90939.js +0 -1
- package/.next/static/chunks/3560-5bdceef09b50e1c3.js +0 -1
- package/.next/static/chunks/3672-cd86ace43288da79.js +0 -1
- package/.next/static/chunks/3711-0050bb4d345c2c9c.js +0 -1
- package/.next/static/chunks/4147-20897d83b3cd3978.js +0 -39
- package/.next/static/chunks/435-17c79f3b9f8dd38d.js +0 -1
- package/.next/static/chunks/469-1f043fe082d9f475.js +0 -1
- package/.next/static/chunks/4740-62814d07b2b7f760.js +0 -1
- package/.next/static/chunks/5441-cb0c31de8bce65c3.js +0 -1
- package/.next/static/chunks/7111-44538f8a64241b74.js +0 -1
- package/.next/static/chunks/8041-05830e887c133085.js +0 -1
- package/.next/static/chunks/812-dfe7ba07ddb7a565.js +0 -1
- package/.next/static/chunks/8401-0f39d91810180a88.js +0 -1
- package/.next/static/chunks/8404-14ef0345dc401ac5.js +0 -1
- package/.next/static/chunks/8678-c6c6be2672f337f6.js +0 -1
- package/.next/static/chunks/8834-faf121e257b517d5.js +0 -1
- package/.next/static/chunks/8855-f802599c4af81cca.js +0 -1
- package/.next/static/chunks/9562-5494feecd8c6f7a3.js +0 -1
- package/.next/static/chunks/app/api/approvals/[id]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/approvals/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/backup/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/browse/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/bugs/enhance/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/env/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/improve/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/quick-chat/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/repair/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/flow/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/git/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/init/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/model/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/build/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/derive-secrets/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/install/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/install/status/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/installed/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/resolve/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/scan-targets/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/search/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/packages/uninstall/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/resend/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/reset/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/callback/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/publish/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/registry/settings/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/restore/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/runs/active/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/storage/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/update/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/waves/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/chat/page-558edb21321a32d0.js +0 -1
- package/.next/static/chunks/app/docs/page-fc30f613607b8a26.js +0 -1
- package/.next/static/chunks/app/executions/page-e71689c7256af1e8.js +0 -1
- package/.next/static/chunks/app/flows/page-e90e8d7b4c1bd1c8.js +0 -1
- package/.next/static/chunks/app/layout-038b35b382eef11d.js +0 -1
- package/.next/static/chunks/app/mcp/page-6041156fc67ef361.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/models/page-d16f2721e7a93b43.js +0 -1
- package/.next/static/chunks/app/packages/page-c6b0e7aa95bc1064.js +0 -1
- package/.next/static/chunks/app/page-5c7fccd019942d46.js +0 -1
- package/.next/static/chunks/app/settings/page-e3d9ffd69d16873a.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/chat/events/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/app/v1/models/route-1a4c9e7a416ccbcf.js +0 -1
- package/.next/static/chunks/webpack-2d8e0c13c0b865fe.js +0 -1
- package/.next/static/eaxwKaaFHlA1_FLDIyFGi/_buildManifest.js +0 -1
- /package/.next/static/{eaxwKaaFHlA1_FLDIyFGi → Zz_Vh59XdtLIPcf-PxCpo}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[77,109,282,312,397,405,624,638,761,846,1144,1189,1201,1225,1288,1337,1426,1490,1513,1677,1797,2047,2348,2437,2483,2567,2669,3190,3292,3318,3352,3369,3371,3551,3587,3623,3691,3932,4063,4216,4233,4267,4300,4524,4659,4693,4735,4806,4810,4825,4864,5196,5617,5618,5644,5817,6078,6600,6744,7002,7080,7144,7221,7276,7591,7599,7712,7822,7824,7845,8046,8063,8068,8084,8140,8201,8350,8467,8479,8510,8563,8888,8957,9128,9168,9217,9247,9487,9604,9661,9666,9726,9942,9959],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8457],{22573:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var l=n(95155);n(12115);var o=n(33567),r=n(94049),a=n(41983),s=n(25635),i=n(28548),d=n(50430),c=n(63186),u=n(91665);let f=e=>{let{label:t,count:n,expanded:f,onToggle:p,showFolderIcon:h=!1,children:g}=e,m=(0,o.A)();return(0,l.jsxs)(r.default,{sx:{mb:1.5},children:[(0,l.jsxs)(r.default,{role:"button",tabIndex:0,"aria-expanded":f,onClick:p,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),p())},sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.75,borderRadius:1,cursor:"pointer",userSelect:"none",backgroundColor:m.palette.background.default,border:"1px solid ".concat(m.palette.divider),"&:hover":{backgroundColor:m.palette.action.hover}},children:[(0,l.jsx)(a.A,{size:"small","aria-label":f?"Collapse section":"Expand section",onClick:e=>{e.stopPropagation(),p()},sx:{transition:"transform 0.2s",transform:f?"rotate(0deg)":"rotate(-90deg)"},children:(0,l.jsx)(c.A,{fontSize:"small"})}),h&&(0,l.jsx)(u.A,{fontSize:"small",sx:{color:"text.secondary"}}),(0,l.jsx)(s.default,{variant:"subtitle2",sx:{fontWeight:600},children:t}),(0,l.jsx)(i.A,{label:n,size:"small",sx:{height:20,fontSize:"0.7rem"}})]}),(0,l.jsx)(d.A,{in:f,unmountOnExit:!0,children:(0,l.jsx)(r.default,{sx:{pt:1.5},children:g})})]})}},27156:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var l=function(e){return e.MODELS="models",e.FLOWS="flows",e.CHAT_HISTORY="history",e.THEME="theme",e.ENCRYPTION_KEY="encryption_key",e.MCP_SERVERS="mcp_servers",e.GLOBAL_ENV_VARS="global_env_vars",e.CURRENT_CONVERSATION_ID="current_conversation_id",e.SELECTED_FLOW_ID="selected_flow_id",e.LAST_PICKED_FLOW_ID="last_picked_flow_id",e.SPEECH_SETTINGS="speech_settings",e.SPOTLIGHT_SERVERS="spotlight_servers",e.PLANNED_EXECUTIONS="planned_executions",e.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",e.MCP_QUALITY_SETTINGS="mcp_quality_settings",e.RUN_RESOURCE_SETTINGS="run_resource_settings",e.KV_STORE_SETTINGS="kv_store_settings",e.PENDING_APPROVALS="pending_approvals",e.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",e.PACKAGE_INSTALLS="package_installs",e.EXPERIMENTAL_SETTINGS="experimental_settings",e.REGISTRY_ACCOUNT="registry_account",e.REGISTRY_SETTINGS="registry_settings",e.TELEMETRY_STATE="telemetry_state",e}({})},29692:(e,t,n)=>{"use strict";n.d(t,{Zg:()=>l.Z,YM:()=>i,VH:()=>s,Mj:()=>a});var l=n(27156),o=n(12115);let r=(0,n(87021).h)("utils/storage/frontend.ts");function a(e,t){r.verbose("useLocalStorage: Entering method");let[n,l]=(0,o.useState)(t),[a,s]=(0,o.useState)(!0),i=(0,o.useRef)(n);return(0,o.useEffect)(()=>{i.current=n},[n]),(0,o.useEffect)(()=>{(async()=>{r.verbose("loadValue: Entering method");try{let n=await fetch("/api/storage?key=".concat(encodeURIComponent(e),"&defaultValue=").concat(encodeURIComponent(JSON.stringify(t)))),o=await n.json();n.ok&&l(o.value)}catch(t){r.warn('Error reading storage key "'.concat(e,'":'),t)}finally{s(!1)}})()},[e]),[n,(0,o.useCallback)(async t=>{r.verbose("setValue: Entering method");try{let n=t instanceof Function?t(i.current):t;if(l(n),!(await fetch("/api/storage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,value:n})})).ok)throw Error("Failed to save value")}catch(t){r.warn('Error setting storage key "'.concat(e,'":'),t)}},[e]),a]}let s=async(e,t)=>{r.verbose("saveItem: Entering method");try{if(!(await fetch("/api/storage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,value:t})})).ok)throw Error("Failed to save item")}catch(e){throw r.error("Error saving to storage:",e),e}},i=async(e,t)=>{r.verbose("loadItem: Entering method");try{let n=await fetch("/api/storage?key=".concat(encodeURIComponent(e),"&defaultValue=").concat(encodeURIComponent(JSON.stringify(t))));if(!n.ok)throw Error("Failed to load item");return(await n.json()).value}catch(e){return r.error("Error loading from storage:",e),t}}},38459:(e,t,n)=>{"use strict";n.d(t,{Az:()=>o,FM:()=>l,Je:()=>a,po:()=>r,yF:()=>s});let l="folder";function o(e,t){let n=[],l=new Map;for(let o of e){let{key:e,label:r}=t(o),a=l.get(e);a||(a={key:e,label:r,items:[]},l.set(e,a),n.push(a)),a.items.push(o)}return n}function r(e){let t=(null!=e?e:"").trim().charAt(0).toUpperCase();return t>="A"&&t<="Z"?{key:"letter:".concat(t),label:t}:{key:"letter:#",label:"#"}}function a(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Ungrouped",l=new Map,o=[];for(let n of e){var r;let e=null==(r=t(n))?void 0:r.trim();if(e){let t=l.get(e);t?t.push(n):l.set(e,[n])}else o.push(n)}let a=Array.from(l.keys()).sort((e,t)=>e.localeCompare(t)).map(e=>({key:"folder:".concat(e),label:e,items:l.get(e)}));return o.length>0&&a.push({key:"folder:__ungrouped__",label:n,items:o}),a}function s(e,t){let n=new Set;for(let o of e){var l;let e=null==(l=t(o))?void 0:l.trim();e&&n.add(e)}return Array.from(n).sort((e,t)=>e.localeCompare(t))}},65818:(e,t,n)=>{"use strict";n.d(t,{mO:()=>r,oO:()=>a});var l=n(38459);let o=["stdio","websocket","sse","streamable"];function r(e,t){switch(t){case"name-asc":case"name-desc":return(0,l.po)(e.name);case"status-connected":case"status-disconnected":{let t=e.status;if("connected"===t)return{key:"status:connected",label:"Connected"};if("error"===t)return{key:"status:error",label:"Error"};if("requires_authentication"===t)return{key:"status:auth",label:"Requires authentication"};return{key:"status:disconnected",label:"Disconnected"}}case"transport":{let t=e.transport||"unknown";return{key:"transport:".concat(t),label:({stdio:"Stdio",websocket:"WebSocket",sse:"SSE",streamable:"Streamable HTTP"})[t]||t}}default:return{key:"all",label:"All servers"}}}function a(e,t){let n=(e,n)=>{switch(t){case"name-asc":return e.name.localeCompare(n.name);case"name-desc":return n.name.localeCompare(e.name);case"status-connected":if("connected"===e.status&&"connected"!==n.status)return -1;if("connected"!==e.status&&"connected"===n.status)return 1;return e.name.localeCompare(n.name);case"status-disconnected":if("disconnected"===e.status&&"disconnected"!==n.status)return -1;if("disconnected"!==e.status&&"disconnected"===n.status)return 1;return e.name.localeCompare(n.name);case"transport":{var l,r;let t=o.indexOf(null!=(l=e.transport)?l:""),a=o.indexOf(null!=(r=n.transport)?r:"");if(t!==a)return t-a;return e.name.localeCompare(n.name)}default:return 0}};return[...e].sort((e,t)=>{let l=Number(!!t.favorite)-Number(!!e.favorite);return 0!==l?l:n(e,t)})}},69645:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>ne});var l=n(95155),o=n(12115),r=n(97322),a=n(20063),s=n(94049),i=n(78470),d=n(41983),c=n(22003),u=n(9562),f=n(25635),p=n(28548),h=n(91871),g=n(3339),m=n(67895),x=n(2778),v=n(52363),b=n(65036),y=n(50001),w=n(75912),j=n(22719),A=n(11096),S=n(76530),I=n(36741),k=n(60691),C=n(47419),E=n(78410),T=n(14915),N=n(55930),D=n(56900),R=n(26922),z=n(29692),M=n(23820),_=n(73707),O=n(17681),P=n(21067),F=n(56422),L=n(52641),W=n(55606),U=n(86973),H=n(41602),q=n(50430),B=n(4484),G=n(86946),J=n(19219),V=n(51611),Y=n(12140),K=n(63186),Q=n(62962),X=n(51331),Z=n(97736);function $(e){return"string"==typeof e&&e.startsWith("quickchat-")}n(77890);var ee=n(88377),et=n(38459);let en="wave:__adhoc__",el="wave:__archived__";var eo=n(97104);function er(e){let{nodes:t,childrenByParent:n,renderItem:o,expanded:r,onToggle:a,depth:i=0,visited:c,maxDepth:u=20}=e;if(!t||0===t.length||i>u)return null;let f=null!=c?c:new Set;return(0,l.jsx)(l.Fragment,{children:t.map(e=>{var t;if(f.has(e.id))return null;let c=null!=(t=n.get(e.id))?t:[],p=c.length>0&&i<u,h=!1!==r[e.id],g=new Set(f);return g.add(e.id),(0,l.jsxs)(s.default,{sx:{pl:1.5*(i>0),borderLeft:i>0?"1px dashed rgba(128,128,128,0.35)":"none"},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"flex-start"},children:[p?(0,l.jsx)(d.A,{size:"small",onClick:()=>a(e.id),"aria-label":h?"Collapse chain":"Expand chain",sx:{mt:.5,flexShrink:0},children:h?(0,l.jsx)(Q.A,{fontSize:"small"}):(0,l.jsx)(K.A,{fontSize:"small"})}):(0,l.jsx)(s.default,{sx:{width:34,flexShrink:0}}),(0,l.jsx)(s.default,{sx:{flex:1,minWidth:0},children:o(e,i)})]}),p&&(0,l.jsx)(q.A,{in:h,timeout:"auto",unmountOnExit:!0,children:(0,l.jsx)(er,{nodes:c,childrenByParent:n,renderItem:o,expanded:r,onToggle:a,depth:i+1,visited:g,maxDepth:u})})]},e.id)})})}function ea(e){var t,n;let l=new Map;for(let t of e)l.set(t.id,t);let o=new Map,r=[],a=e=>e.parentConversationId&&e.parentConversationId!==e.id?e.parentConversationId:null;for(let n of e){let e=a(n);if(e&&l.has(e)){let l=null!=(t=o.get(e))?t:[];l.push(n),o.set(e,l)}else r.push(n)}let s=new Set,i=[...r];for(;i.length;){let e=i.pop();if(!s.has(e.id))for(let t of(s.add(e.id),null!=(n=o.get(e.id))?n:[]))i.push(t)}let d=new Set(r.map(e=>e.id));for(let t of e)s.has(t.id)||d.has(t.id)||(r.push(t),d.add(t.id));return{roots:r,childrenByParent:o}}let es={group:"flujo-ui:chat-sidebar:group",status:"flujo-ui:chat-sidebar:status",flow:"flujo-ui:chat-sidebar:flow",date:"flujo-ui:chat-sidebar:date",collapsed:"flujo-ui:chat-sidebar:collapsed",searchDim:"flujo-ui:chat-sidebar:search-dim"},ei=[{value:"all",label:"Any status"},{value:"running",label:"Processing"},{value:"awaiting_tool_approval",label:"Awaiting approval"},{value:"paused_debug",label:"Paused (debug)"},{value:"completed",label:"Completed"},{value:"error",label:"Error"}],ed=[{value:"all",label:"Any time"},{value:"today",label:"Last 24h"},{value:"7d",label:"Last 7 days"},{value:"30d",label:"Last 30 days"}],ec=[{value:"none",label:"No grouping"},{value:"date",label:"Group by date"},{value:"flow",label:"Group by flow"},{value:"wave",label:"Group by wave"},{value:"chain",label:"Group by chain"}],eu=e=>{let{conversations:t,currentConversationId:n,onSelectConversation:r,onDeleteConversation:a,onBulkDelete:c,onStopConversation:g,onNewConversation:m,onQuickChat:j,onCollapse:S,flowNames:I={}}=e,[k,E]=o.useState(""),[T,N]=o.useState({open:!1,ids:[],label:""}),[D,R]=(0,eo.Xk)(es.searchDim,"title"),[z,eu]=o.useState(null),[ef,ep]=(0,eo.Xk)(es.group,"none"),[eh,eg]=(0,eo.Xk)(es.status,"all"),[em,ex]=(0,eo.Xk)(es.flow,"all"),[ev,eb]=(0,eo.Xk)(es.date,"all"),[ey,ew]=(0,eo.Xk)(es.collapsed,{}),[ej,eA]=o.useState(null);o.useEffect(()=>{if("wave"!==ef)return;let e=!1;return fetch("/api/waves").then(e=>e.ok?e.json():null).then(t=>{!e&&t&&eA(t)}).catch(()=>{}),()=>{e=!0}},[ef,t]);let eS=(0,o.useMemo)(()=>(function(e){let t=new Map;if(!(null==e?void 0:e.waves))return t;for(let l of e.waves){var n;let e=null==(n=l.rootExecutionIds)?void 0:n[0],o=e&&l.nodes.find(t=>t.executionId===e)||l.nodes[0],r=(null==o?void 0:o.name)||(null==o?void 0:o.flowName)||l.id;for(let e of l.nodes)t.set(e.executionId,{waveId:l.id,label:r})}return t})(ej),[ej]);o.useEffect(()=>{let e=k.trim();if("content"!==D||0===e.length)return void eu(null);let t=!1,n=setTimeout(()=>{fetch("/v1/chat/conversations?search=".concat(encodeURIComponent(e),"&dimension=content")).then(e=>e.ok?e.json():[]).then(e=>{t||eu(new Set(Array.isArray(e)?e.map(e=>e.id):[]))}).catch(()=>{t||eu(new Set)})},300);return()=>{t=!0,clearTimeout(n)}},[k,D]);let eI=o.useCallback(e=>{var t;return e?$(e)?{key:"flow:__quickchat__",label:"Quick Chat"}:{key:"flow:".concat(e),label:null!=(t=I[e])?t:"Unknown flow"}:{key:"flow:__none__",label:"No flow"}},[I]),ek=(0,o.useMemo)(()=>{let e=new Map;for(let n of t){let t=eI(n.flowId);e.has(t.key)||e.set(t.key,t.label)}return Array.from(e.entries()).map(e=>{let[t,n]=e;return{key:t,label:n}}).sort((e,t)=>e.label.localeCompare(t.label))},[t,eI]),eC=(0,o.useMemo)(()=>{let e=k.trim().toLowerCase(),n=Date.now(),l="today"===ev?n-864e5:"7d"===ev?n-6048e5:"30d"===ev?n-2592e6:0;return t.filter(t=>{if("all"!==eh&&t.status!==eh||"all"!==em&&eI(t.flowId).key!==em||l&&t.updatedAt<l)return!1;if(e){if("content"===D){if(!z||!z.has(t.id))return!1}else if(!"".concat(t.title," ").concat(eI(t.flowId).label).toLowerCase().includes(e))return!1}return!0}).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})},[t,k,D,z,eh,em,ev,eI]),eE=(0,o.useMemo)(()=>"none"===ef?[{key:"all",label:"",items:eC}]:"wave"===ef?function(e){let t=new Set([en,el]);return[...e.filter(e=>!t.has(e.key)),...e.filter(e=>t.has(e.key))]}((0,et.Az)(eC,e=>(function(e,t){if(!e)return{key:en,label:"Ad-hoc"};let n=t.get(e);return n?{key:"wave:".concat(n.waveId),label:n.label}:{key:el,label:"Archived / no longer scheduled"}})(e.plannedExecutionId,eS))):(0,et.Az)(eC,e=>"date"===ef?(0,ee.K)(e.updatedAt):eI(e.flowId)),[eC,ef,eI,eS]),eT=(0,o.useMemo)(()=>"chain"===ef?ea(eC):{roots:[],childrenByParent:new Map},[ef,eC]),[eN,eD]=o.useState({}),eR=o.useCallback(e=>{eD(t=>({...t,[e]:!1===t[e]}))},[]),ez=(0,o.useMemo)(()=>{let e=new Map;if("wave"!==ef)return e;for(let t of eE)e.set(t.key,ea(t.items));return e},[ef,eE]),eM=+("all"!==eh)+ +("all"!==em)+ +("all"!==ev),e_=e=>{let t=!!g&&("running"===e.status||"awaiting_tool_approval"===e.status),o=eI(e.flowId),c="flow:__quickchat__"===o.key;return(0,l.jsx)(M.Ay,{disablePadding:!0,secondaryAction:(0,l.jsxs)(l.Fragment,{children:[t&&(0,l.jsx)(i.A,{title:"Stop this run",children:(0,l.jsx)(d.A,{edge:"end","aria-label":"stop run",onClick:t=>{t.stopPropagation(),g(e.id)},children:(0,l.jsx)(C.A,{color:"error"})})}),(0,l.jsx)(d.A,{edge:"end","aria-label":"delete",onClick:t=>{t.stopPropagation(),a(e.id)},children:(0,l.jsx)(B.A,{})})]}),sx:{opacity:e.id===n?1:.7},children:(0,l.jsx)(_.A,{selected:e.id===n,onClick:()=>r(e.id),sx:{pr:t?12:7},children:(0,l.jsx)(O.A,{primary:(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[e.status&&(0,l.jsx)(i.A,{title:(e=>{switch(e){case"running":return"Processing";case"awaiting_tool_approval":return"Waiting for tool approval";case"paused_debug":return"Paused in debug mode";case"completed":return"Completed";case"capped":return"Landed at turn limit (summary produced)";case"error":return"Error";default:return""}})(e.status),children:(0,l.jsx)(s.default,{component:"span",sx:{width:8,height:8,borderRadius:"50%",bgcolor:(e=>{switch(e){case"running":return"primary.main";case"awaiting_tool_approval":return"warning.main";case"paused_debug":return"secondary.main";case"completed":return"success.main";case"capped":return"info.main";case"error":return"error.main";default:return"transparent"}})(e.status),display:"inline-block",flexShrink:0}})}),(0,l.jsx)(i.A,{title:e.title,enterDelay:500,children:(0,l.jsx)(f.default,{component:"span",fontWeight:e.id===n?"bold":"normal",sx:{display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden",wordBreak:"break-word"},children:e.title})})]}),secondary:(0,l.jsxs)(s.default,{component:"span",sx:{display:"flex",alignItems:"center",gap:.75,mt:.5,flexWrap:"wrap"},children:["flow"!==ef&&(0,l.jsx)(i.A,{title:c?"Quick Chat (no saved flow)":"Flow: ".concat(o.label),children:(0,l.jsx)(p.A,{icon:c?(0,l.jsx)(A.A,{}):void 0,label:o.label,size:"small",variant:"outlined",color:c?"secondary":"default",sx:{maxWidth:"100%",height:20,"& .MuiChip-label":{px:.75,fontSize:"0.7rem"}}})}),(0,l.jsx)(f.default,{component:"span",variant:"caption",color:"text.secondary",children:new Date(e.updatedAt).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),secondaryTypographyProps:{component:"div"}})})},e.id)},eO=t.length,eP=eC.length;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(s.default,{sx:{p:2,display:"flex",justifyContent:"space-between",alignItems:"center",gap:1},children:[S&&(0,l.jsx)(i.A,{title:"Hide sidebar",children:(0,l.jsx)(d.A,{size:"small",onClick:S,"aria-label":"Hide conversation sidebar",children:(0,l.jsx)(J.A,{})})}),(0,l.jsx)(f.default,{variant:"h6",sx:{flex:1},noWrap:!0,children:"Conversations"}),t.length>0&&(0,l.jsx)(i.A,{title:"Delete all conversations",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",color:"error","aria-label":"Delete all conversations",onClick:()=>N({open:!0,ids:t.map(e=>e.id),label:"Delete all ".concat(t.length," conversation(s)?")}),children:(0,l.jsx)(X.A,{fontSize:"small"})})})}),eC.length>0&&eC.length<t.length&&(0,l.jsx)(i.A,{title:"Delete visible conversations (matching current filter)",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",color:"error","aria-label":"Delete visible conversations",onClick:()=>N({open:!0,ids:eC.map(e=>e.id),label:"Delete ".concat(eC.length," visible conversation(s)?")}),children:(0,l.jsx)(Z.A,{fontSize:"small"})})})}),j&&(0,l.jsx)(i.A,{title:"Quick Chat: a model + optional MCP servers, no saved flow",children:(0,l.jsx)(h.A,{variant:"outlined",color:"primary",startIcon:(0,l.jsx)(A.A,{}),onClick:j,size:"small",children:"Quick"})}),(0,l.jsx)(h.A,{variant:"contained",color:"primary",startIcon:(0,l.jsx)(G.A,{}),onClick:m,size:"small",children:"New"})]}),(0,l.jsx)(P.A,{}),(0,l.jsxs)(s.default,{sx:{px:2,pt:1.5,pb:1,display:"flex",flexDirection:"column",gap:1},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",gap:1},children:[(0,l.jsx)(u.A,{size:"small",sx:{flex:1},placeholder:"content"===D?"Search message content…":"Search title or flow…",value:k,onChange:e=>E(e.target.value),InputProps:{startAdornment:(0,l.jsx)(F.A,{position:"start",children:(0,l.jsx)(V.A,{fontSize:"small"})}),endAdornment:k?(0,l.jsx)(F.A,{position:"end",children:(0,l.jsx)(d.A,{size:"small","aria-label":"Clear search",onClick:()=>E(""),children:(0,l.jsx)(Y.A,{fontSize:"small"})})}):void 0}}),(0,l.jsx)(L.A,{size:"small",sx:{minWidth:100},children:(0,l.jsxs)(W.A,{value:D,onChange:e=>R(e.target.value),"aria-label":"Search dimension",children:[(0,l.jsx)(U.A,{value:"title",children:"Title"}),(0,l.jsx)(U.A,{value:"content",children:"Content"})]})})]}),(0,l.jsxs)(s.default,{sx:{display:"flex",flexWrap:"wrap",gap:1},children:[(0,l.jsx)(L.A,{size:"small",sx:{minWidth:128,flex:"1 1 128px"},children:(0,l.jsx)(W.A,{value:ef,onChange:e=>ep(e.target.value),"aria-label":"Group conversations",children:ec.map(e=>(0,l.jsx)(U.A,{value:e.value,children:e.label},e.value))})}),(0,l.jsx)(L.A,{size:"small",sx:{minWidth:128,flex:"1 1 128px"},children:(0,l.jsx)(W.A,{value:eh,onChange:e=>eg(e.target.value),"aria-label":"Filter by status",children:ei.map(e=>(0,l.jsx)(U.A,{value:e.value,children:e.label},e.value))})}),(0,l.jsx)(L.A,{size:"small",sx:{minWidth:128,flex:"1 1 128px"},children:(0,l.jsxs)(W.A,{value:ek.some(e=>e.key===em)?em:"all",onChange:e=>ex(e.target.value),"aria-label":"Filter by flow",children:[(0,l.jsx)(U.A,{value:"all",children:"Any flow"}),ek.map(e=>(0,l.jsx)(U.A,{value:e.key,children:e.label},e.key))]})}),(0,l.jsx)(L.A,{size:"small",sx:{minWidth:128,flex:"1 1 128px"},children:(0,l.jsx)(W.A,{value:ev,onChange:e=>eb(e.target.value),"aria-label":"Filter by date",children:ed.map(e=>(0,l.jsx)(U.A,{value:e.value,children:e.label},e.value))})})]}),(k||eM>0)&&(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",children:[eP," of ",eO]}),(0,l.jsx)(h.A,{size:"small",onClick:()=>{E(""),eg("all"),ex("all"),eb("all")},children:"Clear filters"})]})]}),(0,l.jsx)(P.A,{}),(0,l.jsx)(H.A,{sx:{overflow:"auto",flex:1},children:0===eO?(0,l.jsx)(M.Ay,{children:(0,l.jsx)(O.A,{primary:"No conversations yet",secondary:"Start a new conversation",primaryTypographyProps:{align:"center"},secondaryTypographyProps:{align:"center"}})}):0===eP?(0,l.jsx)(M.Ay,{children:(0,l.jsx)(O.A,{primary:"No matching conversations",secondary:"Try a different search or filter",primaryTypographyProps:{align:"center"},secondaryTypographyProps:{align:"center"}})}):"chain"===ef?(0,l.jsx)(er,{nodes:eT.roots,childrenByParent:eT.childrenByParent,renderItem:e=>e_(e),expanded:eN,onToggle:eR}):"none"===ef?eC.map(e_):eE.map(e=>{let t=!!ey[e.key],n="wave"===ef?ez.get(e.key):void 0;return(0,l.jsxs)(s.default,{children:[(0,l.jsxs)(_.A,{onClick:()=>(e=>{ew(t=>({...t,[e]:!t[e]}))})(e.key),sx:{py:.5,bgcolor:"action.hover"},children:[t?(0,l.jsx)(K.A,{fontSize:"small"}):(0,l.jsx)(Q.A,{fontSize:"small"}),(0,l.jsx)(f.default,{variant:"overline",sx:{ml:.5,flex:1,lineHeight:1.6},noWrap:!0,children:e.label}),(0,l.jsx)(p.A,{label:e.items.length,size:"small",sx:{height:18,"& .MuiChip-label":{px:.75,fontSize:"0.7rem"}}})]}),(0,l.jsx)(q.A,{in:!t,timeout:"auto",unmountOnExit:!0,children:n?(0,l.jsx)(er,{nodes:n.roots,childrenByParent:n.childrenByParent,renderItem:e=>e_(e),expanded:eN,onToggle:eR}):e.items.map(e_)})]},e.key)})}),(0,l.jsxs)(x.A,{open:T.open,onClose:()=>N(e=>({...e,open:!1})),"aria-labelledby":"bulk-delete-dialog-title",children:[(0,l.jsx)(v.A,{id:"bulk-delete-dialog-title",children:"Confirm deletion"}),(0,l.jsx)(b.A,{children:(0,l.jsxs)(y.A,{children:[T.label," This cannot be undone."]})}),(0,l.jsxs)(w.A,{children:[(0,l.jsx)(h.A,{onClick:()=>N(e=>({...e,open:!1})),children:"Cancel"}),(0,l.jsx)(h.A,{color:"error",onClick:async()=>{N(e=>({...e,open:!1})),await c(T.ids)},autoFocus:!0,children:"Delete"})]})]})]})};var ef=n(70072),ep=n(10915),eh=n(33567),eg=n(66177),em=n(26188),ex=n(77073),ev=n(39486),eb=n(82446),ey=n(37596),ew=n(23731);function ej(e,t){return 1===e.length&&e.every(e=>{var n;let l=null!=(n=t[e])?n:[];return l.includes("pip")&&l.includes("fullscreen")})}let eA=e=>{let{conversationId:t,entries:n,activeKey:r,onSelectTab:a,onCloseTab:c,onAppMessage:u,onUpdateModelContext:p,onRegisterTeardown:h}=e,g=(0,eh.A)(),[m,x]=(0,o.useState)(!1),[v,b]=(0,o.useState)(!1),[y,w]=(0,o.useState)({}),[j,A]=(0,o.useState)([]),S=(0,o.useMemo)(()=>new Set(n.map(e=>e.key)),[n]),I=(0,o.useMemo)(()=>j.filter(e=>S.has(e)),[j,S]),k=(0,o.useMemo)(()=>I.length>0?I:r?[r]:[],[I,r]),C=(0,o.useMemo)(()=>new Set(k),[k]),E=(0,o.useMemo)(()=>ej(k,y),[y,k]),T=Math.max(1,Math.ceil(Math.sqrt(k.length)));return((0,o.useEffect)(()=>{w(e=>{let t=Object.fromEntries(Object.entries(e).filter(e=>{let[t]=e;return S.has(t)}));return Object.keys(t).length===Object.keys(e).length?e:t})},[S]),(0,o.useEffect)(()=>{v&&!E&&b(!1)},[v,E]),0===n.length)?null:(0,l.jsxs)(s.default,{"data-testid":"dev-canvas-dock",sx:{borderTop:1,borderColor:"divider",bgcolor:"background.paper",display:"flex",flexDirection:"column",minHeight:0,...v?{position:"fixed",inset:16,zIndex:1300,borderRadius:1,boxShadow:6,border:1}:{maxHeight:"45vh"}},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:.5,px:1,py:.5,bgcolor:"action.hover"},children:[(0,l.jsx)(em.A,{fontSize:"small",color:"primary"}),(0,l.jsx)(f.default,{variant:"caption",sx:{fontWeight:600,mr:1},children:"Canvas"}),(0,l.jsx)(s.default,{sx:{display:"flex",gap:.5,overflowX:"auto",flex:1,minWidth:0},children:n.map(e=>{let t=e.key===r,n=I.includes(e.key);return(0,l.jsxs)(s.default,{onClick:()=>(e=>{v&&!ej([e],y)&&b(!1),a(e)})(e.key),sx:{display:"flex",alignItems:"center",gap:.5,px:1,py:.25,borderRadius:1,cursor:"pointer",whiteSpace:"nowrap",border:1,borderColor:t?"primary.main":"divider",bgcolor:t?"action.selected":"transparent"},title:"".concat(e.serverName," — ").concat(e.uri),children:[(0,l.jsx)(eg.A,{color:"primary",variant:"dot",invisible:!e.unread,children:(0,l.jsx)(f.default,{variant:"caption",sx:{fontWeight:t?600:400},children:function(e){return e.replace(/\/+$/,"").split("/").pop()||e}(e.uri)})}),(0,l.jsx)(f.default,{variant:"caption",color:"text.secondary",sx:{fontSize:"0.65rem"},children:e.serverName}),(0,l.jsx)(i.A,{title:n?"Remove from split":"Add to split view",children:(0,l.jsx)(d.A,{size:"small",sx:{p:.25},color:n?"primary":"default",onClick:t=>{t.stopPropagation(),(e=>{v&&b(!1),A(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])})(e.key)},"aria-label":"Toggle split view",children:(0,l.jsx)(ey.A,{sx:{fontSize:14}})})}),(0,l.jsx)(i.A,{title:"Close",children:(0,l.jsx)(d.A,{size:"small",sx:{p:.25},onClick:t=>{t.stopPropagation(),c(e.key)},"aria-label":"Close canvas tab",children:(0,l.jsx)(ex.A,{sx:{fontSize:14}})})})]},e.key)})}),(0,l.jsx)(i.A,{title:v?"Exit fullscreen":E?"Fullscreen":"Every visible app must declare pip and fullscreen support",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",disabled:!v&&!E,onClick:()=>b(e=>!e),"aria-label":"Toggle canvas fullscreen",children:v?(0,l.jsx)(eb.A,{fontSize:"small"}):(0,l.jsx)(ev.A,{fontSize:"small"})})})}),(0,l.jsx)(i.A,{title:m?"Expand canvas":"Collapse canvas",children:(0,l.jsx)(d.A,{size:"small",onClick:()=>{!m&&v&&b(!1),x(e=>!e)},"aria-label":"Toggle canvas collapse",children:m?(0,l.jsx)(Q.A,{fontSize:"small"}):(0,l.jsx)(K.A,{fontSize:"small"})})})]}),(0,l.jsx)(s.default,{sx:{display:m?"none":"grid",position:"relative",gridTemplateColumns:"repeat(".concat(T,", minmax(0, 1fr))"),gap:1,p:1,flex:1,height:v?"auto":320,minHeight:0,overflow:"hidden"},children:n.map(e=>{var n;let o=!m&&C.has(e.key);return(0,l.jsx)(s.default,{sx:{display:"flex",...o?{position:"relative"}:{position:"absolute",inset:0,visibility:"hidden",pointerEvents:"none"},flexDirection:"column",minHeight:0,border:1,borderColor:"divider",borderRadius:1,overflow:"hidden",bgcolor:"dark"===g.palette.mode?"#111":"#fff"},children:(0,l.jsx)(ew.Ay,{docked:!0,visible:o,serverName:e.serverName,uri:e.uri,toolName:e.toolName,toolArgs:e.latestToolArgs,toolResultContent:e.latestResultContent,toolCancelledReason:e.latestToolCancelledReason,toolIsError:e.latestToolIsError,toolUpdateId:null!=(n=e.latestToolUpdateId)?n:e.updatedAt,onAppMessage:u,onUpdateModelContext:p,hostDisplayMode:v&&o?"fullscreen":"pip",onAvailableDisplayModes:t=>{w(n=>{var l;let o=null!=(l=n[e.key])?l:[];return o.length===t.length&&o.every((e,n)=>e===t[n])?n:{...n,[e.key]:t}})},onRequestDisplayMode:(t,n)=>((e,t,n)=>{let l=v&&C.has(e)?"fullscreen":"pip";return t===l?l:"fullscreen"===t&&1===k.length&&k[0]===e&&n.includes("pip")&&n.includes("fullscreen")?(b(!0),"fullscreen"):"pip"===t&&"fullscreen"===l&&n.includes("pip")?(b(!1),"pip"):l})(e.key,t,n),onRequestClose:()=>c(e.key),onRegisterTeardown:(e,n)=>{null==h||h(t,e,n)}})},e.key)})})]})},eS={entries:{},order:[],activeKey:null};function eI(e,t){return"".concat(e,"::").concat(t)}function ek(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16,n=arguments.length>2?arguments[2]:void 0,l=Math.max(1,Math.floor(t));if(e.order.length<=l)return{state:e,evicted:[]};let o={...e.entries},r=[...e.order],a=[];for(;r.length>l;){let e=null,t=1/0;for(let l of r){var s,i;if(l===n)continue;let r=null!=(i=null==(s=o[l])?void 0:s.lastActiveAt)?i:0;r<t&&(t=r,e=l)}if(!e)break;delete o[e],r=r.filter(t=>t!==e),a.push(e)}let d=e.activeKey;return d&&!o[d]&&(d=r.length?r[r.length-1]:null),{state:{entries:o,order:r,activeKey:d},evicted:a}}function eC(e,t){if(!e.entries[t])return e;let n={...e.entries};delete n[t];let l=e.order.filter(e=>e!==t),o=e.activeKey;if(o===t){o=null;let e=-1/0;for(let t of l){var r,a;let l=null!=(a=null==(r=n[t])?void 0:r.lastActiveAt)?a:0;l>=e&&(e=l,o=t)}}return{entries:n,order:l,activeKey:o}}function eE(e,t){var n;return null!=(n=e[t])?n:[]}function eT(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function eN(e,t,n){let l=eE(e,t),o=l.filter(e=>e.id!==n);if(o.length===l.length)return e;let r={...e};return o.length>0?r[t]=o:delete r[t],r}var eD=n(4474),eR=n(25731),ez=n(62617),eM=n(12857),e_=n(16186);let eO={byIndex:{}};function eP(e,t,n){for(let l=0;l<t;l++)e[l]||(e[l]={laneIndex:l,laneCount:t,label:"Lane ".concat(l+1,"/").concat(t),status:"pending",lastEventAt:n})}let eF=[""," before breakfast"," under a full moon"," with expert supervision"," somewhere off the map"," according to ancient custom"," while nobody is looking"," for science"," one tiny step at a time"," against all reasonable advice"],eL=["Painting the fence","Watching the 1954 World Cup","Drying behind the ears","Attending the first moon landing","Fighting in the Thirty Years’ War","Discovering fire","Playing with the cats","Cutting down a tree","Plumbing a drain","Eating a sandwich","Committing tax fraud","Awaiting GTA 7","Going on a demonstration","Driving in the left lane","Repairing an old chair","Exploring magnetism","Teaching a goldfish algebra","Alphabetizing the spice rack","Polishing a brass telescope","Folding a fitted sheet","Training for the snail marathon","Counting the rings of Saturn","Sharpening a box of crayons","Negotiating with the squirrels","Rehearsing a dramatic entrance","Mapping an imaginary island","Baking a suspiciously round pie","Tuning a haunted piano","Watering the plastic plants","Untangling holiday lights","Building a pillow fortress","Decoding the grocery list","Interviewing a garden gnome","Organizing the sock drawer","Following a trail of breadcrumbs","Inventing a quieter kazoo","Dusting the dinosaur bones","Launching a paper airplane","Measuring the speed of gossip","Teaching robots to whistle","Calibrating the sundial","Searching for buried treasure","Painting clouds on the ceiling","Refilling the office stapler","Herding digital cats","Consulting the ancient scrolls","Testing the emergency hammock","Translating whale songs","Perfecting the secret handshake","Winding the grandfather clock","Chasing the northern lights","Sailing across a coffee cup","Planting a tiny forest","Borrowing sugar from the neighbors","Learning the penguin shuffle","Auditioning for a silent movie","Restoring a medieval tapestry","Naming every star","Packing for an expedition","Composing an elevator symphony","Inspecting the castle moat","Reading tea leaves","Assembling a model volcano","Studying the migration of sandwiches","Racing a steam locomotive","Picnicking beside a black hole","Practicing wizard etiquette","Delivering mail by pigeon","Searching the library stacks","Brewing a heroic cup of tea","Drawing moustaches on portraits","Balancing the household budget","Learning to speak dolphin","Mending a pirate sail","Surveying the ocean floor","Opening a detective agency","Carving a wooden spoon","Observing the neighborhood dragons","Crossing the Silk Road","Preparing for the robot uprising","Writing a strongly worded postcard","Spinning plates at the circus","Evicting ghosts from the attic","Charting the Bermuda Triangle","Making friends with the ravens","Designing a moon garden","Investigating the cookie jar","Practicing synchronized napping","Mining cheese on the Moon","Repairing the time machine","Conducting the dawn chorus","Waiting for paint to dry","Solving the sphinx’s riddle","Building a better mousetrap","Exploring an underwater city","Sorting the wizard’s mail","Escaping an awkward conversation","Raking leaves in a hurricane","Guarding the last doughnut","Looking busy"].flatMap(e=>eF.map(t=>"".concat(e).concat(t,"…"))),eW=e=>{let{lane:t,onOpenLane:n}=e,o=!!t.laneConversationId&&!!n,r="pending"===t.status;return(0,l.jsxs)(s.default,{onClick:o?()=>n(t.laneConversationId):void 0,sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.25,borderRadius:1,...o&&{cursor:"pointer","&:hover":{bgcolor:"action.hover",textDecoration:"underline"}}},children:["running"===t.status&&(0,l.jsx)(eD.default,{size:14,sx:{flexShrink:0}}),"completed"===t.status&&(0,l.jsx)(I.A,{sx:{fontSize:16,flexShrink:0},color:"success"}),"error"===t.status&&(0,l.jsx)(eM.A,{sx:{fontSize:16,flexShrink:0},color:"error"}),r&&(0,l.jsx)(e_.A,{sx:{fontSize:16,flexShrink:0},color:"disabled"}),(0,l.jsxs)(f.default,{variant:"caption",color:r?"text.disabled":"textSecondary",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.label,r&&" — queued","running"===t.status&&t.activity&&(0,l.jsxs)(f.default,{component:"span",variant:"caption",color:"text.disabled",children:[" \xb7 ",t.activity]})]})]})},eU=e=>{var t;let{liveStats:n,onStop:r,stopDisabled:a,awaitingApproval:i,lanes:d,onOpenLane:c,onAttachDebugger:u}=e,[p,g]=(0,o.useState)(()=>Date.now()),[m,x]=(0,o.useState)(!1);(0,o.useEffect)(()=>{let e=setInterval(()=>g(Date.now()),1e3);return()=>clearInterval(e)},[]);let v=n?Math.max(0,Math.round((p-n.startedAt)/1e3)):0,b=n?Math.round((p-n.lastEventAt)/1e3):0,y=!i&&!!n&&b>=60,w=n?Math.floor(n.startedAt/1e3)%eL.length:0,j=eL[(w+Math.floor(v/5))%eL.length],A=d?Object.values(d.byIndex).sort((e,t)=>e.laneIndex-t.laneIndex):[],S=A.length>0?(e=>{let t=e.filter(e=>"running"===e.status).length,n=e.filter(e=>"pending"===e.status).length,l=e.filter(e=>"completed"===e.status).length,o=e.filter(e=>"error"===e.status).length;if(0===t&&0===n&&o>0)return{text:"".concat(o,"/").concat(e.length," lanes failed — partial results"),warning:!0};let r=[t>0?"".concat(t," running"):"",n>0?"".concat(n," queued"):"",l>0?"".concat(l," done"):"",o>0?"".concat(o," failed"):""].filter(Boolean);return{text:"".concat(e.length," lanes — ").concat(r.join(", ")),warning:o>0}})(A):null;return(0,l.jsxs)(s.default,{sx:{display:"flex",flexDirection:"column",alignItems:"center",my:2,gap:.5},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:2},children:[i?(0,l.jsx)(eR.A,{fontSize:"small",color:"warning"}):(0,l.jsx)(eD.default,{size:20,color:y?"warning":"primary"}),(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",children:i?"Waiting for tool approval":(null==n?void 0:n.activeNode)?"Running: ".concat(n.activeNode):"Working…"}),u&&!i&&(0,l.jsx)(h.A,{variant:"outlined",color:"primary",size:"small",startIcon:(0,l.jsx)(ez.A,{fontSize:"small"}),onClick:()=>{x(!0),u()},disabled:m,children:m?"Attaching…":"Attach debugger"}),(0,l.jsx)(h.A,{variant:"outlined",color:"secondary",size:"small",onClick:r,disabled:a,children:"Stop"})]}),!i&&(0,l.jsx)(f.default,{variant:"caption",color:"text.disabled",sx:{fontStyle:"italic"},"aria-live":"polite",children:j}),S&&(0,l.jsxs)(s.default,{sx:{display:"flex",flexDirection:"column",alignItems:"stretch",minWidth:280,maxWidth:520},children:[(0,l.jsx)(f.default,{variant:"caption",color:S.warning?"warning.main":"textSecondary",sx:{px:1,fontWeight:500},children:S.text}),A.map(e=>(0,l.jsx)(eW,{lane:e,onOpenLane:c},e.laneIndex))]}),!i&&(0,l.jsxs)(f.default,{variant:"caption",color:y?"warning.main":"textSecondary",children:[(null!=(t=null==n?void 0:n.totalTokens)?t:0).toLocaleString()," tokens \xb7 ",v,"s elapsed",y?" \xb7 no activity for ".concat(b,"s — may be stuck"):""]})]})};var eH=n(2300),eq=n(52005),eB=n(54121);let eG=e=>{let{todos:t}=e;if(!t||0===t.length)return null;let n=t.filter(e=>"done"===e.status).length,o=t.length>0?Math.round(n/t.length*100):0;return(0,l.jsxs)(eH.A,{variant:"outlined",sx:{mt:2,p:1.5,borderRadius:2},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:1},children:[(0,l.jsx)(f.default,{variant:"subtitle2",sx:{fontWeight:600},children:"Tasks"}),(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",children:[n," of ",t.length," done"]})]}),(0,l.jsx)(eq.A,{variant:"determinate",value:o,sx:{mb:1,borderRadius:1}}),(0,l.jsx)(s.default,{component:"ul",sx:{listStyle:"none",m:0,p:0},children:t.map(e=>(0,l.jsxs)(s.default,{component:"li",sx:{display:"flex",alignItems:"center",gap:1,py:.25},children:[function(e){switch(e){case"done":return(0,l.jsx)(I.A,{fontSize:"small",color:"success"});case"in_progress":return(0,l.jsx)(eB.A,{fontSize:"small",color:"info"});case"cancelled":return(0,l.jsx)(eM.A,{fontSize:"small",color:"disabled"});default:return(0,l.jsx)(e_.A,{fontSize:"small",color:"disabled"})}}(e.status),(0,l.jsx)(f.default,{variant:"body2",sx:{textDecoration:"done"===e.status||"cancelled"===e.status?"line-through":"none",color:"done"===e.status||"cancelled"===e.status?"text.secondary":"text.primary"},children:e.content})]},e.id))})]})};var eJ=n(88538),eV=n(16963),eY=n(2456),eK=n(64792),eQ=n(71356),eX=n(45202),eZ=n(77998);let e$=e=>e>=1e3?"".concat((e/1e3).toFixed(e>=1e5?0:1),"k"):"".concat(e),e0=e=>{var t;let{usage:n,contextInfo:r,availableNodes:a}=e,[d,c]=(0,o.useState)(null);if(!n&&!r)return null;let u=(null==n?void 0:n.byNode)?Object.entries(n.byNode):[],h=null!=(t=null==n?void 0:n.cacheReadTokens)?t:0,g=n?Math.max(0,n.promptTokens-h):0,m=n?Math.max(0,n.totalTokens-h):0,x=(null==r?void 0:r.contextWindow)&&r.contextWindow>0?Math.min(100,Math.round(r.promptTokens/r.contextWindow*100)):void 0;return(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:1.5,flexShrink:0},children:[n&&m>0&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.A,{title:"Tokens this conversation — ".concat(g.toLocaleString()," prompt / ").concat(n.completionTokens.toLocaleString()," completion").concat(h>0?" (+".concat(h.toLocaleString()," cached reads, not counted)"):"",". Click for the per-node breakdown."),children:(0,l.jsx)(p.A,{icon:(0,l.jsx)(eZ.A,{}),label:"".concat(e$(m)," tokens"),size:"small",variant:"outlined",onClick:e=>c(e.currentTarget),sx:{cursor:"pointer"}})}),(0,l.jsx)(eJ.Ay,{open:!!d,anchorEl:d,onClose:()=>c(null),anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},children:(0,l.jsxs)(s.default,{sx:{p:2,maxWidth:420},children:[(0,l.jsx)(f.default,{variant:"subtitle2",sx:{mb:1},children:"Token usage by node"}),(0,l.jsxs)(eV.A,{size:"small",children:[(0,l.jsx)(eY.A,{children:(0,l.jsxs)(eK.A,{children:[(0,l.jsx)(eQ.A,{children:"Node"}),(0,l.jsx)(eQ.A,{align:"right",children:"Prompt"}),(0,l.jsx)(eQ.A,{align:"right",children:"Completion"}),(0,l.jsx)(eQ.A,{align:"right",children:"Total"})]})}),(0,l.jsxs)(eX.A,{children:[u.map(e=>{let[t,n]=e;return(0,l.jsxs)(eK.A,{children:[(0,l.jsx)(eQ.A,{children:(0,l.jsx)(i.A,{title:t,children:(0,l.jsx)("span",{children:(e=>{var t;return(null==(t=a.find(t=>t.id===e))?void 0:t.label)||"".concat(e.substring(0,8),"…")})(t)})})}),(0,l.jsx)(eQ.A,{align:"right",children:n.promptTokens.toLocaleString()}),(0,l.jsx)(eQ.A,{align:"right",children:n.completionTokens.toLocaleString()}),(0,l.jsx)(eQ.A,{align:"right",children:n.totalTokens.toLocaleString()})]},t)}),(0,l.jsxs)(eK.A,{children:[(0,l.jsx)(eQ.A,{sx:{fontWeight:"bold"},children:"Total"}),(0,l.jsx)(eQ.A,{align:"right",sx:{fontWeight:"bold"},children:n.promptTokens.toLocaleString()}),(0,l.jsx)(eQ.A,{align:"right",sx:{fontWeight:"bold"},children:n.completionTokens.toLocaleString()}),(0,l.jsx)(eQ.A,{align:"right",sx:{fontWeight:"bold"},children:n.totalTokens.toLocaleString()})]})]})]}),h>0&&(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:1},children:["Prompt totals include ",h.toLocaleString()," tokens re-read from the prompt cache. The header chip shows the fresh figure (",m.toLocaleString(),") with those cached reads excluded."]})]})})]}),r&&void 0!==x&&(0,l.jsx)(i.A,{title:"Context of the latest call".concat(r.modelDisplayName?" (".concat(r.modelDisplayName,")"):"",": ").concat(r.promptTokens.toLocaleString()," of ").concat(r.contextWindow.toLocaleString()," tokens"),children:(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:1,minWidth:140},children:[(0,l.jsx)(eq.A,{variant:"determinate",value:x,color:x>=90?"error":x>=70?"warning":"primary",sx:{flex:1,height:6,borderRadius:3}}),(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",sx:{whiteSpace:"nowrap"},children:[e$(r.promptTokens),"/",e$(r.contextWindow)," (",x,"%)"]})]})}),r&&void 0===x&&(0,l.jsx)(i.A,{title:"Prompt size of the latest call".concat(r.modelDisplayName?" (".concat(r.modelDisplayName,")"):"",". Set the model's Context Window in its settings to see a usage meter."),children:(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",sx:{whiteSpace:"nowrap"},children:["ctx ",e$(r.promptTokens)]})})]})};var e1=n(75870),e2=n(95436),e5=n(99944),e6=n(22822),e3=n(43076),e4=n(17897),e8=n(87021);let e7=(0,e8.h)("frontend/components/Chat/QuickChatDialog"),e9=e=>{let{open:t,onClose:n,onStart:r}=e,[a,i]=(0,o.useState)([]),[g,m]=(0,o.useState)([]),[y,j]=(0,o.useState)(!1),[A,S]=(0,o.useState)(null),[I,k]=(0,o.useState)(""),[C,E]=(0,o.useState)(""),[T,N]=(0,o.useState)({}),[D,R]=(0,o.useState)(!1),[z,M]=(0,o.useState)(null);(0,o.useEffect)(()=>{if(!t)return;let e=!1;return j(!0),S(null),(async()=>{try{let[t,n]=await Promise.all([e3.N.loadModels(),e4.S.loadServerConfigs()]);if(e)return;i(t);let l=Array.isArray(n)?n.filter(e=>!e.disabled).map(e=>e.name):[];m(l),k(e=>{var n;return e||(null==(n=t[0])?void 0:n.id)||""})}catch(t){e||(e7.warn("Failed to load models/servers for quick chat",t),S("Could not load models or servers."))}finally{e||j(!1)}})(),()=>{e=!0}},[t]),(0,o.useEffect)(()=>{t||(E(""),N({}),M(null),R(!1))},[t]);let _=(0,o.useCallback)(e=>{N(t=>{let n=t[e];return(null==n?void 0:n.selected)?{...t,[e]:{...n,selected:!1}}:{...t,[e]:{...null!=n?n:{tools:null,expanded:!1},selected:!0}}})},[]),O=(0,o.useCallback)(async e=>{N(t=>{var n;let l=null!=(n=t[e])?n:{selected:!1,tools:null,expanded:!1};return{...t,[e]:{...l,expanded:!l.expanded}}});let t=T[e];if(!(null==t?void 0:t.available)&&!(null==t?void 0:t.loading)){N(t=>{var n;return{...t,[e]:{...null!=(n=t[e])?n:{selected:!1,tools:null,expanded:!0},loading:!0}}});try{let{tools:t}=await e4.S.listServerTools(e),n=Array.isArray(t)?t.map(e=>e.name).filter(Boolean):[];N(t=>{var l;return{...t,[e]:{...null!=(l=t[e])?l:{selected:!1,tools:null,expanded:!0},available:n,loading:!1}}})}catch(t){e7.warn("Failed to load tools for ".concat(e),t),N(t=>{var n;return{...t,[e]:{...null!=(n=t[e])?n:{selected:!1,tools:null,expanded:!0},available:[],loading:!1}}})}}},[T]),F=(0,o.useCallback)((e,t,n)=>{N(l=>{var o,r;let a=null!=(o=l[e])?o:{selected:!0,tools:null,expanded:!0},s=new Set(null!=(r=a.tools)?r:new Set(n));return s.has(t)?s.delete(t):s.add(t),{...l,[e]:{...a,selected:!0,tools:s}}})},[]),H=!!I&&!D&&!y,B=async()=>{if(!I)return void M("Pick a model to chat with.");R(!0),M(null);let e=g.filter(e=>{var t;return null==(t=T[e])?void 0:t.selected}).map(e=>{let t=T[e];return!t.tools||t.available&&t.tools.size===t.available.length?{name:e}:{name:e,enabledTools:[...t.tools]}});try{await r({modelId:I,servers:e,systemPrompt:C.trim()||void 0})}catch(e){e7.warn("Quick chat failed to start",e),M(e instanceof Error?e.message:"Could not start the quick chat."),R(!1)}};return(0,l.jsxs)(x.A,{open:t,onClose:D?void 0:n,maxWidth:"sm",fullWidth:!0,children:[(0,l.jsx)(v.A,{children:"Quick Chat"}),(0,l.jsxs)(b.A,{children:[(0,l.jsx)(f.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:"Chat with a model and, optionally, some MCP servers — no need to build and save a flow."}),A&&(0,l.jsx)(c.A,{severity:"error",sx:{mb:2},children:A}),(0,l.jsxs)(L.A,{fullWidth:!0,size:"small",sx:{mb:2},disabled:y,children:[(0,l.jsx)(e2.A,{id:"quick-chat-model-label",children:"Model"}),(0,l.jsxs)(W.A,{labelId:"quick-chat-model-label",label:"Model",value:I,onChange:e=>k(e.target.value),children:[0===a.length&&(0,l.jsx)(U.A,{value:"",disabled:!0,children:y?"Loading…":"No models configured"}),a.map(e=>(0,l.jsx)(U.A,{value:e.id,children:e.displayName||e.name},e.id))]})]}),(0,l.jsx)(u.A,{fullWidth:!0,size:"small",multiline:!0,minRows:2,maxRows:6,label:"System prompt (optional)",placeholder:"e.g. You are a concise coding assistant.",value:C,onChange:e=>E(e.target.value),sx:{mb:2}}),(0,l.jsx)(P.A,{sx:{mb:1}}),(0,l.jsx)(f.default,{variant:"subtitle2",gutterBottom:!0,children:"MCP servers (optional)"}),y?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",my:2},children:(0,l.jsx)(eD.default,{size:22})}):0===g.length?(0,l.jsx)(f.default,{variant:"body2",color:"text.secondary",children:"No connected MCP servers. You can still chat with the model alone."}):g.map(e=>{let t=T[e],n=!!(null==t?void 0:t.selected),o=null==t?void 0:t.available,r=null==t?void 0:t.tools;return(0,l.jsxs)(s.default,{sx:{mb:.5},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center"},children:[(0,l.jsx)(e5.A,{sx:{flexGrow:1,mr:0},control:(0,l.jsx)(e6.A,{size:"small",checked:n,onChange:()=>_(e)}),label:(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,l.jsx)(f.default,{variant:"body2",children:e}),n&&(0,l.jsx)(p.A,{size:"small",variant:"outlined",label:r?"".concat(r.size," tool").concat(1===r.size?"":"s"):"all tools"})]})}),(0,l.jsx)(d.A,{size:"small",onClick:()=>O(e),"aria-label":"customize ".concat(e," tools"),children:(null==t?void 0:t.expanded)?(0,l.jsx)(Q.A,{fontSize:"small"}):(0,l.jsx)(K.A,{fontSize:"small"})})]}),(0,l.jsx)(q.A,{in:!!(null==t?void 0:t.expanded),unmountOnExit:!0,children:(0,l.jsx)(s.default,{sx:{pl:4,pb:1},children:(null==t?void 0:t.loading)?(0,l.jsx)(eD.default,{size:16}):o&&o.length>0?o.map(t=>{let n=!r||r.has(t);return(0,l.jsx)(e5.A,{sx:{display:"flex"},control:(0,l.jsx)(e6.A,{size:"small",checked:n,onChange:()=>F(e,t,o)}),label:(0,l.jsx)(f.default,{variant:"caption",children:t})},t)}):(0,l.jsx)(f.default,{variant:"caption",color:"text.secondary",children:o?"No tools reported (server may be offline).":""})})})]},e)}),z&&(0,l.jsx)(c.A,{severity:"error",sx:{mt:2},children:z})]}),(0,l.jsxs)(w.A,{children:[(0,l.jsx)(h.A,{onClick:n,disabled:D,children:"Cancel"}),(0,l.jsx)(h.A,{variant:"contained",onClick:B,disabled:!H,startIcon:D?(0,l.jsx)(eD.default,{size:16,color:"inherit"}):void 0,children:D?"Starting…":"Start chat"})]})]})};var te=n(98267),tt=n(20537),tn=n(37960),tl=n(49692),to=n(54178),tr=n(11305),ta=n(48116),ts=n(22539),ti=n(90057),td=n(33420),tc=n(53911);let tu={byNode:{},byResource:{},byResourceName:{},resourceVersion:0};function tf(e,t){return"".concat(e," ").concat(t)}var tp=n(49501),th=n(59323),tg=n(72308),tm=n(6422),tx=n(48363);let tv=(0,e8.h)("frontend/components/Chat/RunResourcesPanel"),tb=e=>{let{conversationId:t,refreshToken:n}=e,[r,a]=(0,o.useState)(null),[i,d]=(0,o.useState)(null);return((0,o.useEffect)(()=>{if(!t)return;let e=!1;return fetch("/v1/chat/conversations/".concat(encodeURIComponent(t),"/resources")).then(async e=>{if(!e.ok)throw Error("HTTP ".concat(e.status));return e.json()}).then(t=>{e||(a(Array.isArray(t.resources)?t.resources:[]),d(null))}).catch(t=>{e||(tv.warn("Failed to load run resources",t),d(t instanceof Error?t.message:String(t)))}),()=>{e=!0}},[t,n]),i)?(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",children:["Run data unavailable (",i,")"]}):null===r?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",p:1},children:(0,l.jsx)(eD.default,{size:16})}):0===r.length?(0,l.jsx)(f.default,{variant:"caption",color:"text.secondary",children:"No data artifacts captured in this run yet."}):(0,l.jsx)(H.A,{dense:!0,disablePadding:!0,children:[...r].sort((e,t)=>t.createdAt-e.createdAt).map(e=>{var t;return(0,l.jsxs)(M.Ay,{disableGutters:!0,sx:{alignItems:"flex-start"},children:[(0,l.jsx)(tp.A,{sx:{minWidth:30,mt:.5},children:function(e){switch(e){case"image":return(0,l.jsx)(tg.A,{fontSize:"small",sx:{color:"#009688"}});case"audio":return(0,l.jsx)(tm.A,{fontSize:"small",sx:{color:"#009688"}});case"link":return(0,l.jsx)(tx.A,{fontSize:"small",sx:{color:"#009688"}});default:return(0,l.jsx)(th.A,{fontSize:"small",sx:{color:"#009688"}})}}(e.kind)}),(0,l.jsx)(O.A,{primary:(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:.5,flexWrap:"wrap"},children:[(0,l.jsx)(f.default,{variant:"body2",sx:{fontWeight:500},children:null!=(t=e.name)?t:"".concat(e.kind,"-").concat(e.id.slice(0,8))}),e.mimeType&&(0,l.jsx)(p.A,{label:e.mimeType,size:"small",variant:"outlined",sx:{height:18,fontSize:"0.65rem"}}),(0,l.jsx)(f.default,{variant:"caption",color:"text.secondary",children:function(e){return e<1024?"".concat(e," B"):e<1048576?"".concat(Math.round(e/1024)," KB"):"".concat((e/1048576).toFixed(1)," MB")}(e.size)})]}),secondary:(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",component:"span",sx:{wordBreak:"break-all"},children:["by ",function(e){var t,n,l,o,r,a,s;let i=e.producedBy;switch(i.source){case"tool-result":return"tool ".concat(null!=(t=i.server)?t:"?","/").concat(null!=(n=i.toolName)?n:"?");case"tool-args":return"tool args ".concat(null!=(l=i.server)?l:"?","/").concat(null!=(o=i.toolName)?o:"?");case"capture":return"step ".concat(null!=(a=null!=(r=i.nodeName)?r:i.nodeId)?a:"?");case"mcp-link":return"link from ".concat(null!=(s=i.server)?s:"?");default:return"run"}}(e),e.readBy.length>0?" \xb7 read ".concat(e.readBy.length,"\xd7"):""," \xb7 ",e.uri]})})]},e.id)})})};var ty=n(14913),tw=n(57883);let tj={system:{label:"system",color:"secondary"},sent:{label:"sent",color:"success"},folded:{label:"folded",color:"warning"},"scoped-out":{label:"scoped out",color:"info"},"handoff-stripped":{label:"handoff plumbing",color:"default"}},tA={whiteSpace:"pre-wrap",wordBreak:"break-word",margin:0,fontSize:"0.75rem",fontFamily:"inherit"},tS=e=>{let{role:t,content:n,toolCallNames:o,status:r,faded:a}=e;return(0,l.jsxs)(eH.A,{variant:"outlined",sx:{p:1,mb:.75,opacity:a?.55:1,borderStyle:a?"dashed":"solid"},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:.5,mb:.5,flexWrap:"wrap"},children:[(0,l.jsx)(p.A,{size:"small",label:t,color:function(e){switch(e){case"system":return"secondary";case"user":return"primary";case"assistant":return"success";case"tool":return"info";default:return"default"}}(t),variant:"outlined"}),o&&o.length>0&&(0,l.jsx)(p.A,{size:"small",variant:"outlined",label:"\uD83D\uDD27 ".concat(o.join(", ")),sx:{maxWidth:"100%"}}),r&&"sent"!==r&&"system"!==r&&(0,l.jsx)(p.A,{size:"small",color:tj[r].color,label:tj[r].label})]}),n.trim().length>0?(0,l.jsx)("pre",{style:tA,children:n}):(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",children:"(no text content)"})]})},tI=e=>{let{provenance:t}=e;return(0,l.jsxs)(s.default,{children:[(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",sx:{display:"block",mb:.5},children:"Full threaded history — greyed rows are not sent to the model."}),t.map((e,t)=>{var n,o;return(0,l.jsx)(tS,{role:e.role,content:null!=(n=e.preview)?n:"",toolCallNames:e.toolCallNames,status:e.status,faded:"sent"!==e.status&&"system"!==e.status},null!=(o=e.id)?o:"hist-".concat(t))}),t.some(e=>"sent"!==e.status&&"system"!==e.status)&&(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",sx:{display:"block",mt:1},children:"Hover a badge label to understand why a message is not on the wire: folded (outputMode), scoped out (inputMode), or handoff plumbing (tool-call strip)."})]})},tk=()=>{},tC=e=>{let{modelInput:t,conversationId:n}=e,[r,a]=(0,o.useState)("wire"),{systemMessage:i,wireMessages:d,provenance:c,counts:u,inputMode:h}=t,g=(0,o.useMemo)(()=>(d||[]).filter(e=>"system"!==e.role),[d]);return(0,l.jsxs)(s.default,{sx:{height:"100%",display:"flex",flexDirection:"column",p:1},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:.5,flexWrap:"wrap",mb:1},children:[(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",children:function(e){return"".concat(e.threaded," in history → ").concat(e.sent," sent")+(e.folded?" \xb7 ".concat(e.folded," folded"):"")+(e.scopedOut?" \xb7 ".concat(e.scopedOut," scoped out"):"")+(e.handoffStripped?" \xb7 ".concat(e.handoffStripped," handoff-stripped"):"")}(u)}),h&&"full-history"!==h&&(0,l.jsx)(p.A,{size:"small",variant:"outlined",label:"inputMode: ".concat(h)})]}),(0,l.jsxs)(te.A,{sx:{boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsx)(f.default,{variant:"caption",children:(0,l.jsx)("b",{children:"System message"})})}),(0,l.jsx)(tn.A,{sx:{p:0},children:i&&i.content.trim().length>0?(0,l.jsx)(eH.A,{variant:"outlined",sx:{p:1,maxHeight:220,overflowY:"auto"},children:(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",margin:0,fontSize:"0.75rem",fontFamily:"inherit"},children:i.content})}):(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",children:"(no system message)"})})]}),(0,l.jsxs)(ty.A,{size:"small",exclusive:!0,value:r,onChange:(e,t)=>{t&&a(t)},sx:{my:1},children:[(0,l.jsx)(tw.A,{value:"wire",children:"What the model sees"}),(0,l.jsx)(tw.A,{value:"annotated",children:"Full history (annotated)"})]}),(0,l.jsx)(s.default,{sx:{flexGrow:1,overflowY:"auto",minHeight:0},children:"wire"===r?0===g.length?(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",sx:{p:1},children:"No conversation messages — the model sees only the system message."}):(0,l.jsx)(ef.A,{messages:g,conversationId:n?"debug-".concat(n):void 0,onToggleDisabled:tk,onSplitConversation:tk}):(0,l.jsx)(tI,{provenance:c})})]})},tE=(0,e8.h)("frontend/components/Chat/DebuggerCanvas"),tT={start:td.vm,process:td.Uw,finish:td.IK,mcp:td.v2,subflow:td.lA,resource:td.z9},tN={custom:tc.jY,mcpEdge:tc.oY,resourceEdge:tc.sZ},tD=["conversation","tracker","detail"],tR={conversation:"Conversation",tracker:"Execution Tracker",detail:"Detail"},tz="flujo-debugger-section-order",tM="flujo-debugger-section-visible",t_="flujo-debugger-conv-width",tO="flujo-debugger-detail-width";function tP(e,t){let n=Number(window.localStorage.getItem(e));return Number.isFinite(n)&&n>=240?n:t}let tF=(0,ta.Ay)(eH.A)(e=>{let{theme:t}=e;return{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden",padding:t.spacing(1)}}),tL=(0,ta.Ay)(s.default)(e=>{let{theme:t}=e;return{padding:t.spacing(1,2),borderBottom:"1px solid ".concat(t.palette.divider)}}),tW=(0,ta.Ay)(s.default)({flexGrow:1,display:"flex",overflow:"hidden",minHeight:0}),tU=(0,ta.Ay)(s.default)(e=>{let{theme:t}=e;return{width:"200px",flexShrink:0,borderRight:"1px solid ".concat(t.palette.divider),overflowY:"auto",padding:t.spacing(1)}}),tH=(0,ta.Ay)(s.default)({flexGrow:1,position:"relative",height:"100%"}),tq=(0,ta.Ay)(s.default)(e=>{let{theme:t}=e;return{padding:t.spacing(1,2),borderTop:"1px solid ".concat(t.palette.divider),display:"flex",gap:t.spacing(1),justifyContent:"center"}}),tB=(0,ta.Ay)(s.default)(e=>{let{theme:t}=e;return{width:"6px",flexShrink:0,cursor:"col-resize",backgroundColor:t.palette.divider,transition:"background-color 120ms",touchAction:"none","&:hover":{backgroundColor:t.palette.primary.main}}}),tG=e=>{var t,n,r,a;let{debugState:u,conversationId:p,onStep:g,onStepOver:m,onContinue:x,onCancel:v,isLoading:b,breakpoints:y,onToggleBreakpoint:w,onClose:j,isExpanded:A,onToggleExpand:S,liveActivity:I}=e,k=(0,eh.A)(),[C,E]=(0,o.useState)(u.executionTrace&&u.executionTrace.length>0?u.executionTrace.length-1:-1),[T,N]=(0,o.useState)(()=>(function(){try{let e=JSON.parse(window.localStorage.getItem(tz)||"null");if(Array.isArray(e)){let t=e.filter(e=>tD.includes(e)),n=tD.filter(e=>!t.includes(e));if(t.length+n.length===tD.length)return[...t,...n]}}catch(e){}return[...tD]})()),[R,z]=(0,o.useState)(()=>(function(){let e={conversation:!0,tracker:!0,detail:!0};try{let t=JSON.parse(window.localStorage.getItem(tM)||"null");if(t&&"object"==typeof t)for(let n of tD)"boolean"==typeof t[n]&&(e[n]=t[n])}catch(e){}return e})()),[P,F]=(0,o.useState)(()=>tP(t_,480)),[L,W]=(0,o.useState)(()=>tP(tO,320)),[U,q]=(0,o.useState)(null),[B,G]=(0,o.useState)(!0),[V,Y]=(0,o.useState)(null),[Q,X,Z]=(0,ts.ck)([]),[$,ee,et]=(0,ts.fM)([]);(0,o.useEffect)(()=>{window.localStorage.setItem(tz,JSON.stringify(T))},[T]),(0,o.useEffect)(()=>{window.localStorage.setItem(tM,JSON.stringify(R))},[R]),(0,o.useEffect)(()=>{window.localStorage.setItem(t_,String(Math.round(P)))},[P]),(0,o.useEffect)(()=>{window.localStorage.setItem(tO,String(Math.round(L)))},[L]),(0,o.useEffect)(()=>{var e;let t=(null==(e=u.executionTrace)?void 0:e.length)||0;t>0?(E(e=>Math.min(e,t-1)),C<t-1&&E(t-1)):E(-1)},[u.executionTrace]),(0,o.useEffect)(()=>{(async()=>{if(!u.flowId){Y("Flow ID is missing in debug state."),G(!1);return}G(!0),Y(null);try{tE.debug("Loading flow definition for ID: ".concat(u.flowId));let e=await ti.g.getFlow(u.flowId);if(!e)throw Error("Flow with ID ".concat(u.flowId," not found."));q(e),tE.info("Flow definition loaded: ".concat(e.name))}catch(e){tE.error("Error loading flow definition:",e),Y(e instanceof Error?e.message:"Failed to load flow definition."),q(null)}finally{G(!1)}})()},[u.flowId]),(0,o.useEffect)(()=>{if(U){tE.debug("Setting nodes and edges from flow definition");let e=U.nodes.map(e=>({...e,draggable:!1,selectable:!1,connectable:!1})),t=U.edges.map(e=>({...e,selectable:!1}));X(e),ee(t)}},[U,X,ee]);let en=(0,o.useCallback)(()=>{if(tE.debug("Previous button clicked. Current index: ".concat(C)),C>0){let e=C-1;tE.debug("Setting current step index to: ".concat(e)),E(e)}else tE.debug("Already at the first step, cannot go previous.")},[C]),el=(0,o.useCallback)(()=>{var e;if(tE.debug("Next button clicked. Current index: ".concat(C,", Trace length: ").concat(null==(e=u.executionTrace)?void 0:e.length)),u.executionTrace&&C<u.executionTrace.length-1){let e=C+1;tE.debug("Navigating to next trace step: ".concat(e)),E(e)}else tE.info("At end of trace, triggering API call for next step."),g()},[C,u.executionTrace,g]),eo=(0,o.useMemo)(()=>{if(u.executionTrace&&C>=0&&C<u.executionTrace.length)return u.executionTrace[C]},[u.executionTrace,C]),er=(0,o.useMemo)(()=>(null==eo?void 0:eo.modelInputs)&&eo.modelInputs.length>0?eo.modelInputs:(null==eo?void 0:eo.modelInput)?[eo.modelInput]:void 0,[eo]),[ea,es]=(0,o.useState)(0);(0,o.useEffect)(()=>{es(0)},[C]);let ei=er?Math.min(ea,er.length-1):0,ed=null==er?void 0:er[ei],[ec,eu]=(0,o.useState)(()=>Date.now());(0,o.useEffect)(()=>{if(!I)return;let e=()=>{let e=Date.now();return[...Object.values(I.byNode),...Object.values(I.byResource),...Object.values(I.byResourceName)].some(t=>e-t.ts<4e3)};if(!e())return;let t=setInterval(()=>{eu(Date.now()),e()||clearInterval(t)},350);return()=>clearInterval(t)},[I]);let ef=(0,o.useCallback)(e=>{var t,n;if(!I)return null;let l=I.byNode[e.id];if(l&&ec-l.ts<4e3)return l;let o=e.data;if((null!=(t=null==o?void 0:o.type)?t:e.type)!=="resource")return null;let r=null!=(n=null==o?void 0:o.properties)?n:{},a="run"===r.scope?"string"==typeof r.runName?I.byResourceName[r.runName]:void 0:"string"==typeof r.boundServer&&"string"==typeof r.uri?I.byResource[tf(r.boundServer,r.uri)]:void 0;return a&&ec-a.ts<4e3?{kind:"read"===a.kind?"resource-read":"resource-write",ts:a.ts}:null},[I,ec]),ep=(0,o.useMemo)(()=>{let e=null==eo?void 0:eo.nodeId;return Q.map(t=>{var n;let l=t.id===e,o=null==y?void 0:y.includes(t.id),r=l?null:ef(t),a=r?Math.max(.25,1-(ec-r.ts)/4e3):0,s=(null==r?void 0:r.kind)==="active"?k.palette.primary.main:"#009688";return{...t,style:{...t.style,border:l?"2px solid ".concat(k.palette.warning.main):r?"2px solid ".concat(s):o?"2px dashed ".concat(k.palette.error.main):null==(n=t.style)?void 0:n.border,boxShadow:l?"0 0 10px ".concat(k.palette.warning.light):r?"0 0 ".concat("resource-write"===r.kind?14:10,"px ").concat(s).concat(Math.round(255*a).toString(16).padStart(2,"0")):void 0}}})},[Q,eo,y,k,ef,ec]),eg=(0,o.useMemo)(()=>T.filter(e=>R[e]),[T,R]),em=(0,o.useCallback)(e=>{z(t=>({...t,[e]:!t[e]}))},[]),ey=(0,o.useCallback)((e,t)=>{N(n=>{let l=n.indexOf(e),o=l+t;if(l<0||o<0||o>=n.length)return n;let r=[...n];return[r[l],r[o]]=[r[o],r[l]],r})},[]),ew=(0,o.useCallback)((e,t,n)=>{n.preventDefault();let l=n.clientX,o="conversation"===e?P:L,r="conversation"===e?F:W,a=document.body.style.userSelect,s=document.body.style.cursor;document.body.style.userSelect="none",document.body.style.cursor="col-resize";let i=e=>{r(Math.min(Math.max(o+t*(e.clientX-l),240),1100))},d=()=>{window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",d),document.body.style.userSelect=a,document.body.style.cursor=s};window.addEventListener("pointermove",i),window.addEventListener("pointerup",d)},[P,L]),ej=(0,l.jsx)(s.default,{sx:{flexGrow:1,overflow:"hidden",minHeight:0,display:"flex",flexDirection:"column"},children:eo?ed&&er?(0,l.jsxs)(s.default,{sx:{flexGrow:1,minHeight:0,display:"flex",flexDirection:"column"},children:[er.length>1&&(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"center",gap:.5,px:1,py:.5,borderBottom:"1px solid ".concat(k.palette.divider)},children:[(0,l.jsx)(i.A,{title:"Previous model call",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",onClick:()=>es(e=>Math.max(0,Math.min(e,er.length-1)-1)),disabled:ei<=0,"aria-label":"Previous model call",children:(0,l.jsx)(J.A,{fontSize:"small"})})})}),(0,l.jsxs)(f.default,{variant:"caption",color:"textSecondary",children:["Model call ",ei+1," / ",er.length]}),(0,l.jsx)(i.A,{title:"Next model call",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",onClick:()=>es(e=>Math.min(er.length-1,Math.min(e,er.length-1)+1)),disabled:ei>=er.length-1,"aria-label":"Next model call",children:(0,l.jsx)(tl.A,{fontSize:"small"})})})})]}),(0,l.jsx)(s.default,{sx:{flexGrow:1,minHeight:0,overflow:"hidden",display:"flex",flexDirection:"column"},children:(0,l.jsx)(tC,{modelInput:ed,conversationId:p})})]}):(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",sx:{p:2},children:"No model call for this step."}):(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",sx:{p:2},children:"Select a step from the execution tracker."})}),eA={conversation:ej,tracker:(0,l.jsxs)(s.default,{sx:{flexGrow:1,display:"flex",overflow:"hidden",minHeight:0},children:[(0,l.jsxs)(tU,{children:[(0,l.jsx)(f.default,{variant:"caption",color:"textSecondary",gutterBottom:!0,sx:{display:"block"},children:"Execution Trace"}),(0,l.jsxs)(H.A,{dense:!0,disablePadding:!0,children:[null==(t=u.executionTrace)?void 0:t.map((e,t)=>(0,l.jsx)(M.Ay,{disablePadding:!0,children:(0,l.jsx)(_.A,{selected:t===C,onClick:()=>(e=>{u.executionTrace&&e>=0&&e<u.executionTrace.length?(tE.debug("Trace step selected: ".concat(e)),E(e)):tE.warn("Invalid step index selected: ".concat(e))})(t),children:(0,l.jsx)(O.A,{primary:"".concat(e.stepIndex,": ").concat(e.nodeName||e.nodeId),secondary:e.nodeType})})},e.stepIndex)),b&&(0,l.jsx)(M.Ay,{children:(0,l.jsx)(eD.default,{size:20,sx:{margin:"auto"}})})]})]}),(0,l.jsx)(tH,{children:B?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,l.jsx)(eD.default,{})}):V?(0,l.jsx)(c.A,{severity:"error",sx:{margin:2},children:V}):(0,l.jsxs)(ts.Ln,{children:[" ",(0,l.jsx)(ts.Gc,{nodes:ep,edges:$,onNodesChange:Z,onEdgesChange:et,nodeTypes:tT,edgeTypes:tN,fitView:!0,attributionPosition:"bottom-right",nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!1,onNodeClick:(e,t)=>{e.preventDefault(),w&&w(t.id)},onEdgeClick:e=>e.preventDefault(),onPaneClick:()=>{},children:" "})]})})]}),detail:(0,l.jsxs)(s.default,{sx:{flexGrow:1,overflowY:"auto",minHeight:0,p:2},children:[eo?(0,l.jsxs)(s.default,{children:[(0,l.jsxs)(f.default,{variant:"body2",children:[(0,l.jsx)("b",{children:"Node:"})," ",eo.nodeName," (",eo.nodeId,")"]}),(0,l.jsxs)(f.default,{variant:"body2",children:[(0,l.jsx)("b",{children:"Type:"})," ",eo.nodeType]}),(0,l.jsxs)(f.default,{variant:"body2",children:[(0,l.jsx)("b",{children:"Timestamp:"})," ",new Date(eo.timestamp).toLocaleString()]}),(0,l.jsxs)(f.default,{variant:"body2",children:[(0,l.jsx)("b",{children:"Action Taken:"})," ",eo.actionTaken]}),(0,l.jsxs)(te.A,{sx:{mt:2,boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsx)(f.default,{variant:"caption",children:"Prep Result"})}),(0,l.jsx)(tn.A,{sx:{p:0},children:(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"200px",overflowY:"auto",background:"var(--surface-raised)",color:"var(--foreground)",padding:"8px",borderRadius:"4px",fontSize:"0.75rem",margin:0},children:JSON.stringify(eo.prepResultSnapshot,null,2)})})]}),(0,l.jsxs)(te.A,{sx:{boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsxs)(f.default,{variant:"caption",color:(null==(n=eo.execResultSnapshot)?void 0:n.success)===!1?"error":"inherit",children:["Exec Result ",(null==(r=eo.execResultSnapshot)?void 0:r.success)===!1?"(Error)":""]})}),(0,l.jsx)(tn.A,{sx:{p:0},children:(null==(a=eo.execResultSnapshot)?void 0:a.success)===!1?(0,l.jsxs)(s.default,{sx:{p:1,background:k.palette.error.light,borderRadius:1},children:[(0,l.jsxs)(f.default,{variant:"body2",color:"error",gutterBottom:!0,children:[(0,l.jsx)("b",{children:"Error:"})," ",eo.execResultSnapshot.error||"Unknown error"]}),eo.execResultSnapshot.errorDetails&&(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"150px",overflowY:"auto",background:"var(--surface-raised)",color:"var(--foreground)",padding:"4px",borderRadius:"4px",fontSize:"0.75rem",margin:0},children:JSON.stringify(eo.execResultSnapshot.errorDetails,null,2)})]}):(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"200px",overflowY:"auto",background:"var(--surface-raised)",color:"var(--foreground)",padding:"8px",borderRadius:"4px",fontSize:"0.75rem",margin:0},children:JSON.stringify(eo.execResultSnapshot,null,2)})})]}),(0,l.jsxs)(te.A,{sx:{boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsx)(f.default,{variant:"caption",children:"State Before"})}),(0,l.jsx)(tn.A,{sx:{p:0},children:(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"200px",overflowY:"auto",background:"var(--surface-raised)",color:"var(--foreground)",padding:"8px",borderRadius:"4px",fontSize:"0.75rem",margin:0},children:JSON.stringify(eo.stateBefore,null,2)})})]}),(0,l.jsxs)(te.A,{sx:{boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsx)(f.default,{variant:"caption",children:"State After"})}),(0,l.jsx)(tn.A,{sx:{p:0},children:(0,l.jsx)("pre",{style:{whiteSpace:"pre-wrap",wordBreak:"break-all",maxHeight:"200px",overflowY:"auto",background:"var(--surface-raised)",color:"var(--foreground)",padding:"8px",borderRadius:"4px",fontSize:"0.75rem",margin:0},children:JSON.stringify(eo.stateAfter,null,2)})})]})]}):(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",children:"Select a step from the execution tracker."}),(0,l.jsxs)(te.A,{defaultExpanded:!0,sx:{mt:2,boxShadow:"none","&:before":{display:"none"}},children:[(0,l.jsx)(tt.A,{expandIcon:(0,l.jsx)(K.A,{}),sx:{minHeight:"36px","& .MuiAccordionSummary-content":{margin:"8px 0"}},children:(0,l.jsx)(f.default,{variant:"caption",children:"Run Data"})}),(0,l.jsx)(tn.A,{sx:{p:0},children:(0,l.jsx)(tb,{conversationId:p,refreshToken:null==I?void 0:I.resourceVersion})})]})]})};return(0,l.jsxs)(tF,{elevation:2,children:[(0,l.jsxs)(tL,{sx:{display:"flex",alignItems:"flex-start",justifyContent:"space-between"},children:[(0,l.jsxs)(s.default,{children:[(0,l.jsx)(f.default,{variant:"h6",children:"Flow Debugger"}),(0,l.jsxs)(f.default,{variant:"caption",color:"textSecondary",display:"block",children:["Click a node to toggle a breakpoint",y&&y.length>0?" \xb7 ".concat(y.length," active"):""]})]}),(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:.5},children:[(0,l.jsx)(i.A,{title:R.conversation?"Hide Conversation":"Show Conversation",children:(0,l.jsx)(d.A,{size:"small",onClick:()=>em("conversation"),color:R.conversation?"primary":"default","aria-label":R.conversation?"Hide Conversation":"Show Conversation",children:(0,l.jsx)(to.A,{fontSize:"small"})})}),(0,l.jsx)(i.A,{title:R.tracker?"Hide Execution Tracker":"Show Execution Tracker",children:(0,l.jsx)(d.A,{size:"small",onClick:()=>em("tracker"),color:R.tracker?"primary":"default","aria-label":R.tracker?"Hide Execution Tracker":"Show Execution Tracker",children:(0,l.jsx)(D.A,{fontSize:"small"})})}),(0,l.jsx)(i.A,{title:R.detail?"Hide Detail":"Show Detail",children:(0,l.jsx)(d.A,{size:"small",onClick:()=>em("detail"),color:R.detail?"primary":"default","aria-label":R.detail?"Hide Detail":"Show Detail",children:(0,l.jsx)(tr.A,{fontSize:"small"})})}),S&&(0,l.jsx)(i.A,{title:A?"Exit full screen":"Expand to full screen",children:(0,l.jsx)(d.A,{size:"small",onClick:S,"aria-label":A?"Exit full screen":"Expand to full screen",children:A?(0,l.jsx)(eb.A,{fontSize:"small"}):(0,l.jsx)(ev.A,{fontSize:"small"})})}),j&&(0,l.jsx)(i.A,{title:"Close debugger",children:(0,l.jsx)(d.A,{size:"small",onClick:j,"aria-label":"Close debugger",children:(0,l.jsx)(ex.A,{fontSize:"small"})})})]})]}),(0,l.jsx)(tW,{children:0===eg.length?(0,l.jsx)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:"100%",p:3},children:(0,l.jsx)(f.default,{variant:"body2",color:"textSecondary",children:"All sections are hidden — use the toolbar toggles above to show a section."})}):eg.map((e,t)=>(0,l.jsxs)(o.Fragment,{children:[(e=>{let t="tracker"!==e,n="conversation"===e?P:"detail"===e?L:void 0;return(0,l.jsxs)(s.default,{sx:{...t?{width:n,flexShrink:0}:{flexGrow:1,minWidth:300},display:"flex",flexDirection:"column",overflow:"hidden",minHeight:0},children:[(e=>{let t=eg.indexOf(e);return(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",px:1,py:.5,borderBottom:"1px solid ".concat(k.palette.divider)},children:[(0,l.jsx)(f.default,{variant:"subtitle2",noWrap:!0,children:tR[e]}),(0,l.jsxs)(s.default,{sx:{display:"flex"},children:[(0,l.jsx)(i.A,{title:"Move left",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",onClick:()=>ey(e,-1),disabled:t<=0,"aria-label":"Move ".concat(tR[e]," left"),children:(0,l.jsx)(J.A,{fontSize:"small"})})})}),(0,l.jsx)(i.A,{title:"Move right",children:(0,l.jsx)("span",{children:(0,l.jsx)(d.A,{size:"small",onClick:()=>ey(e,1),disabled:t<0||t>=eg.length-1,"aria-label":"Move ".concat(tR[e]," right"),children:(0,l.jsx)(tl.A,{fontSize:"small"})})})}),(0,l.jsx)(i.A,{title:"Hide section",children:(0,l.jsx)(d.A,{size:"small",onClick:()=>em(e),"aria-label":"Hide ".concat(tR[e]),children:(0,l.jsx)(ex.A,{fontSize:"small"})})})]})]})})(e),eA[e]]},e)})(e),t<eg.length-1&&((e,t)=>{let n="tracker"!==e?e:"tracker"!==t?t:null;if(!n)return null;let o="tracker"!==e?1:-1;return(0,l.jsx)(tB,{onPointerDown:e=>ew(n,o,e),"aria-label":"Resize ".concat(tR[n]," section")},"resizer-".concat(e,"-").concat(t))})(e,eg[t+1])]},e))}),(0,l.jsxs)(tq,{children:[(0,l.jsx)(h.A,{variant:"outlined",size:"small",onClick:en,disabled:b||C<=0,children:"Previous"}),(0,l.jsx)(h.A,{variant:"contained",size:"small",onClick:el,disabled:b||-1===C,children:u.executionTrace&&C<u.executionTrace.length-1?"Next Trace Step":"Step Next"}),m&&(0,l.jsx)(h.A,{variant:"outlined",size:"small",onClick:m,disabled:b,children:"Step Over"}),(0,l.jsx)(h.A,{variant:"contained",color:"secondary",size:"small",onClick:x,disabled:b,children:"Continue"}),(0,l.jsx)(h.A,{variant:"outlined",color:"error",size:"small",onClick:v,disabled:b,children:"Stop"})]})]})},tJ=(0,e8.h)("frontend/components/Chat/ExecutedFlowPanel"),tV={start:td.vm,process:td.Uw,finish:td.IK,mcp:td.v2,subflow:td.lA,resource:td.z9,signal:td.z3},tY={custom:tc.jY,mcpEdge:tc.oY,resourceEdge:tc.sZ},tK=e=>{let{flowId:t,flowSnapshot:n,executedNodeIds:r,liveActivity:a,onClose:u}=e,p=(0,eh.A)(),[h,g]=(0,o.useState)(null),[m,x]=(0,o.useState)(!0),[v,b]=(0,o.useState)(null),[y,w,j]=(0,ts.ck)([]),[A,S,I]=(0,ts.fM)([]);(0,o.useEffect)(()=>{let e=!1;return(async()=>{x(!0),b(null);try{if(n&&Array.isArray(n.nodes)){e||g(n);return}if(!t)throw Error("No flow is associated with this conversation yet.");tJ.debug("Loading flow definition for ID: ".concat(t));let l=await ti.g.getFlow(t);if(!l)throw Error("Flow with ID ".concat(t," not found."));e||g(l)}catch(t){tJ.error("Error loading flow definition:",t),e||(b(t instanceof Error?t.message:"Failed to load flow definition."),g(null))}finally{e||x(!1)}})(),()=>{e=!0}},[t,n]),(0,o.useEffect)(()=>{h&&(w(h.nodes.map(e=>({...e,draggable:!1,selectable:!1,connectable:!1}))),S(h.edges.map(e=>({...e,selectable:!1}))))},[h,w,S]);let k=(0,o.useMemo)(()=>new Set(r),[r]),[C,E]=(0,o.useState)(()=>Date.now());(0,o.useEffect)(()=>{if(!a)return;let e=()=>Object.values(a.byNode).some(e=>Date.now()-e.ts<4e3);if(!e())return;let t=setInterval(()=>{E(Date.now()),e()||clearInterval(t)},350);return()=>clearInterval(t)},[a]);let T=(0,o.useMemo)(()=>y.map(e=>{let t=k.has(e.id),n=null==a?void 0:a.byNode[e.id],l=!!n&&C-n.ts<4e3;return{...e,style:{...e.style,opacity:t||l?1:.4,border:l?"2px solid ".concat(p.palette.primary.main):t?"2px solid ".concat(p.palette.success.main):"1px solid ".concat(p.palette.divider),boxShadow:l?"0 0 10px ".concat(p.palette.primary.light):t?"0 0 8px ".concat(p.palette.success.light):void 0}}}),[y,k,a,C,p]);return(0,l.jsxs)(s.default,{sx:{display:"flex",flexDirection:"column",height:"100%",borderLeft:1,borderColor:"divider",minWidth:0},children:[(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1.5,py:1,borderBottom:1,borderColor:"divider",flexShrink:0},children:[(0,l.jsx)(D.A,{fontSize:"small",color:"action"}),(0,l.jsx)(f.default,{variant:"subtitle2",sx:{flex:1,minWidth:0},noWrap:!0,children:"Executed Steps"}),(0,l.jsx)(i.A,{title:"Hide panel",children:(0,l.jsx)(d.A,{size:"small",onClick:u,"aria-label":"Hide executed steps panel",children:(0,l.jsx)(ex.A,{fontSize:"small"})})})]}),(0,l.jsx)(s.default,{sx:{flex:1,minHeight:0,position:"relative"},children:m?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,l.jsx)(eD.default,{})}):v?(0,l.jsx)(c.A,{severity:"info",sx:{m:2},children:v}):(0,l.jsx)(ts.Ln,{children:(0,l.jsx)(ts.Gc,{nodes:T,edges:A,onNodesChange:j,onEdgesChange:I,nodeTypes:tV,edgeTypes:tY,fitView:!0,attributionPosition:"bottom-right",nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,zoomOnDoubleClick:!1})})})]})};function tQ(e){var t;return null==e||null==(t=e.nodes)?void 0:t.find(e=>{var t,n;return(null!=(n=null==e?void 0:e.type)?n:null==e||null==(t=e.data)?void 0:t.type)==="start"})}var tX=n(94929),tZ=n(74879),t$=n(29155),t0=n(63650),t1=n(49479);let t2=(0,e8.h)("frontend/components/Chat/index");function t5(e){var t;if(Array.isArray(e.content))return e.content;let n="string"==typeof e.content?e.content:"",l=null!=(t=e.attachments)?t:[],o=l.filter(e=>"image"!==e.type),r=l.filter(e=>"image"===e.type);if(o.length>0&&(n+="\n\n"+o.map(e=>"[".concat(e.type.toUpperCase(),"]: ").concat(e.content)).join("\n\n")),0===r.length)return n;let a=[];for(let e of(n.trim()&&a.push({type:"text",text:n}),r))a.push({type:"image_url",image_url:{url:e.content}});return a}let t6=/cancelled by user|execution cancelled/i,t3=e=>{var t,n;return(null==e?void 0:e.code)==="cancelled"||(null==e||null==(t=e.error)?void 0:t.code)==="cancelled"||[null==e?void 0:e.message,"string"==typeof(null==e||null==(n=e.body)?void 0:n.error)?e.body.error:void 0].some(e=>"string"==typeof e&&t6.test(e))},t4=()=>{var e,t,n;let r=(0,a.useRouter)(),[M,_]=(0,o.useState)([]),[O,P]=(0,o.useState)(!0),[F,L]=(0,o.useState)(null),[W,U]=(0,o.useState)(null),[H,q]=(0,o.useState)(!1),[B,G]=(0,o.useState)(null),[J,V]=(0,z.Mj)(z.Zg.CURRENT_CONVERSATION_ID,null),Y=(0,o.useRef)(J),K=(0,o.useRef)(new Map),Q=(0,o.useRef)(0),X=(0,o.useCallback)(e=>{let t=Q.current+1;Q.current=t;let n=Y.current;if(n===e)return void V(e);let l=n?"".concat(n,"\0"):null,o=l?[...K.current.entries()].filter(e=>{let[t]=e;return t.startsWith(l)}).map(e=>{let[,t]=e;return t}):[];if(0===o.length){Y.current=e,V(e);return}Promise.allSettled(o.map(e=>e())).then(()=>{Q.current===t&&(Y.current=e,V(e))})},[V]),[Z,ee]=(0,z.Mj)(z.Zg.LAST_PICKED_FLOW_ID,null),[et,en]=(0,o.useState)(!1),[el,eo]=(0,o.useState)(new Set),er=(0,o.useCallback)((e,t)=>{e&&eo(n=>{if(t===n.has(e))return n;let l=new Set(n);return t?l.add(e):l.delete(e),l})},[]),[ea,es]=(0,o.useState)({}),ei=(0,o.useRef)(!1),[ed,ec]=(0,o.useState)(null),[eh,eg]=(0,o.useState)([]),[em,ex]=(0,o.useState)(!1),[ev,eb]=(0,o.useState)(!1),[ey,ej]=(0,o.useState)(""),[eD,eR]=(0,o.useState)(!1),[ez,eM]=(0,o.useState)(null),[e_,eF]=(0,o.useState)(null),[eL,eW]=(0,o.useState)(null),[eH,eq]=(0,o.useState)(null),[eB,eJ]=(0,o.useState)(null),[eV,eY]=(0,o.useState)(null),[eK,eQ]=(0,o.useState)(!1),[eX,eZ]=(0,o.useState)(null),[e$,e2]=(0,o.useState)(!1),[e5,e6]=(0,o.useState)(()=>{let e=Number(window.localStorage.getItem("flujo-debugger-width"));return Number.isFinite(e)&&e>0?e:0}),[e3,e4]=(0,o.useState)(()=>"1"===window.localStorage.getItem("flujo-debugger-expanded"));(0,o.useEffect)(()=>{window.localStorage.setItem("flujo-debugger-expanded",e3?"1":"0")},[e3]);let[e8,e7]=(0,o.useState)(()=>"1"===window.localStorage.getItem("flujo-workflow-panel-visible"));(0,o.useEffect)(()=>{window.localStorage.setItem("flujo-workflow-panel-visible",e8?"1":"0")},[e8]);let[te,tt]=(0,o.useState)(()=>{let e=Number(window.localStorage.getItem("flujo-workflow-panel-width"));return Number.isFinite(e)&&e>0?e:320}),tn=(0,o.useCallback)(e=>{e.preventDefault();let t=e.clientX,n=0;tt(e=>(n=e,e));let l=document.body.style.userSelect,o=document.body.style.cursor;document.body.style.userSelect="none",document.body.style.cursor="col-resize";let r=e=>{tt(Math.min(Math.max(n+(t-e.clientX),240),Math.round(.7*window.innerWidth)))},a=()=>{window.removeEventListener("pointermove",r),window.removeEventListener("pointerup",a),document.body.style.userSelect=l,document.body.style.cursor=o,tt(e=>(e>0&&window.localStorage.setItem("flujo-workflow-panel-width",String(Math.round(e))),e))};window.addEventListener("pointermove",r),window.addEventListener("pointerup",a)},[]),tl=(0,o.useCallback)(e=>{e.preventDefault();let t=document.body.style.userSelect,n=document.body.style.cursor;document.body.style.userSelect="none",document.body.style.cursor="col-resize";let l=e=>{e6(Math.min(Math.max(window.innerWidth-e.clientX,360),Math.round(.85*window.innerWidth)))},o=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",o),document.body.style.userSelect=t,document.body.style.cursor=n,e6(e=>(e>0&&window.localStorage.setItem("flujo-debugger-width",String(Math.round(e))),e))};window.addEventListener("pointermove",l),window.addEventListener("pointerup",o)},[]),[to,tr]=(0,o.useState)(()=>{let e=Number(window.localStorage.getItem("flujo-chat-sidebar-width"));return Number.isFinite(e)&&e>0?e:300}),[ta,ts]=(0,o.useState)(()=>"1"===window.localStorage.getItem("flujo-chat-sidebar-collapsed")),td=(0,o.useCallback)(()=>{ts(e=>{let t=!e;return window.localStorage.setItem("flujo-chat-sidebar-collapsed",t?"1":"0"),t})},[]),tc=(0,o.useCallback)(e=>{e.preventDefault();let t=document.body.style.userSelect,n=document.body.style.cursor;document.body.style.userSelect="none",document.body.style.cursor="col-resize";let l=e=>{tr(Math.min(Math.max(e.clientX,220),560))},o=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",o),document.body.style.userSelect=t,document.body.style.cursor=n,tr(e=>(e>0&&window.localStorage.setItem("flujo-chat-sidebar-width",String(Math.round(e))),e))};window.addEventListener("pointermove",l),window.addEventListener("pointerup",o)},[]),[tp,th]=(0,o.useState)(null),[tg,tm]=(0,o.useState)(tu),[tx,tv]=(0,o.useState)(eO),[tb,ty]=(0,o.useState)([]),[tw,tj]=(0,o.useState)(new Set),[tA,tS]=(0,o.useState)([]),[tI,tk]=(0,o.useState)(null),tC=(0,o.useRef)(null),tE=(0,o.useRef)(null),tT=(0,o.useRef)(null),tN=(0,o.useRef)(-1),tD=(0,o.useRef)(new Map);(0,o.useEffect)(()=>{Y.current=J},[J]);let tR=(0,o.useRef)(new Set),tz=(0,o.useRef)(new Set),tM=(0,o.useRef)(new Set),[t_,tO]=(0,o.useState)(new Set),tP=(0,o.useCallback)((e,t)=>{e&&(t?tM.current.add(e):tM.current.delete(e),tO(new Set(tM.current)))},[]),tF=(0,o.useRef)(null),tL=(0,o.useRef)(!0),[tW,tU]=(0,o.useState)(!1),tH=(0,o.useCallback)(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"auto",t=tF.current;t&&t.scrollTo({top:t.scrollHeight,behavior:e})},[]),tq=(0,o.useCallback)(()=>{let e=tF.current;if(!e)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight<80;tL.current=t,tU(!t)},[]),tB=(0,o.useCallback)(()=>{tL.current=!0,tU(!1),tH("smooth")},[tH]);(0,o.useEffect)(()=>{tL.current=!0,tU(!1)},[J]),(0,o.useEffect)(()=>{tL.current&&tH("auto")},[null==W?void 0:W.messages,tH]);let tJ=(0,o.useRef)(null);(0,o.useEffect)(()=>{tJ.current=tI},[tI]),(0,o.useEffect)(()=>{let e=window.location.origin+"/v1";tC.current=new t$.Ay({baseURL:e,apiKey:"FLUJO",dangerouslyAllowBrowser:!0,maxRetries:0,timeout:18e6})},[]),(0,o.useEffect)(()=>{(async()=>{t2.debug("Loading flows");try{let e=await ti.g.loadFlows();eg(e)}catch(e){t2.error("Error loading flows:",e)}})()},[]);let tV=(0,o.useCallback)(async(e,t)=>{var n;let l=null!=(n=null==t?void 0:t.silent)&&n;t2.debug("Fetching conversation list from backend",{silent:l}),l||(P(!0),L(null));let o=[],r=!1;try{for(let e of o=(await t1.O.listConversations()).filter(e=>!tz.current.has(e.id)).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}))tR.current.delete(e.id);_(e=>{let t=e.filter(e=>tR.current.has(e.id)),n=t.length>0?[...t,...o].sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}):o;return((e,t)=>e.length===t.length&&e.every((e,n)=>{let l=t[n];return e.id===l.id&&e.title===l.title&&e.flowId===l.flowId&&e.status===l.status&&e.plannedExecutionId===l.plannedExecutionId&&e.parentConversationId===l.parentConversationId&&e.rootConversationId===l.rootConversationId&&e.createdAt===l.createdAt&&e.updatedAt===l.updatedAt}))(e,n)?e:n}),t2.info("Fetched ".concat(o.length," conversations for the list"))}catch(e){r=!0,t2.error("Error fetching conversation list:",e),l||(L("Failed to load conversation history."),_([]))}finally{if(l||P(!1),l||r)return;let t=void 0!==e?e:Y.current,n=Y.current;if(t&&(e=>o.some(t=>t.id===e)||tR.current.has(e))(t))t!==n&&(t2.debug("Setting currentConversationId to ".concat(t," after fetch/operation.")),X(t));else if(o.length>0){let e=o[0].id;e!==n&&(t2.debug("Selecting most recent conversation ".concat(e," after fetch/operation.")),X(e))}else null===n||tR.current.has(n)||(t2.debug("No conversations available after fetch/operation, clearing selection."),X(null))}},[X]);(0,o.useEffect)(()=>{tV()},[]),(0,o.useEffect)(()=>{let e=()=>{("undefined"==typeof document||"visible"===document.visibilityState)&&tV(void 0,{silent:!0})},t=setInterval(e,5e3);return document.addEventListener("visibilitychange",e),()=>{clearInterval(t),document.removeEventListener("visibilitychange",e)}},[tV]);let tY=(0,o.useCallback)(async e=>{if(tR.current.has(e))return void t2.debug("Skipping detail fetch for client-only conversation",{conversationId:e});if(Y.current!==e){t2.debug("Detail fetch requested for non-viewed conversation; refreshing list instead",{conversationId:e}),tV(void 0,{silent:!0});return}t2.debug("Fetching detailed conversation",{conversationId:e}),q(!0),G(null);try{let t=await t1.O.getConversation(e);if(Y.current!==e)return void t2.debug("Discarding stale detailed conversation response",{fetchedId:e,currentId:Y.current});void 0===t.mcpAppContexts||tD.current.has(e)||tD.current.set(e,{...t.mcpAppContexts}),U(t),_(n=>n.map(n=>{var l;return n.id===e?{...n,title:t.title,flowId:t.flowId,updatedAt:t.updatedAt,status:null!=(l=t.status)?l:n.status}:n}).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})),t2.info("Fetched detailed conversation successfully",{conversationId:e})}catch(t){if(t2.error("Error fetching detailed conversation:",{conversationId:e,err:t}),Y.current!==e)return;t instanceof t1.b&&404===t.status?(G("Conversation ".concat(e," not found.")),X(null),tV()):G("Failed to load details for conversation ".concat(e,".")),U(null)}finally{Y.current===e&&q(!1)}},[tV,X]);(0,o.useEffect)(()=>{eM(null),eJ(null),J?tY(J):(U(null),q(!1),G(null))},[J,tY]),(0,o.useEffect)(()=>{if(W){var e;ex(null!=(e=W.requireApproval)&&e)}},[null==W?void 0:W.id]);let t4=(0,o.useCallback)(async e=>{if(ex(e),J)try{await t1.O.updateConversationApproval(J,e)}catch(e){t2.warn("Failed to persist requireApproval setting",{conversationId:J,err:e})}},[J]),t8=M.find(e=>e.id===J)||null,t7=(0,o.useMemo)(()=>{let e={};for(let t of eh)t.id&&(e[t.id]=t.name);return e},[eh]),t9=(0,o.useMemo)(()=>eh.find(e=>e.id===(null==W?void 0:W.flowId))||null,[eh,null==W?void 0:W.flowId]),ne=(0,o.useMemo)(()=>{var e;return(null==t9||null==(e=t9.nodes)?void 0:e.map(e=>({id:e.id,label:e.data.label||e.id})))||[]},[t9]),nt=(0,o.useMemo)(()=>{var e;return function(e){var t,n,l,o;let r=new Set;return null==(t=e.messages)||t.forEach(e=>{(null==e?void 0:e.processNodeId)&&r.add(e.processNodeId)}),null==(n=e.nodeExecutionTracker)||n.forEach(e=>{(null==e?void 0:e.nodeId)&&r.add(e.nodeId)}),null==(l=e.executionTrace)||l.forEach(e=>{(null==e?void 0:e.nodeId)&&r.add(e.nodeId)}),null==(o=e.sseVisitedIds)||o.forEach(e=>{e&&r.add(e)}),Array.from(r)}({messages:null==W?void 0:W.messages,nodeExecutionTracker:null==eX||null==(e=eX.trackingInfo)?void 0:e.nodeExecutionTracker,executionTrace:null==eX?void 0:eX.executionTrace,sseVisitedIds:tw})},[null==W?void 0:W.messages,eX,tw]);(0,o.useEffect)(()=>{tj(new Set)},[null==W?void 0:W.id]);let nn=(0,o.useMemo)(()=>{var e,t,n;let l=e=>!!e&&ne.some(t=>t.id===e);if(l(eB))return eB;if(l(null==W?void 0:W.currentNodeId))return W.currentNodeId;let o=null!=(t=null==W?void 0:W.messages)?t:[];for(let e=o.length-1;e>=0;e--){let t=o[e];if("assistant"===t.role&&l(t.processNodeId))return t.processNodeId}return null!=(n=null==(e=ne[0])?void 0:e.id)?n:null},[eB,W,ne]),nl=async e=>{var t,n,l,o;t2.debug("Attempting to create new conversation"),ec(null);let r="string"!=typeof e||$(e)?void 0:eh.find(t=>t.id===e),a=Z&&!$(Z)?eh.find(e=>e.id===Z):void 0,s=(null==(t=null!=(l=null!=(n=null!=r?r:a)?n:eh.find(e=>e.favorite))?l:eh[0])?void 0:t.id)||null;if(!s){t2.error("Cannot create conversation: No flows available or first flow has no ID."),ec("Cannot create a new conversation: No flows available.");return}let i=(0,tZ.A)(),d=Date.now(),c={id:i,title:"New Conversation",flowId:s,createdAt:d,updatedAt:d};try{t2.info("Sending request to create conversation on backend",{payload:JSON.stringify(c)});let e=await t1.O.createConversation(c);t2.info("Successfully created conversation on backend",{conversationId:e.id}),_(t=>[e,...t].sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})),X(e.id),U({id:e.id,title:e.title,flowId:e.flowId,createdAt:e.createdAt,updatedAt:e.updatedAt,messages:[]}),q(!1),G(null)}catch(t){t2.error("Error creating conversation on backend:",t);let e="Failed to create conversation on the server.";t instanceof t1.b?e+=" Error: ".concat((null==(o=t.body)?void 0:o.error)||t.message):t instanceof Error&&(e+=" Error: ".concat(t.message)),ec(e)}},no=(0,o.useRef)(!1);(0,o.useEffect)(()=>{if(no.current||0===eh.length)return;let e=new URLSearchParams(window.location.search).get("flow");if(!e){no.current=!0;return}no.current=!0,eh.some(t=>t.id===e)&&!$(e)&&nl(e),r.replace("/chat")},[eh]);let[nr,na]=(0,o.useState)(!1),ns=async e=>{ec(null);let t=(0,tZ.A)(),{flow:n}=await t1.O.synthesizeQuickChat({conversationId:t,modelId:e.modelId,servers:e.servers,systemPrompt:e.systemPrompt}),l=Date.now(),o=await t1.O.createConversation({id:t,title:"Quick Chat",flowId:n.id,flowSnapshot:n,createdAt:l,updatedAt:l});_(e=>[o,...e].sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})),X(o.id),U({id:o.id,title:o.title,flowId:o.flowId,createdAt:o.createdAt,updatedAt:o.updatedAt,messages:[]}),q(!1),G(null),na(!1)},ni=(0,o.useCallback)(e=>{t2.debug("Updating detailed conversation state locally",{conversationId:e.id});let t={...e,updatedAt:Date.now()};U(t),_(e=>e.map(e=>e.id===t.id?{...e,title:t.title,updatedAt:t.updatedAt}:e).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}))},[]),nd=(0,o.useCallback)(()=>{tT.current&&(t2.debug("Closing execution event stream"),tT.current.close(),tT.current=null)},[]),nc=(0,o.useCallback)((e,t)=>{_(n=>{let l=n.findIndex(t=>t.id===e);if(-1===l||n[l].status===t)return n;let o=[...n];return o[l]={...o[l],status:t},o})},[]),nu=(0,o.useCallback)(e=>{var t,n,l,o,r;if("number"==typeof e.seq){if(e.seq<=tN.current)return;tN.current=e.seq}let a=e=>th(t=>{var n,l,o,r;return{totalTokens:null!=(l=null!=(n=e.totalTokens)?n:null==t?void 0:t.totalTokens)?l:0,activeNode:void 0!==e.activeNode?e.activeNode:null!=(o=null==t?void 0:t.activeNode)?o:null,startedAt:null!=(r=null==t?void 0:t.startedAt)?r:Date.now(),lastEventAt:Date.now()}}),s=e=>tm(t=>{let n=Date.now(),l={byNode:{...t.byNode},byResource:{...t.byResource},byResourceName:{...t.byResourceName},resourceVersion:t.resourceVersion};return e(l),function(e,t){let n=e=>{let n={};for(let[l,o]of Object.entries(e))t-o.ts<4e3&&(n[l]=o);return n};return{byNode:n(e.byNode),byResource:n(e.byResource),byResourceName:n(e.byResourceName),resourceVersion:e.resourceVersion}}(l,n)});if(null!=e.laneIndex)switch(tv(t=>(function(e,t){var n,l,o,r,a,s;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),d=t.laneIndex,c=t.laneCount;if(null==d||null==c)return e;let u=("subflow:start"===t.type||"subflow:done"===t.type)&&1===t.depth;if(u&&"subflow:start"===t.type){let r=null==(n=t.node)?void 0:n.nodeId,a=e.ownerNodeId&&r&&e.ownerNodeId!==r?{}:{...e.byIndex};return eP(a,c,i),a[d]={laneIndex:d,laneCount:c,label:t.laneTitle||function(e,t,n){let l=e.subflowName||e.subflowId;return l?"".concat(l," ").concat(t+1,"/").concat(n):"Lane ".concat(t+1,"/").concat(n)}(t,d,c),laneConversationId:null!=(o=t.laneConversationId)?o:null==(l=a[d])?void 0:l.laneConversationId,status:"running",lastEventAt:i},{ownerNodeId:null!=r?r:e.ownerNodeId,byIndex:a}}if(u&&"subflow:done"===t.type){let n={...e.byIndex};eP(n,c,i);let l=n[d];return n[d]={...l,label:l.label&&"pending"!==l.status?l.label:t.laneTitle||l.label,laneConversationId:null!=(a=l.laneConversationId)?a:t.laneConversationId,status:"capped"===t.status?"completed":t.status,activity:void 0,lastEventAt:i},{ownerNodeId:null!=(s=e.ownerNodeId)?s:null==(r=t.node)?void 0:r.nodeId,byIndex:n}}let f=function(e){switch(e.type){case"node:enter":var t,n;return(null==(t=e.node)?void 0:t.nodeName)||(null==(n=e.node)?void 0:n.nodeId)||void 0;case"tool:call":return e.name;case"tool:progress":return e.message?"".concat(e.name," — ").concat(e.message):e.name;case"subflow:start":return"↳ ".concat(e.subflowName||e.subflowId);case"handoff":return"→ ".concat(e.toNodeId);default:return}}(t);if(void 0===f)return e;let p=e.byIndex[d];if(p&&p.activity===f&&"pending"!==p.status||p&&("completed"===p.status||"error"===p.status))return e;let h={...e.byIndex};eP(h,c,i);let g=h[d];return h[d]={...g,status:"pending"===g.status?"running":g.status,activity:f,lastEventAt:i},{ownerNodeId:e.ownerNodeId,byIndex:h}})(t,e)),e.type){case"node:enter":if(null==(t=e.node)?void 0:t.nodeId){let t=e.node.nodeId;s(e=>{e.byNode[t]={kind:"active",ts:Date.now()}}),tj(e=>e.has(t)?e:new Set(e).add(t))}a({});return;case"tool:call":case"tool:progress":case"subflow:start":case"handoff":a({});return}switch(e.type){case"run:start":th({totalTokens:0,activeNode:null,startedAt:Date.now(),lastEventAt:Date.now()}),tm(tu),tv(eO),ty([]),e.conversationId&&(nc(e.conversationId,"running"),tP(e.conversationId,!1));break;case"model:delta":a({}),U(t=>{var n,l,o,r,a,s,i,d,c;if(!t||t.id!==e.conversationId)return t;let u=t.messages.findIndex(t=>t.id===e.messageId),f=u>=0?t.messages[u]:{id:e.messageId,role:"assistant",content:"",timestamp:e.timestamp,processNodeId:null==(n=e.node)?void 0:n.nodeId};if("assistant"!==f.role)return t;let p=[...null!=(l=f.tool_calls)?l:[]],h=e.toolCallDelta;if(h){let t=p[h.index];p[h.index]={id:null!=(r=null!=(o=h.id)?o:null==t?void 0:t.id)?r:"pending_".concat(e.messageId,"_").concat(h.index),type:"function",function:{name:"".concat(null!=(a=null==t?void 0:t.function.name)?a:"").concat(null!=(s=h.nameDelta)?s:""),arguments:"".concat(null!=(i=null==t?void 0:t.function.arguments)?i:"").concat(null!=(d=h.argumentsDelta)?d:"")}}}let g={...f,content:"".concat("string"==typeof f.content?f.content:"").concat(null!=(c=e.delta)?c:""),...p.length>0?{tool_calls:p}:{}},m=[...t.messages];return u>=0?m[u]=g:m.push(g),{...t,messages:m}});break;case"model:end":a({}),e.discard&&e.messageId&&U(t=>{if(!t||t.id!==e.conversationId)return t;let n=t.messages.filter(t=>t.id!==e.messageId);return n.length===t.messages.length?t:{...t,messages:n}});break;case"message":{let t=e.message;a({}),U(n=>{let l;if(!n||n.id!==e.conversationId)return n;let o=n.messages.findIndex(e=>e.id===t.id);return o>=0?(l=[...n.messages])[o]={...l[o],...t}:l=[...n.messages,t],{...n,messages:l}});break}case"usage":th(t=>{var n,l,o;return{totalTokens:(null!=(n=null==t?void 0:t.totalTokens)?n:0)+(e.totalTokens||0),activeNode:null!=(l=null==t?void 0:t.activeNode)?l:null,startedAt:null!=(o=null==t?void 0:t.startedAt)?o:Date.now(),lastEventAt:Date.now()}});break;case"node:enter":if(a({activeNode:(null==(n=e.node)?void 0:n.nodeName)||(null==(l=e.node)?void 0:l.nodeId)||null}),null==(o=e.node)?void 0:o.nodeId){let t=e.node.nodeId;s(e=>{e.byNode[t]={kind:"active",ts:Date.now()}}),tj(e=>e.has(t)?e:new Set(e).add(t))}break;case"resource:read":case"resource:write":{let t="resource:read"===e.type?"read":"write";s(n=>{var l;let o=Date.now();(null==(l=e.node)?void 0:l.nodeId)&&(n.byNode[e.node.nodeId]={kind:"read"===t?"resource-read":"resource-write",ts:o}),e.server&&e.uri&&(n.byResource[tf(e.server,e.uri)]={kind:t,ts:o}),e.name&&(n.byResourceName[e.name]={kind:t,ts:o}),"write"===t&&(n.resourceVersion=n.resourceVersion+1)}),a({});break}case"todo:update":ty(null!=(r=e.todos)?r:[]),a({});break;case"tool:call":a({activeNode:e.name});break;case"tool:progress":a({activeNode:e.message?"".concat(e.name," — ").concat(e.message):e.name});break;case"subflow:start":a({activeNode:"↳ ".concat(e.subflowName||e.subflowId)});break;case"handoff":a({activeNode:"→ ".concat(e.toNodeId)});break;case"run:awaiting_approval":e.conversationId&&e.conversationId===Y.current&&eM(e.pendingToolCalls||[]),e.conversationId&&nc(e.conversationId,"awaiting_tool_approval");break;case"run:awaiting_elicitation":e.conversationId&&e.conversationId===Y.current&&eF({elicitationId:e.elicitationId,message:e.message,requestedSchema:e.requestedSchema});break;case"run:awaiting_question":e.conversationId&&e.conversationId===Y.current&&eW({questionId:e.questionId,questions:e.questions});break;case"breakpoint:hit":case"run:paused":en(!1),e.conversationId&&(er(e.conversationId,!1),nc(e.conversationId,"paused_debug")),eQ(!0);break;case"run:done":if(e.conversationId&&(er(e.conversationId,!1),nc(e.conversationId,e.status)),e.conversationId===Y.current&&(eF(null),eW(null)),e.conversationId&&tJ.current&&e.conversationId!==tJ.current)break;th(null),tm(tu),tv(eO),en(!1),tk(null),nd(),e.conversationId&&e.conversationId===Y.current?tY(e.conversationId):tV(void 0,{silent:!0});break;case"error":ec(e.message||"Execution error");break;default:a({})}},[nd,tY,tV,er,nc,tP]),nf=(0,o.useCallback)((e,t)=>(nd(),tN.current=void 0!==t?t-1:-1,tv(eO),new Promise(n=>{let l=!1,o=()=>{l||(l=!0,n())};try{tT.current=t1.O.subscribeToEvents(e,{onEvent:nu,onOpen:o},t),setTimeout(o,1500)}catch(t){t2.error("Failed to open execution event stream",{conversationId:e,err:t}),o()}})),[nu,nd]);(0,o.useEffect)(()=>{if(J&&(null==t8?void 0:t8.status)==="running"&&tJ.current!==J){if(tM.current.has(J))return void t2.debug("Skipping re-attach to a conversation the user just stopped",{conversationId:J});t2.info("Re-attaching to in-progress run",{conversationId:J}),tJ.current=J,en(!0),tk(J),er(J,!0),th(e=>null!=e?e:{totalTokens:0,activeNode:null,startedAt:Date.now(),lastEventAt:Date.now()}),nf(J,0)}},[J,null==t8?void 0:t8.status,nf]);let np=async e=>{t2.debug("Attempting to delete conversation",{conversationId:e}),ec(null),tz.current.add(e);let t=tR.current.delete(e);tJ.current===e&&(nd(),en(!1),tk(null),th(null),tv(eO)),er(e,!1),es(t=>eT(t,e));let n=M.filter(t=>t.id!==e);_(n);let l=J;J===e&&(n.length>0?(l=n[0].id,t2.debug("Deleted current conversation, selecting next most recent",{nextSelectionId:l})):(l=null,t2.debug("Deleted last conversation, clearing selection")),X(l));try{await t1.O.deleteConversation(e),t2.info("Successfully deleted conversation on backend",{conversationId:e})}catch(n){t2.error("Error deleting conversation:",{conversationId:e,err:n}),ec("Failed to delete conversation ".concat(e,". Please try again.")),tz.current.delete(e),t&&tR.current.add(e),_(M),X(J)}},nh=async e=>{if(!e.length)return;ec(null);let t=new Set(e);e.forEach(e=>tz.current.add(e));let n=Y.current;n&&t.has(n)&&tJ.current===n&&(nd(),en(!1),tk(null),th(null),tv(eO)),e.forEach(e=>{er(e,!1),es(t=>eT(t,e))}),_(e=>e.filter(e=>!t.has(e.id))),n&&t.has(n)&&X(null);try{let t=await t1.O.deleteConversations(e);t2.info("Bulk delete succeeded",{requested:e.length,...t})}catch(t){t2.error("Bulk delete failed",{err:t}),ec("Failed to delete conversations. Please try again."),e.forEach(e=>tz.current.delete(e)),_(M),X(J)}},ng=async e=>{if(t2.debug("Flow selected, attempting to update",{flowId:e,currentConversationId:J}),ec(null),!J){t2.warn("Cannot update flow: No conversation selected."),ec("Please select a conversation first.");return}W&&W.id===J&&U({...W,flowId:e,updatedAt:Date.now()}),_(t=>t.map(t=>t.id===J?{...t,flowId:e,updatedAt:Date.now()}:t).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}));try{let t=await t1.O.updateConversationFlow(J,e);t2.info("Successfully updated flowId on backend",{conversationId:J,flowId:e}),U(e=>e&&e.id===J?(t2.debug("Confirming detailedConversation update from server response",{conversationId:J,flowId:t.flowId}),{...e,flowId:t.flowId,updatedAt:t.updatedAt}):(t2.debug("Skipping detailedConversation update, ID mismatch or null state",{currentDetailedId:null==e?void 0:e.id,targetId:J}),e)),_(e=>e.map(e=>e.id===J?t:e).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}))}catch(l){t2.error("Error updating flowId on backend:",{conversationId:J,flowId:e,err:l});let n="Failed to update the selected flow.";if(l instanceof t1.b){var t;n+=" Error: ".concat((null==(t=l.body)?void 0:t.error)||l.message)}else l instanceof Error&&(n+=" Error: ".concat(l.message));ec(n),U(W),_(M)}},nm=()=>{var e,t;ej(null!=(t=null!=(e=null==W?void 0:W.title)?e:null==t8?void 0:t8.title)?t:""),eb(!0)},nx=async()=>{var e,t;if(eb(!1),!J)return;let n=null!=(t=null!=(e=null==W?void 0:W.title)?e:null==t8?void 0:t8.title)?t:"",l=ey.trim().slice(0,200);if(l&&l!==n){U(e=>e&&e.id===J?{...e,title:l}:e),_(e=>e.map(e=>e.id===J?{...e,title:l}:e));try{let e=await t1.O.updateConversationTitle(J,l);U(t=>t&&t.id===J?{...t,title:e.title}:t),_(t=>t.map(t=>t.id===J?{...t,title:e.title}:t))}catch(e){t2.warn("Failed to rename conversation",{conversationId:J,err:e}),U(e=>e&&e.id===J?{...e,title:n}:e),_(e=>e.map(e=>e.id===J?{...e,title:n}:e)),ec("Failed to rename the conversation.")}}},nv=async function(e){var t;let n,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2?arguments[2]:void 0;if(!e.trim()&&0===l.length)return;if(!W){t2.error("Cannot send message, detailed conversation not loaded."),ec("Cannot send message: conversation details not loaded.");return}if(!(null==o?void 0:o.fromQueue)&&el.has(W.id)){let t=W.id;if(0!==l.length||eB){let n={id:(0,tZ.A)(),content:e,attachments:l,nodeOverride:null!=eB?eB:null,timestamp:Date.now()};es(e=>({...e,[t]:[...eE(e,t),n]})),eJ(null),t2.debug("Run in progress — queued message (not steerable)",{conversationId:t,queuedId:n.id,reason:l.length>0?"attachments":"node-override"});return}{let n=(0,tZ.A)(),{delivered:l}=await t1.O.injectMessage(t,e,n);if(l){let l={id:n,role:"user",content:e,timestamp:Date.now()};ni({...W,messages:[...W.messages,l]}),t2.debug("Run in progress — injected steering message into the live run",{conversationId:t,messageId:n});return}t2.debug("Steering rejected (run no longer live) — sending as a normal turn",{conversationId:t})}}t2.debug("Sending message",{conversationId:W.id,contentLength:e.length,attachmentsCount:l.length});let r=W.messages,a=!r.some(e=>"user"===e.role),s=W.flowId,i=(null==o?void 0:o.fromQueue)?null!=(t=o.nodeOverride)?t:null:eB;if(i)n=i,(null==o?void 0:o.fromQueue)||eJ(null),t2.debug("Assigning manually picked node ID to user message: ".concat(n));else if(a){let e=tQ(eh.find(e=>e.id===s));e?(n=e.id,t2.debug("Assigning start node ID to first user message: ".concat(n))):t2.warn("Could not find start node for flow ".concat(s,". User message will not have a processNodeId."))}else if((null==t8?void 0:t8.status)==="error"){let e=tQ(eh.find(e=>e.id===s));e?(n=e.id,t2.debug("Post-error message: re-driving turn from start node ID: ".concat(n))):t2.warn("Could not find start node for post-error message in flow ".concat(s,". User message will not have a processNodeId."))}else{for(let e=r.length-1;e>=0;e--){let t=r[e];if("assistant"===t.role&&t.processNodeId){n=t.processNodeId,t2.debug("Assigning last assistant node ID to user message: ".concat(n));break}}if(!n){let e=tQ(eh.find(e=>e.id===s));e?(n=e.id,t2.debug("No prior assistant node ID found, falling back to start node ID: ".concat(n))):t2.warn("Could not find start node for fallback in flow ".concat(s,". User message will not have a processNodeId."))}}let d={id:(0,tZ.A)(),role:"user",content:e,timestamp:Date.now(),attachments:l.length>0?l:void 0,processNodeId:n},c={...W,messages:[...W.messages,d]};ni(c),c.flowId?await nw(c):(ec("Please select a flow for this conversation before sending messages"),U(W))},nb=(0,o.useCallback)((e,t)=>{t2.verbose("Handling API response data",JSON.stringify(e)),er(t,"running"===e.status);let n=tJ.current===t,l=Y.current===t;if("paused_debug"===e.status&&e.debugState)return(t2.info("API Response: Paused for debugging",{conversationId:t}),l)?(eZ(e.debugState),eQ(!0),e2(!0),en(!1),tk(null),nd(),ny(),U(n=>(null==n?void 0:n.id)===t&&e.debugState.messages&&JSON.stringify(n.messages)!==JSON.stringify(e.debugState.messages)?(t2.debug("Updating detailed conversation messages from debug state"),{...n,messages:e.debugState.messages,updatedAt:e.debugState.updatedAt}):n),_(n=>n.map(n=>{var l,o;return n.id===t?{...n,title:null!=(l=e.debugState.title)?l:n.title,flowId:null!=(o=e.debugState.flowId)?o:n.flowId,status:"paused_debug",updatedAt:e.debugState.updatedAt}:n}).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)}))):(nc(t,"paused_debug"),n&&(en(!1),tk(null),nd(),ny())),!0;if(("completed"===e.status||"error"===e.status)&&l?(t2.info("API Response: Execution completed or errored (Status: ".concat(e.status,"). Hiding debugger panel."),{conversationId:t}),eQ(!1),eZ(null),e2(!1)):t2.debug("API Response: Status is '".concat(e.status,"'. Debugger panel visibility unchanged (currently ").concat(eK?"visible":"hidden",")."),{conversationId:t}),e.messages&&e.conversation_id===t){let n=e.messages.map((e,n)=>"number"!=typeof e.timestamp||isNaN(e.timestamp)?(t2.warn("Invalid timestamp found in message index ".concat(n," from API response. Defaulting to Date.now()."),{conversationId:t,messageId:e.id,invalidTimestamp:e.timestamp}),{...e,timestamp:Date.now()}):e);U(l=>{var o,r;let a=l;return(null==l?void 0:l.id)===t&&JSON.stringify(l.messages)!==JSON.stringify(n)&&(t2.info("API Response/Polling: Updating detailed conversation messages",{conversationId:t,newMessageCount:n.length}),a={...l,messages:n,updatedAt:e.updatedAt||l.updatedAt}),t2.debug("Polling: setDetailedConversation callback executed.",{conversationId:t,messagesChanged:a!==l,newMessageCount:null!=(r=null==a||null==(o=a.messages)?void 0:o.length)?r:"N/A"}),a})}if("awaiting_tool_approval"===e.status)t2.info("API Response/Polling: Pausing for tool approval",{conversationId:t}),l&&eM(e.pendingToolCalls||[]),n&&(en(!1),tk(null),nd(),ny());else if("completed"===e.status||"error"===e.status){if(t2.info("API Response/Polling: Stopping due to final status",{conversationId:t,status:e.status}),n&&(ny(),en(!1),tk(null),nd()),"error"===e.status){var o,r;let a=(null==(o=e.error)?void 0:o.message)||(null==(r=e.lastResponse)?void 0:r.error)||"Unknown error during execution";t6.test(a)||tM.current.has(t)?(tP(t,!0),(n||l)&&ec(null),t2.info("API Response/Polling: Execution cancelled by user",{conversationId:t})):(ec(a),t2.error("API Response/Polling: Execution resulted in error",{conversationId:t,error:e.error||e.lastResponse}))}tY(t)}else"running"!==e.status||eK?l&&eM(null):(l&&eM(null),n&&!tE.current&&en(!0));return e.conversation_id===t&&_(n=>n.map(n=>{var l,o,r;return n.id===t?{...n,title:null!=(l=e.title)?l:n.title,flowId:null!=(o=e.flowId)?o:n.flowId,status:null!=(r=e.status)?r:n.status,updatedAt:e.updatedAt||n.updatedAt}:n}).sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})),!1},[U,eM,en,ec,eQ,eZ,_,tY,nd,er,nc,tP]),ny=()=>{tE.current&&(t2.debug("Stopping polling interval"),clearInterval(tE.current),tE.current=null)};(0,o.useEffect)(()=>()=>{nd()},[nd]);let nw=async e=>{if(!(null==e?void 0:e.id)||!e.flowId||!tC.current)return t2.error("Cannot send to completions: Missing conversation ID or flow ID.",{id:null==e?void 0:e.id,flowId:null==e?void 0:e.flowId}),ec("Cannot send message: Missing conversation ID or flow ID."),!1;eM(null),ec(null),en(!0),tk(e.id),er(e.id,!0),tP(e.id,!1);let t=tR.current.delete(e.id);th({totalTokens:0,activeNode:null,startedAt:Date.now(),lastEventAt:Date.now()}),await nf(e.id);let n=!1;try{let t;if($(e.flowId))t="flow-Quick Chat",t2.debug("Sending quick chat to completions",{flowId:e.flowId,conversationId:e.id});else{let n=await ti.g.getFlow(e.flowId);if(!n)throw Error("Flow with ID ".concat(e.flowId," not found"));t="flow-".concat(n.name),t2.debug("Sending to chat completions",{flowId:e.flowId,flowName:n.name,conversationId:e.id})}let l=e.messages.filter(e=>{var t;return!e.disabled&&!((null!=(t=e.depth)?t:0)>0)}).map(e=>{let t=t5(e),n=e.processNodeId,l={id:e.id,timestamp:e.timestamp};return"user"===e.role?{role:"user",content:t,...l,processNodeId:n}:"assistant"===e.role?{role:"assistant",content:t,tool_calls:e.tool_calls,...l,processNodeId:n}:"system"===e.role?{role:"system",content:t,...l,processNodeId:n}:"tool"===e.role?e.tool_call_id?{role:"tool",content:t,tool_call_id:e.tool_call_id,...l,processNodeId:n}:{role:"user",content:"string"==typeof t?"Tool result: ".concat(t):t,...l,processNodeId:n}:{role:"user",content:t,...l,processNodeId:n}}),o=await tC.current.chat.completions.create({model:t,messages:l,stream:!1,metadata:(()=>{let t=tD.current.get(e.id),n={flujo:"true",requireApproval:em?"true":void 0,flujodebug:eD?"true":void 0,conversationId:e.id,mcpAppContexts:void 0===t?void 0:JSON.stringify(t)},l={};return n.flujo&&(l.flujo=n.flujo),n.requireApproval&&(l.requireApproval=n.requireApproval),n.flujodebug&&(l.flujodebug=n.flujodebug),n.conversationId&&(l.conversationId=n.conversationId),void 0!==n.mcpAppContexts&&(l.mcpAppContexts=n.mcpAppContexts),l})()});t2.debug("Chat completion initial response received",{completionId:o.id}),n=!0;let r={...o,status:o.status||"completed",conversation_id:e.id,messages:o.messages||e.messages,pendingToolCalls:o.pendingToolCalls,debugState:o.debugState,error:o.error,lastResponse:o.lastResponse,updatedAt:o.updatedAt||Date.now()},a=nb(r,e.id);a||tE.current?a&&t2.debug("Debug state handled, polling remains stopped."):t2.debug("Starting polling after initial non-debug response.")}catch(r){if(t3(r)||tM.current.has(e.id))return t2.info("Chat completion cancelled by user",{conversationId:e.id}),n=!1,er(e.id,!1),tP(e.id,!0),tJ.current===e.id&&(ny(),en(!1),tk(null),nd(),ec(null)),n;t2.error("Error calling chat completions API:",r),n=!1;let o="An error occurred while sending the message.";if(r instanceof t0.LG)o="API Error: ".concat(r.message," (Status: ").concat(r.status,")"),r.code&&(o+=" (Code: ".concat(r.code,")")),r.type&&(o+=" [Type: ".concat(r.type,"]")),t2.verbose("APIError details",JSON.stringify(r));else if(r instanceof t0.vc){o="OpenAI Error: ".concat(r.message);let e=r.error;e&&"object"==typeof e&&(e.code&&(o+=" (Code: ".concat(e.code,")")),e.type&&(o+=" [Type: ".concat(e.type,"]"))),t2.verbose("OpenAIError details",JSON.stringify(r))}else if(r instanceof t1.b){var l;o="Error: ".concat((null==(l=r.body)?void 0:l.error)||r.message),r.status&&(o+=" (Status: ".concat(r.status,")")),t2.verbose("ChatApiError details",JSON.stringify(r.body))}else r instanceof Error&&(o=r.message);ec(o),er(e.id,!1),tJ.current===e.id&&(ny(),en(!1),tk(null),nd()),t&&tR.current.add(e.id)}finally{}return n},nj=(0,o.useRef)(nv);nj.current=nv;let nA=(0,o.useCallback)(e=>!!J&&Y.current===J&&(nj.current(e),!0),[J]),nS=(0,o.useCallback)((e,t)=>{var n;if(!J||Y.current!==J)return!1;let l={...null!=(n=tD.current.get(J))?n:{}};return(void 0===t.content&&void 0===t.structuredContent?delete l[e]:l[e]=t,(0,ew.Yw)(l)>ew.uJ)?(t2.warn("Rejected oversized aggregate MCP App model context",{conversationId:J,appKey:e}),!1):(tD.current.set(J,l),!0)},[J]),[nI,nk]=(0,o.useState)(eS),[nC,nE]=(0,o.useState)(J),nT=(0,o.useRef)(new Set),nN=(0,o.useCallback)((e,t,n)=>{let l="".concat(e,"\0").concat(t);n?K.current.set(l,n):K.current.delete(l)},[]),nD=(0,o.useCallback)((e,t)=>{J&&nN(J,e,t)},[J,nN]),nR=(0,o.useCallback)(e=>{nE(Y.current),nk(t=>{let{state:n}=function(e,t){var n,l,o,r;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:16,i=eI(t.serverName,t.uri),d=e.entries[i],c={key:i,serverName:t.serverName,uri:t.uri,toolName:null!=(n=t.toolName)?n:null==d?void 0:d.toolName,latestToolArgs:null!=(l=t.toolArgs)?l:null==d?void 0:d.latestToolArgs,latestResultContent:void 0!==t.cancelledReason?void 0:null!=(o=t.resultContent)?o:null==d?void 0:d.latestResultContent,latestToolCancelledReason:void 0!==t.cancelledReason?t.cancelledReason:void 0!==t.resultContent||null==d?void 0:d.latestToolCancelledReason,latestToolIsError:void 0!==t.cancelledReason?void 0:void 0!==t.isError?t.isError:void 0===t.resultContent&&(null==d?void 0:d.latestToolIsError),latestToolUpdateId:null!=(r=t.updateId)?r:null==d?void 0:d.latestToolUpdateId,unread:!1,lastActiveAt:a,updatedAt:a,consent:null==d?void 0:d.consent},u={...e.entries,[i]:c};return ek({entries:u,order:d?e.order:[...e.order,i],activeKey:i},s,i)}(t,e,Date.now(),Number.MAX_SAFE_INTEGER);return n})},[]),nz=(0,o.useCallback)(e=>{nk(t=>(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),l=e.entries[t];if(!l)return e;let o={...l,unread:!1,lastActiveAt:n};return{...e,entries:{...e.entries,[t]:o},activeKey:t}})(t,e))},[]),nM=(0,o.useCallback)(e=>{if(!J)return;let t=K.current.get("".concat(J,"\0").concat(e)),n=()=>{Y.current===J&&nk(t=>eC(t,e))};t?t().finally(n):n()},[J]);(0,o.useEffect)(()=>{nE(J),nk(eS)},[J]);let n_=nI.order.join("|");(0,o.useEffect)(()=>{let e=null==W?void 0:W.messages;if(!e||!W||W.id!==J||nC!==J)return;let t=new Map;for(let n of e)if("assistant"===n.role&&Array.isArray(n.tool_calls))for(let e of n.tool_calls)"function"===e.type&&e.id&&t.set(e.id,e);let n=new Map;for(let o of e){let e=o.ui;if("tool"===o.role&&(null==e?void 0:e.uri)&&(null==e?void 0:e.serverName)&&"string"==typeof o.content){var l;let r="string"==typeof o.tool_call_id?t.get(o.tool_call_id):void 0,a={serverName:e.serverName,uri:e.uri,toolName:null!=(l=e.toolName)?l:(null==r?void 0:r.type)==="function"?r.function.name:void 0,toolArgs:(null==r?void 0:r.type)==="function"?r.function.arguments:void 0,resultContent:o.content,cancelledReason:e.cancelledReason,isError:e.isError,updateId:o.id};n.set("".concat(e.serverName,"::").concat(e.uri),a)}}nk(e=>{let t=e;for(let e of t.order){let l=t.entries[e],o=n.get(e);l&&o&&(o.updateId!==l.latestToolUpdateId||o.toolArgs!==l.latestToolArgs||void 0===o.cancelledReason&&o.resultContent!==l.latestResultContent||o.cancelledReason!==l.latestToolCancelledReason||o.isError!==l.latestToolIsError)&&(t=function(e,t){var n,l,o,r;let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),s=eI(t.serverName,t.uri),i=e.entries[s];if(!i)return e;let d=e.activeKey===s,c={...i,toolName:null!=(n=t.toolName)?n:i.toolName,latestToolArgs:null!=(l=t.toolArgs)?l:i.latestToolArgs,latestResultContent:void 0!==t.cancelledReason?void 0:null!=(o=t.resultContent)?o:i.latestResultContent,latestToolCancelledReason:void 0!==t.cancelledReason?t.cancelledReason:void 0!==t.resultContent?void 0:i.latestToolCancelledReason,latestToolIsError:void 0!==t.cancelledReason?void 0:void 0!==t.isError?t.isError:void 0===t.resultContent&&i.latestToolIsError,latestToolUpdateId:null!=(r=t.updateId)?r:i.latestToolUpdateId,updatedAt:a,unread:!d,lastActiveAt:d?a:i.lastActiveAt};return{...e,entries:{...e.entries,[s]:c}}}(t,o))}return t})},[n_,nC,J,null==W?void 0:W.id,null==W?void 0:W.messages]),(0,o.useEffect)(()=>{var e;if(!J||nC!==J||nI.order.length<=16)return;let{evicted:t}=ek(nI,16,null!=(e=nI.activeKey)?e:void 0);for(let e of t){let t="".concat(J,"\0").concat(e);if(nT.current.has(t))continue;nT.current.add(t),t2.info("Canvas tab cap reached — gracefully evicting (LRU): ".concat(e));let n=K.current.get(t);(n?n():Promise.resolve()).finally(()=>{nT.current.delete(t),Y.current===J&&nk(t=>eC(t,e))})}},[nI,nC,J]);let nO=async(e,t,n)=>{if(!W)return;t2.debug("Editing message",{messageId:e,contentLength:t.length,processNodeId:n});let l=W.messages.findIndex(t=>t.id===e);if(-1===l)return;let o={...W.messages[l],content:t,timestamp:Date.now(),processNodeId:n||void 0},r=[...W.messages.slice(0,l),o],a={...W,messages:r};if(ni(a),a.flowId){let e=tD.current.get(a.id),t={flujo:"true",requireApproval:em?"true":void 0,flujodebug:eD?"true":void 0,conversationId:a.id,processNodeId:n||void 0,mcpAppContexts:void 0===e?void 0:JSON.stringify(e)};if(!tC.current)return;ec(null),en(!0),tk(a.id),er(a.id,!0),tP(a.id,!1),th({totalTokens:0,activeNode:null,startedAt:Date.now(),lastEventAt:Date.now()}),await nf(a.id);try{let e=await ti.g.getFlow(a.flowId);if(!e)throw Error("Flow with ID ".concat(a.flowId," not found"));let n=a.messages.filter(e=>{var t;return!e.disabled&&!((null!=(t=e.depth)?t:0)>0)}).map(e=>{let t=t5(e),n={id:e.id,timestamp:e.timestamp,processNodeId:e.processNodeId};return"user"===e.role?{role:"user",content:t,...n}:"assistant"===e.role?{role:"assistant",content:t,tool_calls:e.tool_calls,...n}:"system"===e.role?{role:"system",content:t,...n}:"tool"===e.role?e.tool_call_id?{role:"tool",content:t,tool_call_id:e.tool_call_id,...n}:{role:"user",content:"string"==typeof t?"Tool result: ".concat(t):t,...n}:{role:"user",content:t,...n}}),l=await tC.current.chat.completions.create({model:"flow-".concat(e.name),messages:n,stream:!1,metadata:(()=>{let e={};return t.flujo&&(e.flujo=t.flujo),t.requireApproval&&(e.requireApproval=t.requireApproval),t.flujodebug&&(e.flujodebug=t.flujodebug),t.conversationId&&(e.conversationId=t.conversationId),t.processNodeId&&(e.processNodeId=t.processNodeId),void 0!==t.mcpAppContexts&&(e.mcpAppContexts=t.mcpAppContexts),e})()}),o={...l,status:l.status||"completed",conversation_id:a.id,messages:l.messages||a.messages,pendingToolCalls:l.pendingToolCalls,debugState:l.debugState,error:l.error,updatedAt:l.updatedAt||Date.now()};nb(o,a.id)}catch(e){t3(e)||tM.current.has(a.id)?(t2.info("Edited-message run cancelled by user",{conversationId:a.id}),tP(a.id,!0)):(t2.error("Error sending edited message:",e),ec(e instanceof Error?e.message:"Failed to send edited message")),er(a.id,!1),tJ.current===a.id&&(en(!1),tk(null),nd())}}},nP=(0,o.useCallback)(e=>{var t,n,l;let o=null==W?void 0:W.messages.find(t=>t.id===e);o&&"user"===o.role&&"string"==typeof o.content&&eY({messageId:e,content:o.content,nodeId:null!=(l=o.processNodeId)?l:null!=(n=null==(t=ne[0])?void 0:t.id)?n:null})},[W,ne]),nF=(0,o.useCallback)(e=>{eY(t=>t?{...t,content:e}:t)},[]),nL=(0,o.useCallback)(e=>{eY(t=>t?{...t,nodeId:e}:t)},[]),nW=(0,o.useCallback)(()=>eY(null),[]),nU=async(e,t,n,l)=>{if(J){t2.info("Handling tool response: ".concat(e),{conversationId:J,toolCallId:t,always:n}),eM(null),en(!0),tk(J),er(J,!0),ec(null),await nf(J);try{let o=await t1.O.respondToToolCall(J,e,t,n,l);t2.debug("Tool response successful",{conversationId:J,action:e,toolCallId:t}),nb(o,J)}catch(l){if(t3(l)||tM.current.has(J)){t2.info("Tool-response resume cancelled by user",{conversationId:J}),tP(J,!0),tJ.current===J&&en(!1),er(J,!1);return}t2.error("Error sending tool response (".concat(e,")"),{conversationId:J,toolCallId:t,err:l});let n="Failed to ".concat(e," tool call.");if(l instanceof t1.b){var o;n+=" Error: ".concat((null==(o=l.body)?void 0:o.error)||l.message)}else l instanceof Error&&(n+=" Error: ".concat(l.message));ec(n),tJ.current===J&&en(!1),er(J,!1)}}},nH=async(e,t)=>{if(J){t2.info("Submitting elicitation form",{conversationId:J,elicitationId:e}),eF(null);try{await fetch("/v1/chat/conversations/".concat(J,"/respond"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"elicitation-submit",elicitationId:e,content:t})})}catch(t){t2.error("Failed to submit elicitation",{conversationId:J,elicitationId:e,err:t})}}},nq=async e=>{if(J){t2.info("Cancelling elicitation",{conversationId:J,elicitationId:e}),eF(null);try{await fetch("/v1/chat/conversations/".concat(J,"/respond"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"elicitation-cancel",elicitationId:e})})}catch(t){t2.error("Failed to cancel elicitation",{conversationId:J,elicitationId:e,err:t})}}},nB=async(e,t)=>{if(J){t2.info("Answering question",{conversationId:J,questionId:e}),eW(null);try{await fetch("/v1/chat/conversations/".concat(J,"/respond"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"question-answer",questionId:e,answers:t})})}catch(t){t2.error("Failed to answer question",{conversationId:J,questionId:e,err:t})}}},nG=async e=>{if(J){t2.info("Declining question",{conversationId:J,questionId:e}),eW(null);try{await fetch("/v1/chat/conversations/".concat(J,"/respond"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"question-decline",questionId:e})})}catch(t){t2.error("Failed to decline question",{conversationId:J,questionId:e,err:t})}}},nJ=async()=>{if(J&&eK){t2.info("Handling debug step request",{conversationId:J}),en(!0),tk(J),er(J,!0),ec(null),await nf(J);try{let e=await t1.O.debugStep(J);nb(e,J)}catch(e){t2.error("Error during debug step API call",{conversationId:J,err:e}),ec(e instanceof Error?e.message:"Failed to execute debug step."),en(!1),er(J,!1),eQ(!1),eZ(null)}finally{}}},nV=async()=>{if(J&&eK){t2.info("Handling debug continue request",{conversationId:J}),en(!0),tk(J),er(J,!0),ec(null),eQ(!1),await nf(J);try{let e=await t1.O.debugContinue(J);nb(e,J)}catch(e){t2.error("Error during debug continue API call",{conversationId:J,err:e}),ec(e instanceof Error?e.message:"Failed to continue execution."),en(!1),er(J,!1)}finally{}}};(0,o.useEffect)(()=>{if(eX){var e;tS(null!=(e=eX.breakpoints)?e:[])}},[eX]);let nY=(0,o.useCallback)(async e=>{if(!J)return;let t=tA.includes(e)?tA.filter(t=>t!==e):[...tA,e];tS(t);try{await t1.O.setBreakpoints(J,t)}catch(e){t2.error("Failed to update breakpoints",{conversationId:J,err:e}),tS(tA)}},[tA,J]),nK=(0,o.useCallback)(async()=>{if(J){t2.info("Attaching debugger to running conversation",{conversationId:J});try{await t1.O.setBreakpoints(J,["*"])}catch(e){t2.error("Failed to attach debugger",{conversationId:J,err:e}),ec(e instanceof Error?e.message:"Failed to attach debugger.")}}},[J]),nQ=async()=>{if(!J||!eK)return;let e=null==eX?void 0:eX.currentNodeId;en(!0),tk(J),er(J,!0),ec(null),await nf(J);try{for(let o=0;o<50;o++){var t,n,l;let o=await t1.O.debugStep(J),r=null!=(l=null==o?void 0:o.status)?l:null==o||null==(t=o.debugState)?void 0:t.status,a=null==o||null==(n=o.debugState)?void 0:n.currentNodeId;if("paused_debug"!==r||a&&a!==e)return void nb(o,J)}t2.warn("Step Over hit iteration cap",{conversationId:J}),en(!1),er(J,!1)}catch(e){t2.error("Error during step over",{conversationId:J,err:e}),ec(e instanceof Error?e.message:"Failed to step over."),en(!1),er(J,!1)}},nX=async()=>{if(J){t2.info("Cancelling request",{conversationId:J}),ny(),en(!1),tk(null),er(J,!1),tP(J,!0),e2(!1),nd(),eM(null),ec(null);try{await t1.O.cancel(J),t2.debug("Cancel request sent successfully",{conversationId:J}),await tY(J)}catch(e){t2.error("Error sending cancel request",{conversationId:J,err:e}),ec("Failed to send cancel request to the server.")}}},nZ=async e=>{if(e===J)return void await nX();t2.info("Stopping background conversation",{conversationId:e}),tP(e,!0);try{await t1.O.cancel(e),er(e,!1),await tV(void 0,{silent:!0})}catch(t){t2.error("Error stopping background conversation",{conversationId:e,err:t}),ec("Failed to send cancel request to the server.")}},n$=async()=>{t2.info("Closing debugger panel",{conversationId:J}),eQ(!1),eZ(null),e2(!1),await nX()};t2.debug("Rendering Chat component",{currentConversationId:J,isHandleEditMessageDefined:!0});let n0=(e$||eK)&&!!eX&&!!J,n1=(null==t8?void 0:t8.status)==="awaiting_tool_approval"||!!ez,n2=!(n1||(null==t8?void 0:t8.status)==="paused_debug")&&(et&&tI===J||!!J&&el.has(J)||(null==t8?void 0:t8.status)==="running"),n5=!n2&&!!J&&t_.has(J);return(0,o.useEffect)(()=>{if(!J||ei.current||!W||W.id!==J)return;let e=eE(ea,J)[0];if(!e||!function(e){return!e.running&&!e.pendingApproval&&!e.debugPaused&&!e.hasError&&!e.stopped}({running:el.has(J),pendingApproval:!!ez,debugPaused:eK,hasError:(null==t8?void 0:t8.status)==="error",stopped:n5}))return;ei.current=!0;let t=setTimeout(async()=>{try{es(t=>eN(t,J,e.id)),await nv(e.content,e.attachments,{fromQueue:!0,nodeOverride:e.nodeOverride,queuedId:e.id})}catch(t){es(t=>(function(e,t,n){let l=eE(e,t).filter(e=>e.id!==n.id);return{...e,[t]:[n,...l]}})(t,J,e))}finally{ei.current=!1}},0);return()=>clearTimeout(t)},[J,W,ea,el,ez,eK,null==t8?void 0:t8.status,n5]),(0,l.jsxs)(s.default,{sx:{display:"flex",height:"calc(100vh - 64px)"},children:[ta&&(0,l.jsx)(s.default,{sx:{width:40,flexShrink:0,borderRight:1,borderColor:"divider",display:"flex",justifyContent:"center",pt:1},children:(0,l.jsx)(i.A,{title:"Show conversation sidebar",children:(0,l.jsx)(d.A,{size:"small",onClick:td,"aria-label":"Show conversation sidebar",children:(0,l.jsx)(E.A,{fontSize:"small"})})})}),!ta&&(0,l.jsx)(s.default,{sx:{width:to,flexShrink:0,borderRight:1,borderColor:"divider",display:"flex",flexDirection:"column"},children:O?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",p:2},children:(0,l.jsx)(tX.default,{size:"medium",color:"primary"})}):F?(0,l.jsx)(c.A,{severity:"error",sx:{m:2},children:F}):(0,l.jsx)(eu,{conversations:M,flowNames:t7,currentConversationId:J,onSelectConversation:X,onDeleteConversation:np,onBulkDelete:nh,onStopConversation:nZ,onNewConversation:nl,onQuickChat:()=>na(!0),onCollapse:td})}),!ta&&(0,l.jsx)(s.default,{onPointerDown:tc,sx:{width:"6px",flexShrink:0,cursor:"col-resize",bgcolor:"divider",transition:"background-color 120ms","&:hover":{bgcolor:"primary.main"},touchAction:"none"},"aria-label":"Resize conversation sidebar"}),(0,l.jsxs)(s.default,{sx:{flex:1,height:"100%",display:"flex",minWidth:0,minHeight:0},children:[(0,l.jsxs)(s.default,{sx:{flex:1,minWidth:0,display:"flex",flexDirection:"column",height:"100%"},children:[J&&(0,l.jsx)(s.default,{sx:{px:2,pt:2,pb:1,display:"flex",alignItems:"center",gap:1,minWidth:0},children:ev?(0,l.jsx)(u.A,{value:ey,onChange:e=>ej(e.target.value),onBlur:nx,onKeyDown:e=>{"Enter"===e.key?(e.preventDefault(),nx()):"Escape"===e.key&&eb(!1)},size:"small",autoFocus:!0,fullWidth:!0,inputProps:{maxLength:200,"aria-label":"Conversation title"}}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(f.default,{variant:"h6",noWrap:!0,onClick:nm,title:(null==W?void 0:W.title)||(null==t8?void 0:t8.title)||"",sx:{flex:1,minWidth:0,cursor:"text"},children:(null==W?void 0:W.title)||(null==t8?void 0:t8.title)||"Untitled Conversation"}),(0,l.jsx)(i.A,{title:"Rename conversation",children:(0,l.jsx)(d.A,{size:"small",onClick:nm,"aria-label":"Rename conversation",children:(0,l.jsx)(T.A,{fontSize:"small"})})}),(0,l.jsx)(i.A,{title:e8?"Hide executed steps":"Show executed steps",children:(0,l.jsx)(d.A,{size:"small",color:e8?"primary":"default",onClick:()=>e7(e=>!e),"aria-label":"Toggle executed steps panel",children:(0,l.jsx)(D.A,{fontSize:"small"})})})]})}),J&&(0,l.jsxs)(s.default,{sx:{p:2,borderBottom:1,borderColor:"divider",display:"flex",alignItems:"center",gap:2},children:[(0,l.jsx)(s.default,{sx:{flex:1,minWidth:0},children:$((null==t8?void 0:t8.flowId)||(null==W?void 0:W.flowId))?(0,l.jsx)(p.A,{color:"primary",variant:"outlined",icon:(0,l.jsx)(A.A,{}),label:"Quick Chat"}):(0,l.jsxs)(s.default,{sx:{display:"flex",alignItems:"flex-start",gap:.5},children:[(0,l.jsx)(e1.A,{selectedFlowId:(null==t8?void 0:t8.flowId)||(null==W?void 0:W.flowId)||null,onSelectFlow:e=>{var t,n,l,o;if(!J){t2.warn("Cannot update flow: No conversation selected."),ec("Please select a conversation first.");return}$(e)||ee(e);let r=null!=(l=null!=(n=null==W?void 0:W.flowId)?n:null==t8?void 0:t8.flowId)?l:null;if((null!=(o=null==W||null==(t=W.messages)?void 0:t.length)?o:0)>0&&r&&e!==r){t2.debug("Flow switch on executed conversation — asking for confirmation",{flowId:e,currentFlowId:r}),eq(e);return}ng(e)},disabled:eK}),(()=>{let e=(null==t8?void 0:t8.flowId)||(null==W?void 0:W.flowId)||null;return e?(0,l.jsx)(i.A,{title:"Open this flow in the FlowBuilder",children:(0,l.jsx)(d.A,{color:"primary",onClick:()=>r.push("/flows?flow=".concat(encodeURIComponent(e))),children:(0,l.jsx)(N.A,{})})}):null})()]})}),(0,l.jsx)(e0,{usage:null==W?void 0:W.usage,contextInfo:null==W?void 0:W.contextInfo,availableNodes:ne})]}),(0,l.jsxs)(s.default,{sx:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[(0,l.jsx)(s.default,{ref:tF,onScroll:tq,sx:{flex:1,overflow:"auto",p:2},children:H?(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%"},children:(0,l.jsx)(tX.default,{size:"medium",color:"primary"})}):B?(0,l.jsx)(c.A,{severity:"error",sx:{m:2},children:B}):W?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(ef.A,{messages:W.messages,pendingToolCalls:ez,pendingElicitation:e_,availableNodes:ne,conversationId:W.id,editingMessageId:null!=(t=null==eV?void 0:eV.messageId)?t:null,onToggleDisabled:e=>{if(!W)return;t2.debug("Toggling message disabled state",{messageId:e});let t=W.messages.map(t=>t.id===e?{...t,disabled:!t.disabled}:t);ni({...W,messages:t})},onSplitConversation:e=>{if(!W)return;t2.debug("Splitting conversation at message",{messageId:e});let t=W.messages.findIndex(t=>t.id===e);if(-1===t)return;let n=W.messages.slice(0,t+1),l=(0,tZ.A)(),o={id:l,title:"Split from ".concat(W.title),messages:n,flowId:W.flowId,createdAt:Date.now(),updatedAt:Date.now()},r={id:l,title:o.title,flowId:o.flowId,createdAt:o.createdAt,updatedAt:o.updatedAt};tR.current.add(l),_(e=>[r,...e].sort((e,t)=>{var n,l;return(null!=(n=t.lastUserMessageAt)?n:t.updatedAt)-(null!=(l=e.lastUserMessageAt)?l:e.updatedAt)})),X(l),U(o),q(!1),G(null)},onBeginEditMessage:nP,onApproveToolCall:(e,t)=>{nU("approve",e,t)},onRejectToolCall:(e,t,n)=>{nU("reject",e,t,n)},onSubmitElicitation:nH,onCancelElicitation:nq,pendingQuestion:eL,onAnswerQuestion:nB,onDeclineQuestion:nG,onAppMessage:nA,onUpdateModelContext:nS,onRegisterAppTeardown:nD,onOpenInCanvas:nR,queuedMessages:eE(ea,W.id),queueHoldReason:function(e){return e.stopped?"Held — you stopped this run. Send again to continue.":e.hasError?"Held — the last run failed. Retry or send again to continue.":e.pendingApproval?"Held — waiting for tool approval.":e.debugPaused?"Held — paused in the debugger.":null}({running:el.has(W.id),pendingApproval:!!ez,debugPaused:eK,hasError:(null==t8?void 0:t8.status)==="error",stopped:n5})}),!et&&!eK&&W.messages.length>0&&(null==t8?void 0:t8.status)==="completed"&&(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",my:2},children:(0,l.jsx)(c.A,{icon:(0,l.jsx)(I.A,{fontSize:"inherit"}),severity:"success",variant:"filled",sx:{borderRadius:2,py:.5},children:"Conversation completed"})}),!et&&!eK&&n5&&(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",my:2},children:(0,l.jsx)(c.A,{icon:(0,l.jsx)(C.A,{fontSize:"inherit"}),severity:"info",variant:"outlined",sx:{borderRadius:2,py:.5,alignItems:"center"},action:(0,l.jsx)(h.A,{color:"inherit",size:"small",startIcon:(0,l.jsx)(S.A,{}),onClick:()=>nw(W),children:"Resume"}),children:"Conversation stopped"})}),!et&&!eK&&!ed&&!n5&&(null==t8?void 0:t8.status)==="error"&&(0,l.jsx)(s.default,{sx:{display:"flex",justifyContent:"center",my:2},children:(0,l.jsx)(c.A,{icon:(0,l.jsx)(k.A,{fontSize:"inherit"}),severity:"error",variant:"filled",sx:{borderRadius:2,py:.5,alignItems:"center"},action:(0,l.jsx)(h.A,{color:"inherit",size:"small",startIcon:(0,l.jsx)(S.A,{}),onClick:()=>{nw(W)},children:"Retry"}),children:"Conversation ended with an error"})}),n2&&tb.length>0&&(0,l.jsx)(eG,{todos:tb}),n2&&!eK&&(0,l.jsx)(eU,{liveStats:tp,lanes:tx,onOpenLane:X,onStop:nX,stopDisabled:!J,onAttachDebugger:et&&tI===J&&!e$?nK:void 0}),!n2&&n1&&!eK&&(0,l.jsx)(eU,{liveStats:tp,lanes:tx,onOpenLane:X,awaitingApproval:!0,onStop:nX,stopDisabled:!J}),ed&&(0,l.jsx)(c.A,{severity:"error",sx:{mt:2},action:(0,l.jsx)(h.A,{color:"inherit",size:"small",startIcon:(0,l.jsx)(S.A,{}),onClick:()=>{W&&nw(W)},children:"Retry"}),children:ed})]}):(0,l.jsx)(f.default,{variant:"body1",color:"textSecondary",align:"center",sx:{mt:4},children:M.length>0?"Select a conversation or create a new one.":"Create a new conversation to start chatting."})}),(0,l.jsx)(g.A,{in:tW,unmountOnExit:!0,children:(0,l.jsx)(m.A,{size:"small",color:"primary","aria-label":"Scroll to latest messages",onClick:tB,sx:{position:"absolute",bottom:16,right:24,zIndex:2},children:(0,l.jsx)(j.A,{})})})]}),J&&(0,l.jsx)(eA,{conversationId:J,entries:nC===J?function(e){return e.order.map(t=>e.entries[t]).filter(e=>!!e)}(nI):[],activeKey:nI.activeKey,onSelectTab:nz,onCloseTab:nM,onAppMessage:nA,onUpdateModelContext:nS,onRegisterTeardown:nN},J),(0,l.jsxs)(s.default,{sx:{p:2,borderTop:1,borderColor:"divider"},children:[J&&eE(ea,J).length>0&&(0,l.jsxs)(s.default,{"data-testid":"queued-messages",sx:{mb:1,display:"flex",flexWrap:"wrap",gap:1,alignItems:"center"},children:[(0,l.jsxs)(f.default,{variant:"caption",color:"text.secondary",sx:{display:"flex",alignItems:"center",gap:.5},children:[(0,l.jsx)(R.A,{fontSize:"inherit"})," Queued:"]}),eE(ea,J).map(e=>(0,l.jsx)(p.A,{size:"small",variant:"outlined",label:e.content.trim().slice(0,40)||(e.attachments.length?"".concat(e.attachments.length," attachment(s)"):"message"),onDelete:()=>es(t=>eN(t,J,e.id))},e.id))]}),(0,l.jsx)(ep.A,{onSendMessage:nv,disabled:H||!((null==W?void 0:W.flowId)||(null==t8?void 0:t8.flowId))||!!ez||eK,requireApproval:em,onRequireApprovalChange:t4,executeInDebugger:eD,onExecuteInDebuggerChange:eR,availableNodes:ne,flow:t9,currentNodeId:nn,nodeOverrideActive:!!eB,onSelectNode:eJ,editing:eV,onEditingContentChange:nF,onEditingNodeChange:nL,onSaveEdit:()=>{eV&&eV.content.trim()&&(nO(eV.messageId,eV.content,eV.nodeId||""),eY(null))},onCancelEdit:nW})]})]})," ",e8&&J&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.default,{onPointerDown:tn,sx:{width:"6px",flexShrink:0,cursor:"col-resize",bgcolor:"divider",transition:"background-color 120ms","&:hover":{bgcolor:"primary.main"},touchAction:"none"},"aria-label":"Resize executed steps panel"}),(0,l.jsx)(s.default,{sx:{width:"".concat(te,"px"),minWidth:240,maxWidth:"70vw",flexShrink:0,display:"flex",flexDirection:"column",height:"100%"},children:(0,l.jsx)(tK,{flowId:(null==W?void 0:W.flowId)||(null==t8?void 0:t8.flowId)||null,flowSnapshot:null!=(n=null==eX?void 0:eX.flowSnapshot)?n:null,executedNodeIds:nt,liveActivity:tg,onClose:()=>e7(!1)})})]}),n0&&eX&&J&&!e3&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(s.default,{onPointerDown:tl,sx:{width:"6px",flexShrink:0,cursor:"col-resize",bgcolor:"divider",transition:"background-color 120ms","&:hover":{bgcolor:"primary.main"},touchAction:"none"},"aria-label":"Resize debugger panel"}),(0,l.jsx)(s.default,{sx:{width:e5?"".concat(e5,"px"):"50%",minWidth:360,maxWidth:"85vw",flexShrink:0,display:"flex",flexDirection:"column",height:"100%"},children:(0,l.jsx)(tG,{debugState:eX,conversationId:J,liveActivity:tg,onStep:nJ,onStepOver:nQ,onContinue:nV,onCancel:nX,isLoading:et,breakpoints:tA,onToggleBreakpoint:nY,onClose:n$,isExpanded:e3,onToggleExpand:()=>e4(e=>!e)})})]})]})," ",n0&&eX&&J&&e3&&(0,l.jsx)(x.A,{fullScreen:!0,open:!0,onClose:()=>e4(!1),children:(0,l.jsx)(s.default,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:(0,l.jsx)(tG,{debugState:eX,conversationId:J,liveActivity:tg,onStep:nJ,onStepOver:nQ,onContinue:nV,onCancel:nX,isLoading:et,breakpoints:tA,onToggleBreakpoint:nY,onClose:n$,isExpanded:e3,onToggleExpand:()=>e4(e=>!e)})})}),(0,l.jsxs)(x.A,{open:!!eH,onClose:()=>eq(null),children:[(0,l.jsx)(v.A,{children:"Switch flow?"}),(0,l.jsx)(b.A,{children:(0,l.jsxs)(y.A,{children:["This conversation has already been processed with its current flow."," ","If you switch to"," ",(0,l.jsx)("strong",{children:(null==(e=eh.find(e=>e.id===eH))?void 0:e.name)||"the selected flow"}),","," ","the conversation will continue processing from that flow's Start node again."]})}),(0,l.jsxs)(w.A,{children:[(0,l.jsx)(h.A,{onClick:()=>eq(null),children:"Cancel"}),(0,l.jsx)(h.A,{variant:"contained",onClick:()=>{eq(null),eH&&ng(eH)},children:"Switch Flow"})]})]}),(0,l.jsx)(e9,{open:nr,onClose:()=>na(!1),onStart:ns})]})},t8=(0,e8.h)("frontend/components/ClientOnly");function t7(e){let{children:t}=e,[n,r]=(0,o.useState)(!1);return((0,o.useEffect)(()=>(t8.debug("ClientOnly component mounted"),r(!0),()=>{t8.debug("ClientOnly component unmounted")}),[]),n)?(t8.debug("ClientOnly component rendering children"),(0,l.jsx)(l.Fragment,{children:t})):(t8.debug("ClientOnly component rendering null (not yet mounted)"),null)}let t9=(0,e8.h)("app/chat/page");function ne(){return t9.debug("Rendering ChatPage"),(0,l.jsx)(r.A,{maxWidth:!1,disableGutters:!0,children:(0,l.jsx)(t7,{children:(0,l.jsx)(t4,{})})})}},75870:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});var l=n(95155),o=n(12115),r=n(94049),a=n(25635),s=n(4474),i=n(91871),d=n(56900),c=n(90057),u=n(96362),f=n(9226),p=n(68503);let h=e=>{let{selectedFlowId:t,onSelectFlow:n,disabled:h=!1,hideLabel:g=!1}=e,[m,x]=(0,o.useState)([]),[v,b]=(0,o.useState)(!0),[y,w]=(0,o.useState)(null),[j,A]=(0,o.useState)(!1);(0,o.useEffect)(()=>{(async()=>{b(!0),w(null);try{let e=await c.g.loadFlows();x(e)}catch(e){console.error("Error loading flows:",e),w("Failed to load flows")}finally{b(!1)}})()},[]);let S=e=>{n(e),A(!1)},I=async e=>{let t=m.find(t=>t.id===e);if(!t)return;let n=!t.favorite,l={...t,favorite:n||void 0};try{(await c.g.updateFlow(l)).success&&x(t=>t.map(t=>t.id===e?l:t))}catch(e){console.error("Error toggling flow favorite:",e)}},k=(0,p.E)("flows",m),C=e=>({key:e.id,content:(e=>(0,l.jsx)(f.A,{flow:e,selected:e.id===t,onSelect:S,onToggleFavorite:I,pickerMode:!0}))(e)}),E=k.items.map(C),T=k.groups?k.groups.map(e=>({...e,items:e.items.map(C)})):null,N=(()=>{if(!t)return"";let e=m.find(e=>e.id===t);return e?e.name:""})();return(0,l.jsxs)(r.default,{children:[!g&&(0,l.jsx)(a.default,{variant:"subtitle1",gutterBottom:!0,children:"Select Flow"}),v?(0,l.jsxs)(r.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,l.jsx)(s.default,{size:20}),(0,l.jsx)(a.default,{variant:"body2",color:"text.secondary",children:"Loading flows..."})]}):y?(0,l.jsx)(a.default,{color:"error",variant:"body2",children:y}):0===m.length?(0,l.jsx)(a.default,{variant:"body2",color:"text.secondary",children:"No flows available. Create some flows in the Flow Builder first."}):(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.A,{variant:"outlined",startIcon:(0,l.jsx)(d.A,{}),onClick:()=>A(!0),disabled:h,sx:{textTransform:"none",maxWidth:"100%"},children:(0,l.jsx)(r.default,{component:"span",sx:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t&&N||"Select a flow"})}),(0,l.jsx)(a.default,{variant:"caption",color:"text.secondary",display:"block",sx:{mt:.5},children:t?'Using "'.concat(N,'" flow for this conversation'):"Select a flow to use for this conversation"}),(0,l.jsx)(u.A,{open:j,onClose:()=>A(!1),title:"Select a flow",description:"Pick the flow this conversation will run.",skeleton:(0,l.jsx)(f.o,{}),emptyMessage:"No flows available. Create some flows in the Flow Builder first.",searchable:!0,searchPlaceholder:"Search flows…",searchTerm:k.searchTerm,onSearchChange:k.setSearchTerm,items:E,groups:T,collapsedKeys:k.collapsedKeys,onToggleGroup:k.toggleGroup})]})]})}},79415:(e,t,n)=>{Promise.resolve().then(n.bind(n,69645))},81956:(e,t,n)=>{"use strict";n.d(t,{A:()=>y});var l=n(95155),o=n(12115),r=n(36314),a=n(86973),s=n(49501),i=n(17681),d=n(21067),c=n(2778),u=n(52363),f=n(65036),p=n(9562),h=n(75912),g=n(91871),m=n(9693),x=n(91665),v=n(7517),b=n(8190);let y=e=>{let{anchorEl:t,open:n,currentFolder:y,folders:w,onClose:j,onAssign:A}=e,[S,I]=(0,o.useState)(!1),[k,C]=(0,o.useState)(""),E=e=>{A(e),j()},T=()=>{let e=k.trim();e&&(I(!1),E(e))};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)(r.A,{anchorEl:t,open:n,onClose:j,children:[w.length>0&&w.map(e=>(0,l.jsxs)(a.A,{onClick:()=>E(e),selected:e===y,children:[(0,l.jsx)(s.A,{children:e===y?(0,l.jsx)(m.A,{fontSize:"small"}):(0,l.jsx)(x.A,{fontSize:"small"})}),(0,l.jsx)(i.A,{primary:e})]},e)),w.length>0&&(0,l.jsx)(d.A,{}),(0,l.jsxs)(a.A,{onClick:()=>{C(""),I(!0)},children:[(0,l.jsx)(s.A,{children:(0,l.jsx)(v.A,{fontSize:"small"})}),(0,l.jsx)(i.A,{primary:"New folder…"})]}),y&&(0,l.jsxs)(a.A,{onClick:()=>E(void 0),children:[(0,l.jsx)(s.A,{children:(0,l.jsx)(b.A,{fontSize:"small"})}),(0,l.jsx)(i.A,{primary:"Remove from folder"})]})]}),(0,l.jsxs)(c.A,{open:S,onClose:()=>I(!1),maxWidth:"xs",fullWidth:!0,children:[(0,l.jsx)(u.A,{children:"New folder"}),(0,l.jsx)(f.A,{children:(0,l.jsx)(p.A,{autoFocus:!0,margin:"dense",label:"Folder name",fullWidth:!0,value:k,onChange:e=>C(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),T())}})}),(0,l.jsxs)(h.A,{children:[(0,l.jsx)(g.A,{onClick:()=>I(!1),children:"Cancel"}),(0,l.jsx)(g.A,{variant:"contained",disabled:!k.trim(),onClick:T,children:"Create"})]})]})]})}},97104:(e,t,n)=>{"use strict";n.d(t,{Aq:()=>o,Xk:()=>a,vi:()=>r});var l=n(12115);function o(e,t){try{let n=window.localStorage.getItem(e);if(null===n)return t;return JSON.parse(n)}catch(e){return t}}function r(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch(e){}}function a(e,t){let[n,a]=(0,l.useState)(()=>o(e,t));return[n,(0,l.useCallback)(t=>{a(n=>{let l="function"==typeof t?t(n):t;return r(e,l),l})},[e])]}}},e=>{e.O(0,[3862,2678,4754,9244,3392,1871,981,2003,9562,488,3272,3077,8470,9581,3659,7328,6404,8551,1675,6428,5418,4555,4386,5733,9345,3772,8404,8650,6733,8441,1255,7358],()=>e(e.s=79415)),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9040],{20938:(e,t,s)=>{Promise.resolve().then(s.bind(s,71113))},71113:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>E});var a=s(95155),o=s(94049),n=s(12115),r=s(28548),i=s(2300),l=s(25635),d=s(97322),p=s(9562),c=s(56422),u=s(21067),m=s(32683),h=s(51611);let f=[{id:"openai",name:"Chat — OpenAI-compatible",description:'A drop-in OpenAI-compatible surface. In OpenAI-compatible clients (Roo Code, Cline, Cursor, the OpenAI SDK, …) set the Base URL to this instance + "/v1" (e.g. http://localhost:4200/v1) and the model to a flow id (format flow-<NAME>, as listed by /v1/models).',endpoints:[{method:"POST",alsoMethods:["GET","OPTIONS"],path:"/v1/chat/completions",summary:"OpenAI-compatible chat completion. Runs a FLUJO flow as the model. Supports streaming and non-streaming. CORS-enabled; rate-limited (~6000 req/min).",paramsLabel:"Body",params:[{name:"model",type:"string",required:!0,description:"Flow to run, as flow-<NAME>."},{name:"messages",type:"ChatMessage[]",required:!0,description:"Conversation messages (OpenAI shape)."},{name:"stream",type:"boolean",description:"Stream the response as SSE chunks."},{name:"flujo",type:"boolean",description:"Enable FLUJO-specific behavior."},{name:"conversation_id",type:"string",description:"Reuse/continue an existing conversation."},{name:"requireApproval",type:"boolean",description:"Pause for manual tool-call approval."},{name:"flujodebug",type:"boolean",description:"Run in the visual debugger (single-step)."}],response:"OpenAI ChatCompletion object, or an SSE stream of chunks when stream=true."},{method:"GET",path:"/v1/models",summary:"List all flows as OpenAI-style models.",response:'{ object: "list", data: [{ id: "flow-<NAME>", object: "model" }, ...] }'}]},{id:"conversations",name:"Conversations & Execution",description:"Manage conversations and drive flow execution: live event streaming (SSE), tool-call approval, cancellation, and visual-debugger stepping.",endpoints:[{method:"GET",path:"/v1/chat/conversations",summary:"List all conversations (id, title, flowId, createdAt, updatedAt, status), newest first.",response:"Conversation summary array."},{method:"POST",path:"/v1/chat/conversations",summary:"Create a new conversation and initialize its execution state.",paramsLabel:"Body",params:[{name:"id",type:"string",required:!0,description:"Client-generated conversation id."},{name:"title",type:"string",required:!0,description:"Display title."},{name:"flowId",type:"string",required:!0,description:"Flow bound to this conversation."},{name:"createdAt",type:"number",required:!0,description:"Unix ms timestamp."},{name:"updatedAt",type:"number",required:!0,description:"Unix ms timestamp."}]},{method:"GET",alsoMethods:["PATCH","DELETE"],path:"/v1/chat/conversations/{conversationId}",summary:"GET the displayed conversation (messages + metadata); PATCH updates flowId; DELETE removes the conversation and its event log.",paramsLabel:"Body",params:[{name:"flowId",type:"string",description:"New flow id (PATCH only)."}],response:"Conversation with messages, plus usage (token totals, per-node breakdown), status, and contextInfo (latest prompt-token count + the bound model's context window — what the chat token counter and context meter display).",notes:["Messages are a projection of the append-only conversation log when one exists (legacy conversations without a log are served as stored). Node system prompts are never included.","Subflow steps appear inline as depth-tagged, display-only messages (nested in the chat UI); they are never part of the parent's model context."]},{method:"GET",path:"/v1/chat/conversations/{conversationId}/events",summary:"Server-Sent Events stream of execution events (node:enter/exit, message, usage, run:*). Supports Last-Event-ID reconnect.",paramsLabel:"Query",params:[{name:"fromSeq",type:"number",description:"Replay events from this sequence number."}],response:"text/event-stream of ExecutionEvent objects with monotonic seq ids."},{method:"POST",path:"/v1/chat/conversations/{conversationId}/respond",summary:"Approve or reject a pending tool call; resumes execution when all pending calls are handled.",paramsLabel:"Body",params:[{name:"action",type:'"approve" | "reject"',required:!0,description:"Decision for the tool call."},{name:"toolCallId",type:"string",required:!0,description:"Which pending tool call."}]},{method:"POST",path:"/v1/chat/conversations/{conversationId}/cancel",summary:"Request cancellation of an in-progress run (sets the isCancelled flag)."},{method:"PUT",path:"/v1/chat/conversations/{conversationId}/breakpoints",summary:"Set the visual-debugger breakpoint node ids.",paramsLabel:"Body",params:[{name:"breakpoints",type:"string[]",required:!0,description:"Node ids to break on."}]},{method:"POST",path:"/v1/chat/conversations/{conversationId}/debug/step",summary:"Execute exactly one productive step (only when status is paused_debug); pauses after advancing."},{method:"POST",path:"/v1/chat/conversations/{conversationId}/debug/continue",summary:"Resume a debug session — run freely to the next pause, tool approval, or completion."},{method:"PATCH",path:"/v1/chat/conversations/{conversationId}/edit-state",summary:"Edit paused debug state (a message's content, or the next node to run). Only when paused_debug.",paramsLabel:"Body",params:[{name:"messageId",type:"string",description:"Message to edit."},{name:"content",type:"string",description:"New message content."},{name:"currentNodeId",type:"string",description:"Override the next node."}]}]},{id:"model",name:"Models",description:"CRUD for model configurations and provider model discovery. API keys are encrypted at rest and never returned to the browser in clear text.",endpoints:[{method:"GET",alsoMethods:["POST"],path:"/api/model",summary:"GET lists all models; POST creates a model (409 on duplicate name, 201 on success).",paramsLabel:"Body",params:[{name:"model",type:"Model",required:!0,description:"Model config (POST). Secrets are stored encrypted."}],notes:["Stored API keys are masked before reaching the frontend — never expect a clear-text key in a response."]},{method:"GET",alsoMethods:["PUT","DELETE"],path:"/api/model/{id}",summary:"GET / PUT / DELETE a single model. The path id is authoritative on PUT. DELETE returns 204."},{method:"POST",path:"/api/model/provider",summary:"Fetch available models from a provider, using a supplied or stored API key (resolved server-side).",paramsLabel:"Body",params:[{name:"baseUrl",type:"string",required:!0,description:"Provider base URL."},{name:"modelId",type:"string",description:"Existing model whose stored key to reuse."},{name:"searchTerm",type:"string",description:"Filter the returned model list."}],notes:["Accepts an apiKey only inbound to query the provider; keys are never echoed back to the client."]}]},{id:"flow",name:"Flows",description:"CRUD for flow definitions, programmatic flow authoring (FlowSpec), LLM flow generation, and prompt rendering for individual nodes. For creating flows programmatically, prefer POST /api/flow/compile with a FlowSpec — the raw Flow format (ReactFlow JSON) is the internal canvas representation and easy to get subtly wrong.",endpoints:[{method:"POST",path:"/api/flow/compile",summary:"Compile a FlowSpec (the semantic authoring format — see below) into a complete flow, validate it, and optionally save it. Deterministic, no LLM: layout, ids, handles, and MCP wiring are generated for you. THE recommended way for external apps and agents to create flows. Also exposed as MCP tools (create_flow / validate_flow_spec) on /mcp-flows.",paramsLabel:"Body",params:[{name:"spec",type:"FlowSpec",required:!0,description:"The flow specification (format below)."},{name:"save",type:"boolean",description:"Persist the flow — only happens when validation finds ZERO errors."}],response:"{ flow, validation: { issues, errorCount, warningCount, isRunnable }, saved } — 201 when saved, 200 otherwise. Iterate on the issues until clean.",details:'A FlowSpec is a JSON object describing a FLUJO flow semantically — node keys and edges, no coordinates, no ids, no layout:\n{\n "name": "short_flow_name", // letters/digits/_/- only\n "description": "what the flow does",\n "nodes": [ ... ],\n "edges": [ ... ]\n}\n\nNODE TYPES:\n- { "key": "unique_key", "type": "start", "label": "...", "prompt": "system-level instructions for the whole flow" }\n- { "key": "...", "type": "process", "label": "...", "description": "what this step does",\n "model": "<model id or name from the catalog>",\n "prompt": "instructions for this step",\n "servers": [ { "name": "<server name>", "tools": ["tool_a"] } ], // optional; omit "tools" to enable all\n "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. Reshapes ONLY the wire view the model sees (persisted history stays lossless): full-history = the whole assembled context; latest-message = leading system prompt(s) + the most recent EXCHANGE (the last user message + the last assistant response, intermediate turns since the last user message dropped) + this turn\'s in-flight tool calls/results; isolated = system prompt(s) + isolatedPrompt as a synthetic user message, prior conversation dropped. NOTE: for Claude-subscription models the whole wire history (incl. prior tool calls/results under full-history) is flattened into one text prompt rather than sent as native tool turns\n "isolatedPrompt": "...", // only with inputMode "isolated"\n "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; default true — a step that hands off to this isolated step may pass a "prompt" via its handoff tool that overrides "isolatedPrompt". Set false to forbid it\n "outputMode": "full-conversation" | "latest-message", // optional, default full-conversation; latest-message hides this step\'s tool calls/results from later steps (they see only its final response)\n "maxTurns": 20, // optional; per-step cap on agentic tool-loop turns (retry-until-done in ONE node). Unset = model/system default (50)\n "allowedTools": ["tool_a"], // optional; step-level tool allowlist (independent of servers[].tools)\n "captureVariable": "NAME", // optional; save this step\'s output into a run variable other steps inject with ${var:NAME}\n "captureKv": "NAME", // optional; ALSO save this step\'s output to a PERSISTENT cross-run key other steps inject with ${kv:NAME} (see rule 9d)\n "excludeModelPrompt": true|false, // optional; drop the model\'s base prompt\n "excludeStartNodePrompt": true|false, // optional; drop the start node\'s prompt for this step\n "excludeSystemPrompt": true|false } // optional; drop the workflow/handoff guidance block\n- { "key": "...", "type": "subflow", "label": "...",\n "flow": "<existing flow name or id>", // reference an EXISTING flow, OR:\n "subflowSpec": { ...a nested FlowSpec... }, // define a brand-new child flow INLINE (compiled into its own flow and wired automatically), OR fan out concurrently:\n "parallelFlows": ["flow_a", "flow_b"], // run several EXISTING child flows CONCURRENTLY, same input to each, outputs joined; OR:\n "parallelSubflowSpecs": [ { ...FlowSpec... } ], // run several INLINE child flows concurrently; OR:\n "parallelFlowsVariable": "NAME", // DYNAMIC fan-out (rule 7b): pick the target flows AT RUNTIME from run variable ${var:NAME} (a JSON array of flow ids/names, or newline list); mutually exclusive with mapOverList\n "mapOverList": true | false, // optional; run the SINGLE child ("flow"/"subflowSpec") ONCE PER ITEM parsed from the input; mutually exclusive with parallelFlows/parallelSubflowSpecs\n "itemSplit": "json-array" | "lines", // optional (mapOverList only), how to split the input into items, default json-array\n "sequential": true | false, // optional (mapOverList only), run items one at a time in order instead of concurrently, default false\n "spawnBriefs": ["brief 1", "brief 2"], // optional (rule 7d); run the SINGLE child once PER BRIEF, in parallel — the author-defined spawn set; mutually exclusive with parallelFlows/parallelSubflowSpecs/mapOverList\n "concurrencyLimit": 4, // optional (parallel / mapOverList / spawn), default 4\n "joinSeparator": "\\n\\n---\\n\\n", // optional (parallel / mapOverList / spawn), string between joined lane outputs, default "\\n\\n"\n "errorStrategy": "collect-all" | "fail-fast", // optional (parallel / mapOverList / spawn), default collect-all\n "inputMode": "full-history" | "latest-message" | "isolated", // optional, default full-history. DIFFERS from a process node: history modes ALWAYS sanitize the parent transcript first — system messages, tool-result messages, and ANY assistant turn that made tool calls are dropped (only user + prose-only assistant messages survive). full-history = the full sanitized transcript; latest-message = the most recent EXCHANGE of the sanitized transcript (the last user message + the last assistant response after it, intermediate turns dropped); isolated = ignore the parent conversation and send "prompt" as the child\'s single user message\n "allowCallerPrompt": true | false, // optional, only with inputMode "isolated"; default true — a routing step may pass a "prompt" via its handoff tool that overrides the subflow\'s "prompt". Set false to forbid it\n "allowCallerFanout": true | false, // optional (subflow); makes this a SPAWNABLE sub-agent: the routing step may call its handoff tool SEVERAL TIMES in one turn, each call with a "task" brief spawning one parallel instance of the child flow (rule 7c)\n "captureVariable": "NAME", // optional; save the subflow\'s output into a run variable other steps inject with ${var:NAME}\n "captureResource": "NAME", // optional; ALSO save the subflow\'s output as a tracked run resource (${res:NAME}, rule 9b)\n "captureKv": "NAME", // optional; ALSO save the subflow\'s output to a PERSISTENT cross-run key (${kv:NAME}, rule 9d)\n "outputMode": "steps" | "final-only" }\n- { "key": "...", "type": "finish" } // a finish node is ALWAYS named "Finish Node"; omit "label" (any label you supply is ignored)\n- { "key": "...", "type": "signal", "label": "...", // fire-and-forget event (rule 11): emits {topic, payload} then passes through unchanged\n "topic": "<event topic other flows\' triggers listen for>", // REQUIRED — a signal with no topic emits nothing\n "payloadTemplate": "event body, may use ${var:NAME}" } // optional; defaults to the node prompt\n- { "key": "...", "type": "resource", "label": "...", // OPTIONAL/advanced (rule 9c): a data artifact shown in the graph\n "server": "<server name>", "uri": "<resource uri>", // EITHER a static MCP resource…\n "runName": "NAME" } // …OR a run artifact steps produce/consume\n\nEDGES: { "from": "<node key>", "to": "<node key>", "bidirectional": true|false,\n "condition": { "kind": "contains"|"regex"|"equals", "value": "...",\n "target": "last-assistant"|"last-message", // optional, default last-assistant\n "ignoreCase": true|false, "negate": true|false } } // condition optional; process-node edges only\n\nRULES:\n1. Exactly ONE start node; at least one finish node reachable from it.\n2. Every process node MUST reference a configured model (by id, display name, or name).\n3. A process step uses MCP tools ONLY via its "servers" list — never emit nodes of type "mcp".\n4. Do not embed ${tool:...} or ${resource:...} references in prompts — tools are wired through "servers".\n5. Branching: give a process node multiple outgoing edges; its model decides where to hand off at runtime. "bidirectional": true lets the target hand back to the source (agent <-> agent).\n5b. Deterministic routing: give a process node\'s outgoing edges a "condition" to route WITHOUT the model — the engine takes the first outgoing edge whose predicate matches the last message (default the step\'s own last assistant message), and a bare (condition-less) edge is the fallback. Use this for reliable data-driven branches (e.g. output contains "FAIL" -> fix step, else -> publish) instead of relying on a small model to emit a handoff. Only process-node edges may carry a condition. Without any condition on a node, that node keeps model-decided handoff (rule 5). If the model still calls a handoff tool, that wins over the condition.\n6. A subflow node may have only ONE outgoing edge. Give it EITHER a "flow" (naming an existing flow) OR a "subflowSpec" (an inline nested FlowSpec that becomes its own child flow) — not both. A "subflowSpec" may itself contain subflow nodes with their own "subflowSpec" (bounded nesting), so you can author whole multi-level flows in one object.\n7. A subflow node may instead fan out to SEVERAL child flows CONCURRENTLY via "parallelFlows" (existing flows) or "parallelSubflowSpecs" (inline). These are STATIC (fixed at author time): the same input is sent to every lane and their outputs are joined. This is about multiple CHILDREN, not successors — the single-outgoing-edge rule (rule 6) still holds. Prefer "parallelFlows" for large fan-outs.\n7b. For DYNAMIC fan-out — when the set of target flows should be decided AT RUNTIME by an earlier step — use "parallelFlowsVariable": "NAME". An upstream process/subflow node captures a JSON array of flow ids/names (or a newline list) into run variable NAME via "captureVariable": "NAME"; this subflow node then fans out over exactly those flows. Unknown ids and a self-reference are dropped, the count is capped, and a non-empty resolution overrides any static "parallelFlows" (empty falls back to it). Mutually exclusive with "mapOverList". Still one outgoing edge (rule 6).\n7c. For AGENTIC spawning — when the ROUTING MODEL itself should split the work at the very moment it hands off — set "allowCallerFanout": true on the target subflow node. This makes it a SPAWNABLE sub-agent: its handoff tool gains an optional "task" (string) argument and the routing model may call the tool SEVERAL TIMES IN ONE TURN, each call spawning one parallel instance of the child flow briefed with that call\'s "task". All instances run concurrently, their outputs are joined in call order, and the flow continues once every instance finishes. A call with no "task" is a plain single handoff. Caller briefs override "spawnBriefs"/"parallelFlows"/"parallelFlowsVariable"; the count is capped. Mutually exclusive with "mapOverList". Still one outgoing edge (rule 6). Use 7c when the deciding (routing) step should choose how to split the work; use 7d\'s "spawnBriefs" when the AUTHOR fixes the briefs; use 7b when an earlier step computes a set of DIFFERENT flows.\n7d. For AUTHOR-DEFINED spawning — a fixed set of parallel briefs for ONE sub-agent — give the subflow node "spawnBriefs": ["...", "..."]. Every visit runs the single child once per brief, concurrently (same pool/tuning as parallel). Each brief may inject ${var:NAME}/${res:NAME}/${kv:NAME}. With inputMode "isolated" the brief is the lane\'s whole prompt; with history modes each lane sees the conversation plus its brief as the closing instruction. Mutually exclusive with "parallelFlows"/"parallelSubflowSpecs"/"mapOverList"; needs a single child ("flow"/"subflowSpec").\n8. A subflow node may instead run its SINGLE child flow ONCE PER ITEM via "mapOverList": true. The input is split into items by "itemSplit" ("json-array" default, or "lines"), each item is sent to its own child run, and the per-item outputs are joined (same pool/tuning as parallel). Use "sequential": true to run items in order. Mutually exclusive with "parallelFlows"/"parallelSubflowSpecs".\n9. Named variables (scratchpad): a step can save its output with "captureVariable": "NAME" (process or subflow) and any LATER step injects it with ${var:NAME} inside its "prompt" / "isolatedPrompt" / subflow prompt. This survives "latest-message"/"isolated" scoping, unlike conversation history — use it to carry a todo list, a file path, a diff, or a captured result across steps that don\'t share history. ${var:NAME} is run-scoped and plaintext; it is DISTINCT from ${global:VAR} (configured secrets/config, resolved only for tool args). Capture a subflow\'s output on the PARENT subflow node — a variable set inside a child flow is not visible to the parent.\n9b. Run resources (tracked data): a SUBFLOW may use "captureResource": "NAME" because its folded child output is a concrete result. A PROCESS must use an explicit Resource node: process→resource arms write_resource so the process writes the full artifact; resource→process injects it into a reader with ${res:NAME}. Do not put passive captureResource on a process node. Large or binary MCP tool results are auto-captured as run resources without any spec field.\n9c. Resource nodes are OPTIONAL/advanced — most flows should use conversation history. Resource edges are data wiring, not flow control: they never carry conditions and do not count as a step\'s successor.\n9d. Persistent state (cross-run): "captureKv": "NAME" (process or subflow) saves the step\'s output to a PERSISTENT key-value store that SURVIVES ACROSS RUNS, injected by any step with ${kv:NAME}. Unlike ${var:} / ${res:} (discarded when the run ends), ${kv:} is what a long-lived SCHEDULED flow uses to carry a loop counter, a pagination cursor, a last-seen id, or a flag to its NEXT run. By default a key lives on the flow\'s FOLDER board (flows in the same folder share it); prefix the name to change scope: "flow/NAME" (this flow only) or "global/NAME" (whole instance). Plaintext, never secrets (distinct from ${global:VAR}). A model can also read/update a key mid-run via the built-in "flujo" server\'s kv_get / kv_set tools.\n10. Keep flows minimal — only the steps the task needs. Write clear, specific prompts and labels; fill "description" on process nodes.\n11. Signals (fire-and-forget events): a "signal" node is a deterministic pass-through that, when the path reaches it, emits an event {topic, payload} onto the flow-run event bus and then continues to its successor unchanged (it never calls a model or touches the conversation). Use it when the flow should notify or kick off ANOTHER flow mid-run — a flow-event trigger configured elsewhere listens for the same "topic" (e.g. "when the review finds blockers, emit a review-blocked signal"). Always give it a "topic" (a signal with no topic emits nothing); "payloadTemplate" is the optional event body and may inject ${var:NAME}. Make emission conditional by putting a conditioned edge (rule 5b) INTO the signal node.\n12. Input vs output modes are two DISTINCT axes whose value names differ per node type (issue #152 clarification). inputMode ("full-history" | "latest-message" | "isolated") controls what a step RECEIVES and exists on BOTH process and subflow nodes, but they behave differently: a process node keeps the current turn\'s tool calls/results, while a subflow node ALWAYS strips system/tool-result/tool-call turns from the parent transcript in every history mode (see the inputMode notes above). "latest-message" means "from the most recent user message onward", NOT "last user + last assistant". outputMode controls what LATER steps see of a step\'s work and is a SEPARATE enum per node type: a process node uses "full-conversation" | "latest-message" (latest-message hides this step\'s tool exchange from later steps), a subflow node uses "steps" | "final-only" (live-view folding only). Common word traps: "last-message" = inputMode latest-message; "full-conversation" is a process outputMode value, NOT an input mode. A subflow\'s final answer is always injected back into the parent transcript regardless of outputMode.'},{method:"POST",path:"/api/flow/generate",summary:"Generate a draft flow from a natural-language description using one of your configured models. The model authors a FlowSpec, FLUJO compiles + validates it and feeds problems back for a bounded number of repair rounds. The generator can always SEARCH the public MCP registry; with allowInstall it can also INSTALL servers it needs. Returns an UNSAVED draft (the UI opens it in the builder for review); persist via the normal save path or /api/flow/compile.",paramsLabel:"Body",params:[{name:"description",type:"string",required:!0,description:"What the flow should do, in plain language."},{name:"modelId",type:"string",required:!0,description:"Configured model that does the generating."},{name:"maxRepairs",type:"number",description:"Repair rounds after the first attempt (default 1, max 2)."},{name:"allowInstall",type:"boolean",description:"Let the generator install MCP servers from the public registry (downloads + RUNS third-party packages on this machine). Off by default."}],response:"{ flow, validation, attempts, installedServers } — the flow is a draft; nothing flow-related is persisted by this endpoint (installed servers ARE persisted).",notes:["allowInstall executes third-party code with this machine's user permissions — opt in deliberately."]},{method:"GET",alsoMethods:["POST"],path:"/api/flow",summary:"GET lists all flow definitions; POST creates a flow (create-only; 409 if the id exists). POST takes the raw internal Flow format — prefer /api/flow/compile for programmatic creation.",paramsLabel:"Body",params:[{name:"flow",type:"Flow",required:!0,description:"Flow object including id (POST)."}]},{method:"GET",alsoMethods:["PUT","DELETE"],path:"/api/flow/{id}",summary:"GET / PUT / DELETE a single flow. On PUT the path id wins over the body id (404 if missing)."},{method:"POST",path:"/api/flow/prompt-renderer",summary:"Render the assembled prompt for a node within a flow.",paramsLabel:"Body",params:[{name:"flowId",type:"string",required:!0,description:"Flow containing the node."},{name:"nodeId",type:"string",required:!0,description:"Node to render."},{name:"options",type:"object",description:"Render options."}]}]},{id:"planned-executions",name:"Planned Executions",description:"Run flows headlessly on triggers: schedules (cron), inbound webhooks, and more. Managed from the Executions page; each run is recorded in a per-execution run history.",endpoints:[{method:"GET",alsoMethods:["POST","PATCH"],path:"/api/planned-executions",summary:"GET lists all planned executions with live trigger status and last run; POST creates one; PATCH toggles the global pause switch ({ paused: boolean }).",response:"GET: { paused, executions: [{ execution, status, lastRun }] }."},{method:"GET",alsoMethods:["PATCH","DELETE"],path:"/api/planned-executions/{id}",summary:"GET / PATCH / DELETE a single planned execution. PATCH takes a partial config and re-arms the trigger."},{method:"POST",path:"/api/planned-executions/{id}/run",summary:"Run now: fire the execution immediately (even while disabled or paused) and wait for the run.",response:"{ record: RunRecord } with status, output preview, and token usage."},{method:"GET",path:"/api/planned-executions/{id}/runs",summary:"The execution’s run history (newest 100 runs, oldest first)."},{method:"POST",path:"/api/planned-executions/preview-schedule",summary:"Validate a cron pattern and preview its next fire times (editor helper).",paramsLabel:"Body",params:[{name:"cron",type:"string",required:!0,description:"Cron pattern (5 or 6 fields)."},{name:"timezone",type:"string",description:"IANA timezone name."}],response:"{ valid, error?, nextRuns: string[] }."},{method:"POST",path:"/api/webhooks/{id}",summary:"Inbound webhook trigger. Fires the planned execution with the request body as trigger context and responds 202 { runId } immediately (the flow runs in the background). For a synchronous answer use /v1/chat/completions instead.",paramsLabel:"Query",params:[{name:"token",type:"string",required:!0,description:"Per-execution secret (alternatively send the X-Flujo-Token header)."}],notes:["Localhost-only by default; external callers must be explicitly allowed per execution.","The webhook body is untrusted input to the flow — prompts should treat it as data."]}]},{id:"mcp",name:"MCP Servers",description:"Manage MCP server configurations, connection state, tool discovery, and tool invocation.",endpoints:[{method:"GET",alsoMethods:["POST"],path:"/api/mcp/servers",summary:"GET lists all MCP server configs; POST registers a new one (409 on duplicate name).",paramsLabel:"Body",params:[{name:"config",type:"MCPServerConfig",required:!0,description:"Server config (POST)."}]},{method:"GET",alsoMethods:["PUT","DELETE"],path:"/api/mcp/servers/{name}",summary:"GET / PUT / DELETE a server config. PUT merges fields; toggling disabled connects/disconnects; a new name triggers a validated rename."},{method:"GET",path:"/api/mcp/servers/{name}/status",summary:"Live connection status. Always 200, even when the server is down.",response:"{ status, ... }"},{method:"GET",path:"/api/mcp/servers/{name}/tools",summary:"List tools exposed by a connected server.",response:"{ tools, error? } (empty tools + error when disconnected)."},{method:"POST",path:"/api/mcp/servers/{name}/tools/{toolName}",summary:"Invoke a tool on a server. Status may reflect the tool itself (408 on timeout).",paramsLabel:"Body",params:[{name:"args",type:"Record<string, unknown>",required:!0,description:"Tool arguments."},{name:"timeout",type:"number",description:"Optional timeout (ms)."}]},{method:"POST",path:"/api/mcp/test-connection",summary:"Run a real MCP handshake against an unsaved config (tests custom CAs and headers) without registering it.",paramsLabel:"Body",params:[{name:"config",type:"MCPServerConfig",required:!0,description:"Config to test."}]},{method:"POST",path:"/api/mcp/cancel",summary:"Cancel an in-progress tool execution; force-reconnects if no token is supplied.",paramsLabel:"Body",params:[{name:"reason",type:"string",required:!0,description:"Cancellation reason."}]}]},{id:"mcp-proxy",name:"FLUJO as an MCP server (proxy)",description:'Re-expose a configured MCP server to EXTERNAL MCP clients (Claude Desktop, Cursor, Cline, mcp-inspector, …) so you configure the server once in FLUJO and reach it everywhere. Enable per server via the "Expose to external apps" toggle on its card. In your MCP client, add a Streamable-HTTP server with the URL below. One downstream server per endpoint, so tool names are unchanged. Localhost-only for now (no auth token in this version — see the security roadmap).',endpoints:[{method:"POST",alsoMethods:["GET","DELETE"],path:"/mcp-proxy/{server}",summary:'A Streamable-HTTP MCP endpoint that forwards tools/list and tools/call to the named downstream MCP server. {server} is the configured server name; it must have "Expose to external apps" enabled (otherwise 404). Rejects non-localhost requests.',response:"MCP JSON-RPC over Streamable HTTP (handled by your MCP client, not called directly)."}]},{id:"mcp-flows",name:"FLUJO as an MCP server (flows + authoring)",description:"A Streamable-HTTP MCP endpoint that exposes FLUJO itself to external MCP clients. Every saved flow is a callable tool (running it ephemerally and returning its output), and three authoring tools let an external agent CREATE flows by sending a semantic FlowSpec — no raw ReactFlow JSON required. Localhost-only (same posture as the proxy).",endpoints:[{method:"POST",alsoMethods:["GET","DELETE"],path:"/mcp-flows",summary:'MCP server with two tool families. Flow tools: one per saved flow (name = slug of the flow name; input = a single "input" string sent as the user turn; runs are ephemeral and never appear in the chat sidebar). Authoring tools: list_flow_building_blocks (models, MCP servers + tools, and existing flows a spec may reference — call first), validate_flow_spec (compile + validate without saving; iterate on the returned issues), create_flow (compile + validate + save; only saves when validation finds zero errors), plus capability acquisition: search_mcp_marketplace (search the public registry) and install_mcp_server (install + connect a registry server — downloads and RUNS third-party packages on the FLUJO host; required keys can be passed via its env argument). The FlowSpec format is documented on POST /api/flow/compile above and inside the tools\' own descriptions.',response:"MCP JSON-RPC over Streamable HTTP (handled by your MCP client, not called directly)."}]},{id:"oauth",name:"OAuth (for MCP)",description:"OAuth authorization flow for MCP servers that require it. Tokens are stored server-side and never sent to the browser.",endpoints:[{method:"POST",path:"/api/oauth/initiate",summary:"Begin the OAuth flow for a server; dynamically registers a client and returns an authorization URL.",paramsLabel:"Body",params:[{name:"serverName",type:"string",required:!0,description:"MCP server to authorize."}]},{method:"GET",alsoMethods:["POST"],path:"/api/oauth/callback",summary:"OAuth redirect target; exchanges the code for tokens, updates the config, and redirects to /mcp.",notes:["Tokens are persisted server-side only."]},{method:"POST",path:"/api/oauth/reset",summary:"Clear a server's OAuth tokens and force re-authentication on the next connection.",paramsLabel:"Body",params:[{name:"serverName",type:"string",required:!0,description:"Server to reset."}]}]},{id:"env",name:"Environment & Secrets",description:"Global environment variables and server-side encryption operations. Secret values are encrypted at rest and masked as ******** in responses.",endpoints:[{method:"GET",alsoMethods:["POST"],path:"/api/env",summary:"GET reads env vars (secrets masked); POST sets/deletes vars (secrets encrypted server-side).",paramsLabel:"Body",params:[{name:"action",type:'"set" | "setAll" | "delete"',required:!0,description:"Operation."},{name:"key",type:"string",description:"Variable name (set/delete)."},{name:"value",type:"string",description:"Value; the placeholder ******** is ignored."},{name:"metadata",type:"{ isSecret: boolean }",description:"Marks a value for encryption."}],notes:["GET masks secret values unless an internal includeSecrets flag is set; the browser never receives clear-text secrets."]},{method:"POST",path:"/api/encryption/secure",summary:"Server-side encryption operations: initialize, authenticate, change_password, encrypt, verify_password, check_initialized, and status queries.",paramsLabel:"Body",params:[{name:"action",type:"string",required:!0,description:"One of the encryption actions."}],notes:["Passwords and tokens are handled here and stay server-side — never log or surface them in the UI."]}]},{id:"storage",name:"Storage & Backup",description:"Generic key-value storage plus zip backup/restore of selected data.",endpoints:[{method:"GET",alsoMethods:["POST","DELETE"],path:"/api/storage",summary:"GET loads an item by StorageKey (with optional default); POST saves; DELETE clears.",paramsLabel:"Query",params:[{name:"key",type:"StorageKey",required:!0,description:"Storage key."},{name:"defaultValue",type:"JSON",description:"Returned when the key is missing (GET)."}]},{method:"POST",path:"/api/backup",summary:"Create a zip backup of selected items and download it.",paramsLabel:"Body",params:[{name:"selections",type:"string[]",required:!0,description:"e.g. models, mcpServers, flows, chatHistory, settings."}],notes:["A backup may include the encryption key and secrets — handle the downloaded file carefully."]},{method:"POST",path:"/api/restore",summary:"Restore data from a backup zip.",paramsLabel:"Form data",params:[{name:"file",type:"File (zip)",required:!0,description:"Backup archive."},{name:"selections",type:"JSON string[]",required:!0,description:"Which items to restore."}]}]},{id:"system",name:"System & Updates",description:"App initialization, working-directory info, repository operations, and self-update.",endpoints:[{method:"GET",path:"/api/init",summary:"Server-side initialization: verify storage and start enabled MCP servers."},{method:"GET",path:"/api/cwd",summary:"Return the current working directory and the mcp-servers directory path."},{method:"GET",path:"/api/browse",summary:"List a directory of the machine running FLUJO, for the folder-picker dialogs (file-watch triggers, MCP server paths). Defaults to the home directory; includes available drives on Windows.",paramsLabel:"Query",params:[{name:"path",type:"string",description:"Absolute directory path to list."}],response:"{ path, parent, home, sep, drives, entries: [{ name, path, isDirectory }] }",notes:["Exposes backend filesystem listings — like the rest of the API it assumes a single trusted user."]},{method:"POST",path:"/api/git",summary:"Repository operations for MCP servers: clone, install, build, run, exists, readFile, listDir, list, checkUpdates, checkUpdatesBatch, pullUpdates.",paramsLabel:"Body",params:[{name:"action",type:"string",required:!0,description:"Operation to perform."}]},{method:"GET",alsoMethods:["POST"],path:"/api/update",summary:'GET checks for a newer version (git fetch + behind count); POST { action: "apply" } pulls, rebuilds, and restarts.',response:"{ success, isGitRepo, updateAvailable, behindBy?, branch?, currentVersion }"}]}],y={GET:"#2e7d32",POST:"#1565c0",PUT:"#ed6c02",PATCH:"#9c27b0",DELETE:"#c62828",OPTIONS:"#616161"};function g(e){let{method:t}=e;return(0,a.jsx)(r.A,{label:t,size:"small",sx:{bgcolor:y[t],color:"#fff",fontWeight:700,fontFamily:"var(--font-geist-mono), monospace",fontSize:"0.7rem",height:22}})}function w(e){var t,s,n,r;let{endpoint:d}=e;return(0,a.jsxs)(i.A,{variant:"outlined",sx:{p:2,mb:1.5},children:[(0,a.jsxs)(o.default,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap",mb:1},children:[(0,a.jsx)(g,{method:d.method}),null==(t=d.alsoMethods)?void 0:t.map(e=>(0,a.jsx)(g,{method:e},e)),(0,a.jsx)(l.default,{component:"code",sx:{fontFamily:"var(--font-geist-mono), monospace",fontSize:"0.9rem",wordBreak:"break-all"},children:d.path})]}),(0,a.jsx)(l.default,{variant:"body2",color:"text.secondary",sx:{mb:1.5*(null!=(s=d.params)&&!!s.length)},children:d.summary}),d.params&&d.params.length>0&&(0,a.jsxs)(o.default,{sx:{mb:1},children:[(0,a.jsx)(l.default,{variant:"caption",sx:{fontWeight:700,textTransform:"uppercase",color:"text.secondary"},children:null!=(r=d.paramsLabel)?r:"Parameters"}),(0,a.jsx)(o.default,{component:"ul",sx:{m:0,mt:.5,pl:2.5},children:d.params.map(e=>(0,a.jsx)(o.default,{component:"li",sx:{mb:.25},children:(0,a.jsxs)(l.default,{variant:"body2",component:"span",children:[(0,a.jsx)(o.default,{component:"code",sx:{fontFamily:"var(--font-geist-mono), monospace",fontWeight:600},children:e.name}),(0,a.jsxs)(o.default,{component:"span",sx:{color:"text.secondary"},children:[" ",e.type,e.required?" \xb7 required":""," — ",e.description]})]})},e.name))})]}),d.response&&(0,a.jsxs)(l.default,{variant:"body2",sx:{mt:.5},children:[(0,a.jsxs)(o.default,{component:"span",sx:{fontWeight:600},children:["Response:"," "]}),(0,a.jsx)(o.default,{component:"span",sx:{color:"text.secondary"},children:d.response})]}),null==(n=d.notes)?void 0:n.map((e,t)=>(0,a.jsxs)(l.default,{variant:"caption",sx:{display:"block",mt:1,color:"warning.main"},children:["⚠ ",e]},t)),d.details&&(0,a.jsx)(o.default,{component:"pre",sx:{mt:1.5,p:1.5,bgcolor:"action.hover",borderRadius:1,fontSize:"0.75rem",fontFamily:"monospace",whiteSpace:"pre-wrap",overflowX:"auto",m:0,mb:0},children:d.details})]})}function v(){let[e,t]=(0,n.useState)(""),[s,r]=(0,n.useState)("");n.useEffect(()=>{r(window.location.origin)},[]);let y=(0,n.useMemo)(()=>{let t=e.trim().toLowerCase();return t?f.map(e=>{let s=e.endpoints.filter(s=>{var a;return"".concat(s.method," ").concat((null!=(a=s.alsoMethods)?a:[]).join(" ")," ").concat(s.path," ").concat(s.summary).toLowerCase().includes(t)||e.name.toLowerCase().includes(t)});return{...e,endpoints:s}}).filter(e=>e.endpoints.length>0):f},[e]);return(0,a.jsxs)(d.A,{maxWidth:"md",sx:{py:5},children:[(0,a.jsx)(l.default,{variant:"h4",gutterBottom:!0,children:"API Documentation"}),(0,a.jsx)(l.default,{variant:"body1",color:"text.secondary",sx:{mb:2},children:"FLUJO exposes an OpenAI-compatible chat API and a REST surface for managing models, MCP servers, flows, and conversations. All endpoints are served from this instance."}),(0,a.jsxs)(i.A,{variant:"outlined",sx:{p:2,mb:3},children:[(0,a.jsx)(l.default,{variant:"subtitle2",gutterBottom:!0,children:"Base URL"}),(0,a.jsx)(o.default,{component:"code",sx:{fontFamily:"var(--font-geist-mono), monospace",fontSize:"0.9rem"},children:s||"http://localhost:4200"}),(0,a.jsxs)(l.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:["Point any OpenAI SDK at"," ",(0,a.jsx)(o.default,{component:"code",sx:{fontFamily:"var(--font-geist-mono), monospace"},children:(s||"http://localhost:4200")+"/v1"})," ","and set the model to"," ",(0,a.jsx)(o.default,{component:"code",sx:{fontFamily:"var(--font-geist-mono), monospace"},children:"flow-<NAME>"}),". Any API key value is accepted locally."]})]}),(0,a.jsx)(p.A,{fullWidth:!0,size:"small",placeholder:"Search endpoints (path, method, description)…",value:e,onChange:e=>t(e.target.value),sx:{mb:3},InputProps:{startAdornment:(0,a.jsx)(c.A,{position:"start",children:(0,a.jsx)(h.A,{fontSize:"small"})})}}),0===y.length&&(0,a.jsxs)(l.default,{color:"text.secondary",children:["No endpoints match “",e,"”."]}),y.map(e=>(0,a.jsxs)(o.default,{sx:{mb:4},id:e.id,children:[(0,a.jsx)(l.default,{variant:"h6",gutterBottom:!0,children:e.name}),(0,a.jsx)(l.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:e.description}),e.endpoints.map(e=>(0,a.jsx)(w,{endpoint:e},"".concat(e.method," ").concat(e.path)))]},e.id)),(0,a.jsx)(u.A,{sx:{my:3}}),(0,a.jsxs)(l.default,{variant:"caption",color:"text.secondary",children:["Secrets (API keys, encryption passwords, OAuth tokens) are encrypted at rest and never returned to the browser in clear text. See the project"," ",(0,a.jsx)(m.A,{href:"https://github.com/mario-andreschak/FLUJO",target:"_blank",rel:"noopener",children:"repository"})," ","for source-level details."]})]})}let b=(0,s(87021).h)("app/docs/page");function E(){return b.debug("Rendering DocsPage"),(0,a.jsx)(o.default,{component:"main",sx:{minHeight:"100vh"},children:(0,a.jsx)(v,{})})}},87021:(e,t,s)=>{"use strict";s.d(t,{h:()=>l});let a={LOG_LEVEL:3},o={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},n="number"==typeof a.LOG_LEVEL?a.LOG_LEVEL:o.ERROR;function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>6)return String(e);if(!(e instanceof Error))return e;let s={name:e.name,message:e.message};for(let a of Object.getOwnPropertyNames(e)){if("name"===a||"message"===a)continue;let o=e[a];"function"!=typeof o&&("stack"===a?s.stack=o:"cause"===a?s.cause=r(o,t+1):"errors"===a&&Array.isArray(o)?s.errors=o.map(e=>r(e,t+1)):s[a]=o)}return s}function i(e,t,s,a,i){if(e>=("number"==typeof i?i:n)){if("function"==typeof a)try{a=a()}catch(e){a="[lazy log data threw]"}let n=new Date().toISOString(),i="[".concat(n,"] [").concat(t,"]"),l="".concat(i," ").concat(s);if(void 0!==a)if(a instanceof Error||"object"==typeof a)try{let e=a instanceof Error?r(a):a,t=JSON.stringify(e,(e,t)=>t instanceof Error?r(t):t,2);l+=":\n".concat(t)}catch(e){l+=": [Object cannot be stringified]"}else l+=": ".concat(a);switch(e){case o.VERBOSE:console.debug("[VERBOSE] ".concat(l));break;case o.DEBUG:console.debug(l);break;case o.INFO:console.info(l);break;case o.WARN:console.warn(l);break;case o.ERROR:console.error(l);break;default:console.log(l)}}}function l(e,t){let s,a=((s=e.replace(/^src\//,"")).startsWith("/")&&(s=s.substring(1)),s);return{verbose:(e,s)=>{i(o.VERBOSE,a,e,s,t)},debug:(e,s)=>{i(o.DEBUG,a,e,s,t)},info:(e,s)=>{i(o.INFO,a,e,s,t)},warn:(e,s)=>{i(o.WARN,a,e,s,t)},error:(e,s)=>{i(o.ERROR,a,e,s,t)}}}}},e=>{e.O(0,[2678,4754,9244,3392,981,9562,488,8989,8441,1255,7358],()=>e(e.s=20938)),_N_E=e.O()}]);
|