flujo-ai 3.33.0 → 3.35.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 +292 -285
- package/.next/app-path-routes-manifest.json +20 -19
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +21 -21
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/routes-manifest.json +9 -0
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route.js +1 -1
- package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route.js +2 -2
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/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.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.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 +25 -4
- package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route.js +1 -1
- package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
- 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.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.nft.json +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route.js +1 -1
- 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.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.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.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.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.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.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.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.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.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.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.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.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 +1 -1
- 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_client-reference-manifest.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 +1 -1
- 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.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 +1 -1
- package/.next/server/app/api/model/test/route.js.nft.json +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js +1 -1
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js +1 -1
- 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.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.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.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.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.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_client-reference-manifest.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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route.js +1 -1
- package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route.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 +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route.js +1 -1
- package/.next/server/app/api/waves/route.js.nft.json +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +2 -2
- package/.next/server/app/executions/page.js +2 -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 +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 +1 -1
- 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 +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 +4 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +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.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 +1 -1
- 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 +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +2 -2
- package/.next/server/app-paths-manifest.json +20 -19
- package/.next/server/chunks/1114.js +1 -1
- package/.next/server/chunks/1226.js +1 -1
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/166.js +5 -5
- package/.next/server/chunks/1664.js +1 -1
- package/.next/server/chunks/1805.js +1 -1
- package/.next/server/chunks/227.js +1 -1
- package/.next/server/chunks/2273.js +2 -2
- package/.next/server/chunks/2372.js +1 -1
- package/.next/server/chunks/2859.js +1 -1
- package/.next/server/chunks/3717.js +1 -0
- package/.next/server/chunks/3935.js +4 -0
- package/.next/server/chunks/4265.js +1 -1
- package/.next/server/chunks/4466.js +1 -1
- package/.next/server/chunks/4551.js +1 -1
- package/.next/server/chunks/4771.js +2 -2
- package/.next/server/chunks/4822.js +1 -1
- package/.next/server/chunks/5096.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 +16 -16
- package/.next/server/chunks/5463.js +1 -1
- package/.next/server/chunks/5544.js +4 -4
- package/.next/server/chunks/5703.js +2 -2
- package/.next/server/chunks/{5708.js → 6041.js} +1 -1
- package/.next/server/chunks/6226.js +1 -1
- package/.next/server/chunks/6747.js +72 -43
- package/.next/server/chunks/701.js +1 -1
- package/.next/server/chunks/7069.js +4 -4
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7628.js +1 -1
- package/.next/server/chunks/7630.js +11 -0
- package/.next/server/chunks/7891.js +1 -1
- package/.next/server/chunks/7993.js +1 -1
- package/.next/server/chunks/8284.js +42 -0
- package/.next/server/chunks/8387.js +1 -1
- package/.next/server/chunks/8645.js +1 -1
- package/.next/server/chunks/8739.js +1 -1
- package/.next/server/chunks/9085.js +1 -1
- package/.next/server/chunks/9235.js +26 -5
- package/.next/server/chunks/9285.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
- package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
- package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 4386-e9621d3c94969a68.js} +1 -1
- package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
- package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
- package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
- package/.next/static/chunks/{8650-41c2afc0eba37fb8.js → 8650-aa22dbf7b37348f0.js} +1 -1
- package/.next/static/chunks/9611-9867e6e8e65172ec.js +1 -0
- package/.next/static/chunks/app/api/approvals/[id]/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
- package/.next/static/chunks/app/api/approvals/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
- package/.next/static/chunks/app/api/backup/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
- package/.next/static/chunks/app/api/browse/{route-9ea2990be4b67136.js → route-b9c783850b4c2acf.js} +1 -1
- package/.next/static/chunks/app/api/bugs/enhance/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/env/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/versions/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/generator/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/repair/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/flow/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/git/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/init/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/model/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/build/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/derive-secrets/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/install/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/install/status/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/installed/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/resolve/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/scan-targets/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/search/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/packages/uninstall/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/resend/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/reset/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/auth/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/feedback/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/callback/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/packages/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/publish/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/registry/settings/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/restore/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/runs/active/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/storage/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/telemetry/daily-active/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/update/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/waves/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/chat/{page-1d100e5d974c919e.js → page-e37bbc561f40ce60.js} +1 -1
- package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
- package/.next/static/chunks/app/flows/page-e52c8943555e38dd.js +1 -0
- package/.next/static/chunks/app/{layout-38b88f3b057f4852.js → layout-abed1f211e03152f.js} +1 -1
- package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/models/page-595597042e227970.js +1 -0
- package/.next/static/chunks/app/packages/page-f1a22789a6c0e0b6.js +1 -0
- package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
- package/.next/static/chunks/app/settings/page-f35e939032b0277d.js +1 -0
- package/.next/static/chunks/app/v1/chat/completions/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/chat/events/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/app/v1/models/route-b9c783850b4c2acf.js +1 -0
- package/.next/static/chunks/{webpack-dccb4f149ebdedcc.js → webpack-9d09d53b271f49e2.js} +1 -1
- package/.next/trace +10 -10
- package/.next/types/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/README.md +47 -47
- package/package.json +5 -5
- package/.next/server/chunks/2985.js +0 -1
- package/.next/server/chunks/4308.js +0 -4
- package/.next/server/chunks/4366.js +0 -2
- package/.next/server/chunks/5040.js +0 -48
- package/.next/server/chunks/8187.js +0 -78
- package/.next/server/chunks/8851.js +0 -1
- package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
- package/.next/static/chunks/3089.df88f3b16898aad7.js +0 -1
- package/.next/static/chunks/6733-c9029143901e62e9.js +0 -1
- package/.next/static/chunks/8041-05830e887c133085.js +0 -1
- package/.next/static/chunks/8404-bfa9203e4296f3fb.js +0 -1
- package/.next/static/chunks/95-b9691d3cb15556dc.js +0 -1
- package/.next/static/chunks/app/api/bugs/enhance/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/env/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/[versionId]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/versions/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/generator/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/improve/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/quick-chat/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/repair/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/flow/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/git/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/init/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/app-sandbox/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/oauth-capability/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/model/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/build/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/derive-secrets/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/install/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/install/status/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/installed/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/resolve/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/scan-targets/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/search/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/packages/uninstall/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/reconcile/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/resend/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/reset/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/auth/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/feedback/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/callback/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/oauth/initiate/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/packages/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/publish/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/registry/settings/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/restore/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/runs/active/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/storage/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/telemetry/daily-active/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/update/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/waves/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/executions/page-10ec7d58c7fbdd6f.js +0 -1
- package/.next/static/chunks/app/flows/page-9a78a2915268b2f8.js +0 -1
- package/.next/static/chunks/app/mcp/page-56b43b2f8752e9a5.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/models/page-808c0568ebc5e2c7.js +0 -1
- package/.next/static/chunks/app/packages/page-af6ec89522915206.js +0 -1
- package/.next/static/chunks/app/page-30bf4293efa47a47.js +0 -1
- package/.next/static/chunks/app/settings/page-59ae1b658838f0bc.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/inject/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/chat/events/route-9ea2990be4b67136.js +0 -1
- package/.next/static/chunks/app/v1/models/route-9ea2990be4b67136.js +0 -1
- /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → hbjnLG9RCje2AApS9TzP8}/_buildManifest.js +0 -0
- /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → hbjnLG9RCje2AApS9TzP8}/_ssgManifest.js +0 -0
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=4308,exports.ids=[4308],exports.modules={4580:(a,b,c)=>{async function d(a,b){throw Error("Web Speech API is only available in browser environments")}function e(){return{supported:!1,message:"Not in browser environment"}}c.d(b,{G:()=>e,S:()=>d}),(0,c(19815).h)("frontend/services/transcription/webSpeech")},24856:(a,b,c)=>{c.d(b,{pX:()=>d});function d(a,b,c,d){let e=`${a.type}-bottom`,f=`${b.type}-top`;return{id:`${a.id}:${e}->${b.id}:${f}`,source:a.id,sourceHandle:e,target:b.id,targetHandle:f,type:"custom",data:{edgeType:"standard",...c?{bidirectional:!0}:{},...d?{condition:d}:{}},animated:!0}}},29237:(a,b,c)=>{c.d(b,{C:()=>f,L2:()=>e,P2:()=>h,w4:()=>d,wM:()=>g});let d=["contains","regex","equals","always"],e=["last-assistant","last-message"];function f(a){return"string"==typeof a&&d.includes(a)}function g(a){try{return new RegExp(a),!0}catch{return!1}}function h(a){if(!a||!f(a.kind))return"";let b=a.negate?"!":"";if("always"===a.kind)return`${b}always`;let c=a.ignoreCase?" i":"",d="string"==typeof a.value?a.value:"",e=d.length>8?`${d.slice(0,8)}…`:d,g="regex"===a.kind?`/${e}/`:`"${e}"`;return`${b}${a.kind}:${g}${c}`}},31164:(a,b,c)=>{c.d(b,{jY:()=>f,oY:()=>g,sZ:()=>h});var d=c(21124);c(38301);var e=c(97004);let f=a=>(0,d.jsx)(e.A,{...a,variant:"standard"}),g=a=>(0,d.jsx)(e.A,{...a,variant:"mcp"}),h=a=>(0,d.jsx)(e.A,{...a,variant:"resource"})},36627:(a,b,c)=>{function d(a){return!!a&&a.includes("mcp")}function e(a){return!!a&&a.includes("resource")}function f(a){let b=a?.data?.edgeType;return"mcp"===b||"resource"===b}function g(a,b,c,f){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":f&&"start-top"!==f?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||d(b)||d(f))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||d(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||e(b)||e(f)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!e(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}function h(a,b){return"resource"===a?"resource-in":"process"===a&&e(b)?"process-left-resource":"process"===a&&d(b)?"process-left-mcp":"start"===a?"start-top":`${a}-top`}function i(a,b){if("trigger"===a)return["start"];let c=["process","finish","mcp","subflow","resource","signal","trigger"];return a&&b?c.filter(c=>null===g(a,b,c,h(c,b))):c}c.d(b,{BY:()=>f,CW:()=>h,_w:()=>i,vC:()=>g,vM:()=>e,z5:()=>d})},38259:(a,b,c)=>{c.d(b,{O:()=>i,b:()=>e});let d=(0,c(19815).h)("frontend/services/chat/index");class e extends Error{constructor(a,b,c){super(a),this.name="ChatApiError",this.status=b,this.body=c}}let f="/v1/chat/conversations";async function g(a){let b;if(204===a.status)return;let c=await a.text();if(c)try{b=JSON.parse(c)}catch{b=c}if(!a.ok)throw new e(b&&"object"==typeof b&&(b.error||b.message)||`Request failed with status ${a.status}`,a.status,b);return b}class h{async listConversations(){return d.debug("listConversations: Entering method"),g(await fetch(f))}async getConversation(a){return d.debug("getConversation: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`))}async createConversation(a){return d.debug("createConversation: Entering method",{conversationId:a.id}),g(await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async updateConversationFlow(a,b){return d.debug("updateConversationFlow: Entering method",{conversationId:a,flowId:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({flowId:b})}))}async updateConversationTitle(a,b){return d.debug("updateConversationTitle: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({title:b})}))}async updateConversationApproval(a,b){return d.debug("updateConversationApproval: Entering method",{conversationId:a,requireApproval:b}),g(await fetch(`${f}/${encodeURIComponent(a)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApproval:b})}))}async deleteConversation(a){d.debug("deleteConversation: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}`,{method:"DELETE"});await g(b)}async deleteConversations(a){return d.debug("deleteConversations: Entering method",{count:a.length}),g(await fetch(f,{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:a})}))}async respondToToolCall(a,b,c,e,h){return d.debug("respondToToolCall: Entering method",{conversationId:a,action:b,toolCallId:c,always:e}),g(await fetch(`${f}/${encodeURIComponent(a)}/respond`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:b,toolCallId:c,...e?{always:!0}:{},...h?{feedback:h}:{}})}))}async debugStep(a){return d.debug("debugStep: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/step`,{method:"POST"}))}async debugContinue(a){return d.debug("debugContinue: Entering method",{conversationId:a}),g(await fetch(`${f}/${encodeURIComponent(a)}/debug/continue`,{method:"POST"}))}async setBreakpoints(a,b){d.debug("setBreakpoints: Entering method",{conversationId:a,count:b.length});let c=await fetch(`${f}/${encodeURIComponent(a)}/breakpoints`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({breakpoints:b})});await g(c)}async synthesizeQuickChat(a){return d.debug("synthesizeQuickChat: Entering method",{conversationId:a.conversationId}),g(await fetch("/api/flow/quick-chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async synthesizeFlowGenerator(a){return g(await fetch("/api/flow/generator",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}))}async completeFlowGeneratorTurn(a){return g(await fetch("/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:"flow-Flow Generator Session",messages:a.messages,stream:!1,metadata:{flujo:"true",conversationId:a.conversationId}})}))}async restoreFlowGenerator(){return g(await fetch("/api/flow/generator",{method:"PUT"}))}async cancel(a){d.debug("cancel: Entering method",{conversationId:a});let b=await fetch(`${f}/${encodeURIComponent(a)}/cancel`,{method:"POST"});await g(b)}async injectMessage(a,b,c){d.debug("injectMessage: Entering method",{conversationId:a,messageId:c});try{let e=await fetch(`${f}/${encodeURIComponent(a)}/inject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:b,id:c})});if(e.ok)return{delivered:!0};if(409===e.status)return d.debug("injectMessage: run is not live; caller should send normally",{conversationId:a}),{delivered:!1};return d.warn("injectMessage: unexpected response; falling back to a normal send",{conversationId:a,status:e.status}),{delivered:!1}}catch(b){return d.warn("injectMessage: request failed; falling back to a normal send",{conversationId:a,err:b}),{delivered:!1}}}subscribeToEvents(a,b,c){let e=new EventSource(void 0!==c?`${f}/${encodeURIComponent(a)}/events?fromSeq=${c}`:`${f}/${encodeURIComponent(a)}/events`);return e.onopen=()=>{d.debug("Execution event stream open",{conversationId:a}),b.onOpen?.()},e.onmessage=a=>{try{b.onEvent(JSON.parse(a.data))}catch(a){d.warn("Failed to parse SSE event",{err:a})}},e.onerror=a=>{d.debug("SSE stream error (browser will retry if still open)"),b.onError?.(a)},e}}let i=new h},57361:(a,b,c)=>{c.d(b,{Ay:()=>Z,nd:()=>V,c_:()=>U});var d=c(21124),e=c(38301),f=c(6537),g=c(81637),h=c(79515),i=c(95791),j=c(46973),k=c(60839),l=c(18168),m=c(2117),n=c(63281),o=c(63654),p=c(8070),q=c(94367),r=c(50553),s=c(84233),t=c(91059),u=c(7118),v=c(91034),w=c(38941),x=c(95345),y=c(12033),z=c(1010);let A=({open:a,position:b,onClose:c,onDelete:e,onEditProperties:f,onToggleBidirectional:g,onCopy:h,onPaste:i,canPaste:j,canCopy:k,nodeId:l,selection:m,edgeId:n})=>{let o=()=>{f&&f(),c()},p=[];return l&&!m&&p.push((0,d.jsxs)(q.A,{onClick:o,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(y.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Edit Properties"})]},"edit")),n&&!l&&!m&&(f&&p.push((0,d.jsxs)(q.A,{onClick:o,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(y.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Edit Properties"})]},"edge-edit")),g&&p.push((0,d.jsxs)(q.A,{onClick:()=>{g&&g(),c()},children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(z.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Toggle Bidirectional"})]},"edge-bidirectional"))),h&&(l||m)&&p.push((0,d.jsxs)(q.A,{onClick:()=>{h&&h(),c()},disabled:!k,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(w.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Copy"})]},"copy")),i&&p.push((0,d.jsxs)(q.A,{onClick:()=>{i&&i(),c()},disabled:!j,children:[(0,d.jsx)(r.A,{children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Paste"})]},"paste")),(l||n||m)&&p.push((0,d.jsx)(t.A,{},"delete-divider"),(0,d.jsxs)(q.A,{onClick:()=>{e(),c()},sx:{color:"error.main"},children:[(0,d.jsx)(r.A,{sx:{color:"error.main"},children:(0,d.jsx)(v.A,{fontSize:"small"})}),(0,d.jsx)(s.A,{children:"Delete"})]},"delete")),(0,d.jsx)(u.A,{open:a,onClose:c,anchorReference:"anchorPosition",anchorPosition:null!==b.y&&null!==b.x?{top:b.y,left:b.x}:void 0,children:p})};var B=c(31164),C=c(97004);function D(a,b){return b.find(b=>b.id===a)}var E=c(19815);let F=(0,E.h)("components/flow/FlowBuilder/Canvas/hooks/useCanvasEvents.ts");var G=c(90430),H=c(36627),I=c(68730),J=c(43312),K=c(34229),L=c(48440),M=c(1618);let N=(0,l.Ay)(I.A)(({theme:a})=>({minWidth:"36px",padding:"6px",margin:"0 4px",backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.05)":"rgba(0, 0, 0, 0.02)","&:hover":{backgroundColor:"dark"===a.palette.mode?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.05)"}})),O=()=>{let{zoomIn:a,zoomOut:b,fitView:c}=(0,i.VH)();return(0,d.jsx)(i.Zk,{position:"top-right",style:{margin:"10px"},children:(0,d.jsxs)("div",{style:{display:"flex",gap:"5px"},children:[(0,d.jsx)(J.A,{title:"Zoom In",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>a(),children:(0,d.jsx)(K.A,{fontSize:"small"})})}),(0,d.jsx)(J.A,{title:"Zoom Out",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>b(),children:(0,d.jsx)(L.A,{fontSize:"small"})})}),(0,d.jsx)(J.A,{title:"Fit View",children:(0,d.jsx)(N,{variant:"outlined",size:"small",onClick:()=>c(),children:(0,d.jsx)(M.A,{fontSize:"small"})})})]})})},P=({showMiniMap:a=!0,showControls:b=!0,showBackground:c=!0})=>{let e=(0,k.A)(),f="dark"===e.palette.mode;return(0,d.jsxs)(d.Fragment,{children:[c&&(0,d.jsx)(i.VS,{color:f?e.palette.text.disabled:e.palette.divider,gap:20,size:1}),b&&(0,d.jsx)(i.H2,{}),a&&(0,d.jsx)(i.of,{nodeColor:f?e.palette.primary.dark:e.palette.primary.light,maskColor:f?"rgba(0, 0, 0, 0.4)":"rgba(255, 255, 255, 0.6)"})]})},Q=(0,E.h)("components/flow/FlowBuilder/Canvas/Canvas.tsx"),R="flujo:flowClipboard",S=null;function T(a){S=a;try{localStorage.setItem(R,JSON.stringify(a))}catch(a){Q.warn("Could not persist flow clipboard to localStorage",a)}}let U={start:p.vm,process:p.Uw,finish:p.IK,mcp:p.v2,subflow:p.lA,resource:p.z9,signal:p.z3,trigger:p.pF},V={custom:B.jY,mcpEdge:B.oY,resourceEdge:B.sZ},W=({open:a,position:b,onClose:c,onSelectNodeType:e,sourceNodeType:i,sourceHandleId:j})=>{let l=(0,k.A)(),m=(0,H._w)(i,j);Q.debug(`NodeSelectionModal: Source node type: ${i}, Source handle ID: ${j}`),Q.debug(`NodeSelectionModal: Valid node types: ${m.join(", ")}`);let n=[{type:"process",label:"Process Node",description:"Let a LLM do your work"},{type:"finish",label:"Finish Node",description:"End your flow here"},{type:"mcp",label:"MCP Node",description:"Add functionality"},{type:"subflow",label:"Subflow Node",description:"Run another flow"},{type:"resource",label:"Resource Node",description:"A data artifact steps read or write"},{type:"signal",label:"Signal Node",description:"Emit an event to trigger another flow"},{type:"trigger",label:"Trigger Node",description:"Schedule or event-trigger for this flow"}].filter(a=>m.includes(a.type));return b?(0,d.jsx)(f.A,{open:a,onClose:c,"aria-labelledby":"node-selection-modal",children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:300,bgcolor:"background.paper",borderRadius:2,boxShadow:24,p:4},children:[(0,d.jsx)(h.default,{variant:"h6",component:"h2",gutterBottom:!0,children:"Select Node Type"}),(0,d.jsx)(g.default,{display:"flex",flexDirection:"column",gap:2,children:n.map(a=>(0,d.jsxs)(g.default,{sx:{padding:2,borderRadius:1,border:`2px solid ${"process"===a.type?l.palette.secondary.main:"finish"===a.type?l.palette.success.main:"subflow"===a.type?l.palette.warning.main:"resource"===a.type?p.nH:l.palette.info.main}`,cursor:"pointer","&:hover":{boxShadow:3}},onClick:()=>e(a.type,b),children:[(0,d.jsxs)(g.default,{display:"flex",alignItems:"center",gap:1,mb:1,children:[(a=>{switch(a){case"process":default:return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.secondary.main,borderRadius:"50%"}});case"finish":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.success.main,borderRadius:"50%"}});case"mcp":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.info.main,borderRadius:"50%"}});case"subflow":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:l.palette.warning.main,borderRadius:"50%"}});case"resource":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.nH,borderRadius:"50%"}});case"signal":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.vp,borderRadius:"50%"}});case"trigger":return(0,d.jsx)("div",{style:{width:24,height:24,backgroundColor:p.$Q,borderRadius:"50%"}})}})(a.type),(0,d.jsx)(h.default,{variant:"subtitle1",fontWeight:"bold",children:a.label})]}),(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",children:a.description})]},a.type))})]})}):null},X=(0,l.Ay)("div")(({theme:a})=>({width:"100%",height:"80vh",border:`1px solid ${a.palette.divider}`,borderRadius:"4px",background:a.palette.background.paper,position:"relative"})),Y=(0,e.forwardRef)((a,b)=>{let c=(0,k.A)(),{nodes:f,edges:g,onNodesChange:h,onEdgesChange:l,onDrop:p,onDragOver:q,onInit:r,reactFlowWrapper:s,onEditNode:t,onEditEdge:u}=a,{contextMenu:v,selectedElements:w,closeContextMenu:x,handleDelete:y,onNodeContextMenu:z,onEdgeContextMenu:B,onPaneContextMenu:E,onSelectionContextMenu:I}=function(a){let{deleteElements:b}=(0,i.VH)(),[c,d]=(0,e.useState)({open:!1,position:{x:0,y:0}}),[f,g]=(0,e.useState)({nodes:[],edges:[]});(0,i.p4)({onChange:({nodes:a,edges:b})=>{let c=a.map(a=>a.id),d=b.map(a=>a.id);F.debug(`Selection changed: ${c.length} nodes, ${d.length} edges selected`),g({nodes:c,edges:d})}});let h=(0,e.useCallback)((a,b,c,e)=>{a.preventDefault(),b?F.debug(`Context menu opened for node: ${b}`):c?F.debug(`Context menu opened for edge: ${c}`):e?F.debug("Context menu opened for the current selection"):F.debug(`Context menu opened on canvas at (${a.clientX}, ${a.clientY})`),d({open:!0,position:{x:a.clientX,y:a.clientY},nodeId:b,edgeId:c,selection:e})},[]),j=(0,e.useCallback)(()=>{F.debug("Context menu closed"),d(a=>({...a,open:!1}))},[]),k=(0,e.useCallback)(()=>{if(c.selection)F.debug("handleDelete: Deleting the current selection"),b({nodes:f.nodes.map(a=>({id:a})),edges:f.edges.map(a=>({id:a}))});else if(c.nodeId){if(F.debug(`handleDelete: Attempting to delete node ${c.nodeId}`),!function(a,b){let c=D(a,b);return!!c&&"start"!==c.type}(c.nodeId,a)){F.warn(`Cannot delete Start node: ${c.nodeId}`),alert("Start nodes cannot be deleted");return}b({nodes:[{id:c.nodeId}]})}else c.edgeId&&(F.debug(`handleDelete: Deleting edge ${c.edgeId}`),b({edges:[{id:c.edgeId}]}))},[c,b,a,f]),l=(0,e.useCallback)((a,b)=>{h(a,b.id)},[h]),m=(0,e.useCallback)((a,b)=>{h(a,void 0,b.id)},[h]),n=(0,e.useCallback)(a=>{h(a)},[h]),o=(0,e.useCallback)(a=>{h(a,void 0,void 0,!0)},[h]);return{contextMenu:c,selectedElements:f,onContextMenu:h,closeContextMenu:j,handleDelete:k,onNodeContextMenu:l,onEdgeContextMenu:m,onPaneContextMenu:n,onSelectionContextMenu:o}}(f),{deleteElements:J}=(0,i.VH)(),K=(0,i.PI)(),L=(0,e.useRef)(null),[M,N]=(0,e.useState)(null),[Y,Z]=(0,e.useState)({open:!1,position:null}),$=(0,e.useCallback)(a=>[...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),{type:"add",item:{...a,selected:!0}}],[f]);(0,e.useEffect)(()=>{if(!t)return;let a=a=>{if(a.detail&&a.detail.nodeId){let b=D(a.detail.nodeId,f);b&&t(b)}};return document.addEventListener("editNode",a),()=>{document.removeEventListener("editNode",a)}},[f,t]);let _=(0,e.useCallback)(a=>{if(!a.sourceHandle||!a.targetHandle)return void Q.error("Invalid connection: Missing source or target handle",a);let b=K.getState().connection.fromHandle?.type==="target";if(!(0,G.JL)(a,f,g))return;let d=(0,G.wn)(a,f);if(d.data?.edgeType==="standard"){let d=a=>a.data?.edgeType!=="mcp",e=a=>!!a.data?.bidirectional,h=g.find(b=>d(b)&&b.source===a.source&&b.target===a.target),i=g.find(b=>d(b)&&b.source===a.target&&b.target===a.source),k=a=>{Q.info(`Merging reverse connection into bidirectional edge ${a.id}`),l([{type:"replace",id:a.id,item:{...a,data:{...a.data,bidirectional:!0},markerStart:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}}])};if(b){let a=h??i;return a?void(!e(a)&&(0,G.y2)(a,f,g)&&k(a)):void Q.info("Connection drawn from a top handle is only allowed to convert an existing edge to bidirectional")}if(h&&e(h))return;if(i){!e(i)&&(0,G.y2)(i,f,g)&&k(i);return}}l([...(0,G.Cm)(d,g).map(a=>({type:"remove",id:a})),{type:"add",item:d}])},[f,g,l,K,c.palette.text.secondary]),aa=(0,e.useCallback)(a=>(0,G.p9)(a,f,g),[f,g]);(0,e.useEffect)(()=>{let a=a=>{let{edgeId:b,waypoints:c}=a.detail,d=g.find(a=>a.id===b);if(!d)return;let{waypoint:e,...f}=d.data??{};l([{type:"replace",id:b,item:{...d,data:{...f,waypoints:c??void 0}}}])};return document.addEventListener(C.R,a),()=>document.removeEventListener(C.R,a)},[g,l]);let ab=(0,e.useCallback)(async({nodes:a,edges:b})=>{let c=a.filter(a=>"start"!==a.type),d=new Set(c.map(a=>a.id)),e=new Set(a.map(a=>a.id)),f=b.filter(a=>!!(a.selected||d.has(a.source)||d.has(a.target))||!(e.has(a.source)||e.has(a.target))),g=c.filter(a=>"trigger"===a.type);return g.length>0&&await Promise.all(g.map(async a=>{let b=a.data?.properties?.executionId;if("string"==typeof b&&b)try{await o.P.update(b,{enabled:!1})}catch(a){console.warn("TriggerNode: failed to disarm PlannedExecution",b,a)}})),(0!==c.length||0!==f.length)&&{nodes:c,edges:f}},[]),ac=(0,e.useCallback)(a=>{N(a),r&&r(a)},[r]);(0,e.useEffect)(()=>{let a=a=>{if(!a.detail||!M)return;let{nodeType:b,position:c}=a.detail,d=n.g.createNode(b,c);h($(d)),t&&t(d)};return document.addEventListener("addNodeFromPalette",a),()=>{document.removeEventListener("addNodeFromPalette",a)}},[M,h,$,t]);let ad=(0,e.useCallback)(()=>{if(v.nodeId&&t){let a=D(v.nodeId,f);a&&t(a)}else if(v.edgeId&&u){let a=g.find(a=>a.id===v.edgeId);a&&u(a)}},[v.nodeId,v.edgeId,f,g,t,u]),ae=(0,e.useCallback)(()=>{let a;if(!v.edgeId)return;let b=g.find(a=>a.id===v.edgeId);if(!b)return;if(b.data?.edgeType!=="standard")return void Q.debug(`Toggle bidirectional ignored for non-standard edge ${b.id}`);let d=!!b.data?.bidirectional;if(!d&&!(0,G.y2)(b,f,g))return void Q.info(`Edge ${b.id} cannot be made bidirectional (reverse direction is not a legal connection)`);let e={...b.data??{},bidirectional:!d};if(d){let{markerStart:c,...d}=b;a={...d,data:e}}else a={...b,data:e,markerStart:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}};l([{type:"replace",id:b.id,item:a}])},[v.edgeId,g,f,l,c.palette.text.secondary]),af=(0,e.useCallback)((a,b)=>{a.preventDefault(),t&&t(b)},[t]),ag=(0,e.useCallback)((a,b)=>{let{fromNode:c,fromHandle:d,toHandle:e}=b;if(!c||!d?.id||!M)return void Q.debug("onConnectEnd: No valid connection start data");Q.debug(`onConnectEnd: Connection ended from node ${c.id}, handle ${d.id}`);let f="subflow"===c.type&&g.some(a=>{let b=a.data;return b?.edgeType!=="mcp"&&b?.edgeType!=="resource"&&(a.source===c.id||a.target===c.id&&!!b?.bidirectional)}),h=!!a.target?.closest?.(".react-flow__pane");if(!function(a){let{fromNodeType:b,fromHandleType:c,fromHandleId:d,landedOnHandle:e,droppedOnPane:f,subflowHasOutgoing:g}=a;return!e&&!!f&&!!d&&("target"!==c||!!(0,H.z5)(d))&&("subflow"!==b||"source"!==c||!g)}({fromNodeType:c.type,fromHandleType:d.type,fromHandleId:d.id,landedOnHandle:!!e,droppedOnPane:h,subflowHasOutgoing:f}))return;let i=a instanceof MouseEvent?a:a.changedTouches[0],j=M.screenToFlowPosition({x:i.clientX,y:i.clientY});Q.debug(`onConnectEnd: Connection dropped on pane at position (${j.x}, ${j.y})`),Z({open:!0,position:j,sourceNodeId:c.id,sourceNodeType:c.type,sourceHandleId:d.id})},[M,g]),ah=(0,e.useCallback)((a,b)=>{Q.debug(`handleNodeTypeSelection: Selected node type ${a} at position (${b.x}, ${b.y})`);let c=n.g.createNode(a,b);h($(c));let{sourceNodeId:d,sourceHandleId:e}=Y,i=d?D(d,f):void 0;if(i&&e){let b=(0,H.CW)(a,e),d={source:i.id,sourceHandle:e,target:c.id,targetHandle:b};if(Q.debug(`handleNodeTypeSelection: Creating connection from ${d.source} to ${d.target}`),(0,G.JL)(d,[...f,c],g)){let a=(0,G.wn)(d,[...f,c]);l([...(0,G.Cm)(a,g).map(a=>({type:"remove",id:a})),{type:"add",item:a}]),Q.debug(`handleNodeTypeSelection: Edge created with id ${a.id}`)}}Z({open:!1,position:null}),t&&t(c)},[Y,f,g,$,h,l,t]),ai=(0,e.useCallback)(()=>{Q.debug("handleCloseNodeSelectionModal: Closing node selection modal"),Z({open:!1,position:null})},[]),aj=(0,e.useCallback)(()=>{let a=new Set(w.nodes),b=f.filter(b=>a.has(b.id)&&"start"!==b.type);if(0===b.length)return!1;let c=new Set(b.map(a=>a.id)),d=g.filter(a=>c.has(a.source)&&c.has(a.target));return T({nodes:JSON.parse(JSON.stringify(b)),edges:JSON.parse(JSON.stringify(d))}),Q.debug(`Copied ${b.length} node(s) and ${d.length} edge(s)`),!0},[w,f,g]),ak=(0,e.useCallback)(()=>{let a=S;if(!a)try{let b=localStorage.getItem(R);b&&(a=JSON.parse(b))}catch(a){Q.warn("Could not read flow clipboard from localStorage",a)}if(!a||!a.nodes||0===a.nodes.length)return void Q.debug("Paste requested but clipboard is empty");let b=new Map;a.nodes.forEach(a=>b.set(a.id,(0,m.A)()));let c=a.nodes.map(a=>({...a,id:b.get(a.id),position:{x:(a.position?.x??0)+40,y:(a.position?.y??0)+40},selected:!0,data:{...a.data}})),d=(a.edges||[]).filter(a=>b.has(a.source)&&b.has(a.target)).map(a=>({...a,id:(0,m.A)(),source:b.get(a.source),target:b.get(a.target),selected:!1}));h([...f.filter(a=>a.selected).map(a=>({type:"select",id:a.id,selected:!1})),...c.map(a=>({type:"add",item:a}))]),d.length>0&&l(d.map(a=>({type:"add",item:a}))),Q.info(`Pasted ${c.length} node(s) and ${d.length} edge(s)`)},[f,h,l]),al=(0,e.useCallback)(a=>{let b=a.ctrlKey||a.metaKey,c=a.key.toLowerCase();if(b&&"c"===c){aj()&&a.preventDefault();return}if(b&&"x"===c){aj()&&(a.preventDefault(),J({nodes:w.nodes.map(a=>({id:a})),edges:w.edges.map(a=>({id:a}))}));return}if(b&&"v"===c){a.preventDefault(),ak();return}},[aj,ak,J,w]),am=(0,e.useCallback)(()=>{if(v.nodeId&&!w.nodes.includes(v.nodeId)){let a=f.find(a=>a.id===v.nodeId);a&&"start"!==a.type&&(T({nodes:JSON.parse(JSON.stringify([a])),edges:[]}),Q.debug("Copied right-clicked node to clipboard"));return}aj()},[v.nodeId,w,f,aj]),an=(0,e.useMemo)(()=>{if(S)return!0;try{return!!localStorage.getItem(R)}catch{return!1}},[v.open]),ao=(0,e.useMemo)(()=>{if(v.selection){let a=new Set(w.nodes);return f.some(b=>a.has(b.id)&&"start"!==b.type)}if(v.nodeId){let a=f.find(a=>a.id===v.nodeId);return!!a&&"start"!==a.type}return!1},[v.selection,v.nodeId,w,f]);return(0,d.jsxs)(X,{ref:a=>{b&&("function"==typeof b?b(a):b.current=a),s&&(s.current=a),L.current=a},children:[(0,d.jsxs)(i.Gc,{nodes:f,edges:g,nodeTypes:U,edgeTypes:V,defaultEdgeOptions:(0,e.useMemo)(()=>({type:"custom",animated:!0,style:{stroke:c.palette.text.secondary,strokeWidth:2},markerEnd:{type:j.TG.ArrowClosed,width:20,height:20,color:c.palette.text.secondary}}),[c.palette.text.secondary]),connectionLineType:j.Do.SmoothStep,connectionMode:j.WZ.Loose,isValidConnection:aa,onNodesChange:h,onEdgesChange:l,onConnect:_,onBeforeDelete:ab,deleteKeyCode:["Backspace","Delete"],onDrop:p,onDragOver:q,onInit:ac,onNodeContextMenu:z,onEdgeContextMenu:B,onPaneContextMenu:E,onSelectionContextMenu:I,onKeyDown:al,onNodeDoubleClick:af,onConnectEnd:ag,tabIndex:0,fitView:!0,attributionPosition:"bottom-right",minZoom:.1,maxZoom:2,snapToGrid:!0,snapGrid:[15,15],connectOnClick:!1,children:[(0,d.jsx)(O,{}),(0,d.jsx)(P,{})]}),(0,d.jsx)(A,{open:v.open,position:v.position,onClose:x,onDelete:y,onEditProperties:ad,onToggleBidirectional:ae,onCopy:am,onPaste:ak,canPaste:an,canCopy:ao,nodeId:v.nodeId,selection:v.selection,edgeId:v.edgeId}),(0,d.jsx)(W,{open:Y.open,position:Y.position,onClose:ai,onSelectNodeType:ah,sourceNodeType:Y.sourceNodeType,sourceHandleId:Y.sourceHandleId})]})});Y.displayName="Canvas";let Z=Y},61220:(a,b,c)=>{c.d(b,{A:()=>P});var d=c(21124),e=c(38301),f=c(19815);async function g(a,b={}){return{text:"Speech recognition is only available in browser environments",success:!1,error:"Server-side transcription is not supported"}}c(4580),(0,f.h)("frontend/services/transcription");var h=c(49938),i=c(54573),j=c(81637),k=c(79515),l=c(44079),m=c(41893),n=c(37674),o=c(43312),p=c(95587),q=c(77028),r=c(40512),s=c(83899),t=c(52327),u=c(8521),v=c(19925),w=c(68730),x=c(70011),y=c(9258),z=c(73245),A=c(30137),B=c(88970),C=c(36698),D=c(12033),E=c(73821),F=c(46973),G=c(95791),H=c(60839),I=c(57361);let J=new Set(["start","process","subflow"]),K=a=>a.type??a.data?.type,L=({flow:a,selectedNodeId:b,onSelect:c,onClose:f})=>{let g=(0,H.A)(),h=(0,e.useMemo)(()=>(a?.nodes||[]).map(a=>{let c=J.has(K(a)||""),d=a.id===b;return{...a,draggable:!1,selectable:!1,style:{...a.style||{},opacity:c?1:.35,cursor:c?"pointer":"default",borderRadius:8,boxShadow:d?`0 0 0 3px ${g.palette.primary.main}`:void 0,transition:"box-shadow 120ms ease"}}}),[a?.nodes,b,g.palette.primary.main]),i=(0,e.useMemo)(()=>(a?.edges||[]).filter(a=>a.source&&a.target&&a.sourceHandle&&a.targetHandle),[a?.edges]),j=(0,e.useMemo)(()=>({type:"custom",animated:!1,style:{stroke:g.palette.text.secondary,strokeWidth:2},markerEnd:{type:F.TG.ArrowClosed,width:20,height:20,color:g.palette.text.secondary}}),[g.palette.text.secondary]);return(0,d.jsx)(G.Gc,{nodes:h,edges:i,nodeTypes:I.c_,edgeTypes:I.nd,defaultEdgeOptions:j,connectionLineType:F.Do.SmoothStep,fitView:!0,minZoom:.1,maxZoom:2,onNodeClick:(a,b)=>{J.has(K(b)||"")&&(c(b.id),f())},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,deleteKeyCode:null,proOptions:{hideAttribution:!0},children:(0,d.jsx)(G.VS,{})})},M=({open:a,flow:b,selectedNodeId:c,allowAutomatic:e,onSelect:f,onClose:g})=>{let h=!!(b&&(b.nodes?.length??0)>0);return(0,d.jsxs)(r.A,{open:a,onClose:g,maxWidth:"lg",fullWidth:!0,children:[(0,d.jsx)(s.A,{children:"Pick a node to run on"}),(0,d.jsxs)(t.A,{dividers:!0,sx:{p:0},children:[(0,d.jsx)(j.default,{sx:{px:2,pt:1.5},children:(0,d.jsxs)(k.default,{variant:"caption",color:"text.secondary",children:["Click a ",(0,d.jsx)("strong",{children:"Start"}),", ",(0,d.jsx)("strong",{children:"Process"}),", or"," ",(0,d.jsx)("strong",{children:"Subflow"})," node. Other nodes and edges can't be picked."]})}),(0,d.jsx)(j.default,{sx:{height:"62vh",width:"100%"},children:h?(0,d.jsx)(G.Ln,{children:(0,d.jsx)(L,{flow:b,selectedNodeId:c,onSelect:f,onClose:g})}):(0,d.jsx)(j.default,{sx:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:"No flow to display."})})})]}),(0,d.jsxs)(v.A,{children:[e&&(0,d.jsx)(w.A,{startIcon:(0,d.jsx)(E.A,{}),onClick:()=>{f(null),g()},children:"Automatic"}),(0,d.jsx)(j.default,{sx:{flex:1}}),(0,d.jsx)(w.A,{onClick:g,children:"Cancel"})]})]})};var N=c(2117);let O=(0,f.h)("frontend/components/Chat/ChatInput"),P=({onSendMessage:a,disabled:b=!1,requireApproval:c=!1,onRequireApprovalChange:f,executeInDebugger:E=!1,onExecuteInDebuggerChange:F,availableNodes:G=[],flow:H=null,currentNodeId:I=null,nodeOverrideActive:J=!1,onSelectNode:K,editing:L=null,onEditingContentChange:P,onEditingNodeChange:Q,onSaveEdit:R,onCancelEdit:S})=>{let{settings:T}=(0,h.rX)(),[U,V]=(0,e.useState)(""),[W,X]=(0,e.useState)([]),[Y,Z]=(0,e.useState)(!1),[$,_]=(0,e.useState)(0),[aa,ab]=(0,e.useState)(null),ac=(0,e.useRef)(null),ad=(0,e.useRef)(null),ae=(0,e.useRef)([]),[af,ag]=(0,e.useState)(!1),ah=!!L,ai=ah?L?.nodeId??null:I,aj=(a=>G.find(b=>b.id===a)?.label||(a?`${a.substring(0,6)}...`:"Start"))(ai),[ak,al]=(0,e.useState)(!1),[am,an]=(0,e.useState)(""),[ao,ap]=(0,e.useState)(""),[aq,ar]=(0,e.useState)("document"),[as,at]=(0,e.useState)(!1),[au,av]=(0,e.useState)(0),[aw,ax]=(0,e.useState)(""),ay=()=>{L&&L.content.trim()&&R?.()},az=()=>{(U.trim()||W.length>0)&&(O.debug("Sending message",{messageLength:U.length,attachmentsCount:W.length}),a(U,W),V(""),X([]))},aA=async a=>{let b=a.target.files;if(!b||0===b.length)return;let c=b[0];O.debug("File selected",{fileName:c.name,fileSize:c.size,fileType:c.type}),ap(`Processing ${c.name}`),ar("document"),an(""),at(!0),al(!0);try{let a=await aB(c);O.debug("File read successfully",{contentLength:a.length}),an(a),at(!1)}catch(a){O.error("Error reading file:",a),an("Error reading file. Please try again with a text file."),at(!1)}ac.current&&(ac.current.value="")},aB=a=>new Promise((b,c)=>{let d=new FileReader;d.onload=a=>{a.target?.result?b(a.target.result):c(Error("Failed to read file"))},d.onerror=()=>{c(Error("Error reading file"))},d.readAsText(a)}),aC=async()=>{O.debug("Starting audio recording");try{let a=await navigator.mediaDevices.getUserMedia({audio:!0});O.debug("Audio stream obtained successfully"),ae.current=[];let b=new MediaRecorder(a);ad.current=b,b.ondataavailable=a=>{a.data.size>0&&ae.current.push(a.data)},b.onstop=async()=>{let b=new Blob(ae.current,{type:"audio/wav"});ap("Audio Recording"),ar("audio"),an(""),at(!0),al(!0);try{if((T?.speech||{enabled:!0,modelSize:"base",autoDownload:!1}).enabled){ax("Initializing transcription..."),av(0);let a=await g(b,{onProgress:av,onStatusChange:ax,language:navigator.language});if(a.success){let b=a.text;an(b),O.debug("Transcription successful",{textLength:a.text.length,engine:a.engine})}else an(`Error transcribing audio: ${a.error}.`),O.error("Transcription failed",{error:a.error})}else an("Speech recognition is disabled in settings. Enable it to get automatic transcriptions.")}catch(a){O.error("Error handling audio recording",{error:a}),an(`Failed to process audio: ${a}`)}finally{at(!1),a.getTracks().forEach(a=>a.stop())}},b.start(),Z(!0);let c=setInterval(()=>{_(a=>a+1)},1e3);ab(c)}catch(a){O.error("Error starting recording:",a),alert("Could not access microphone. Please check permissions.")}};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(i.A,{elevation:3,sx:{p:2,display:"flex",flexDirection:"column",borderRadius:2},children:[W.length>0&&(0,d.jsx)(j.default,{sx:{mb:2,display:"flex",flexWrap:"wrap",gap:1},children:W.map(a=>(0,d.jsxs)(i.A,{variant:"outlined",sx:{p:1,display:"flex",alignItems:"center",borderRadius:1,bgcolor:"background.default"},children:["image"===a.type?(0,d.jsx)(j.default,{component:"img",src:a.content,alt:a.originalName||"pasted image",sx:{width:40,height:40,objectFit:"cover",borderRadius:1,mr:1}}):"document"===a.type?(0,d.jsx)(y.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(z.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(k.default,{variant:"body2",noWrap:!0,sx:{maxWidth:150},children:a.originalName||`${a.type} attachment`}),(0,d.jsx)(l.A,{size:"small",onClick:()=>(a=>{O.debug("Removing attachment",{id:a}),X(W.filter(b=>b.id!==a))})(a.id),sx:{ml:1},children:(0,d.jsx)(A.A,{fontSize:"small"})})]},a.id))}),ah&&(0,d.jsxs)(j.default,{sx:{mb:1,display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(m.A,{icon:(0,d.jsx)(D.A,{}),label:"Editing message",size:"small",color:"warning",variant:"outlined"}),(0,d.jsx)(k.default,{variant:"caption",color:"text.secondary",children:"Enter to save \xb7 Esc to cancel"})]}),(0,d.jsxs)(j.default,{sx:{display:"flex",alignItems:"flex-end"},children:[(0,d.jsx)(n.A,{fullWidth:!0,multiline:!0,maxRows:ah?12:4,"data-tour":"chat-input",placeholder:ah?"Edit message...":"Type a message...",value:ah?L?.content??"":U,onChange:a=>{ah?P?.(a.target.value):V(a.target.value)},onKeyDown:a=>{"Enter"!==a.key||a.shiftKey?"Escape"===a.key&&ah&&(a.preventDefault(),S?.()):(a.preventDefault(),ah?ay():(O.debug("Enter key pressed, sending message"),az()))},onPaste:a=>{let b=a.clipboardData?.items;if(!b)return;let c=[];for(let a=0;a<b.length;a++){let d=b[a];if("file"===d.kind&&d.type.startsWith("image/")){let a=d.getAsFile();a&&c.push(a)}}0!==c.length&&(a.preventDefault(),O.debug("Pasting image attachment(s)",{count:c.length}),c.forEach(a=>{let b=new FileReader;b.onload=b=>{let c=b.target?.result;if("string"!=typeof c)return;let d=(a.type.split("/")[1]||"png").split("+")[0];X(b=>[...b,{id:(0,N.A)(),type:"image",content:c,originalName:a.name&&!/^image\.\w+$/i.test(a.name)?a.name:`Pasted image.${d}`}])},b.onerror=()=>O.error("Failed to read pasted image"),b.readAsDataURL(a)}))},disabled:!ah&&b,variant:"outlined",autoFocus:ah,sx:{mr:1},InputProps:{sx:{borderRadius:2}}}),!ah&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:"Attach document",children:(0,d.jsx)(l.A,{color:"primary",onClick:()=>{O.debug("File selection triggered"),ac.current?.click()},disabled:b||Y,children:(0,d.jsx)(y.A,{})})}),(0,d.jsx)("input",{type:"file",ref:ac,onChange:aA,style:{display:"none"},accept:".txt,.md,.json,.csv,.html,.xml,.js,.ts,.jsx,.tsx,.css,.scss"}),(0,d.jsx)(o.A,{title:Y?"Stop recording":"Record audio",children:(0,d.jsxs)(l.A,{color:Y?"error":"primary",onClick:Y?()=>{O.debug("Stopping audio recording"),ad.current&&"inactive"!==ad.current.state&&(ad.current.stop(),Z(!1),aa&&(clearInterval(aa),ab(null)),_(0))}:aC,disabled:b,children:[(0,d.jsx)(z.A,{}),Y&&(0,d.jsx)(k.default,{variant:"caption",sx:{position:"absolute",bottom:-15,fontSize:"0.7rem",color:"error.main"},children:(a=>{let b=Math.floor(a/60);return`${b.toString().padStart(2,"0")}:${(a%60).toString().padStart(2,"0")}`})($)})]})})]}),ah?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:"Save edit",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{color:"primary",onClick:ay,disabled:!L?.content.trim(),children:(0,d.jsx)(C.A,{})})})}),(0,d.jsx)(o.A,{title:"Cancel edit",children:(0,d.jsx)(l.A,{color:"default",onClick:()=>S?.(),children:(0,d.jsx)(A.A,{})})})]}):(0,d.jsx)(o.A,{title:"Send message",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{color:"primary",onClick:az,disabled:b||!U.trim()&&0===W.length,children:(0,d.jsx)(x.A,{})})})})]})," ",(f||(K||ah)&&G.length>0)&&(0,d.jsxs)(j.default,{sx:{mt:1,display:"flex",justifyContent:"flex-start",alignItems:"center",flexWrap:"wrap",gap:1},children:[(K||ah)&&G.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o.A,{title:ah?"Node this message runs on — click to pick from the flow":J?"Next message will run on this manually picked node — click to change":"Node the next message will run on — click to pick from the flow",children:(0,d.jsx)(m.A,{icon:(0,d.jsx)(B.A,{}),label:aj,size:"small",color:ah||J?"primary":"default",variant:ah||J?"filled":"outlined",onClick:()=>ag(!0),disabled:!ah&&b})}),(0,d.jsx)(M,{open:af,flow:H,selectedNodeId:ai,allowAutomatic:!ah,onSelect:a=>{ah?Q?.(a):K?.(a)},onClose:()=>ag(!1)})]}),f&&(0,d.jsx)(p.A,{control:(0,d.jsx)(q.A,{checked:c,onChange:a=>f(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(k.default,{variant:"caption",children:"Require Tool Approvals"}),sx:{mr:"auto"}}),F&&(0,d.jsx)(p.A,{control:(0,d.jsx)(q.A,{checked:E,onChange:a=>F(a.target.checked),size:"small",disabled:b}),label:(0,d.jsx)(k.default,{variant:"caption",children:"Execute in Debugger"}),sx:{ml:2}})]})," "]})," ",(0,d.jsxs)(r.A,{open:ak,onClose:()=>!as&&al(!1),maxWidth:"md",fullWidth:!0,children:[(0,d.jsxs)(s.A,{children:[ao,!as&&(0,d.jsx)(l.A,{"aria-label":"close",onClick:()=>al(!1),sx:{position:"absolute",right:8,top:8},children:(0,d.jsx)(A.A,{})})]}),(0,d.jsx)(t.A,{dividers:!0,children:as?(0,d.jsxs)(j.default,{sx:{display:"flex",justifyContent:"center",flexDirection:"column",alignItems:"center",p:4},children:[(0,d.jsx)(u.default,{value:"audio"===aq&&au?au:void 0,variant:"audio"===aq&&au>0?"determinate":"indeterminate"}),"audio"===aq&&(0,d.jsxs)(j.default,{sx:{mt:2,textAlign:"center"},children:[(0,d.jsx)(k.default,{variant:"body2",children:aw||"Processing audio..."}),au>0&&(0,d.jsxs)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:1},children:[Math.round(au),"%"]})]})]}):(0,d.jsx)(n.A,{multiline:!0,fullWidth:!0,minRows:10,maxRows:20,value:am,onChange:a=>an(a.target.value),variant:"outlined",placeholder:"document"===aq?"Document content":"Audio transcription"})}),(0,d.jsxs)(v.A,{children:[(0,d.jsx)(w.A,{onClick:()=>al(!1),disabled:as,children:"Cancel"}),(0,d.jsx)(w.A,{onClick:()=>{O.debug("Adding attachment",{type:aq,titleLength:ao.length}),X([...W,{id:(0,N.A)(),type:aq,content:am,originalName:ao}]),al(!1)},variant:"contained",disabled:as||!am.trim(),children:"Add to Message"})]})]})]})}},74855:(a,b,c)=>{c.d(b,{MG:()=>e,Ud:()=>f});var d=c(46973);d.TG.ArrowClosed;let e={type:"resourceEdge",animated:!1,style:{stroke:"#009688",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#009688"}},f={type:"mcpEdge",animated:!1,style:{stroke:"#1976d2",strokeWidth:2},markerEnd:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"},markerStart:{type:d.TG.ArrowClosed,width:20,height:20,color:"#1976d2"}}},90430:(a,b,c)=>{c.d(b,{Cm:()=>l,JL:()=>i,p9:()=>h,wn:()=>j,y2:()=>k});var d=c(74855),e=c(36627);function f(a,b,c){return b.filter(b=>!(0,e.BY)(b)&&(b.source===a?b.target!==c:!!(b.target===a&&b.data?.bidirectional)&&b.source!==c))}function g(a,b,c=[]){if(!a.source||!a.target||!a.sourceHandle||!a.targetHandle)return"Missing source, target, or handles";let d=b.find(b=>b.id===a.source),h=b.find(b=>b.id===a.target);if(!d||!h)return"Source or target node not found";let i=(0,e.vC)(d.type,a.sourceHandle,h.type,a.targetHandle);return i||("subflow"===d.type&&f(d.id,c,a.target).length>0?"Subflow nodes can only have one outgoing connection":null)}function h(a,b,c=[]){return null===g(a,b,c)}function i(a,b,c=[]){let d=g(a,b,c);return!d||(console.error(`Invalid connection: ${d}`,a),!1)}function j(a,b,c){let f=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target),h=a.sourceHandle,i=a.targetHandle,j=f?.type==="mcp"||g?.type==="mcp"||(0,e.z5)(h)||(0,e.z5)(i),k=!j&&(f?.type==="resource"||g?.type==="resource"||(0,e.vM)(h)||(0,e.vM)(i)),l=`${a.source}:${h}->${a.target}:${i}`;return j?{id:l,...a,type:"mcpEdge",data:{edgeType:"mcp"},animated:!1,markerEnd:d.Ud.markerEnd,markerStart:d.Ud.markerStart,style:d.Ud.style}:k?{id:l,...a,type:"resourceEdge",data:{edgeType:"resource"},animated:!1,markerEnd:d.MG.markerEnd,style:d.MG.style}:{id:l,...a,type:"custom",data:{edgeType:"standard",...c?{condition:c}:{}},animated:!0}}function k(a,b,c=[]){let d=b.find(b=>b.id===a.source),g=b.find(b=>b.id===a.target);return!!d&&!!g&&("subflow"!==g.type||!(f(g.id,c,a.source).length>0))&&null===(0,e.vC)(g.type,null,d.type,null)}function l(a,b){let c=a=>a.data?.edgeType,d=a=>"mcp"===c(a),e=a=>"resource"===c(a);return b.filter(b=>b.id===a.id||(d(a)?d(b)&&(b.source===a.source&&b.target===a.target||b.source===a.target&&b.target===a.source):e(a)?e(b)&&b.source===a.source&&b.target===a.target:!d(b)&&!e(b)&&b.source===a.source&&b.target===a.target)).map(a=>a.id)}},96626:(a,b,c)=>{c.d(b,{A:()=>aj});var d=c(21124),e=c(38301),f=c.n(e),g=c(79515),h=c(81637),i=c(8521),j=c(43312),k=c(41893),l=c(99561),m=c(95587),n=c(67191),o=c(44079),p=c(54573),q=c(61628),r=c(19787),s=c(95803),t=c(77028),u=c(82605),v=c(50062),w=c(7675),x=c(94367),y=c(38233),z=c(37674),A=c(68730),B=c(29231),C=c(86374),D=c(74419),E=c(7118),F=c(50553),G=c(84233),H=c(45798),I=c(18954),J=c(96955),K=c(16348),L=c(13665),M=c(9258),N=c(73245),O=c(17332),P=c(84049),Q=c(56685),R=c(82543),S=c(22797),T=c(12033),U=c(24276),V=c(885),W=c(91353),X=c(82571),Y=c(98502);function Z(a){return!!a&&(a.startsWith(Y.n9)||"handoff"===a)}var $=c(34641);let _=(0,c(19815).h)("frontend/components/Chat/ChatMessages");function aa(a){return"assistant"===a.role&&"tool_calls"in a&&Array.isArray(a.tool_calls)}function ab(a){if("tool"!==a.role||"string"!=typeof a.content)return!1;try{return JSON.parse(a.content)?.handoff===!0}catch{return!1}}let ac={p:a=>(0,d.jsx)(g.default,{variant:"body1",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),h1:a=>(0,d.jsx)(g.default,{variant:"h5",sx:{mt:2,mb:.5},children:a.children}),h2:a=>(0,d.jsx)(g.default,{variant:"h6",sx:{mt:2,mb:.5},children:a.children}),h3:a=>(0,d.jsx)(g.default,{variant:"subtitle1",sx:{mt:1.5,mb:.5},children:a.children}),h4:a=>(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:1.5,mb:.5},children:a.children}),h5:a=>(0,d.jsx)(g.default,{variant:"body1",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),h6:a=>(0,d.jsx)(g.default,{variant:"body2",sx:{mt:1,mb:.5,fontWeight:"bold"},children:a.children}),ul:a=>(0,d.jsx)(h.default,{component:"ul",sx:{pl:2,mb:1},children:a.children}),ol:a=>(0,d.jsx)(h.default,{component:"ol",sx:{pl:2,mb:1},children:a.children}),li:a=>(0,d.jsx)(h.default,{component:"li",sx:{mb:.5,whiteSpace:"pre-line"},children:a.children}),a:a=>(0,d.jsx)(g.default,{component:"a",sx:{color:"primary.main"},href:a.href,children:a.children}),blockquote:a=>(0,d.jsx)(h.default,{component:"blockquote",sx:{borderLeft:"4px solid",borderColor:"divider",pl:2,py:.5,my:1,bgcolor:"action.hover",borderRadius:"4px"},children:a.children}),code:({node:a,className:b,children:c,...e})=>/language-(\w+)/.exec(b||"")||b?(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1.5,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.875rem",my:1,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:c}):(0,d.jsx)(g.default,{component:"code",sx:{bgcolor:"action.hover",px:.5,py:.25,borderRadius:"4px",fontFamily:"monospace",wordBreak:"break-all"},children:c})},ad=({content:a,showRaw:b})=>b?(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",maxHeight:"300px"},children:"string"==typeof a?a:"[Invalid tool content]"}):"string"!=typeof a?(0,d.jsx)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[Invalid tool content]"}):(0,d.jsx)(h.default,{sx:{width:"100%",minWidth:0},children:(()=>{try{let b=JSON.parse(a);if(b&&Array.isArray(b.content))return(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:b.content.map((a,b)=>"text"===a.type?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):"image"===a.type&&a.data&&a.mimeType?(0,d.jsx)("img",{src:`data:${a.mimeType};base64,${a.data}`,alt:`Tool Result Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px",marginTop:"8px"}},b):"audio"===a.type&&a.data&&a.mimeType?(0,d.jsx)("audio",{controls:!0,src:`data:${a.mimeType};base64,${a.data}`,style:{width:"100%",marginTop:"8px"},children:"Your browser does not support the audio element."},b):(0,d.jsx)(h.default,{component:"pre",sx:{whiteSpace:"pre-wrap",wordBreak:"break-all",fontSize:"0.8rem",p:1,borderRadius:1,border:1,borderColor:a=>a.palette.divider,bgcolor:"action.hover",color:a=>a.palette.text.primary,overflow:"auto",mt:1},children:`Unsupported content type: ${a.type}
|
|
2
|
-
${JSON.stringify(a,null,2)}`},b))});return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:`\`\`\`json
|
|
3
|
-
${JSON.stringify(b,null,2)}
|
|
4
|
-
\`\`\``})}catch(b){return(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a})}})()}),ae=({pairs:a,messageId:b,onAppMessage:c,onUpdateModelContext:o,onRegisterAppTeardown:p,onOpenInCanvas:q})=>{let[r,s]=(0,e.useState)(null),[t,u]=(0,e.useState)({}),v=(a,c)=>a.toolCall.id||`tc-${b}-${c}`;return(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",color:"primary.main",mb:1},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.default,{variant:"body2",children:1===a.length?"The assistant used a tool":`The assistant used ${a.length} tools`})]}),(0,d.jsx)(h.default,{sx:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:.5},children:a.map((a,b)=>{let c=v(a,b),e=function(a){if(!a)return"pending";if("string"==typeof a.content)try{let b=JSON.parse(a.content);if(b&&(!0===b.isError||null!=b.error))return"error"}catch{}return"done"}(a.result),g=r===c;return(0,d.jsxs)(f().Fragment,{children:[b>0&&(0,d.jsx)(h.default,{sx:{width:14,height:"2px",bgcolor:"divider",flexShrink:0}}),(0,d.jsx)(j.A,{title:g?"Hide call & result":"Show call & result",children:(0,d.jsx)(k.A,{icon:function(a){return"pending"===a?(0,d.jsx)(i.default,{size:14,thickness:6}):"error"===a?(0,d.jsx)(S.A,{fontSize:"small"}):(0,d.jsx)(R.A,{fontSize:"small"})}(e),label:(0,X.yo)(a.toolCall.function.name),size:"small",clickable:!0,variant:g?"filled":"outlined",color:"error"===e?"error":"pending"===e?"default":"primary",onClick:()=>s(g?null:c),sx:{maxWidth:"100%"}})})]},c)})}),a.map((a,b)=>{let e=v(a,b),f=a.toolCall.function.arguments;try{f=JSON.stringify(JSON.parse(a.toolCall.function.arguments),null,2)}catch(a){}let j=!!t[e];return(0,d.jsx)(l.A,{in:r===e,children:(0,d.jsxs)(h.default,{sx:{mt:1,p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.03)"},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:.5,color:"primary.main"}}),(0,d.jsx)(g.default,{variant:"caption",sx:{fontWeight:"bold"},children:"Parameters"}),(0,d.jsx)(k.A,{label:`ID: ${a.toolCall.id?a.toolCall.id.substring(0,8):"N/A"}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]}),(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:f}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mt:1,mb:.5},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:.5,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"caption",sx:{fontWeight:"bold"},children:"Result"}),a.result&&(0,d.jsx)(m.A,{control:(0,d.jsx)(n.A,{size:"small",checked:j,onChange:a=>u(b=>({...b,[e]:a.target.checked}))}),label:"Raw",sx:{ml:"auto",mr:0,"& .MuiTypography-root":{fontSize:"0.75rem"}}})]}),a.result?(0,d.jsx)(ad,{content:a.result.content,showRaw:j}):(0,d.jsxs)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(i.default,{size:14,thickness:6})," Waiting for the tool to respond…"]}),a.result?.ui?.uri&&a.result.ui.serverName&&(0,d.jsx)($.Ay,{serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,toolResultContent:"string"==typeof a.result.content?a.result.content:void 0,toolCancelledReason:a.result.ui.cancelledReason,toolIsError:a.result.ui.isError,onAppMessage:c,onUpdateModelContext:o,onRegisterTeardown:p,teardownRegistrationKey:`${a.result.ui.serverName}::${a.result.ui.uri}::${e}`,onRequestDock:q?()=>q({serverName:a.result.ui.serverName,uri:a.result.ui.uri,toolName:a.result.ui.toolName??a.toolCall.function.name,toolArgs:a.toolCall.function.arguments,resultContent:"string"==typeof a.result.content?a.result.content:void 0,cancelledReason:a.result.ui.cancelledReason,isError:a.result.ui.isError}):void 0})]})},e)})]})},af=f().memo(function({message:a,nodeLabel:b,availableNodes:c,showRaw:e,toolCallPairs:f,onAppMessage:i,onUpdateModelContext:l,onRegisterAppTeardown:t,onOpenInCanvas:u,hoistedHandoffs:v,isBeingEdited:w,onMenuOpen:x,onToggleRaw:y}){var z;let A,B=a.depth??0;return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",alignItems:"user"===a.role?"flex-end":"flex-start",opacity:a.disabled?.5:1,...B>0&&{pl:3*B,borderLeft:"2px solid",borderColor:"divider",ml:1}},children:[(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",mb:.5},children:[(0,d.jsxs)(g.default,{variant:"caption",color:"text.secondary",sx:{mr:1},children:["user"===a.role?"You":"assistant"===a.role?"Assistant":"tool"===a.role?"Tool":"System"," • ","number"!=typeof(z=a.timestamp)||isNaN(z)?(_.warn("formatTime received invalid timestamp:",z),"Invalid Date"):new Date(z).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})]}),a.processNodeId&&(0,d.jsx)(j.A,{title:`${b?`${b} — `:""}Process Node ID: ${a.processNodeId}`,children:(0,d.jsx)(k.A,{label:`Node: ${b||`${a.processNodeId.substring(0,6)}...`}`,size:"small",color:"primary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),B>0&&(0,d.jsx)(j.A,{title:`Nested subflow step (depth ${B})`,children:(0,d.jsx)(k.A,{label:"Subflow step",size:"small",color:"secondary",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),a.disabled&&(0,d.jsx)(k.A,{label:"Disabled",size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem"}}),a.usage&&(0,d.jsx)(j.A,{title:`${a.usage.promptTokens.toLocaleString()} prompt + ${a.usage.completionTokens.toLocaleString()} completion tokens (provider-reported)`,children:(0,d.jsx)(k.A,{label:`${(A=a.usage.totalTokens)>=1e3?`${(A/1e3).toFixed(A>=1e5?0:1)}k`:`${A}`} tok`,size:"small",color:"default",variant:"outlined",sx:{height:20,fontSize:"0.7rem",mr:1}})}),(0,d.jsx)(o.A,{size:"small",onClick:b=>x(b,a.id),sx:{ml:1},children:(0,d.jsx)(J.A,{fontSize:"small"})})]}),(0,d.jsxs)(p.A,{elevation:1,sx:{p:2,maxWidth:"75vw",borderRadius:2,bgcolor:"user"===a.role?"primary.light":"assistant"===a.role||"tool"===a.role?"background.paper":"info.light",color:"user"===a.role?"primary.contrastText":"assistant"===a.role||"tool"===a.role?"text.primary":"info.contrastText",position:"relative",borderLeft:"tool"===a.role?"4px solid":"none",borderColor:"tool"===a.role?"grey.400":"transparent",opacity:w?.55:1,outline:w?"2px dashed":"none",outlineColor:"warning.main",overflowWrap:"break-word",wordBreak:"break-word",overflow:"hidden"},children:[(0,d.jsxs)(d.Fragment,{children:["tool"!==a.role&&"string"==typeof a.content&&(0,d.jsx)(H.oz,{remarkPlugins:[I.A],components:ac,children:a.content}),"tool"!==a.role&&Array.isArray(a.content)&&(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1},children:a.content.map((a,b)=>a?.type==="text"?(0,d.jsx)(H.oz,{remarkPlugins:[I.A],children:a.text},b):a?.type==="image_url"&&a.image_url?.url?(0,d.jsx)("img",{src:a.image_url.url,alt:`Image ${b+1}`,style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}},b):null)}),"tool"!==a.role&&"string"!=typeof a.content&&!Array.isArray(a.content)&&!aa(a)&&(0,d.jsx)(g.default,{variant:"body2",fontStyle:"italic",color:"text.secondary",children:"[No text content]"})]}),(()=>{let b=[...aa(a)?a.tool_calls.filter(a=>{var b;return!!(b=a.function.name)&&(b.startsWith(Y.n9)||"handoff"===b)}):[],...v??[]];return(0,d.jsx)(h.default,{sx:{mt:1,display:"flex",flexWrap:"wrap",gap:.5},children:b.map((b,e)=>(0,d.jsx)(k.A,{size:"small",variant:"outlined",color:"secondary",icon:(0,d.jsx)(W.A,{fontSize:"small"}),label:`Handoff → ${function(a,b){let c=a.startsWith(Y.n9)?a.slice(Y.n9.length):a,d=c.replace(/_\d+$/,""),e=b.find(a=>{let b=(0,Y.RN)(a.label);return b===c||b===d});return e?.label?e.label:d.split("_").filter(Boolean).map(a=>a.charAt(0).toUpperCase()+a.slice(1)).join(" ")||"target node"}(b.function.name,c)}`,sx:{maxWidth:"100%",fontWeight:500}},b.id||`handoff-${a.id}-${e}`))})})(),f&&f.length>0&&(0,d.jsx)(ae,{pairs:f,messageId:a.id,onAppMessage:i,onUpdateModelContext:l,onRegisterAppTeardown:t,onOpenInCanvas:u}),"tool"===a.role&&a.tool_call_id&&!ab(a)&&(0,d.jsxs)(h.default,{children:[(0,d.jsxs)(g.default,{variant:"body2",sx:{display:"flex",alignItems:"center",color:"text.secondary",mb:1},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1}}),"The tool responded to the assistant"]}),(0,d.jsxs)(q.A,{defaultExpanded:!1,sx:{mb:.5,"&:before":{display:"none"},boxShadow:"none",bgcolor:"rgba(0, 0, 0, 0.02)"},children:[(0,d.jsx)(r.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center"},children:[(0,d.jsx)(Q.A,{fontSize:"small",sx:{mr:1,color:"text.secondary"}}),(0,d.jsx)(g.default,{variant:"subtitle2",children:"Tool Result"}),(0,d.jsx)(k.A,{label:`ID: ${a.tool_call_id.substring(0,8)}...`,size:"small",color:"default",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}}),(0,d.jsx)(m.A,{control:(0,d.jsx)(n.A,{size:"small",checked:e,onChange:b=>y(a.id,b.target.checked),onClick:a=>a.stopPropagation()}),label:"Raw",sx:{mr:1,ml:"auto","& .MuiTypography-root":{fontSize:"0.75rem"}},onClick:a=>a.stopPropagation()})]})}),(0,d.jsx)(s.A,{sx:{pt:0,pb:1,overflow:"hidden"},children:(0,d.jsx)(ad,{content:a.content,showRaw:e})})]})]}),a.attachments&&a.attachments.length>0&&(0,d.jsxs)(h.default,{sx:{mt:1,pt:1,borderTop:"1px solid",borderColor:"divider"},children:[(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:.5},children:"Attachments:"}),a.attachments.map(a=>"image"===a.type?(0,d.jsx)(h.default,{sx:{mb:.5},children:(0,d.jsx)("img",{src:a.content,alt:a.originalName||"image attachment",style:{maxWidth:"100%",height:"auto",borderRadius:"4px"}})},a.id):(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",p:1,borderRadius:1,bgcolor:"rgba(0, 0, 0, 0.04)",mb:.5},children:["document"===a.type?(0,d.jsx)(M.A,{fontSize:"small",sx:{mr:1}}):(0,d.jsx)(N.A,{fontSize:"small",sx:{mr:1}}),(0,d.jsx)(g.default,{variant:"caption",sx:{wordBreak:"break-all"},children:a.originalName||`${a.type} attachment`})]},a.id))]})]})]})}),ag=({elicitation:a,onSubmit:b,onCancel:c})=>{let{elicitationId:f,message:i,requestedSchema:j}=a,k=j?.properties??{},l=Object.keys(k),[n,o]=(0,e.useState)(()=>{let a={};for(let b of l){let c=k[b];void 0!==c.default?a[b]=c.default:"boolean"===c.type?a[b]=!1:"number"===c.type||"integer"===c.type?a[b]=0:a[b]=""}return a}),q=(a,b)=>{o(c=>({...c,[a]:b}))};return(0,d.jsxs)(p.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.default,{variant:"h6",sx:{mb:1},children:"Server needs more information"}),(0,d.jsx)(g.default,{variant:"body2",sx:{mb:2},children:i}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:1.5},children:l.map(a=>{let b=k[a],c=b.title||a,e=n[a];if("boolean"===b.type)return(0,d.jsx)(m.A,{control:(0,d.jsx)(t.A,{checked:!!e,onChange:b=>q(a,b.target.checked),size:"small"}),label:c},a);if(b.enum&&b.enum.length>0)return(0,d.jsxs)(u.A,{size:"small",sx:{minWidth:200},children:[(0,d.jsx)(v.A,{children:c}),(0,d.jsx)(w.A,{label:c,value:String(e??""),onChange:b=>q(a,b.target.value),children:b.enum.map((a,c)=>(0,d.jsx)(x.A,{value:a,children:b.enumNames?.[c]||a},a))}),b.description&&(0,d.jsx)(y.A,{children:b.description})]},a);let f="number"===b.type||"integer"===b.type;return(0,d.jsx)(z.A,{size:"small",label:c,type:f?"number":"text",value:String(e??""),helperText:b.description,inputProps:{minLength:b.minLength,maxLength:b.maxLength,min:b.minimum,max:b.maximum},onChange:b=>{if(f){let c=parseFloat(b.target.value);q(a,isNaN(c)?0:c)}else q(a,b.target.value)}},a)})}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(A.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Cancel"}),(0,d.jsx)(A.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,n)},disabled:!b,children:"Submit"})]})]})},ah="Type your own answer",ai=({question:a,onAnswer:b,onDecline:c})=>{let{questionId:f,questions:i}=a,[j,k]=(0,e.useState)(()=>i.map(()=>[])),[l,n]=(0,e.useState)(()=>i.map(()=>"")),o=()=>i.map((a,b)=>(j[b]??[]).map(a=>a===ah?l[b].trim():a).filter(a=>a.length>0)),q=i.every((a,b)=>(o()[b]??[]).length>0);return(0,d.jsxs)(p.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"info.light",border:"1px solid",borderColor:"info.main",borderRadius:2},children:[(0,d.jsx)(g.default,{variant:"h6",sx:{mb:1},children:"The assistant is asking"}),(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:i.map((a,b)=>(0,d.jsxs)(u.A,{component:"fieldset",sx:{display:"flex"},children:[(0,d.jsx)(B.A,{sx:{mb:.5},children:a.prompt}),a.multiple?(0,d.jsx)(h.default,{sx:{display:"flex",flexDirection:"column"},children:a.options.map(a=>(0,d.jsx)(m.A,{control:(0,d.jsx)(t.A,{size:"small",checked:(j[b]??[]).includes(a),onChange:()=>((a,b)=>{k(c=>{let d=c.map(a=>[...a]),e=d[a],f=e.indexOf(b);return f>=0?e.splice(f,1):e.push(b),d})})(b,a)}),label:a},a))}):(0,d.jsx)(C.A,{value:(j[b]??[])[0]??"",onChange:a=>{var c;return c=a.target.value,void k(a=>{let d=a.map(a=>[...a]);return d[b]=[c],d})},children:a.options.map(a=>(0,d.jsx)(m.A,{value:a,control:(0,d.jsx)(D.A,{size:"small"}),label:a},a))}),(j[b]??[]).includes(ah)&&(0,d.jsx)(z.A,{size:"small",sx:{mt:1},placeholder:"Your answer…",value:l[b],onChange:a=>n(c=>{let d=[...c];return d[b]=a.target.value,d})})]},b))}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:2},children:[(0,d.jsx)(A.A,{variant:"outlined",color:"inherit",size:"small",onClick:()=>{c&&c(f)},disabled:!c,children:"Decline"}),(0,d.jsx)(A.A,{variant:"contained",color:"primary",size:"small",onClick:()=>{b&&b(f,o())},disabled:!b||!q,children:"Answer"})]})]})},aj=({messages:a,pendingToolCalls:b,pendingElicitation:c,availableNodes:j=[],conversationId:l,editingMessageId:m,onToggleDisabled:n,onSplitConversation:o,onBeginEditMessage:t,onApproveToolCall:u,onRejectToolCall:v,onSubmitElicitation:w,onCancelElicitation:y,pendingQuestion:B,onAnswerQuestion:C,onDeclineQuestion:D,onAppMessage:H,onUpdateModelContext:I,onRegisterAppTeardown:J,onOpenInCanvas:M,queuedMessages:N=[],queueHoldReason:Q=null})=>{let[R,S]=(0,e.useState)({}),[W,Y]=(0,e.useState)(50);(0,e.useEffect)(()=>{Y(50)},[l]);let $=Math.max(0,(Array.isArray(a)?a.length:0)-W),aa=(0,e.useMemo)(()=>Array.isArray(a)?$>0?a.slice($):a:[],[a,$]),{pairsByAnchorId:ac,handoffsByAnchorId:ad,consumedToolCallIds:ae,groups:ah}=(0,e.useMemo)(()=>(function(a){let b=new Map,c=new Map,d=new Set,e=new Set,f=new Map,g=[];if(!Array.isArray(a))return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g};let h=new Map;for(let b of a)"tool"===b.role&&"string"==typeof b.tool_call_id&&b.tool_call_id&&!h.has(b.tool_call_id)&&h.set(b.tool_call_id,b);let i=a=>{let d=f.get(a);return d||(d={anchorId:a,memberIds:[a],hoistedIds:[]},f.set(a,d),g.push(d),b.set(a,[]),c.set(a,[])),d},j=null;for(let f of a){if("user"===f.role||"system"===f.role){j=null;continue}if("assistant"!==f.role)continue;let a=Array.isArray(f.tool_calls)?f.tool_calls:[],g=[],k=[];for(let b of a){if("function"!==b.type)continue;if(Z(b.function?.name)){k.push(b);continue}let a=b.id,c=a?h.get(a):void 0;a&&e.add(a),g.push({toolCall:b,result:c})}let l=function(a){let b=a.content;return"string"==typeof b?b.trim().length>0:!!Array.isArray(b)&&b.some(a=>!!a&&"object"==typeof a&&("text"===a.type?"string"==typeof a.text&&a.text.trim().length>0:"image_url"===a.type?!!a.image_url?.url:"input_audio"===a.type&&!!a.input_audio?.data))}(f),m=g.length>0||k.length>0;if(l){j=f.id,m&&(i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k));continue}if(m)if(j){let a=i(j);b.get(j).push(...g),c.get(j).push(...k),a.memberIds.push(f.id),a.hoistedIds.push(f.id),d.add(f.id)}else j=f.id,i(f.id),b.get(f.id).push(...g),c.get(f.id).push(...k)}return{pairsByAnchorId:b,handoffsByAnchorId:c,hoistedAssistantIds:d,consumedToolCallIds:e,groups:g}})(a),[a]),aj=(0,e.useMemo)(()=>(function(a){let b=new Set;if(!Array.isArray(a))return b;for(let c of a){if("assistant"!==c.role)continue;let a=c.tool_calls;if(Array.isArray(a))for(let c of a)"function"===c.type&&Z(c.function?.name)&&"string"==typeof c.id&&c.id&&b.add(c.id)}return b})(a),[a]),ak=(0,e.useMemo)(()=>new Set(aa.map(a=>a.id)),[aa]),{renderPairsById:al,renderHandoffsById:am,suppressedIds:an}=(0,e.useMemo)(()=>{let a=new Map,b=new Map,c=new Set;for(let d of ah){let e=ac.get(d.anchorId)??[],f=ad.get(d.anchorId)??[],g=d.memberIds.find(a=>ak.has(a))??d.anchorId;for(let h of(e.length>0&&a.set(g,e),f.length>0&&b.set(g,f),d.hoistedIds))h!==g&&c.add(h)}return{renderPairsById:a,renderHandoffsById:b,suppressedIds:c}},[ah,ac,ad,ak]),[ao,ap]=f().useState(null),[aq,ar]=f().useState(null),[as,at]=f().useState({}),au=(0,e.useCallback)((a,b)=>{_.debug(`handleMenuOpen called with messageId: ${b}`),ap(a.currentTarget),ar(b)},[]),av=(0,e.useCallback)((a,b)=>{at(c=>({...c,[a]:b}))},[]),aw=()=>{ap(null),ar(null)},ax=()=>{aq&&(t?.(aq),aw())},ay=(0,e.useMemo)(()=>{let a=new Map;for(let b of j)a.set(b.id,b.label);return a},[j]),az=(0,e.useMemo)(()=>aq&&a.find(a=>a.id===aq)||null,[aq,a]);return(0,d.jsxs)(h.default,{sx:{display:"flex",flexDirection:"column",gap:2},children:[$>0&&(0,d.jsx)(h.default,{sx:{display:"flex",justifyContent:"center"},children:(0,d.jsxs)(A.A,{size:"small",variant:"outlined",onClick:()=>Y(a=>a+200),children:["Show earlier messages (",$," more)"]})}),aa.map((a,b)=>ab(a)||"tool"===a.role&&"string"==typeof a.tool_call_id&&aj.has(a.tool_call_id)||"tool"===a.role&&"string"==typeof a.tool_call_id&&ae.has(a.tool_call_id)||an.has(a.id)?null:(0,d.jsx)(af,{message:a,nodeLabel:a.processNodeId?ay.get(a.processNodeId):void 0,availableNodes:j,showRaw:!!as[a.id],toolCallPairs:al.get(a.id),onAppMessage:H,onUpdateModelContext:I,onRegisterAppTeardown:J,onOpenInCanvas:M,hoistedHandoffs:am.get(a.id),isBeingEdited:!!m&&a.id===m,onMenuOpen:au,onToggleRaw:av},a.id||`msg-${$+b}`)),N.map(a=>(0,d.jsx)(h.default,{"data-testid":"queued-bubble",sx:{display:"flex",justifyContent:"flex-end",opacity:.6},children:(0,d.jsxs)(h.default,{sx:{maxWidth:"70%",bgcolor:"primary.light",color:"primary.contrastText",borderRadius:2,px:2,py:1,display:"flex",flexDirection:"column",gap:.5},children:[(0,d.jsx)(g.default,{variant:"body2",sx:{whiteSpace:"pre-wrap",wordBreak:"break-word"},children:a.content||(a.attachments.length>0?`${a.attachments.length} attachment(s)`:"")}),(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",gap:.5,justifyContent:"flex-end"},children:[!Q&&(0,d.jsx)(i.default,{size:10,color:"inherit"}),(0,d.jsx)(g.default,{variant:"caption",sx:{opacity:.85},children:Q??"Queued"})]})]})},a.id)),(0,d.jsxs)(E.A,{anchorEl:ao,open:!!ao,onClose:aw,children:[az&&(()=>{_.debug("Entering menu item rendering logic",{activeMessageId:aq}),_.debug("Active message object for menu:",az),_.debug("Active message role for menu:",az?.role);try{if("user"===az.role&&"string"==typeof az.content&&t)return(0,d.jsxs)(x.A,{onClick:ax,children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(T.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Edit Message"})]});return null}catch(a){return _.error("Error rendering Edit Message menu item",{error:a}),null}})(),(0,d.jsxs)(x.A,{onClick:()=>{aq&&(n(aq),aw())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(K.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:az?.disabled?"Enable Message":"Disable Message"})]}),(0,d.jsxs)(x.A,{onClick:()=>{aq&&(o(aq),aw())},children:[(0,d.jsx)(F.A,{children:(0,d.jsx)(L.A,{fontSize:"small"})}),(0,d.jsx)(G.A,{children:"Split Conversation Here"})]})]}),c&&(0,d.jsx)(ag,{elicitation:c,onSubmit:w,onCancel:y}),B&&(0,d.jsx)(ai,{question:B,onAnswer:C,onDecline:D}),b&&b.length>0&&(0,d.jsxs)(p.A,{elevation:2,sx:{p:2,mt:2,bgcolor:"warning.light",border:"1px solid",borderColor:"warning.main",borderRadius:2},children:[(0,d.jsxs)(g.default,{variant:"h6",sx:{mb:1,display:"flex",alignItems:"center"},children:[(0,d.jsx)(P.A,{sx:{mr:1}})," Tool Approval Required"]}),(0,d.jsx)(g.default,{variant:"body2",sx:{mb:2},children:"The assistant wants to use the following tool(s). Please approve or reject each request."}),b.map((a,b)=>{let c=(0,X.yo)(a.function.name),e=a.function.arguments;try{let b=JSON.parse(a.function.arguments);e=JSON.stringify(b,null,2)}catch(a){}return(0,d.jsxs)(q.A,{defaultExpanded:!0,sx:{mb:1,"&:before":{display:"none"},boxShadow:1},children:[(0,d.jsx)(r.A,{expandIcon:(0,d.jsx)(O.A,{}),children:(0,d.jsxs)(h.default,{sx:{display:"flex",alignItems:"center",width:"100%"},children:[(0,d.jsx)(P.A,{fontSize:"small",sx:{mr:1,color:"primary.main"}}),(0,d.jsx)(g.default,{variant:"subtitle2",sx:{fontWeight:"bold",flexGrow:1},children:c}),(0,d.jsx)(k.A,{label:`ID: ${a.id?a.id.substring(0,8):"N/A"}...`,size:"small",variant:"outlined",sx:{ml:1,height:20,fontSize:"0.7rem"}})]})}),(0,d.jsxs)(s.A,{sx:{pt:0},children:[(0,d.jsx)(h.default,{component:"pre",sx:{bgcolor:"action.hover",p:1,borderRadius:"4px",overflowX:"auto",fontFamily:"monospace",fontSize:"0.75rem",my:.5,maxHeight:"150px",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e}),(0,d.jsx)(z.A,{label:"Rejection reason (optional)",placeholder:"e.g. write to dist/ instead",value:R[a.id]??"",onChange:b=>S(c=>({...c,[a.id]:b.target.value})),multiline:!0,minRows:1,maxRows:4,fullWidth:!0,size:"small",sx:{mt:1,mb:1}}),(0,d.jsxs)(h.default,{sx:{display:"flex",justifyContent:"flex-end",gap:1,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(A.A,{variant:"outlined",color:"error",size:"small",startIcon:(0,d.jsx)(V.A,{}),onClick:()=>v&&v(a.id,!1,R[a.id]?.trim()||void 0),disabled:!v,children:"Reject"}),(0,d.jsx)(A.A,{variant:"outlined",color:"error",size:"small",onClick:()=>v&&v(a.id,!0),disabled:!v,title:"Always deny this tool — saves a rule so future calls are auto-denied",children:"Always Deny"}),(0,d.jsx)(A.A,{variant:"outlined",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>u&&u(a.id,!0),disabled:!u,title:"Always allow this tool — saves a rule so future calls are auto-approved",children:"Always Allow"}),(0,d.jsx)(A.A,{variant:"contained",color:"success",size:"small",startIcon:(0,d.jsx)(U.A,{}),onClick:()=>u&&u(a.id),disabled:!u,children:"Approve"})]})]})]},a.id||`ptc-${b}`)})]})]})}},97004:(a,b,c)=>{c.d(b,{R:()=>l,A:()=>r});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839);function j(a){return a===g.yX.Left||a===g.yX.Right?"h":"v"}var k=c(29237);let l="flowEdgeWaypoint",m={x:16,y:-16},n=(0,h.Ay)("button")(({theme:a})=>({background:a.palette.background.paper,border:`1px solid ${a.palette.divider}`,cursor:"pointer",borderRadius:"50%",fontSize:"10px",width:"20px",height:"20px",display:"flex",justifyContent:"center",alignItems:"center",color:a.palette.text.secondary,boxShadow:"dark"===a.palette.mode?"0 2px 4px rgba(0,0,0,0.3)":"0 2px 4px rgba(0,0,0,0.1)","&:hover":{background:a.palette.error.main,borderColor:a.palette.error.main,color:a.palette.error.contrastText}})),o=(0,h.Ay)(f.tE)({"&&.animated":{strokeDasharray:5,animation:"flowPathAnimation 500ms infinite linear"},"&&.animated-both":{strokeDasharray:5,animation:"flowPathAnimation 750ms infinite linear alternate"},"@keyframes flowPathAnimation":{"0%":{strokeDashoffset:10},"100%":{strokeDashoffset:0}}}),p="#009688",q="#4DB6AC",r=({variant:a,id:b,source:c,target:h,sourceHandleId:r,targetHandleId:s,sourceX:t,sourceY:u,targetX:v,targetY:w,sourcePosition:x,targetPosition:y,style:z={},markerEnd:A,markerStart:B,data:C,selected:D})=>{let E,F,G=(0,i.A)(),{deleteElements:H,screenToFlowPosition:I,getNode:J}=(0,f.VH)(),[K,L]=(0,e.useState)(!1),[M,N]=(0,e.useState)(null),O=(0,e.useRef)(null),P=(0,e.useRef)(!1),Q="standard"===a&&C?.condition?(0,k.P2)(C.condition):"",R=a=>!!a&&a.includes("process")&&a.includes("resource"),S="";if("resource"===a){let a=J(c)?.type,b=J(h)?.type;"resource"===a&&"process"===b?S="consume":"process"===a&&"resource"===b||R(r)?S="produce":R(s)&&(S="consume")}let T=C?.waypoints??(C?.waypoint?[C.waypoint]:[]),U=M??T,V="standard"===a&&!!C?.bidirectional,W="mcp"===a||"resource"===a,X=x||(W?g.yX.Left:g.yX.Bottom),Y=y||(W?g.yX.Right:g.yX.Top),Z=null;if(U.length>0)E=(Z=function(a,b,c,d,e,f=8){let g=[a,...e,c],h=[a],i=[],j=b,k=(a,b)=>{let c;c=h[h.length-1],.01>Math.abs(c.x-a.x)&&.01>Math.abs(c.y-a.y)||(h.push(a),i.push(b))};for(let a=1;a<g.length;a++){let b=h[h.length-1],c=g[a],e=a-1;if(a===g.length-1){if("v"===d)if("h"===j)k({x:c.x,y:b.y},e);else{let a=(b.y+c.y)/2;k({x:b.x,y:a},e),k({x:c.x,y:a},e)}else if("v"===j)k({x:b.x,y:c.y},e);else{let a=(b.x+c.x)/2;k({x:a,y:b.y},e),k({x:a,y:c.y},e)}k(c,e)}else k("v"===j?{x:b.x,y:c.y}:{x:c.x,y:b.y},e),k(c,e),j="v"===j?"h":"v"}!function(a,b){for(let c=1;c<a.length-1;c++){let d=a[c-1],e=a[c],f=a[c+1],g=.01>Math.abs(d.x-e.x)&&.01>Math.abs(f.x-e.x)&&(e.y-d.y)*(f.y-e.y)<0,h=.01>Math.abs(d.y-e.y)&&.01>Math.abs(f.y-e.y)&&(e.x-d.x)*(f.x-e.x)<0;if(g||h){if(g){let g=(a[c-2]?.x??e.x-1)<=e.x,h=g?e.x-12:e.x+12,i=g?e.x+12:e.x-12,j=b[c-1];a.splice(c-1,3,{x:h,y:d.y},{x:h,y:e.y},{x:i,y:e.y},{x:i,y:f.y}),b.splice(c-1,2,j,j,j)}else{let g=(a[c-2]?.y??e.y-1)<=e.y,h=g?e.y-12:e.y+12,i=g?e.y+12:e.y-12,j=b[c-1];a.splice(c-1,3,{x:d.x,y:h},{x:e.x,y:h},{x:e.x,y:i},{x:f.x,y:i}),b.splice(c-1,2,j,j,j)}c++}}}(h,i);let l=[];for(let a=0;a<h.length-1;a++)l.push({a:h[a],b:h[a+1],gap:i[a]});return{d:function(a,b){if(0===a.length)return"";let c=`M ${a[0].x},${a[0].y}`;for(let d=1;d<a.length-1;d++){let e=a[d-1],f=a[d],g=a[d+1],h=Math.hypot(f.x-e.x,f.y-e.y),i=Math.hypot(g.x-f.x,g.y-f.y),j=Math.min(b,h/2,i/2);if(j<.5){c+=` L ${f.x},${f.y}`;continue}let k={x:f.x-(f.x-e.x)/h*j,y:f.y-(f.y-e.y)/h*j},l={x:f.x+(g.x-f.x)/i*j,y:f.y+(g.y-f.y)/i*j};c+=` L ${k.x},${k.y} Q ${f.x},${f.y} ${l.x},${l.y}`}let d=a[a.length-1];return c+` L ${d.x},${d.y}`}(h,f),points:h,segments:l,midpoint:function(a,b){let c=0;for(let b=0;b<a.length-1;b++)c+=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(0===c)return a[0];let d=.5*c;for(let b=0;b<a.length-1;b++){let c=Math.hypot(a[b+1].x-a[b].x,a[b+1].y-a[b].y);if(d<=c){let e=0===c?0:d/c;return{x:a[b].x+(a[b+1].x-a[b].x)*e,y:a[b].y+(a[b+1].y-a[b].y)*e}}d-=c}return a[a.length-1]}(h,.5)}}({x:t,y:u},j(X),{x:v,y:w},j(Y),U,16)).d,F=Z.midpoint;else{let[a,b,c]=(0,g.oN)({sourceX:t,sourceY:u,sourcePosition:X,targetX:v,targetY:w,targetPosition:Y,borderRadius:16});E=a,F={x:b,y:c}}let $=W?"":V?"animated-both":C?.animated!==!1?"animated":"",_={...z,strokeWidth:D?3:2,stroke:"mcp"===a?D?G.palette.info.light:G.palette.info.main:"resource"===a?D?q:p:D?G.palette.primary.main:G.palette.text.secondary,..."resource"===a?{strokeDasharray:"6 4"}:{},...$?{animationDuration:`${Math.round((V?750:500)*(a=>{let b=0;for(let c=0;c<a.length;c++)b=31*b+a.charCodeAt(c)|0;return .9+Math.abs(b)%1e3/1e3*.2})(b))}ms`}:{}},aa=a=>{document.dispatchEvent(new CustomEvent(l,{detail:{edgeId:b,waypoints:a&&a.length>0?a:null}}))},ab=a=>{if(0!==a.button)return;let b=I({x:a.clientX,y:a.clientY}),c=Z?function(a,b){let c=0,d=1/0;for(let e of b){let b=function(a,b,c){let d=c.x-b.x,e=c.y-b.y,f=d*d+e*e,g=0===f?0:Math.max(0,Math.min(1,((a.x-b.x)*d+(a.y-b.y)*e)/f));return Math.hypot(a.x-(b.x+d*g),a.y-(b.y+e*g))}(a,e.a,e.b);b<d&&(d=b,c=e.gap)}return c}(b,Z.segments):0,d=[...U];d.splice(c,0,b),O.current={index:c,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:d,active:!1,fromPath:!0},a.target.setPointerCapture(a.pointerId)},ac=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId)return;if(!b.active){if(4>Math.hypot(a.clientX-b.startClient.x,a.clientY-b.startClient.y))return;b.active=!0}let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),N(c)},ad=a=>{let b=O.current;if(!b||a.pointerId!==b.pointerId||(O.current=null,a.target.releasePointerCapture(a.pointerId),P.current=b.active,!b.active))return;let c=[...b.base];c[b.index]=I({x:a.clientX,y:a.clientY}),aa(c),N(null)},ae=null!==M,af=D||K||ae;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(o,{path:E,markerEnd:A,markerStart:B,style:_,id:b,className:$}),(0,d.jsx)("path",{d:E,fill:"none",stroke:"transparent",strokeWidth:20,style:{cursor:ae?"grabbing":"grab"},onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:ab,onPointerMove:ac,onPointerUp:ad}),(0,d.jsxs)(f.rV,{children:[Q&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:G.palette.info.main,color:G.palette.info.contrastText,borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:`Routing condition: ${Q}`,children:Q}),S&&(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x}px,${F.y-18}px)`,pointerEvents:"none",background:D?q:p,color:"#ffffff",borderRadius:4,padding:"1px 6px",fontSize:10,fontWeight:600,whiteSpace:"nowrap",boxShadow:G.shadows[1],zIndex:1002},className:"nodrag nopan",title:"consume"===S?"This step consumes (reads) the resource":"This step produces (writes) the resource",children:S}),af&&U.map((a,b)=>(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${a.x}px,${a.y}px)`,width:12,height:12,borderRadius:"50%",background:G.palette.primary.main,border:`2px solid ${G.palette.background.paper}`,boxShadow:G.shadows[1],cursor:"move",pointerEvents:"all",touchAction:"none",zIndex:1001},className:"nodrag nopan",title:"Drag to move; double-click to remove this bend",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),onPointerDown:a=>{0===a.button&&(a.stopPropagation(),O.current={index:b,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:[...U],active:!1,fromPath:!1},a.target.setPointerCapture(a.pointerId))},onPointerMove:ac,onPointerUp:ad,onDoubleClick:a=>{a.stopPropagation(),(a=>{let b=U.filter((b,c)=>c!==a);N(null),aa(b)})(b)}},b)),(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${F.x+m.x}px,${F.y+m.y}px)`,pointerEvents:af&&!ae?"all":"none",opacity:af&&!ae?1:0,transition:"opacity 120ms ease",zIndex:1e3},className:"nodrag nopan",onMouseEnter:()=>L(!0),onMouseLeave:()=>L(!1),children:(0,d.jsx)(n,{title:"Delete connection (drag to re-route)",style:{touchAction:"none"},onPointerDown:ab,onPointerMove:ac,onPointerUp:ad,onClick:a=>{if(a.stopPropagation(),P.current){P.current=!1;return}H({edges:[{id:b}]})},children:"\xd7"})})]})]})}},98502:(a,b,c)=>{c.d(b,{E9:()=>f,RN:()=>e,n9:()=>d});let d="handoff_to_";function e(a,b){let c=(a&&a.trim()||b&&b.trim()||"node").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"");return c.length>48&&(c=c.slice(0,48).replace(/_+$/g,"")),c||(c=b&&b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"_")||"node"),c||"node"}function f(a){let b=new Set,c=new Map;for(let f of a){if(c.has(f.id))continue;let a=e(f.label,f.type),g=`${d}${a}`;if(b.has(g)){let c=2;for(;b.has(`${d}${a}_${c}`);)c++;g=`${d}${a}_${c}`}b.add(g),c.set(f.id,g)}return c}}};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=4366,exports.ids=[4366],exports.modules={3391:(a,b,c)=>{c.d(b,{A:()=>w});var d=c(21124),e=c(38301),f=c(81637),g=c(37674),h=c(67101),i=c(43312),j=c(44079),k=c(79515),l=c(73520),m=c(95587),n=c(77028),o=c(88745),p=c(61628),q=c(19787),r=c(95803),s=c(17332),t=c(30717),u=c(32720);let v=[{value:"add",label:"A file appears"},{value:"change",label:"A file changes"},{value:"unlink",label:"A file is deleted"}],w=({config:a,onChange:b})=>{let[c,w]=(0,e.useState)(!1);return(0,d.jsxs)(f.default,{sx:{mt:1},children:[(0,d.jsx)(g.A,{fullWidth:!0,label:"Folder (or file) to watch",value:a.path,onChange:c=>b({...a,path:c.target.value}),placeholder:"e.g. C:\\Users\\me\\Documents\\inbox",margin:"normal",InputProps:{endAdornment:(0,d.jsx)(h.A,{position:"end",children:(0,d.jsx)(i.A,{title:"Browse folders (on the FLUJO machine)",children:(0,d.jsx)(j.A,{edge:"end",onClick:()=>w(!0),children:(0,d.jsx)(t.A,{})})})})}}),(0,d.jsx)(u.A,{open:c,title:"Choose what to watch",selectFiles:!0,initialPath:a.path||void 0,onClose:()=>w(!1),onSelect:c=>b({...a,path:c})}),(0,d.jsx)(g.A,{fullWidth:!0,label:"Only files matching (optional)",value:a.glob||"",onChange:c=>b({...a,glob:c.target.value||void 0}),placeholder:"e.g. *.pdf or reports/**/*.csv",helperText:"Simple patterns: * matches within a folder, ** across folders, ? one character.",margin:"normal"}),(0,d.jsx)(k.default,{variant:"subtitle2",sx:{mt:1},children:"Run when…"}),(0,d.jsx)(l.A,{row:!0,children:v.map(c=>(0,d.jsx)(m.A,{control:(0,d.jsx)(n.A,{checked:a.events.includes(c.value),onChange:d=>((c,d)=>{let e=d?[...a.events,c]:a.events.filter(a=>a!==c);b({...a,events:e})})(c.value,d.target.checked)}),label:c.label},c.value))}),(0,d.jsx)(o.A,{severity:"info",sx:{mt:1},children:"Bursts are batched: many files changing at once produce one run with all changes listed. If this flow writes into the watched folder, it will trigger itself in a loop — point its output somewhere else."}),(0,d.jsxs)(p.A,{disableGutters:!0,elevation:0,sx:{mt:1,"&:before":{display:"none"}},children:[(0,d.jsx)(q.A,{expandIcon:(0,d.jsx)(s.A,{}),sx:{px:0},children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:"Advanced"})}),(0,d.jsx)(r.A,{sx:{px:0},children:(0,d.jsx)(g.A,{label:"Quiet window (ms)",type:"number",value:a.debounceMs??2e3,onChange:c=>b({...a,debounceMs:Math.max(0,Number(c.target.value)||0)}),helperText:"How long to wait after the last change before running.",inputProps:{min:0,step:500},sx:{width:220}})})]})]})}},21704:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M10 15h5.88c.27-.31.67-.5 1.12-.5.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5c-.44 0-.84-.19-1.12-.5H11.9c-.46 2.28-2.48 4-4.9 4-2.76 0-5-2.24-5-5 0-2.42 1.72-4.44 4-4.9v2.07c-1.16.41-2 1.53-2 2.83 0 1.65 1.35 3 3 3s3-1.35 3-3zm2.5-11c1.65 0 3 1.35 3 3h2c0-2.76-2.24-5-5-5s-5 2.24-5 5c0 1.43.6 2.71 1.55 3.62l-2.35 3.9c-.68.14-1.2.75-1.2 1.48 0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5c0-.16-.02-.31-.07-.45l3.38-5.63C10.49 9.61 9.5 8.42 9.5 7c0-1.65 1.35-3 3-3m4.5 9c-.64 0-1.23.2-1.72.54l-3.05-5.07C11.53 8.35 11 7.74 11 7c0-.83.67-1.5 1.5-1.5S14 6.17 14 7c0 .15-.02.29-.06.43l2.19 3.65c.28-.05.57-.08.87-.08 2.76 0 5 2.24 5 5s-2.24 5-5 5c-1.85 0-3.47-1.01-4.33-2.5h2.67c.48.32 1.05.5 1.66.5 1.65 0 3-1.35 3-3s-1.35-3-3-3"}),"Webhook")},34413:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"m9.78 11.16-1.42 1.42c-.68-.69-1.34-1.58-1.79-2.94l1.94-.49c.32.89.77 1.5 1.27 2.01M11 6 7 2 3 6h3.02c.02.81.08 1.54.19 2.17l1.94-.49C8.08 7.2 8.03 6.63 8.02 6zm10 0-4-4-4 4h2.99c-.1 3.68-1.28 4.75-2.54 5.88-.5.44-1.01.92-1.45 1.55-.34-.49-.73-.88-1.13-1.24L9.46 13.6c.93.85 1.54 1.54 1.54 3.4v5h2v-5c0-2.02.71-2.66 1.79-3.63 1.38-1.24 3.08-2.78 3.2-7.37z"}),"AltRoute")},62185:(a,b,c)=>{c.d(b,{A:()=>v});var d=c(21124),e=c(38301),f=c(81637),g=c(82605),h=c(50062),i=c(7675),j=c(94367),k=c(37674),l=c(88745),m=c(79515),n=c(95587),o=c(77028),p=c(61628),q=c(19787),r=c(95803),s=c(17332),t=c(63654);let u=a=>String(a).padStart(2,"0"),v=({cron:a,timezone:b,onChange:c,verb:v="Runs",catchUp:w,onCatchUpChange:x})=>{let y=(0,e.useMemo)(()=>(function(a){let b=/^\*\/(\d+) \* \* \* \* \*$/.exec(a);return b?{mode:"seconds",n:Number(b[1]),time:"09:00"}:(b=/^\*\/(\d+) \* \* \* \*$/.exec(a))?{mode:"minutes",n:Number(b[1]),time:"09:00"}:(b=/^0 \*\/(\d+) \* \* \*$/.exec(a))?{mode:"hours",n:Number(b[1]),time:"09:00"}:(b=/^(\d+) (\d+) \* \* \*$/.exec(a))?{mode:"daily",n:1,time:`${u(Number(b[2]))}:${u(Number(b[1]))}`}:(b=/^(\d+) (\d+) \* \* 1-5$/.exec(a))?{mode:"weekdays",n:1,time:`${u(Number(b[2]))}:${u(Number(b[1]))}`}:{mode:"custom",n:15,time:"09:00"}})(a),[]),[z,A]=(0,e.useState)(y.mode),[B,C]=(0,e.useState)(y.n),[D,E]=(0,e.useState)(y.time),[F,G]=(0,e.useState)(a),[H,I]=(0,e.useState)(null),J=function(a,b,c,d){let[e,f]=c.split(":").map(Number);switch(a){case"seconds":return`*/${Math.max(1,Math.min(59,Math.floor(b)||1))} * * * * *`;case"minutes":return`*/${Math.max(1,Math.min(59,Math.floor(b)||1))} * * * *`;case"hours":return`0 */${Math.max(1,Math.min(23,Math.floor(b)||1))} * * *`;case"daily":return`${f||0} ${e||0} * * *`;case"weekdays":return`${f||0} ${e||0} * * 1-5`;default:return d}}(z,B,D,F);return(0,e.useEffect)(()=>{J!==a&&c({cron:J,timezone:b})},[J]),(0,e.useEffect)(()=>{let a=!1,c=setTimeout(()=>{t.P.previewSchedule(J,b).then(b=>{a||I(b)})},300);return()=>{a=!0,clearTimeout(c)}},[J,b]),(0,d.jsxs)(f.default,{children:[(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"center",mt:1},children:[(0,d.jsxs)(g.A,{sx:{minWidth:180},children:[(0,d.jsx)(h.A,{id:"schedule-preset-label",children:v}),(0,d.jsxs)(i.A,{labelId:"schedule-preset-label",label:v,value:z,onChange:a=>A(a.target.value),children:[(0,d.jsx)(j.A,{value:"seconds",children:"Every N seconds"}),(0,d.jsx)(j.A,{value:"minutes",children:"Every N minutes"}),(0,d.jsx)(j.A,{value:"hours",children:"Every N hours"}),(0,d.jsx)(j.A,{value:"daily",children:"Daily at a time"}),(0,d.jsx)(j.A,{value:"weekdays",children:"Weekdays at a time"}),(0,d.jsx)(j.A,{value:"custom",children:"Custom (cron)"})]})]}),("seconds"===z||"minutes"===z||"hours"===z)&&(0,d.jsx)(k.A,{label:"seconds"===z?"Seconds":"minutes"===z?"Minutes":"Hours",type:"number",value:B,onChange:a=>C(Number(a.target.value)),inputProps:{min:1,max:"hours"===z?23:59},sx:{width:120}}),("daily"===z||"weekdays"===z)&&(0,d.jsx)(k.A,{label:"Time",type:"time",value:D,onChange:a=>E(a.target.value),sx:{width:150},InputLabelProps:{shrink:!0}}),"custom"===z&&(0,d.jsx)(k.A,{label:"Cron pattern",value:F,onChange:a=>G(a.target.value),sx:{minWidth:220},placeholder:"*/15 * * * *"})]}),H&&!H.valid&&(0,d.jsx)(l.A,{severity:"error",sx:{mt:2},children:H.error||"This schedule is not valid."}),H&&H.valid&&H.nextRuns.length>0&&(0,d.jsxs)(m.default,{variant:"body2",color:"text.secondary",sx:{mt:2},children:["Next: ",H.nextRuns.map(a=>new Date(a).toLocaleString()).join(" \xb7 ")]}),x&&(0,d.jsx)(n.A,{sx:{mt:1,display:"flex"},control:(0,d.jsx)(o.A,{checked:!0===w,onChange:a=>x(a.target.checked)}),label:"If FLUJO was closed at a scheduled time, run once on startup"}),(0,d.jsxs)(p.A,{disableGutters:!0,elevation:0,sx:{mt:1,"&:before":{display:"none"}},children:[(0,d.jsx)(q.A,{expandIcon:(0,d.jsx)(s.A,{}),sx:{px:0},children:(0,d.jsx)(m.default,{variant:"body2",color:"text.secondary",children:"Advanced"})}),(0,d.jsx)(r.A,{sx:{px:0},children:(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(k.A,{label:"Timezone (optional)",value:b||"",onChange:a=>c({cron:J,timezone:a.target.value||void 0}),placeholder:"e.g. Europe/Berlin",helperText:"IANA timezone name. Empty = this computer's timezone.",sx:{minWidth:260}}),(0,d.jsx)(k.A,{label:"Generated cron pattern",value:J,InputProps:{readOnly:"custom"!==z},onChange:a=>{A("custom"),G(a.target.value)},helperText:"Editing switches to Custom mode.",sx:{minWidth:220}})]})})]})]})}},62350:(a,b,c)=>{c.d(b,{A:()=>f});var d=c(11801),e=c(21124);let f=(0,d.A)((0,e.jsx)("path",{d:"M19.3 16.9c.4-.7.7-1.5.7-2.4 0-2.5-2-4.5-4.5-4.5S11 12 11 14.5s2 4.5 4.5 4.5c.9 0 1.7-.3 2.4-.7l3.2 3.2 1.4-1.4zm-3.8.1c-1.4 0-2.5-1.1-2.5-2.5s1.1-2.5 2.5-2.5 2.5 1.1 2.5 2.5-1.1 2.5-2.5 2.5M12 20v2C6.48 22 2 17.52 2 12S6.48 2 12 2c4.84 0 8.87 3.44 9.8 8h-2.07c-.64-2.46-2.4-4.47-4.73-5.41V5c0 1.1-.9 2-2 2h-2v2c0 .55-.45 1-1 1H8v2h2v3H9l-4.79-4.79C4.08 10.79 4 11.38 4 12c0 4.41 3.59 8 8 8"}),"TravelExplore")},72535:(a,b,c)=>{c.d(b,{A:()=>v});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(82605),i=c(50062),j=c(7675),k=c(94367),l=c(19427),m=c(37674),n=c(73520),o=c(95587),p=c(77028),q=c(91059),r=c(88745),s=c(63654);function t(a){if(!a||!Array.isArray(a.nodes))return[];let b=[];for(let c of a.nodes){if(c?.data?.type!=="signal")continue;let a=c.data.properties?.topic;"string"==typeof a&&a.trim()&&b.push(a.trim())}return b}let u=(0,c(19815).h)("frontend/components/PlannedExecutions/FlowEventPanel"),v=({config:a,onChange:b,flows:c,currentExecutionId:v})=>{let[w,x]=(0,e.useState)([]),[y,z]=(0,e.useState)(void 0!==a.maxChainDepth||void 0!==a.minIntervalMs),A=a.source?.topic!==void 0?"topic":a.source?.executionId!==void 0?"execution":"flow",B="topic"===A,C=(0,e.useMemo)(()=>(function(a,b=10){let c=new Map;for(let b of a)b&&"string"==typeof b.id&&c.set(b.id,b);let d=new Map,e=(a,b)=>{d.has(a)||d.set(a,[]),d.get(a).push(b)};for(let d of a){if(!d||"string"!=typeof d.id)continue;let a=new Map;for(let b of t(d))a.set(b,(a.get(b)??0)+1);for(let[b,c]of a)e(b,{flowId:d.id,flowName:d.name,signalNodeCount:c,viaSubflow:!1});for(let f of function(a,b,c=10){let d=new Set,e=new Set,f=(a,g)=>{if(e.has(a)||g>c)return;e.add(a);let h=b.get(a);for(let a of t(h))d.add(a);for(let a of function(a){if(!a||!Array.isArray(a.nodes))return[];let b=[];for(let c of a.nodes){if(c?.data?.type!=="subflow")continue;let a=c.data.properties??{};if("string"==typeof a.subflowId&&a.subflowId.trim()&&b.push(a.subflowId.trim()),Array.isArray(a.parallelSubflowIds))for(let c of a.parallelSubflowIds)"string"==typeof c&&c.trim()&&b.push(c.trim())}return Array.from(new Set(b))}(h))f(a,g+1)};return f(a,0),d}(d.id,c,b))a.has(f)||e(f,{flowId:d.id,flowName:d.name,signalNodeCount:0,viaSubflow:!0})}return d})(c),[c]),D=(0,e.useMemo)(()=>{let a=new Map;for(let b of c)b?.id&&a.set(b.id,b.name);return a},[c]),E=(0,e.useMemo)(()=>{let a=new Map;for(let b of w){let c=b.execution;if(c.id===v||c.trigger?.type!=="flow-event")continue;let d=c.trigger.source?.topic;if("string"!=typeof d||!d.trim())continue;let e=d.trim();a.has(e)||a.set(e,[]),a.get(e).push({executionId:c.id,executionName:c.name,flowId:c.flowId,flowName:D.get(c.flowId)})}return a},[w,v,D]),F=(0,e.useMemo)(()=>Array.from(new Set([...C.keys(),...E.keys()])).sort((a,b)=>a.localeCompare(b)),[C,E]),G=a=>{let b=C.get(a);if(!b||0===b.length)return null;let c=Array.from(new Set(b.map(a=>(a.flowName||a.flowId)+(a.viaSubflow?" (via subflow)":""))));return`Emitted in: ${c.join(", ")}`},H=(a.source?.topic??"").trim(),I=!H||C.has(H);(0,e.useEffect)(()=>{let a=!1;return s.P.list().then(b=>{a||x(b.executions||[])}).catch(b=>{u.warn("Failed to load planned executions for source picker",b),a||x([])}),()=>{a=!0}},[]);let J=(c,d)=>{let e=new Set(a.on??[]);d?e.add(c):e.delete(c),b({...a,on:Array.from(e)})};return(0,d.jsxs)(f.default,{sx:{mt:1},children:[(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:1},children:"React to"}),(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,mt:1},children:[(0,d.jsxs)(h.A,{sx:{minWidth:180},children:[(0,d.jsx)(i.A,{id:"flow-event-source-kind",children:"Source"}),(0,d.jsxs)(j.A,{labelId:"flow-event-source-kind",label:"Source",value:A,onChange:c=>(c=>{b({...a,source:"flow"===c?{flowId:""}:"execution"===c?{executionId:""}:{topic:""}})})(c.target.value),children:[(0,d.jsx)(k.A,{value:"flow",children:"A flow (any run)"}),(0,d.jsx)(k.A,{value:"execution",children:"A planned execution"}),(0,d.jsx)(k.A,{value:"topic",children:"A signal topic"})]})]}),"topic"===A?(0,d.jsx)(h.A,{fullWidth:!0,children:(0,d.jsx)(l.A,{freeSolo:!0,autoHighlight:!0,options:F,value:a.source?.topic??"",inputValue:a.source?.topic??"",onInputChange:(c,d)=>b({...a,source:{topic:d}}),renderOption:(a,b)=>{let c=G(b),h=(a=>{let b=E.get(a);if(!b||0===b.length)return null;let c=Array.from(new Set(b.map(a=>a.flowName||a.flowId)));return`Used by ${b.length} trigger${1===b.length?"":"s"} → starts ${c.join(", ")}`})(b);return(0,e.createElement)(f.default,{component:"li",...a,key:b},(0,d.jsxs)(f.default,{sx:{display:"flex",flexDirection:"column",py:.25},children:[(0,d.jsx)(g.default,{variant:"body2",sx:{fontWeight:600},children:b}),c&&(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",children:c}),h&&(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",children:h}),!c&&(0,d.jsx)(g.default,{variant:"caption",color:"warning.main",children:"No flow currently emits this signal"})]}))},renderInput:a=>(0,d.jsx)(m.A,{...a,label:"Signal topic",placeholder:"e.g. review-blocked",helperText:H?I?G(H)??"React when this signal is emitted.":"No flow currently emits this signal — the trigger will stay idle until one does.":"React when a signal node in any flow emits this topic. Suggestions come from your existing flows."})})}):"flow"===A?(0,d.jsxs)(h.A,{fullWidth:!0,children:[(0,d.jsx)(i.A,{id:"flow-event-flow",children:"Flow to watch"}),(0,d.jsxs)(j.A,{labelId:"flow-event-flow",label:"Flow to watch",value:a.source?.flowId??"",onChange:c=>b({...a,source:{flowId:c.target.value}}),displayEmpty:!0,children:[0===c.length&&(0,d.jsx)(k.A,{value:"",disabled:!0,children:"No flows available"}),c.map(a=>(0,d.jsx)(k.A,{value:a.id,children:a.name},a.id))]})]}):(0,d.jsxs)(h.A,{fullWidth:!0,children:[(0,d.jsx)(i.A,{id:"flow-event-execution",children:"Planned execution to watch"}),(0,d.jsxs)(j.A,{labelId:"flow-event-execution",label:"Planned execution to watch",value:a.source?.executionId??"",onChange:c=>b({...a,source:{executionId:c.target.value}}),displayEmpty:!0,children:[0===w.filter(a=>a.execution.id!==v).length&&(0,d.jsx)(k.A,{value:"",disabled:!0,children:"No other planned executions"}),w.filter(a=>a.execution.id!==v).map(a=>(0,d.jsx)(k.A,{value:a.execution.id,children:a.execution.name},a.execution.id))]})]})]}),!B&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:2},children:"When it…"}),(0,d.jsxs)(n.A,{row:!0,children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:(a.on??[]).includes("completed"),onChange:a=>J("completed",a.target.checked)}),label:"completes"}),(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:(a.on??[]).includes("error"),onChange:a=>J("error",a.target.checked)}),label:"errors"})]})]}),(0,d.jsx)(m.A,{fullWidth:!0,label:B?"Only when the payload contains (optional)":"Only when the output contains (optional)",value:a.outputMatch?.contains??"",onChange:c=>{let d=c.target.value,e={...a.outputMatch,contains:d||void 0},f=e.contains||e.regex?e:void 0;b({...a,outputMatch:f})},margin:"normal",placeholder:"e.g. FAILED, or leave empty to react to every matching run"}),(0,d.jsx)(o.A,{sx:{mt:1},control:(0,d.jsx)(p.A,{checked:y,onChange:a=>z(a.target.checked)}),label:"Advanced (loop safety)"}),y&&(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,mt:1},children:[(0,d.jsx)(m.A,{label:"Max chain depth",type:"number",value:a.maxChainDepth??"",onChange:c=>b({...a,maxChainDepth:""===c.target.value?void 0:Number(c.target.value)}),helperText:"Stop after this many hops (default 5)",inputProps:{min:1}}),(0,d.jsx)(m.A,{label:"Cooldown (ms)",type:"number",value:a.minIntervalMs??"",onChange:c=>b({...a,minIntervalMs:""===c.target.value?void 0:Number(c.target.value)}),helperText:"Minimum gap between fires",inputProps:{min:0}})]}),(0,d.jsx)(q.A,{sx:{mt:2}}),(0,d.jsx)(r.A,{severity:"info",sx:{mt:2},children:B?"The signal’s payload is handed to this flow. Emit a signal from a signal node in any flow to fire this one — fire-and-forget. To avoid runaway loops, a chain of fires stops at the max depth above, and the overlap-skip prevents a single execution from re-triggering itself while it’s still running.":"The upstream run’s output is handed to this flow, so it can build on what the other flow produced. To avoid runaway loops, a chain of flow-event fires stops at the max depth above, and the existing overlap-skip prevents a single execution from re-triggering itself while it’s still running."})]})}},72748:(a,b,c)=>{c.d(b,{A:()=>j});var d=c(21124);c(38301);var e=c(81637),f=c(37674),g=c(79515),h=c(88745),i=c(62185);let j=({config:a,onChange:b})=>(0,d.jsxs)(e.default,{sx:{mt:1},children:[(0,d.jsx)(f.A,{fullWidth:!0,label:"URL to watch",value:a.url,onChange:c=>b({...a,url:c.target.value}),placeholder:"https://example.com/status or an API/feed URL",margin:"normal",type:"url"}),(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:1},children:"How often to check"}),(0,d.jsx)(i.A,{verb:"Check",cron:a.cron,timezone:a.timezone,onChange:({cron:c,timezone:d})=>b({...a,cron:c,timezone:d})}),(0,d.jsx)(h.A,{severity:"info",sx:{mt:1},children:"The first check only takes a snapshot; the flow runs when a later check finds different content, and the fetched content is handed to the flow. Pages that embed ever-changing bits (timestamps, session tokens) look “changed” on every check — plain APIs, feeds, and raw files work best."})]})},87113:(a,b,c)=>{c.d(b,{A:()=>h});var d=c(21124);c(38301);var e=c(81637),f=c(79515),g=c(8165);let h=({selected:a,icon:b,title:c,description:h,onClick:i})=>(0,d.jsxs)(e.default,{role:"radio","aria-checked":a,tabIndex:0,onClick:i,onKeyDown:a=>{("Enter"===a.key||" "===a.key)&&(a.preventDefault(),i())},sx:{flex:1,minWidth:200,position:"relative",p:2,borderRadius:2,border:2,borderColor:a?"primary.main":"divider",bgcolor:a?"action.selected":"background.paper",cursor:"pointer",transition:"border-color 120ms, background-color 120ms","&:hover":{borderColor:a?"primary.main":"text.disabled"},outline:"none","&:focus-visible":{boxShadow:a=>`0 0 0 3px ${a.palette.primary.light}`}},children:[a&&(0,d.jsx)(g.A,{color:"primary",fontSize:"small",sx:{position:"absolute",top:8,right:8}}),(0,d.jsxs)(e.default,{sx:{display:"flex",alignItems:"center",gap:1,mb:.5,color:a?"primary.main":"text.secondary"},children:[b,(0,d.jsx)(f.default,{variant:"subtitle1",sx:{fontWeight:600,color:"text.primary"},children:c})]}),(0,d.jsx)(f.default,{variant:"body2",color:"text.secondary",children:h})]})},88839:(a,b,c)=>{c.d(b,{A:()=>D});var d=c(21124),e=c(38301),f=c(81637),g=c(79515),h=c(68730),i=c(82605),j=c(50062),k=c(7675),l=c(94367),m=c(37674),n=c(8521),o=c(88745),p=c(11801);let q=(0,p.A)((0,d.jsx)("path",{d:"M18 23H4c-1.1 0-2-.9-2-2V7h2v14h14zM15 1H8c-1.1 0-1.99.9-1.99 2L6 17c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V7zm1.5 14h-6v-2h6zm0-6h-2v2h-2V9h-2V7h2V5h2v2h2z"}),"Difference"),r=(0,p.A)([(0,d.jsx)("path",{d:"M13 8.57c-.79 0-1.43.64-1.43 1.43s.64 1.43 1.43 1.43 1.43-.64 1.43-1.43-.64-1.43-1.43-1.43"},"0"),(0,d.jsx)("path",{d:"M13 3C9.25 3 6.2 5.94 6.02 9.64L4.1 12.2c-.25.33-.01.8.4.8H6v3c0 1.1.9 2 2 2h1v3h7v-4.68c2.36-1.12 4-3.53 4-6.32 0-3.87-3.13-7-7-7m3 7c0 .13-.01.26-.02.39l.83.66c.08.06.1.16.05.25l-.8 1.39c-.05.09-.16.12-.24.09l-.99-.4c-.21.16-.43.29-.67.39L14 13.83c-.01.1-.1.17-.2.17h-1.6c-.1 0-.18-.07-.2-.17l-.15-1.06c-.25-.1-.47-.23-.68-.39l-.99.4c-.09.03-.2 0-.25-.09l-.8-1.39c-.05-.08-.03-.19.05-.25l.84-.66c-.01-.13-.02-.26-.02-.39s.02-.27.04-.39l-.85-.66c-.08-.06-.1-.16-.05-.26l.8-1.38c.05-.09.15-.12.24-.09l1 .4c.2-.15.43-.29.67-.39L12 6.17c.02-.1.1-.17.2-.17h1.6c.1 0 .18.07.2.17l.15 1.06c.24.1.46.23.67.39l1-.4c.09-.03.2 0 .24.09l.8 1.38c.05.09.03.2-.05.26l-.85.66c.03.12.04.25.04.39"},"1")],"Psychology");var s=c(28055),t=c(83434),u=c(63281),v=c(19815),w=c(87113),x=c(62185),y=c(31411),z=c(21570),A=c(35070),B=c(45231);let C=(0,v.h)("frontend/components/PlannedExecutions/WatchToolPanel"),D=({config:a,onChange:b})=>{let[c,p]=(0,e.useState)([]),[v,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)([]),[G,H]=(0,e.useState)(!1),[I,J]=(0,e.useState)(Object.keys(a.args||{}).length>0?JSON.stringify(a.args,null,2):""),[K,L]=(0,e.useState)(null),[M,N]=(0,e.useState)(!1),[O,P]=(0,e.useState)(null),[Q,R]=(0,e.useState)(null),[S,T]=(0,e.useState)([]),[U,V]=(0,e.useState)([]);(0,e.useEffect)(()=>{let a=!1;return s.S.loadServerConfigs().then(b=>{a||(Array.isArray(b)?p(b.filter(a=>!a.disabled)):(C.warn("Failed to load MCP servers for watch-tool panel",b),p([])))}),()=>{a=!0}},[]),(0,e.useEffect)(()=>{if(!a.serverName)return void F([]);let b=!1;return H(!0),s.S.listServerTools(a.serverName).then(({tools:a})=>{b||F(a||[])}).finally(()=>{b||H(!1)}),()=>{b=!0}},[a.serverName]),(0,e.useEffect)(()=>{let a=!1;return t.N.loadModels().then(b=>{a||T(Array.isArray(b)?b:[])}).catch(()=>{a||T([])}),u.g.loadFlows().then(b=>{a||V(b||[])}).catch(()=>{a||V([])}),()=>{a=!0}},[]);let W=async()=>{N(!0),P(null),R(null);try{let b=await s.S.callTool(a.serverName,a.toolName,a.args||{});if(b?.error)R("string"==typeof b.error?b.error:"Tool call failed");else{let a=b?.data??b,c=JSON.stringify(a,null,2)??"";P(c.length>6e3?`${c.slice(0,6e3)}
|
|
2
|
-
… (truncated)`:c)}}catch(a){R(a instanceof Error?a.message:"Tool call failed")}finally{N(!1)}},X=a.evaluate,Y=E.find(b=>b.name===a.toolName),Z=(0,B.E)("mcp",c),$=c=>({key:c.name,content:(c=>(0,d.jsx)(A.A,{name:c.name,status:c.status||"disconnected",path:c.rootPath||"",enabled:!c.disabled,transport:c.transport||"stdio",pickerMode:!0,selected:a.serverName===c.name,onClick:()=>{var d;return d=c.name,void(b({...a,serverName:d,toolName:""}),D(!1))}}))(c)}),_=Z.items.map($),aa=Z.groups?Z.groups.map(a=>({...a,items:a.items.map($)})):null;return(0,d.jsxs)(f.default,{sx:{mt:1},children:[(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsxs)(f.default,{sx:{minWidth:220,flex:1,mt:2,mb:1},children:[(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mb:.5},children:"Server"}),(0,d.jsx)(h.A,{variant:"outlined",fullWidth:!0,onClick:()=>D(!0),sx:{justifyContent:"flex-start",textTransform:"none"},children:a.serverName?`${a.serverName} — change`:"Choose an MCP server…"}),(0,d.jsx)(z.A,{open:v,onClose:()=>D(!1),title:"Choose an MCP server",description:"Pick the server whose tool you want to watch.",emptyMessage:"No MCP servers configured.",searchable:!0,searchPlaceholder:"Search servers…",searchTerm:Z.searchTerm,onSearchChange:Z.setSearchTerm,columns:{xs:12,sm:6},items:_,groups:aa,collapsedKeys:Z.collapsedKeys,onToggleGroup:Z.toggleGroup})]}),(0,d.jsxs)(i.A,{sx:{minWidth:220,flex:1},margin:"normal",disabled:!a.serverName,children:[(0,d.jsx)(j.A,{id:"watch-tool-label",children:"Tool"}),(0,d.jsxs)(k.A,{labelId:"watch-tool-label",label:"Tool",value:E.some(b=>b.name===a.toolName)?a.toolName:"",onChange:c=>b({...a,toolName:c.target.value,args:{}}),children:[0===E.length&&(0,d.jsx)(l.A,{value:"",disabled:!0,children:G?"Loading tools…":"Pick a server first"}),E.map(a=>(0,d.jsx)(l.A,{value:a.name,children:a.name},a.name))]})]})]}),(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:1},children:"How often to check"}),(0,d.jsx)(x.A,{verb:"Check",cron:a.cron??function(a){let b=Math.max(5,Math.round((a??6e4)/1e3));if(b<60)return`*/${b} * * * * *`;let c=Math.max(1,Math.round(b/60));if(c<60)return`*/${c} * * * *`;let d=Math.max(1,Math.min(23,Math.round(c/60)));return`0 */${d} * * *`}(a.intervalMs),timezone:a.timezone,onChange:({cron:c,timezone:d})=>b({...a,cron:c,timezone:d})}),Y?(0,d.jsxs)(f.default,{sx:{my:1.5},children:[(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mb:1.5},children:"Tool parameters — sent on every check"}),(0,d.jsx)(y.A,{schema:Y.inputSchema,values:a.args||{},onChange:c=>b({...a,args:c})})]}):(0,d.jsx)(m.A,{fullWidth:!0,label:"Tool arguments (JSON, optional)",value:I,onChange:c=>(c=>{if(J(c),!c.trim()){L(null),b({...a,args:{}});return}try{let d=JSON.parse(c);if(null===d||"object"!=typeof d||Array.isArray(d))return void L('Arguments must be a JSON object, e.g. { "query": "…" }');L(null),b({...a,args:d})}catch{L("Not valid JSON yet")}})(c.target.value),margin:"normal",multiline:!0,minRows:2,placeholder:'{ "query": "is:unread" }',error:!!K,helperText:K??"Sent to the tool on every check.",slotProps:{input:{sx:{fontFamily:"monospace",fontSize:14}}}}),(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:2,mb:1},children:[(0,d.jsx)(h.A,{variant:"outlined",size:"small",onClick:W,disabled:!a.serverName||!a.toolName||M||!!K,startIcon:M?(0,d.jsx)(n.default,{size:16}):void 0,children:"Test: call the tool now"}),(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",children:"See what the result looks like — useful for the settings below."})]}),Q&&(0,d.jsx)(o.A,{severity:"error",sx:{mb:1},children:Q}),O&&(0,d.jsx)(f.default,{component:"pre",sx:{maxHeight:240,overflow:"auto",bgcolor:"action.hover",borderRadius:1,p:1.5,fontSize:12,m:0,mb:1},children:O}),(0,d.jsx)(g.default,{variant:"subtitle2",sx:{mt:2,mb:1},children:"Run the flow when…"}),(0,d.jsxs)(f.default,{role:"radiogroup","aria-label":"Poll condition",sx:{display:"flex",gap:2,flexWrap:"wrap"},children:[(0,d.jsx)(w.A,{selected:"on-change"===X.mode,onClick:()=>b({...a,evaluate:{mode:"on-change"}}),icon:(0,d.jsx)(q,{}),title:"The result changes",description:"Any difference from the last check runs the flow. Simplest — no setup."}),(0,d.jsx)(w.A,{selected:"llm-gate"===X.mode||"flow-gate"===X.mode,onClick:()=>{"llm-gate"!==X.mode&&"flow-gate"!==X.mode&&b({...a,evaluate:{mode:"llm-gate",condition:"",modelId:""}})},icon:(0,d.jsx)(r,{}),title:"AI decides",description:"Describe the condition in plain language; a model — or one of your flows — checks the result whenever it changes."})]}),("llm-gate"===X.mode||"flow-gate"===X.mode)&&(0,d.jsxs)(f.default,{sx:{mt:1},children:[(0,d.jsx)(m.A,{fullWidth:!0,label:"Run the flow if…",value:X.condition,onChange:c=>b({...a,evaluate:{...X,condition:c.target.value}}),multiline:!0,minRows:2,margin:"normal",placeholder:"e.g. any email mentions an invoice or a payment reminder"}),(0,d.jsxs)(f.default,{sx:{display:"flex",gap:2,flexWrap:"wrap",alignItems:"flex-start"},children:[(0,d.jsxs)(i.A,{sx:{minWidth:170},children:[(0,d.jsx)(j.A,{id:"gate-checker-label",children:"Checked by"}),(0,d.jsxs)(k.A,{labelId:"gate-checker-label",label:"Checked by",value:X.mode,onChange:c=>{let d=c.target.value;if(d===X.mode)return;let e={condition:X.condition,maxCallsPerDay:X.maxCallsPerDay};b({...a,evaluate:"llm-gate"===d?{mode:d,...e,modelId:""}:{mode:d,...e,flowId:""}})},children:[(0,d.jsx)(l.A,{value:"llm-gate",children:"A model"}),(0,d.jsx)(l.A,{value:"flow-gate",children:"One of my flows"})]})]}),"llm-gate"===X.mode&&(0,d.jsxs)(i.A,{sx:{minWidth:240,flex:1},children:[(0,d.jsx)(j.A,{id:"gate-model-label",children:"Model that checks"}),(0,d.jsxs)(k.A,{labelId:"gate-model-label",label:"Model that checks",value:S.some(a=>a.id===X.modelId)?X.modelId:"",onChange:c=>b({...a,evaluate:{...X,modelId:c.target.value}}),children:[0===S.length&&(0,d.jsx)(l.A,{value:"",disabled:!0,children:"No models configured"}),S.map(a=>(0,d.jsx)(l.A,{value:a.id,children:a.displayName||a.name},a.id))]})]}),"flow-gate"===X.mode&&(0,d.jsxs)(i.A,{sx:{minWidth:240,flex:1},children:[(0,d.jsx)(j.A,{id:"gate-flow-label",children:"Flow that checks"}),(0,d.jsxs)(k.A,{labelId:"gate-flow-label",label:"Flow that checks",value:U.some(a=>a.id===X.flowId)?X.flowId:"",onChange:c=>b({...a,evaluate:{...X,flowId:c.target.value}}),children:[0===U.length&&(0,d.jsx)(l.A,{value:"",disabled:!0,children:"No flows available"}),U.map(a=>(0,d.jsx)(l.A,{value:a.id,children:a.name},a.id))]})]}),(0,d.jsx)(m.A,{label:"Max checks per day",type:"number",value:X.maxCallsPerDay??500,onChange:c=>b({...a,evaluate:{...X,maxCallsPerDay:Math.max(1,Number(c.target.value)||1)}}),inputProps:{min:1},helperText:"Cost guard per check.",sx:{width:180}})]}),(0,d.jsx)(g.default,{variant:"caption",color:"text.secondary",sx:{display:"block",mt:.5},children:"flow-gate"===X.mode?'The checker flow runs invisibly (never in the chat), gets the condition + tool result, and must answer with {"fire": true/false, "reason": "…"} — it can use its own tools to verify before deciding.':"The model is only asked when the result actually changed since the last check — an idle feed costs nothing. Pick a small, cheap model."})]}),(0,d.jsx)(o.A,{severity:"info",sx:{mt:2},children:"The first check only takes a snapshot — the flow runs from the second check onwards, when something actually changed. FLUJO must be running for checks to happen."})]})}},91283:(a,b,c)=>{c.d(b,{A:()=>q});var d=c(21124),e=c(38301),f=c(81637),g=c(88745),h=c(37674),i=c(43312),j=c(44079),k=c(68730),l=c(79515),m=c(95587),n=c(77028),o=c(38941),p=c(36698);let q=({config:a,onChange:b,executionId:c,saved:q})=>{let[r,s]=(0,e.useState)(null),t=`/api/webhooks/${c}`,u=async(a,b)=>{try{await navigator.clipboard.writeText(b),s(a),setTimeout(()=>s(null),1500)}catch{}};return(0,d.jsxs)(f.default,{sx:{mt:1},children:[!q&&(0,d.jsx)(g.A,{severity:"info",sx:{mb:2},children:"This URL and token are ready to copy now — they become active when you save."}),(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,d.jsx)(h.A,{fullWidth:!0,label:"Webhook URL",value:t,InputProps:{readOnly:!0},size:"small"}),(0,d.jsx)(i.A,{title:"Copy URL",children:(0,d.jsx)(j.A,{onClick:()=>u("url",t),children:"url"===r?(0,d.jsx)(p.A,{color:"success"}):(0,d.jsx)(o.A,{})})})]}),(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",gap:1,mt:2},children:[(0,d.jsx)(h.A,{fullWidth:!0,label:"Secret token",value:a.token,InputProps:{readOnly:!0},size:"small",type:"password"}),(0,d.jsx)(i.A,{title:"Copy token",children:(0,d.jsx)(j.A,{onClick:()=>u("token",a.token),disabled:!a.token,children:"token"===r?(0,d.jsx)(p.A,{color:"success"}):(0,d.jsx)(o.A,{})})}),(0,d.jsx)(k.A,{size:"small",onClick:()=>b({...a,token:crypto.randomUUID()}),sx:{whiteSpace:"nowrap"},children:"New token"})]}),(0,d.jsx)(l.default,{variant:"caption",color:"text.secondary",children:q?"A new token takes effect when you save — callers using the old one are cut off.":""}),(0,d.jsxs)(l.default,{variant:"body2",color:"text.secondary",sx:{mt:1.5},children:["Callers send a POST with the token in the ",(0,d.jsx)("code",{children:"X-Flujo-Token"})," ","header (or ",(0,d.jsx)("code",{children:"?token=…"}),"). The request body becomes part of the flow's input — treat it as untrusted data in your prompt."]}),(0,d.jsx)(m.A,{sx:{mt:1,display:"flex"},control:(0,d.jsx)(n.A,{checked:!0===a.allowExternal,onChange:c=>b({...a,allowExternal:c.target.checked})}),label:"Allow calls from other machines (default: this computer only)"}),a.allowExternal&&(0,d.jsx)(g.A,{severity:"warning",children:"FLUJO assumes a single user on this machine. If you expose it beyond localhost (port forwarding, tunnels), securing that access is your responsibility — anyone with the URL and token can run this flow."})]})}}};
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=5040,exports.ids=[1925,3629,4306,5040,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},5248:(a,b,c)=>{c.d(b,{P:()=>m,p:()=>k});var d=c(32524),e=c(81226);function f(a){return!!a&&a.includes("mcp")}function g(a){return!!a&&a.includes("resource")}let h=a=>({source:`${a}-bottom`,target:`${a}-top`});function i(a,b){let c=a.filter(a=>"mcp"!==a.type&&"resource"!==a.type&&"string"==typeof a.id),d=new Map(c.map(a=>[a.id,a])),e=new Map,i=new Map,j=new Set;for(let a of c)e.set(a.id,0),i.set(a.id,0);let k=(a,b)=>{j.add(`${a}->${b}`),i.set(a,(i.get(a)??0)+1),e.set(b,(e.get(b)??0)+1)};for(let a of b)d.has(a.from)&&d.has(a.to)&&a.from!==a.to&&(k(a.from,a.to),a.bidirectional&&k(a.to,a.from));let l=[];for(let a of[...c].sort((a,b)=>a.y-b.y||a.x-b.x)){let b=l[l.length-1];b&&70>=Math.abs(a.y-b[0].y)?b.push(a):l.push([a])}let m=new Map;l.forEach((a,b)=>a.forEach(a=>m.set(a.id,b)));let n=new Map;for(let a=1;a<l.length;a++){let b=l[a],c=b.filter(a=>"subflow"===a.type);if(c.length>=2&&c.length===b.length){let b=l[a-1];if(1===b.length&&"process"===b[0].type)for(let a of c)n.set(a.id,b[0].id)}}let o=[],p=(a,b)=>{if(a===b||j.has(`${a}->${b}`))return!1;let c=d.get(a),e=d.get(b);return!(!c||!e||null!==function(a,b,c,d){if("trigger"===a&&"start"===c)return b&&"trigger-bottom"!==b?"Trigger nodes must connect via their bottom handle":d&&"start-top"!==d?"Trigger nodes must connect to the top handle of the Start node":null;if("trigger"===c)return"Trigger nodes cannot have incoming connections";if("trigger"===a&&"start"!==c)return"Trigger nodes can only connect to the Start node";if("start"===c)return"Start nodes cannot have incoming connections";if("finish"===a)return"Finish nodes cannot have outgoing connections";if("mcp"===a||"mcp"===c||f(b)||f(d))return("mcp"!==a||"process"!==c)&&("process"!==a||"mcp"!==c)?"MCP connections must link an MCP node to a Process node via MCP handles":"process"!==a||f(b)?null:"Connect MCP nodes from the Process node's left/right MCP handles";if("resource"===a||"resource"===c||g(b)||g(d)){if(("resource"!==a||"process"!==c)&&("process"!==a||"resource"!==c))return"Resource connections must link a Resource node to a Process node via resource handles";if("process"===a&&!g(b))return"Connect Resource nodes from the Process node's left/right resource handles"}return null}(c.type,h(c.type).source,e.type,h(e.type).target)||"subflow"===c.type&&(i.get(a)??0)>=1)},q=(a,b,c,d)=>{o.push({from:a,to:b,bidirectional:c,reason:d}),k(a,b),c&&k(b,a)},r=a=>{let b=m.get(a.id)??0;for(let c=b-1;c>=0;c--){let b=l[c].filter(b=>b.id!==a.id&&"finish"!==b.type&&!n.has(b.id));if(0!==b.length){if(1===b.length)return b[0];return b.reduce((b,c)=>Math.abs(c.x-a.x)<Math.abs(b.x-a.x)?c:b)}}return null};for(let a of l)for(let b of a){if("start"===b.type||(e.get(b.id)??0)>0)continue;let a=n.get(b.id);if(a){p(a,b.id)&&q(a,b.id,!0,"auto-bidirectional-subflow");continue}let c=r(b);c&&p(c.id,b.id)&&q(c.id,b.id,!1,"auto-connected")}let s=c.filter(a=>"start"===a.type),t=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(e.get(a.id)??0)===0),u=null;if(0===s.length){let a=t();if(a.length>0)u={targets:a.map(a=>a.id)};else{let a=c.filter(a=>"finish"!==a.type).sort((a,b)=>a.y-b.y)[0];a&&(u={targets:[a.id]})}}else{let a=s[0];for(let b of t())p(a.id,b.id)&&q(a.id,b.id,!1,"auto-connected")}let v=c.filter(a=>"finish"===a.type),w=()=>c.filter(a=>"start"!==a.type&&"finish"!==a.type&&!n.has(a.id)&&(i.get(a.id)??0)===0),x=null;if(0===v.length){let a=w();a.length>0&&(x={sources:a.map(a=>a.id)})}else{let a=v[0];for(let b of w())p(b.id,a.id)&&q(b.id,a.id,!1,"auto-connected")}return{addEdges:o,addStart:u,addFinish:x}}function j(a,b){if(!b.has(a))return a;for(let c=2;;c++){let d=`${a}_${c}`;if(!b.has(d))return d}}function k(a){let b=[];return{spec:function a(b,c){let d=Array.isArray(b?.nodes)?b.nodes.map(a=>({...a})):[],e=Array.isArray(b?.edges)?b.edges.map(a=>({...a})):[];for(let b of d)b?.type==="subflow"&&b.subflowSpec&&(b.subflowSpec=a(b.subflowSpec,c));let f=d.filter(a=>a&&"string"==typeof a.key&&!!a.key&&"mcp"!==a.type);if(0===f.length)return{...b,nodes:d,edges:e};let g=i(f.map((a,b)=>({id:a.key,type:a.type,x:0,y:1e3*b})),e.filter(a=>a&&"string"==typeof a.from&&"string"==typeof a.to).map(a=>({from:a.from,to:a.to,bidirectional:!0===a.bidirectional})));for(let a of g.addEdges)e.push({from:a.from,to:a.to,...a.bidirectional?{bidirectional:!0}:{}}),c.push({code:a.reason,message:n(a.reason),nodeId:a.to});let h=new Set(d.map(a=>a.key).filter(Boolean));if(g.addStart){let a=j("start",h);for(let b of(h.add(a),d.unshift({key:a,type:"start"}),g.addStart.targets))e.push({from:a,to:b});c.push({code:"auto-added-start",message:`Added a Start node connected to ${g.addStart.targets.length} entry step(s).`})}if(g.addFinish){let a=j("finish",h);for(let b of(h.add(a),d.push({key:a,type:"finish"}),g.addFinish.sources))e.push({from:b,to:a});c.push({code:"auto-added-finish",message:`Added a Finish node connected from ${g.addFinish.sources.length} final step(s).`})}return{...b,nodes:d,edges:e}}(a,b),changes:b}}function l(a){return a.data?.type??a.type??"unknown"}function m(a){var b,c;let f=(a?.nodes??[]).map(a=>({...a,position:{...a.position??{x:0,y:0}},data:{...a.data}})),g=[...a?.edges??[]],h={...a,nodes:f,edges:g},j=[],k=i(f.filter(a=>"mcp"!==l(a)&&"resource"!==l(a)).map(a=>({id:a.id,type:l(a),x:a.position?.x??0,y:a.position?.y??0})),g.filter(a=>!function(a){let b=a.data?.edgeType;return"mcp"===b||"resource"===b}(a)).map(a=>({from:a.source,to:a.target,bidirectional:a.data?.bidirectional===!0}))),m=new Map(f.map(a=>[a.id,a])),o=(a,b,c)=>{let d=m.get(a),f=m.get(b);d&&f&&g.push((0,e.pX)(d,f,c))};for(let a of k.addEdges)o(a.from,a.to,a.bidirectional),j.push({code:a.reason,message:n(a.reason),nodeId:a.to});if(k.addStart){let a=k.addStart.targets.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y<a.position.y?b:a,null),c=(b={x:a?.position.x??250,y:(a?.position.y??150)-150},{id:(0,d.A)(),type:"start",position:b,data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}});for(let a of(f.unshift(c),m.set(c.id,c),k.addStart.targets))o(c.id,a,!1);j.push({code:"auto-added-start",message:`Added a Start node connected to ${k.addStart.targets.length} entry step(s).`,nodeId:c.id})}if(k.addFinish){let a=k.addFinish.sources.map(a=>m.get(a)).filter(Boolean).reduce((a,b)=>!a||b.position.y>a.position.y?b:a,null),b=(c={x:a?.position.x??250,y:(a?.position.y??0)+150},{id:(0,d.A)(),type:"finish",position:c,data:{label:"Finish Node",type:"finish",properties:{}}});for(let a of(f.push(b),m.set(b.id,b),k.addFinish.sources))o(a,b.id,!1);j.push({code:"auto-added-finish",message:`Added a Finish node connected from ${k.addFinish.sources.length} final step(s).`,nodeId:b.id})}return{flow:h,changes:j}}function n(a){switch(a){case"auto-connected":return"Connected a disconnected step into the flow.";case"auto-bidirectional-subflow":return"Wired a parallel subflow with a two-way handoff to its orchestrator.";case"auto-added-start":return"Added a Start node.";case"auto-added-finish":return"Added a Finish node."}}},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},71994:(a,b,c)=>{c.d(b,{GN:()=>B,Xg:()=>C,UC:()=>D});var d=c(50846),e=c(20433),f=c(58858),g=c(46496),h=c(81226),i=c(84671),j=c(5248),k=c(88185),l=c(14265),m=c(1905),n=c(33233),o=c(9312),p=c(41527);let q=["prompt","isolatedPrompt","payloadTemplate"];function r(a){return RegExp("\\$\\{var:\\s*"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\s*\\}","g")}function s(a,b){for(let c of q){let d=a[c];"string"==typeof d&&(a[c]=b(d))}Array.isArray(a.spawnBriefs)&&(a.spawnBriefs=a.spawnBriefs.map(a=>"string"==typeof a?b(a):a))}function t(a){return a.replace(/[ \t]{2,}/g," ").replace(/[ \t]+([.,;:!?])/g,"$1").replace(/[ \t]+\n/g,"\n")}let u=(0,d.h)("backend/services/flow/generateFlow");function v(a,b,c,d){let e=c?`MULTI-LEVEL FLOWS — you MAY design subflows that are themselves brand-new flows:
|
|
2
|
-
- A subflow node normally references an EXISTING flow via "flow". To instead create a NEW child flow, use ONE of these on the subflow node (not "flow"):
|
|
3
|
-
- "subflowSpec": an inline nested FlowSpec (you author the whole child now), or
|
|
4
|
-
- "generateSubflow": a short natural-language description of the child — FLUJO will generate that child flow for you.
|
|
5
|
-
- Nest only when a self-contained sub-task genuinely deserves its own flow. Nesting is bounded: at most ${d} level(s) deep and ${h.lk} flows total. Keep it minimal.`:`SUBFLOWS: a subflow node's "flow" must reference an EXISTING flow (by name or id). Do NOT use "subflowSpec" or "generateSubflow" — multi-level generation is off for this run.`,f=b?`CAPABILITY ACQUISITION — you are allowed to EXPAND this FLUJO instance:
|
|
6
|
-
- If the task needs a capability none of the configured servers provides (voice, vision, browsing, email, code execution, …), use search_mcp_marketplace to find a server for it, then install_mcp_server to install the best match. Prefer servers that need no API keys (empty requiredEnv); if the best option needs keys, install a keyless alternative or note the requirement in the flow description.
|
|
7
|
-
- After a successful install, reference the returned server name in a process node's "servers" list and enable the tools it reported.
|
|
8
|
-
- Be ambitious: an actual capability (real audio, real browsing, real files) beats a text approximation. Search with several short terms ("voice", "tts", "speech") — the registry matches server NAMES only.`:`CAPABILITY DISCOVERY — you may search but NOT install:
|
|
9
|
-
- If the task needs a capability none of the configured servers provides, you may use search_mcp_marketplace to see what exists. Do NOT reference unconfigured servers in the spec; instead mention the recommended server (its registry name) in the flow "description" so the user can install it.`;return`You design workflows for FLUJO, an MCP-first workflow builder. The user describes what they want; you emit a flow specification as JSON.
|
|
10
|
-
|
|
11
|
-
OUTPUT FORMAT — when you are done (after any tool use), respond with ONLY one JSON object, no prose, no code fences.
|
|
12
|
-
|
|
13
|
-
${k.R}
|
|
14
|
-
|
|
15
|
-
GENERATED-FLOW DEFAULTS (context saving): process nodes you leave without an explicit inputMode/outputMode are compiled with inputMode "latest-message" and outputMode "latest-message" — each step sees only the current task and later steps see only its final response, not its tool calls/results. When a step genuinely needs the whole conversation or later steps need its intermediate work, set "full-history" / "full-conversation" explicitly.
|
|
16
|
-
|
|
17
|
-
GENERATED-FLOW DATA-FLOW POLICY (IMPORTANT — carry data through the conversation, NOT scratchpad variables):
|
|
18
|
-
1. PREFER CONVERSATION HISTORY. For a later step to use an earlier step's output, keep that output in the thread: give the earlier (producer) step outputMode "full-conversation" (or leave "latest-message" when only its final text matters) and give the later (consumer) step inputMode "full-history" so it actually sees the producer's turn. This is the default, robust way to move data forward.
|
|
19
|
-
2. DO NOT emit \${var:NAME} in generated prompts. The scratchpad variable feature (captureVariable + \${var:NAME}) is a valid HAND-AUTHORING tool, but for AUTO-GENERATED flows it is a footgun: a missing/late capture silently bakes an EMPTY string into the reading step's prompt and breaks the run. Do not use \${var:NAME} just to shuttle ordinary text one step forward — use history (rule 1).
|
|
20
|
-
3. DO NOT emit passive "captureResource" on a process node. Process artifacts require an explicit Resource node connected from the producing process; the model writes the artifact through the supplied write_resource tool. Use that advanced graph-visible protocol only when the artifact itself must be tracked. Ordinary generated flows should use history.
|
|
21
|
-
4. Any \${var:NAME} you emit anyway will be automatically rewritten to history (or removed if nothing captures it).
|
|
22
|
-
|
|
23
|
-
${f}
|
|
24
|
-
|
|
25
|
-
${e}
|
|
26
|
-
|
|
27
|
-
${a}`}function w(a){return a.map(a=>`- [${a.severity}] ${a.message}`).join("\n")}function x(a){let b=[{type:"function",function:{name:"search_mcp_marketplace",description:'Search the public MCP server registry. The registry matches the query against server NAMES only (substring), so use short single terms ("voice", "tts", "browser") and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it requires.',parameters:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}}}];return a&&b.push({type:"function",function:{name:"install_mcp_server",description:"Install an MCP server from the registry (by the exact name returned by search) and connect it. Returns the server name to reference in the spec and the tools it provides — or needsEnv when required keys are missing (then pick an alternative or note it for the user). Installing can take a while (package download).",parameters:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'}},required:["name"]}}}),b}async function y(a,b,c,d){if("search_mcp_marketplace"===a){let a="string"==typeof b.query?b.query:"";try{return await (0,l.e3)(a)}catch(a){return{error:`Registry search failed: ${a instanceof Error?a.message:String(a)}`}}}if("install_mcp_server"===a){if(!c)return{error:"Installing is not allowed in this generation (allowInstall is off)."};let a="string"==typeof b.name?b.name:"",e=await (0,l.aM)(a,void 0,{resolveOnly:!0}),f=await (0,m.Ej)(),g=(0,n.e5)({caller:"generator",settings:f,registryName:a,allowInstall:c});e.plan&&await (0,m.NB)((0,n.UM)(e.plan,"generator",g,!1));let h=await (0,l.aM)(a);return h.plan&&await (0,m.NB)((0,n.UM)(h.plan,"generator",g,h.installed,h.error)),h.installed&&h.serverName&&(d.contextDirty=!0,d.installedServers.push({name:h.serverName,tools:(h.tools??[]).map(a=>a.name),...h.alreadyExisted?{alreadyExisted:!0}:{},...h.plan?.command?{command:h.plan.command}:{},...h.plan?.args?{args:h.plan.args}:{},...h.plan?.verificationStatus?{verificationStatus:h.plan.verificationStatus}:{}})),h}return{error:`Unknown tool: ${a}`}}async function z(a,b,c,d,e,f,h){let i={};for(let a of e){if("function"!==a.type)continue;let b=a.function.name;i[b]=a=>y(b,a,f,h)}for(let j=0;j<=8;j++){let k=e.length>0&&j<8,{completion:l}=await a.createCompletion({model:b,apiKey:c,messages:d,temperature:0,maxTokens:(0,g.normalizeMaxTokens)(b.maxTokens),...k?{tools:e,localToolExecutors:i}:{}}),m=l.choices?.[0]?.message,n=m?.tool_calls??[];if(0===n.length)return"string"==typeof m?.content?m.content:"";for(let a of(d.push({role:"assistant",content:m?.content??null,tool_calls:n}),n)){if("function"!==a.type)continue;let b={};try{b=JSON.parse(a.function.arguments||"{}")}catch{}u.info(`Generator tool call: ${a.function.name}(${a.function.arguments})`);let c=await y(a.function.name,b,f,h);d.push({role:"tool",tool_call_id:a.id,content:JSON.stringify(c)})}7===j&&d.push({role:"user",content:"Tool budget exhausted. Emit the COMPLETE flow specification now as a single JSON object using what you have."})}return""}function A(a){let b=a.indexOf("{");if(-1===b)return null;let c=0,d=!1,e=!1;for(let f=b;f<a.length;f++){let g=a[f];if(d){e?e=!1:"\\"===g?e=!0:'"'===g&&(d=!1);continue}if('"'===g)d=!0;else if("{"===g)c++;else if("}"===g&&0==--c)try{return JSON.parse(a.slice(b,f+1))}catch{break}}return null}async function B(a){var b;let c="string"==typeof a?.description?a.description.trim():"";if(!c)return{success:!1,error:"A flow description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let d=!0===a.allowInstall,g=!0===a.allowSubflows,k=g?"number"!=typeof(b=a.maxDepth)||Number.isNaN(b)?2:Math.max(0,Math.min(h.A_,Math.floor(b))):0,l=await e.modelService.getModel(a.modelId);if(!l)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let m=await e.modelService.resolveAndDecryptApiKey(l.ApiKey)||("codex-cli"!==l.adapter||l.ApiKey?.trim()?null:"");if(null===m)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let n=await (0,o.jY)(),y=(0,f.getCompletionAdapter)(l),B=x(d),C={installedServers:[],contextDirty:!1},D=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),E=1;async function F(a,b){let c,e=[{role:"system",content:v(n.catalog,d,g&&b<k,k)},{role:"user",content:a}];try{c=await z(y,l,m,e,B,d,C)}catch(a){return u.warn("A child subflow generation call failed; leaving the subflow unresolved",a),null}let f=A(c);return f&&"object"==typeof f?f:null}async function G(a,b){if(a&&Array.isArray(a.nodes))for(let c of a.nodes){if(c?.type!=="subflow"||c.flow)continue;if(c.subflowSpec){await G(c.subflowSpec,b+1);continue}let a="string"==typeof c.generateSubflow?c.generateSubflow.trim():"";if(!a)continue;if(b+1>k||E>=h.lk){u.info(`Not expanding generateSubflow (depth ${b+1}, ${E} flows so far): budget/depth reached`);continue}let d=await F(a,b+1);d?(E++,c.subflowSpec=d,delete c.generateSubflow,await G(d,b+1)):delete c.generateSubflow}}let H=[{role:"system",content:v(n.catalog,d,g,k)},{role:"user",content:c}],I=null,J=0;for(let a=0;a<=D;a++){let b;J++,E=1;try{b=await z(y,l,m,H,B,d,C)}catch(a){if(u.error("Generator model call failed",a),I)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}let c=A(b);if(!c){if(u.warn(`Attempt ${J}: model output contained no parseable JSON object`),C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; keeping the stale catalog",a)}C.contextDirty=!1}H.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}if(g)try{await G(c,0)}catch(a){u.warn("Subflow expansion failed; compiling the root spec as-is",a)}if(C.contextDirty){try{n=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; validating with the stale catalog",a)}C.contextDirty=!1}let e=[];try{let a=function(a){let b=[];try{!function a(b,c){if(b&&Array.isArray(b.nodes)){for(let d of(!function(a,b){let c=Array.isArray(a?.nodes)?a.nodes.filter(a=>a&&"string"==typeof a.key):[];if(0===c.length)return;let d=Array.isArray(a?.edges)?a.edges:[],e=new Map;for(let a of c)e.set(a.key,new Set);for(let a of d)a&&"string"==typeof a.from&&"string"==typeof a.to&&(e.has(a.to)&&e.get(a.to).add(a.from),a.bidirectional&&e.has(a.from)&&e.get(a.from).add(a.to));let f=a=>{let b=new Set,c=[...e.get(a)??[]];for(;c.length;){let d=c.pop();if(!b.has(d)&&d!==a)for(let a of(b.add(d),e.get(d)??[]))c.push(a)}return b},g=new Set;for(let a of c)"string"==typeof a.parallelFlowsVariable&&a.parallelFlowsVariable.trim()&&g.add(a.parallelFlowsVariable.trim());let h=new Map;for(let a of c){let b="string"==typeof a.captureVariable?a.captureVariable.trim():"";b&&(h.has(b)||h.set(b,[]),h.get(b).push(a))}let i=new Map;for(let a of c)for(let b of function(a){let b=new Set;for(let c of q){let d=a[c];if("string"==typeof d)for(let a of(0,p.T9)(d))b.add(a)}if(Array.isArray(a.spawnBriefs)){for(let c of a.spawnBriefs)if("string"==typeof c)for(let a of(0,p.T9)(c))b.add(a)}return[...b]}(a))i.has(b)||i.set(b,[]),i.get(b).push(a);for(let[a,d]of i){if(g.has(a))continue;let e=h.get(a)??[],i=d.filter(a=>{let b=f(a.key);return e.some(c=>c.key!==a.key&&b.has(c.key))});if(0===i.length){let d=r(a);for(let a of c)s(a,a=>t(a.replace(d,"")));b.push({code:"var-dangling",message:`Removed \${var:${a}} — no earlier step captures it (it would resolve to an empty string at run time).`});continue}let j=r(a);for(let a of c)s(a,a=>t(a.replace(j,"")));for(let a of i)a.inputMode="full-history";for(let b of e)b.captureVariable===a&&delete b.captureVariable;b.push({code:"var-history",message:`Removed scratchpad \${var:${a}} and set the reading step(s) to full-history so the value flows through the conversation instead.`})}}(b,c),b.nodes))if(d&&(d.subflowSpec&&a(d.subflowSpec,c),Array.isArray(d.parallelSubflowSpecs)))for(let b of d.parallelSubflowSpecs)a(b,c)}}(a,b)}catch{}return{spec:a,changes:b}}(c);a.changes.length>0&&(u.info(`Attempt ${J}: scratchpad-var guard rewrote ${a.changes.length} reference(s)`),e=a.changes.map(a=>({severity:"warning",code:a.code,message:a.message})))}catch(a){u.warn("Scratchpad-var guard failed; compiling the spec as-is",a)}let f=c,v=[];try{let a=(0,j.p)(c);a.changes.length>0&&(f=a.spec,v=a.changes,u.info(`Attempt ${J}: auto-repair adjusted the spec (${v.length} change(s))`))}catch(a){u.warn("Auto-repair of the generated spec failed; compiling the spec as-is",a)}let x=v.map(a=>({severity:"warning",code:a.code,message:a.message})),F=(0,h.dM)(f,n.compile,{maxDepth:k,maxFlows:h.lk});if(!F.flow){H.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
|
|
28
|
-
${w(F.issues)}
|
|
29
|
-
Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}for(let a of F.flows)(0,h.Zn)(a);let K=F.flows.map(a=>({flow:a,validation:(0,i.nC)(a,{models:n.compile.models,servers:n.validatorServers,serverTools:n.compile.serverTools})})),L=(0,o.RB)([...e,...x,...F.issues],{issues:K.flatMap(a=>a.validation.issues),errorCount:0,warningCount:0,isRunnable:!0});if(I={flows:K,rootFlow:F.flow,validation:L},0===L.errorCount)break;u.info(`Attempt ${J}: bundle has ${L.errorCount} error(s)`+(a<D?"; asking the model to repair":"; repair budget exhausted")),a<D&&H.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
|
|
30
|
-
${w(L.issues)}
|
|
31
|
-
Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return I?(u.info(`Generated draft bundle rooted at "${I.rootFlow.name}" (${I.flows.length} flow(s)) in ${J} attempt(s): ${I.validation.errorCount} error(s), ${I.validation.warningCount} warning(s), ${C.installedServers.length} server(s) installed`),{success:!0,flow:I.rootFlow,validation:I.validation,flows:I.flows,rootFlowId:I.rootFlow.id,attempts:J,installedServers:C.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the description or a different generator model.",statusCode:422}}async function C(a){let b="string"==typeof a?.description?a.description.trim():"";if(!b)return{success:!1,error:"A change description is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A generator model id is required",statusCode:400};let c=a?.flow;if(!c||"object"!=typeof c||!Array.isArray(c.nodes)||!Array.isArray(c.edges))return{success:!1,error:"A valid flow to improve is required",statusCode:400};let d=await e.modelService.getModel(a.modelId);if(!d)return{success:!1,error:`Generator model not found: ${a.modelId}`,statusCode:404};let g=await e.modelService.resolveAndDecryptApiKey(d.ApiKey)||("codex-cli"!==d.adapter||d.ApiKey?.trim()?null:"");if(null===g)return{success:!1,error:"Could not resolve the generator model API key",statusCode:500};let j=!0===a.allowInstall,k=await (0,o.jY)(),l=(0,f.getCompletionAdapter)(d),m=x(j),n={installedServers:[],contextDirty:!1},p=Math.min("number"==typeof a.maxRepairs&&a.maxRepairs>=0?a.maxRepairs:1,2),q=(0,h.FH)(c),r={};for(let a of c.nodes)a?.id&&a.position&&"number"==typeof a.position.x&&"number"==typeof a.position.y&&(r[a.id]={x:a.position.x,y:a.position.y});let s=a=>({models:a.compile.models,servers:a.compile.servers,serverTools:a.compile.serverTools,flows:(a.compile.flows??[]).filter(a=>a.id!==c.id)}),t=`EXISTING FLOW (modify this — keep unchanged parts intact, and KEEP each node's "key" for any node you do NOT restructure so its canvas position is preserved):
|
|
32
|
-
${JSON.stringify(q)}
|
|
33
|
-
|
|
34
|
-
CHANGE REQUEST:
|
|
35
|
-
${b}
|
|
36
|
-
|
|
37
|
-
Re-emit the COMPLETE flow specification as a single JSON object (only the JSON), including the nodes you did not change.`,y=[{role:"system",content:v(k.catalog,j,!1,0)},{role:"user",content:t}],B=null,C=0;for(let a=0;a<=p;a++){let b;C++;try{b=await z(l,d,g,y,m,j,n)}catch(a){if(u.error("Improver model call failed",a),B)break;return{success:!1,error:`The generator model call failed: ${a instanceof Error?a.message:String(a)}`,statusCode:502}}if(n.contextDirty){try{k=await (0,o.jY)()}catch(a){u.warn("Re-gathering context after install failed; using the stale catalog",a)}n.contextDirty=!1}let e=A(b);if(!e){u.warn(`Improve attempt ${C}: model output contained no parseable JSON object`),y.push({role:"assistant",content:b},{role:"user",content:"Your reply contained no parseable JSON object. Re-emit the COMPLETE flow specification as a single JSON object and nothing else."});continue}let f=(0,h.dM)(e,s(k),{maxDepth:0,maxFlows:1,positions:r});if(!f.flow){y.push({role:"assistant",content:b},{role:"user",content:`The specification could not be compiled:
|
|
38
|
-
${w(f.issues)}
|
|
39
|
-
Fix these problems and re-emit the COMPLETE corrected JSON (only the JSON).`});continue}f.flow.id=c.id,"string"==typeof e.name&&e.name.trim()||(f.flow.name=c.name),(0,h.Zn)(f.flow);let q=(0,i.nC)(f.flow,{models:k.compile.models,servers:k.validatorServers,serverTools:k.compile.serverTools}),t=(0,o.RB)(f.issues,q);if(B={flows:[{flow:f.flow,validation:q}],rootFlow:f.flow,validation:t},0===t.errorCount)break;u.info(`Improve attempt ${C}: flow has ${t.errorCount} error(s)`+(a<p?"; asking the model to repair":"; repair budget exhausted")),a<p&&y.push({role:"assistant",content:b},{role:"user",content:`The flow you specified has these problems:
|
|
40
|
-
${w(t.issues)}
|
|
41
|
-
Fix the errors (warnings are advisory) and re-emit the COMPLETE corrected JSON (only the JSON).`})}return B?(u.info(`Improved draft "${B.rootFlow.name}" in ${C} attempt(s): ${B.validation.errorCount} error(s), ${B.validation.warningCount} warning(s), ${n.installedServers.length} server(s) installed`),{success:!0,flow:B.rootFlow,validation:B.validation,flows:B.flows,rootFlowId:B.rootFlow.id,attempts:C,installedServers:n.installedServers}):{success:!1,error:"The model did not produce a usable flow specification. Try rephrasing the change request or a different generator model.",statusCode:422}}async function D(a){let b=a?.flow;if(!b||"object"!=typeof b||!Array.isArray(b.nodes)||!Array.isArray(b.edges))return{success:!1,error:"A valid flow to repair is required",statusCode:400};if(!a?.modelId||"string"!=typeof a.modelId)return{success:!1,error:"A repair model id is required",statusCode:400};let c=(0,i.nC)(b),d=c.issues.length>0?`
|
|
42
|
-
|
|
43
|
-
Known problems to fix:
|
|
44
|
-
${w(c.issues)}`:"";return C({flow:b,description:`Repair this flow's wiring so it is runnable, WITHOUT changing any node's prompt, model, or servers:
|
|
45
|
-
- add a Start node if one is missing, connected to the first step;
|
|
46
|
-
- add a Finish node if one is missing, connected from the last step;
|
|
47
|
-
- connect any disconnected process/subflow nodes.
|
|
48
|
-
Read node placement as intent: nodes stacked top-to-bottom are sequential steps, and nodes on the same horizontal line are parallel branches under a shared parent above them.${d}`,modelId:a.modelId,...void 0!==a.allowInstall?{allowInstall:a.allowInstall}:{},...void 0!==a.maxRepairs?{maxRepairs:a.maxRepairs}:{}})}}};
|