flujo-ai 3.18.0 → 3.20.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 +252 -231
- package/.next/app-path-routes-manifest.json +13 -11
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +21 -21
- package/.next/react-loadable-manifest.json +11 -11
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page.js +2 -2
- 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/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/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 +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/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/improve/route.js +1 -1
- package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.js +2 -2
- package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route.js +1 -0
- package/.next/server/app/api/flow/repair/route.js.nft.json +1 -0
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/flow/route.js +1 -1
- package/.next/server/app/api/flow/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route.js +4 -4
- 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/cancel/route.js +2 -2
- package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route.js +2 -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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route.js +1 -1
- package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route.js +2 -2
- package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route.js +1 -1
- package/.next/server/app/api/model/route.js.nft.json +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route.js +2 -2
- package/.next/server/app/api/model/test/route.js.nft.json +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js +2 -2
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route.js +2 -2
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js +2 -2
- package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js +2 -2
- package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/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/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/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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 +8 -7
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +3 -3
- package/.next/server/app/docs/page.js +37 -6
- package/.next/server/app/docs/page.js.nft.json +1 -1
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +3 -3
- package/.next/server/app/executions/page.js +3 -5
- 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 +6 -6
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -5
- package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +3 -3
- package/.next/server/app/models/page.js +2 -3
- 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/page.js +3 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +4 -3
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +3 -3
- package/.next/server/app/v1/chat/completions/route.js +1 -1
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js +3 -3
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -0
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route.js +2 -2
- package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route.js +2 -2
- package/.next/server/app/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +13 -11
- package/.next/server/chunks/{2776.js → 1083.js} +2 -3
- package/.next/server/chunks/1119.js +1 -0
- package/.next/server/chunks/{7731.js → 1152.js} +2 -2
- package/.next/server/chunks/1197.js +2 -0
- package/.next/server/chunks/1373.js +1 -1
- package/.next/server/chunks/1491.js +1 -0
- package/.next/server/chunks/{8460.js → 1991.js} +1 -1
- package/.next/server/chunks/2246.js +1 -0
- package/.next/server/chunks/2261.js +1 -0
- package/.next/server/chunks/227.js +5 -0
- package/.next/server/chunks/2350.js +1 -1
- package/.next/server/chunks/2430.js +1 -0
- package/.next/server/chunks/264.js +1 -1
- package/.next/server/chunks/2859.js +3 -7
- package/.next/server/chunks/289.js +1 -0
- package/.next/server/chunks/3511.js +1 -0
- package/.next/server/chunks/{6069.js → 3574.js} +2 -2
- package/.next/server/chunks/3778.js +42 -0
- package/.next/server/chunks/{8367.js → 38.js} +2 -2
- package/.next/server/chunks/3953.js +1 -0
- package/.next/server/chunks/3984.js +4 -4
- package/.next/server/chunks/4028.js +1 -0
- package/.next/server/chunks/4045.js +1 -0
- package/.next/server/chunks/4265.js +1 -0
- package/.next/server/chunks/4436.js +1 -0
- package/.next/server/chunks/{8227.js → 4456.js} +2 -2
- package/.next/server/chunks/4498.js +40 -0
- package/.next/server/chunks/4637.js +70 -0
- package/.next/server/chunks/4671.js +1 -0
- package/.next/server/chunks/{1912.js → 4690.js} +2 -2
- package/.next/server/chunks/4949.js +1 -0
- package/.next/server/chunks/5625.js +28 -0
- package/.next/server/chunks/{805.js → 5662.js} +2 -2
- package/.next/server/chunks/5708.js +64 -0
- package/.next/server/chunks/5734.js +4 -4
- package/.next/server/chunks/62.js +1 -0
- package/.next/server/chunks/6532.js +52 -0
- package/.next/server/chunks/{6760.js → 6772.js} +1 -1
- package/.next/server/chunks/{6201.js → 6901.js} +3 -2
- package/.next/server/chunks/{9314.js → 6908.js} +3 -3
- package/.next/server/chunks/6981.js +1 -0
- package/.next/server/chunks/6996.js +3 -3
- package/.next/server/chunks/701.js +1 -1
- package/.next/server/chunks/7101.js +64 -0
- package/.next/server/chunks/7214.js +3 -3
- package/.next/server/chunks/724.js +3 -3
- package/.next/server/chunks/7362.js +4 -4
- package/.next/server/chunks/7463.js +6 -0
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7635.js +1 -1
- package/.next/server/chunks/7821.js +1 -1
- package/.next/server/chunks/8739.js +2 -2
- package/.next/server/chunks/9509.js +2 -2
- package/.next/server/chunks/9632.js +1 -0
- package/.next/server/chunks/9957.js +1 -1
- package/.next/server/functions-config-manifest.json +3 -3
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/1161-970b105d0ab11425.js +1 -0
- package/.next/static/chunks/1620-0d8ecd877f123f7b.js +1 -0
- package/.next/static/chunks/1871-14c3e63ca865d85e.js +1 -0
- package/.next/static/chunks/{1892-359187893bbc7f3a.js → 1892-5c1e38d89e0a5a9c.js} +1 -1
- package/.next/static/chunks/3217.058098140ec3f563.js +1 -0
- package/.next/static/chunks/3381-5fd2417957ca0881.js +1 -0
- package/.next/static/chunks/{3545.d3a512315a9fce3e.js → 3545.353a62a68d3b7fd1.js} +1 -1
- package/.next/static/chunks/{2084-2463e1d781bad2a6.js → 3648-733cf7ca4a5d1f19.js} +1 -1
- package/.next/static/chunks/3736-5e2b3f6cda1bb923.js +1 -0
- package/.next/static/chunks/3930-cc8d73c953811b97.js +1 -0
- package/.next/static/chunks/422-268783d9ad5897e1.js +1 -0
- package/.next/static/chunks/4365-5d0e3d01c1bc0fdc.js +1 -0
- package/.next/static/chunks/5134-e21bd33daaf14ecf.js +1 -0
- package/.next/static/chunks/5501-c400aaeaf57e6297.js +1 -0
- package/.next/static/chunks/5619-82fc5c3133837739.js +1 -0
- package/.next/static/chunks/6013-cb423bc438256acb.js +1 -0
- package/.next/static/chunks/6920-a83ad5c0d5a54cf3.js +1 -0
- package/.next/static/chunks/7258-e27017c1b98f43f9.js +1 -0
- package/.next/static/chunks/{7583.b6c2f8874b6b89cd.js → 7583.26a8c1f6e6823daf.js} +1 -1
- package/.next/static/chunks/7687-7edf1a6e1f063b08.js +1 -0
- package/.next/static/chunks/8066-c202a83aef15143a.js +1 -0
- package/.next/static/chunks/{8187.15bf331f5318c00f.js → 8187.fd653767df53db87.js} +1 -1
- package/.next/static/chunks/8755-9f375ec8740fecac.js +1 -0
- package/.next/static/chunks/{9164-a56181e5e93cc47e.js → 9164-f54d3531ca1df5f7.js} +1 -1
- package/.next/static/chunks/{9747-ffb8be5e59700c27.js → 9587-706bfd1a692c4660.js} +3 -3
- package/.next/static/chunks/app/api/backup/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/browse/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/cwd/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/encryption/secure/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/env/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/compile/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/generate/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/improve/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/quick-chat/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/repair/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/flow/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/git/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/init/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/capability/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/pull/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/local-models/suggest/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/cancel/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/servers/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/provider/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/model/test/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/callback/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/initiate/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/oauth/reset/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/planned-executions/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/restore/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/storage/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/update/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/api/webhooks/[id]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/chat/page-a67ad3683443e7ad.js +1 -0
- package/.next/static/chunks/app/docs/page-097827ec4dae1d30.js +1 -0
- package/.next/static/chunks/app/executions/page-cb0dcc66d84c9bf8.js +1 -0
- package/.next/static/chunks/app/flows/page-abdd0642e378c5da.js +1 -0
- package/.next/static/chunks/app/{layout-2878f13d7e253503.js → layout-64fc0ae7efe81e3c.js} +1 -1
- package/.next/static/chunks/app/mcp/page-7d3a269dce68b529.js +1 -0
- package/.next/static/chunks/app/mcp-flows/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/mcp-proxy/[server]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/models/{error-2b00c98abf1e02cf.js → error-5732fbb053e182c5.js} +1 -1
- package/.next/static/chunks/app/models/page-616950f93a1e0027.js +1 -0
- package/.next/static/chunks/app/{page-6e18a8cd78b2050e.js → page-77e1ba238b0ee1d0.js} +1 -1
- package/.next/static/chunks/app/settings/{page-9430dfdaff87d70c.js → page-199d0ffae9ec7263.js} +1 -1
- package/.next/static/chunks/app/v1/chat/completions/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/resources/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/chat/conversations/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/app/v1/models/route-b296683a5faf800a.js +1 -0
- package/.next/static/chunks/webpack-ef5b2cef70829f42.js +1 -0
- package/.next/static/dvSaKx6-EfRNi7Xj-cSv_/_buildManifest.js +1 -0
- package/.next/trace +9 -7
- package/.next/types/app/api/flow/repair/route.ts +347 -0
- package/.next/types/app/v1/chat/conversations/[conversationId]/resources/route.ts +347 -0
- package/.next/types/routes.d.ts +3 -1
- package/.next/types/validator.ts +18 -0
- package/README.md +1 -1
- package/package.json +1 -1
- package/.next/server/chunks/1050.js +0 -1
- package/.next/server/chunks/1403.js +0 -8
- package/.next/server/chunks/2439.js +0 -52
- package/.next/server/chunks/2666.js +0 -1
- package/.next/server/chunks/3310.js +0 -35
- package/.next/server/chunks/453.js +0 -1
- package/.next/server/chunks/4681.js +0 -1
- package/.next/server/chunks/5311.js +0 -1
- package/.next/server/chunks/6037.js +0 -41
- package/.next/server/chunks/6390.js +0 -28
- package/.next/server/chunks/6936.js +0 -37
- package/.next/server/chunks/7186.js +0 -2
- package/.next/server/chunks/7982.js +0 -1
- package/.next/server/chunks/8342.js +0 -1
- package/.next/server/chunks/906.js +0 -35
- package/.next/server/chunks/9687.js +0 -1
- package/.next/server/chunks/9880.js +0 -1
- package/.next/server/chunks/9938.js +0 -1
- package/.next/static/Fdh7zqKv38txmpLAxepeR/_buildManifest.js +0 -1
- package/.next/static/chunks/1374-e084b3c40554288a.js +0 -1
- package/.next/static/chunks/2380-5696e0dc0469f6a5.js +0 -1
- package/.next/static/chunks/2709-29f91a54eef90221.js +0 -1
- package/.next/static/chunks/3217.1a7e24fd70294370.js +0 -1
- package/.next/static/chunks/4105-8fddb00196bf3c6d.js +0 -1
- package/.next/static/chunks/4244-6f399c7ff9980207.js +0 -1
- package/.next/static/chunks/4809-423a2a4a90d02f2c.js +0 -1
- package/.next/static/chunks/6084-68908a197e957e5f.js +0 -1
- package/.next/static/chunks/6509-3380826fd7c82b4e.js +0 -1
- package/.next/static/chunks/6582-6735fdd6b42b5c35.js +0 -1
- package/.next/static/chunks/690-391bc0f482a9f67c.js +0 -1
- package/.next/static/chunks/7290-fd5bb2c94fd7f605.js +0 -1
- package/.next/static/chunks/8098-297bf477152a565b.js +0 -1
- package/.next/static/chunks/924-64f908860caf1a35.js +0 -1
- package/.next/static/chunks/9286-6ea909e5bf70a97e.js +0 -1
- package/.next/static/chunks/9562-93cc45aef3630781.js +0 -1
- package/.next/static/chunks/9984-1ed094ea9f5b1f17.js +0 -1
- package/.next/static/chunks/app/api/backup/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/browse/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/cwd/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/encryption/secure/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/env/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/compile/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/generate/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/improve/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/prompt-renderer/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/quick-chat/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/flow/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/git/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/init/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/capability/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/pull/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/local-models/suggest/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/cancel/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/get/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/prompts/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/read/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/resources/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/status/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/[toolName]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/[name]/tools/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/servers/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp/test-connection/stream/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/mcp-registry/spotlight/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/provider/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/model/test/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/callback/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/initiate/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/oauth/reset/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/run/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/[id]/runs/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/preview-schedule/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/planned-executions/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/restore/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/storage/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/update/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/api/webhooks/[id]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/chat/page-6486974f4a6c7b57.js +0 -1
- package/.next/static/chunks/app/docs/page-5da72cc6db51f238.js +0 -1
- package/.next/static/chunks/app/executions/page-fe19f6a1bd3fe05c.js +0 -1
- package/.next/static/chunks/app/flows/page-3b84093cdf2aee84.js +0 -1
- package/.next/static/chunks/app/mcp/page-355386ec2a542e42.js +0 -1
- package/.next/static/chunks/app/mcp-flows/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/mcp-proxy/[server]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/models/page-20c80d398bf83fc5.js +0 -1
- package/.next/static/chunks/app/v1/chat/completions/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/breakpoints/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/cancel/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/continue/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/debug/step/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/edit-state/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/events/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/respond/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/[conversationId]/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/chat/conversations/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/app/v1/models/route-1691635994fcddb5.js +0 -1
- package/.next/static/chunks/webpack-4880945dd240d429.js +0 -1
- /package/.next/static/{Fdh7zqKv38txmpLAxepeR → dvSaKx6-EfRNi7Xj-cSv_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=4028,exports.ids=[4028],exports.modules={21570:(a,b,c)=>{c.d(b,{A:()=>p});var d=c(21124);c(38301);var e=c(40512),f=c(83899),g=c(81637),h=c(79515),i=c(44079),j=c(91059),k=c(52327),l=c(19925),m=c(68730),n=c(30137),o=c(24330);let p=({open:a,onClose:b,title:c,description:p,maxWidth:q="md",...r})=>(0,d.jsxs)(e.A,{open:a,onClose:b,maxWidth:q,fullWidth:!0,children:[(0,d.jsx)(f.A,{component:"div",children:(0,d.jsxs)(g.default,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[(0,d.jsx)(h.default,{variant:"h6",children:c}),(0,d.jsx)(i.A,{edge:"end",color:"inherit",onClick:b,"aria-label":"close",children:(0,d.jsx)(n.A,{})})]})}),(0,d.jsx)(j.A,{}),(0,d.jsxs)(k.A,{sx:{p:3},children:[p&&(0,d.jsx)(h.default,{variant:"body2",color:"text.secondary",sx:{mb:2},children:p}),(0,d.jsx)(o.A,{...r})]}),(0,d.jsx)(l.A,{children:(0,d.jsx)(m.A,{onClick:b,children:"Cancel"})})]})},24330:(a,b,c)=>{c.d(b,{A:()=>o});var d=c(21124),e=c(38301),f=c(82666),g=c(81637),h=c(37674),i=c(67101),j=c(8521),k=c(79515),l=c(40973),m=c(59737);let n={xs:12,sm:6,md:4},o=({isLoading:a=!1,error:b=null,emptyMessage:c="Nothing to choose from.",loadingMessage:o="Loading…",skeleton:p,skeletonCount:q=4,columns:r=n,items:s,searchable:t=!1,searchPlaceholder:u="Search…",searchTerm:v,onSearchChange:w,groups:x,collapsedKeys:y,onToggleGroup:z})=>{let A={...n,...r},[B,C]=(0,e.useState)(""),D=void 0!==v,E=D?v:B,[F,G]=(0,e.useState)(new Set),H=y??F,I=a=>(0,d.jsx)(f.Ay,{container:!0,spacing:2,alignItems:"stretch",children:a.map(a=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,sx:{display:"flex"},children:(0,d.jsx)(g.default,{sx:{width:"100%"},children:a.content})},a.key))}),J=t?(0,d.jsx)(h.A,{placeholder:u,variant:"outlined",size:"small",fullWidth:!0,value:E,onChange:a=>(a=>{w?.(a),D||C(a)})(a.target.value),sx:{mb:2},InputProps:{startAdornment:(0,d.jsx)(i.A,{position:"start",children:(0,d.jsx)(l.A,{fontSize:"small"})})}}):null,K=a=>(0,d.jsxs)(g.default,{children:[J,a]});if(a)return K(p?(0,d.jsx)(f.Ay,{container:!0,spacing:2,children:Array.from({length:q}).map((a,b)=>(0,d.jsx)(f.Ay,{item:!0,xs:A.xs,sm:A.sm,md:A.md,lg:A.lg,children:p},`skeleton-${b}`))}):(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2},children:[(0,d.jsx)(j.default,{size:20}),(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",children:o})]}));if(b)return K((0,d.jsx)(k.default,{color:"error",variant:"body2",sx:{py:2},children:b}));let L=D?"":E.trim().toLowerCase(),M=a=>!L||(a.searchText??"").toLowerCase().includes(L),N=(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{py:2},children:c});if(x){let a=x.map(a=>({...a,items:a.items.filter(M)})).filter(a=>a.items.length>0);return K(0===a.length?N:(0,d.jsx)(d.Fragment,{children:a.map(a=>(0,d.jsx)(m.A,{label:a.label,count:a.items.length,expanded:!H.has(a.key),onToggle:()=>(a=>{if(z)return void z(a);G(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})})(a.key),children:I(a.items)},a.key))}))}let O=(s??[]).filter(M);return K(0===O.length?N:I(O))}},63281:(a,b,c)=>{c.d(b,{g:()=>g});var d=c(2117);let e=(0,c(19815).h)("frontend/services/flow/index");class f{async loadFlows(){e.debug("loadFlows: Entering method");try{if(this.flowsCache)return e.debug("loadFlows: Using cached flows",{count:this.flowsCache.length}),this.flowsCache;let a=await fetch("/api/flow");if(!a.ok){let b=await a.json();throw Error(b.error||"Failed to load flows")}let b=await a.json();return e.debug("loadFlows: Loaded flows from API",{count:b.length}),this.flowsCache=b,b}catch(a){return e.warn("loadFlows: Failed to load flows:",a),[]}}async getFlow(a){e.debug("getFlow: Entering method",{flowId:a});try{if(this.flowsCache){let b=this.flowsCache.find(b=>b.id===a);if(b)return e.debug("getFlow: Using cached flow",{flowId:a}),b}let b=await fetch(`/api/flow/${encodeURIComponent(a)}`);if(!b.ok){if(404===b.status)return e.debug(`getFlow: Flow ${a} not found`),null;let c=await b.json();throw Error(c.error||`Failed to get flow: ${a}`)}let c=await b.json();return e.debug("getFlow: Retrieved flow from API",{flowId:a}),c}catch(b){return e.warn(`getFlow: Failed to get flow ${a}:`,b),null}}async addFlow(a){e.debug("addFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch("/api/flow",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to add flow"}}let c=await b.json();return this.flowsCache&&this.flowsCache.push(c),e.debug("addFlow: Flow added successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("addFlow: Failed to add flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to add flow"}}}async generateFlow(a,b,c){e.debug("generateFlow: Entering method",{modelId:b,allowInstall:c?.allowInstall,allowSubflows:c?.allowSubflows,maxDepth:c?.maxDepth});try{let d=await fetch("/api/flow/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:a,modelId:b,allowInstall:c?.allowInstall===!0,allowSubflows:c?.allowSubflows===!0,..."number"==typeof c?.maxDepth?{maxDepth:c.maxDepth}:{}})}),f=await d.json().catch(()=>null);if(!d.ok)return{success:!1,error:f?.error||"Failed to generate flow"};let g=Array.isArray(f.flows)&&f.flows.length>0?f.flows:[{flow:f.flow,validation:f.validation}];return e.debug("generateFlow: Draft generated",{flowId:f.flow?.id,flowCount:g.length,attempts:f.attempts,errorCount:f.validation?.errorCount,installedServers:f.installedServers?.length??0}),{success:!0,flow:f.flow,validation:f.validation,flows:g,rootFlowId:f.rootFlowId??f.flow?.id,attempts:f.attempts,installedServers:f.installedServers??[]}}catch(a){return e.warn("generateFlow: Failed to generate flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to generate flow"}}}async improveFlow(a,b,c,d){e.debug("improveFlow: Entering method",{flowId:a?.id,modelId:c,allowInstall:d?.allowInstall});try{let f=await fetch("/api/flow/improve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({flow:a,description:b,modelId:c,allowInstall:d?.allowInstall===!0})}),g=await f.json().catch(()=>null);if(!f.ok)return{success:!1,error:g?.error||"Failed to improve flow"};return e.debug("improveFlow: Draft revised",{flowId:g.flow?.id,attempts:g.attempts,errorCount:g.validation?.errorCount,installedServers:g.installedServers?.length??0}),{success:!0,flow:g.flow,validation:g.validation,attempts:g.attempts,installedServers:g.installedServers??[]}}catch(a){return e.warn("improveFlow: Failed to improve flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to improve flow"}}}async updateFlow(a){e.debug("updateFlow: Entering method",{flowId:a.id,flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length});try{let b=await fetch(`/api/flow/${encodeURIComponent(a.id)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to update flow"}}let c=await b.json();if(this.flowsCache){let b=this.flowsCache.findIndex(b=>b.id===a.id);b>=0?this.flowsCache[b]=c:this.flowsCache.push(c)}return e.debug("updateFlow: Flow updated successfully",{flowId:a.id}),{success:!0}}catch(a){return e.warn("updateFlow: Failed to update flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to update flow"}}}async deleteFlow(a){e.debug("deleteFlow: Entering method",{flowId:a});try{let b=await fetch(`/api/flow/${encodeURIComponent(a)}`,{method:"DELETE"});if(!b.ok){let a=await b.json();return{success:!1,error:a.error||"Failed to delete flow"}}return this.flowsCache&&(this.flowsCache=this.flowsCache.filter(b=>b.id!==a)),e.debug("deleteFlow: Flow deleted successfully",{flowId:a}),{success:!0}}catch(a){return e.warn("deleteFlow: Failed to delete flow:",a),{success:!1,error:a instanceof Error?a.message:"Failed to delete flow"}}}createNode(a,b){return e.debug("createNode: Entering method",{type:a,position:b}),{id:(0,d.A)(),type:a,position:b,data:{label:`${"mcp"===a?"MCP":a.charAt(0).toUpperCase()+a.slice(1)} Node`,type:a,properties:{}}}}createStartNode(){return{id:(0,d.A)(),type:"start",position:{x:250,y:150},data:{label:"Start Node",type:"start",properties:{promptTemplate:""}}}}createNewFlow(a="NewFlow"){return e.debug("createNewFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[this.createStartNode()],edges:[]}}createHistoryEntry(a,b){return e.debug("createHistoryEntry: Entering method"),{nodes:[...a],edges:[...b]}}generateSampleFlow(a="Sample Flow"){return e.debug("generateSampleFlow: Entering method",{name:a}),{id:(0,d.A)(),name:a,nodes:[{id:"1",type:"start",position:{x:250,y:50},data:{label:"Start Node",type:"start",properties:{prompt:"Enter your query here",systemMessage:"You are a helpful assistant",temperature:0}}},{id:"2",type:"process",position:{x:250,y:200},data:{label:"Process Node",type:"process",properties:{operation:"transform",enabled:!0}}},{id:"3",type:"finish",position:{x:250,y:350},data:{label:"Finish Node",type:"finish",properties:{format:"json",template:'{ "result": {{data}} }'}}},{id:"4",type:"mcp",position:{x:450,y:200},data:{label:"MCP Node",type:"mcp",properties:{channels:2,mode:"parallel"}}}],edges:[{id:"e1-2",source:"1",target:"2",type:"custom"},{id:"e2-3",source:"2",target:"3",type:"custom"}]}}constructor(){this.flowsCache=null}}let g=new f}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=4045,exports.ids=[4045],exports.modules={8070:(a,b,c)=>{c.d(b,{IK:()=>L,M6:()=>D,Uw:()=>K,lA:()=>N,nH:()=>v,v2:()=>M,vm:()=>J,z9:()=>O});var d=c(21124),e=c(38301),f=c(95791),g=c(46973),h=c(18168),i=c(60839),j=c(54573),k=c(81637),l=c(79515),m=c(44079),n=c(99561),o=c(48823),p=c(98540),q=c(83144),r=c(88970),s=c(87351),t=c(17332),u=c(63908);let v="#009688",w={start:{main:()=>"#795548",light:()=>"#A1887F"},process:{main:a=>a.palette.secondary.main,light:a=>a.palette.secondary.light},finish:{main:a=>a.palette.success.main,light:a=>a.palette.success.light},mcp:{main:a=>a.palette.info.main,light:a=>a.palette.info.light},subflow:{main:a=>a.palette.warning.main,light:a=>a.palette.warning.light},resource:{main:()=>v,light:()=>"#4DB6AC"}},x=(a,b)=>(w[a]??w.start).main(b),y=(0,h.Ay)(j.A,{shouldForwardProp:a=>!["nodeType","selected"].includes(a)})(({theme:a,nodeType:b,selected:c})=>({padding:a.spacing(1.5),width:"200px",borderRadius:"8px",backgroundColor:a.palette.background.paper,border:`2px solid ${x(b,a)}`,boxShadow:c?`0 0 0 2px ${a.palette.primary.main}, 0 3px 10px rgba(0,0,0,0.2)`:a.shadows[2],transition:"all 0.2s ease","&:hover":{boxShadow:`0 0 0 1px ${x(b,a)}, 0 3px 10px rgba(0,0,0,0.1)`}})),z=(0,h.Ay)(k.default,{shouldForwardProp:a=>"nodeType"!==a})(({theme:a,nodeType:b})=>({display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${(w[b]??w.start).light(a)}`,marginBottom:a.spacing(1),paddingBottom:a.spacing(.5)})),A=(0,h.Ay)(k.default)({display:"flex",alignItems:"center",gap:"8px"}),B=(0,h.Ay)(k.default)(({theme:a})=>({marginTop:a.spacing(1),fontSize:"0.8rem"})),C=(0,h.Ay)(k.default)(({theme:a})=>({display:"flex",justifyContent:"space-between",padding:a.spacing(.5,0),borderBottom:`1px dashed ${"dark"===a.palette.mode?"rgba(255,255,255,0.1)":"rgba(0,0,0,0.1)"}`})),D=(a,b)=>x(a,b),E=a=>({backgroundColor:a.palette.info.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),F=a=>({backgroundColor:a.palette.secondary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),G=a=>({backgroundColor:a.palette.primary.main,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),H=a=>({backgroundColor:v,borderColor:"dark"===a.palette.mode?a.palette.background.paper:"white",width:16,height:16,borderRadius:8,borderWidth:2}),I=({data:a,nodeType:b,selected:c})=>{let h=(0,i.A)(),[j,k]=(0,e.useState)(!1),w=a||{label:"No Label",properties:{}},x="string"==typeof w.label?w.label:"No Label",D=w.properties||{},I=Object.keys(D).length;return(0,d.jsx)(d.Fragment,{children:(0,d.jsxs)(y,{elevation:2,nodeType:b,selected:c,children:[(()=>{if("mcp"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"mcp-top",type:"target",position:g.yX.Top,style:E(h)}),(0,d.jsx)(f.h7,{id:"mcp-right",type:"target",position:g.yX.Right,style:E(h)}),(0,d.jsx)(f.h7,{id:"mcp-bottom",type:"source",position:g.yX.Bottom,style:E(h)}),(0,d.jsx)(f.h7,{id:"mcp-left",type:"target",position:g.yX.Left,style:E(h)})]});if("process"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"process-top",type:"target",position:g.yX.Top,style:F(h)}),(0,d.jsx)(f.h7,{id:"process-bottom",type:"source",position:g.yX.Bottom,style:F(h)}),(0,d.jsx)(f.h7,{id:"process-left-mcp",type:"source",position:g.yX.Left,style:{...G(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-right-mcp",type:"source",position:g.yX.Right,style:{...G(h),top:"30%"}}),(0,d.jsx)(f.h7,{id:"process-left-resource",type:"target",position:g.yX.Left,style:{...H(h),top:"70%"}}),(0,d.jsx)(f.h7,{id:"process-right-resource",type:"source",position:g.yX.Right,style:{...H(h),top:"70%"}})]});if("resource"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"resource-in",type:"target",position:g.yX.Left,style:H(h)}),(0,d.jsx)(f.h7,{id:"resource-out",type:"source",position:g.yX.Right,style:H(h)})]});if("start"===b)return(0,d.jsx)(f.h7,{id:"start-bottom",type:"source",position:g.yX.Bottom,style:F(h)});if("finish"===b)return(0,d.jsx)(f.h7,{id:"finish-top",type:"target",position:g.yX.Top,style:F(h)});else if("subflow"===b)return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.h7,{id:"subflow-top",type:"target",position:g.yX.Top,style:F(h)}),(0,d.jsx)(f.h7,{id:"subflow-bottom",type:"source",position:g.yX.Bottom,style:F(h)})]});return null})(),(0,d.jsxs)(z,{nodeType:b,children:[(0,d.jsxs)(A,{children:[(a=>{switch(a){case"start":default:return(0,d.jsx)(o.A,{sx:{color:"#795548"}});case"process":return(0,d.jsx)(p.A,{color:"secondary"});case"finish":return(0,d.jsx)(q.A,{color:"success"});case"mcp":return(0,d.jsx)(p.A,{color:"info"});case"subflow":return(0,d.jsx)(r.A,{sx:{color:"warning.main"}});case"resource":return(0,d.jsx)(s.A,{sx:{color:v}})}})(b),(0,d.jsx)(l.default,{variant:"subtitle2",fontWeight:"bold",children:x})]}),I>0&&(0,d.jsx)(m.A,{size:"small",onClick:a=>{a.stopPropagation(),k(!j)},sx:{padding:.5},children:j?(0,d.jsx)(u.A,{fontSize:"small"}):(0,d.jsx)(t.A,{fontSize:"small"})})]}),(0,d.jsx)(n.A,{in:j,children:(0,d.jsx)(B,{children:Object.entries(D).map(([a,b])=>(0,d.jsxs)(C,{children:[(0,d.jsxs)(l.default,{variant:"caption",sx:{fontWeight:"bold"},children:[a,":"]}),(0,d.jsxs)(l.default,{variant:"caption",children:[String(b).substring(0,30),String(b).length>30?"...":""]})]},a))})}),I>0&&!j&&(0,d.jsx)(l.default,{variant:"caption",color:"text.secondary",children:`${I} properties configured`})]})})},J=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"start",selected:a.selected})}),K=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"process",selected:a.selected})}),L=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"finish",selected:a.selected})}),M=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"mcp",selected:a.selected})}),N=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"subflow",selected:a.selected})}),O=(0,e.memo)(function(a){return(0,d.jsx)(I,{...a,nodeType:"resource",selected:a.selected})})},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}}},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"})},39438:(a,b,c)=>{c.d(b,{A:()=>E,o:()=>D});var d=c(21124),e=c(38301),f=c(18168),g=c(30818),h=c(81637),i=c(37489),j=c(60839),k=c(79515),l=c(43312),m=c(423),n=c(27114),o=c(41893),p=c(98463),q=c(44079),r=c(72197),s=c(91034),t=c(38941),u=c(12033),v=c(1312),w=c(22797),x=c(21358),y=c(8070),z=c(78352);let A=(0,c(19815).h)("components/Flow/FlowDashboard/FlowCard"),B=(0,f.Ay)(g.A,{shouldForwardProp:a=>"selected"!==a})(({theme:a,selected:b})=>({display:"flex",flexDirection:"column",height:"100%",transition:"all 0.3s cubic-bezier(0.4, 0, 0.2, 1)",position:"relative",border:b?`2px solid ${a.palette.primary.main}`:"none",boxShadow:b?a.shadows[4]:a.shadows[1],"&:hover":{boxShadow:a.shadows[6],transform:"translateY(-4px)"},"&::before":b?{content:'""',position:"absolute",top:0,left:0,width:"100%",height:"4px",backgroundColor:a.palette.primary.main}:{}})),C=(0,f.Ay)(h.default)(({theme:a})=>({height:"140px",backgroundColor:(0,i.X4)(a.palette.background.default,.7),borderRadius:a.shape.borderRadius,display:"flex",alignItems:"center",justifyContent:"center",margin:a.spacing(1),overflow:"hidden",position:"relative"})),D=()=>(0,d.jsxs)(g.A,{sx:{height:"100%",display:"flex",flexDirection:"column"},children:[(0,d.jsx)(h.default,{sx:{p:1},children:(0,d.jsx)(r.A,{variant:"rectangular",height:140})}),(0,d.jsxs)(n.A,{sx:{flexGrow:1},children:[(0,d.jsx)(r.A,{variant:"text",width:"80%",height:30}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:1,mt:1},children:[(0,d.jsx)(r.A,{variant:"rectangular",width:60,height:20}),(0,d.jsx)(r.A,{variant:"rectangular",width:90,height:20})]})]}),(0,d.jsxs)(p.A,{sx:{justifyContent:"flex-end",p:1},children:[(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28}),(0,d.jsx)(r.A,{variant:"circular",width:28,height:28})]})]}),E=({flow:a,selected:b,onSelect:c,onDelete:f,onCopy:g,onEdit:i,onSetFolder:r,folders:D=[],validation:E,pickerMode:F=!1})=>{A.debug("Rendering FlowCard",{flowId:a.id,flowName:a.name});let G=(0,j.A)(),[H,I]=(0,e.useState)(null),J=E?.errorCount??0,K=E?.warningCount??0,L=J>0?"error":K>0?"warning":null,M=E?(0,d.jsxs)(h.default,{children:[(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:600,display:"block",mb:.5},children:J>0?`${J} problem${1===J?"":"s"} — won't run`:`${K} warning${1===K?"":"s"}`}),E.issues.slice(0,5).map((a,b)=>(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block"},children:["• ",a.message]},b)),E.issues.length>5&&(0,d.jsxs)(k.default,{variant:"caption",sx:{display:"block",fontStyle:"italic"},children:["…and ",E.issues.length-5," more"]})]}):null;return(0,d.jsxs)(B,{selected:b,children:[L&&(0,d.jsx)(l.A,{title:M,arrow:!0,placement:"top",children:(0,d.jsxs)(h.default,{sx:{position:"absolute",top:8,right:8,zIndex:2,display:"flex",alignItems:"center",gap:.5,px:.75,py:.25,borderRadius:1,color:"#fff",backgroundColor:"error"===L?G.palette.error.main:G.palette.warning.main,boxShadow:G.shadows[2],pointerEvents:"auto"},children:["error"===L?(0,d.jsx)(w.A,{sx:{fontSize:16}}):(0,d.jsx)(x.A,{sx:{fontSize:16}}),(0,d.jsx)(k.default,{variant:"caption",sx:{fontWeight:700,lineHeight:1},children:"error"===L?J:K})]})}),(0,d.jsxs)(m.A,{onClick:()=>c(a.id),sx:{display:"flex",flexDirection:"column",alignItems:"stretch",height:"100%",position:"relative"},children:[(0,d.jsx)(C,{children:(()=>{if(0===a.nodes.length)return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"},children:(0,d.jsx)(k.default,{color:"textSecondary",align:"center",children:"Empty Flow"})});let b=a.nodes.map(a=>a.position?.x??0),c=a.nodes.map(a=>a.position?.y??0),e=Math.min(...b),f=Math.min(...c),g=Math.max(...b)+180,i=Math.max(...c)+70,j=`${e-40} ${f-40} ${g-e+80} ${i-f+80}`,l=a=>({cx:(a.position?.x??0)+90,cy:(a.position?.y??0)+35});return(0,d.jsx)(h.default,{sx:{width:"100%",height:"100%",p:1},children:(0,d.jsxs)("svg",{width:"100%",height:"100%",viewBox:j,preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.edges.map((b,c)=>{let e=a.nodes.find(a=>a.id===b.source),f=a.nodes.find(a=>a.id===b.target);if(!e||!f)return null;let g=l(e),h=l(f);return(0,d.jsx)("line",{x1:g.cx,y1:g.cy,x2:h.cx,y2:h.cy,stroke:G.palette.text.secondary,strokeWidth:2,opacity:.5,vectorEffect:"non-scaling-stroke"},b.id||c)}),a.nodes.map(a=>{let b=a.position?.x??0,c=a.position?.y??0,e=a.data?.type??"process",f=(0,y.M6)(e,G);return(0,d.jsxs)("g",{children:[(0,d.jsx)("rect",{x:b,y:c,width:180,height:70,rx:12,fill:f,opacity:.85,stroke:G.palette.background.paper,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),(0,d.jsx)("text",{x:b+90,y:c+35,textAnchor:"middle",dominantBaseline:"central",fill:"#fff",fontSize:35,fontWeight:"bold",children:e.substring(0,1).toUpperCase()})]},a.id)})]})})})()}),(0,d.jsxs)(n.A,{sx:{flexGrow:1,pb:0},children:[(0,d.jsx)(k.default,{variant:"h6",component:"div",noWrap:!0,children:a.name}),a.description&&(0,d.jsx)(l.A,{title:a.description,placement:"bottom-start",children:(0,d.jsx)(k.default,{variant:"body2",color:"text.secondary",sx:{mt:.5,display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:a.description})}),(0,d.jsxs)(h.default,{sx:{display:"flex",gap:.5,mt:1,flexWrap:"wrap"},children:[(0,d.jsx)(o.A,{size:"small",label:`${a.nodes.length} nodes`,color:"primary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}}),(0,d.jsx)(o.A,{size:"small",label:`${a.edges.length} connections`,color:"secondary",variant:"outlined",sx:{fontSize:"0.7rem",height:20}})]})]})]}),!F&&(0,d.jsxs)(p.A,{sx:{justifyContent:"flex-end",p:1,opacity:.7,"&:hover":{opacity:1}},children:[i&&(0,d.jsx)(l.A,{title:"Edit flow metadata",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),i&&i(a.id)},children:(0,d.jsx)(u.A,{fontSize:"small"})})}),g&&(0,d.jsx)(l.A,{title:"Copy flow",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),g&&g(a.id)},children:(0,d.jsx)(t.A,{fontSize:"small"})})}),r&&(0,d.jsx)(l.A,{title:a.folder?`Folder: ${a.folder}`:"Move to folder",children:(0,d.jsx)(q.A,{size:"small",onClick:a=>{a.stopPropagation(),I(a.currentTarget)},color:a.folder?"primary":"default",children:(0,d.jsx)(v.A,{fontSize:"small"})})}),f&&(0,d.jsx)(l.A,{title:"Delete flow",children:(0,d.jsx)(q.A,{size:"small",onClick:b=>{b.stopPropagation(),f&&f(a.id)},color:"error",children:(0,d.jsx)(s.A,{fontSize:"small"})})})]}),!F&&r&&(0,d.jsx)(z.A,{anchorEl:H,open:!!H,currentFolder:a.folder,folders:D,onClose:()=>I(null),onAssign:b=>r(a.id,b)})]})}},97004:(a,b,c)=>{c.d(b,{R:()=>k,A:()=>o});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"}let k="flowEdgeWaypoint",l={x:16,y:-16},m=(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}})),n=(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}}}),o=({variant:a,id:b,sourceX:c,sourceY:h,targetX:o,targetY:p,sourcePosition:q,targetPosition:r,style:s={},markerEnd:t,markerStart:u,data:v,selected:w})=>{let x,y,z=(0,i.A)(),{deleteElements:A,screenToFlowPosition:B}=(0,f.VH)(),[C,D]=(0,e.useState)(!1),[E,F]=(0,e.useState)(null),G=(0,e.useRef)(null),H=(0,e.useRef)(!1),I=v?.waypoints??(v?.waypoint?[v.waypoint]:[]),J=E??I,K="standard"===a&&!!v?.bidirectional,L="mcp"===a||"resource"===a,M=q||(L?g.yX.Left:g.yX.Bottom),N=r||(L?g.yX.Right:g.yX.Top),O=null;if(J.length>0)x=(O=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:c,y:h},j(M),{x:o,y:p},j(N),J,16)).d,y=O.midpoint;else{let[a,b,d]=(0,g.oN)({sourceX:c,sourceY:h,sourcePosition:M,targetX:o,targetY:p,targetPosition:N,borderRadius:16});x=a,y={x:b,y:d}}let P=L?"":K?"animated-both":v?.animated!==!1?"animated":"",Q={...s,strokeWidth:w?3:2,stroke:"mcp"===a?w?z.palette.info.light:z.palette.info.main:"resource"===a?w?"#4DB6AC":"#009688":w?z.palette.primary.main:z.palette.text.secondary,...P?{animationDuration:`${Math.round((K?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`}:{}},R=a=>{document.dispatchEvent(new CustomEvent(k,{detail:{edgeId:b,waypoints:a&&a.length>0?a:null}}))},S=a=>{if(0!==a.button)return;let b=B({x:a.clientX,y:a.clientY}),c=O?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,O.segments):0,d=[...J];d.splice(c,0,b),G.current={index:c,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:d,active:!1,fromPath:!0},a.target.setPointerCapture(a.pointerId)},T=a=>{let b=G.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]=B({x:a.clientX,y:a.clientY}),F(c)},U=a=>{let b=G.current;if(!b||a.pointerId!==b.pointerId||(G.current=null,a.target.releasePointerCapture(a.pointerId),H.current=b.active,!b.active))return;let c=[...b.base];c[b.index]=B({x:a.clientX,y:a.clientY}),R(c),F(null)},V=null!==E,W=w||C||V;return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n,{path:x,markerEnd:t,markerStart:u,style:Q,id:b,className:P}),(0,d.jsx)("path",{d:x,fill:"none",stroke:"transparent",strokeWidth:20,style:{cursor:V?"grabbing":"grab"},onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onPointerDown:S,onPointerMove:T,onPointerUp:U}),(0,d.jsxs)(f.rV,{children:[W&&J.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:z.palette.primary.main,border:`2px solid ${z.palette.background.paper}`,boxShadow:z.shadows[1],cursor:"move",pointerEvents:"all",touchAction:"none",zIndex:1001},className:"nodrag nopan",title:"Drag to move; double-click to remove this bend",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),onPointerDown:a=>{0===a.button&&(a.stopPropagation(),G.current={index:b,pointerId:a.pointerId,startClient:{x:a.clientX,y:a.clientY},base:[...J],active:!1,fromPath:!1},a.target.setPointerCapture(a.pointerId))},onPointerMove:T,onPointerUp:U,onDoubleClick:a=>{a.stopPropagation(),(a=>{let b=J.filter((b,c)=>c!==a);F(null),R(b)})(b)}},b)),(0,d.jsx)("div",{style:{position:"absolute",transform:`translate(-50%, -50%) translate(${y.x+l.x}px,${y.y+l.y}px)`,pointerEvents:W&&!V?"all":"none",opacity:W&&!V?1:0,transition:"opacity 120ms ease",zIndex:1e3},className:"nodrag nopan",onMouseEnter:()=>D(!0),onMouseLeave:()=>D(!1),children:(0,d.jsx)(m,{title:"Delete connection (drag to re-route)",style:{touchAction:"none"},onPointerDown:S,onPointerMove:T,onPointerUp:U,onClick:a=>{if(a.stopPropagation(),H.current){H.current=!1;return}A({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}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=4265,exports.ids=[4265],exports.modules={14265:(a,b,c)=>{let d;c.d(b,{LG:()=>T,aM:()=>S,a$:()=>Q,e3:()=>O});var e=c(50846),f=c(8665),g=c(25250),h=c(23514),i=c(92372);let j=(0,e.h)("backend/services/mcp/quality/cache"),k="mcp-quality-cache";class l{constructor(a=Date.now()){this.entries={},this.dirty=!1,this.now=a}async load(){try{let a=await (0,i.YM)(k,{entries:{}});this.entries=a?.entries&&"object"==typeof a.entries?a.entries:{}}catch(a){j.warn("Failed to load quality cache; starting empty",a),this.entries={}}}get(a,b){let c=this.entries[`${a}::${b}`];if(c&&!(this.now-c.at>864e5))return c.signal}set(a,b,c){this.entries[`${a}::${b}`]={at:this.now,signal:c},this.dirty=!0}async flush(){let a=!1;for(let[b,c]of Object.entries(this.entries))this.now-c.at>864e5&&(delete this.entries[b],a=!0);if(this.dirty||a)try{await (0,i.VH)(k,{entries:this.entries})}catch(a){j.warn("Failed to persist quality cache",a)}}}function m(a){return!Number.isFinite(a)||a<0?0:a>1?1:a}function n(a,b){return!Number.isFinite(a)||a<=0?0:!Number.isFinite(b)||b<=1?+(a>0):m(Math.log10(a+1)/Math.log10(b+1))}let o=(0,e.h)("backend/services/mcp/quality/providers/githubStars"),p="github",q=new Map;function r(){return d??(process.env.GITHUB_TOKEN||void 0)}function s(a){let b,c=a.server.repository;if(c?.source&&"github"!==c.source.toLowerCase())return null;var d=c?.url;if(!d)return null;try{b=new URL(d.replace(/^git\+/,""))}catch{return null}if(!/(^|\.)github\.com$/i.test(b.hostname))return null;let e=b.pathname.replace(/\.git$/i,"").split("/").filter(Boolean);return e.length<2?null:`${e[0]}/${e[1]}`.toLowerCase()}async function t(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.github.com${a}`,{headers:function(){let a={Accept:"application/vnd.github+json","User-Agent":"FLUJO-mcp-quality","X-GitHub-Api-Version":"2022-11-28"},b=r();return b&&(a.Authorization=`Bearer ${b}`),a}(),signal:c.signal,cache:"no-store"})}catch(b){return o.warn(`GitHub request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}function u(a){return(403===a.status||429===a.status)&&"0"===a.headers.get("x-ratelimit-remaining")}let v=(0,e.h)("backend/services/mcp/quality/providers/npmDownloads"),w="npm-downloads",x=new Map;function y(a){for(let b of a.server.packages??[])if("npm"===b.registryType&&b.identifier)return b.identifier;return null}function z(a){return a.startsWith("@")}async function A(a,b){let c=new AbortController,d=()=>c.abort();b.addEventListener("abort",d,{once:!0});let e=setTimeout(()=>c.abort(),6e3);try{return await fetch(`https://api.npmjs.org${a}`,{signal:c.signal,cache:"no-store"})}catch(b){return v.warn(`npm request failed (${a})`,b instanceof Error?b.message:b),null}finally{clearTimeout(e),b.removeEventListener("abort",d)}}let B="registry-status",C=[{id:p,label:"GitHub Stars & Activity",defaultWeight:.5,isApplicable:a=>null!==s(a),cacheKey:a=>s(a),async prefetch(a,b,c){let d=`${a??""} mcp`.trim(),e=`/search/repositories?q=${encodeURIComponent(d)}&sort=stars&order=desc&per_page=50`,f=await t(e,c);if(f&&f.ok)try{for(let a of(await f.json()).items??[])a.full_name&&q.set(a.full_name.toLowerCase(),{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch(a){o.warn("Failed to parse GitHub search response",a)}else if(f&&u(f))return void o.warn("GitHub search rate-limited; ranking will degrade to other providers");if(!r())return;let g=3;for(let a of b){if(g<=0)break;let b=s(a);if(!b||q.has(b))continue;g-=1;let d=await t(`/repos/${b}`,c);if(d){if(u(d))break;if(d.ok)try{let a=await d.json();q.set(b,{stars:"number"==typeof a.stargazers_count?a.stargazers_count:0,pushedAtMs:a.pushed_at?Date.parse(a.pushed_at):null})}catch{}}}},async fetch(a){let b=s(a);if(!b)return null;let c=q.get(b);if(!c)return null;let d=n(c.stars,5e4),e=function(a,b,c=30,d=730){if(!a||!Number.isFinite(a))return 0;let e=(b-a)/864e5;return e<=c?1:e>=d?0:m(1-(e-c)/(d-c))}(c.pushedAtMs,Date.now());return{providerId:p,score:m(.7*d+.3*e),evidence:{repo:b,stars:c.stars,...c.pushedAtMs?{pushedAt:new Date(c.pushedAtMs).toISOString()}:{},starsScore:d,recencyScore:e}}}},{id:w,label:"npm Weekly Downloads",defaultWeight:.35,isApplicable:a=>null!==y(a),cacheKey:a=>y(a),async prefetch(a,b,c){let d=b.map(y).filter(a=>!!a&&!x.has(a)),e=d.filter(a=>!z(a)),f=d.filter(z);for(let a=0;a<e.length;a+=100){let b=e.slice(a,a+100),d=await A(`/downloads/point/last-week/${b.join(",")}`,c);if(d&&d.ok)try{let a=await d.json();if(1===b.length)"number"==typeof a.downloads&&x.set(b[0],a.downloads);else for(let c of b){let b=a[c];x.set(c,b&&"number"==typeof b.downloads?b.downloads:0)}}catch(a){v.warn("Failed to parse npm bulk downloads response",a)}}for(let a of f){let b=await A(`/downloads/point/last-week/${a}`,c);if(b&&b.ok)try{let c=await b.json();"number"==typeof c.downloads&&x.set(a,c.downloads)}catch{}}},async fetch(a){let b=y(a);if(!b)return null;let c=x.get(b);return void 0===c?null:{providerId:w,score:n(c,1e6),evidence:{package:b,weeklyDownloads:c}}}},{id:B,label:"Registry Status",defaultWeight:.15,isApplicable:a=>!0,cacheKey:()=>null,fetch:async a=>({providerId:B,score:+("active"===a.verificationStatus),evidence:{status:a.verificationStatus}})}];var D=c(46480);let E=(0,e.h)("backend/services/mcp/quality/settings");function F(){return{providers:C.map(a=>({id:a.id,enabled:!0,weight:a.defaultWeight})),minScore:0,worksGate:!0}}async function G(){try{let a=await (0,i.YM)(D.Z.MCP_QUALITY_SETTINGS,F());return function(a){var b,c;let d=F(),e=a??{},f=new Map;if(Array.isArray(e.providers))for(let a of e.providers)a&&"string"==typeof a.id&&f.set(a.id,a);return{providers:d.providers.map(a=>{let b=f.get(a.id);return{id:a.id,enabled:"boolean"==typeof b?.enabled?b.enabled:a.enabled,weight:"number"==typeof b?.weight&&Number.isFinite(b.weight)&&b.weight>=0?b.weight:a.weight}}),minScore:(b=e.minScore,c=d.minScore,"number"==typeof b&&Number.isFinite(b)?Math.min(1,Math.max(0,b)):c),worksGate:"boolean"==typeof e.worksGate?e.worksGate:d.worksGate,..."string"==typeof e.githubToken&&e.githubToken.length>0?{githubToken:e.githubToken}:{}}}(a)}catch(a){return E.warn("Failed to load mcpQuality settings; using defaults",a),F()}}let H=(0,e.h)("backend/services/mcp/quality/orchestrator");async function I(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),b);try{return await a(c.signal)}finally{clearTimeout(d)}}async function J(a,b,c={}){let e=c.topN??10;try{var f;let g=c.settings??await G(),h=C.filter(a=>(function(a,b){let c=a.providers.find(a=>a.id===b);return!!c?.enabled})(g,a.id));if(0===h.length)return b.map(a=>({candidate:a,score:0,signals:[]}));d=(f=g.githubToken)&&f.length>0?f:void 0;let i=b.slice(0,e),j=b.slice(e),k=new l(c.now??Date.now());await k.load();let n=i.map(()=>[]);for(let b of h){let c=i.map((a,b)=>({c:a,i:b})).filter(({c:a})=>b.isApplicable(a)),d=[],e=[];for(let a of c){let c=b.cacheKey(a.c);if(c){let d=k.get(b.id,c);if(d){e.push({i:a.i,signal:d});continue}}d.push(a)}if(b.prefetch&&d.length>0)try{await I(c=>b.prefetch(a,d.map(a=>a.c),c),12e3)}catch(a){H.warn(`Provider "${b.id}" prefetch failed; degrading`,a)}for(let{c:a,i:c}of d)try{let d=await I(c=>b.fetch(a,c),2e3);if(d){n[c].push(d);let e=b.cacheKey(a);e&&k.set(b.id,e,d)}}catch(c){H.warn(`Provider "${b.id}" fetch failed for "${a.registryName}"`,c)}for(let{i:a,signal:b}of e)n[a].push(b)}await k.flush();let o=i.map((a,b)=>{let c=n[b],d=new Map(c.map(a=>[a.providerId,a])),e=h.filter(b=>b.isApplicable(a)).map(a=>({providerId:a.id,weight:function(a,b){let c=a.providers.find(a=>a.id===b);return c&&c.enabled?c.weight:0}(g,a.id),score:d.get(a.id)?.score??0})),{score:f}=function(a){let b=0,c=0;for(let d of a){let a=Number.isFinite(d.weight)&&d.weight>0?d.weight:0,e=m(d.score);b+=a,c+=a*e}return{score:b>0?c/b:0,breakdown:a}}(e);return{candidate:a,score:f,signals:c}}).map((a,b)=>({s:a,idx:b})).sort((a,b)=>b.s.score-a.s.score||a.idx-b.idx).map(a=>a.s),p=j.map(a=>({candidate:a,score:0,signals:[]}));return[...o,...p]}catch(a){return H.warn("enrichAndRank failed; returning unranked candidates",a),b.map(a=>({candidate:a,score:0,signals:[]}))}}let K=(0,e.h)("backend/services/mcp/registryInstall"),L="/v0.1/servers";function M(a){return{registryName:a.server.name,server:a.server,verificationStatus:(0,g.vf)(a)}}function N(a){let b=b=>a.signals.find(a=>a.providerId===b)?.evidence,c=b(p),d=b(w),e=b(B);return{score:a.score,..."number"==typeof c?.stars?{stars:c.stars}:{},..."number"==typeof d?.weeklyDownloads?{weeklyDownloads:d.weeklyDownloads}:{},..."string"==typeof e?.status?{status:e.status}:{}}}async function O(a,b=8){let c=await P(a,b);return(await J(a,c.map(M))).map(a=>(function(a,b){let c=(0,g.AH)(a),d=c[0];return{name:a.name,...a.title?{title:a.title}:{},...a.description?{description:a.description}:{},installable:c.length>0,requiredEnv:d?(0,g.jg)(d):[],...b?{quality:N(b)}:{}}})(a.candidate.server,a))}async function P(a,b){let c=new URL(f.jD+L);c.searchParams.set("version","latest"),c.searchParams.set("limit",String(Math.min(Math.max(b,1),30))),a&&c.searchParams.set("search",a);let d=await (0,f.Ws)(c,15e3);return Array.isArray(d?.servers)?d.servers:[]}async function Q(a,b){try{let c=await J(a,b.map(M)),d=new Map(b.map(a=>[a.server.name,a])),e=[];for(let a of c){let b=d.get(a.candidate.server.name);b&&e.push(a.signals.length>0?{...b,quality:N(a)}:b)}return e.length===b.length?e:b}catch{return b}}async function R(a){let b=new URL(f.jD+L);b.searchParams.set("version","latest"),b.searchParams.set("limit","10"),b.searchParams.set("search",a);let c=await (0,f.Ws)(b,15e3),d=Array.isArray(c?.servers)?c.servers:[];return d.find(b=>b.server?.name===a)??d[0]??null}async function S(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A registry server name is required"};try{d=await R(a)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=d?.server??null;if(!e)return{installed:!1,error:`No registry entry found for "${a}"`};let f=(0,g.AH)(e)[0];if(!f)return{installed:!1,error:`"${e.name}" has no install method FLUJO supports (stdio package or HTTP remote)`};let i=(0,g.vf)(d),j=(0,g.O$)(a,e,f,i);if(c?.resolveOnly)return{installed:!1,serverName:j.serverName,plan:j};let k=(0,g.jg)(f,b);if(k.length>0)return{installed:!1,needsEnv:k,plan:j,error:`"${e.name}" requires values for: ${k.join(", ")}`};let l=(0,g.cy)((0,g.Yr)(e,f),b),m=l.name,n=await h.mcpService.loadServerConfigs();if(Array.isArray(n)&&n.some(a=>a.name===m)){K.info(`installRegistryServer: "${m}" already configured; reusing`);let{tools:a,error:b}=await h.mcpService.listServerTools(m);return{installed:!0,alreadyExisted:!0,serverName:m,plan:j,tools:(a??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}})),...b?{error:b}:{}}}K.info(`installRegistryServer: installing "${e.name}" as "${m}" (${f.kind})`);let o=await h.mcpService.updateServerConfig(m,l);if(!Array.isArray(o)&&o&&"success"in o&&!1===o.success)return{installed:!1,error:`Saving the server failed: ${o.error??"unknown error"}`};let{tools:p,error:q}=await h.mcpService.listServerTools(m),r=(p??[]).map(a=>({name:a.name,...a.description?{description:a.description}:{}}));if((c?.worksGate??(await G()).worksGate)&&0===r.length){K.warn(`installRegistryServer: "${m}" exposed no tools${q?` (${q})`:""}; rolling back (works-gate)`);try{await h.mcpService.deleteServerConfig(m)}catch(a){K.error(`installRegistryServer: rollback of "${m}" failed`,a)}return{installed:!1,worksGateRejected:!0,serverName:m,plan:j,error:q?`"${e.name}" failed to start: ${q}`:`"${e.name}" connected but exposed no tools — rejected by the works-gate. Try a different server.`}}return{installed:!0,serverName:m,plan:j,tools:r,...q?{error:q}:{}}}async function T(a,b,c){let d;if(!a||"string"!=typeof a)return{installed:!1,error:"A capability search query is required"};try{d=await P(a,10)}catch(a){return{installed:!1,error:`Registry lookup failed: ${a instanceof Error?a.message:String(a)}`}}let e=await J(a,d.map(M)),f=await G(),h=c?.minScore??f.minScore,i=c?.maxAttempts??3,j=[],k=0;for(let a of e){let d=a.candidate.registryName;if(a.score<h){j.push({name:d,score:a.score,reason:`below minScore ${h}`});break}if(0===(0,g.AH)(a.candidate.server).length){j.push({name:d,score:a.score,reason:"no supported install method"});continue}if(k>=i)break;k+=1;let e=await S(d,b,{worksGate:!0});if(c?.onAttempt)try{await c.onAttempt(e.plan,e)}catch(a){K.error("installBestForCapability: onAttempt hook failed",a)}if(e.installed)return{...e,attempts:j};let f=e.needsEnv?.length?`needs env: ${e.needsEnv.join(", ")}`:e.worksGateRejected?"works-gate rejected (no tools / failed to start)":e.error??"install failed";j.push({name:d,score:a.score,reason:f})}return{installed:!1,attempts:j,error:`No working server found for "${a}" among the top ${k} installable candidate(s).`}}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=4436,exports.ids=[4436],exports.modules={94436:(a,b,c)=>{c.d(b,{internalListResourceTemplates:()=>k,internalListResources:()=>j,internalReadResource:()=>l});var d=c(18230),e=c(22861),f=c(71966),g=c(96249),h=c(92018);let i=(0,d.h)("backend/services/mcp/internalResources");async function j(){try{return{resources:(await (0,f.yP)(200)).map(a=>({uri:a.uri,name:a.name??`${a.kind}-${a.id.slice(0,8)}`,mimeType:a.mimeType,description:function(a){let b=a.producedBy;switch(b.source){case"tool-result":return`Tool result of ${b.server??"?"}/${b.toolName??"?"}${b.nodeId?` (node ${b.nodeId})`:""}`;case"capture":return`Captured output of node ${b.nodeName??b.nodeId??"?"}`;case"mcp-link":return`Resource link from ${b.server??"?"}/${b.toolName??"?"}`;default:return"Run resource"}}(a),size:a.size}))}}catch(a){return i.error("internalListResources failed",a),{resources:[],error:a instanceof Error?a.message:String(a)}}}function k(){return{resourceTemplates:[{uriTemplate:`${e.j}{conversationId}/{resourceId}`,name:"Run-scoped resource",description:"A data artifact captured during a flow run (tool result, node output). List concrete URIs via resources/list."}]}}async function l(a){let b=(0,f.Ns)(a);if(!b)return{success:!1,error:`Not a run-resource URI: ${a}`,statusCode:400};try{let c=await (0,f.gy)(a,{at:Date.now(),source:"mcp-read"});if(!c)return{success:!1,error:`Run resource not found: ${a}`,statusCode:404};try{g.$.emitterFor(b.conversationId)({type:"resource:read",server:h._,uri:a,name:c.entry.name,mimeType:c.entry.mimeType,size:c.entry.size,source:"mcp-read"})}catch{}return{success:!0,data:c.contents}}catch(b){return i.error(`internalReadResource failed for ${a}`,b),{success:!1,error:b instanceof Error?b.message:String(b),statusCode:500}}}}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
exports.id=
|
|
2
|
-
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},53119:(a,b,c)=>{"use strict";c.d(b,{x:()=>k,m:()=>l});let d=["https://registry.modelcontextprotocol.io/?q=ai.keenable%2Fweb-search","https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mario-andreschak%2Fmcp-abap-adt/versions",{url:"https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions",env:{PLAYWRIGHT_MCP_BROWSER:"msedge"}}];function e(a){return"string"==typeof a?{url:a}:a}var f=c(46480),g=c(92372),h=c(25250),i=c(8665);let j=(0,c(50846).h)("backend/services/spotlight");async function k(){return(0,g.YM)(f.Z.SPOTLIGHT_SERVERS,null)}function l(){return global.__flujo_spotlight_refresh||(global.__flujo_spotlight_refresh=m().finally(()=>{global.__flujo_spotlight_refresh=void 0})),global.__flujo_spotlight_refresh}async function m(){let a=d.map(e);j.info(`Refreshing spotlight servers (${a.length} entries)`);let b=[];for(let c of a){let{url:a,env:d}=c,e=(0,h.XQ)(a);if(!e){j.warn(`Unrecognized spotlight URL format: ${a}`),b.push({url:a,env:d,error:"Unrecognized spotlight URL format"});continue}try{let c=await (0,i.Ws)(new URL(i.jD+e),15e3),f=(0,h.zz)(c);f?b.push({url:a,env:d,result:f}):(j.warn(`Spotlight URL resolved to no server: ${a}`),b.push({url:a,env:d,error:"No matching server found in the registry"}))}catch(e){let c=e instanceof Error?e.message:"Unknown error";j.warn(`Failed to resolve spotlight URL ${a}: ${c}`),b.push({url:a,env:d,error:c})}await new Promise(a=>setTimeout(a,250))}let c={updatedAt:new Date().toISOString(),entries:b},l=await k();if(l){for(let a of c.entries)if(!a.result){let b=l.entries.find(b=>b.url===a.url&&b.result);b?.result&&(a.result=b.result)}}await (0,g.VH)(f.Z.SPOTLIGHT_SERVERS,c);let m=c.entries.filter(a=>a.result).length;return j.info(`Spotlight refresh complete: ${m}/${c.entries.length} entries resolved`),c}},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},72937:(a,b,c)=>{"use strict";c.d(b,{H:()=>j,t:()=>m});var d=c(92372),e=c(23514),f=c(53119),g=c(27635),h=c(58739);let i=(0,c(50846).h)("backend/init");function j(){return global.__flujo_init_promise||(global.__flujo_init_promise=k().catch(a=>{throw global.__flujo_init_promise=void 0,a})),global.__flujo_init_promise}async function k(){if(await (0,d.Pv)(),(0,f.m)().catch(a=>i.warn("Spotlight refresh failed at startup:",a)),await (0,h.isEncryptionLocked)())return void i.info("Encryption locked — deferring MCP/scheduler startup until unlock");await l()}function l(){return global.__flujo_secret_services_promise||(global.__flujo_secret_services_promise=(async()=>{i.info("Initializing MCP servers"),await e.mcpService.startEnabledServers().catch(a=>{i.error("Failed to start enabled servers:",a)}),await (0,g.z)().start().catch(a=>i.error("Failed to start scheduler:",a))})()),global.__flujo_secret_services_promise}async function m(){await (0,h.isUserEncryptionEnabled)()&&(i.info("Encryption unlocked — starting deferred MCP/scheduler startup"),await l())}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"
|
|
1
|
+
exports.id=4456,exports.ids=[4456],exports.modules={37426:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40ec842092ea232b6d4aa599a380d422184da5e1ca":()=>d.c,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb":()=>d.G});var d=c(73456)},51669:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
|
+
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},53119:(a,b,c)=>{"use strict";c.d(b,{x:()=>k,m:()=>l});let d=["https://registry.modelcontextprotocol.io/?q=ai.keenable%2Fweb-search","https://registry.modelcontextprotocol.io/v0.1/servers/io.github.mario-andreschak%2Fmcp-abap-adt/versions",{url:"https://registry.modelcontextprotocol.io/v0.1/servers/io.github.microsoft%2Fplaywright-mcp/versions",env:{PLAYWRIGHT_MCP_BROWSER:"msedge"}}];function e(a){return"string"==typeof a?{url:a}:a}var f=c(46480),g=c(92372),h=c(25250),i=c(8665);let j=(0,c(50846).h)("backend/services/spotlight");async function k(){return(0,g.YM)(f.Z.SPOTLIGHT_SERVERS,null)}function l(){return global.__flujo_spotlight_refresh||(global.__flujo_spotlight_refresh=m().finally(()=>{global.__flujo_spotlight_refresh=void 0})),global.__flujo_spotlight_refresh}async function m(){let a=d.map(e);j.info(`Refreshing spotlight servers (${a.length} entries)`);let b=[];for(let c of a){let{url:a,env:d}=c,e=(0,h.XQ)(a);if(!e){j.warn(`Unrecognized spotlight URL format: ${a}`),b.push({url:a,env:d,error:"Unrecognized spotlight URL format"});continue}try{let c=await (0,i.Ws)(new URL(i.jD+e),15e3),f=(0,h.zz)(c);f?b.push({url:a,env:d,result:f}):(j.warn(`Spotlight URL resolved to no server: ${a}`),b.push({url:a,env:d,error:"No matching server found in the registry"}))}catch(e){let c=e instanceof Error?e.message:"Unknown error";j.warn(`Failed to resolve spotlight URL ${a}: ${c}`),b.push({url:a,env:d,error:c})}await new Promise(a=>setTimeout(a,250))}let c={updatedAt:new Date().toISOString(),entries:b},l=await k();if(l){for(let a of c.entries)if(!a.result){let b=l.entries.find(b=>b.url===a.url&&b.result);b?.result&&(a.result=b.result)}}await (0,g.VH)(f.Z.SPOTLIGHT_SERVERS,c);let m=c.entries.filter(a=>a.result).length;return j.info(`Spotlight refresh complete: ${m}/${c.entries.length} entries resolved`),c}},68633:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},72937:(a,b,c)=>{"use strict";c.d(b,{H:()=>j,t:()=>m});var d=c(92372),e=c(23514),f=c(53119),g=c(27635),h=c(58739);let i=(0,c(50846).h)("backend/init");function j(){return global.__flujo_init_promise||(global.__flujo_init_promise=k().catch(a=>{throw global.__flujo_init_promise=void 0,a})),global.__flujo_init_promise}async function k(){if(await (0,d.Pv)(),(0,f.m)().catch(a=>i.warn("Spotlight refresh failed at startup:",a)),await (0,h.isEncryptionLocked)())return void i.info("Encryption locked — deferring MCP/scheduler startup until unlock");await l()}function l(){return global.__flujo_secret_services_promise||(global.__flujo_secret_services_promise=(async()=>{i.info("Initializing MCP servers"),await e.mcpService.startEnabledServers().catch(a=>{i.error("Failed to start enabled servers:",a)}),await (0,g.z)().start().catch(a=>i.error("Failed to start scheduler:",a))})()),global.__flujo_secret_services_promise}async function m(){await (0,h.isUserEncryptionEnabled)()&&(i.info("Encryption unlocked — starting deferred MCP/scheduler startup"),await l())}},73456:(a,b,c)=>{"use strict";c.d(b,{G:()=>l,c:()=>k});var d=c(75879);c(68633);var e=c(50846),f=c(92372),g=c(46480),h=c(58739),i=c(51669);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a){j.debug("Entering resolveGlobalVars method");let b=await (0,f.YM)(g.Z.GLOBAL_ENV_VARS,{}),c=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(b);j.debug(`Loaded ${Object.keys(b).length} global environment variables (${c?"new":"old"} format)`);let d={};if(c)for(let[a,c]of Object.entries(b))d[a]=c.value;else d={...b};let e=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let c=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==d[b]){let e=d[b];if(e.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await (0,h.decryptWithPassword)(a);if(c)e=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),c=c.replace(a,e)}else j.warn(`Global variable not found: ${b}`)}return c},i=async a=>{if("string"==typeof a)return await e(a);if(Array.isArray(a))return await Promise.all(a.map(a=>i(a)));if(null!==a&&"object"==typeof a){let b={};for(let[c,d]of Object.entries(a))b[c]=await i(d);return b}return a},k=await i(a);return"object"==typeof a&&null!==a&&j.debug("Resolved global variables result:",JSON.stringify(k,null,2)),j.debug("Completed global variable resolution"),k}async function l(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.decryptWithPassword)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),j.verbose(d),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(j.verbose(a),a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),l(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l]),(0,d.A)(k,"40ec842092ea232b6d4aa599a380d422184da5e1ca",null),(0,d.A)(l,"602ea7ca289a8eaa1000fb321a71e292e6c766b6bb",null)},75879:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},78335:()=>{},96487:()=>{}};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";exports.id=4498,exports.ids=[4498],exports.modules={2826:(a,b,c)=>{c.d(b,{R:()=>e,j:()=>d});let d="flujo://run/",e={autoCaptureEnabled:!0,textThresholdChars:8192,maxResourceBytes:0x3200000,maxConversationBytes:0x10000000,replaceLargeTextWithStub:!1}},14159:(a,b,c)=>{c.r(b),c.d(b,{ToolHandler:()=>i});var d=c(50846),e=c(38611),f=c(23514),g=c(75312);let h=(0,d.h)("backend/flow/execution/handlers/ToolHandler");class i{static sanitizeSchema(a){if(!a||"object"!=typeof a)return a;let b=JSON.parse(JSON.stringify(a));return"string"===b.type&&b.format&&"enum"!==b.format&&"date-time"!==b.format&&(b.description||(b.description=""),b.description+=` (format: ${b.format})`,delete b.format),b.properties&&Object.keys(b.properties).forEach(a=>{b.properties[a]=i.sanitizeSchema(b.properties[a])}),b.items&&(b.items=i.sanitizeSchema(b.items)),["oneOf","anyOf","allOf"].forEach(a=>{Array.isArray(b[a])&&(b[a]=b[a].map(a=>i.sanitizeSchema(a)))}),b}static prepareTools(a){let{availableTools:b}=a;if(h.verbose("prepareTools input",JSON.stringify(a)),!b||0===b.length){let a={success:!0,value:{tools:[]}};return h.verbose("prepareTools empty result",JSON.stringify(a)),a}try{for(let a of b){if(!a.name)return{success:!1,error:(0,e.Po)("invalid_tool","Tool missing required 'name' property","unknown")};if(!a.inputSchema)return{success:!1,error:(0,e.Po)("invalid_tool",`Tool '${a.name}' missing required 'inputSchema' property`,a.name)}}let a=[...b].sort((a,b)=>a.name<b.name?-1:+(a.name>b.name)).map(a=>({type:"function",function:{name:a.name,description:a.description||`Tool: ${a.name}`,parameters:i.sanitizeSchema(a.inputSchema)}})),c={success:!0,value:{tools:a}};return h.verbose("prepareTools success result",JSON.stringify(c)),c}catch(b){let a={success:!1,error:(0,e.Po)("tool_preparation_failed",b instanceof Error?b.message:String(b),"unknown")};return h.verbose("prepareTools error result",JSON.stringify(a)),a}}static async processMCPNodes(a){let{mcpNodes:b}=a;if(h.verbose("processMCPNodes input",JSON.stringify(a)),!b||0===b.length){let a={success:!0,value:{availableTools:[]}};return h.verbose("processMCPNodes empty result",JSON.stringify(a)),a}try{let a=[];for(let c of b){let b=c.properties;if(b&&b.boundServer){let d=b.boundServer,h=b.enabledTools||[],i=b.toolTimeout;f.mcpService.setNodeRoots(d,c.id,b.roots);let j=await f.mcpService.connectServer(d);if(!j.success)return{success:!1,error:(0,e.Fp)("server_connection_failed",`Failed to connect to MCP server '${d}': ${j.error}`,d,"connect")};let k=await f.mcpService.listServerTools(d);if(k.error)return{success:!1,error:(0,e.Fp)("list_tools_failed",`Failed to list tools for MCP server '${d}': ${k.error}`,d,"listTools")};for(let b of(k.tools||[]).filter(a=>h.includes(a.name)).map(a=>({originalName:a.name,server:d,name:(0,g.Y6)(d,a.name),timeout:i,description:a.description,inputSchema:a.inputSchema})))a.some(a=>a.name===b.name)||a.push(b)}}let c={success:!0,value:{availableTools:a}};return h.verbose("processMCPNodes success result",JSON.stringify(c)),c}catch(b){let a={success:!1,error:(0,e.Fp)("mcp_processing_failed",b instanceof Error?b.message:String(b),"unknown","processMCPNodes")};return h.verbose("processMCPNodes error result",JSON.stringify(a)),a}}}},14214:(a,b,c)=>{c.d(b,{$:()=>i});var d=c(94735),e=c(60184);let f=(0,c(50846).h)("backend/execution/flow/engine/ExecutionEventBus");class g{getChannel(a){let b=this.channels.get(a);if(!b){let c=new d.EventEmitter;c.setMaxListeners(0),b={emitter:c,seq:0,buffer:[]},this.channels.set(a,b)}return b}cancelCleanup(a){let b=this.cleanupTimers.get(a);b&&(clearTimeout(b),this.cleanupTimers.delete(a))}scheduleCleanup(a,b){this.cancelCleanup(a);let c=setTimeout(()=>{this.cleanupTimers.delete(a);let c=this.channels.get(a);c&&c.seq===b&&(c.emitter.listenerCount("event")>0||this.channels.delete(a))},3e5);"function"==typeof c.unref&&c.unref(),this.cleanupTimers.set(a,c)}emit(a,b){let c=this.getChannel(a),d={...b,conversationId:a,seq:c.seq++,timestamp:Date.now()};return c.buffer.push(d),c.buffer.length>1e3&&c.buffer.shift(),c.emitter.emit("event",d),(0,e.LB)(d),"run:done"===d.type?this.scheduleCleanup(a,c.seq):this.cancelCleanup(a),d}emitterFor(a){return b=>{try{this.emit(a,b)}catch(b){f.warn(`Failed to emit execution event for ${a}`,{err:b})}}}getBufferedSince(a,b){let c=this.channels.get(a);return c?c.buffer.filter(a=>a.seq>=b):[]}currentSeq(a){return this.channels.get(a)?.seq??0}subscribe(a,b){let c=this.getChannel(a);return c.emitter.on("event",b),()=>{c.emitter.off("event",b)}}constructor(){this.channels=new Map,this.cleanupTimers=new Map}}let h=globalThis,i=h.__flujoExecutionEventBus??(h.__flujoExecutionEventBus=new g)},32642:(a,b,c)=>{c.d(b,{s:()=>v});var d=c(50846),e=c(38611),f=c(75312),g=c(83964),h=c(78975),i=c(20433),j=c(41561),k=c(24423),l=c(23514),m=c(77213),n=c(61539);let o=(0,d.h)("backend/services/runResources/capture");function p(a){var b;return`[FLUJO stored this ${a.mimeType??a.kind} (${(b=a.size)<1024?`${b} B`:b<1048576?`${Math.round(b/1024)} KB`:`${(b/1048576).toFixed(1)} MB`}) as run resource ${a.uri}. Read it back via the 'flujo' MCP server (resources/read) if needed.]`}async function q(a){let{conversationId:b,server:c,toolName:d,toolCallId:e,nodeId:f,result:g,settings:h}=a,i=[];if(g.isError||!Array.isArray(g.content))return{result:g,captured:i};let j={source:"tool-result",nodeId:f,server:c,toolName:d,toolCallId:e},k=async(a,e,f,g)=>{try{let h=await (0,n.tm)({conversationId:b,mimeType:f,kind:a,data:e,producedBy:g?{...j,source:"mcp-link"}:j,origin:g});if("skipped"in h)return o.warn(`Auto-capture skipped (${h.skipped}) for ${c}/${d}`),null;return i.push(h),h}catch(a){return o.error(`Auto-capture failed for ${c}/${d}; keeping inline content`,a),null}},l=[];for(let a of g.content)switch(a.type){case"image":case"audio":{let b=await k(a.type,{base64:a.data},a.mimeType);l.push(b?{type:"text",text:p(b)}:a);break}case"resource_link":await k("link",void 0,a.mimeType,{server:c,uri:a.uri}),l.push(a);break;case"resource":{let b=a.resource;if("string"==typeof b.blob){let d=b.blob,e=await k("blob",{base64:d},b.mimeType,{server:c,uri:b.uri});l.push(e?{type:"text",text:p(e)}:a)}else if("string"==typeof b.text){let d=b.text;if(d.length>=h.textThresholdChars){let e=await k("text",{text:d},b.mimeType??"text/plain",{server:c,uri:b.uri});e&&h.replaceLargeTextWithStub?l.push({type:"text",text:`${d.slice(0,1024)}
|
|
2
|
+
…
|
|
3
|
+
${p(e)}`}):l.push(a)}else l.push(a)}else l.push(a);break}case"text":if("string"==typeof a.text&&a.text.length>=h.textThresholdChars){let b=await k("text",{text:a.text},"text/plain");b&&h.replaceLargeTextWithStub?l.push({type:"text",text:`${a.text.slice(0,1024)}
|
|
4
|
+
…
|
|
5
|
+
${p(b)}`}):l.push(a)}else l.push(a);break;default:l.push(a)}return 0===i.length?{result:g,captured:i}:{result:{...g,content:l},captured:i}}var r=c(14214),s=c(76813),t=c(32524);let u=(0,d.h)("backend/flow/execution/handlers/ModelHandler");class v{static async resolveToolUiLink(a,b){let c=function(a){if(a&&"object"==typeof a){for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if("string"==typeof a&&a.trim().toLowerCase().startsWith("ui://"))return a}}}(b?._meta);if(c)try{let b=await l.mcpService.loadServerConfigs();if(!Array.isArray(b))return;let d=b.find(b=>b.name===a);if(!d?.enableMcpApps)return;return{uri:c,serverName:a}}catch(b){u.warn(`resolveToolUiLink: failed to check MCP Apps opt-in for ${a}`,b);return}}static extractProviderErrorDetails(a,b){let c=b||a?.message||"Provider returned an unspecified error in the response body.";b&&"string"==typeof a?.message&&a.message&&a.message!==b&&(c=`${b} - ${a.message}`);let d=a?.metadata;if(d){let a;if("string"==typeof d.raw)try{let b=JSON.parse(d.raw);a=b?.error?.message||b?.message||d.raw}catch{a=d.raw}else d.raw&&"object"==typeof d.raw&&(a=d.raw.error?.message||d.raw.message);let b=[];d.provider_name&&b.push(String(d.provider_name)),a&&b.push(a),b.length>0&&(c=`${c} (upstream: ${b.join(": ")})`)}return"string"==typeof a?.origin&&a.origin&&(c=`${c} (origin: ${a.origin})`),{message:c,code:a?.code,type:a?.type,param:a?.param,retryAfter:d?.retry_after_seconds!=null?String(d.retry_after_seconds):void 0,providerError:a}}static persistStreamedMessage(a,b){try{let{FlowExecutor:d}=c(44498),e=d.conversationStates.get(a);if(!e||!Array.isArray(e.messages))return;!function(a,b){let c=a.findIndex(a=>a.id===b.id);c>=0?a[c]=b:a.push(b)}(e.messages,b),e.updatedAt=Date.now()}catch(b){u.warn(`Failed to fold streamed message into conversation ${a}`,{err:b})}}static async callModel(a){let b,{modelId:c,prompt:d,messages:e,wireMessages:f,tools:g,nodeName:h,nodeId:k,toolNameMap:l,maxTurns:m,conversationId:n,requireToolApproval:o}=a;try{let a=await i.modelService.getModel(c);a&&(a.displayName||a.name,a.name,b=a.maxTurns)}catch(a){u.warn(`Failed to fetch model information for prefix: ${a instanceof Error?a.message:String(a)}`)}let p=function(a,b,c=j.m){return"number"==typeof a&&Number.isFinite(a)&&a>0?a:"number"==typeof b&&Number.isFinite(b)&&b>0?b:c}(m,b);u.info("callModel - Single execution",{modelId:c,messagesCount:e.length,toolsCount:g?.length||0,nodeName:h,nodeId:k}),u.verbose("callModel input",a);let q=n?r.$.emitterFor(n):void 0,w=o&&q&&n?async a=>{let b={id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.args??{})}};return new Promise(a=>{(0,s.sf)(n,b,a),q({type:"run:awaiting_approval",pendingToolCalls:(0,s.Rt)(n)})})}:void 0,x=q?a=>{let b=k?{...a,processNodeId:k}:a;q({type:"message",message:b,node:k?{nodeId:k}:void 0}),n&&v.persistStreamedMessage(n,b)}:void 0,y=await this.generateCompletion(c,d,f??e,g,{toolNameMap:l,maxTurns:p,requestToolApproval:w,onTranscriptMessage:x});if(!y.success)return u.verbose("callModel error response",y),{success:!1,error:y.error};let z=y.value,A=z.content||"",B=[...e],C=function(a){if(!a)return;let b=a.prompt_tokens_details?.cached_tokens;return{promptTokens:a.prompt_tokens??0,completionTokens:a.completion_tokens??0,totalTokens:a.total_tokens??0,...null!=b?{cacheReadTokens:b}:{}}}(z.fullResponse?.usage);if(z.transcript&&z.transcript.length>0){let a=Date.now(),b=z.transcript;b.forEach((c,d)=>{let e=d===b.length-1;B.push({...c,id:c.id??(0,t.A)(),timestamp:c.timestamp??a+d,processNodeId:k,...e&&C?{usage:C}:{}})})}else{let a={id:(0,t.A)(),role:"assistant",content:A,tool_calls:z.fullResponse?.choices?.[0]?.message?.tool_calls,timestamp:Date.now(),processNodeId:k,...C?{usage:C}:{}};B.push(a)}let D=z.fullResponse?.choices?.[0]?.message?.tool_calls?.map(a=>{try{return{name:a.function.name,args:JSON.parse(a.function.arguments),id:a.id,result:""}}catch(b){return u.warn(`Failed to parse tool arguments for call ${a.id}`,{args:a.function.arguments,error:b}),{name:a.function.name,args:{},id:a.id,result:""}}}).filter(Boolean),E={success:!0,value:{content:A,messages:B,fullResponse:z.fullResponse,toolCalls:D}};return u.verbose("callModel single step result",E),E}static async generateCompletion(a,b,d,f,j){u.verbose("generateCompletion input",{modelId:a,prompt:b,messages:d,tools:f});try{let b,h=await i.modelService.getModel(a);if(!h)return{success:!1,error:(0,e.M5)("model_not_found",`Model not found: ${a}`,a)};let l=h.temperature?parseFloat(h.temperature):0,m=await i.modelService.resolveAndDecryptApiKey(h.ApiKey);if(!m)return{success:!1,error:(0,e.M5)("api_key_error","Failed to resolve or decrypt API key",a)};u.verbose(`decrypted api key ${m}`),u.verbose(` baseurl ${h.baseUrl}`);let n=(0,g.ae)(d);if(f&&f.length>0){let{ToolHandler:a}=c(14159);b=f.map(b=>"function"===b.type&&b.function.parameters?{...b,function:{...b.function,parameters:a.sanitizeSchema(b.function.parameters)}}:b)}let o=(0,k.getCompletionAdapter)(h);u.debug("calling chatcompletion"),u.verbose("calling chatcompletion now with ADAPTER",h.adapter||"openai"),u.verbose("calling chatcompletion now with MODEL",h.name),u.verbose("calling chatcompletion now with TEMP",l),u.verbose("calling chatcompletion now with MESSAGES",n),u.verbose("calling chatcompletion now with TOOLS",b),u.debug("[ModelHandler.generateCompletion] Sending request via adapter",{adapter:h.adapter||"openai",model:h.name});let{completion:p,transcript:q}=await o.createCompletion({model:h,apiKey:m,messages:n,tools:b,temperature:l,toolNameMap:j?.toolNameMap,maxTurns:j?.maxTurns,requestToolApproval:j?.requestToolApproval,onTranscriptMessage:j?.onTranscriptMessage});if(u.debug("[ModelHandler.generateCompletion] Received raw response from OpenAI API",{response:p}),u.verbose("chatcompletion returned"),u.verbose("chatcompletion returned",p),p&&"object"==typeof p&&"error"in p&&p.error){u.warn("API call returned successfully but contained an error object:",JSON.stringify(p.error));let b=p.error,c=v.extractProviderErrorDetails(b),d={success:!1,error:(0,e.M5)("api_error",c.message,a,void 0,{code:c.code,type:c.type,param:c.param,retryAfter:c.retryAfter,providerError:c.providerError})};return u.verbose("generateCompletion returning error from response body",d),d}let r=p?.choices?.[0];if(!r)return u.error("API response missing choices array or first choice.",{response:p}),{success:!1,error:(0,e.M5)("api_error","Invalid response structure from API: Missing choices.",a,void 0,{rawResponse:p})};let s={success:!0,value:{content:r.message?.content||"",messages:[...d],fullResponse:p,transcript:q}};return u.verbose("generateCompletion success result",s),s}catch(c){if(u.error("[ModelHandler.generateCompletion] Caught error during OpenAI API call",{rawError:c}),u.error("--- Error during openai.chat.completions.create ---"),c instanceof Error?(u.error(`Error Name: ${c.name}`),u.error(`Error Message: ${c.message}`),u.error(`Error Stack: ${c.stack}`)):u.error("Caught non-Error object:",c),c instanceof h.Ay.APIError&&(u.error(`API Error Status: ${c.status}`),u.error(`API Error Type: ${c.type}`),u.error(`API Error Code: ${c.code}`),u.error(`API Error Param: ${c.param}`),u.error(`API Error Headers: ${JSON.stringify(c.headers)}`)),u.error("--- End Error Details ---"),c instanceof h.Ay.APIError){let b=c.error,d=v.extractProviderErrorDetails(b,c.message),f=c.headers||{},g=f["retry-after"]??f["Retry-After"],h=void 0!==g?String(g):d.retryAfter,i=f["x-ratelimit-reset"]??f["x-ratelimit-reset-requests"],j={success:!1,error:(0,e.M5)("api_error",d.message,a,void 0,{status:c.status,type:d.type??c.type,code:d.code??c.code,param:d.param??c.param,retryAfter:h,rateLimitReset:void 0!==i?String(i):void 0,providerError:d.providerError,stack:c.stack})};return u.verbose("generateCompletion API error",j),j}let b={success:!1,error:(0,e.M5)("unknown_error",c instanceof Error?c.message:String(c),a,void 0,{stack:c instanceof Error?c.stack:void 0})};return u.verbose("generateCompletion unknown error",b),b}}static async processToolCalls(a){let{toolCalls:b,toolNameMap:c,emit:d,conversationId:g,node:h}=a;if(u.verbose("processToolCalls input",a),!b||0===b.length){let a={success:!0,value:{toolCallMessages:[],processedToolCalls:[]}};return u.verbose("processToolCalls empty result",a),a}try{let a=[],e=[];for(let i of b){let{id:b,function:{name:j,arguments:k}}=i;try{let i=JSON.parse(k);if(u.info("trying to call tool",j),j.startsWith("handoff_to_")||"handoff"===j){u.info(`Processing handoff tool: ${j}`);let c={handoff:!0,args:i},d=JSON.stringify(c);a.push({id:(0,t.A)(),role:"tool",tool_call_id:b,content:d,timestamp:Date.now()}),e.push({name:j,args:i,id:b,result:d});continue}let o=(0,f.ud)(j,c);if(!o)throw u.error("invalid tool format",j),Error(`Invalid tool name format: ${j}`);let p=o.server,r=o.tool;d?.({type:"tool:call",toolCallId:b,name:j,args:k});let s=o.timeout??m.aI,w=await l.mcpService.callTool(p,r,i,s,a=>d?.({type:"tool:progress",toolCallId:b,name:j,progress:a.progress,total:a.total,message:a.message})),x=w.data;if(w.success&&g)try{let a=await (0,n.jR)();if(a.autoCaptureEnabled){let c=await q({conversationId:g,server:p,toolName:r,toolCallId:b,nodeId:h?.nodeId,result:w.data,settings:a});for(let a of(x=c.result,c.captured))d?.({type:"resource:write",node:h,server:"flujo",uri:a.uri,name:a.name,mimeType:a.mimeType,size:a.size,source:"tool-result",toolCallId:b})}}catch(a){u.error("Run-resource auto-capture failed; keeping original tool result",a),x=w.data}let y=w.success?JSON.stringify(x):`Error: ${w.error}`;d?.({type:"tool:result",toolCallId:b,name:j,result:y.length>500?`${y.slice(0,500)}…`:y,isError:!w.success});let z=w.success?await v.resolveToolUiLink(p,w.data):void 0;a.push({id:(0,t.A)(),role:"tool",tool_call_id:b,content:y,timestamp:Date.now(),...z?{ui:z}:{}}),e.push({name:j,args:i,id:b,result:y})}catch(f){let c=`Error: ${f instanceof Error?f.message:"Unknown error"}`;d?.({type:"tool:result",toolCallId:b,name:j,result:c,isError:!0}),a.push({id:(0,t.A)(),role:"tool",tool_call_id:b,content:c,timestamp:Date.now()}),e.push({name:j,args:{},id:b,result:c})}}let i={success:!0,value:{toolCallMessages:a,processedToolCalls:e}};return u.verbose("processToolCalls success result",i),i}catch(b){let a={success:!1,error:(0,e.Po)("tool_processing_failed",b instanceof Error?b.message:String(b),"unknown")};return u.verbose("processToolCalls error result",a),a}}static hasToolCalls(a){return!!(a.fullResponse?.choices?.[0]?.message?.tool_calls&&a.fullResponse.choices[0].message.tool_calls.length>0)}}},35205:(a,b,c)=>{c.d(b,{t:()=>s,p:()=>r});var d=c(87821),e=c(20433),f=c(23514),g=c(50846),h=c(67490);function i(a,b){let c=a.replace(/\s+/g," ").trim();if(c.length<=b)return c;let d=c.slice(0,b),e=d.lastIndexOf(" ");return`${(e>.6*b?d.slice(0,e):d).trimEnd()}…`}function j(a,b,c){let d=" ".repeat(b);if(a.userDescription&&a.userDescription.trim())return void c.push(`${d}${i(a.userDescription,200)}`);if("subflow"===a.type){if(a.subflowMissing)return void c.push(`${d}Runs a subflow (referenced flow not found).`);if(a.subflowDetailsUnavailable){let b=a.subflowName?` "${a.subflowName}"`:"";c.push(`${d}Runs a subflow${b} (contents summarised when the flow runs).`);return}if(c.push(`${d}Runs the subflow "${a.subflowName??"unknown"}", which contains:`),a.depthCapReached)return void c.push(`${d} (nested subflows omitted — recursion depth limit reached)`);let e=a.children??[];if(0===e.length)return void c.push(`${d} (no process or subflow steps)`);for(let a of e.slice(0,10))c.push(`${d} - ${a.label}:`),j(a,b+2,c);return void(e.length>10&&c.push(`${d} - …and ${e.length-10} more step(s)`))}if(a.modelName&&c.push(`${d}Model: ${a.modelName}`),a.promptSummary&&c.push(`${d}Role: ${i(a.promptSummary,200)}`),a.servers&&a.servers.length>0)for(let b of a.servers)if(b.connected&&b.tools&&b.tools.length>0){let a=b.tools.slice(0,10),e=b.tools.length-a.length,f=e>0?`, +${e} more`:"";c.push(`${d}Tools (${b.name}): ${a.join(", ")}${f}`)}else c.push(`${d}Tools (${b.name}): server not connected`)}let k=(0,g.h)("backend/execution/flow/buildHandoffDescription");function l(){return{modelNames:new Map,serverConnected:new Map,flows:new Map}}async function m(a,b){if(!a)return;if(b.modelNames.has(a))return b.modelNames.get(a);let c=a;try{let b=await e.modelService.getModel(a);b&&(c=b.displayName&&b.displayName.trim()||b.name||a)}catch(b){k.debug("resolveModelName failed; using raw id",{modelId:a,err:b})}return b.modelNames.set(a,c),c}async function n(a,b){if(b.serverConnected.has(a))return b.serverConnected.get(a);let c=!1;try{let b=await f.mcpService.getServerStatus(a);c=b?.status==="connected"}catch(b){k.debug("getServerStatus failed; treating server as offline",{server:a,err:b})}return b.serverConnected.set(a,c),c}async function o(a,b){if(b.flows.has(a))return b.flows.get(a);let c=null;try{c=await d.flowService.getFlow(a)}catch(b){k.debug("getFlow failed while summarising subflow",{flowId:a,err:b})}return b.flows.set(a,c),c}async function p(a,b){let c=Array.isArray(a.mcpNodes)?a.mcpNodes:[],d=[],e=new Set;for(let a of c){let c=a?.properties?.boundServer;if(!c||e.has(c))continue;e.add(c);let f=await n(c,b),g=Array.isArray(a?.properties?.enabledTools)?a.properties.enabledTools:[];d.push({name:c,connected:f,tools:f?g:void 0})}return d}async function q(a,b,c,d){let e=a.data?.type||a.type||"unknown",f=a.data?.label||"Unknown Node",g=a.data?.properties||{},i=a.data?.description,j={label:f,type:e,userDescription:i};if(i&&i.trim())return j;if("subflow"===e){let a=g.subflowId;if(!a)return j.subflowMissing=!0,j;if(b+1>h.A||d.has(a)){j.depthCapReached=!0;let b=await o(a,c);return j.subflowName=b?.name,j}let e=await o(a,c);if(!e)return j.subflowMissing=!0,j;j.subflowName=e.name;let f=new Set(d);f.add(a);let i=(e.nodes||[]).filter(a=>a.data?.type==="process"||a.data?.type==="subflow"||"process"===a.type||"subflow"===a.type);for(let a of(j.children=[],i))j.children.push(await q(a,b+1,c,f));return j}j.modelName=await m(g.boundModel,c);let k=g.promptTemplate;return"string"==typeof k&&k.trim()&&(j.promptSummary=k),j.servers=await p(g,c),j}async function r(a){try{let b=await q(a,0,l(),new Set);return function(a){if(a.userDescription&&a.userDescription.trim())return i(a.userDescription,1500);let b=`Hand off execution to ${a.label} (${a.type}).`,c=[];j(a,0,c);let d=c.join("\n").trim(),e=d?`${b}
|
|
6
|
+
${d}`:b;if(e.length<=1500)return e;let f=1500-b.length-2;return f<=0?b:`${b}
|
|
7
|
+
${i(d,f)}`}(b)}catch(d){let b=a.data?.label||"Unknown Node",c=a.data?.type||a.type||"unknown";return k.warn("buildHandoffDescription failed; falling back to basic description",{label:b,type:c,err:d}),`Hand off execution to ${b} (${c})`}}async function s(a){try{let b=l(),c=new Set([a.id]),d=(a.nodes||[]).filter(a=>a.data?.type==="process"||a.data?.type==="subflow"||"process"===a.type||"subflow"===a.type),e=[];for(let a of d)e.push(await q(a,1,b,c));return function(a,b,c){let d=`Runs the FLUJO flow "${a}".`,e=[],f=b.slice(0,10);if(f.length>0){for(let a of(e.push("Steps:"),f))e.push(` - ${a.label}:`),j(a,2,e);b.length>10&&e.push(` - …and ${b.length-10} more step(s)`)}let g=e.join("\n").trim(),h=g?`${d}
|
|
8
|
+
${g}`:d;if(h.length<=1500)return h;let k=1500-d.length-2;return k<=0?d:`${d}
|
|
9
|
+
${i(g,k)}`}(a.name,e)}catch(b){return k.warn("buildFlowToolDescription failed; falling back to basic description",{flow:a?.name,err:b}),`Runs the FLUJO flow "${a?.name??"unknown"}".`}}},38611:(a,b,c)=>{c.d(b,{Fp:()=>f,M5:()=>d,Po:()=>e});let d=(a,b,c,d,e)=>({type:"model",code:a,message:b,modelId:c,requestId:d,details:e}),e=(a,b,c,d,e)=>({type:"tool",code:a,message:b,toolName:c,toolArgs:d,details:e}),f=(a,b,c,d,e)=>({type:"mcp",code:a,message:b,serverName:c,operation:d,details:e})},41527:(a,b,c)=>{c.d(b,{S$:()=>e,T9:()=>f,qW:()=>h});let d=/\$\{var:([^}]+)\}/g;function e(a,b){if("string"!=typeof a||0===a.length||!d.test(a))return a;let c=b??{};return a.replace(d,(a,b)=>{let d=b.trim(),e=c[d];return"string"==typeof e?e:(console.warn(`[resolveRunVars] unknown variable "${d}"; substituting empty string`),"")})}function f(a){let b;if("string"!=typeof a||0===a.length)return[];let c=new Set;for(d.lastIndex=0;null!==(b=d.exec(a));){let a=b[1].trim();a&&c.add(a)}return[...c]}let g=/^[A-Za-z_][\w-]*$/;function h(a){return"string"==typeof a&&g.test(a)}},44498:(a,b,c)=>{c.r(b),c.d(b,{FlowExecutor:()=>ac});var d=c(50846),e=c(99978),f=c(91373),g=c.n(f),h=c(13516),i=c(87821);let j=(0,d.h)("backend/execution/flow/pocketflow"),k="default";class l{constructor(){j.debug("BaseNode constructor called"),this.flow_params={},this.node_params={},this.successors=new Map}setParams(a,b){j.debug("setParams called with params",{params:a}),j.verbose("setParams input",{params:a,node_params:b}),this.flow_params=a,b&&(this.node_params=b),j.debug("setParams finished. flow_params count",{flow_params:this.flow_params?.length,node_params:this.node_params?.length}),j.verbose("setParams result",{flow_params:this.flow_params,node_params:this.node_params})}clone(){j.debug("clone called");let a=this._clone();return j.verbose("_clone result",{newNode:a}),a.flow_params=g()(this.flow_params),j.verbose("Cloned flow_params",{flow_params:a.flow_params}),a.node_params=g()(this.node_params),j.verbose("Cloned node_params",{node_params:a.node_params}),a.successors=new Map(this.successors),j.verbose("Cloned successors",{successors:a.successors}),j.verbose("clone finished"),a}addSuccessor(a,b=k){if(j.verbose(`addSuccessor called with action: ${b}`),this.successors.has(b))throw j.error(`Action ${b} already exists`),Error(`Action ${b} already exists`);this.successors.set(b,a),j.debug("addSuccessor finished. Successors",{successors:this.successors})}getSuccessor(a){if(j.debug(`getSuccessor called with name: ${a}`),!this.successors.has(a))return void j.error(`Successor ${a} not found`);let b=this.successors.get(a).clone();return j.debug("getSuccessor finished. Returning successor",{successor:b}),b}async execWrapper(a,b){j.debug("execWrapper called with prepResult",{prepResult:a}),j.verbose("execWrapper input",{prepResult:a,node_params:b});let c=await this.execCore(a,b);return j.debug("execWrapper finished. Result",{result:c}),j.verbose("execWrapper result",c),c}async run(a){j.debug("run called with sharedState",{sharedState:a}),j.debug("Current flow_params at start of run",{flow_params:this.flow_params}),j.verbose("run input",{sharedState:a,flow_params:this.flow_params,node_params:this.node_params});let b=await this.prep(a,this.node_params);j.verbose("run prepResult",b);let c=await this.execWrapper(b,this.node_params);j.verbose("run execResult",c);let d=await this.post(b,c,a,this.node_params);return j.debug("action",{action:d}),j.debug(`run finished. Returning action: ${d}`),j.verbose("run action result",{action:d,prepResult:b,execResult:c}),{action:d,prepResult:b,execResult:c}}}class m extends l{constructor(a){j.debug("Flow constructor called with start",{start:a}),super(),this.start=a}_clone(){j.debug("Flow _clone called");let a=new m(this.start);return j.debug("Flow _clone finished. Returning",{newFlow:a}),a}async getStartNode(){j.debug("getStartNode called");let a=this.start.clone();return j.debug("getStartNode finished. Returning",{clonedStart:a}),a}async execCore(a){throw j.error("Flow node does not support direct execution"),j.verbose("Flow execCore error",{error:"Flow node does not support direct execution"}),Error("Flow node does not support direct execution")}async prep(a,b){return j.debug("Flow prep called with sharedState",{sharedState:a}),j.verbose("Flow prep input",{sharedState:a,node_params:b}),j.debug("Flow prep finished. Returning empty object"),j.verbose("Flow prep result",{}),{}}async post(a,b,c,d){return j.debug("Flow post called with prepResult, execResult, and sharedState",{prepResult:a,execResult:b,sharedState:c}),j.verbose("Flow post input",{prepResult:a,execResult:b,node_params:d}),j.debug("Flow post finished. Returning DEFAULT_ACTION"),j.verbose("Flow post result",{action:k}),k}}let n=(0,d.h)("execution/nodes/StartNode.ts");class o extends l{async prep(a,b){n.info("prep() started");let c=b?.properties?.promptTemplate||"";n.info("Extracted promptTemplate",{promptTemplateLength:c.length,promptTemplatePreview:c.length>100?c.substring(0,100)+"...":c});let d={nodeId:b?.id||"",nodeType:"start",systemPrompt:c};return n.info("prep() completed"),d}async execCore(a,b){n.info("execCore() started"),n.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return n.verbose("execCore() execResult",JSON.stringify(c)),n.info("execCore() completed"),c}async post(a,b,c,d){if(n.info("post() started"),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"StartNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Start Node",timestamp:new Date().toISOString()}),n.info("Added StartNode tracking information")),a.systemPrompt){let b={role:"system",content:a.systemPrompt,id:crypto.randomUUID(),timestamp:Date.now()};c.messages.some(a=>"system"===a.role)||(c.messages.push(b),n.debug("Added system message",{contentLength:"string"==typeof b.content?b.content.length:"non-string content",contentPreview:"string"==typeof b.content&&b.content.length>50?b.content.substring(0,50)+"...":b.content}))}n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`post() completed, returning action: ${a}`),a}return n.info("post() completed, returning default action"),"default"}_clone(){return new o}}var p=c(60724),q=c(14159),r=c(32642),s=c(23514),t=c(61539);let u=(0,d.h)("backend/flow/execution/handlers/ResourceHandler");function v(a,b,c){let d=Array.isArray(c?.contents)?c.contents:[];if(0===d.length)return`### ${a}
|
|
10
|
+
(empty resource — ${b})
|
|
11
|
+
`;let e=d.map(a=>{if("string"==typeof a.text)return a.text;if("string"==typeof a.blob){let b=Math.round(3*a.blob.length/4/1024);return`[binary ${a.mimeType||"data"} (~${b} KB)${a.uri?` at ${a.uri}`:""} — not inlined; readable via MCP resources/read]`}return JSON.stringify(a)}).join("\n\n");return`### ${a} (${b})
|
|
12
|
+
${e}
|
|
13
|
+
`}class w{static async processResourceNodes(a){let b=(a.resourceNodes??[]).filter(a=>"consume"===a.role);if(0===b.length)return"";let c=[];for(let d of b){let b=d.properties??{},e=b.name||b.runName||b.uri||d.id;try{if("run"===b.scope){let f=b.runName?.trim();if(!f){c.push(`### ${e}
|
|
14
|
+
(run artifact with no name — configure the resource node)
|
|
15
|
+
`);continue}if(!a.conversationId){c.push(`### ${e}
|
|
16
|
+
(run artifact "${f}" is not available in this run)
|
|
17
|
+
`);continue}let g=await (0,t.FA)(a.conversationId,f);if(!g){c.push(`### ${e}
|
|
18
|
+
(run artifact "${f}" has not been produced yet)
|
|
19
|
+
`);continue}let h=await (0,t.gy)(g.uri,{at:Date.now(),source:"node",nodeId:d.id});if(!h){c.push(`### ${e}
|
|
20
|
+
(run artifact "${f}" could not be read)
|
|
21
|
+
`);continue}c.push(v(e,g.uri,h.contents)),a.emit?.({type:"resource:read",node:{nodeId:d.id,nodeName:b.name,nodeType:"resource"},server:"flujo",uri:g.uri,name:f,mimeType:g.mimeType,size:g.size,source:"node"})}else{let f=b.boundServer,g=b.uri;if(!f||!g){c.push(`### ${e}
|
|
22
|
+
(resource node is not fully bound — set server and uri)
|
|
23
|
+
`);continue}let h=await s.mcpService.readResource(f,g);if(!h.success||!h.data){c.push(`### ${e}
|
|
24
|
+
(resource ${g} on ${f} could not be read: ${h.error??"unknown error"})
|
|
25
|
+
`);continue}c.push(v(e,`${g} from ${f}`,h.data));let i=h.data.contents?.[0];a.emit?.({type:"resource:read",node:{nodeId:d.id,nodeName:b.name,nodeType:"resource"},server:f,uri:g,name:b.name,mimeType:i?.mimeType??b.mimeType,size:"string"==typeof i?.text?i.text.length:"string"==typeof i?.blob?Math.floor(3*i.blob.length/4):void 0,source:"node"})}}catch(a){u.error(`Failed to read resource node ${d.id}; injecting a note`,a),c.push(`### ${e}
|
|
26
|
+
(resource is currently unavailable)
|
|
27
|
+
`)}}return`
|
|
28
|
+
|
|
29
|
+
## Resources
|
|
30
|
+
The following data artifacts are wired to this step:
|
|
31
|
+
|
|
32
|
+
${c.join("\n")}`}}var x=c(83964),y=c(35205);let z="handoff_to_";var A=c(45131),B=c(41527);let C=(0,d.h)("backend/flow/execution/resolveRunResourceRefs"),D=/\$\{res:([^}]+)\}/g;async function E(a,b,c,d){if(!a||!a.includes("${res:")||!b)return a?a.replace(D,""):a;D.lastIndex=0;let e=new Set;for(let b=D.exec(a);b;b=D.exec(a))e.add(b[1]);let f=new Map;for(let a of e){let e="";try{let f=await (0,t.FA)(b,a.trim());if(f){let b=await (0,t.gy)(f.uri,{at:Date.now(),source:"res-ref",nodeId:d?.nodeId});if(b){let h=b.contents.contents[0];if(h&&"string"==typeof h.text&&"link"!==f.kind)e=`
|
|
33
|
+
--- resource ${a} (${f.uri}) ---
|
|
34
|
+
${h.text}
|
|
35
|
+
--- end resource ${a} ---
|
|
36
|
+
`;else{var g;e=`[run resource "${a}": ${f.mimeType??f.kind} (${(g=f.size)<1024?`${g} B`:g<1048576?`${Math.round(g/1024)} KB`:`${(g/1048576).toFixed(1)} MB`}) at ${f.uri} — readable via the 'flujo' MCP server]`}c?.({type:"resource:read",node:d,server:"flujo",uri:f.uri,name:a,mimeType:f.mimeType,size:f.size,source:"res-ref"})}else C.warn(`\${res:${a}} entry exists but payload read failed; resolving to ''`,{uri:f.uri})}else C.warn(`\${res:${a}} has no matching run resource; resolving to ''`,{conversationId:b})}catch(b){C.error(`Failed to resolve \${res:${a}}; resolving to ''`,b)}f.set(a,e)}return a.replace(D,(a,b)=>f.get(b)??"")}var F=c(32524);let G=(0,d.h)("backend/flow/execution/nodes/ProcessNode");class H extends l{async generateHandoffTools(a){G.info("Generating handoff tools");let b=(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"));G.debug("Found standard actions for handoff tools",{actionsCount:b.length,actions:b});let c=[],d=new Set;for(let a of b){let b=this.successors instanceof Map?this.successors.get(a):this.successors[a];if(!b){G.warn(`Target node not found for edge ${a}`);continue}let e=b.node_params?.id||"unknown";d.has(e)||(d.add(e),c.push({id:e,label:b.node_params?.label||"Unknown Node",type:b.node_params?.type||"unknown"}))}let e=function(a){let b=new Set,c=new Map;for(let d of a){if(c.has(d.id))continue;let a=function(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"}(d.label,d.type),e=`${z}${a}`;if(b.has(e)){let c=2;for(;b.has(`${z}${a}_${c}`);)c++;e=`${z}${a}_${c}`}b.add(e),c.set(d.id,e)}return c}(c);a.handoffNameMap=a.handoffNameMap||{};let f=null;try{let b=await i.flowService.getFlow(a.flowId);b&&(f=new Map(b.nodes.map(a=>[a.id,a])))}catch(a){G.warn("Could not load flow for handoff descriptions; using basic descriptions",{err:a})}let g=[];for(let b of c){let c=e.get(b.id)||`handoff_to_${b.id}`;a.handoffNameMap[c]=b.id;let d=f?.get(b.id),h=d?await (0,y.p)(d):`Hand off execution to ${b.label} (${b.type})`,i=d?.data?.properties,j="subflow"===b.type&&i?.inputMode==="isolated"&&i?.allowCallerPrompt===!0;g.push({name:c,description:j?`${h}
|
|
37
|
+
|
|
38
|
+
Optionally pass a "prompt" argument to instruct the target subflow; omit it to use its default prompt.`:h,inputSchema:j?{type:"object",properties:{prompt:{type:"string",description:"Instruction/prompt to run the target subflow with (isolated mode). Optional; omitted falls back to the subflow's default prompt."}},required:[]}:{type:"object",properties:{},required:[]}}),G.debug("Created handoff tool",{toolName:c,targetNodeId:b.id,targetNodeLabel:b.label})}return G.info("Generated handoff tools",{toolsCount:g.length}),g}async prep(a,b){G.info("prep() started");let c=b?.id,d=a.flowId,e=b?.properties?.boundModel,f=b?.properties?.excludeModelPrompt||!1,g=b?.properties?.excludeStartNodePrompt||!1,h=b?.properties?.excludeSystemPrompt||!1;if(G.debug("Extracted properties",{nodeId:c,flowId:d,boundModel:e,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h}),!c||!d)throw G.error("Missing required node or flow ID",{nodeId:c,flowId:d}),Error("Process node requires node ID and flow ID");if(!e)throw G.error("Missing bound model"),Error("Process node requires a bound model");G.info("Using promptRenderer to build the complete prompt");let j=await p.h.renderPrompt(d,c,{renderMode:"rendered",includeConversationHistory:!1,excludeModelPrompt:f,excludeStartNodePrompt:g,excludeSystemPrompt:h,onResourceRead:b=>a.emit?.({type:"resource:read",node:{nodeId:c},source:"pill",...b})}),k=await E((0,B.S$)(j,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,{nodeId:c}),l=b?.properties?.resourceNodes||[];l.length>0&&(k+=await w.processResourceNodes({resourceNodes:l,conversationId:a.ephemeral?void 0:a.conversationId,emit:a.emit})),G.debug("Prompt rendered successfully",{completePromptLength:k.length,completePromptPreview:k.length>100?k.substring(0,100)+"...":k}),a.currentNodeId=c;let m=[];if(a.mcpContext&&a.mcpContext.availableTools&&a.mcpContext.availableTools.length>0)G.info("Using MCP tools from shared state",{toolsCount:a.mcpContext.availableTools.length}),m=a.mcpContext.availableTools;else{let a=b?.properties?.mcpNodes||[];if(a.length>0){G.info("No MCP tools found in shared state, processing MCP nodes",{mcpNodesCount:a.length});let b=await q.ToolHandler.processMCPNodes({mcpNodes:a});if(!b.success)throw G.error("Failed to process MCP nodes",{error:b.error}),Error(`Failed to process MCP nodes: ${b.error.message}`);m=b.value.availableTools}}for(let b of(m=[...m,...await this.generateHandoffTools(a)],a.toolNameMap=a.toolNameMap||{},m))b.server&&b.originalName&&(a.toolNameMap[b.name]={server:b.server,tool:b.originalName,timeout:b.timeout});let n={nodeId:c,nodeType:"process",currentPrompt:k,boundModel:e,availableTools:m,messages:[],conversationId:a.conversationId,requireToolApproval:a.requireApproval??!1},o={id:(0,F.A)(),role:"system",content:k,timestamp:Date.now()};G.info("Added system message from prompt template",{contentLength:k.length,contentPreview:k.length>100?k.substring(0,100)+"...":k}),n.messages=(0,x.Ui)(a.messages,o);let r=b?.properties?.inputMode??"full-history",s=n.messages;try{let a=await i.flowService.getFlow(d),b=new Set((a?.nodes??[]).filter(a=>"process"===a.type&&a.data?.properties?.outputMode==="latest-message").map(a=>a.id));s=(0,x.Qv)(n.messages,b)}catch(a){G.warn("Could not resolve outputMode collapse set; sending the full wire view",{err:a})}if("full-history"!==r||s!==n.messages){let d=b?.properties?.isolatedPrompt,e=void 0!==d?await E((0,B.S$)(d,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,{nodeId:c}):d;n.wireMessages=(0,x.ij)(s,r,e)}return G.info("Assembled node context",{systemMessageCount:1,totalMessageCount:n.messages.length,inputMode:r,wireMessageCount:n.wireMessages?.length}),G.info("prep() completed",{completePromptLength:k.length,boundModel:e,hasTools:!!n.availableTools?.length,toolsCount:n.availableTools?.length||0,messagesCount:n.messages.length}),n}async execCore(a,b){G.info("execCore() started",{boundModel:a.boundModel,promptLength:a.currentPrompt?.length,messagesCount:a.messages?.length||0}),G.debug("execCore() prepResult",a);try{let c,d;if(a.availableTools&&a.availableTools.length>0){let b=q.ToolHandler.prepareTools({availableTools:a.availableTools});if(!b.success)throw G.error("Failed to prepare tools",{error:b.error}),Error(`Failed to prepare tools: ${b.error.message}`);d=b.value.tools}let e={};for(let b of a.availableTools??[])b.server&&b.originalName&&(e[b.name]={server:b.server,tool:b.originalName,timeout:b.timeout});let f=b?.label||b?.properties?.name||"Process Node",g=a.messages&&a.messages.length>0?a.messages[a.messages.length-1]:null;G.debug(`[ProcessNode ${a.nodeId}] Calling ModelHandler.callModel`,{modelId:a.boundModel,messageCount:a.messages?.length||0,toolCount:d?.length||0,lastMessageType:g?.role,lastMessageToolCallId:g?.role==="tool"?g.tool_call_id:void 0,lastMessageContentPreview:"string"==typeof g?.content?g.content.substring(0,100)+"...":"(non-string content)"});try{(c=await r.s.callModel({modelId:a.boundModel,prompt:a.currentPrompt,messages:a.messages,wireMessages:a.wireMessages,tools:d,iteration:1,maxIterations:1,maxTurns:b?.properties?.maxTurns,nodeName:f,nodeId:a.nodeId,toolNameMap:e,conversationId:a.conversationId,requireToolApproval:a.requireToolApproval})).success?G.debug(`[ProcessNode ${a.nodeId}] ModelHandler.callModel returned successfully`,{success:!0,hasContent:!!c.value?.content,contentLength:c.value?.content?.length||0,toolCallsCount:c.value?.toolCalls?.length||0}):G.warn(`[ProcessNode ${a.nodeId}] ModelHandler.callModel returned failure state unexpectedly here`,{success:!1,error:c.error})}catch(b){throw G.error(`[ProcessNode ${a.nodeId}] Error calling ModelHandler.callModel`,{error:b}),b}finally{G.debug(`[ProcessNode ${a.nodeId}] Finished attempt to call ModelHandler.callModel`)}if(!c||!c.success){let a=c?.error||{message:"Unknown model execution error after call attempt."};G.error("Model execution error after call attempt",{error:a});let b=Error(`Model execution failed: ${c.error.message}`);throw b.isModelError=!0,b.details={message:c.error.message,type:c.error.type,code:c.error.code,..."model"===c.error.type?{modelId:c.error.modelId}:{},param:"string"==typeof c.error.details?.param?c.error.details.param:void 0,status:"number"==typeof c.error.details?.status?c.error.details.status:void 0,...c.error.details},G.error("Throwing critical model error to abort flow execution",{error:c.error.message,type:c.error.type,code:c.error.code}),b}let h=c.value,i={success:!0,content:h.content||"",messages:h.messages,fullResponse:h.fullResponse,toolCalls:h.toolCalls};return h.toolCalls&&h.toolCalls.length>0&&G.info("Tool calls found in model response",{toolCallsCount:h.toolCalls.length,toolNames:h.toolCalls.map(a=>a.name).join(", ")}),G.info("execCore() completed",{responseLength:i.content?.length||0,messagesCount:i.messages?.length||0,hasToolCalls:!!i.toolCalls?.length}),G.verbose("execCore() execResult",i),i}catch(b){if(b&&"object"==typeof b&&("isCriticalToolError"in b||"isModelError"in b)){let a=b instanceof Error?b.message:String(b);throw G.error("Critical error detected - propagating to abort flow:",{error:a,isModelError:"isModelError"in b,isCriticalToolError:"isCriticalToolError"in b}),b}let a={success:!1,error:b instanceof Error?b.message:String(b),errorDetails:b instanceof Error?{message:b.message,name:b.name,stack:b.stack}:{message:String(b)}};return G.error("execCore() failed",{error:a.error,errorDetails:a.errorDetails}),G.verbose("execCore() errorResult",a),a}}processHandoffToolCalls(a,b){if(!a||0===a.length)return!1;G.info("Processing tool calls for handoff requests",{toolCallsCount:a.length});let c=(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"));for(let d of a){let{name:a}=d;if(a.startsWith("handoff_to_")){let d=b.handoffNameMap?.[a]||a.replace("handoff_to_","");for(let e of c){let c=this.successors instanceof Map?this.successors.get(e):this.successors[e];if(c&&c.node_params?.id===d)return b.handoffRequested={edgeId:e,targetNodeId:d},G.info(`Handoff requested to node ${d}`,{edgeId:e,toolName:a}),!0}}}return!1}orderedControlEdges(a){let b=a?.orderedOutgoingEdges;return Array.isArray(b)&&b.length>0?b:(this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{})).filter(a=>!a.includes("-mcpEdge")&&!a.endsWith("mcpEdge")&&!a.includes("-mcp"))}async post(a,b,c,d){if(G.debug(`[ProcessNode ${d?.id}] post() method started.`),G.info("post() started",{execResultSuccess:b.success,execResultContentLength:b.content?.length||0,messagesCount:b.messages?.length||0,toolCallsCount:b.toolCalls?.length||0}),!b.success)return c.lastResponse={success:!1,error:b.error,errorDetails:b.errorDetails},Array.isArray(c.trackingInfo.nodeExecutionTracker),G.warn(`Execution failed for node ${d?.id}. Returning ERROR_ACTION.`),e.O;c.lastResponse=b.content||"";let f=d?.properties?.captureVariable?.trim();b.success&&f&&(c.variables=c.variables??{},c.variables[f]=b.content??"",G.info("Captured node output into run variable",{captureVariable:f,nodeId:d?.id}));let g=d?.properties?.captureResource?.trim();if(b.success&&g&&c.conversationId&&!c.ephemeral)try{let a=await (0,t.tm)({conversationId:c.conversationId,name:g,mimeType:"text/markdown",kind:"text",data:{text:b.content??""},producedBy:{source:"capture",nodeId:d?.id,nodeName:d?.properties?.name}});"skipped"in a?G.warn("captureResource skipped by store cap",{captureResource:g,reason:a.skipped}):(c.emit?.({type:"resource:write",node:{nodeId:d?.id??"unknown",nodeName:d?.properties?.name,nodeType:"process"},server:"flujo",uri:a.uri,name:g,mimeType:a.mimeType,size:a.size,source:"capture"}),G.info("Captured node output into run resource",{captureResource:g,uri:a.uri,nodeId:d?.id}))}catch(a){G.error("captureResource failed; continuing run",a)}if(b.messages&&b.messages.length>0&&(c.messages=b.messages.filter(a=>"system"!==a.role),G.info("Updated messages in sharedState (system prompt excluded)",{messagesCount:c.messages.length})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"ProcessNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Process Node",modelDisplayName:a.modelDisplayName||"Unknown Model",modelTechnicalName:a.boundModel||"unknown",allowedTools:d?.properties?.allowedTools?.join(", "),timestamp:new Date().toISOString()}),G.info("Added ProcessNode tracking information",{modelDisplayName:a.modelDisplayName,modelTechnicalName:a.boundModel})),this.processHandoffToolCalls(b.toolCalls,c)&&c.handoffRequested){let a=c.handoffRequested.edgeId;return G.info(`Handoff requested via tool call, returning edge ID: ${a}`),a}let i=b.toolCalls?.filter(a=>!a.name.startsWith("handoff_to_"));if(i&&i.length>0)return G.info("Non-handoff tool calls detected, returning TOOL_CALL_ACTION"),e.Jp;let j=d?.edgeConditions;if(j&&Object.keys(j).length>0){let a=this.orderedControlEdges(d);for(let b of a){let a=j[b];if(!a)continue;let d=(0,A.PP)(c.messages,a.target);if((0,A.F9)(a,d))return G.info("Deterministic edge condition matched; routing",{edgeId:b,kind:a.kind}),b}let b=a.find(a=>!j[a]);if(b)return G.info("No edge condition matched; routing to bare fallback edge",{edgeId:b}),b;G.info("Conditioned node: no predicate matched and no bare fallback; terminating")}return G.info("No tool calls or handoff requested, returning FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new H}}var I=c(38611);let J=(0,d.h)("backend/flow/execution/handlers/MCPHandler");class K{static async executeMCP(a){let{mcpServer:b,enabledTools:c,nodeId:d,nodeRoots:e}=a;J.verbose("executeMCP input",JSON.stringify(a));try{d&&s.mcpService.setNodeRoots(b,d,e);let a=await s.mcpService.getServerStatus(b);if("connected"!==a.status){let a=await s.mcpService.connectServer(b);if(!a.success){let c={success:!1,error:(0,I.Fp)("server_connection_failed",`Failed to connect to MCP server: ${a.error}`,b,"connect")};return J.verbose("executeMCP connection error",JSON.stringify(c)),c}}let f=await s.mcpService.listServerTools(b);if(f.error){let a={success:!1,error:(0,I.Fp)("list_tools_failed",`Failed to list tools for server: ${f.error}`,b,"listTools")};return J.verbose("executeMCP list tools error",JSON.stringify(a)),a}let g={success:!0,value:{server:b,tools:f.tools||[],enabledTools:c}};return J.verbose("executeMCP success result",JSON.stringify(g)),g}catch(c){let a={success:!1,error:(0,I.Fp)("mcp_execution_failed",c instanceof Error?c.message:String(c),b,"executeMCP")};return J.verbose("executeMCP execution error",JSON.stringify(a)),a}}}var L=c(75312);let M=(0,d.h)("backend/flow/execution/nodes/MCPNode");class N extends l{async prep(a,b){M.info("prep() started");let c=b?.id||"",d=b?.properties?.boundServer,e=b?.properties?.enabledTools||[],f=b?.properties?.roots||[];if(!d)throw M.error("Missing bound server"),Error("MCP node requires a bound server");return M.info("prep() completed",{mcpServer:d,enabledToolsCount:e.length,nodeRootsCount:f.length}),{nodeId:c,nodeType:"mcp",mcpServer:d,enabledTools:e,nodeRoots:f}}async execCore(a,b){M.info("execCore() started",{mcpServer:a.mcpServer}),M.verbose("execCore() prepResult",JSON.stringify(a));try{let b=await K.executeMCP({mcpServer:a.mcpServer,enabledTools:a.enabledTools,nodeId:a.nodeId,nodeRoots:a.nodeRoots});if(!b.success)throw M.error("MCP execution failed",{error:b.error}),Error(`MCP execution failed: ${b.error.message}`);let c={success:!0,server:b.value.server,tools:b.value.tools,enabledTools:b.value.enabledTools};return M.info("execCore() completed",{server:c.server,toolsCount:c.tools?.length||0,enabledToolsCount:c.enabledTools?.length||0}),M.verbose("execCore() execResult",JSON.stringify(c)),c}catch(b){let a={success:!1,error:b instanceof Error?b.message:String(b)};return M.error("execCore() failed",{error:a.error}),M.verbose("execCore() errorResult",JSON.stringify(a)),a}}async post(a,b,c,d){if(M.info("post() started",{server:b.server,toolsCount:b.tools?.length||0,enabledToolsCount:b.enabledTools?.length||0}),M.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"MCPNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"MCP Node",timestamp:new Date().toISOString()}),M.info("Added MCPNode tracking information")),b.success&&b.server&&b.tools){let a=d?.properties?.toolTimeout,e=b.tools.filter(a=>b.enabledTools?.includes(a.name)).map(c=>({...c,originalName:c.name,server:b.server,name:(0,L.Y6)(b.server,c.name),timeout:a}));if(c.mcpContext){let a=[...c.mcpContext.availableTools||[]];for(let b of e)a.some(a=>a.name===b.name)||a.push(b);c.mcpContext.availableTools=a}else c.mcpContext={server:b.server,availableTools:e};for(let a of(c.toolNameMap=c.toolNameMap||{},e))c.toolNameMap[a.name]={server:b.server,tool:a.originalName,timeout:a.timeout};let f=e.map(a=>a.name);M.info("Stored MCP context in shared state",{server:b.server,availableToolsCount:e.length,availableToolNames:f.length>10?f.slice(0,10).join(", ")+"...":f.join(", "),totalToolsCount:c.mcpContext.availableTools.length})}M.info("post() completed"),M.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(M.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return M.info(`Returning action: ${a}`),a}return"default"}_clone(){return new N}}let O=(0,d.h)("backend/flow/execution/nodes/FinishNode");class P extends l{async prep(a,b){O.debug("prep() started");let c={nodeId:b?.id||"",nodeType:"finish",messages:a.messages};return O.debug("prep() completed",{messagesCount:c.messages.length,hasSystemPrompt:c.messages.some(a=>"system"===a.role)}),c}async execCore(a,b){O.debug("execCore() started",{messagesCount:a.messages.length}),O.verbose("execCore() prepResult",JSON.stringify(a));let c={success:!0};return O.verbose("execCore() execResult",JSON.stringify(c)),O.info("execCore() completed"),c}async post(a,b,c,d){O.info("post() started",{messagesCount:a.messages.length}),O.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"FinishNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Finish Node",timestamp:new Date().toISOString()}),O.info("Added FinishNode tracking information"));let f=a.messages[a.messages.length-1];f&&"assistant"===f.role&&f.content&&("string"==typeof f.content?c.lastResponse=f.content:c.lastResponse={content:f.content,role:f.role}),O.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let g=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(O.info("Actions:",{actionsCount:g.length,actions:g}),g.length>0){let a=g[0];return O.info(`post() completed, returning action: ${a}`),a}return O.info("post() completed, returning FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new P}}let Q=(0,d.h)("backend/execution/flow/nodes/SubflowNode");function R(a){for(let b=a.length-1;b>=0;b--)if("user"===a[b].role)return[a[b]];return a}function S(a,b,c,d,e,f){if(!a||!b)return;let g=f?{laneIndex:f.index,laneCount:f.count}:{};return b=>{let f=(b.depth??0)+1;return"run:start"===b.type?void a({type:"subflow:start",node:c,subflowId:d,subflowName:e,depth:f,...g}):"run:done"===b.type?void a({type:"subflow:done",node:c,subflowId:d,status:b.status,depth:f,...g}):"message"===b.type?void a({...b,depth:f,message:{...b.message,depth:f},...g}):void a({...b,depth:f,...g})}}class T extends l{async prep(a,b){let d=b?.properties?.subflowId,e=(b?.properties?.parallelSubflowIds??[]).filter(a=>"string"==typeof a&&""!==a.trim()),f=b?.properties?.mapOverList===!0,g=b?.properties?.itemSplit==="lines"?"lines":"json-array",h=b?.properties?.sequential===!0,i=b?.properties?.promptTemplate?.trim(),j=b?.properties?.inputMode??(i?"isolated":"full-history"),k=b?.properties?.outputMode!=="final-only",l={nodeId:b?.id||"",nodeType:"subflow",subflowId:d,depth:(a.runDepth??0)+1,parentRunId:a.conversationId,showSteps:k,emit:a.emit,nodeName:b?.properties?.name};if("isolated"===j){let c=b?.properties?.allowCallerPrompt===!0,d=a.handoffInput;d&&d.targetNodeId===b?.id?(a.handoffInput=void 0,c&&d.prompt.trim()?(l.inputText=d.prompt,Q.info("Using caller-supplied prompt for isolated subflow",{nodeId:b?.id})):l.inputText=i??""):l.inputText=i??""}else{let b=function(a){let b=[];for(let d of a){var c;if("system"===d.role||"tool"===d.role||"assistant"===d.role&&Array.isArray(d.tool_calls)&&d.tool_calls.length>0||!("string"==typeof(c=d.content)?c.trim().length>0:!!Array.isArray(c)&&c.length>0))continue;let{processNodeId:a,...e}=d;b.push({...e})}return b}(a.messages);l.messages="latest-message"===j?R(b):b}if(void 0!==l.inputText&&(l.inputText=await E((0,B.S$)(l.inputText,a.variables),a.ephemeral?void 0:a.conversationId,a.emit,b?.id?{nodeId:b.id,nodeType:"subflow"}:void 0)),f&&e.length>0&&Q.warn("SubflowNode sets both mapOverList and parallelSubflowIds; ignoring mapOverList (fan-out precedence)",{nodeId:b?.id}),e.length>0){let a=e.map(a=>({subflowId:a}));try{let{flowService:b}=await Promise.resolve().then(c.bind(c,87821));await Promise.all(a.map(async a=>{try{let c=await b.getFlow(a.subflowId);c?.name&&(a.subflowName=c.name)}catch{}}))}catch{}l.lanes=a,l.concurrencyLimit=Math.max(1,b?.properties?.concurrencyLimit??4),l.joinSeparator=b?.properties?.joinSeparator??"\n\n",l.errorStrategy=b?.properties?.errorStrategy??"collect-all"}else if(f&&d){var m;let a,e=function(a,b){let c;if("lines"===b)return a.split(/\r?\n/).map(a=>a.trim()).filter(a=>a.length>0);try{c=JSON.parse(a)}catch{return[]}return Array.isArray(c)?c.map(a=>"string"==typeof a?a:JSON.stringify(a)):[]}((void 0!==l.inputText?l.inputText:"string"==typeof(m=R(l.messages??[])[0]?.content)?m:Array.isArray(m)?m.map(a=>"string"==typeof a?a:"string"==typeof a?.text?a.text:"").join(""):"")??"",g);try{let{flowService:b}=await Promise.resolve().then(c.bind(c,87821)),e=await b.getFlow(d);e?.name&&(a=e.name)}catch{}l.lanes=e.map((b,c)=>({subflowId:d,subflowName:a,input:{prompt:b},itemIndex:c,itemCount:e.length})),l.mapOverList=!0,l.concurrencyLimit=h?1:Math.max(1,b?.properties?.concurrencyLimit??4),l.joinSeparator=b?.properties?.joinSeparator??"\n\n",l.errorStrategy=b?.properties?.errorStrategy??"collect-all"}else if(d)try{let{flowService:a}=await Promise.resolve().then(c.bind(c,87821)),b=await a.getFlow(d);b?.name&&(l.subflowName=b.name)}catch{}return Q.info("prep() completed",{subflowId:d,depth:l.depth,mode:j,historyCount:l.messages?.length,laneCount:l.lanes?.length,showSteps:k}),l}async execCore(a,b){let{runFlow:d}=await Promise.all([c.e(4671),c.e(7214)]).then(c.bind(c,57214)),e={nodeId:a.nodeId,nodeName:a.nodeName,nodeType:"subflow"},f=a.messages?{messages:a.messages}:{prompt:a.inputText??""};if(a.lanes&&a.lanes.length>0)return this.execParallel(a,d,e,f);if(a.mapOverList)return Q.info("execCore() map-over-list resolved no items → nothing to map",{subflowId:a.subflowId}),{success:!0,outputText:"",subStatus:"completed",lanes:[]};if(!a.subflowId)return{success:!1,error:"Subflow node has no flow selected (subflowId is empty)."};let g=S(a.emit,a.showSteps,e,a.subflowId,a.subflowName);Q.info("execCore() running subflow",{subflowId:a.subflowId,depth:a.depth,showSteps:a.showSteps,foldingEvents:!!g});let h=await d({flowId:a.subflowId,...f,mode:"ephemeral",flujo:!0,requireApproval:!1,debug:!1,depth:a.depth,parentRunId:a.parentRunId,...g?{emit:g}:{}});return"error"===h.status?{success:!1,error:h.error?.message||"Subflow execution failed",errorDetails:h.error?.details,subStatus:h.status}:{success:!0,outputText:h.outputText,subStatus:h.status}}async execParallel(a,b,c,d){let e=a.lanes??[],f=e.length,g=Math.max(1,a.concurrencyLimit??4),h=a.joinSeparator??"\n\n",i=a.errorStrategy??"collect-all";Q.info("execCore() running parallel subflows",{laneCount:f,concurrencyLimit:g,errorStrategy:i,depth:a.depth});let j=Array(f),k=0,l=!1,m=async g=>{let h=e[g],k=S(a.emit,a.showSteps,c,h.subflowId,h.subflowName,{index:h.itemIndex??g,count:h.itemCount??f});try{let c=await b({flowId:h.subflowId,...h.input??d,mode:"ephemeral",flujo:!0,requireApproval:!1,debug:!1,depth:a.depth,parentRunId:a.parentRunId,...k?{emit:k}:{}});j[g]="error"===c.status?{subflowId:h.subflowId,success:!1,error:c.error?.message||"Subflow execution failed"}:{subflowId:h.subflowId,success:!0,outputText:c.outputText}}catch(a){j[g]={subflowId:h.subflowId,success:!1,error:a instanceof Error?a.message:String(a)}}j[g].success||"fail-fast"!==i||(l=!0)},n=async()=>{for(;;){if(l)return;let a=k++;if(a>=f)return;await m(a)}},o=Math.min(g,f);await Promise.all(Array.from({length:o},()=>n()));let p=j.filter(a=>void 0!==a),q=p.filter(a=>a.success),r=p.filter(a=>!a.success),s=r.length>0;if("fail-fast"===i&&s){let a=p.find(a=>!a.success);return{success:!1,error:a?.error||"A parallel subflow lane failed",subStatus:"error",lanes:p}}if(0===q.length)return{success:!1,error:"All parallel subflows failed",subStatus:"error",lanes:p};let t=q.map(a=>a.outputText??"").join(h);if(s){let a=r.map(a=>`- ${a.subflowId}: ${a.error??"unknown error"}`).join("\n");t+=`${h}[${r.length} parallel subflow(s) failed:
|
|
39
|
+
${a}]`}return{success:!0,outputText:t,subStatus:"completed",lanes:p,partial:s}}async post(a,b,c,d){if(h.G.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&c.trackingInfo.nodeExecutionTracker.push({nodeType:"SubflowNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"Subflow Node",timestamp:new Date().toISOString()}),!b.success)return Q.error("Subflow failed",{subflowId:a.subflowId,error:b.error}),c.lastResponse={success:!1,error:b.error||"Subflow execution failed",errorDetails:b.errorDetails},e.O;let f=b.outputText??"",g={role:"assistant",content:f,id:crypto.randomUUID(),timestamp:Date.now(),processNodeId:d?.id};c.messages.push(g),c.lastResponse=f;let i=d?.properties?.captureVariable?.trim();i&&(c.variables=c.variables??{},c.variables[i]=f,Q.info("Captured subflow output into run variable",{captureVariable:i,nodeId:d?.id}));let j=d?.properties?.captureResource?.trim();if(j&&c.conversationId&&!c.ephemeral)try{let a=await (0,t.tm)({conversationId:c.conversationId,name:j,mimeType:"text/markdown",kind:"text",data:{text:f},producedBy:{source:"capture",nodeId:d?.id,nodeName:d?.properties?.name}});"skipped"in a?Q.warn("captureResource skipped by store cap",{captureResource:j,reason:a.skipped}):(c.emit?.({type:"resource:write",node:{nodeId:d?.id??"unknown",nodeName:d?.properties?.name,nodeType:"subflow"},server:"flujo",uri:a.uri,name:j,mimeType:a.mimeType,size:a.size,source:"capture"}),Q.info("Captured subflow output into run resource",{captureResource:j,uri:a.uri,nodeId:d?.id}))}catch(a){Q.error("captureResource failed; continuing run",a)}let k=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(k.length>0){let a=k[0];return Q.info(`post() completed, handing off via action: ${a}`),a}return Q.info("post() completed, no successor → FINAL_RESPONSE_ACTION"),e.g4}_clone(){return new T}}let U=(0,d.h)("backend/flow/execution/nodes/ResourceNode");class V extends l{async prep(a,b){return U.warn("ResourceNode.prep() reached — resource nodes are config holders and should never execute",{nodeId:b?.id}),{}}async execCore(){return{}}async post(a,b,c,d){let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});return e.length>0?e[0]:"default"}_clone(){return new V}}let W=(0,d.h)("backend/flow/execution/FlowConverter");class X{static convert(a){W.info("Converting React Flow to Pocket Flow",{flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length}),W.verbose("convert input",JSON.stringify({flowName:a.name,nodeCount:a.nodes.length,edgeCount:a.edges.length}));let b=new Map;for(let c of a.nodes){W.debug(`Creating node: ${c.id} (${c.type})`);let a=this.createNode(c);b.set(c.id,a)}for(let c of a.edges){W.debug(`Connecting edge: ${c.id} (${c.source} -> ${c.target})`);let a=b.get(c.source),d=b.get(c.target);if(a&&d)if(c.data?.edgeType==="mcp"){let b,e;W.info(`Handling MCP connection: ${c.id} (${c.source} -> ${c.target})`),a instanceof H?(b=a,e=d):d instanceof H&&(b=d,e=a),b&&e?(b.node_params.properties||(b.node_params.properties={}),b.node_params.properties.mcpNodes||(b.node_params.properties.mcpNodes=[]),b.node_params.properties.mcpNodes.push({id:e.node_params.id,properties:e.node_params.properties}),W.info("Stored MCP node in Process node properties",{processNodeId:b.node_params.id,mcpNodeId:e.node_params.id})):W.warn(`Invalid MCP connection: ${c.id}. Could not find Process and MCP nodes.`,{sourceNodeType:a.constructor.name,targetNodeType:d.constructor.name})}else if(c.data?.edgeType==="resource"){let b,e,f;if(W.info(`Handling resource connection: ${c.id} (${c.source} -> ${c.target})`),a instanceof V&&d instanceof H?(e=a,b=d,f="consume"):a instanceof H&&d instanceof V&&(b=a,e=d,f="produce"),b&&e&&f){b.node_params.properties||(b.node_params.properties={}),b.node_params.properties.resourceNodes||(b.node_params.properties.resourceNodes=[]);let a=e.node_params.properties??{};b.node_params.properties.resourceNodes.push({id:e.node_params.id,role:f,properties:a}),"produce"===f&&"run"===a.scope&&a.runName&&!b.node_params.properties.captureResource&&(b.node_params.properties.captureResource=a.runName,W.info("Derived captureResource from produce edge",{processNodeId:b.node_params.id,runName:a.runName})),W.info("Stored resource node in Process node properties",{processNodeId:b.node_params.id,resourceNodeId:e.node_params.id,role:f})}else W.warn(`Invalid resource connection: ${c.id}. Could not find Process and Resource nodes.`,{sourceNodeType:a.constructor.name,targetNodeType:d.constructor.name})}else{let b=c.id||"default";a.addSuccessor(d,b),a.node_params.orderedOutgoingEdges=a.node_params.orderedOutgoingEdges||[],a.node_params.orderedOutgoingEdges.push(b);let e=c.data?.condition;if(e&&"object"==typeof e&&(a.node_params.edgeConditions=a.node_params.edgeConditions||{},a.node_params.edgeConditions[b]=e,W.info("Retained edge condition for routing",{edgeId:b,source:c.source})),c.data?.bidirectional){let e=`${b}__reverse`;d.addSuccessor(a,e),d.node_params.orderedOutgoingEdges=d.node_params.orderedOutgoingEdges||[],d.node_params.orderedOutgoingEdges.push(e),W.info(`Connected nodes (bidirectional): ${c.target} -> ${c.source} with action: ${e}`)}W.info(`Connected nodes: ${c.source} -> ${c.target} with action: ${b}`),a.successors instanceof Map?W.debug("Source node successors after connection:",{sourceNodeId:c.source,successorsCount:a.successors.size,successorsKeys:Array.from(a.successors.keys()),hasTargetNode:a.successors.has(b)}):W.warn("Source node successors is not a Map:",{sourceNodeId:c.source,successorsType:typeof a.successors})}else W.warn(`Failed to connect edge: ${c.id}`,{sourceExists:!!a,targetExists:!!d})}let c=a.nodes.find(a=>"start"===a.type);if(!c)throw W.error("No start node found in flow"),Error("Flow must have a start node");W.debug(`Found start node: ${c.id}`);let d=b.get(c.id);if(!d)throw W.error(`Failed to retrieve start node from map: ${c.id}`),Error("Failed to create start node");let e=new m(d);return W.debug("Created Pocket Flow with start node"),W.info("Flow conversion completed successfully",{nodeCount:b.size}),W.verbose("convert result",JSON.stringify({flowStartNodeId:e.node_params?.id||"unknown",nodesCount:b.size})),e}static createNode(a){let b,c;switch(W.debug(`Creating node of type: ${a.type}`,{nodeId:a.id,label:a.data.label}),W.verbose("createNode input",JSON.stringify({nodeId:a.id,nodeType:a.type,label:a.data.label,properties:a.data.properties})),a.type){case"start":b=new o,c={id:a.id,label:a.data.label,type:"start",properties:a.data.properties||{name:a.data.label}};break;case"process":b=new H,c={id:a.id,label:a.data.label,type:"process",properties:a.data.properties||{name:a.data.label}};break;case"mcp":b=new N,c={id:a.id,label:a.data.label,type:"mcp",properties:a.data.properties||{name:a.data.label}};break;case"finish":b=new P,c={id:a.id,label:a.data.label,type:"finish",properties:a.data.properties||{name:a.data.label}};break;case"subflow":b=new T,c={id:a.id,label:a.data.label,type:"subflow",properties:a.data.properties||{name:a.data.label}};break;case"resource":b=new V,c={id:a.id,label:a.data.label,type:"resource",properties:a.data.properties||{name:a.data.label}};break;default:throw W.error(`Unknown node type: ${a.type}`,{nodeId:a.id}),Error(`Unknown node type: ${a.type}`)}return b.setParams({},c),W.debug("Node created and parameters set",{nodeId:a.id,type:a.type,propertiesKeys:Object.keys(c.properties||{})}),W.verbose("createNode result",JSON.stringify({nodeId:a.id,nodeType:a.type,nodeParams:c})),b}}let Y=(0,d.h)("backend/execution/flow/engine/PocketflowEngine");class Z{clearCache(a){a?this.pocketFlowCache.delete(a):this.pocketFlowCache.clear()}async resolveFlowDefinition(a){let b=a.flowId;if(this.pocketFlowCache.has(b))return Y.debug(`Using cached Pocket Flow for flowId: ${b}`),this.pocketFlowCache.get(b).clone();let c=a.flowSnapshot;if(c)Y.verbose(`Resolving flow ${b} from an in-memory quick-chat snapshot.`);else if(Y.verbose(`Loading and converting flow for flowId: ${b}`),!(c=await i.flowService.getFlow(b)??void 0))throw Y.error(`Flow not found for flowId: ${b}`),Error(`Flow not found: ${b}`);Y.info(`Found flow: ${c.name}`,{flowId:c.id,nodeCount:c.nodes.length,edgeCount:c.edges.length});let d=X.convert(c);return this.pocketFlowCache.set(b,d),Y.verbose(`Flow ${b} converted and cached.`),d.clone()}async findNodeById(a,b){Y.verbose(`Searching for node ${b} in flow ${a.node_params?.id}`);let c=await a.getStartNode(),d=[c],e=new Set,f=c.node_params?.id;for(f?e.add(f):Y.warn("Start node is missing an ID in its parameters.");d.length>0;){let a=d.shift();if(a.node_params?.id===b)return Y.verbose(`Found node ${b}`),a;if(a.successors instanceof Map)for(let b of a.successors.values()){let a=b.node_params?.id;"string"==typeof a&&a.length>0&&!e.has(a)&&(e.add(a),d.push(b.clone()))}}Y.warn(`Node ${b} not found in flow.`)}async resolveNode(a){let b,{conversationId:c,currentNodeId:d}=a,e=await this.resolveFlowDefinition(a);if(d)(b=await this.findNodeById(e,d))?Y.info(`Resuming conversation ${c} at node ${d}`):(Y.warn(`Resuming conversation ${c}, but node ${d} not found. Starting from beginning.`),b=await e.getStartNode());else{let d=a.messages.length>0?a.messages[a.messages.length-1]:null;d?.processNodeId?(Y.info(`Found processNodeId ${d.processNodeId} in last message. Attempting to resume from this node.`),(b=await this.findNodeById(e,d.processNodeId))?Y.info(`Resuming conversation ${c} from node ${d.processNodeId} based on last message.`):(Y.warn(`Could not find node ${d.processNodeId} from last message. Starting from beginning.`),b=await e.getStartNode())):(b=await e.getStartNode(),Y.info(`Starting conversation ${c} from the beginning.`))}if(!b)throw Error("Execution error: Cannot find starting node.");let f=b.node_params?.id;if("string"!=typeof f||0===f.length)throw Error(`Execution error: Node ${b.constructor.name} is missing an ID.`);return{handle:b,id:f,type:b.node_params?.type||"unknown",name:b.node_params?.label||"Unknown Node"}}async resolveHandoff(a,b){let{currentNodeId:c}=a;if(!c||!b)return{isSuccessorEdge:!1,targetNodeId:null};let d=await this.resolveFlowDefinition(a),e=await this.findNodeById(d,c);if(!e||!e.successors.has(b))return{isSuccessorEdge:!1,targetNodeId:null};let f=e.getSuccessor(b),g=f?.node_params?.id,h=f?.node_params?.type;return{isSuccessorEdge:!0,targetNodeId:"string"==typeof g&&g.length>0?g:null,targetNodeType:"string"==typeof h?h:null}}async runNode(a,b,c){let d=a.handle;c&&(b.emit=c);try{Y.debug(`[PocketflowEngine] Calling run() on node ${a.id} (${a.type})`);let c=await d.run(b);return Y.debug(`[PocketflowEngine] Node ${a.id} returned action: "${c.action}"`),{action:c.action,prepResult:c.prepResult,execResult:c.execResult}}finally{delete b.emit}}constructor(){this.pocketFlowCache=new Map}}let $=(0,d.h)("backend/execution/flow/FlowExecutor"),_=["messages","availableTools","fullResponse","emit"];function aa(a){let{messages:b,executionTrace:c,emit:d,mcpContext:e,...f}=a,h=g()(f);return h.messageCount=b?.length??0,e&&(h.mcpContext={server:e.server,availableTools:[]}),h}function ab(a){if(!a||"object"!=typeof a)return a;let b=g()(a);for(let a of _)a in b&&delete b[a];return b}class ac{static get conversationStates(){return global.__flujo_conversation_states||(global.__flujo_conversation_states=new Map),global.__flujo_conversation_states}static get engine(){return global.__flujo_flow_engine||(global.__flujo_flow_engine=new Z),global.__flujo_flow_engine}static set engine(a){global.__flujo_flow_engine=a}static clearFlowCache(a){this.engine.clearCache(a)}static resolveHandoff(a,b){return this.engine.resolveHandoff(a,b)}static async peekNextNodeId(a){try{return(await this.engine.resolveNode(a)).id}catch{return null}}static async executeStep(a,b){let c,d,f,{conversationId:g,flowId:i,currentNodeId:j}=a;if("string"!=typeof g||0===g.length)return $.error("executeStep called without a valid conversationId in sharedState."),a.lastResponse={success:!1,error:"Internal error: Missing conversationId."},{sharedState:a,action:e.O};$.debug(`executeStep called for conversation ${g}`,{flowId:i,currentNodeId:j});let k=h.G.ENABLE_EXECUTION_TRACKER||!!a.debugMode,l=j;try{let e=await this.engine.resolveNode(a);l=e.id,a.currentNodeId=e.id,$.info(`Executing step for node ${e.id} (${e.type}) in conversation ${g}`),k&&!a.executionTrace&&(a.executionTrace=[]),c=aa(a),b?.({type:"node:enter",node:{nodeId:e.id,nodeName:e.name,nodeType:e.type}});let h=await this.engine.runNode(e,a,b),i=h.action;d=h.prepResult,f=h.execResult,b?.({type:"node:exit",node:{nodeId:e.id,nodeName:e.name,nodeType:e.type},action:i}),$.debug(`Node ${e.id} finished with action: ${i} for conversation ${g}`);let j=aa(a);if(k&&a.executionTrace){let b=a.executionTrace.length,h={stepIndex:b,nodeId:e.id,nodeType:e.type,nodeName:e.name,timestamp:new Date().toISOString(),actionTaken:i,stateBefore:c,stateAfter:j,prepResultSnapshot:ab(d),execResultSnapshot:ab(f)};a.executionTrace.push(h),$.verbose(`Appended step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),$.debug(`[FlowExecutor] Returning from executeStep for node ${e.id} with action: "${i}"`),{sharedState:a,action:i}}catch(i){let f=l||"unknown node";$.error(`Error during node execution step for ${f} in conversation ${g}`,{error:i});let h=i?.details;if(a.lastResponse={success:!1,error:i instanceof Error?i.message:String(i),errorDetails:i instanceof Error?{name:i.name,message:i.message,stack:i.stack,...h&&"object"==typeof h?h:{}}:{message:String(i)}},a.currentNodeId=l,b?.({type:"error",node:l?{nodeId:l}:void 0,message:i instanceof Error?i.message:String(i)}),k&&a.executionTrace){let b=a.executionTrace.length,h={stepIndex:b,nodeId:f,nodeType:"unknown",nodeName:"Unknown Node",timestamp:new Date().toISOString(),actionTaken:e.O,stateBefore:c??aa(a),stateAfter:aa(a),prepResultSnapshot:d?ab(d):null,execResultSnapshot:{success:!1,error:a.lastResponse}};a.executionTrace.push(h),$.verbose(`Appended ERROR step ${b} to execution trace for conversation ${g}`)}return this.conversationStates.set(g,a),{sharedState:a,action:e.O}}}}},45131:(a,b,c)=>{c.d(b,{C:()=>e,F9:()=>i,PP:()=>h,wM:()=>f});let d=["contains","regex","equals"];function e(a){return"string"==typeof a&&d.includes(a)}function f(a){try{return new RegExp(a),!0}catch{return!1}}function g(a){return"string"==typeof a?a:Array.isArray(a)?a.map(a=>"string"==typeof a?a:a&&"object"==typeof a&&"text"in a&&"string"==typeof a.text?a.text:"").join(""):""}function h(a,b="last-assistant"){if(!Array.isArray(a)||0===a.length)return null;if("last-message"===b)return g(a[a.length-1]?.content);for(let b=a.length-1;b>=0;b--)if(a[b]?.role==="assistant")return g(a[b]?.content);return null}function i(a,b){let c;if(!a)return!1;let d="string"==typeof b?b:"",e="string"==typeof a.value?a.value:String(a.value??"");switch(a.kind){case"contains":c=a.ignoreCase?d.toLowerCase().includes(e.toLowerCase()):d.includes(e);break;case"equals":c=a.ignoreCase?d.toLowerCase()===e.toLowerCase():d===e;break;case"regex":{let b;try{b=new RegExp(e,a.ignoreCase?"i":void 0)}catch(a){return console.warn("[edgeConditions] invalid regex predicate; treating as no-match",e,a),!1}c=b.test(d);break}default:return console.warn("[edgeConditions] unknown condition kind; treating as no-match",a.kind),!1}return a.negate?!c:c}},60184:(a,b,c)=>{c.d(b,{$b:()=>z,D$:()=>r,LB:()=>q,Os:()=>t,RU:()=>u,UG:()=>x,cc:()=>v,jM:()=>y,u8:()=>s});var d=c(29021),e=c(33873),f=c.n(e),g=c(50846),h=c(43326);let i=(0,g.h)("backend/execution/flow/conversationLog"),j=new Set(["run:start","run:done","node:enter","node:exit","handoff","message","message:removed","tool:call","tool:result","usage","subflow:start","subflow:done","resource:read","resource:write","error"]),k=/^[A-Za-z0-9_-]+$/,l=f().join((0,h.ok)(),"db","conversation-logs");function m(a){return f().join(l,`${a}.jsonl`)}let n=new Map;function o(a,b){let c=(n.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{await d.promises.mkdir(l,{recursive:!0}),await d.promises.appendFile(m(a),b)});return n.set(a,c),c.finally(()=>{n.get(a)===c&&n.delete(a)})}function p(a){return`${JSON.stringify(a)}
|
|
40
|
+
`}function q(a){if(j.has(a.type)){if(!k.test(a.conversationId))return void i.warn("Refusing to log event for unsafe conversation id",{conversationId:a.conversationId});(function(a){try{let{FlowExecutor:b}=c(44498),d=b.conversationStates.get(a);if(!d)return!1;return!d.ephemeral}catch(b){return i.warn(`Could not resolve persistence policy for ${a}; not persisting.`,{err:b}),!1}})(a.conversationId)&&o(a.conversationId,p(a)).catch(b=>i.warn(`Failed to append event to conversation log ${a.conversationId}`,{err:b}))}}async function r(a,b){if(0===b.length||a.ephemeral)return;let c=a.conversationId;if(!c||!k.test(c))return;let d=b.map(a=>p({...a,conversationId:c,seq:-1,timestamp:Date.now()})).join("");try{await o(c,d)}catch(a){i.warn(`Failed to append ${b.length} event(s) to conversation log ${c}`,{err:a})}}function s(a){let b=n.get(a);return b?b.then(()=>void 0,()=>void 0):Promise.resolve()}async function t(a){let b;if(!k.test(a))return;try{b=await d.promises.readFile(m(a),"utf-8")}catch(b){if("ENOENT"===b.code)return;i.error(`Error reading conversation log ${a}:`,b);return}let c=[],e=0;for(let a of b.split("\n"))if(0!==a.trim().length)try{c.push(JSON.parse(a))}catch{e++}return e>0&&i.warn(`Skipped ${e} unparseable line(s) in conversation log ${a} (truncated append?)`),c}async function u(a){if(k.test(a))try{await d.promises.unlink(m(a))}catch(b){"ENOENT"!==b.code&&i.warn(`Error deleting conversation log ${a}:`,b)}}function v(a){let b=[],c=new Map;for(let d of a)if("message"===d.type){let a=d.message;if(!a||!a.id||"system"===a.role)continue;let e=d.depth??0,f=e>0?{...a,depth:e}:{...a},g=c.get(a.id);void 0!==g?b[g]=f:(c.set(a.id,b.length),b.push(f))}else if("message:removed"===d.type){let a=c.get(d.messageId);if(void 0===a)continue;for(let[e,f]of(b.splice(a,1),c.delete(d.messageId),c))f>a&&c.set(e,f-1)}return b}function w(a){return JSON.stringify([a.role,a.content,a.tool_calls??null,a.disabled??!1,a.processNodeId??null])}async function x(a,b){if(a.ephemeral)return;let c=a.conversationId;if(!c||!k.test(c))return;let d=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id),e=await A(c)?b.filter(a=>"system"!==a.role&&!!a.id):[],f=new Map(e.map(a=>[a.id,a])),g=new Set(d.map(a=>a.id)),h=[];for(let a of d){let b=f.get(a.id);b&&w(b)===w(a)||h.push({type:"message",message:a})}for(let a of e)g.has(a.id)||h.push({type:"message:removed",messageId:a.id});await r(a,h)}async function y(a){if(a.ephemeral)return!1;let b=a.conversationId;if(!b||!k.test(b))return!1;let c=await t(b);if(!c)return!1;let d=v(c).filter(a=>!((a.depth??0)>0)),e=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id).map(a=>a.id);if(d.length<=e.length)return!1;let f=new Set(d.map(a=>a.id));return!!e.every(a=>f.has(a))&&(i.info(`Recovered ${d.length-e.length} message(s) from the conversation log for ${b} (snapshot was behind).`),a.messages=d,!0)}async function z(a){if(a.ephemeral)return;let b=a.conversationId;if(!b||!k.test(b))return;let c=await t(b);if(!c)return;let e=v(c).filter(a=>!((a.depth??0)>0)),f=(a.messages??[]).filter(a=>"system"!==a.role&&!!a.id);if(e.length>=f.length)return;let g=new Set(f.map(a=>a.id));if(!e.every(a=>g.has(a.id)))return;let h=f.map(a=>p({type:"message",message:a,conversationId:b,seq:-1,timestamp:Date.now()})).join("");try{await function(a,b){let c=(n.get(a)??Promise.resolve()).catch(()=>{}).then(async()=>{await d.promises.mkdir(l,{recursive:!0}),await d.promises.writeFile(m(a),b)});return n.set(a,c),c.finally(()=>{n.get(a)===c&&n.delete(a)})}(b,h),i.info(`Rebuilt truncated conversation log for ${b} from snapshot (${e.length} → ${f.length} message(s)); issue #49 self-heal.`)}catch(a){i.warn(`Failed to rebuild truncated conversation log ${b}`,{err:a})}return f}async function A(a){if(!k.test(a))return!1;try{return await d.promises.access(m(a)),!0}catch{return!1}}},61539:(a,b,c)=>{c.d(b,{Bt:()=>B,FA:()=>D,Ns:()=>u,gy:()=>E,iQ:()=>F,jR:()=>w,tm:()=>A,yP:()=>C});var d=c(29021),e=c(33873),f=c.n(e),g=c(55511),h=c(50846),i=c(43326),j=c(92372),k=c(46480),l=c(2826);let m=(0,h.h)("backend/services/runResources"),n=f().join((0,i.ok)(),"db","run-resources"),o=/^[A-Za-z0-9_-]{1,64}$/;function p(a,b){if("string"!=typeof a||!o.test(a))throw Error(`Unsafe run-resource ${b}: ${JSON.stringify(a)}`)}let q=a=>f().join(n,a),r=a=>f().join(q(a),"index.json"),s=(a,b)=>f().join(q(a),`${b}.dat`),t=a=>`run-resources/${a}`;function u(a){if("string"!=typeof a||!a.startsWith(l.j))return null;let b=a.slice(l.j.length).split("/");if(2!==b.length)return null;let[c,d]=b;return o.test(c)&&o.test(d)?{conversationId:c,id:d}:null}let v=null;async function w(){let a;if(v&&Date.now()-v.at<3e4)return v.value;try{let b=await (0,j.YM)(k.Z.RUN_RESOURCE_SETTINGS,l.R);a={...l.R,...b}}catch(b){m.warn("Failed to load run-resource settings; using defaults",b),a=l.R}return v={value:a,at:Date.now()},a}let x=global.__flujo_run_resources??(global.__flujo_run_resources=new Map);async function y(a){let b=x.get(a);if(b)return b;let c=[];try{let b=await d.promises.readFile(r(a),"utf-8");if(b.trim().length>0){let a=JSON.parse(b);Array.isArray(a)&&(c=a)}}catch(b){"ENOENT"!==b.code&&m.error(`Failed to read run-resource index for ${a}; treating as empty`,b)}return x.set(a,c),c}async function z(a,b){x.set(a,b),await (0,j.l_)(t(a),()=>(0,j.Zf)(r(a),JSON.stringify(b,null,2)))}async function A(a){var b;let c;p(a.conversationId,"conversationId");let e=await w(),f=null,h="utf8";a.data&&("text"in a.data?(f=Buffer.from(a.data.text,"utf8"),h="utf8"):(f=Buffer.from(a.data.base64,"base64"),h="base64"));let i=f?.byteLength??0;if(i>e.maxResourceBytes)return m.warn(`Run-resource write skipped (size ${i} > cap ${e.maxResourceBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"size-cap"};let j=await y(a.conversationId);a.name&&(c=j.find(b=>b.name===a.name));let k=j.reduce((a,b)=>a+(b===c?0:b.size),0);if(k+i>e.maxConversationBytes)return m.warn(`Run-resource write skipped (conversation budget ${k}+${i} > ${e.maxConversationBytes})`,{conversationId:a.conversationId,name:a.name,kind:a.kind}),{skipped:"conversation-cap"};let n=(0,g.randomUUID)(),o={id:n,uri:(b=a.conversationId,`${l.j}${b}/${n}`),conversationId:a.conversationId,name:a.name,mimeType:a.mimeType,size:i,kind:a.kind,encoding:h,createdAt:Date.now(),producedBy:a.producedBy,origin:a.origin,readBy:[]};f&&(await d.promises.mkdir(q(a.conversationId),{recursive:!0}),await d.promises.writeFile(s(a.conversationId,n),f));let r=c?j.filter(a=>a!==c):j.slice();return r.push(o),await z(a.conversationId,r),c&&c.size>0&&d.promises.unlink(s(a.conversationId,c.id)).catch(()=>{}),m.debug(`Stored run resource ${o.uri}`,{kind:o.kind,size:i,name:o.name}),o}async function B(a){return p(a,"conversationId"),(await y(a)).slice()}async function C(a=200){let b=[];try{b=(await d.promises.readdir(n,{withFileTypes:!0})).filter(a=>a.isDirectory()&&o.test(a.name)).map(a=>a.name)}catch(a){if("ENOENT"===a.code)return[];throw a}let c=[];for(let a of b)c.push(...await y(a));return c.sort((a,b)=>b.createdAt-a.createdAt),c.slice(0,a)}async function D(a,b){return p(a,"conversationId"),(await y(a)).find(a=>a.name===b)??null}async function E(a,b){let c,e=u(a);if(!e)return null;let f=await y(e.conversationId),g=f.find(a=>a.id===e.id);if(!g)return null;if("link"===g.kind)c={contents:[{uri:g.uri,mimeType:g.mimeType??"text/plain",text:`Run resource link → ${g.origin?`${g.origin.server}: ${g.origin.uri}`:"unknown origin"}`}]};else{let b;try{b=await d.promises.readFile(s(e.conversationId,e.id))}catch(b){return m.error(`Run-resource payload missing for ${a}`,b),null}c="utf8"===g.encoding?{contents:[{uri:g.uri,mimeType:g.mimeType??"text/plain",text:b.toString("utf8")}]}:{contents:[{uri:g.uri,mimeType:g.mimeType??"application/octet-stream",blob:b.toString("base64")}]}}return b&&(g.readBy.push(b),z(e.conversationId,f).catch(b=>m.warn(`Failed to persist readBy for ${a}`,b))),{entry:g,contents:c}}async function F(a){p(a,"conversationId"),x.delete(a),await (0,j.l_)(t(a),async()=>{try{await d.promises.rm(q(a),{recursive:!0,force:!0}),m.debug(`Deleted run resources for conversation ${a}`)}catch(b){m.warn(`Failed to delete run resources for ${a}`,b)}})}},67490:(a,b,c)=>{c.d(b,{A:()=>d});let d=8},75312:(a,b,c)=>{c.d(b,{$9:()=>g,Y6:()=>e,ud:()=>f});let d="_-_-_";function e(a,b){let c=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(36)}(`${a}\0${b}`),d=64-(5+c.length),e=b.replace(/[^a-zA-Z0-9_-]/g,"_").slice(0,Math.max(0,d));return`mcp_${e}_${c}`}function f(a,b){if(b&&b[a])return b[a];if(a.includes(d)){let b=a.split(d);if(3===b.length)return{server:b[1],tool:b[2]}}return null}function g(a,b){return!!b&&!!b[a]||a.includes(d)}},76813:(a,b,c)=>{c.d(b,{J:()=>g,Rt:()=>h,sf:()=>f});let d=globalThis,e=d.__flujoToolApprovals??(d.__flujoToolApprovals=new Map);function f(a,b,c){let d=e.get(a);d||(d=new Map,e.set(a,d)),d.set(b.id,{toolCall:b,resolve:c})}function g(a,b,c){let d=e.get(a),f=d?.get(b);return!!d&&!!f&&(d.delete(b),0===d.size&&e.delete(a),f.resolve(c),!0)}function h(a){let b=e.get(a);return b?Array.from(b.values(),a=>a.toolCall):[]}},83964:(a,b,c)=>{function d(a){return"assistant"===a.role&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0}function e(a){let b=a.length-1;for(;b>=0;b--){let c=a[b];if(!("tool"===c.role||d(c)))break}let c=a.slice(b+1);return c.some(d)?c:[]}function f(a,b,c){if(!b||"full-history"===b)return a;let d=a.filter(a=>"system"===a.role);if("isolated"===b)return[...d,{role:"user",content:c??"",id:"isolated-input",timestamp:0},...e(a)];let f=-1;for(let b=a.length-1;b>=0;b--)if("user"===a[b].role){f=b;break}return -1===f?a:[...d,...a.slice(f)]}function g(a){return a.tool_calls.some(a=>"function"===a.type&&i(a.function.name))}function h(a,b){if(0===b.size)return a;let c=a.length-e(a).length,f=Array(c).fill(!1);for(let b=0;b<c;){let e=a[b].processNodeId,h=b;for(;h<c&&a[h].processNodeId===e;)h++;let i=!1;if(e)for(let c=b;c<h;c++){let b=a[c];if("assistant"===b.role&&k(b)&&(!d(b)||g(b))){i=!0;break}}for(let a=b;a<h;a++)f[a]=i;b=h}let h=new Set,i=[],j=!1;for(let e=0;e<a.length;e++){let l=a[e];if(e<c){if(d(l)&&l.processNodeId&&b.has(l.processNodeId)&&f[e]){for(let a of l.tool_calls)h.add(a.id);if(j=!0,g(l)&&k(l)){let{tool_calls:a,...b}=l;i.push(b)}continue}if("tool"===l.role&&l.tool_call_id&&h.has(l.tool_call_id)){j=!0;continue}}i.push(l)}return j?i:a}function i(a){return"handoff"===a||a.startsWith("handoff_to_")}function j(a,b){return[b,...a.filter(a=>"system"!==a.role)]}function k(a){return"string"==typeof a.content?a.content.trim().length>0:!!Array.isArray(a.content)&&a.content.length>0}function l(a){return(function(a){let b=new Set;for(let c of a)if("assistant"===c.role&&Array.isArray(c.tool_calls))for(let a of c.tool_calls)"function"===a.type&&i(a.function.name)&&b.add(a.id);let c=[];for(let d of a)if(("user"!==d.role||"string"!=typeof d.content||"The handoff was successful. Continue"!==d.content.trim())&&!("tool"===d.role&&d.tool_call_id&&b.has(d.tool_call_id))){if("assistant"===d.role&&Array.isArray(d.tool_calls)&&d.tool_calls.some(a=>"function"===a.type&&i(a.function.name))){let a=d.tool_calls.filter(a=>!("function"===a.type&&i(a.function.name)));if(a.length>0)c.push({...d,tool_calls:a});else if(k(d)){let{tool_calls:a,...b}=d;c.push(b)}continue}c.push(d)}return c})(a).map(({id:a,timestamp:b,disabled:c,processNodeId:d,depth:e,usage:f,...g})=>g)}c.d(b,{Qv:()=>h,Ui:()=>j,ae:()=>l,ij:()=>f})},99978:(a,b,c)=>{c.d(b,{E5:()=>g,Jp:()=>d,O:()=>f,g4:()=>e});let d="TOOL_CALL",e="FINAL_RESPONSE",f="ERROR",g="STAY_ON_NODE"}};
|