flujo-ai 3.33.0 → 3.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +240 -240
- package/.next/app-path-routes-manifest.json +14 -14
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +21 -21
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route.js.nft.json +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route.js.nft.json +1 -1
- package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route.js +1 -1
- package/.next/server/app/api/flow/compile/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route.js +1 -1
- package/.next/server/app/api/flow/generate/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route.js +25 -4
- package/.next/server/app/api/flow/generator/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route.js +1 -1
- package/.next/server/app/api/flow/improve/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route.js +1 -1
- package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route.js +1 -1
- package/.next/server/app/api/init/route.js.nft.json +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route.js.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.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.nft.json +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route.js.nft.json +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route.js.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route.js +1 -1
- package/.next/server/app/api/packages/build/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/installed/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route.js +1 -1
- package/.next/server/app/api/packages/resolve/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js.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.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.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route.js +1 -1
- package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
- package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route.js +1 -1
- package/.next/server/app/api/waves/route.js.nft.json +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +3 -3
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +2 -2
- package/.next/server/app/executions/page.js +2 -2
- package/.next/server/app/executions/page.js.nft.json +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +3 -3
- package/.next/server/app/flows/page.js +3 -3
- package/.next/server/app/flows/page.js.nft.json +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +3 -3
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +3 -3
- package/.next/server/app/mcp/page.js +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +3 -3
- package/.next/server/app/models/page.js +1 -1
- package/.next/server/app/models/page.js.nft.json +1 -1
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +1 -1
- package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages.html +1 -1
- package/.next/server/app/packages.rsc +3 -3
- package/.next/server/app/page.js +4 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +3 -3
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.js.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.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.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.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.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.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.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.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.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +2 -2
- package/.next/server/app-paths-manifest.json +14 -14
- package/.next/server/chunks/1114.js +1 -1
- package/.next/server/chunks/1226.js +1 -1
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/166.js +5 -5
- package/.next/server/chunks/1664.js +1 -1
- package/.next/server/chunks/227.js +1 -1
- package/.next/server/chunks/2273.js +1 -1
- package/.next/server/chunks/3717.js +1 -0
- package/.next/server/chunks/4466.js +1 -1
- package/.next/server/chunks/4551.js +1 -1
- package/.next/server/chunks/4771.js +1 -1
- package/.next/server/chunks/519.js +2 -0
- package/.next/server/chunks/5285.js +1 -0
- package/.next/server/chunks/5309.js +78 -0
- package/.next/server/chunks/544.js +4 -4
- package/.next/server/chunks/5463.js +1 -1
- package/.next/server/chunks/5544.js +4 -4
- package/.next/server/chunks/{5708.js → 6041.js} +1 -1
- package/.next/server/chunks/6747.js +42 -13
- package/.next/server/chunks/7628.js +1 -1
- package/.next/server/chunks/7630.js +11 -0
- package/.next/server/chunks/8284.js +42 -0
- package/.next/server/chunks/8645.js +1 -1
- package/.next/server/chunks/9235.js +25 -4
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/2005.4eea65c00d9a29cd.js +1 -0
- package/.next/static/chunks/3429-34fb1a84aed96703.js +1 -0
- package/.next/static/chunks/{2005-f9d38c39f10c321f.js → 4386-e9621d3c94969a68.js} +1 -1
- package/.next/static/chunks/4919-6c8a48e3cc642349.js +1 -0
- package/.next/static/chunks/7561-2b366ddcbc3cc0ec.js +1 -0
- package/.next/static/chunks/8404-5aa8ea49197b98b8.js +1 -0
- package/.next/static/chunks/{8650-41c2afc0eba37fb8.js → 8650-5294c6ed1173b014.js} +1 -1
- package/.next/static/chunks/app/chat/{page-1d100e5d974c919e.js → page-bc7807593b8b7394.js} +1 -1
- package/.next/static/chunks/app/executions/page-8296fd69c439ccee.js +1 -0
- package/.next/static/chunks/app/flows/page-87fb466e491fc068.js +1 -0
- package/.next/static/chunks/app/{layout-38b88f3b057f4852.js → layout-abed1f211e03152f.js} +1 -1
- package/.next/static/chunks/app/mcp/page-1648e6fde0c41461.js +1 -0
- package/.next/static/chunks/app/models/{page-808c0568ebc5e2c7.js → page-a5e2437356b06db8.js} +1 -1
- package/.next/static/chunks/app/packages/page-fba5696f33d9cdfb.js +1 -0
- package/.next/static/chunks/app/page-2f9da78a4891731a.js +1 -0
- package/.next/static/chunks/app/settings/page-2fc3a70bfd25c48b.js +1 -0
- package/.next/static/chunks/{webpack-dccb4f149ebdedcc.js → webpack-d5d737ff6a86674f.js} +1 -1
- package/.next/trace +10 -10
- package/README.md +16 -15
- package/package.json +5 -5
- package/.next/server/chunks/2985.js +0 -1
- package/.next/server/chunks/4366.js +0 -2
- package/.next/server/chunks/5040.js +0 -48
- package/.next/server/chunks/8187.js +0 -78
- package/.next/server/chunks/8851.js +0 -1
- package/.next/static/chunks/289-98f50bfcf833d661.js +0 -1
- package/.next/static/chunks/3089.df88f3b16898aad7.js +0 -1
- package/.next/static/chunks/8041-05830e887c133085.js +0 -1
- package/.next/static/chunks/8404-bfa9203e4296f3fb.js +0 -1
- package/.next/static/chunks/95-b9691d3cb15556dc.js +0 -1
- package/.next/static/chunks/app/executions/page-10ec7d58c7fbdd6f.js +0 -1
- package/.next/static/chunks/app/flows/page-9a78a2915268b2f8.js +0 -1
- package/.next/static/chunks/app/mcp/page-56b43b2f8752e9a5.js +0 -1
- package/.next/static/chunks/app/packages/page-af6ec89522915206.js +0 -1
- package/.next/static/chunks/app/page-30bf4293efa47a47.js +0 -1
- package/.next/static/chunks/app/settings/page-59ae1b658838f0bc.js +0 -1
- /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → Zz_Vh59XdtLIPcf-PxCpo}/_buildManifest.js +0 -0
- /package/.next/static/{jfb1GsjSGMjBmwfa3kM26 → Zz_Vh59XdtLIPcf-PxCpo}/_ssgManifest.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";exports.id=166,exports.ids=[166,8092],exports.modules={40166:(a,b,c)=>{let d,e;c.d(b,{bashCallTool:()=>K,bashToolDefinitions:()=>D});var f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(79646),k=c(18230);let l=(0,k.h)("utils/process/killProcessTree");function m(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,j.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>l.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){l.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let d=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return d.unref?.(),()=>clearTimeout(d)}var n=c(85510),o=c(94749),p=c(48092),q=c(65858);let r=(0,k.h)("backend/services/mcp/internal/bashTools");function s(a){let b=process.env[a];if(void 0!==b)return b;let c=Object.keys(process.env).find(b=>b.toLowerCase()===a.toLowerCase());return c?process.env[c]:void 0}function t(a){let b=(s("PATH")??"").split(g().delimiter).filter(Boolean),c="win32"===process.platform?(s("PATHEXT")??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let d of b)for(let b of c){let c=g().join(d,`${a}${b}`);try{if(i().statSync(c).isFile())return c}catch{}}return null}function u(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function v(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let w=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];async function x(a,b){let c=(0,n.getDataDir)(),d="string"==typeof a?a.trim():"",e=d?g().isAbsolute(d)?g().resolve(d):g().resolve(c,d):c;if(await (0,q.cd)()){let a=(0,q.bz)(e);if(a.denied)throw Error(`cwd "${e}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${q.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,p.F)(a,e)))throw Error(`cwd "${e}" is outside the configured bash roots.`);return e}async function y(a,b,c){let d=[],e=await (0,q.cd)(),f=new Set,h=(a.match(/(?:[A-Za-z]:[\\/][^\s"']*|\\\\[^\s"']+|~\/[^\s"']*|(?<![\w.])\/[^\s"']+)/g)??[]).filter(a=>!("win32"===process.platform&&/^\/[A-Za-z]$/.test(a))),i=(()=>{try{return(0,n.getHomeDir)()}catch{return""}})();for(let a of h){let h,j=a;j.startsWith("~/")&&i&&(j=g().join(i,j.slice(2)));try{h=g().isAbsolute(j)?g().resolve(j):g().resolve(b,j)}catch{continue}if(f.has(h))continue;f.add(h);let k=e?(0,q.bz)(h):{denied:!1};k.denied?d.push(`Command references "${a}", which is inside a protected location (${k.matchedRoot}).`):c.length>0&&!c.some(a=>(0,p.F)(a,h))&&d.push(`Command references "${a}", which is outside the configured working roots.`)}return d}let z=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]);function A(a){return"pwsh"===a||"bash"===a?a:"default"}function B(a,b,c){let{file:f,args:h,useShell:k,effectiveShell:l,unavailableShell:m}=function(a,b){if("pwsh"===b){let b=void 0!==e?e:e=t("pwsh");return b?{file:b,args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1,effectiveShell:"pwsh"}:{file:"",args:[],useShell:!1,effectiveShell:"pwsh",unavailableShell:"pwsh"}}if("bash"===b){let b=function(){if(void 0!==d)return d;let a=t("bash");return a||"win32"!==process.platform||(a=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData].filter(a=>!!a).flatMap(a=>[g().join(a,"Git","bin","bash.exe"),g().join(a,"Git","usr","bin","bash.exe"),g().join(a,"Programs","Git","bin","bash.exe"),g().join(a,"Programs","Git","usr","bin","bash.exe")]).find(a=>{try{return i().statSync(a).isFile()}catch{return!1}})??null),d=a,a}();return b?{file:b,args:["-c",a],useShell:!1,effectiveShell:"bash"}:{file:"",args:[],useShell:!1,effectiveShell:"bash",unavailableShell:"bash"}}return{file:a,args:[],useShell:!0,effectiveShell:"default"}}(a,c);if(m)return{effectiveShell:l,unavailableShell:m};let n="win32"!==process.platform;try{return{child:(0,j.spawn)(f,h,{cwd:b,shell:k,env:function(){var a;if("string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim()))return process.env;let b={};for(let a of Object.keys(process.env))(z.has(a)||/^LC_/.test(a))&&(b[a]=process.env[a]);return b}(),detached:n}),effectiveShell:l}}catch(a){return{startError:a instanceof Error?a.message:String(a),effectiveShell:l}}}function C(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function D(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Explicit shells return an error if unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function E(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function F(a,b){let c=String(a?.command??"").trim();if(!c)return v({error:'Provide "command": a shell command line to run.'},!0);let d=await x(a.cwd,b),e=await y(c,d,b),f=e.length?{warnings:e}:{},g=A(a.shell),h=!0===a.normalizeNewlines,i=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,e="",j=!1,k=!1,l=!1,n=C(()=>e,(a,b)=>{e=a,j=b||j}),{child:o,startError:p,effectiveShell:q,unavailableShell:r}=B(c,d,g);if(r)return void a(v({error:`Requested shell "${r}" is unavailable or could not be resolved.`,cwd:d,shell:r},!0));if(p||!o)return void a(v({error:`Failed to start command (${q}): ${p??"unknown error"}`,cwd:d,shell:q},!0));let s=setTimeout(()=>{l=!0,b=m(o)},i),t=c=>{k||(k=!0,clearTimeout(s),b?.(),a(c))};o.stdout?.on("data",a=>n(a.toString())),o.stderr?.on("data",a=>n(a.toString())),o.on("error",a=>{n(`
|
|
2
|
-
${a.message}`),t(v({error:`Command failed to start (${q}): ${a.message}`,cwd:d,shell:q,output:
|
|
3
|
-
[killed after ${i/1e3}s timeout]`,...f},!0));t(v({exitCode:a,cwd:d,shell:q,truncated:j,output:b,...f},0!==a))})})}function
|
|
4
|
-
${a.message}`),n.running=!1,n.endedAt=Date.now(),
|
|
5
|
-
`;try{g.child.stdin?.write(i)}catch(a){return v({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return v({sessionId:f,written:Buffer.byteLength(i,"utf8")});case"kill":let j=String(b?.sessionId??""),k=u().get(j);return k?(k.running&&(k.cancelEscalation=m(k.child)),v({sessionId:j,killed:!0})):v({error:`No background session with id "${j}".`},!0);case"list_sessions":return v({sessions:Array.from(u().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return v({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return r.warn("bashCallTool failed",{toolName:a,err:b}),v({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},48092:(a,b,c)=>{c.d(b,{F:()=>j,loadEffectiveRoots:()=>l});var d=c(33873),e=c.n(d),f=c(79551),g=c(18230),h=c(94749);let i=(0,g.h)("backend/services/mcp/internal/confinement");function j(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function k(a,b){let{resolveGlobalVars:d}=await Promise.resolve().then(c.bind(c,87507)),g=(await d(a)).trim();if(!g)return null;if(g.startsWith("file://"))try{return e().resolve((0,f.fileURLToPath)(g))}catch(a){return i.warn(`resolveRootToPath: could not parse file URI "${g}"`,a),null}return e().isAbsolute(g)?e().resolve(g):e().resolve(b,g)}async function l(a,b,d){let{getDataDir:f}=await Promise.resolve().then(c.bind(c,85510)),g=f(),l=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),m=[];try{for(let b of(await (0,h.AC)(a)))m.push(e().isAbsolute(b)?e().resolve(b):e().resolve(g,b))}catch(a){i.warn("loadEffectiveRoots: could not read persisted roots",a)}try{let{getNodeRoots:b,getNodeRootsForId:e}=await Promise.resolve().then(c.bind(c,28181));for(let c of void 0!==d?(()=>{let c=e(a,d);return c.length>0?c:b(a)})():b(a)){let a=await k(c,g);a&&m.push(a)}}catch(a){i.warn("loadEffectiveRoots: could not read node roots",a)}let n=Array.from(new Set(m));if(!l)return 0===n.length?[g]:n;let o=n.filter(a=>l.some(b=>j(b,a)));return o.length?o:l}},65858:(a,b,c)=>{c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(85510),i=c(79111),j=c(31296),k=c(48092);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.YM)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}}};
|
|
1
|
+
exports.id=166,exports.ids=[166,8092],exports.modules={40166:(a,b,c)=>{"use strict";let d,e;c.d(b,{bashCallTool:()=>L,bashToolDefinitions:()=>E});var f=c(33873),g=c.n(f),h=c(29021),i=c.n(h),j=c(79646),k=c(18230);let l=(0,k.h)("utils/process/killProcessTree");function m(a,b=2e3){let c=a.pid;if(void 0===c)return()=>{};if("win32"===process.platform){try{(0,j.spawn)("taskkill",["/pid",String(c),"/T","/F"]).on("error",a=>l.debug(`taskkill failed for pid ${c}: ${a.message}`))}catch(a){l.debug(`taskkill spawn threw for pid ${c}: ${a instanceof Error?a.message:String(a)}`)}return()=>{}}try{process.kill(-c,"SIGTERM")}catch{}let d=setTimeout(()=>{try{process.kill(-c,"SIGKILL")}catch{}},b);return d.unref?.(),()=>clearTimeout(d)}var n=c(85510),o=c(94749),p=c(48092),q=c(65858);let r=(0,k.h)("backend/services/mcp/internal/bashTools");function s(a){let b=process.env[a];if(void 0!==b)return b;let c=Object.keys(process.env).find(b=>b.toLowerCase()===a.toLowerCase());return c?process.env[c]:void 0}function t(a){let b=(s("PATH")??"").split(g().delimiter).filter(Boolean),c="win32"===process.platform?(s("PATHEXT")??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];for(let d of b)for(let b of c){let c=g().join(d,`${a}${b}`);try{if(i().statSync(c).isFile())return c}catch{}}return null}function u(){return global.__flujo_bash_sessions||(global.__flujo_bash_sessions=new Map),global.__flujo_bash_sessions}function v(a,b=!1){return{content:[{type:"text",text:"string"==typeof a?a:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}let w=["FLUJO_BASH_ROOTS","FLUJO_FS_ROOTS"];async function x(a,b){let c=(0,n.getDataDir)(),d="string"==typeof a?a.trim():"",e=d?g().isAbsolute(d)?g().resolve(d):g().resolve(c,d):c;if(await (0,q.cd)()){let a=(0,q.bz)(e);if(a.denied)throw Error(`cwd "${e}" is within a protected location (${a.matchedRoot}) and is blocked by the FLUJO built-in server protected-path policy. Disable "Protect sensitive home-directory paths" in Experimental Features or set ${q.wp}=1 to override.`)}if(0===b.length||!b.some(a=>(0,p.F)(a,e)))throw Error(`cwd "${e}" is outside the configured bash roots.`);return e}async function y(a,b,c){let d=[],e=await (0,q.cd)(),f=new Set,h=((function(a){let b=[...a],c=[...a.matchAll(/"(?:\\.|[^"\\])*"|'[^']*'|[^\s]+/g)],d=!1;for(let a of c){let c=a[0],e=a.index??0,f=c.length>=2&&(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))?c.slice(1,-1):c,g=0;if(d)d=!1;else if("-g"===f||"--glob"===f||"--iglob"===f){d=!0;continue}else{if(!/^(?:--glob|--iglob)=/.test(f))continue;g=c.indexOf("=")+1}for(let a=e+g;a<e+c.length;a+=1)b[a]=" "}return b.join("")})(a).match(/(?:[A-Za-z]:[\\/][^\s"']*|\\\\[^\s"']+|~\/[^\s"']*|(?<![\w.])\/[^\s"']+)/g)??[]).filter(a=>!("win32"===process.platform&&/^\/[A-Za-z]$/.test(a))),i=(()=>{try{return(0,n.getHomeDir)()}catch{return""}})();for(let a of h){let h,j=a;j.startsWith("~/")&&i&&(j=g().join(i,j.slice(2)));try{h=g().isAbsolute(j)?g().resolve(j):g().resolve(b,j)}catch{continue}if(f.has(h))continue;f.add(h);let k=e?(0,q.bz)(h):{denied:!1};k.denied?d.push(`Command references "${a}", which is inside a protected location (${k.matchedRoot}).`):c.length>0&&!c.some(a=>(0,p.F)(a,h))&&d.push(`Command references "${a}", which is outside the configured working roots.`)}return d}let z=new Set(["PATH","Path","HOME","USERPROFILE","TMP","TEMP","TMPDIR","LANG","LC_ALL","SystemRoot","windir","ComSpec","PATHEXT","SystemDrive","NUMBER_OF_PROCESSORS","PROCESSOR_ARCHITECTURE"]),A={win32:{x64:["@openai/codex-win32-x64","x86_64-pc-windows-msvc"],arm64:["@openai/codex-win32-arm64","aarch64-pc-windows-msvc"]},darwin:{x64:["@openai/codex-darwin-x64","x86_64-apple-darwin"],arm64:["@openai/codex-darwin-arm64","aarch64-apple-darwin"]},linux:{x64:["@openai/codex-linux-x64","x86_64-unknown-linux-musl"],arm64:["@openai/codex-linux-arm64","aarch64-unknown-linux-musl"]}};function B(a){return"pwsh"===a||"bash"===a?a:"default"}function C(a,b,f){let{file:h,args:k,useShell:l,effectiveShell:m,unavailableShell:o}=function(a,b){if("pwsh"===b){let b=void 0!==e?e:e=t("pwsh");return b?{file:b,args:["-NoProfile","-NonInteractive","-Command",a],useShell:!1,effectiveShell:"pwsh"}:{file:"",args:[],useShell:!1,effectiveShell:"pwsh",unavailableShell:"pwsh"}}if("bash"===b){let b=function(){if(void 0!==d)return d;let a=t("bash");return a||"win32"!==process.platform||(a=[process.env.ProgramFiles,process.env["ProgramFiles(x86)"],process.env.LocalAppData].filter(a=>!!a).flatMap(a=>[g().join(a,"Git","bin","bash.exe"),g().join(a,"Git","usr","bin","bash.exe"),g().join(a,"Programs","Git","bin","bash.exe"),g().join(a,"Programs","Git","usr","bin","bash.exe")]).find(a=>{try{return i().statSync(a).isFile()}catch{return!1}})??null),d=a,a}();return b?{file:b,args:["-c",a],useShell:!1,effectiveShell:"bash"}:{file:"",args:[],useShell:!1,effectiveShell:"bash",unavailableShell:"bash"}}return{file:a,args:[],useShell:!0,effectiveShell:"default"}}(a,f);if(o)return{effectiveShell:m,unavailableShell:o};let p="win32"!==process.platform;try{return{child:(0,j.spawn)(h,k,{cwd:b,shell:l,env:function(){var a;let b="string"==typeof(a=process.env.FLUJO_BASH_INHERIT_ENV)&&/^(1|true|yes|on)$/i.test(a.trim())?{...process.env}:Object.fromEntries(Object.entries(process.env).filter(([a])=>z.has(a)||/^LC_/.test(a))),d=s("PATH")??"";if(b.PATH=[...[g().join((0,n.getDataDir)(),"bash-utils"),function(){let a=A[process.platform]?.[process.arch];if(!a)return null;try{let b=c(85781).resolve(`${a[0]}/package.json`),d=g().join(g().dirname(b),"vendor",a[1],"codex-path"),e=g().join(d,"win32"===process.platform?"rg.exe":"rg");return i().statSync(e).isFile()?d:null}catch{return null}}()].filter(a=>!!a).filter(a=>{try{return i().statSync(a).isDirectory()}catch{return!1}}),d].filter(Boolean).join(g().delimiter),"win32"===process.platform)for(let a of Object.keys(b))"PATH"!==a&&"path"===a.toLowerCase()&&delete b[a];return b}(),detached:p}),effectiveShell:m}}catch(a){return{startError:a instanceof Error?a.message:String(a),effectiveShell:m}}}function D(a,b){return c=>{let d=a();if(d.length>=1e5)return;let e=!1;(d+=c).length>1e5&&(d=d.slice(0,1e5)+"\n…[output truncated]",e=!0),b(d,e)}}function E(){let a={type:"string",enum:["default","pwsh","bash"],description:'Which shell to use: "default" (the OS shell), "pwsh" (PowerShell 7+), or "bash". Explicit shells return an error if unavailable.'},b={type:"string",description:"Working directory. Relative paths resolve against the FLUJO data directory. Defaults to the data directory. When bash roots are configured (via the MCP manager, or the FLUJO_BASH_ROOTS / FLUJO_FS_ROOTS env hard ceiling) a cwd outside them is rejected."};return[{name:"run",description:"Run a shell command to completion and return combined stdout/stderr plus the exit code. Pipes and chained commands work. Killed if it exceeds the timeout; large output is truncated. Returns { exitCode, cwd, shell, output, timedOut }.",inputSchema:{type:"object",properties:{command:{type:"string",description:'The command line to execute, e.g. "grep -r foo ." or "curl -s https://…".'},cwd:b,shell:a,timeout:{type:"number",description:"Timeout in seconds (default 60, max 600)."},normalizeNewlines:{type:"boolean",description:"If true, CRLF/CR in the captured output are normalized to LF."}},required:["command"]}},{name:"start",description:"Start a command in the BACKGROUND and return immediately with a { sessionId }. Use status/wait to observe it, write_stdin to feed it input, and kill to stop it.",inputSchema:{type:"object",properties:{command:{type:"string",description:"The command line to execute in the background."},cwd:b,shell:a},required:["command"]}},{name:"status",description:"Return the current state of a background session: { sessionId, running, exitCode, output, truncated }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"wait",description:"Wait until a background session finishes (or the timeout elapses). Returns { sessionId, running, exitCode, output, truncated, timedOut }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},timeout:{type:"number",description:"Max seconds to wait (default 60, max 600)."}},required:["sessionId"]}},{name:"write_stdin",description:'Write a string to a running background session\'s stdin. Pass "newline": false to omit the trailing newline. Returns { sessionId, written }.',inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."},data:{type:"string",description:"Text to write to stdin."},newline:{type:"boolean",description:"Append a trailing newline (default true)."}},required:["sessionId","data"]}},{name:"kill",description:"Kill a background session (and its whole process tree). Returns { sessionId, killed }.",inputSchema:{type:"object",properties:{sessionId:{type:"string",description:"The id returned by start."}},required:["sessionId"]}},{name:"list_sessions",description:"List all known background sessions with their state. Returns { sessions: [{ sessionId, command, running, exitCode, startedAt, endedAt }] }.",inputSchema:{type:"object",properties:{}}}]}function F(a,b){return b?a.replace(/\r\n?/g,"\n"):a}async function G(a,b){let c=String(a?.command??"").trim();if(!c)return v({error:'Provide "command": a shell command line to run.'},!0);let d=await x(a.cwd,b),e=await y(c,d,b),f=e.length?{warnings:e}:{},g=B(a.shell),h=!0===a.normalizeNewlines,i=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5);return await new Promise(a=>{let b,e="",j=!1,k=!1,l=!1,n=D(()=>e,(a,b)=>{e=a,j=b||j}),{child:o,startError:p,effectiveShell:q,unavailableShell:r}=C(c,d,g);if(r)return void a(v({error:`Requested shell "${r}" is unavailable or could not be resolved.`,cwd:d,shell:r},!0));if(p||!o)return void a(v({error:`Failed to start command (${q}): ${p??"unknown error"}`,cwd:d,shell:q},!0));let s=setTimeout(()=>{l=!0,b=m(o)},i),t=c=>{k||(k=!0,clearTimeout(s),b?.(),a(c))};o.stdout?.on("data",a=>n(a.toString())),o.stderr?.on("data",a=>n(a.toString())),o.on("error",a=>{n(`
|
|
2
|
+
${a.message}`),t(v({error:`Command failed to start (${q}): ${a.message}`,cwd:d,shell:q,output:F(e,h)},!0))}),o.on("close",a=>{let b=F(e,h);if(l)return void t(v({timedOut:!0,cwd:d,shell:q,exitCode:a,truncated:j,output:`${b}
|
|
3
|
+
[killed after ${i/1e3}s timeout]`,...f},!0));t(v({exitCode:a,cwd:d,shell:q,truncated:j,output:b,...f},0!==a))})})}function H(a){a.reapTimer=setTimeout(()=>{u().delete(a.id)},6e5),a.reapTimer.unref?.()}async function I(a,b){let c=String(a?.command??"").trim();if(!c)return v({error:'Provide "command": a shell command line to run.'},!0);let d=u();if(d.size>=25)for(let[a,b]of d)b.running||d.delete(a);if(d.size>=25)return v({error:"Too many active background sessions (max 25). Kill some first."},!0);!function(){if(global.__flujo_bash_cleanup_registered)return;global.__flujo_bash_cleanup_registered=!0;let a=()=>(function(){for(let a of u().values()){if(a.running)try{m(a.child)}catch{}a.reapTimer&&clearTimeout(a.reapTimer)}})();process.on("exit",a),process.on("SIGINT",a),process.on("SIGTERM",a)}();let e=await x(a.cwd,b),f=await y(c,e,b),g=f.length?{warnings:f}:{},{child:h,startError:i,effectiveShell:j,unavailableShell:k}=C(c,e,B(a.shell));if(k)return v({error:`Requested shell "${k}" is unavailable or could not be resolved.`,cwd:e,shell:k},!0);if(i||!h)return v({error:`Failed to start command (${j}): ${i??"unknown error"}`,cwd:e,shell:j},!0);let l=`bash-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,n={id:l,command:c,cwd:e,child:h,output:"",truncated:!1,running:!0,exitCode:null,startedAt:Date.now()};d.set(l,n);let o=D(()=>n.output,(a,b)=>{n.output=a,n.truncated=b||n.truncated});return h.stdout?.on("data",a=>o(a.toString())),h.stderr?.on("data",a=>o(a.toString())),h.on("error",a=>{o(`
|
|
4
|
+
${a.message}`),n.running=!1,n.endedAt=Date.now(),H(n)}),h.on("close",a=>{n.running=!1,n.exitCode=a,n.endedAt=Date.now(),H(n)}),v({sessionId:l,cwd:e,shell:j,...g})}function J(a,b={}){return{sessionId:a.id,running:a.running,exitCode:a.exitCode,output:a.output,truncated:a.truncated,...b}}async function K(a){let b=String(a?.sessionId??""),c=u().get(b);if(!c)return v({error:`No background session with id "${b}".`},!0);if(!c.running)return v(J(c,{timedOut:!1}));let d=Math.min(1e3*("number"==typeof a.timeout&&a.timeout>0?a.timeout:60),6e5),e=await new Promise(a=>{let b=Date.now(),e=()=>c.running?Date.now()-b>=d?a(!0):void setTimeout(e,100):a(!1);e()});return v(J(c,{timedOut:e}))}async function L(a,b,c){try{switch(a){case"run":{let a=await (0,p.loadEffectiveRoots)(o.PA,w,c);return await G(b,a)}case"start":{let a=await (0,p.loadEffectiveRoots)(o.PA,w,c);return await I(b,a)}case"status":let d=String(b?.sessionId??""),e=u().get(d);return e?v(J(e)):v({error:`No background session with id "${d}".`},!0);case"wait":return await K(b);case"write_stdin":let f=String(b?.sessionId??""),g=u().get(f);if(!g)return v({error:`No background session with id "${f}".`},!0);if(!g.running)return v({error:`Session "${f}" has already exited.`},!0);let h="string"==typeof b.data?b.data:"",i=!1===b.newline?h:`${h}
|
|
5
|
+
`;try{g.child.stdin?.write(i)}catch(a){return v({error:`Failed to write to stdin: ${a instanceof Error?a.message:String(a)}`},!0)}return v({sessionId:f,written:Buffer.byteLength(i,"utf8")});case"kill":let j=String(b?.sessionId??""),k=u().get(j);return k?(k.running&&(k.cancelEscalation=m(k.child)),v({sessionId:j,killed:!0})):v({error:`No background session with id "${j}".`},!0);case"list_sessions":return v({sessions:Array.from(u().values()).map(a=>({sessionId:a.id,command:a.command,running:a.running,exitCode:a.exitCode,startedAt:new Date(a.startedAt).toISOString(),endedAt:a.endedAt?new Date(a.endedAt).toISOString():void 0}))});default:return v({error:`Unknown tool on the built-in bash server: ${a}`},!0)}}catch(b){return r.warn("bashCallTool failed",{toolName:a,err:b}),v({error:`Tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},48092:(a,b,c)=>{"use strict";c.d(b,{F:()=>j,loadEffectiveRoots:()=>l});var d=c(33873),e=c.n(d),f=c(79551),g=c(18230),h=c(94749);let i=(0,g.h)("backend/services/mcp/internal/confinement");function j(a,b){let c=e().relative(a,b);return""===c||!c.startsWith("..")&&!e().isAbsolute(c)}async function k(a,b){let{resolveGlobalVars:d}=await Promise.resolve().then(c.bind(c,87507)),g=(await d(a)).trim();if(!g)return null;if(g.startsWith("file://"))try{return e().resolve((0,f.fileURLToPath)(g))}catch(a){return i.warn(`resolveRootToPath: could not parse file URI "${g}"`,a),null}return e().isAbsolute(g)?e().resolve(g):e().resolve(b,g)}async function l(a,b,d){let{getDataDir:f}=await Promise.resolve().then(c.bind(c,85510)),g=f(),l=function(a){for(let b of Array.isArray(a)?a:[a]){let a=process.env[b];if(!a||!a.trim())continue;let c=a.split(e().delimiter).map(a=>a.trim()).filter(Boolean).map(a=>e().resolve(a));if(c.length)return c}return null}(b),m=[];try{for(let b of(await (0,h.AC)(a)))m.push(e().isAbsolute(b)?e().resolve(b):e().resolve(g,b))}catch(a){i.warn("loadEffectiveRoots: could not read persisted roots",a)}try{let{getNodeRoots:b,getNodeRootsForId:e}=await Promise.resolve().then(c.bind(c,28181));for(let c of void 0!==d?(()=>{let c=e(a,d);return c.length>0?c:b(a)})():b(a)){let a=await k(c,g);a&&m.push(a)}}catch(a){i.warn("loadEffectiveRoots: could not read node roots",a)}let n=Array.from(new Set(m));if(!l)return 0===n.length?[g]:n;let o=n.filter(a=>l.some(b=>j(b,a)));return o.length?o:l}},65858:(a,b,c)=>{"use strict";c.d(b,{bz:()=>q,cd:()=>n,wp:()=>m});var d=c(33873),e=c.n(d),f=c(21820),g=c.n(f),h=c(85510),i=c(79111),j=c(31296),k=c(48092);function l(a){return"string"==typeof a&&/^(1|true|yes|on)$/i.test(a.trim())}let m="FLUJO_ALLOW_PROTECTED_PATHS";async function n(){if(l(process.env[m]))return!1;try{let a=await (0,i.YM)(j.Z.SPEECH_SETTINGS,void 0);return a?.experimental?.protectedPathsEnabled===!0}catch{return!1}}let o=null;function p(a,...b){return e().resolve(a,...b)}function q(a){let b=e().resolve(a);if((function(){let a=[];try{a.push(e().resolve((0,h.getDataDir)()))}catch{}try{a.push(e().resolve(g().tmpdir()))}catch{}return a})().some(a=>(0,k.F)(a,b)))return{denied:!1};for(let a of function(){let a=l(process.env[m]),b=(0,h.getHomeDir)(),c=`${a?"off":"on"}::${b}`;if(o&&o.key===c)return o.paths;let d=a?[]:function(a){let b=[];if("win32"===process.platform)for(let c of["AppData","Downloads","Desktop","Documents","Pictures","Music","Videos","OneDrive"])b.push(p(a,c));else if("darwin"===process.platform){for(let c of["Downloads","Desktop","Documents","Pictures","Music","Movies"])b.push(p(a,c));for(let c of["Library/Mail","Library/Messages","Library/Safari","Library/Cookies","Library/Calendars","Library/Application Support/AddressBook","Library/Application Support/com.apple.TCC","Library/PersonalizationPortrait","Library/Metadata/CoreSpotlight","Library/Suggestions"])b.push(p(a,c));for(let a of["/.Spotlight-V100","/.fseventsd","/.DocumentRevisions-V100"])b.push(e().resolve(a))}else for(let c of["Documents","Downloads","Desktop",".ssh",".gnupg",".aws",".config"])b.push(p(a,c));return Array.from(new Set(b))}(b);return o={key:c,paths:d},d}())if((0,k.F)(a,b))return{denied:!0,matchedRoot:a};return{denied:!1}}},85781:a=>{function b(a){var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b}b.keys=()=>[],b.resolve=b,b.id=85781,a.exports=b}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=1664,exports.ids=[1664],exports.modules={38296:(a,b,c)=>{c.d(b,{A:()=>
|
|
1
|
+
"use strict";exports.id=1664,exports.ids=[1664],exports.modules={38296:(a,b,c)=>{c.d(b,{A:()=>D});var d=c(21124),e=c(38301),f=c(54573),g=c(81637),h=c(79515),i=c(68730),j=c(53773),k=c(82666),l=c(37674),m=c(67101),n=c(41893),o=c(95587),p=c(77028),q=c(44079),r=c(6537),s=c(19815),t=c(49938),u=c(47902),v=c(11480),w=c(93083),x=c(85557),y=c(91034),z=c(82571),A=c(92173);let B=(0,s.h)("frontend/components/mcp/MCPEnvManager/EnvEditor"),C=/^\$\{global:([A-Za-z0-9_.-]+)\}$/,D=({serverName:a,initialEnv:b,onSave:c,onDelete:s,onServerRestart:D})=>{let{globalEnvVars:E}=(0,t.rX)(),[F,G]=(0,e.useState)([]),[H,I]=(0,e.useState)(!1),[J,K]=(0,e.useState)(!1),[L,M]=(0,e.useState)(!1),[N,O]=(0,e.useState)(null);(0,e.useEffect)(()=>{B.debug(`Initializing environment variables for server: ${a}`,{variableCount:Object.keys(b).length}),G(Object.entries(b).map(([a,b])=>{let c="object"==typeof b&&null!==b&&"value"in b?b.value:b,d="object"==typeof b&&null!==b&&"metadata"in b?b.metadata:{isSecret:(0,z.xc)(a)},e=c.match(C);if(e){let b=e[1];return{key:a,value:c,isSecret:d.isSecret,isBound:!0,boundTo:b}}let f="string"==typeof c&&(c.startsWith("encrypted:")||c.startsWith("encrypted_failed:"));return{key:a,value:f?A.gF:c,isSecret:d.isSecret,isEncrypted:f}}))},[b]);let P=async b=>{B.debug(`Removing environment variable at index: ${b}`);let c=F[b];if("Global"===a&&s&&c.key)try{await s(c.key),G(F.filter((a,c)=>c!==b))}catch(a){B.error(`Failed to delete environment variable: ${c.key}`,a)}else G(F.filter((a,c)=>c!==b)),I(!0)},Q=(a,b,c)=>{let d=[...F];if("isSecret"===b){let b=d[a];b.isSecret&&!c?d[a]={...b,isSecret:c,value:"",isEncrypted:!1,showWarning:!0}:d[a]={...b,isSecret:c}}else{let e={...d[a],[b]:c,isSecret:"key"===b?(0,z.xc)(c):d[a].isSecret};if("key"===b&&(e.isValidKey=""===c||/^[a-zA-Z0-9_]+$/.test(c)),"value"===b){let b=c.match(C);e.isBound=!!b,e.boundTo=b?.[1],d[a].isEncrypted&&(e.isEncrypted=!1),d[a].showWarning&&c&&(e.showWarning=!1)}d[a]=e}G(d),I(!0)},R=async()=>{if(F.some(a=>""!==a.key&&!1===a.isValidKey))return void B.error("Cannot save: Some variable names contain invalid characters");B.debug(`Saving environment variables for server: ${a}`,{variableCount:F.length}),K(!0);try{let b=F.reduce((a,b)=>{let{key:c,value:d,isBound:e,boundTo:f,isSecret:g,isEncrypted:h}=b;return c&&(e&&f?a[c]={value:`$\{global:${f}}`,metadata:{isSecret:g}}:g&&d===A.gF||(a[c]={value:d,metadata:{isSecret:g}})),a},{});await c(b),I(!1),D&&"Global"!==a&&(B.debug(`Restarting server after env variable changes: ${a}`),await D(a))}catch(a){B.error("Failed to save environment variables:",a)}K(!1)};return(0,d.jsxs)(f.A,{sx:{p:3,borderRadius:2,border:1,borderColor:a=>"dark"===a.palette.mode?"#3a3a3a":"#e5e7eb"},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:3},children:[(0,d.jsxs)(h.default,{variant:"h6",sx:{fontWeight:"semibold"},children:["Environment Variables - ",a]}),(0,d.jsx)(i.A,{variant:"contained",color:"primary",size:"small",startIcon:(0,d.jsx)(u.A,{}),onClick:()=>{B.debug("Adding new environment variable"),G([...F,{key:"",value:"",isSecret:!1}]),I(!0)},children:"Add Variable"})]}),(0,d.jsx)(j.A,{spacing:3,children:F.map((a,b)=>(0,d.jsxs)(k.Ay,{container:!0,spacing:2,alignItems:"flex-start",children:[(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,placeholder:"Variable name",value:a.key,onChange:a=>Q(b,"key",a.target.value),error:!1===a.isValidKey,helperText:!1===a.isValidKey?"Only alphanumeric characters and underscores allowed":"",size:"small"})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:5,children:(0,d.jsx)(l.A,{fullWidth:!0,type:a.isSecret?"password":"text",placeholder:a.showWarning?"Re-enter value":"Value",value:a.value,onChange:a=>Q(b,"value",a.target.value),InputProps:{readOnly:a.isBound,startAdornment:a.isEncrypted?(0,d.jsx)(m.A,{position:"start",children:(0,d.jsx)(v.A,{fontSize:"small",titleAccess:"This value is stored encrypted"})}):null,endAdornment:a.isBound?(0,d.jsx)(m.A,{position:"end",children:(0,d.jsx)(n.A,{size:"small",label:`Bound to global: ${a.boundTo}`,color:"primary",variant:"outlined",onDelete:()=>(a=>{B.debug(`Unbinding variable at index: ${a}`);let b=[...F];b[a]={...b[a],isBound:!1,boundTo:void 0},G(b),I(!0)})(b),deleteIcon:(0,d.jsx)(w.A,{fontSize:"small"})})}):null},error:a.showWarning,helperText:a.showWarning?"You must re-enter the value after switching from secret to normal mode":"",size:"small",sx:{bgcolor:b=>a.isBound?"dark"===b.palette.mode?"#1a1a1a":"#f9fafb":b.palette.background.paper}})}),(0,d.jsx)(k.Ay,{item:!0,xs:12,sm:2,children:(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",mt:.5},children:[(0,d.jsx)(o.A,{control:(0,d.jsx)(p.A,{checked:a.isSecret,onChange:a=>Q(b,"isSecret",a.target.checked),size:"small"}),label:"Secret",sx:{mr:1}}),!a.isBound&&(0,d.jsx)(q.A,{size:"small",color:"primary",onClick:()=>(a=>{B.debug(`Opening bind modal for variable at index: ${a}`),O(a),M(!0)})(b),title:"Bind to global variable",sx:{mr:1},children:(0,d.jsx)(x.A,{fontSize:"small"})}),(0,d.jsx)(q.A,{size:"small",color:"error",onClick:()=>P(b),title:"Remove variable",children:(0,d.jsx)(y.A,{fontSize:"small"})})]})})]},b))}),(0,d.jsx)(r.A,{open:L,onClose:()=>{M(!1),O(null)},children:(0,d.jsxs)(g.default,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:400,maxWidth:"90%",bgcolor:"background.paper",boxShadow:24,p:4,borderRadius:2},children:[(0,d.jsx)(h.default,{variant:"h6",sx:{mb:2},children:"Bind to Global Variable"}),0===Object.keys(E).length?(0,d.jsx)(h.default,{color:"text.secondary",sx:{mb:2},children:"No global variables available. Add some in Settings first."}):(0,d.jsx)(g.default,{sx:{maxHeight:300,overflow:"auto",mb:2},children:Object.entries(E).map(([a,b])=>(0,d.jsxs)(i.A,{fullWidth:!0,variant:"text",onClick:()=>(a=>{if(null!==N){B.debug(`Binding variable at index ${N} to global variable: ${a}`);let b=[...F];b[N]={...b[N],isBound:!0,boundTo:a,value:`$\{global:${a}}`},G(b),M(!1),O(null),I(!0)}})(a),sx:{justifyContent:"space-between",textAlign:"left",mb:1,p:1,borderRadius:1},children:[(0,d.jsx)(h.default,{variant:"body2",children:a}),(0,d.jsx)(h.default,{variant:"caption",color:"text.secondary",children:b&&"object"==typeof b&&b.metadata&&b.metadata.isSecret?A.gF:b&&"object"==typeof b?b.value:b})]},a))}),(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end"},children:(0,d.jsx)(i.A,{variant:"outlined",onClick:()=>{M(!1),O(null)},children:"Cancel"})})]})}),H&&(0,d.jsx)(g.default,{sx:{display:"flex",justifyContent:"flex-end",mt:3},children:(0,d.jsx)(i.A,{variant:"contained",color:"success",onClick:R,disabled:J||F.some(a=>""!==a.key&&!1===a.isValidKey),children:J?"Saving...":"Save Changes"})})]})}},81017:(a,b,c)=>{c.r(b),c.d(b,{"4003ce37366709f5add0c98a6e32e47a1006fd7c7d":()=>V,"605caa1e030009a4bc7e820854ff481d3e0295325d":()=>U,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987":()=>W});var d=c(91488);c(27806);let e={LOG_LEVEL:3},f={VERBOSE:-1,DEBUG:0,INFO:1,WARN:2,ERROR:3},g="number"==typeof e.LOG_LEVEL?e.LOG_LEVEL:f.ERROR;function h(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c={name:a.name,message:a.message};for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.stack=e:"cause"===d?c.cause=h(e,b+1):"errors"===d&&Array.isArray(e)?c.errors=e.map(a=>h(a,b+1)):c[d]=e)}return c}function i(a,b,c,d,e){if(a>=("number"==typeof e?e:g)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,i=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?h(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?h(b):b,2);i+=`:
|
|
2
2
|
${b}`}catch(a){i+=": [Object cannot be stringified]"}else i+=`: ${d}`;switch(a){case f.VERBOSE:console.debug(`[VERBOSE] ${i}`);break;case f.DEBUG:console.debug(i);break;case f.INFO:console.info(i);break;case f.WARN:console.warn(i);break;case f.ERROR:console.error(i);break;default:console.log(i)}}}function j(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{i(f.VERBOSE,d,a,c,b)},debug:(a,c)=>{i(f.DEBUG,d,a,c,b)},info:(a,c)=>{i(f.INFO,d,a,c,b)},warn:(a,c)=>{i(f.WARN,d,a,c,b)},error:(a,c)=>{i(f.ERROR,d,a,c,b)}}}var k=c(29021),l=c(33873),m=c.n(l),n=function(a){return a.MODELS="models",a.FLOWS="flows",a.CHAT_HISTORY="history",a.THEME="theme",a.ENCRYPTION_KEY="encryption_key",a.MCP_SERVERS="mcp_servers",a.GLOBAL_ENV_VARS="global_env_vars",a.CURRENT_CONVERSATION_ID="current_conversation_id",a.SELECTED_FLOW_ID="selected_flow_id",a.LAST_PICKED_FLOW_ID="last_picked_flow_id",a.SPEECH_SETTINGS="speech_settings",a.SPOTLIGHT_SERVERS="spotlight_servers",a.PLANNED_EXECUTIONS="planned_executions",a.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",a.MCP_QUALITY_SETTINGS="mcp_quality_settings",a.RUN_RESOURCE_SETTINGS="run_resource_settings",a.KV_STORE_SETTINGS="kv_store_settings",a.PENDING_APPROVALS="pending_approvals",a.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",a.PACKAGE_INSTALLS="package_installs",a.EXPERIMENTAL_SETTINGS="experimental_settings",a.REGISTRY_ACCOUNT="registry_account",a.REGISTRY_SETTINGS="registry_settings",a.TELEMETRY_STATE="telemetry_state",a}({});function o(){let a=process.env.FLUJO_DATA_DIR;return a&&a.trim().length>0?m().resolve(a):process.cwd()}c(21820);let p=j("utils/storage/backend"),q=m().join(o(),"db"),r=m().join(o(),".next","storage"),s=a=>m().join(q,`${a}.json`);async function t(){try{await k.promises.access(q),p.verbose(`Storage directory exists: ${q}`)}catch{p.debug(`Creating storage directory: ${q}`),await k.promises.mkdir(q,{recursive:!0})}try{await k.promises.access(r),p.warn(`Old storage directory found: ${r}. This may cause data inconsistency issues.`)}catch{}}let u=new Map,v=0;async function w(a,b){let c=m().dirname(a);await k.promises.mkdir(c,{recursive:!0});let d=`${a}.tmp.${process.pid}.${++v}`;try{await k.promises.writeFile(d,b),await k.promises.rename(d,a)}catch(a){try{await k.promises.unlink(d)}catch{}throw a}}async function x(a,b){let c=s(a),d=(u.get(a)??Promise.resolve()).catch(()=>{}).then(()=>w(c,JSON.stringify(b,null,2)));u.set(a,d);try{await d,p.verbose(`Successfully saved item to: ${c}`)}catch(b){throw p.error(`Error saving item with key "${a}" to ${c}:`,b),b}finally{u.get(a)===d&&u.delete(a)}}async function y(a,b){try{await t();let c=s(a),d=await k.promises.readFile(c,"utf-8");if(0===d.trim().length)return p.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return p.verbose(`Successfully loaded item from: ${c}`),a}catch(b){p.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await k.promises.writeFile(a,d),p.info(`Created backup of corrupted file at: ${a}`)}catch(a){p.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return p.verbose(`Item with key "${a}" not found at ${s(a)}, returning default.`),b;throw p.error(`CRITICAL: Error loading item with key "${a}" from ${s(a)}:`,c),c}}var z=c(92347),A=c.n(z);let B=j("utils/encryption/session"),C=global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map),D=j("utils/encryption/secure");class E extends Error{constructor(a="Encryption is locked: user password required to access secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,E.prototype)}}let F="data_encryption_key",G="data_encryption_iv",H="data_encryption_salt",I="encryption_type";var J=function(a){return a.DEFAULT="default",a.USER="user",a}(J||{});function K(){let a=A().enc.Utf8.parse("flujo_fixed_salt_v1");return A().PBKDF2("FLUJO~",a,{keySize:8,iterations:1e5})}function L(a){let b;try{b=a.toString(A().enc.Utf8)}catch{return null}return RegExp("^[0-9a-f]{16}$").test(b)?b:null}async function M(){D.debug("initializeDefaultEncryption: Entering method");try{if(await R())return!0;let a=K(),b=A().lib.WordArray.random(8),c=A().lib.WordArray.random(16),d=A().AES.encrypt(b.toString(),a,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7}),e=A().enc.Utf8.parse("flujo_fixed_salt_v1"),f={[F]:d.toString(),[G]:c.toString(),[H]:e.toString(),encryption_version:1,[I]:"default"};return await x(n.ENCRYPTION_KEY,f),!0}catch(a){return D.error("initializeDefaultEncryption: Failed to initialize default encryption:",a),!1}}async function N(){D.debug("getDefaultDEK: Entering method");try{let a=await y(n.ENCRYPTION_KEY,null);if(!a){if(!await M())return D.error("getDefaultDEK: Failed to initialize default encryption"),null;return await N()}if("default"!==a[I])return D.error("getDefaultDEK: Not using default encryption"),null;let b=a[F],c=A().enc.Hex.parse(a[G]),d=K(),e=A().AES.decrypt(b,d,{iv:c,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(e))return D.error("getDefaultDEK: Failed to decrypt DEK with default key"),null;return A().enc.Hex.parse(e.toString())}catch(a){return D.error("getDefaultDEK: Failed to get default DEK:",a),null}}async function O(a){D.debug("getUserDEK: Entering method");try{let b=await y(n.ENCRYPTION_KEY,null);if(!b)return D.error("getUserDEK: No encryption metadata found"),null;if("user"!==b[I])return D.error("getUserDEK: Not using user encryption"),null;let c=b[F],d=A().enc.Hex.parse(b[G]),e=A().enc.Hex.parse(b[H]),f=A().PBKDF2(a,e,{keySize:8,iterations:1e5}),g=A().AES.decrypt(c,f,{iv:d,mode:A().mode.CBC,padding:A().pad.Pkcs7});if(!L(g))return D.error("getUserDEK: Failed to decrypt DEK with provided password"),null;return A().enc.Hex.parse(g.toString())}catch(a){return D.error("getUserDEK: Failed to get user DEK:",a),null}}async function P(a,b=!1){D.debug("getDEK: Entering method");try{if(b&&a){D.debug("getDEK: Using session token");let b=function(a){let b=C.get(a);if(!b)return B.warn(`Session not found: ${a}`),null;let c=Date.now();return c-b.createdAt>72e5?(B.warn(`Session expired: ${a}`),C.delete(a),null):(b.lastUsed=c,b.dek)}(a);if(b)return A().enc.Hex.parse(b);D.warn("getDEK: Invalid or expired session token, falling back to default encryption")}let c=await y(n.ENCRYPTION_KEY,null);if(!c){if(D.info("getDEK: No encryption metadata found, initializing default encryption"),!await M())return D.error("getDEK: Failed to initialize default encryption"),null;return await P(a,b)}if("user"!==c[I])return await N();{let c=global.__flujo_server_dek??null;if(c)return D.debug("getDEK: Using server unlock state for user encryption"),A().enc.Hex.parse(c);if(a&&!b){let b=await O(a);if(b)return b;D.warn("getDEK: Provided password did not yield a valid user DEK")}throw D.warn("getDEK: User encryption is locked (no unlock state or valid credential)"),new E}}catch(a){if(a instanceof E)throw a;D.error("getDEK: Failed to get DEK:",a);try{if(D.warn("getDEK: Attempting to initialize default encryption as error recovery"),await M())return await N()}catch(a){D.error("getDEK: Failed to initialize default encryption as error recovery:",a)}return null}}async function Q(a,b,c=!1){D.debug("decryptWithPassword: Entering method");try{let d=await P(b,c);if(!d)return null;let e=a.split(":");if(2!==e.length)return D.error("decryptWithPassword: Invalid ciphertext format"),null;let f=A().enc.Hex.parse(e[0]),g=e[1];return A().AES.decrypt(g,d,{iv:f,mode:A().mode.CBC,padding:A().pad.Pkcs7}).toString(A().enc.Utf8)}catch(a){if(a instanceof E)throw a;return D.error("decryptWithPassword: Failed to decrypt data:",a),null}}async function R(){return D.debug("isEncryptionInitialized: Entering method"),null!==await y(n.ENCRYPTION_KEY,null)}var S=c(40410);let T=j("backend/utils/resolveGlobalVars");async function U(a,b={}){T.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await y(n.GLOBAL_ENV_VARS,{}),e=function(a){if(!a||"object"!=typeof a)return!1;let b=Object.keys(a);if(0===b.length)return!0;let c=a[b[0]];return c&&"object"==typeof c&&"value"in c&&"metadata"in c&&"object"==typeof c.metadata&&"isSecret"in c.metadata}(d);T.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let f={},g=new Set;if(e)for(let[a,b]of Object.entries(d))f[a]=b.value,b.metadata.isSecret&&g.add(a);else f={...d};let h=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1);if(void 0!==f[b]){let e=f[b];if(!c&&(g.has(b)||e.startsWith("encrypted:")||e.startsWith("encrypted_failed:"))){T.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(e.startsWith("encrypted:")){T.debug(`Decrypting encrypted global variable: ${b}`);try{let a=e.substring(10),c=await Q(a);if(c)e=c,T.debug(`Successfully decrypted global variable: ${b}`);else{T.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){T.error(`Error decrypting global variable: ${b}`,a);continue}}else if(e.startsWith("encrypted_failed:")){T.warn(`Skipping failed encrypted global variable: ${b}`);continue}T.debug(`Resolved global variable: ${b}`),d=d.replace(a,e)}else T.warn(`Global variable not found: ${b}`)}return d},i=async a=>{if("string"==typeof a)return await h(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},j=await i(a);return"object"==typeof a&&null!==a&&T.debug("Resolved global variables result:",JSON.stringify(j,null,2)),T.debug("Completed global variable resolution"),j}async function V(a){return U(a,{resolveSecrets:!1})}async function W(a,b=0){if(T.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return T.warn("Empty value provided"),null;if(b>=10)return T.warn(`Maximum resolution depth reached (10) for value: ${a}`),a;let c=a;if(c.startsWith("encrypted:")){T.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await Q(a);if(!d)return T.warn(`Failed to decrypt value at depth ${b}`),null;T.debug(`Successfully decrypted value at depth ${b}`),T.verbose(d),c=d}catch(a){return T.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(T.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){T.debug(`Resolving global variables at depth ${b}`);try{let a=await U(c);if(T.verbose(a),a!==c)return T.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),W(a,b+1);c=a}catch(a){return T.error(`Error resolving global variables at depth ${b}:`,a),null}}return T.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,S.D)([U,V,W]),(0,d.A)(U,"605caa1e030009a4bc7e820854ff481d3e0295325d",null),(0,d.A)(V,"4003ce37366709f5add0c98a6e32e47a1006fd7c7d",null),(0,d.A)(W,"6061ed6d99a98b5d9f5d2d15065caab0a27d6a8987",null)},92173:(a,b,c)=>{c.d(b,{RJ:()=>e,gF:()=>d});let d="masked:********",e="********"}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=227,exports.ids=[227],exports.modules={7389:(a,b,c)=>{c.d(b,{Sq:()=>e,lJ:()=>f});var d=c(81226);let e={type:"object",additionalProperties:!1,required:["name","goal","steps"],properties:{profile:{type:"string",const:"simple"},version:{type:"integer",const:1},name:{type:"string",minLength:1},goal:{type:"string",minLength:1},model:{type:"string",minLength:1},steps:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["id","task"],properties:{id:{type:"string",minLength:1,pattern:"^[A-Za-z][A-Za-z0-9_-]*$"},task:{type:"string",minLength:1},label:{type:"string",minLength:1},model:{type:"string",minLength:1},tools:{type:"array",uniqueItems:!0,items:{type:"string",minLength:1}},flow:{type:"string",minLength:1}}}},routes:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},when:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",enum:["contains","equals","regex","always"]},value:{type:"string"},ignoreCase:{type:"boolean"},negate:{type:"boolean"}}}}}}}};function f(a,b={},c={}){let e=function(a){let b=[],c=Array.isArray(a?.steps)?a.steps:[],d=new Set,e=[];for(let a of c){let c="string"==typeof a?.id?a.id.trim():"",f="string"==typeof a?.task?a.task.trim():"";if(!c||!/^[A-Za-z][A-Za-z0-9_-]*$/.test(c)){b.push({severity:"error",code:"simple-step-id-invalid",message:"Every simple step needs an id matching ^[A-Za-z][A-Za-z0-9_-]*$."});continue}if(d.has(c)){b.push({severity:"error",code:"simple-step-id-duplicate",nodeKey:c,message:`Duplicate simple step id "${c}"; the later step was dropped.`});continue}if(!f){b.push({severity:"error",code:"simple-step-task-missing",nodeKey:c,message:`Step "${c}" needs a non-empty task.`});continue}d.add(c),e.push({...a,id:c,task:f})}let f="__start",g="__finish",h=[{key:f,type:"start",label:"Start",prompt:`Execute this workflow toward its stated goal: ${"string"==typeof a?.goal?a.goal.trim():""}`}];for(let c of e){let d="string"==typeof c.label&&c.label.trim()?c.label.trim():function(a){let b=a.replace(/[_-]+/g," ").trim();return b?b.replace(/\b\w/g,a=>a.toUpperCase()):"Step"}(c.id),e="string"==typeof c.flow?c.flow.trim():"";if(e){h.push({key:c.id,type:"subflow",label:d,description:c.task,flow:e,prompt:c.task,inputMode:"full-history",outputMode:"final-only"});continue}let f="string"==typeof c.model&&c.model.trim()?c.model.trim():"string"==typeof a?.model?a.model.trim():"";h.push({key:c.id,type:"process",label:d,description:c.task,prompt:c.task,...f?{model:f}:{},servers:function(a,b,c){let d=new Map;for(let e of a??[]){let a="string"==typeof e?e.trim():"";if(!a)continue;let f=a.indexOf("/"),g=(f>=0?a.slice(0,f):a).trim(),h=f>=0?a.slice(f+1).trim():"";if(!g){c.push({severity:"warning",code:"simple-tool-invalid",nodeKey:b,message:`Step "${b}": ignored tool reference "${a}"; use server/tool.`});continue}d.has(g)||d.set(g,new Set),h&&d.get(g).add(h)}return[...d].map(([a,b])=>({name:a,...b.size>0?{tools:[...b]}:{}}))}(c.tools,c.id,b),inputMode:"full-history",outputMode:"latest-message"})}h.push({key:g,type:"finish",label:"Finish"});let i=[],j=Array.isArray(a?.routes)?a.routes:[];if(0===j.length){let a=[f,...e.map(a=>a.id),g];for(let b=0;b<a.length-1;b++)i.push({from:a[b],to:a[b+1]})}else{let a=new Set,c=new Set;for(let e of j){let f="string"==typeof e?.from?e.from.trim():"",g="string"==typeof e?.to?e.to.trim():"";if(!d.has(f)||!d.has(g)){b.push({severity:"error",code:"simple-route-unresolved",nodeKey:f||void 0,message:`Simple route "${f}" → "${g}" references an unknown step.`});continue}i.push({from:f,to:g,...e.when?{condition:e.when}:{}}),c.add(f),a.add(g)}for(let b of e)a.has(b.id)||i.push({from:f,to:b.id}),c.has(b.id)||i.push({from:b.id,to:g})}return{spec:{name:"string"==typeof a?.name?a.name.trim():"",description:"string"==typeof a?.goal?a.goal.trim():"",nodes:h,edges:i},issues:b}}(a),g=(0,d.dM)(e.spec,b,c),h=[...e.issues,...g.issues];return{...g,loweredSpec:e.spec,issues:h,errorCount:h.filter(a=>"error"===a.severity).length,warningCount:h.filter(a=>"warning"===a.severity).length}}},30227:(a,b,c)=>{c.d(b,{cI:()=>q,oV:()=>s,yM:()=>o});var d=c(50846),e=c(88185),f=c(7389),g=c(38204),h=c(9312),i=c(14265),j=c(1905),k=c(33233),l=c(25250);let m=(0,d.h)("backend/services/mcp/flowAuthoringTools"),n=["list_flow_building_blocks","get_flow_authoring_guide","validate_flow_spec","draft_flow","create_flow","search_mcp_marketplace","install_mcp_server","install_best_mcp_server"];function o(a){return n.includes(a)}function p(){return{type:"object",additionalProperties:!1,properties:{spec:{oneOf:[f.Sq,{type:"object",description:'Legacy advanced FlowSpec with nodes and edges. Pass profile="advanced"; fetch its contract with get_flow_authoring_guide.'}],description:"A guided SimpleFlowSpec by default, or a legacy advanced FlowSpec."},profile:{type:"string",enum:["simple","advanced"],description:"Authoring profile. Defaults to simple; legacy specs containing nodes+edges are auto-detected as advanced."},keepPills:{type:"boolean",description:"When true, binding pills (${tool:server__name}) that resolve against the node's wired servers are preserved in the compiled output instead of being stripped. Pills that cannot be resolved are still stripped with a warning. Default: false (strip all pills — generator-safe behaviour)."}},required:["spec"]}}function q(){return[{name:"list_flow_building_blocks",description:"List models, MCP server/tool references, and existing flows available to a new flow.",inputSchema:{type:"object",properties:{}}},{name:"get_flow_authoring_guide",description:"Fetch the flow-authoring contract only when needed. The simple guide is compact; the advanced guide contains the complete FlowSpec reference.",inputSchema:{type:"object",properties:{profile:{type:"string",enum:["simple","advanced"],description:"Guide to return. Defaults to simple."}}}},{name:"validate_flow_spec",description:"Compile and validate a guided flow without saving. Returns a compact summary and issues. Use draft_flow when the caller needs the complete unsaved draft.",inputSchema:p()},{name:"draft_flow",description:"Compile and validate a flow WITHOUT saving and return the complete draft bundle for review or opening in the Flow Builder.",inputSchema:p()},{name:"create_flow",description:"Compile, validate, and save a guided flow. Saving occurs only when validation has no errors. Use list_flow_building_blocks for valid references.",inputSchema:p()},{name:"search_mcp_marketplace",description:"Search the public MCP server registry for new capabilities (voice, browsing, files, email, vision, …). The registry matches the query against server NAMES only (substring) — use short single terms and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it would require.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}},{name:"install_mcp_server",description:'Install an MCP server from the public registry (by the exact name returned by search_mcp_marketplace) and connect it — this DOWNLOADS AND RUNS a third-party package on the FLUJO host. Installs are gated by consent (SEP-1024): unless this trusted authoring tool is allowed via the mcpAutoInstall settings (trustBrainStem / requireConsent / namespaceAllowlist), the tool returns the exact resolved command + arguments with consentRequired=true INSTEAD of installing, and the caller must obtain explicit approval. Every attempt is written to an audit log (command, args, env NAMES, verification status — never secret values) before any spawn. Returns the FLUJO server name (reference it in FlowSpec "servers") and the tools it provides, or needsEnv when required keys are missing (supply values via the optional "env" argument), or the resolved plan when consent is required. First install can take minutes (package download).',inputSchema:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'},env:{type:"object",description:"Optional env var values for the server (e.g. required API keys).",additionalProperties:{type:"string"}}},required:["name"]}},{name:"install_best_mcp_server",description:"Install the BEST WORKING MCP server for a capability, unattended — the recommended way to acquire a capability when you don't already have a specific server name. Searches the registry, RANKS candidates by blended quality (GitHub stars + recent activity, npm weekly downloads, registry status), then installs best→worst until one actually boots and exposes tools (the \"works-gate\"): candidates that need unavailable keys, can't be installed, or start with zero tools are skipped automatically. Same consent/audit rules and third-party-code warning as install_mcp_server. Returns the installed server name + its tools and the list of candidates tried, or needsEnv/consentRequired. Prefer this over search+install for headless self-improvement; use install_mcp_server only when you must pin an exact server.",inputSchema:{type:"object",properties:{capability:{type:"string",description:'Short capability term matched against server names, e.g. "youtube", "email", "browser".'},env:{type:"object",description:"Optional env var values shared across attempted servers (e.g. an API key).",additionalProperties:{type:"string"}}},required:["capability"]}}]}function r(a,b=!1){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}async function s(a,b){try{if("list_flow_building_blocks"===a){let a=await (0,h.jY)();return r(a.blocks)}if("get_flow_authoring_guide"===a){let a=b?.profile==="advanced"?"advanced":"simple";if("advanced"===a)return r({profile:a,guide:e.R});return r({profile:a,schema:f.Sq,guide:["Set name, goal, and one or more ordered steps.","Each step needs id and task. model overrides the top-level default.","Tools use server/tool references from list_flow_building_blocks.","Set flow on a step to run an existing flow instead of a model.","Omit routes for a linear flow. Routes are only for branches; omit when for the fallback.","Start, Finish, layout, data handoff, and ordinary defaults are inferred."]})}if("search_mcp_marketplace"===a){let a="string"==typeof b?.query?b.query:"",c=await (0,i.e3)(a);return r(c)}if("install_mcp_server"===a){let a="string"==typeof b?.name?b.name:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0,d=await (0,i.aM)(a,c,{resolveOnly:!0});if(!d.plan)return r(d,!0);let e=await (0,j.Ej)(),f=(0,k.e5)({caller:"authoring-tool",settings:e,registryName:a}),g=(0,l.nO)(d.plan.verificationStatus)?void 0:`Unverified / self-asserted registry entry (status: ${d.plan.verificationStatus}). Registry entries are publisher-asserted — review the command before approving.`;if(await (0,j.NB)((0,k.UM)(d.plan,"authoring-tool",f,!1)),!f.allowed)return r({installed:!1,consentRequired:!0,message:f.message,plan:d.plan,...g?{verificationWarning:g}:{}});let h=await (0,i.aM)(a,c);return await (0,j.NB)((0,k.UM)(h.plan??d.plan,"authoring-tool",f,h.installed,h.error)),r({...h,...g?{verificationWarning:g}:{}},!h.installed)}if("install_best_mcp_server"===a){let a="string"==typeof b?.capability?b.capability:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0;if(!a)return r({error:'Provide a "capability" search term.'},!0);let d=await (0,j.Ej)(),e=(0,k.e5)({caller:"authoring-tool",settings:d,registryName:a});if(!e.allowed){let b=(await (0,i.e3)(a)).find(a=>a.installable),d=b?await (0,i.aM)(b.name,c,{resolveOnly:!0}):null;return d?.plan&&await (0,j.NB)((0,k.UM)(d.plan,"authoring-tool",e,!1)),r({installed:!1,consentRequired:!0,message:e.message,...d?.plan?{plan:d.plan}:{}})}let f=await (0,i.LG)(a,c,{onAttempt:async(a,b)=>{a&&await (0,j.NB)((0,k.UM)(a,"authoring-tool",e,b.installed,b.error))}}),g=f.installed&&!(0,l.nO)(f.plan?.verificationStatus)?`Installed an unverified / self-asserted registry entry (status: ${f.plan?.verificationStatus}).`:void 0;return r({...f,...g?{verificationWarning:g}:{}},!f.installed)}if("validate_flow_spec"===a||"draft_flow"===a||"create_flow"===a){let c=function(a){let b=a?.spec;if("string"==typeof b)try{return JSON.parse(b)}catch{return null}return b??null}(b);if(!c)return r({error:'Provide a "spec" argument: a SimpleFlowSpec object (or JSON string).'},!0);let d=c&&"object"==typeof c&&!Array.isArray(c)?c:{},e="advanced"===b.profile?"advanced":"simple"===b.profile?"simple":Array.isArray(d.nodes)&&Array.isArray(d.edges)?"advanced":"simple",f=!0===b.keepPills,h=await (0,g.V)(c,{save:"create_flow"===a,keepPills:f,profile:e});if(!h.success)return r({error:h.error,issues:h.issues??[]},!0);let i=h.flows.length,j=i>1?` (plus ${i-1} nested subflow flow(s))`:"",k={profile:e,flowId:h.flow.id,flowName:h.flow.name,nodeCount:h.flow.nodes.length,edgeCount:h.flow.edges.length,...i>1?{flows:h.flows.map(a=>({id:a.id,name:a.name}))}:{},validation:h.validation,..."draft_flow"===a?{saved:!1,rootFlowId:h.flow.id,flow:h.flow,flows:h.flows}:{},..."create_flow"===a?{saved:h.saved,...h.saved?{note:`Flow "${h.flow.name}"${j} was created. It is callable as a tool on this MCP server (after a fresh tools/list) and as model "flow-${h.flow.name}" on the OpenAI-compatible endpoint.`}:{note:"NOT saved: validation found errors. Fix the issues and call create_flow again."}}:{}};return r(k,"create_flow"===a&&!h.saved)}return r({error:`Unknown authoring tool: ${a}`},!0)}catch(b){return m.error("authoringCallTool failed",{toolName:a,err:b}),r({error:`Authoring tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},38204:(a,b,c)=>{c.d(b,{V:()=>k});var d=c(50846),e=c(87821),f=c(81226),g=c(7389),h=c(84671),i=c(9312);let j=(0,d.h)("backend/services/flow/compileFlow");async function k(a,b={}){if(!a||"object"!=typeof a||Array.isArray(a))return{success:!1,error:"The spec must be a JSON object (a FlowSpec)",statusCode:400};let c=await (0,i.jY)(),d=c.compile;if(b.updateFlowId){let a=d.flows??[];if(!a.some(a=>a.id===b.updateFlowId))return{success:!1,error:`No flow with id "${b.updateFlowId}" to update`,statusCode:404};d={...d,flows:a.filter(a=>a.id!==b.updateFlowId)}}let l="simple"===b.profile?(0,g.lJ)(a,d,{keepPills:b.keepPills}):(0,f.dM)(a,d,{keepPills:b.keepPills});if(!l.flow)return{success:!1,error:"The spec could not be compiled into a flow",statusCode:422,issues:l.issues.map(a=>({severity:a.severity,code:a.code,message:a.message}))};b.updateFlowId&&(l.flow.id=b.updateFlowId);let m=l.flows.flatMap(a=>(0,h.nC)(a,{models:c.compile.models,servers:c.validatorServers,serverTools:c.compile.serverTools}).issues),n=(0,i.RB)(l.issues,{issues:m,errorCount:0,warningCount:0,isRunnable:!0}),o=!1;if(b.save&&0===n.errorCount){for(let a of l.flows)await e.flowService.saveFlow(a);o=!0,j.info(`Compiled and saved ${l.flows.length} flow(s); root "${l.flow.name}" (${l.flow.id})`)}else b.save&&j.info(`Compiled flow "${l.flow.name}" has ${n.errorCount} error(s); NOT saved`);return{success:!0,flow:l.flow,flows:l.flows,validation:n,saved:o}}}};
|
|
1
|
+
"use strict";exports.id=227,exports.ids=[227],exports.modules={7389:(a,b,c)=>{c.d(b,{Sq:()=>e,lJ:()=>f});var d=c(81226);let e={type:"object",additionalProperties:!1,required:["name","goal","steps"],properties:{profile:{type:"string",const:"simple"},version:{type:"integer",const:1},name:{type:"string",minLength:1},goal:{type:"string",minLength:1},model:{type:"string",minLength:1},steps:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["id","task"],properties:{id:{type:"string",minLength:1,pattern:"^[A-Za-z][A-Za-z0-9_-]*$"},task:{type:"string",minLength:1},label:{type:"string",minLength:1},model:{type:"string",minLength:1},tools:{type:"array",uniqueItems:!0,items:{type:"string",minLength:1}},flow:{type:"string",minLength:1}}}},routes:{type:"array",items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},when:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:{type:"string",enum:["contains","equals","regex","always"]},value:{type:"string"},ignoreCase:{type:"boolean"},negate:{type:"boolean"}}}}}}}};function f(a,b={},c={}){let e=function(a){let b=[],c=Array.isArray(a?.steps)?a.steps:[],d=new Set,e=[];for(let a of c){let c="string"==typeof a?.id?a.id.trim():"",f="string"==typeof a?.task?a.task.trim():"";if(!c||!/^[A-Za-z][A-Za-z0-9_-]*$/.test(c)){b.push({severity:"error",code:"simple-step-id-invalid",message:"Every simple step needs an id matching ^[A-Za-z][A-Za-z0-9_-]*$."});continue}if(d.has(c)){b.push({severity:"error",code:"simple-step-id-duplicate",nodeKey:c,message:`Duplicate simple step id "${c}"; the later step was dropped.`});continue}if(!f){b.push({severity:"error",code:"simple-step-task-missing",nodeKey:c,message:`Step "${c}" needs a non-empty task.`});continue}d.add(c),e.push({...a,id:c,task:f})}let f="__start",g="__finish",h=[{key:f,type:"start",label:"Start",prompt:`Execute this workflow toward its stated goal: ${"string"==typeof a?.goal?a.goal.trim():""}`}];for(let c of e){let d="string"==typeof c.label&&c.label.trim()?c.label.trim():function(a){let b=a.replace(/[_-]+/g," ").trim();return b?b.replace(/\b\w/g,a=>a.toUpperCase()):"Step"}(c.id),e="string"==typeof c.flow?c.flow.trim():"";if(e){h.push({key:c.id,type:"subflow",label:d,description:c.task,flow:e,prompt:c.task,inputMode:"full-history",outputMode:"final-only"});continue}let f="string"==typeof c.model&&c.model.trim()?c.model.trim():"string"==typeof a?.model?a.model.trim():"";h.push({key:c.id,type:"process",label:d,description:c.task,prompt:c.task,...f?{model:f}:{},servers:function(a,b,c){let d=new Map;for(let e of a??[]){let a="string"==typeof e?e.trim():"";if(!a)continue;let f=a.indexOf("/"),g=(f>=0?a.slice(0,f):a).trim(),h=f>=0?a.slice(f+1).trim():"";if(!g){c.push({severity:"warning",code:"simple-tool-invalid",nodeKey:b,message:`Step "${b}": ignored tool reference "${a}"; use server/tool.`});continue}d.has(g)||d.set(g,new Set),h&&d.get(g).add(h)}return[...d].map(([a,b])=>({name:a,...b.size>0?{tools:[...b]}:{}}))}(c.tools,c.id,b),inputMode:"full-history",outputMode:"latest-message"})}h.push({key:g,type:"finish",label:"Finish"});let i=[],j=Array.isArray(a?.routes)?a.routes:[];if(0===j.length){let a=[f,...e.map(a=>a.id),g];for(let b=0;b<a.length-1;b++)i.push({from:a[b],to:a[b+1]})}else{let a=new Set,c=new Set;for(let e of j){let f="string"==typeof e?.from?e.from.trim():"",g="string"==typeof e?.to?e.to.trim():"";if(!d.has(f)||!d.has(g)){b.push({severity:"error",code:"simple-route-unresolved",nodeKey:f||void 0,message:`Simple route "${f}" → "${g}" references an unknown step.`});continue}i.push({from:f,to:g,...e.when?{condition:e.when}:{}}),c.add(f),a.add(g)}for(let b of e)a.has(b.id)||i.push({from:f,to:b.id}),c.has(b.id)||i.push({from:b.id,to:g})}return{spec:{name:"string"==typeof a?.name?a.name.trim():"",description:"string"==typeof a?.goal?a.goal.trim():"",nodes:h,edges:i},issues:b}}(a),g=(0,d.dM)(e.spec,b,c),h=[...e.issues,...g.issues];return{...g,loweredSpec:e.spec,issues:h,errorCount:h.filter(a=>"error"===a.severity).length,warningCount:h.filter(a=>"warning"===a.severity).length}}},30227:(a,b,c)=>{c.d(b,{cI:()=>r,oV:()=>u,yM:()=>p});var d=c(50846),e=c(88185),f=c(7389),g=c(38204),h=c(9312),i=c(97630),j=c(14265),k=c(1905),l=c(33233),m=c(25250);let n=(0,d.h)("backend/services/mcp/flowAuthoringTools"),o=["list_flow_building_blocks","get_flow_authoring_guide","validate_flow_spec","draft_flow","draft_generated_flow","create_flow","search_mcp_marketplace","install_mcp_server","install_best_mcp_server"];function p(a){return o.includes(a)}function q(){return{type:"object",additionalProperties:!1,properties:{spec:{oneOf:[f.Sq,{type:"object",description:'Legacy advanced FlowSpec with nodes and edges. Pass profile="advanced"; fetch its contract with get_flow_authoring_guide.'}],description:"A guided SimpleFlowSpec by default, or a legacy advanced FlowSpec."},profile:{type:"string",enum:["simple","advanced"],description:"Authoring profile. Defaults to simple; legacy specs containing nodes+edges are auto-detected as advanced."},keepPills:{type:"boolean",description:"When true, binding pills (${tool:server__name}) that resolve against the node's wired servers are preserved in the compiled output instead of being stripped. Pills that cannot be resolved are still stripped with a warning. Default: false (strip all pills — generator-safe behaviour)."}},required:["spec"]}}function r(){return[{name:"list_flow_building_blocks",description:"List models, MCP server/tool references, and existing flows available to a new flow.",inputSchema:{type:"object",properties:{}}},{name:"get_flow_authoring_guide",description:"Fetch the flow-authoring contract only when needed. The simple guide is compact; the advanced guide contains the complete FlowSpec reference.",inputSchema:{type:"object",properties:{profile:{type:"string",enum:["simple","advanced"],description:"Guide to return. Defaults to simple."}}}},{name:"validate_flow_spec",description:"Compile and validate a guided flow without saving. Returns a compact summary and issues. Use draft_flow when the caller needs the complete unsaved draft.",inputSchema:q()},{name:"draft_flow",description:"Compile and validate a flow WITHOUT saving and return the complete draft bundle for review or opening in the Flow Builder.",inputSchema:q()},{name:"draft_generated_flow",description:"Run the production Flow Generator post-processing pipeline on a complete advanced FlowSpec: scratchpad safety guard, structural auto-repair, bounded nested compilation, generated-flow defaults, and whole-bundle validation. Returns the complete UNSAVED draft and hardened spec.",inputSchema:{type:"object",additionalProperties:!1,properties:{spec:{type:"object",description:'A complete advanced FlowSpec authored using get_flow_authoring_guide(profile="advanced").'}},required:["spec"]}},{name:"create_flow",description:"Compile, validate, and save a guided flow. Saving occurs only when validation has no errors. Use list_flow_building_blocks for valid references.",inputSchema:q()},{name:"search_mcp_marketplace",description:"Search the public MCP server registry for new capabilities (voice, browsing, files, email, vision, …). The registry matches the query against server NAMES only (substring) — use short single terms and try several. Returns name, description, whether FLUJO can install it, and which env vars/keys it would require.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Short search term matched against server names."}},required:["query"]}},{name:"install_mcp_server",description:'Install an MCP server from the public registry (by the exact name returned by search_mcp_marketplace) and connect it — this DOWNLOADS AND RUNS a third-party package on the FLUJO host. Installs are gated by consent (SEP-1024): unless this trusted authoring tool is allowed via the mcpAutoInstall settings (trustBrainStem / requireConsent / namespaceAllowlist), the tool returns the exact resolved command + arguments with consentRequired=true INSTEAD of installing, and the caller must obtain explicit approval. Every attempt is written to an audit log (command, args, env NAMES, verification status — never secret values) before any spawn. Returns the FLUJO server name (reference it in FlowSpec "servers") and the tools it provides, or needsEnv when required keys are missing (supply values via the optional "env" argument), or the resolved plan when consent is required. First install can take minutes (package download).',inputSchema:{type:"object",properties:{name:{type:"string",description:'Exact registry name from search results, e.g. "ai.keenable/web-search".'},env:{type:"object",description:"Optional env var values for the server (e.g. required API keys).",additionalProperties:{type:"string"}}},required:["name"]}},{name:"install_best_mcp_server",description:"Install the BEST WORKING MCP server for a capability, unattended — the recommended way to acquire a capability when you don't already have a specific server name. Searches the registry, RANKS candidates by blended quality (GitHub stars + recent activity, npm weekly downloads, registry status), then installs best→worst until one actually boots and exposes tools (the \"works-gate\"): candidates that need unavailable keys, can't be installed, or start with zero tools are skipped automatically. Same consent/audit rules and third-party-code warning as install_mcp_server. Returns the installed server name + its tools and the list of candidates tried, or needsEnv/consentRequired. Prefer this over search+install for headless self-improvement; use install_mcp_server only when you must pin an exact server.",inputSchema:{type:"object",properties:{capability:{type:"string",description:'Short capability term matched against server names, e.g. "youtube", "email", "browser".'},env:{type:"object",description:"Optional env var values shared across attempted servers (e.g. an API key).",additionalProperties:{type:"string"}}},required:["capability"]}}]}function s(a){let b=a?.spec;if("string"==typeof b)try{return JSON.parse(b)}catch{return null}return b??null}function t(a,b=!1){return{content:[{type:"text",text:JSON.stringify(a,null,2)}],...b?{isError:!0}:{}}}async function u(a,b){try{if("list_flow_building_blocks"===a){let a=await (0,h.jY)();return t(a.blocks)}if("get_flow_authoring_guide"===a){let a=b?.profile==="advanced"?"advanced":"simple";if("advanced"===a)return t({profile:a,guide:e.R});return t({profile:a,schema:f.Sq,guide:["Set name, goal, and one or more ordered steps.","Each step needs id and task. model overrides the top-level default.","Tools use server/tool references from list_flow_building_blocks.","Set flow on a step to run an existing flow instead of a model.","Omit routes for a linear flow. Routes are only for branches; omit when for the fallback.","Start, Finish, layout, data handoff, and ordinary defaults are inferred."]})}if("search_mcp_marketplace"===a){let a="string"==typeof b?.query?b.query:"",c=await (0,j.e3)(a);return t(c)}if("install_mcp_server"===a){let a="string"==typeof b?.name?b.name:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0,d=await (0,j.aM)(a,c,{resolveOnly:!0});if(!d.plan)return t(d,!0);let e=await (0,k.Ej)(),f=(0,l.e5)({caller:"authoring-tool",settings:e,registryName:a}),g=(0,m.nO)(d.plan.verificationStatus)?void 0:`Unverified / self-asserted registry entry (status: ${d.plan.verificationStatus}). Registry entries are publisher-asserted — review the command before approving.`;if(await (0,k.NB)((0,l.UM)(d.plan,"authoring-tool",f,!1)),!f.allowed)return t({installed:!1,consentRequired:!0,message:f.message,plan:d.plan,...g?{verificationWarning:g}:{}});let h=await (0,j.aM)(a,c);return await (0,k.NB)((0,l.UM)(h.plan??d.plan,"authoring-tool",f,h.installed,h.error)),t({...h,...g?{verificationWarning:g}:{}},!h.installed)}if("install_best_mcp_server"===a){let a="string"==typeof b?.capability?b.capability:"",c=b?.env&&"object"==typeof b.env&&!Array.isArray(b.env)?b.env:void 0;if(!a)return t({error:'Provide a "capability" search term.'},!0);let d=await (0,k.Ej)(),e=(0,l.e5)({caller:"authoring-tool",settings:d,registryName:a});if(!e.allowed){let b=(await (0,j.e3)(a)).find(a=>a.installable),d=b?await (0,j.aM)(b.name,c,{resolveOnly:!0}):null;return d?.plan&&await (0,k.NB)((0,l.UM)(d.plan,"authoring-tool",e,!1)),t({installed:!1,consentRequired:!0,message:e.message,...d?.plan?{plan:d.plan}:{}})}let f=await (0,j.LG)(a,c,{onAttempt:async(a,b)=>{a&&await (0,k.NB)((0,l.UM)(a,"authoring-tool",e,b.installed,b.error))}}),g=f.installed&&!(0,m.nO)(f.plan?.verificationStatus)?`Installed an unverified / self-asserted registry entry (status: ${f.plan?.verificationStatus}).`:void 0;return t({...f,...g?{verificationWarning:g}:{}},!f.installed)}if("draft_generated_flow"===a){let a=s(b);if(!a||"object"!=typeof a||Array.isArray(a))return t({error:'Provide a complete advanced FlowSpec object in "spec".'},!0);let c=await (0,h.jY)(),d=(0,i.oW)(a,c);if(!d.success)return t({error:"The generated specification could not be compiled.",spec:d.spec,issues:d.issues,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}},!0);return t({profile:"advanced",pipeline:"production-generator",saved:!1,rootFlowId:d.flow.id,flow:d.flow,flows:d.flows.map(a=>a.flow),spec:d.spec,validation:d.validation,hardening:{guardChanges:d.guardChanges,repairChanges:d.repairChanges}})}if("validate_flow_spec"===a||"draft_flow"===a||"create_flow"===a){let c=s(b);if(!c)return t({error:'Provide a "spec" argument: a SimpleFlowSpec object (or JSON string).'},!0);let d=c&&"object"==typeof c&&!Array.isArray(c)?c:{},e="advanced"===b.profile?"advanced":"simple"===b.profile?"simple":Array.isArray(d.nodes)&&Array.isArray(d.edges)?"advanced":"simple",f=!0===b.keepPills,h=await (0,g.V)(c,{save:"create_flow"===a,keepPills:f,profile:e});if(!h.success)return t({error:h.error,issues:h.issues??[]},!0);let i=h.flows.length,j=i>1?` (plus ${i-1} nested subflow flow(s))`:"",k={profile:e,flowId:h.flow.id,flowName:h.flow.name,nodeCount:h.flow.nodes.length,edgeCount:h.flow.edges.length,...i>1?{flows:h.flows.map(a=>({id:a.id,name:a.name}))}:{},validation:h.validation,..."draft_flow"===a?{saved:!1,rootFlowId:h.flow.id,flow:h.flow,flows:h.flows}:{},..."create_flow"===a?{saved:h.saved,...h.saved?{note:`Flow "${h.flow.name}"${j} was created. It is callable as a tool on this MCP server (after a fresh tools/list) and as model "flow-${h.flow.name}" on the OpenAI-compatible endpoint.`}:{note:"NOT saved: validation found errors. Fix the issues and call create_flow again."}}:{}};return t(k,"create_flow"===a&&!h.saved)}return t({error:`Unknown authoring tool: ${a}`},!0)}catch(b){return n.error("authoringCallTool failed",{toolName:a,err:b}),t({error:`Authoring tool failed: ${b instanceof Error?b.message:String(b)}`},!0)}}},38204:(a,b,c)=>{c.d(b,{V:()=>k});var d=c(50846),e=c(87821),f=c(81226),g=c(7389),h=c(84671),i=c(9312);let j=(0,d.h)("backend/services/flow/compileFlow");async function k(a,b={}){if(!a||"object"!=typeof a||Array.isArray(a))return{success:!1,error:"The spec must be a JSON object (a FlowSpec)",statusCode:400};let c=await (0,i.jY)(),d=c.compile;if(b.updateFlowId){let a=d.flows??[];if(!a.some(a=>a.id===b.updateFlowId))return{success:!1,error:`No flow with id "${b.updateFlowId}" to update`,statusCode:404};d={...d,flows:a.filter(a=>a.id!==b.updateFlowId)}}let l="simple"===b.profile?(0,g.lJ)(a,d,{keepPills:b.keepPills}):(0,f.dM)(a,d,{keepPills:b.keepPills});if(!l.flow)return{success:!1,error:"The spec could not be compiled into a flow",statusCode:422,issues:l.issues.map(a=>({severity:a.severity,code:a.code,message:a.message}))};b.updateFlowId&&(l.flow.id=b.updateFlowId);let m=l.flows.flatMap(a=>(0,h.nC)(a,{models:c.compile.models,servers:c.validatorServers,serverTools:c.compile.serverTools}).issues),n=(0,i.RB)(l.issues,{issues:m,errorCount:0,warningCount:0,isRunnable:!0}),o=!1;if(b.save&&0===n.errorCount){for(let a of l.flows)await e.flowService.saveFlow(a);o=!0,j.info(`Compiled and saved ${l.flows.length} flow(s); root "${l.flow.name}" (${l.flow.id})`)}else b.save&&j.info(`Compiled flow "${l.flow.name}" has ${n.errorCount} error(s); NOT saved`);return{success:!0,flow:l.flow,flows:l.flows,validation:n,saved:o}}}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=2273,exports.ids=[1925,2273,3629,4306,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},28511:(a,b,c)=>{c.d(b,{Ed:()=>u,ae:()=>w,jA:()=>x,qf:()=>v});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(20433),n=c(87821),o=c(60453),p=c(4771);let q=(0,f.h)("backend/services/packages/installPackage");function r(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function s(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>s(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=s(e,b);return c}return a}async function t(a){if(!a||0===a.length)return[];let b=await (0,g.YM)(h.Z.GLOBAL_ENV_VARS,{});return a.filter(a=>!Object.prototype.hasOwnProperty.call(b,a))}async function u(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await z(e,j),missingGlobals:await t(e.requiredGlobals)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let n=await m.modelService.loadModels(),p=new Set((e.models??[]).map(a=>a.id)),r=new Map(n.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!p.has(b)||!r.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let u={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await t(e.requiredGlobals)},v=(e.models??[]).map(a=>s(a,f)),w=(e.flows??[]).map(a=>s(a,f)),x=(e.plannedExecutions??[]).map(a=>s(a,f)),y={flows:{},models:{},servers:[],plannedExecutions:[]},A={flows:[],models:[],servers:[],plannedExecutions:[]},B=new Set,D=new Map;try{let a=await o.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)B.add(b.name),D.set(b.name,b)}catch(a){q.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await C(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});let E={};for(let b of v){let c=a.modelMappings?.[b.id];if(c){let a=r.get(c);E[b.id]={id:a.id,name:a.name},u.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await F(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});d&&(E[b.id]=d)}let I=await G(e.name,w,E,u,y,A);for(let a of x)await H(a,e.name,I,u,y,A);try{let a=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:u,entities:y,created:A},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){q.warn("installPackage: failed to persist install ledger",a)}return u}async function v(a){let b=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function w(){return Object.values(await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function x(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,p.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>n.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>o.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>m.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){q.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function y(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function z(a,b){let c=await m.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:y(c),requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)}))}}function A(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar&&(f[b.name]=`\${global:${b.globalVar}}`);return{values:f,secretNames:g,missingRequired:h}}async function B(a,b,c,d,e){let{packageFolder:f,summary:g,ledgerEntities:h,existingServerConfigs:i}=b,j=y(a),k=i.get(a.name);if(!k){g.servers.push({localName:a.name,source:j,installed:!1,error:"server vanished between snapshot and install"}),g.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let l={...k.env??{}};for(let[a,b]of Object.entries(d))l[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let m=await o.mcpService.updateServerConfig(a.name,{env:l,folder:f});if(!Array.isArray(m)&&m&&"success"in m&&!1===m.success){let b=m.error??"unknown error";g.servers.push({localName:a.name,source:j,installed:!1,error:b}),g.skipped.push({type:"server",name:a.name,note:b});return}h.servers.push(a.name),g.servers.push({localName:a.name,source:j,installed:!0,serverName:a.name,alreadyExisted:!0});let n=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;g.updated.push({type:"server",name:a.name,id:a.name,...n?{note:n}:{}})}async function C(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=y(a),i=a.installOrigin,j=A(a.envDeclarations,b),k=A(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){d.servers.push({localName:a.name,source:h,installed:!1,error:"GitHub-sourced servers are not auto-installable yet — install manually from the MCP page"}),d.skipped.push({type:"server",name:a.name,note:"GitHub-sourced servers require manual install"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await B(a,b,m,j.values,j.secretNames);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=await (0,l.aM)(c,j.values),n={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(n),k.installed){k.serverName&&await D(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await E(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let p=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,p,n,j.secretNames),i=await o.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...p?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};p?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function D(a,b){try{let c=await o.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function E(a,b,c){if(0===c.size)return;let d=await o.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await o.mcpService.updateServerConfig(a,{env:f})}catch(b){q.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function F(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let n=a.displayName||a.name,o={name:a.name,displayName:n,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},p=(await m.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===n.toLowerCase());if(p){let b=await m.modelService.updateModel({...p,...o,id:p.id});if(b.success){j.models[n]=p.id;let b={type:"model",name:n,id:p.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:p.id,name:a.name}}return void i.skipped.push({type:"model",name:n,note:b.error})}let q=(0,e.A)(),r=await m.modelService.addModel({id:q,...o});if(r.success){j.models[n]=q,k.models.push(q);let b={type:"model",name:n,id:q};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:q,name:a.name}}i.skipped.push({type:"model",name:n,note:r.error})}async function G(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${r(a)}-${r(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await n.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await n.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function H(a,b,c,d,e,f){var g;let h=(0,p.getSchedulerService)(),i=(g=a.name,`pkg-${r(b)}-${r(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,q={...o,id:i,flowId:j,enabled:!1},s=await h.create(q);if(s.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(s.conflict){let{id:b,...c}=q,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:s.error})}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
1
|
+
"use strict";exports.id=2273,exports.ids=[1925,2273,3629,4306,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},28511:(a,b,c)=>{c.d(b,{Ed:()=>u,ae:()=>w,jA:()=>x,qf:()=>v});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(20433),n=c(87821),o=c(60453),p=c(4771);let q=(0,f.h)("backend/services/packages/installPackage");function r(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function s(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>s(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=s(e,b);return c}return a}async function t(a){if(!a||0===a.length)return[];let b=await (0,g.YM)(h.Z.GLOBAL_ENV_VARS,{});return a.filter(a=>!Object.prototype.hasOwnProperty.call(b,a))}async function u(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await z(e,j),missingGlobals:await t(e.requiredGlobals)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let n=await m.modelService.loadModels(),p=new Set((e.models??[]).map(a=>a.id)),r=new Map(n.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!p.has(b)||!r.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let u={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await t(e.requiredGlobals)},v=(e.models??[]).map(a=>s(a,f)),w=(e.flows??[]).map(a=>s(a,f)),x=(e.plannedExecutions??[]).map(a=>s(a,f)),y={flows:{},models:{},servers:[],plannedExecutions:[]},A={flows:[],models:[],servers:[],plannedExecutions:[]},B=new Set,D=new Map;try{let a=await o.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)B.add(b.name),D.set(b.name,b)}catch(a){q.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await C(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});let E={};for(let b of v){let c=a.modelMappings?.[b.id];if(c){let a=r.get(c);E[b.id]={id:a.id,name:a.name},u.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await F(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});d&&(E[b.id]=d)}let I=await G(e.name,w,E,u,y,A);for(let a of x)await H(a,e.name,I,u,y,A);try{let a=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:u,entities:y,created:A},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){q.warn("installPackage: failed to persist install ledger",a)}return u}async function v(a){let b=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function w(){return Object.values(await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function x(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,p.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>n.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>o.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>m.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.YM)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){q.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function y(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function z(a,b){let c=await m.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:y(c),requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)}))}}function A(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar&&(f[b.name]=`\${global:${b.globalVar}}`,b.isSecret&&g.add(b.name));return{values:f,secretNames:g,missingRequired:h}}async function B(a,b,c,d,e){let{packageFolder:f,summary:g,ledgerEntities:h,existingServerConfigs:i}=b,j=y(a),k=i.get(a.name);if(!k){g.servers.push({localName:a.name,source:j,installed:!1,error:"server vanished between snapshot and install"}),g.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let l={...k.env??{}};for(let[a,b]of Object.entries(d))l[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let m=await o.mcpService.updateServerConfig(a.name,{env:l,folder:f});if(!Array.isArray(m)&&m&&"success"in m&&!1===m.success){let b=m.error??"unknown error";g.servers.push({localName:a.name,source:j,installed:!1,error:b}),g.skipped.push({type:"server",name:a.name,note:b});return}h.servers.push(a.name),g.servers.push({localName:a.name,source:j,installed:!0,serverName:a.name,alreadyExisted:!0});let n=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;g.updated.push({type:"server",name:a.name,id:a.name,...n?{note:n}:{}})}async function C(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=y(a),i=a.installOrigin,j=A(a.envDeclarations,b),k=A(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){d.servers.push({localName:a.name,source:h,installed:!1,error:"GitHub-sourced servers are not auto-installable yet — install manually from the MCP page"}),d.skipped.push({type:"server",name:a.name,note:"GitHub-sourced servers require manual install"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await B(a,b,m,j.values,j.secretNames);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=await (0,l.aM)(c,j.values),n={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(n),k.installed){k.serverName&&await D(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await E(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let p=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,p,n,j.secretNames),i=await o.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...p?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};p?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function D(a,b){try{let c=await o.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function E(a,b,c){if(0===c.size)return;let d=await o.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await o.mcpService.updateServerConfig(a,{env:f})}catch(b){q.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function F(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let n=a.displayName||a.name,o={name:a.name,displayName:n,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},p=(await m.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===n.toLowerCase());if(p){let b=await m.modelService.updateModel({...p,...o,id:p.id});if(b.success){j.models[n]=p.id;let b={type:"model",name:n,id:p.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:p.id,name:a.name}}return void i.skipped.push({type:"model",name:n,note:b.error})}let q=(0,e.A)(),r=await m.modelService.addModel({id:q,...o});if(r.success){j.models[n]=q,k.models.push(q);let b={type:"model",name:n,id:q};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:q,name:a.name}}i.skipped.push({type:"model",name:n,note:r.error})}async function G(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${r(a)}-${r(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await n.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await n.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function H(a,b,c,d,e,f){var g;let h=(0,p.getSchedulerService)(),i=(g=a.name,`pkg-${r(b)}-${r(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,q={...o,id:i,flowId:j,folder:b,enabled:!1},s=await h.create(q);if(s.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(s.conflict){let{id:b,...c}=q,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:s.error})}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
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}})},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},75943:(a,b,c)=>{c.d(b,{g:()=>h,i:()=>g});var d=c(50846),e=c(80233);let f=(0,d.h)("backend/services/packages/packageRegistry");async function g(a){let{status:b,body:c}=await (0,e.sB)(a);return b<200||b>=300?(f.warn(`searchPackageRegistry: registry responded with status ${b}`),{items:[],page:a.page??1,pageSize:a.pageSize??20,total:0,error:c?.error??`Registry responded with status ${b}`}):c}async function h(a,b){if(!a||"string"!=typeof a)throw Error("A package id is required");let{status:c,body:d}=await (0,e.wf)(a,b&&b.trim()?b.trim():"latest");if(c<200||c>=300)throw Error(d?.error??d?.message??`Registry responded with status ${c}`);return d}},80233:(a,b,c)=>{c.d(b,{$5:()=>p,Nb:()=>s,Ow:()=>r,Tr:()=>x,Wz:()=>w,eo:()=>u,iD:()=>q,s2:()=>v,sB:()=>n,uJ:()=>j,w2:()=>t,wf:()=>o});var d=c(50846),e=c(92372),f=c(38844),g=c(21508);let h=(0,d.h)("backend/utils/packageRegistryClient");function i(a){return a.trim().replace(/\/+$/,"")}async function j(){let a=process.env.FLUJO_REGISTRY_BASE_URL?.trim();if(a)return i(a);let b=await (0,e.YM)(f.Z.REGISTRY_SETTINGS,{});return b?.baseUrl&&b.baseUrl.trim()?i(b.baseUrl):i(g.Qs)}async function k(a,b,c){let d=await j(),e=`${d}${a}`,f=new AbortController,g=setTimeout(()=>f.abort(),2e4);try{let d={"Content-Type":"application/json",Accept:"application/json"};c&&(d.Authorization=`Bearer ${c}`),h.info(`POST ${a}`);let g=await fetch(e,{method:"POST",headers:d,body:JSON.stringify(b??{}),signal:f.signal,cache:"no-store"}),i=await g.text(),j=null;if(i)try{j=JSON.parse(i)}catch{j={message:i}}return{status:g.status,body:j}}catch(b){return h.warn(`POST ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(g)}}async function l(a){let b=await j(),c=`${b}${a}`,d=new AbortController,e=setTimeout(()=>d.abort(),2e4);try{h.info(`GET ${a}`);let b=await fetch(c,{headers:{Accept:"application/json"},signal:d.signal,cache:"no-store"}),e=await b.text(),f=null;if(e)try{f=JSON.parse(e)}catch{f={message:e}}return{status:b.status,body:f}}catch(b){return h.warn(`GET ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(e)}}async function m(a,b){let c=await j(),d=`${c}${a}`,e=new AbortController,f=setTimeout(()=>e.abort(),2e4);try{h.info(`DELETE ${a}`);let c=await fetch(d,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${b}`},signal:e.signal,cache:"no-store"}),f=await c.text(),g=null;if(f)try{g=JSON.parse(f)}catch{g={message:f}}return{status:c.status,body:g}}catch(b){return h.warn(`DELETE ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(f)}}function n(a){let b=new URLSearchParams;a.q&&b.set("q",a.q),a.tag&&b.set("tag",a.tag),a.page&&b.set("page",String(a.page)),a.pageSize&&b.set("pageSize",String(a.pageSize));let c=b.toString()?`?${b.toString()}`:"";return l(`/v1/packages${c}`)}function o(a,b="latest"){return l(`/v1/packages/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}/manifest`)}function p(a,b,c){return k("/v1/auth/signup",{email:a,password:b,handle:c})}function q(a,b){return k("/v1/auth/login",{email:a,password:b})}function r(a){return k("/v1/auth/refresh",{refresh_token:a})}function s(a){return k("/v1/auth/resend-confirmation",{email:a})}function t(a){return k("/v1/auth/forgot-password",{email:a})}function u(a,b){return k("/v1/packages",a,b)}function v(a,b){return m(`/v1/packages/${encodeURIComponent(a)}`,b)}function w(a,b){return k("/v1/feedback",{notice:a,rating:b})}function x(a){return k("/v1/auth/oauth/token",{code:a.code,code_verifier:a.codeVerifier,redirect_uri:a.redirectUri,provider:a.provider})}}};
|