flujo-ai 3.48.1 → 3.48.2
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-path-routes-manifest.json +58 -58
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/approvals/[id]/route.js +1 -1
- package/.next/server/app/api/approvals/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/approvals/route.js +1 -1
- package/.next/server/app/api/approvals/route.js.nft.json +1 -1
- package/.next/server/app/api/automation-map/route.js +1 -1
- package/.next/server/app/api/automation-map/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/[voiceAction]/route.js +1 -1
- package/.next/server/app/api/avatar/[voiceAction]/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/connections/route.js +1 -1
- package/.next/server/app/api/avatar/connections/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/local-speech/route.js +1 -1
- package/.next/server/app/api/avatar/local-speech/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/remote/[voiceAction]/route.js +1 -1
- package/.next/server/app/api/avatar/remote/[voiceAction]/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/remote/availability/route.js +1 -1
- package/.next/server/app/api/avatar/remote/availability/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/voice/route.js +1 -1
- package/.next/server/app/api/avatar/voice/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/work-model/route.js +1 -1
- package/.next/server/app/api/avatar/work-model/route.js.nft.json +1 -1
- package/.next/server/app/api/avatar/world/route.js +1 -1
- package/.next/server/app/api/avatar/world/route.js.nft.json +1 -1
- package/.next/server/app/api/backup/route.js +1 -1
- package/.next/server/app/api/backup/route.js.nft.json +1 -1
- package/.next/server/app/api/browse/route.js +1 -1
- package/.next/server/app/api/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/bugs/enhance/route.js +1 -1
- package/.next/server/app/api/bugs/enhance/route.js.nft.json +1 -1
- package/.next/server/app/api/credential-migration/route.js +1 -1
- package/.next/server/app/api/credential-migration/route.js.nft.json +1 -1
- package/.next/server/app/api/credential-transfer/restore/route.js +1 -1
- package/.next/server/app/api/credential-transfer/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/credential-transfer/route.js +1 -1
- package/.next/server/app/api/credential-transfer/route.js.nft.json +1 -1
- package/.next/server/app/api/cwd/route.js +1 -1
- package/.next/server/app/api/cwd/route.js.nft.json +1 -1
- package/.next/server/app/api/encryption/secure/route.js +1 -1
- package/.next/server/app/api/encryption/secure/route.js.nft.json +1 -1
- package/.next/server/app/api/env/route.js +1 -1
- package/.next/server/app/api/env/route.js.nft.json +1 -1
- package/.next/server/app/api/factory-observatory/route.js +1 -1
- package/.next/server/app/api/factory-observatory/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js +1 -1
- package/.next/server/app/api/flow/[id]/convert-process-to-subflow/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/route.js +1 -1
- package/.next/server/app/api/flow/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/[id]/versions/route.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/assist/route.js +1 -1
- package/.next/server/app/api/flow/assist/route.js.nft.json +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/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/visual/route.js +1 -1
- package/.next/server/app/api/flow/generate/visual/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/generator/route.js +1 -1
- package/.next/server/app/api/flow/generator/route.js.nft.json +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/model-agent/route.js +1 -1
- package/.next/server/app/api/flow/model-agent/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/repair/route.js +1 -1
- package/.next/server/app/api/flow/repair/route.js.nft.json +1 -1
- package/.next/server/app/api/flow/route.js +1 -1
- package/.next/server/app/api/flow/route.js.nft.json +1 -1
- package/.next/server/app/api/git/route.js +1 -1
- package/.next/server/app/api/git/route.js.nft.json +1 -1
- package/.next/server/app/api/harness/[id]/route.js +1 -1
- package/.next/server/app/api/harness/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/harness/profiles/route.js +1 -1
- package/.next/server/app/api/harness/profiles/route.js.nft.json +1 -1
- package/.next/server/app/api/harness/route.js +1 -1
- package/.next/server/app/api/harness/route.js.nft.json +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/local-models/capability/route.js +1 -1
- package/.next/server/app/api/local-models/capability/route.js.nft.json +1 -1
- package/.next/server/app/api/local-models/pull/route.js +1 -1
- package/.next/server/app/api/local-models/pull/route.js.nft.json +1 -1
- package/.next/server/app/api/local-models/suggest/route.js +1 -1
- package/.next/server/app/api/local-models/suggest/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/app-consent/route.js +1 -1
- package/.next/server/app/api/mcp/app-consent/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/assistant/route.js +1 -1
- package/.next/server/app/api/mcp/assistant/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/cancel/route.js +1 -1
- package/.next/server/app/api/mcp/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/authoring/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/authoring/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/automation/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/automation/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/flows/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/flows/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/resources/read/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/read/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/resources/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/resources/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/servers/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/skills/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/state/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/state/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/flujo/tools/route.js +1 -1
- package/.next/server/app/api/mcp/flujo/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/model-risk-assessment/route.js +1 -1
- package/.next/server/app/api/mcp/model-risk-assessment/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/security-review/route.js +1 -1
- package/.next/server/app/api/mcp/security-review/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/host-consent/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/approve/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/get/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/load/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/confirm/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/stdio-oauth/start/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/servers/route.js +1 -1
- package/.next/server/app/api/mcp/servers/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp-registry/route.js +1 -1
- package/.next/server/app/api/mcp-registry/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route.js.nft.json +1 -1
- package/.next/server/app/api/model/[id]/route.js +1 -1
- package/.next/server/app/api/model/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/model/allowance/route.js +1 -1
- package/.next/server/app/api/model/allowance/route.js.nft.json +1 -1
- package/.next/server/app/api/model/provider/route.js +1 -1
- package/.next/server/app/api/model/provider/route.js.nft.json +1 -1
- package/.next/server/app/api/model/route.js +1 -1
- package/.next/server/app/api/model/route.js.nft.json +1 -1
- package/.next/server/app/api/model/test/route.js +1 -1
- package/.next/server/app/api/model/test/route.js.nft.json +1 -1
- package/.next/server/app/api/network-exposure/route.js +1 -1
- package/.next/server/app/api/network-exposure/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/callback/route.js +1 -1
- package/.next/server/app/api/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/initiate/route.js +1 -1
- package/.next/server/app/api/oauth/initiate/route.js.nft.json +1 -1
- package/.next/server/app/api/oauth/reset/route.js +1 -1
- package/.next/server/app/api/oauth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/operations/status/route.js +1 -1
- package/.next/server/app/api/operations/status/route.js.nft.json +1 -1
- package/.next/server/app/api/original-owner/route.js +1 -1
- package/.next/server/app/api/original-owner/route.js.nft.json +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/derive-secrets/route.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/install/route.js +1 -1
- package/.next/server/app/api/packages/install/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/install/status/route.js +1 -1
- package/.next/server/app/api/packages/install/status/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/installed/route.js +1 -1
- package/.next/server/app/api/packages/installed/route.js.nft.json +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/scan-targets/route.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/search/route.js +1 -1
- package/.next/server/app/api/packages/search/route.js.nft.json +1 -1
- package/.next/server/app/api/packages/uninstall/route.js +1 -1
- package/.next/server/app/api/packages/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/persona-recovery/route.js +2 -2
- package/.next/server/app/api/persona-recovery/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/worker-recovery/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route.js.nft.json +1 -1
- package/.next/server/app/api/planned-executions/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/route.js +1 -1
- package/.next/server/app/api/planned-executions/route.js.nft.json +1 -1
- package/.next/server/app/api/reference-search/files/route.js +1 -1
- package/.next/server/app/api/reference-search/files/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/auth/resend/route.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/auth/reset/route.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/auth/route.js +1 -1
- package/.next/server/app/api/registry/auth/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/feedback/route.js +1 -1
- package/.next/server/app/api/registry/feedback/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/oauth/callback/route.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/packages/route.js +1 -1
- package/.next/server/app/api/registry/packages/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/publish/route.js +1 -1
- package/.next/server/app/api/registry/publish/route.js.nft.json +1 -1
- package/.next/server/app/api/registry/settings/route.js +1 -1
- package/.next/server/app/api/registry/settings/route.js.nft.json +1 -1
- package/.next/server/app/api/restore/route.js +1 -1
- package/.next/server/app/api/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/runs/active/route.js +1 -1
- package/.next/server/app/api/runs/active/route.js.nft.json +1 -1
- package/.next/server/app/api/runtime-environment/route.js +1 -1
- package/.next/server/app/api/runtime-environment/route.js.nft.json +1 -1
- package/.next/server/app/api/setup/ai-cli/route.js +1 -1
- package/.next/server/app/api/setup/ai-cli/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/abort/route.js +1 -1
- package/.next/server/app/api/snapshot/abort/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/begin/route.js +1 -1
- package/.next/server/app/api/snapshot/begin/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/download/route.js +1 -1
- package/.next/server/app/api/snapshot/download/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/finalize/route.js +1 -1
- package/.next/server/app/api/snapshot/finalize/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/info/route.js +1 -1
- package/.next/server/app/api/snapshot/info/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshot/status/route.js +1 -1
- package/.next/server/app/api/snapshot/status/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshots/cleanup/route.js +1 -1
- package/.next/server/app/api/snapshots/cleanup/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshots/open-folder/route.js +1 -1
- package/.next/server/app/api/snapshots/open-folder/route.js.nft.json +1 -1
- package/.next/server/app/api/snapshots/route.js +1 -1
- package/.next/server/app/api/snapshots/route.js.nft.json +1 -1
- package/.next/server/app/api/statistics/route.js +1 -1
- package/.next/server/app/api/statistics/route.js.nft.json +1 -1
- package/.next/server/app/api/storage/route.js +1 -1
- package/.next/server/app/api/storage/route.js.nft.json +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/[id]/route.js +1 -1
- package/.next/server/app/api/tickets/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/tickets/route.js +1 -1
- package/.next/server/app/api/tickets/route.js.nft.json +1 -1
- package/.next/server/app/api/transcription/route.js +1 -1
- package/.next/server/app/api/transcription/route.js.nft.json +1 -1
- package/.next/server/app/api/update/route.js +1 -1
- package/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/server/app/api/waves/route.js +1 -1
- package/.next/server/app/api/waves/route.js.nft.json +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/workspaces/route.js +1 -1
- package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp/page.js +1 -1
- package/.next/server/app/mcp/page.js.nft.json +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route.js.nft.json +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js.nft.json +1 -1
- package/.next/server/app/settings/page.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/v1/chat/completions/route.js +1 -1
- package/.next/server/app/v1/chat/completions/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversation-chains/route.js +1 -1
- package/.next/server/app/v1/chat/conversation-chains/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route.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]/cancel/route.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]/debug/attach/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/attach/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/state/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route.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]/events/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/media/[mediaId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/[dispatchId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/model-turns/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/recovery/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/revert/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/wire-preview/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/conversations/route.js +1 -1
- package/.next/server/app/v1/chat/conversations/route.js.nft.json +1 -1
- package/.next/server/app/v1/chat/events/route.js +1 -1
- package/.next/server/app/v1/chat/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/flows/[flowRef]/readiness/route.js +1 -1
- package/.next/server/app/v1/flows/[flowRef]/readiness/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/events/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/events/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/interventions/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/private-notes/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/resume/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/resume/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/start/route.js +1 -1
- package/.next/server/app/v1/meetings/[meetingId]/start/route.js.nft.json +1 -1
- package/.next/server/app/v1/meetings/route.js +1 -1
- package/.next/server/app/v1/meetings/route.js.nft.json +1 -1
- package/.next/server/app/v1/models/route.js +1 -1
- package/.next/server/app/v1/models/route.js.nft.json +1 -1
- package/.next/server/app/v1/persona-drafts/[draftId]/route.js +1 -1
- package/.next/server/app/v1/persona-drafts/[draftId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/persona-drafts/route.js +1 -1
- package/.next/server/app/v1/persona-drafts/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/launch/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/[grantId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/app-grants/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/behaviors/[behaviorId]/activate/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/behaviors/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/copy/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/composition/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/core/reconcile/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/deletion-preview/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/execution-preview/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/export/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/export/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/export-preview/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/export-preview/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/goal-admissions/[admissionKey]/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/apply/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/promote/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/reject/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/[proposalId]/undo/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/improvements/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/activate/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/correct/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/pin/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/resolve-conflict/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/[memoryId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/memories/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/runtime-recovery/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/storage-stats/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/assign/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/control/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/runtime/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/[workItemId]/source/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/promote-todo/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/route.js +1 -1
- package/.next/server/app/v1/personas/[personaId]/work-items/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/readiness/route.js +1 -1
- package/.next/server/app/v1/personas/readiness/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/route.js +1 -1
- package/.next/server/app/v1/personas/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/settings-options/route.js +1 -1
- package/.next/server/app/v1/personas/settings-options/route.js.nft.json +1 -1
- package/.next/server/app/v1/personas/summary/route.js +1 -1
- package/.next/server/app/v1/personas/summary/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/duplicate/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/duplicate/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/impact/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/impact/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/restore/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/restore/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/rollback/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/rollback/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/[roleId]/versions/route.js +1 -1
- package/.next/server/app/v1/roles/[roleId]/versions/route.js.nft.json +1 -1
- package/.next/server/app/v1/roles/route.js +1 -1
- package/.next/server/app/v1/roles/route.js.nft.json +1 -1
- package/.next/server/app/v1/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/v1/tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/server/app-paths-manifest.json +58 -58
- package/.next/server/chunks/{89291.js → 11417.js} +4 -4
- package/.next/server/chunks/14130.js +1 -1
- package/.next/server/chunks/21392.js +4 -4
- package/.next/server/chunks/23167.js +1 -1
- package/.next/server/chunks/30775.js +1 -1
- package/.next/server/chunks/30953.js +2 -2
- package/.next/server/chunks/36362.js +2 -2
- package/.next/server/chunks/42265.js +2 -2
- package/.next/server/chunks/52152.js +2 -2
- package/.next/server/chunks/57085.js +1 -1
- package/.next/server/chunks/73633.js +1 -1
- package/.next/server/chunks/74050.js +1 -1
- package/.next/server/chunks/{28644.js → 75650.js} +2 -2
- package/.next/server/chunks/77297.js +6 -6
- package/.next/server/chunks/81306.js +1 -1
- package/.next/server/chunks/82300.js +2 -2
- package/.next/server/chunks/83718.js +1 -1
- package/.next/server/chunks/87068.js +1 -1
- package/.next/server/chunks/91784.js +3 -3
- package/.next/server/chunks/97235.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/preview-props.json +3 -3
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2103-e3cdcdaf6b6e91fe.js → 2103-294c66f113cd67a5.js} +1 -1
- package/.next/static/chunks/{webpack-5157aab6954f4d2c.js → webpack-fdea59d2034fe7c1.js} +1 -1
- package/.next/trace-build +1 -1
- package/README.md +1 -1
- package/mcp-servers/bash/package.json +1 -1
- package/mcp-servers/browser/package.json +1 -1
- package/mcp-servers/filesystem/package.json +1 -1
- package/mcp-servers/flujo/package.json +1 -1
- package/package.json +5 -5
- /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_buildManifest.js +0 -0
- /package/.next/static/{ge1_acWolH72coqTUewza → TsqR1zGslz8fIpBz6QVy_}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=81306,exports.ids=[81306],exports.modules={186359:(a,b,c)=>{c.d(b,{fI:()=>e,B5:()=>g});let d=JSON.parse('{"e":{"format":"flujo-workspace-encrypted","cipher":"aes-256-gcm","writeVersion":2,"readVersions":[1,2],"legacyPlaintextRead":true,"recipientKeyRequired":true,"recipientKeyBytes":32,"recipientKeyEncoding":"base64","v2Aad":"flujo:workspace-snapshot:v2","v2Digest":"sha256-encrypted-wire","v1Digest":"sha256-plaintext-zip"},"R":{"maxFileBytes":268435456,"maxUncompressedBytes":1073741824,"maxManifestBytes":8388608,"maxArchiveBytes":1082130432,"maxEncryptedBytes":1442844672,"maxMembers":65534}}'),e=d.e,f=d.R;function g(){let a=(a,b)=>{let c=process.env[a];if(void 0===c)return b;let d=Number(c);if(!/^[1-9]\d*$/.test(c)||!Number.isSafeInteger(d))throw Error("Snapshot limits are invalid.");return d},b=a("FLUJO_SNAPSHOT_MAX_FILE_BYTES",f.maxFileBytes),c=a("FLUJO_SNAPSHOT_MAX_BYTES",f.maxUncompressedBytes),d=c+f.maxManifestBytes,e=4*Math.ceil(d/3)+4096;if(!Number.isSafeInteger(d)||!Number.isSafeInteger(e))throw Error("Snapshot limits are invalid.");return{...f,maxFileBytes:b,maxUncompressedBytes:c,maxArchiveBytes:d,maxEncryptedBytes:e}}},381306:(a,b,c)=>{c.r(b),c.d(b,{restoreConfiguredWorkerSnapshot:()=>N,unlockWorkerSnapshot:()=>L,verifyWorkerCodexAuth:()=>J});var d=c(973024),e=c(100629),f=c(977598),g=c(186359),h=c(621385),i=c(157075),j=c(638522);let k=()=>Error("Invalid snapshot ZIP structure or member integrity."),l=Array.from({length:256},(a,b)=>{let c=b;for(let a=0;a<8;a++)c=c>>>1^(1&c?0xedb88320:0);return c>>>0});async function m(a,b,c,d){let e=await a.read(Math.max(0,a.size-65557),Math.min(a.size,65557)),f=-1;for(let a=e.length-22;a>=0;a--)if(0x6054b50===e.readUInt32LE(a)&&a+22+e.readUInt16LE(a+20)===e.length){f=a;break}if(f<0)throw k();let g=a.size-e.length+f,h=e.readUInt16LE(f+10),i=e.readUInt32LE(f+12),j=e.readUInt32LE(f+16);if(e.readUInt16LE(f+4)||e.readUInt16LE(f+6)||e.readUInt16LE(f+8)!==h||65535===h||h>65534||j+i!==g)throw k();let l=new Map,m=[],n=[],o=j,p=0;for(let e=0;e<h;e++){if(o+46>g)throw k();let e=await a.read(o,46);if(0x2014b50!==e.readUInt32LE(0))throw k();let f=e.readUInt16LE(8),h=e.readUInt16LE(10),i=e.readUInt32LE(20),q=e.readUInt32LE(24),r=e.readUInt16LE(28),s=o+46+r+e.readUInt16LE(30)+e.readUInt16LE(32);if(1&f||0!==e.readUInt16LE(34)||![0,8].includes(h)||s>g||0xffffffff===i||0xffffffff===q)throw k();let t=await a.read(o+46,r),u=new TextDecoder("utf-8",{fatal:!0}).decode(t),v=u.endsWith("/"),w=d(u,v).normalize("NFC").toLowerCase();if(l.has(w))throw Error("Snapshot contains duplicate or case-aliased archive paths.");l.set(w,v);let x=e.readUInt32LE(38)>>>16,y=61440&x;if(y&&y!==(v?16384:32768))throw Error("Snapshot links and special files are unsupported.");if(q>("snapshot-manifest.json"===u?8388608:b)||v&&0!==q)throw Error("Snapshot file exceeds the restore size limit.");if((p+=q)>c+8388608)throw Error("Snapshot exceeds the restore size limit.");let z=e.readUInt32LE(42);if(z+30>j)throw k();let A=await a.read(z,30);if(0x4034b50!==A.readUInt32LE(0)||A.readUInt16LE(6)!==f||A.readUInt16LE(8)!==h||A.readUInt16LE(26)!==r)throw k();let B=z+30+r+A.readUInt16LE(28);if(B+i>j||!(await a.read(z+30,r)).equals(t))throw k();let C=e.readUInt32LE(16);if(!(8&f)&&(A.readUInt32LE(14)!==C||A.readUInt32LE(18)!==i||A.readUInt32LE(22)!==q))throw k();let D=B+i;if(8&f){if(D+12>j)throw k();let b=0x8074b50===(await a.read(D,4)).readUInt32LE(0),c=await a.read(D+4*!!b,12);if(c.readUInt32LE(0)!==C||c.readUInt32LE(4)!==i||c.readUInt32LE(8)!==q||(D+=b?16:12)>j)throw k()}n.push({start:z,end:D}),m.push({name:u,directory:v,size:q,mode:x,crc:C,method:h,offset:B,compressed:i}),o=s}if(o!==g)throw k();n.sort((a,b)=>a.start-b.start);for(let a=1;a<n.length;a++)if(n[a].start<n[a-1].end)throw k();for(let a of m){let b=d(a.name,a.directory).split("/");for(let a=1;a<b.length;a++)if(!1===l.get(b.slice(0,a).join("/").normalize("NFC").toLowerCase()))throw Error("Snapshot contains a file/directory path conflict.")}return m}async function*n(a,b){let c=i.Readable.from(a.range(b.offset,b.compressed),{objectMode:!1,highWaterMark:65536}),d=8===b.method?(0,j.createInflateRaw)():void 0,e=d?c.pipe(d):c;e!==c&&c.on("error",a=>e.destroy(a));let f=0,g=0xffffffff;try{for await(let a of e){let c=Buffer.isBuffer(a)?a:Buffer.from(a);if((f+=c.length)>b.size)throw k();for(let a of c)g=g>>>8^l[(g^a)&255];yield c}if(f!==b.size||(0xffffffff^g)>>>0!==b.crc||d&&d.bytesWritten!==b.compressed)throw k()}finally{c.destroy(),e.destroy()}}var o=c(176760),p=c.n(o),q=c(739006),r=c(134887),s=c(930100),t=c(851018),u=c(907986),v=c(719031),w=c(472178),x=c(620775),y=c(683843),z=c(580940);let A="snapshot-manifest.json",B=".flujo-worker-snapshot.json",C=/^[a-f0-9]{64}$/;function D(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function E(a,b){try{return JSON.parse(a)}catch{throw Error(b)}}function F(a,b=!1){let c=b?a.replace(/\/$/,""):a,d=c.split("/");if(!c||c.includes("\\")||c.includes("\0")||d.some(a=>!a||"."===a||".."===a||a.includes(":")||/[. ]$/.test(a)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(a)))throw Error("Snapshot contains an unsafe archive path.");if(c!==A&&".workspace.json"!==c&&!u.WORKSPACE_SUBTREES.includes(d[0]))throw Error("Snapshot contains a file outside the supported workspace roots.");if(b&&(c===A||".workspace.json"===c))throw Error("Snapshot metadata must be a file.");if(!b&&u.WORKSPACE_SUBTREES.includes(c))throw Error("Snapshot workspace roots must be directories.");return c}async function G(a,b=!1){b&&await d.promises.mkdir(a,{recursive:!0,mode:448});let c=await d.promises.lstat(a);if(!c.isDirectory()||c.isSymbolicLink())throw Error("Worker restore destination must be a plain directory.")}async function H(a){try{return await d.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function I(a){await G(a);let b=await d.promises.readdir(a,{withFileTypes:!0});for(let c of b)if(!u.WORKSPACE_SUBTREES.includes(c.name)||!c.isDirectory()||c.isSymbolicLink()||0!==(await d.promises.readdir(p().join(a,c.name))).length)throw Error("Worker snapshot restore refuses to overwrite an existing workspace.");for(let c of b)await d.promises.rmdir(p().join(a,c.name));await d.promises.rmdir(a)}async function J(a,b=(0,u.getWorkspaceDir)(a.workspace)){if("chatgpt"!==a.codexAuth)return;let c=p().join(b,"db","codex-runtime"),f=[];for(let a of["auth.json","flujo-auth-source.json"]){let g=await d.promises.lstat(p().join(c,a),{bigint:!0});if(!g.isFile()||g.isSymbolicLink()||g.nlink>BigInt(1)||g.size>BigInt(1048576))throw Error("Worker Codex authentication is not a valid workspace credential file.");let h=p().join(c,a);f.push(await (0,e.b)(h,{expected:g,maxBytes:1048576,verifyPath:()=>(0,w.V$)(b,h)}))}let[g,h]=f,i=E(h.toString("utf8"),"Worker Codex authentication marker is invalid.");if(!(0,v.eK)(g)||!D(i)||1!==i.version||"workspace"!==i.source)throw Error("Worker Codex ChatGPT authentication is missing or invalid.")}async function K(a,b=(0,u.getWorkspaceDir)(a.workspace)){if("user"!==a.encryption)return null;let c=p().join(b,"db","worker-bootstrap-secrets.json"),f=await d.promises.lstat(c,{bigint:!0});if(!f.isFile()||f.isSymbolicLink()||f.nlink>BigInt(1)||f.size>BigInt(4096))throw Error("Worker workspace encryption requires valid bootstrap credentials.");if("win32"!==process.platform&&(f.mode&BigInt(63))!==BigInt(0))throw Error("Worker workspace encryption credentials must be owner-only.");let g=E((await (0,e.b)(c,{expected:f,maxBytes:4096,ownerOnly:!0,verifyPath:()=>(0,w.V$)(b,c)})).toString("utf8"),"Worker workspace encryption bootstrap credentials are invalid.");if(!D(g)||1!==g.version||"string"!=typeof g.workspaceDek||!(0,t.TE)(g.workspaceDek))throw Error("Worker workspace encryption bootstrap credentials are invalid.");return g.workspaceDek}async function L(a){if((0,u.getCurrentWorkspace)()!==a.workspace)throw Error("Worker encryption unlock workspace mismatch.");let b=await K(a);b&&await (0,s.SO)(b,{workspace:a.workspace,root:(0,u.getWorkspaceDir)(a.workspace)})}async function M(a,b){(0,z.Vv)({state:"restoring",archiveSha256:b,error:void 0});let c=(0,g.B5)(),i=c.maxFileBytes,j=c.maxUncompressedBytes,k=await (0,h.z)(a,process.env.FLUJO_WORKER_SNAPSHOT_KEY,c.maxArchiveBytes,b);try{let a=await m(k,i,j,F),c=a.find(a=>a.name===A&&!a.directory);if(!c)throw Error("Worker snapshot manifest is missing.");let g=[];for await(let a of n(k,c))g.push(a);let h=function(a){if(!D(a)||a.formatVersion!==y.nt||a.layoutVersion!==x.q||!1!==a.externalRootsIncluded||!D(a.source)||a.source.version!==q.rE||"string"!=typeof a.source.platform||!D(a.runtime)||!D(a.runtime.mcpTransfer)||1!==a.runtime.mcpTransfer.formatVersion||"string"!=typeof a.runtime.mcpTransfer.sourceWorkspaceRoot||!Array.isArray(a.runtime.mcpTransfer.servers)||!["chatgpt","none"].includes(a.runtime.codexAuth)||!["default","user"].includes(a.runtime.encryption)||!Array.isArray(a.files)||!Array.isArray(a.subtrees)||a.subtrees.length!==u.WORKSPACE_SUBTREES.length||u.WORKSPACE_SUBTREES.some(b=>!a.subtrees.includes(b)))throw Error("Snapshot format, FLUJO version, layout, or portable runtime metadata is incompatible.");return(0,u.assertValidWorkspaceName)(a.workspace),a}(E(Buffer.concat(g).toString("utf8"),"Worker snapshot manifest is invalid JSON.")),l={workspace:h.workspace,archiveSha256:b,mcpTransfer:h.runtime.mcpTransfer,codexAuth:h.runtime.codexAuth,encryption:h.runtime.encryption};(0,z.Vv)({workspace:l.workspace});let o=new Map,s=0;for(let a of h.files){if(!D(a)||"string"!=typeof a.path||a.path===A||!Number.isSafeInteger(a.size)||a.size<0||a.size>i||"string"!=typeof a.sha256||!C.test(a.sha256))throw Error("Invalid snapshot manifest member.");if(F(a.path),o.has(a.path))throw Error("Snapshot manifest has duplicate members.");if((s+=a.size)>j)throw Error("Snapshot manifest exceeds the restore size limit.");o.set(a.path,a)}for(let b of a){if(b.name===A)continue;let a=b.directory?void 0:o.get(b.name);if(!b.directory&&(!a||a.size!==b.size))throw Error("Snapshot archive does not match its manifest.");let c=(0,f.createHash)("sha256");for await(let a of n(k,b))c.update(a);if(a&&c.digest("hex")!==a.sha256)throw Error("Snapshot member integrity check failed.");b.directory||o.delete(b.name)}if(o.size)throw Error("Snapshot archive is missing a manifest member.");await G((0,r.ok)(),!0),await G((0,u.getWorkspacesDir)(),!0);let t=(0,u.getWorkspaceDir)(l.workspace);if((await d.promises.readdir((0,u.getWorkspacesDir)())).filter(a=>a.toLowerCase()===l.workspace.toLowerCase()).some(a=>a!==l.workspace))throw Error("Worker workspace has a case-alias conflict.");let v=await H(t);if(v){await G(t);let a=p().join(t,B);if(await H(a)){let c=await d.promises.lstat(a,{bigint:!0});if(!c.isFile()||c.isSymbolicLink()||c.nlink>BigInt(1)||c.size>BigInt(4096))throw Error("Invalid worker restore marker.");let f=E((await (0,e.b)(a,{expected:c,maxBytes:4096,verifyPath:()=>(0,w.V$)(t,a)})).toString("utf8"),"Worker restore marker is invalid.");if(!D(f)||1!==f.formatVersion||f.archiveSha256!==b||f.workspace!==l.workspace)throw Error("Worker snapshot does not match the existing workspace.");return await J(l),await K(l),l}}let L=await d.promises.mkdtemp(p().join((0,u.getWorkspacesDir)(),".worker-restore-")),M=!1;try{for(let a of(await d.promises.chmod(L,448),u.WORKSPACE_SUBTREES))await d.promises.mkdir(p().join(L,a),{mode:448});for(let b of a.filter(a=>a.directory))await d.promises.mkdir(p().join(L,...F(b.name,!0).split("/")),{recursive:!0,mode:448});for(let b of a){if(b.directory||b.name===A)continue;let a=p().join(L,...b.name.split("/"));await d.promises.mkdir(p().dirname(a),{recursive:!0,mode:448}),await (0,w.V$)(L,a);let c=await d.promises.open(a,"wx",73&b.mode?448:384);try{if(".workspace.json"===b.name)await c.writeFile('{"roots":[]}\n');else for await(let a of n(k,b))for(let b=0;b<a.length;){let{bytesWritten:d}=await c.write(a,b,a.length-b);if(!d)throw Error("Worker restore write made no progress.");b+=d}await c.sync()}finally{await c.close()}}if(await J(l,L),await K(l,L),await (0,w.sA)(L,p().join(L,B),Buffer.from(JSON.stringify({formatVersion:1,workspace:l.workspace,archiveSha256:b}))),v)await I(t);else if(await H(t))throw Error("Worker restore destination was created concurrently.");return await d.promises.rename(L,t),M=!0,await J(l),l}finally{M||await d.promises.rm(L,{recursive:!0,force:!0})}}finally{await k.close()}}function N(){if(!(0,z.ye)())return Promise.resolve(null);let a=process.env.FLUJO_WORKER_SNAPSHOT?.trim(),b=process.env.FLUJO_WORKER_SNAPSHOT_SHA256?.trim().toLowerCase();if(!a||!b||!C.test(b)||!p().isAbsolute(a)){let a="Worker mode requires an absolute FLUJO_WORKER_SNAPSHOT path and FLUJO_WORKER_SNAPSHOT_SHA256.";return(0,z.Vv)({state:"error",error:a}),Promise.reject(Error(a))}let c=(0,f.createHash)("sha256").update(process.env.FLUJO_WORKER_SNAPSHOT_KEY??"").digest("hex"),d=`${(0,u.getWorkspacesDir)()}\0${a}\0${b}\0${c}`;if(global.__flujo_worker_snapshot_restore?.key===d)return global.__flujo_worker_snapshot_restore.promise;let e=M(a,b).catch(a=>{throw(0,z.Vv)({state:"error",error:a instanceof Error?a.message:"Worker restore failed."}),global.__flujo_worker_snapshot_restore?.promise===e&&(global.__flujo_worker_snapshot_restore=void 0),a});return global.__flujo_worker_snapshot_restore={key:d,promise:e},e}},621385:(a,b,c)=>{c.d(b,{N:()=>o,z:()=>r});var d=c(973024),e=c(977598),f=c(848161),g=c(176760),h=c.n(g),i=c(186359);let j=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],k=(a,b)=>j.every(c=>a[c]===b[c]),l=()=>Error("Worker snapshot is unsafe or changed while being read.");async function m(a,b){for(let c=0;c<b.length;){let{bytesWritten:d}=await a.write(b,c,b.length-c);if(!d)throw l();c+=d}}async function n(a,b,c,d){let e=d?d.subarray(0,c):Buffer.alloc(c);if(e.length!==c)throw l();for(let d=0;d<c;){let{bytesRead:f}=await a.read(e,d,c-d,b+d);if(!f)throw l();d+=f}return e}class o{constructor(a,b){this.root=a,this.file=b,this.size=0,this.key=(0,e.randomBytes)(32),this.pending=Buffer.alloc(0),this.blocks=[],this.diskSize=0,this.sealed=Buffer.alloc(65564),this.readTail=Promise.resolve()}static async create(){let a=await d.promises.mkdtemp(h().join((0,f.tmpdir)(),"flujo-snapshot-input-"));try{return await d.promises.chmod(a,448),new o(a,await d.promises.open(h().join(a,"ciphertext"),"wx+",384))}catch(b){throw await d.promises.rm(a,{recursive:!0,force:!0}),b}}async append(a){this.size+=a.length;let b=this.pending.length?Buffer.concat([this.pending,a]):a;for(;b.length>=65536;)await this.seal(b.subarray(0,65536)),b=b.subarray(65536);this.pending=Buffer.from(b)}async seal(a){let b=(0,e.randomBytes)(12),c=(0,e.createCipheriv)("aes-256-gcm",this.key,b);c.setAAD(Buffer.from(`${this.blocks.length}:${a.length}`));let d=c.update(a),f=c.final();b.copy(this.sealed),c.getAuthTag().copy(this.sealed,12),d.copy(this.sealed,28),f.copy(this.sealed,28+d.length),await m(this.file,this.sealed.subarray(0,a.length+28)),this.blocks.push({offset:this.diskSize,length:a.length}),this.diskSize+=a.length+28}async finish(){this.pending.length&&await this.seal(this.pending),this.pending.fill(0),this.pending=Buffer.alloc(0),await this.file.sync()}async read(a,b){let c,d=this.readTail;this.readTail=new Promise(a=>{c=a}),await d;try{return await this.readOwned(a,b)}finally{c()}}async readOwned(a,b){if(!Number.isSafeInteger(a)||!Number.isSafeInteger(b)||a<0||b<0||a+b>this.size||b>8388608)throw l();let c=Buffer.alloc(b);for(let d=0;d<b;){let f=Math.floor((a+d)/65536),g=this.blocks[f];if(!g)throw l();if(this.cache?.index!==f){this.cache?.bytes.fill(0);let a=await n(this.file,g.offset,g.length+28,this.sealed),b=(0,e.createDecipheriv)("aes-256-gcm",this.key,a.subarray(0,12));b.setAAD(Buffer.from(`${f}:${g.length}`)),b.setAuthTag(a.subarray(12,28));let c=b.update(a.subarray(28)),d=b.final();this.cache={index:f,bytes:d.length?Buffer.concat([c,d]):c}}let h=(a+d)%65536,i=Math.min(b-d,g.length-h);this.cache.bytes.copy(c,d,h,h+i),d+=i}return c}async *range(a=0,b=this.size-a){for(let c=0;c<b;c+=65536)yield await this.read(a+c,Math.min(65536,b-c))}async close(){for(let a of(this.key.fill(0),this.pending.fill(0),this.cache?.bytes.fill(0),this.sealed.fill(0),[...await Promise.allSettled([this.file.close()]),...await Promise.allSettled([d.promises.rm(this.root,{recursive:!0,force:!0})])]))if("rejected"===a.status)throw a.reason}}class p{constructor(a,b){this.file=a,this.size=b,this.storage=Buffer.alloc(65536),this.buffer=Buffer.alloc(0),this.offset=0,this.position=0}async fill(){return this.offset<this.buffer.length||this.position!==this.size&&(this.buffer=await n(this.file,this.position,Math.min(65536,this.size-this.position),this.storage),this.position+=this.buffer.length,this.offset=0,!0)}async peek(){return await this.fill()?this.buffer[this.offset]:-1}async byte(){let a=await this.peek();return -1!==a&&this.offset++,a}async whitespace(){for(;[9,10,13,32].includes(await this.peek());)await this.byte()}async expect(a){if(await this.whitespace(),await this.byte()!==a)throw l()}async smallValue(){await this.whitespace();let a=[],b=await this.peek()===34;b&&a.push(await this.byte());let c=!1;for(;a.length<256;){let d=await this.peek();if(-1===d)throw l();if(!b&&[44,125,9,10,13,32].includes(d)||(a.push(await this.byte()),b&&34===d&&!c))break;c=92===d&&!c}if(256===a.length)throw l();try{return JSON.parse(Buffer.from(a).toString("utf8"))}catch{throw l()}}async data(a,b){await this.expect(34);let c="",d=!1,e=0,f=async f=>{if(!/^[A-Za-z0-9+/=]*$/.test(f)||d&&f.length)throw l();let g=(c+=f).length-c.length%4;if(!g)return;let h=c.slice(0,g);if(!/^[A-Za-z0-9+/]*={0,2}$/.test(h))throw l();let i=Buffer.from(h,"base64");if(i.toString("base64")!==h||(d=h.includes("="),(e+=i.length)>b))throw l();await m(a,i),c=c.slice(g)};for(;await this.fill();){let a=this.buffer.indexOf(34,this.offset),b=this.buffer.indexOf(92,this.offset),d=Math.min(a<0?this.buffer.length:a,b<0?this.buffer.length:b);if(await f(this.buffer.subarray(this.offset,d).toString("latin1")),this.offset=d,d===this.buffer.length)continue;if(34===await this.byte()){if(c.length)throw l();return e}let g=await this.byte();if(117===g){let a="";for(let b=0;b<4;b++){let b=await this.byte();if(b<0)throw l();a+=String.fromCharCode(b)}if(!/^[0-9a-fA-F]{4}$/.test(a))throw l();await f(String.fromCharCode(Number.parseInt(a,16)))}else{let a=new Map([[34,'"'],[92,"\\"],[47,"/"],[98,"\b"],[102,"\f"],[110,"\n"],[114,"\r"],[116," "]]).get(g);if(void 0===a)throw l();await f(a)}}throw l()}}function q(a,b){if("string"!=typeof a||a.length>64)throw l();let c=Buffer.from(a,"base64");if(c.length!==b||c.toString("base64")!==a)throw l();return c}async function r(a,b,c,g){let j,m,r,s,t=await d.promises.lstat(a,{bigint:!0}),u=void 0===b?c:4*Math.ceil(c/3)+4096;if(!t.isFile()||t.isSymbolicLink()||t.nlink!==BigInt(1)||t.size>BigInt(u))throw l();let v=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),w=!1,x=0,y=(0,e.createHash)("sha256");try{let u=j=await o.create();if(!k(t,await v.stat({bigint:!0}))||!k(t,await d.promises.lstat(a,{bigint:!0})))throw l();let z=Buffer.alloc(65536);for(let a=0;a<Number(t.size);a+=65536)y.update(await n(v,a,Math.min(65536,Number(t.size)-a),z));let A=(0,e.createHash)("sha256"),B=async a=>{if(u.size+a.length>c)throw l();A.update(a),await u.append(a)};if(void 0!==b)try{s=q(b,32),m=await d.promises.mkdtemp(h().join((0,f.tmpdir)(),"flujo-snapshot-envelope-")),await d.promises.chmod(m,448),r=await d.promises.open(h().join(m,"ciphertext"),"wx+",384);let a=new p(v,Number(t.size)),g=new Map,j=-1;for(await a.expect(123);;){let b=await a.smallValue();if("string"!=typeof b||!["format","version","iv","tag","data"].includes(b)||g.has(b))throw l();await a.expect(58),g.set(b,"data"===b||await a.smallValue()),"data"===b&&(j=await a.data(r,c)),await a.whitespace();let d=await a.byte();if(125===d)break;if(44!==d)throw l()}if(await a.whitespace(),await a.byte()!==-1||5!==g.size||"flujo-workspace-encrypted"!==g.get("format")||![1,2].includes(g.get("version"))||j<0)throw l();x=g.get("version");let k=(0,e.createDecipheriv)("aes-256-gcm",s,q(g.get("iv"),12));2===x&&k.setAAD(Buffer.from(i.fI.v2Aad)),k.setAuthTag(q(g.get("tag"),16));for(let a=0;a<j;a+=65536)await B(k.update(await n(r,a,Math.min(65536,j-a),z)));await B(k.final())}catch{throw Error("Worker snapshot decryption failed. Check the encrypted archive and its key.")}else for(let a=0;a<Number(t.size);a+=65536)await B(await n(v,a,Math.min(65536,Number(t.size)-a),z));let C=A.digest("hex");if((2===x?y.digest("hex"):C)!==g)throw Error("Worker snapshot SHA-256 mismatch.");if(!k(t,await v.stat({bigint:!0}))||!k(t,await d.promises.lstat(a,{bigint:!0})))throw l();return await u.finish(),w=!0,u}catch(a){throw await j?.close().catch(()=>void 0),a}finally{s?.fill(0);let a=await Promise.allSettled([v.close(),...r?[r.close()]:[]]),b=await Promise.allSettled(m?[d.promises.rm(m,{recursive:!0,force:!0})]:[]);if(w&&[...a,...b].some(a=>"rejected"===a.status))throw await j?.close().catch(()=>void 0),Error("Snapshot temporary storage could not be released.")}}},683843:(a,b,c)=>{c.d(b,{d1:()=>h,nt:()=>g});var d=c(739006),e=c(186359),f=c(620775);let g=2;function h(){let a=process.env.FLUJO_BUILD_REVISION;return{applicationVersion:d.rE,snapshotEncryption:{...e.fI,readVersions:[...e.fI.readVersions]},snapshotLimits:(0,e.B5)(),snapshotFormatVersion:g,layoutVersion:f.q,workerProtocolVersion:1,workerSnapshotSourceVersion:1,.../^[a-f0-9]{40}$/.test(a??"")?{revision:a}:{}}}},739006:a=>{a.exports={rE:"3.48.1"}}};
|
|
1
|
+
"use strict";exports.id=81306,exports.ids=[81306],exports.modules={186359:(a,b,c)=>{c.d(b,{fI:()=>e,B5:()=>g});let d=JSON.parse('{"e":{"format":"flujo-workspace-encrypted","cipher":"aes-256-gcm","writeVersion":2,"readVersions":[1,2],"legacyPlaintextRead":true,"recipientKeyRequired":true,"recipientKeyBytes":32,"recipientKeyEncoding":"base64","v2Aad":"flujo:workspace-snapshot:v2","v2Digest":"sha256-encrypted-wire","v1Digest":"sha256-plaintext-zip"},"R":{"maxFileBytes":268435456,"maxUncompressedBytes":1073741824,"maxManifestBytes":8388608,"maxArchiveBytes":1082130432,"maxEncryptedBytes":1442844672,"maxMembers":65534}}'),e=d.e,f=d.R;function g(){let a=(a,b)=>{let c=process.env[a];if(void 0===c)return b;let d=Number(c);if(!/^[1-9]\d*$/.test(c)||!Number.isSafeInteger(d))throw Error("Snapshot limits are invalid.");return d},b=a("FLUJO_SNAPSHOT_MAX_FILE_BYTES",f.maxFileBytes),c=a("FLUJO_SNAPSHOT_MAX_BYTES",f.maxUncompressedBytes),d=c+f.maxManifestBytes,e=4*Math.ceil(d/3)+4096;if(!Number.isSafeInteger(d)||!Number.isSafeInteger(e))throw Error("Snapshot limits are invalid.");return{...f,maxFileBytes:b,maxUncompressedBytes:c,maxArchiveBytes:d,maxEncryptedBytes:e}}},381306:(a,b,c)=>{c.r(b),c.d(b,{restoreConfiguredWorkerSnapshot:()=>N,unlockWorkerSnapshot:()=>L,verifyWorkerCodexAuth:()=>J});var d=c(973024),e=c(100629),f=c(977598),g=c(186359),h=c(621385),i=c(157075),j=c(638522);let k=()=>Error("Invalid snapshot ZIP structure or member integrity."),l=Array.from({length:256},(a,b)=>{let c=b;for(let a=0;a<8;a++)c=c>>>1^(1&c?0xedb88320:0);return c>>>0});async function m(a,b,c,d){let e=await a.read(Math.max(0,a.size-65557),Math.min(a.size,65557)),f=-1;for(let a=e.length-22;a>=0;a--)if(0x6054b50===e.readUInt32LE(a)&&a+22+e.readUInt16LE(a+20)===e.length){f=a;break}if(f<0)throw k();let g=a.size-e.length+f,h=e.readUInt16LE(f+10),i=e.readUInt32LE(f+12),j=e.readUInt32LE(f+16);if(e.readUInt16LE(f+4)||e.readUInt16LE(f+6)||e.readUInt16LE(f+8)!==h||65535===h||h>65534||j+i!==g)throw k();let l=new Map,m=[],n=[],o=j,p=0;for(let e=0;e<h;e++){if(o+46>g)throw k();let e=await a.read(o,46);if(0x2014b50!==e.readUInt32LE(0))throw k();let f=e.readUInt16LE(8),h=e.readUInt16LE(10),i=e.readUInt32LE(20),q=e.readUInt32LE(24),r=e.readUInt16LE(28),s=o+46+r+e.readUInt16LE(30)+e.readUInt16LE(32);if(1&f||0!==e.readUInt16LE(34)||![0,8].includes(h)||s>g||0xffffffff===i||0xffffffff===q)throw k();let t=await a.read(o+46,r),u=new TextDecoder("utf-8",{fatal:!0}).decode(t),v=u.endsWith("/"),w=d(u,v).normalize("NFC").toLowerCase();if(l.has(w))throw Error("Snapshot contains duplicate or case-aliased archive paths.");l.set(w,v);let x=e.readUInt32LE(38)>>>16,y=61440&x;if(y&&y!==(v?16384:32768))throw Error("Snapshot links and special files are unsupported.");if(q>("snapshot-manifest.json"===u?8388608:b)||v&&0!==q)throw Error("Snapshot file exceeds the restore size limit.");if((p+=q)>c+8388608)throw Error("Snapshot exceeds the restore size limit.");let z=e.readUInt32LE(42);if(z+30>j)throw k();let A=await a.read(z,30);if(0x4034b50!==A.readUInt32LE(0)||A.readUInt16LE(6)!==f||A.readUInt16LE(8)!==h||A.readUInt16LE(26)!==r)throw k();let B=z+30+r+A.readUInt16LE(28);if(B+i>j||!(await a.read(z+30,r)).equals(t))throw k();let C=e.readUInt32LE(16);if(!(8&f)&&(A.readUInt32LE(14)!==C||A.readUInt32LE(18)!==i||A.readUInt32LE(22)!==q))throw k();let D=B+i;if(8&f){if(D+12>j)throw k();let b=0x8074b50===(await a.read(D,4)).readUInt32LE(0),c=await a.read(D+4*!!b,12);if(c.readUInt32LE(0)!==C||c.readUInt32LE(4)!==i||c.readUInt32LE(8)!==q||(D+=b?16:12)>j)throw k()}n.push({start:z,end:D}),m.push({name:u,directory:v,size:q,mode:x,crc:C,method:h,offset:B,compressed:i}),o=s}if(o!==g)throw k();n.sort((a,b)=>a.start-b.start);for(let a=1;a<n.length;a++)if(n[a].start<n[a-1].end)throw k();for(let a of m){let b=d(a.name,a.directory).split("/");for(let a=1;a<b.length;a++)if(!1===l.get(b.slice(0,a).join("/").normalize("NFC").toLowerCase()))throw Error("Snapshot contains a file/directory path conflict.")}return m}async function*n(a,b){let c=i.Readable.from(a.range(b.offset,b.compressed),{objectMode:!1,highWaterMark:65536}),d=8===b.method?(0,j.createInflateRaw)():void 0,e=d?c.pipe(d):c;e!==c&&c.on("error",a=>e.destroy(a));let f=0,g=0xffffffff;try{for await(let a of e){let c=Buffer.isBuffer(a)?a:Buffer.from(a);if((f+=c.length)>b.size)throw k();for(let a of c)g=g>>>8^l[(g^a)&255];yield c}if(f!==b.size||(0xffffffff^g)>>>0!==b.crc||d&&d.bytesWritten!==b.compressed)throw k()}finally{c.destroy(),e.destroy()}}var o=c(176760),p=c.n(o),q=c(739006),r=c(134887),s=c(930100),t=c(851018),u=c(907986),v=c(719031),w=c(472178),x=c(620775),y=c(683843),z=c(580940);let A="snapshot-manifest.json",B=".flujo-worker-snapshot.json",C=/^[a-f0-9]{64}$/;function D(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function E(a,b){try{return JSON.parse(a)}catch{throw Error(b)}}function F(a,b=!1){let c=b?a.replace(/\/$/,""):a,d=c.split("/");if(!c||c.includes("\\")||c.includes("\0")||d.some(a=>!a||"."===a||".."===a||a.includes(":")||/[. ]$/.test(a)||/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i.test(a)))throw Error("Snapshot contains an unsafe archive path.");if(c!==A&&".workspace.json"!==c&&!u.WORKSPACE_SUBTREES.includes(d[0]))throw Error("Snapshot contains a file outside the supported workspace roots.");if(b&&(c===A||".workspace.json"===c))throw Error("Snapshot metadata must be a file.");if(!b&&u.WORKSPACE_SUBTREES.includes(c))throw Error("Snapshot workspace roots must be directories.");return c}async function G(a,b=!1){b&&await d.promises.mkdir(a,{recursive:!0,mode:448});let c=await d.promises.lstat(a);if(!c.isDirectory()||c.isSymbolicLink())throw Error("Worker restore destination must be a plain directory.")}async function H(a){try{return await d.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function I(a){await G(a);let b=await d.promises.readdir(a,{withFileTypes:!0});for(let c of b)if(!u.WORKSPACE_SUBTREES.includes(c.name)||!c.isDirectory()||c.isSymbolicLink()||0!==(await d.promises.readdir(p().join(a,c.name))).length)throw Error("Worker snapshot restore refuses to overwrite an existing workspace.");for(let c of b)await d.promises.rmdir(p().join(a,c.name));await d.promises.rmdir(a)}async function J(a,b=(0,u.getWorkspaceDir)(a.workspace)){if("chatgpt"!==a.codexAuth)return;let c=p().join(b,"db","codex-runtime"),f=[];for(let a of["auth.json","flujo-auth-source.json"]){let g=await d.promises.lstat(p().join(c,a),{bigint:!0});if(!g.isFile()||g.isSymbolicLink()||g.nlink>BigInt(1)||g.size>BigInt(1048576))throw Error("Worker Codex authentication is not a valid workspace credential file.");let h=p().join(c,a);f.push(await (0,e.b)(h,{expected:g,maxBytes:1048576,verifyPath:()=>(0,w.V$)(b,h)}))}let[g,h]=f,i=E(h.toString("utf8"),"Worker Codex authentication marker is invalid.");if(!(0,v.eK)(g)||!D(i)||1!==i.version||"workspace"!==i.source)throw Error("Worker Codex ChatGPT authentication is missing or invalid.")}async function K(a,b=(0,u.getWorkspaceDir)(a.workspace)){if("user"!==a.encryption)return null;let c=p().join(b,"db","worker-bootstrap-secrets.json"),f=await d.promises.lstat(c,{bigint:!0});if(!f.isFile()||f.isSymbolicLink()||f.nlink>BigInt(1)||f.size>BigInt(4096))throw Error("Worker workspace encryption requires valid bootstrap credentials.");if("win32"!==process.platform&&(f.mode&BigInt(63))!==BigInt(0))throw Error("Worker workspace encryption credentials must be owner-only.");let g=E((await (0,e.b)(c,{expected:f,maxBytes:4096,ownerOnly:!0,verifyPath:()=>(0,w.V$)(b,c)})).toString("utf8"),"Worker workspace encryption bootstrap credentials are invalid.");if(!D(g)||1!==g.version||"string"!=typeof g.workspaceDek||!(0,t.TE)(g.workspaceDek))throw Error("Worker workspace encryption bootstrap credentials are invalid.");return g.workspaceDek}async function L(a){if((0,u.getCurrentWorkspace)()!==a.workspace)throw Error("Worker encryption unlock workspace mismatch.");let b=await K(a);b&&await (0,s.SO)(b,{workspace:a.workspace,root:(0,u.getWorkspaceDir)(a.workspace)})}async function M(a,b){(0,z.Vv)({state:"restoring",archiveSha256:b,error:void 0});let c=(0,g.B5)(),i=c.maxFileBytes,j=c.maxUncompressedBytes,k=await (0,h.z)(a,process.env.FLUJO_WORKER_SNAPSHOT_KEY,c.maxArchiveBytes,b);try{let a=await m(k,i,j,F),c=a.find(a=>a.name===A&&!a.directory);if(!c)throw Error("Worker snapshot manifest is missing.");let g=[];for await(let a of n(k,c))g.push(a);let h=function(a){if(!D(a)||a.formatVersion!==y.nt||a.layoutVersion!==x.q||!1!==a.externalRootsIncluded||!D(a.source)||a.source.version!==q.rE||"string"!=typeof a.source.platform||!D(a.runtime)||!D(a.runtime.mcpTransfer)||1!==a.runtime.mcpTransfer.formatVersion||"string"!=typeof a.runtime.mcpTransfer.sourceWorkspaceRoot||!Array.isArray(a.runtime.mcpTransfer.servers)||!["chatgpt","none"].includes(a.runtime.codexAuth)||!["default","user"].includes(a.runtime.encryption)||!Array.isArray(a.files)||!Array.isArray(a.subtrees)||a.subtrees.length!==u.WORKSPACE_SUBTREES.length||u.WORKSPACE_SUBTREES.some(b=>!a.subtrees.includes(b)))throw Error("Snapshot format, FLUJO version, layout, or portable runtime metadata is incompatible.");return(0,u.assertValidWorkspaceName)(a.workspace),a}(E(Buffer.concat(g).toString("utf8"),"Worker snapshot manifest is invalid JSON.")),l={workspace:h.workspace,archiveSha256:b,mcpTransfer:h.runtime.mcpTransfer,codexAuth:h.runtime.codexAuth,encryption:h.runtime.encryption};(0,z.Vv)({workspace:l.workspace});let o=new Map,s=0;for(let a of h.files){if(!D(a)||"string"!=typeof a.path||a.path===A||!Number.isSafeInteger(a.size)||a.size<0||a.size>i||"string"!=typeof a.sha256||!C.test(a.sha256))throw Error("Invalid snapshot manifest member.");if(F(a.path),o.has(a.path))throw Error("Snapshot manifest has duplicate members.");if((s+=a.size)>j)throw Error("Snapshot manifest exceeds the restore size limit.");o.set(a.path,a)}for(let b of a){if(b.name===A)continue;let a=b.directory?void 0:o.get(b.name);if(!b.directory&&(!a||a.size!==b.size))throw Error("Snapshot archive does not match its manifest.");let c=(0,f.createHash)("sha256");for await(let a of n(k,b))c.update(a);if(a&&c.digest("hex")!==a.sha256)throw Error("Snapshot member integrity check failed.");b.directory||o.delete(b.name)}if(o.size)throw Error("Snapshot archive is missing a manifest member.");await G((0,r.ok)(),!0),await G((0,u.getWorkspacesDir)(),!0);let t=(0,u.getWorkspaceDir)(l.workspace);if((await d.promises.readdir((0,u.getWorkspacesDir)())).filter(a=>a.toLowerCase()===l.workspace.toLowerCase()).some(a=>a!==l.workspace))throw Error("Worker workspace has a case-alias conflict.");let v=await H(t);if(v){await G(t);let a=p().join(t,B);if(await H(a)){let c=await d.promises.lstat(a,{bigint:!0});if(!c.isFile()||c.isSymbolicLink()||c.nlink>BigInt(1)||c.size>BigInt(4096))throw Error("Invalid worker restore marker.");let f=E((await (0,e.b)(a,{expected:c,maxBytes:4096,verifyPath:()=>(0,w.V$)(t,a)})).toString("utf8"),"Worker restore marker is invalid.");if(!D(f)||1!==f.formatVersion||f.archiveSha256!==b||f.workspace!==l.workspace)throw Error("Worker snapshot does not match the existing workspace.");return await J(l),await K(l),l}}let L=await d.promises.mkdtemp(p().join((0,u.getWorkspacesDir)(),".worker-restore-")),M=!1;try{for(let a of(await d.promises.chmod(L,448),u.WORKSPACE_SUBTREES))await d.promises.mkdir(p().join(L,a),{mode:448});for(let b of a.filter(a=>a.directory))await d.promises.mkdir(p().join(L,...F(b.name,!0).split("/")),{recursive:!0,mode:448});for(let b of a){if(b.directory||b.name===A)continue;let a=p().join(L,...b.name.split("/"));await d.promises.mkdir(p().dirname(a),{recursive:!0,mode:448}),await (0,w.V$)(L,a);let c=await d.promises.open(a,"wx",73&b.mode?448:384);try{if(".workspace.json"===b.name)await c.writeFile('{"roots":[]}\n');else for await(let a of n(k,b))for(let b=0;b<a.length;){let{bytesWritten:d}=await c.write(a,b,a.length-b);if(!d)throw Error("Worker restore write made no progress.");b+=d}await c.sync()}finally{await c.close()}}if(await J(l,L),await K(l,L),await (0,w.sA)(L,p().join(L,B),Buffer.from(JSON.stringify({formatVersion:1,workspace:l.workspace,archiveSha256:b}))),v)await I(t);else if(await H(t))throw Error("Worker restore destination was created concurrently.");return await d.promises.rename(L,t),M=!0,await J(l),l}finally{M||await d.promises.rm(L,{recursive:!0,force:!0})}}finally{await k.close()}}function N(){if(!(0,z.ye)())return Promise.resolve(null);let a=process.env.FLUJO_WORKER_SNAPSHOT?.trim(),b=process.env.FLUJO_WORKER_SNAPSHOT_SHA256?.trim().toLowerCase();if(!a||!b||!C.test(b)||!p().isAbsolute(a)){let a="Worker mode requires an absolute FLUJO_WORKER_SNAPSHOT path and FLUJO_WORKER_SNAPSHOT_SHA256.";return(0,z.Vv)({state:"error",error:a}),Promise.reject(Error(a))}let c=(0,f.createHash)("sha256").update(process.env.FLUJO_WORKER_SNAPSHOT_KEY??"").digest("hex"),d=`${(0,u.getWorkspacesDir)()}\0${a}\0${b}\0${c}`;if(global.__flujo_worker_snapshot_restore?.key===d)return global.__flujo_worker_snapshot_restore.promise;let e=M(a,b).catch(a=>{throw(0,z.Vv)({state:"error",error:a instanceof Error?a.message:"Worker restore failed."}),global.__flujo_worker_snapshot_restore?.promise===e&&(global.__flujo_worker_snapshot_restore=void 0),a});return global.__flujo_worker_snapshot_restore={key:d,promise:e},e}},621385:(a,b,c)=>{c.d(b,{N:()=>o,z:()=>r});var d=c(973024),e=c(977598),f=c(848161),g=c(176760),h=c.n(g),i=c(186359);let j=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],k=(a,b)=>j.every(c=>a[c]===b[c]),l=()=>Error("Worker snapshot is unsafe or changed while being read.");async function m(a,b){for(let c=0;c<b.length;){let{bytesWritten:d}=await a.write(b,c,b.length-c);if(!d)throw l();c+=d}}async function n(a,b,c,d){let e=d?d.subarray(0,c):Buffer.alloc(c);if(e.length!==c)throw l();for(let d=0;d<c;){let{bytesRead:f}=await a.read(e,d,c-d,b+d);if(!f)throw l();d+=f}return e}class o{constructor(a,b){this.root=a,this.file=b,this.size=0,this.key=(0,e.randomBytes)(32),this.pending=Buffer.alloc(0),this.blocks=[],this.diskSize=0,this.sealed=Buffer.alloc(65564),this.readTail=Promise.resolve()}static async create(){let a=await d.promises.mkdtemp(h().join((0,f.tmpdir)(),"flujo-snapshot-input-"));try{return await d.promises.chmod(a,448),new o(a,await d.promises.open(h().join(a,"ciphertext"),"wx+",384))}catch(b){throw await d.promises.rm(a,{recursive:!0,force:!0}),b}}async append(a){this.size+=a.length;let b=this.pending.length?Buffer.concat([this.pending,a]):a;for(;b.length>=65536;)await this.seal(b.subarray(0,65536)),b=b.subarray(65536);this.pending=Buffer.from(b)}async seal(a){let b=(0,e.randomBytes)(12),c=(0,e.createCipheriv)("aes-256-gcm",this.key,b);c.setAAD(Buffer.from(`${this.blocks.length}:${a.length}`));let d=c.update(a),f=c.final();b.copy(this.sealed),c.getAuthTag().copy(this.sealed,12),d.copy(this.sealed,28),f.copy(this.sealed,28+d.length),await m(this.file,this.sealed.subarray(0,a.length+28)),this.blocks.push({offset:this.diskSize,length:a.length}),this.diskSize+=a.length+28}async finish(){this.pending.length&&await this.seal(this.pending),this.pending.fill(0),this.pending=Buffer.alloc(0),await this.file.sync()}async read(a,b){let c,d=this.readTail;this.readTail=new Promise(a=>{c=a}),await d;try{return await this.readOwned(a,b)}finally{c()}}async readOwned(a,b){if(!Number.isSafeInteger(a)||!Number.isSafeInteger(b)||a<0||b<0||a+b>this.size||b>8388608)throw l();let c=Buffer.alloc(b);for(let d=0;d<b;){let f=Math.floor((a+d)/65536),g=this.blocks[f];if(!g)throw l();if(this.cache?.index!==f){this.cache?.bytes.fill(0);let a=await n(this.file,g.offset,g.length+28,this.sealed),b=(0,e.createDecipheriv)("aes-256-gcm",this.key,a.subarray(0,12));b.setAAD(Buffer.from(`${f}:${g.length}`)),b.setAuthTag(a.subarray(12,28));let c=b.update(a.subarray(28)),d=b.final();this.cache={index:f,bytes:d.length?Buffer.concat([c,d]):c}}let h=(a+d)%65536,i=Math.min(b-d,g.length-h);this.cache.bytes.copy(c,d,h,h+i),d+=i}return c}async *range(a=0,b=this.size-a){for(let c=0;c<b;c+=65536)yield await this.read(a+c,Math.min(65536,b-c))}async close(){for(let a of(this.key.fill(0),this.pending.fill(0),this.cache?.bytes.fill(0),this.sealed.fill(0),[...await Promise.allSettled([this.file.close()]),...await Promise.allSettled([d.promises.rm(this.root,{recursive:!0,force:!0})])]))if("rejected"===a.status)throw a.reason}}class p{constructor(a,b){this.file=a,this.size=b,this.storage=Buffer.alloc(65536),this.buffer=Buffer.alloc(0),this.offset=0,this.position=0}async fill(){return this.offset<this.buffer.length||this.position!==this.size&&(this.buffer=await n(this.file,this.position,Math.min(65536,this.size-this.position),this.storage),this.position+=this.buffer.length,this.offset=0,!0)}async peek(){return await this.fill()?this.buffer[this.offset]:-1}async byte(){let a=await this.peek();return -1!==a&&this.offset++,a}async whitespace(){for(;[9,10,13,32].includes(await this.peek());)await this.byte()}async expect(a){if(await this.whitespace(),await this.byte()!==a)throw l()}async smallValue(){await this.whitespace();let a=[],b=await this.peek()===34;b&&a.push(await this.byte());let c=!1;for(;a.length<256;){let d=await this.peek();if(-1===d)throw l();if(!b&&[44,125,9,10,13,32].includes(d)||(a.push(await this.byte()),b&&34===d&&!c))break;c=92===d&&!c}if(256===a.length)throw l();try{return JSON.parse(Buffer.from(a).toString("utf8"))}catch{throw l()}}async data(a,b){await this.expect(34);let c="",d=!1,e=0,f=async f=>{if(!/^[A-Za-z0-9+/=]*$/.test(f)||d&&f.length)throw l();let g=(c+=f).length-c.length%4;if(!g)return;let h=c.slice(0,g);if(!/^[A-Za-z0-9+/]*={0,2}$/.test(h))throw l();let i=Buffer.from(h,"base64");if(i.toString("base64")!==h||(d=h.includes("="),(e+=i.length)>b))throw l();await m(a,i),c=c.slice(g)};for(;await this.fill();){let a=this.buffer.indexOf(34,this.offset),b=this.buffer.indexOf(92,this.offset),d=Math.min(a<0?this.buffer.length:a,b<0?this.buffer.length:b);if(await f(this.buffer.subarray(this.offset,d).toString("latin1")),this.offset=d,d===this.buffer.length)continue;if(34===await this.byte()){if(c.length)throw l();return e}let g=await this.byte();if(117===g){let a="";for(let b=0;b<4;b++){let b=await this.byte();if(b<0)throw l();a+=String.fromCharCode(b)}if(!/^[0-9a-fA-F]{4}$/.test(a))throw l();await f(String.fromCharCode(Number.parseInt(a,16)))}else{let a=new Map([[34,'"'],[92,"\\"],[47,"/"],[98,"\b"],[102,"\f"],[110,"\n"],[114,"\r"],[116," "]]).get(g);if(void 0===a)throw l();await f(a)}}throw l()}}function q(a,b){if("string"!=typeof a||a.length>64)throw l();let c=Buffer.from(a,"base64");if(c.length!==b||c.toString("base64")!==a)throw l();return c}async function r(a,b,c,g){let j,m,r,s,t=await d.promises.lstat(a,{bigint:!0}),u=void 0===b?c:4*Math.ceil(c/3)+4096;if(!t.isFile()||t.isSymbolicLink()||t.nlink!==BigInt(1)||t.size>BigInt(u))throw l();let v=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),w=!1,x=0,y=(0,e.createHash)("sha256");try{let u=j=await o.create();if(!k(t,await v.stat({bigint:!0}))||!k(t,await d.promises.lstat(a,{bigint:!0})))throw l();let z=Buffer.alloc(65536);for(let a=0;a<Number(t.size);a+=65536)y.update(await n(v,a,Math.min(65536,Number(t.size)-a),z));let A=(0,e.createHash)("sha256"),B=async a=>{if(u.size+a.length>c)throw l();A.update(a),await u.append(a)};if(void 0!==b)try{s=q(b,32),m=await d.promises.mkdtemp(h().join((0,f.tmpdir)(),"flujo-snapshot-envelope-")),await d.promises.chmod(m,448),r=await d.promises.open(h().join(m,"ciphertext"),"wx+",384);let a=new p(v,Number(t.size)),g=new Map,j=-1;for(await a.expect(123);;){let b=await a.smallValue();if("string"!=typeof b||!["format","version","iv","tag","data"].includes(b)||g.has(b))throw l();await a.expect(58),g.set(b,"data"===b||await a.smallValue()),"data"===b&&(j=await a.data(r,c)),await a.whitespace();let d=await a.byte();if(125===d)break;if(44!==d)throw l()}if(await a.whitespace(),await a.byte()!==-1||5!==g.size||"flujo-workspace-encrypted"!==g.get("format")||![1,2].includes(g.get("version"))||j<0)throw l();x=g.get("version");let k=(0,e.createDecipheriv)("aes-256-gcm",s,q(g.get("iv"),12));2===x&&k.setAAD(Buffer.from(i.fI.v2Aad)),k.setAuthTag(q(g.get("tag"),16));for(let a=0;a<j;a+=65536)await B(k.update(await n(r,a,Math.min(65536,j-a),z)));await B(k.final())}catch{throw Error("Worker snapshot decryption failed. Check the encrypted archive and its key.")}else for(let a=0;a<Number(t.size);a+=65536)await B(await n(v,a,Math.min(65536,Number(t.size)-a),z));let C=A.digest("hex");if((2===x?y.digest("hex"):C)!==g)throw Error("Worker snapshot SHA-256 mismatch.");if(!k(t,await v.stat({bigint:!0}))||!k(t,await d.promises.lstat(a,{bigint:!0})))throw l();return await u.finish(),w=!0,u}catch(a){throw await j?.close().catch(()=>void 0),a}finally{s?.fill(0);let a=await Promise.allSettled([v.close(),...r?[r.close()]:[]]),b=await Promise.allSettled(m?[d.promises.rm(m,{recursive:!0,force:!0})]:[]);if(w&&[...a,...b].some(a=>"rejected"===a.status))throw await j?.close().catch(()=>void 0),Error("Snapshot temporary storage could not be released.")}}},683843:(a,b,c)=>{c.d(b,{d1:()=>h,nt:()=>g});var d=c(739006),e=c(186359),f=c(620775);let g=2;function h(){let a=process.env.FLUJO_BUILD_REVISION;return{applicationVersion:d.rE,snapshotEncryption:{...e.fI,readVersions:[...e.fI.readVersions]},snapshotLimits:(0,e.B5)(),snapshotFormatVersion:g,layoutVersion:f.q,workerProtocolVersion:1,workerSnapshotSourceVersion:1,.../^[a-f0-9]{40}$/.test(a??"")?{revision:a}:{}}}},739006:a=>{a.exports={rE:"3.48.2"}}};
|
|
@@ -114,10 +114,10 @@ ${JSON.stringify(c)}`}),"[/MCP App model context]"].join("\n")}(b);if(!c)return
|
|
|
114
114
|
${k}`:k}function m(a){return j.has(a)}function n(){return[{name:e,description:'Control your own participation in the current meeting turn. Use "silent" when you have no useful public contribution; it immediately ends this turn and prevents further model or tool turns until the next meeting round. Use "leave" to leave after this turn. Normal final text is public speech.',inputSchema:{type:"object",properties:{action:{type:"string",enum:["silent","leave"],description:"The participation action to request."},reason:{type:"string",minLength:1,description:"Optional concise reason for the action."}},required:["action"],additionalProperties:!1}},{name:f,description:"Send a private note to one or more meeting participants. The coordinator delivers it only to the named recipients; it is not public speech.",inputSchema:{type:"object",properties:{to:{type:"array",minItems:1,uniqueItems:!0,items:{type:"string",minLength:1},description:"Participant ids or unambiguous participant names."},content:{type:"string",minLength:1,description:"The private note to deliver."}},required:["to","content"],additionalProperties:!1}},{name:g,description:"Propose a structured meeting motion: finish the meeting, cancel it, or create a follow-up. The coordinator decides when and how participants vote.",inputSchema:{type:"object",properties:{kind:{type:"string",enum:["finish","cancel","followup"],description:"The kind of motion to open."},proposal:{type:"string",minLength:1,description:"Optional concrete proposal, especially for a follow-up."},reason:{type:"string",minLength:1,description:"Optional concise rationale."}},required:["kind"],additionalProperties:!1}},{name:h,description:"Cast or replace your structured vote on an open meeting motion. Use the exact motion id supplied by the coordinator.",inputSchema:{type:"object",properties:{motionId:{type:"string",minLength:1,description:"The open motion id."},choice:{type:"string",enum:["yes","no","abstain"],description:"Your vote."},rationale:{type:"string",minLength:1,description:"Optional concise rationale."}},required:["motionId","choice"],additionalProperties:!1}},{name:i,description:"Ask the coordinator to schedule a temporary breakout discussion for selected participants after the current turn. This is a request, not an immediate nested execution.",inputSchema:{type:"object",properties:{participants:{type:"array",minItems:1,uniqueItems:!0,items:{type:"string",minLength:1},description:"Participant ids or unambiguous participant names for the breakout."},topic:{type:"string",minLength:1,description:"The focused question or task for the breakout."},maxRounds:{type:"integer",minimum:1,description:"Optional requested maximum number of breakout rounds."}},required:["participants","topic"],additionalProperties:!1}}]}function o(a){return!!a?.actions.some(a=>"control"===a.type&&"silent"===a.action)}function p(a,b){return a===e&&q(b)&&"silent"===b.action}function q(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}function r(a,b){let c="string"==typeof a?a.trim():"";return c?{value:c}:{error:`meeting tool requires a non-empty "${b}" string.`}}function s(a,b){return null==a?{}:"string"!=typeof a||0===a.trim().length?{error:`meeting tool "${b}" must be a non-empty string when provided.`}:{value:a.trim()}}function t(a,b){if(!Array.isArray(a)||0===a.length)return{error:`meeting tool requires a non-empty "${b}" array.`};let c=[],d=new Set;for(let e of a){if("string"!=typeof e||0===e.trim().length)return{error:`meeting tool "${b}" entries must be non-empty strings.`};let a=e.trim();d.has(a)||(d.add(a),c.push(a))}return{value:c}}function u(a){try{let{FlowExecutor:b}=c(945582);return b.conversationStates.get(a)}catch(b){d.warn("Could not resolve live SharedState for meeting action",{conversationId:a,error:b});return}}function v(a){return o(u(a)?.meetingTurn)}function w(a){let b=u(a);return!!(b?.meetingParticipant&&b.meetingTurn?.actions)}async function x(a,b,c){if(!c.conversationId)return{success:!1,error:"Meeting tools are not available outside a conversation."};let i=u(c.conversationId);if(!i?.meetingParticipant)return{success:!1,error:"Meeting tools are not available outside a meeting participant run."};if(!i.meetingTurn||!Array.isArray(i.meetingTurn.actions))return{success:!1,error:"Meeting tools require an active meeting turn."};if(o(i.meetingTurn))return{success:!1,error:"This meeting turn already ended silently. Wait for the next round before taking another action."};let j=function(a,b){if(!m(a))return{error:`Unknown meeting tool: ${a}.`};if(!q(b))return{error:`${a} requires an object argument.`};if(a===e){if("silent"!==b.action&&"leave"!==b.action)return{error:'meeting_control action must be "silent" or "leave".'};let a=s(b.reason,"reason");return"error"in a?a:{action:{type:"control",action:b.action,...a.value?{reason:a.value}:{}}}}if(a===f){let a=t(b.to,"to");if("error"in a)return a;let c=r(b.content,"content");return"error"in c?c:{action:{type:"private-message",to:a.value,content:c.value}}}if(a===g){if("finish"!==b.kind&&"cancel"!==b.kind&&"followup"!==b.kind)return{error:'meeting_propose_motion kind must be "finish", "cancel", or "followup".'};let a=s(b.proposal,"proposal");if("error"in a)return a;let c=s(b.reason,"reason");return"error"in c?c:{action:{type:"propose-motion",kind:b.kind,...a.value?{proposal:a.value}:{},...c.value?{reason:c.value}:{}}}}if(a===h){let a=r(b.motionId,"motionId");if("error"in a)return a;if("yes"!==b.choice&&"no"!==b.choice&&"abstain"!==b.choice)return{error:'meeting_cast_vote choice must be "yes", "no", or "abstain".'};let c=s(b.rationale,"rationale");return"error"in c?c:{action:{type:"cast-vote",motionId:a.value,choice:b.choice,...c.value?{rationale:c.value}:{}}}}let c=t(b.participants,"participants");if("error"in c)return c;let d=r(b.topic,"topic");return"error"in d?d:void 0!==b.maxRounds&&(!Number.isInteger(b.maxRounds)||b.maxRounds<1)?{error:"meeting_request_breakout maxRounds must be a positive integer when provided."}:{action:{type:"request-breakout",participants:c.value,topic:d.value,...void 0!==b.maxRounds?{maxRounds:b.maxRounds}:{}}}}(a,b);return"error"in j?{success:!1,error:j.error}:(i.meetingTurn.actions.push(j.action),d.debug("Recorded meeting action",{meetingId:i.meetingParticipant.meetingId,participantId:i.meetingParticipant.participantId,actionType:j.action.type}),{success:!0,data:{accepted:!0,actionType:j.action.type,..."control"===j.action.type&&"silent"===j.action.action?{turnEnded:!0}:{}}})}},550457:(a,b,c)=>{"use strict";c.d(b,{eh:()=>i,ru:()=>g});var d=c(482964),e=c(328461);let f=(0,d.h)("backend/services/scheduler/flowRunEventBus");function g(a){return"signal"===a.kind}class h{publish(a){if(0===this.listeners.size)return;let b=g(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(f.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{let b=c(a);null!==b&&("object"==typeof b||"function"==typeof b)&&"then"in b&&"function"==typeof b.then&&Promise.resolve(b).catch(a=>{f.warn("An asynchronous flow-run event listener threw:",a)})}catch(a){f.warn("A flow-run event listener threw:",a)}}async publishDurably(a){for(let b of[...this.listeners])await b(a)}subscribe(a){let b=(0,e.bindToCurrentWorkspace)(a);return this.listeners.add(b),()=>{this.listeners.delete(b)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function i(){let a=(0,e.getCurrentWorkspace)();if(a===e.DEFAULT_WORKSPACE)return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new h),global.__flujo_flow_run_event_bus;let b=global.__flujo_flow_run_event_buses_by_workspace??(global.__flujo_flow_run_event_buses_by_workspace=new Map),c=b.get(a);return c||(c=new h,b.set(a,c)),c}},560767:(a,b,c)=>{"use strict";async function d(a,b,c){if(0===a.length)return;let d=0,e=async()=>{for(;;){let b=d++;if(b>=a.length)return;await c(a[b])}},f=Math.min(Math.max(1,Math.floor(b)||1),a.length);await Promise.all(Array.from({length:f},()=>e()))}c.d(b,{P:()=>d})},561709:(a,b,c)=>{"use strict";c.d(b,{t:()=>k});var d=c(781630),e=c.n(d),f=c(455511),g=c(109035),h=c(402471),i=c(809676);let j=(0,c(482964).h)("backend/services/model/adapters/codexToolBridge");async function k(a,b,c=!1,d=!1){let l,m=(0,f.randomBytes)(16).toString("hex"),n=`/mcp/${m}`,o=e().createServer(async(e,f)=>{let k;if(!e.url||!e.url.startsWith(n))return void f.writeHead(404).end();let m=((k=new g.g({name:"flujo",version:"1.0.0"},{capabilities:{tools:{}},...b?{instructions:b}:{}})).setRequestHandler(i.gW,async()=>({tools:a.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema??{type:"object",properties:{}},...a.annotations?{annotations:a.annotations}:{}}))})),k.setRequestHandler(i.FT,async b=>{let e=a.find(a=>a.name===b.params.name);if(!e)return{content:[{type:"text",text:`Unknown tool: ${b.params.name}`}],isError:!0};try{let a=b.params._meta,f="string"==typeof a?.callId&&a.callId.trim()&&"string"==typeof a.threadId&&a.threadId.trim()?a.callId:void 0;return c&&f&&(d&&!l||l&&l!==a.threadId?f=void 0:l=a.threadId),await e.handler(b.params.arguments??{},c?f:void 0)}catch(a){return{content:[{type:"text",text:`Error: ${a instanceof Error?a.message:String(a)}`}],isError:!0}}}),k),o=new h.D({sessionIdGenerator:void 0,enableJsonResponse:!0});try{if(await m.connect(o),c&&"POST"===e.method){let a=[],b=0;for await(let c of e){let d=Buffer.isBuffer(c)?c:Buffer.from(c);if((b+=d.byteLength)>1048576)throw Error("Native tool request exceeds the bridge bound.");a.push(d)}let c=JSON.parse(Buffer.concat(a).toString("utf8"));if(!c||"object"!=typeof c||Array.isArray(c))throw Error("Invalid native tool request.");await o.handleRequest(e,f,c)}else await o.handleRequest(e,f)}catch(a){j.error("Codex tool-bridge request failed",a),f.headersSent||(f.writeHead(500,{"content-type":"application/json"}),f.end(JSON.stringify({error:"Internal bridge error."})))}finally{try{await o.close()}catch{}try{await m.close()}catch{}}});await new Promise((a,b)=>{o.once("error",b),o.listen(0,"127.0.0.1",()=>a())});let p=o.address();if(!p||"string"==typeof p)throw o.close(),Error("Codex tool bridge failed to bind a loopback port.");let q=`http://127.0.0.1:${p.port}${n}`;return j.debug("Codex tool bridge started",{port:p.port,toolCount:a.length}),{url:q,bindNativeThread:a=>{if(!c||"string"!=typeof a||!a.trim()||a.length>256||l&&l!==a)throw Error("Native Codex thread binding is unavailable.");l=a},close:()=>new Promise(a=>{o.closeAllConnections?.(),o.close(()=>a())})}}},566272:(a,b,c)=>{"use strict";c.d(b,{PF:()=>o,Qv:()=>k,Ui:()=>m,ae:()=>q,ij:()=>i,oH:()=>t});var d=c(130214),e=c(940110);function f(a){return"assistant"===a.role&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0}function g(a){let b=a.length-1;for(;b>=0;b--){let c=a[b];if(!("tool"===c.role||f(c)))break}let c=a.slice(b+1);return c.some(f)?c:[]}function h(a){let b=a.length;for(;b>0&&a[b-1].injected;)b--;return b===a.length?{base:a,injectedTail:[]}:{base:a.slice(0,b),injectedTail:a.slice(b)}}function i(a,b,c){let d;if(!b||"full-history"===b)return a;let{base:e,injectedTail:i}=h(a),j=e.filter(a=>"system"===a.role);if("isolated"===b)return[...j,{role:"user",content:c??"",id:"isolated-input",timestamp:0},...g(e),...i];let k=g(e),l=e.length-k.length,m=-1;for(let a=l-1;a>=0;a--)if("user"===e[a].role){m=a;break}if(-1===m)return a;for(let a=l-1;a>m;a--){let b=e[a];if("assistant"===b.role&&!f(b)){d=b;break}}return[...j,e[m],...d?[d]:[],...k,...i]}function j(a){return a.tool_calls.some(a=>"function"===a.type&&l(a.function.name))}function k(a,b){if(0===b.size)return a;let{base:c}=h(a),d=c.length-g(c).length,e=Array(d).fill(!1);for(let b=0;b<d;){let c=a[b].processNodeId,g=b;for(;g<d&&a[g].processNodeId===c;)g++;let h=!1;if(c)for(let c=b;c<g;c++){let b=a[c];if("assistant"===b.role&&n(b)&&(!f(b)||j(b))){h=!0;break}}for(let a=b;a<g;a++)e[a]=h;b=g}let i=new Set,k=[],l=!1;for(let c=0;c<a.length;c++){let g=a[c];if(c<d){if(f(g)&&g.processNodeId&&b.has(g.processNodeId)&&e[c]){for(let a of g.tool_calls)i.add(a.id);if(l=!0,j(g)&&n(g)){let{tool_calls:a,...b}=g;k.push(b)}continue}if("tool"===g.role&&g.tool_call_id&&i.has(g.tool_call_id)){l=!0;continue}}k.push(g)}return l?k:a}function l(a){return"handoff"===a||a.startsWith("handoff_to_")}function m(a,b){return[b,...a.filter(a=>"system"!==a.role)]}function n(a){return"string"==typeof a.content?a.content.trim().length>0:!!Array.isArray(a.content)&&a.content.length>0}function o(a){let b=new Set;for(let c of a)if("assistant"===c.role&&Array.isArray(c.tool_calls))for(let a of c.tool_calls)"function"===a.type&&l(a.function.name)&&b.add(a.id);let c=[];for(let d of a)if(("user"!==d.role||"string"!=typeof d.content||"The handoff was successful. Continue"!==d.content.trim())&&!("tool"===d.role&&d.tool_call_id&&b.has(d.tool_call_id))){if("assistant"===d.role&&Array.isArray(d.tool_calls)&&d.tool_calls.some(a=>"function"===a.type&&l(a.function.name))){let a=(0,e.n_)(d.tool_calls).filter(a=>!("function"===a.type&&l(a.function.name)));if(a.length>0)c.push({...d,tool_calls:a});else if(n(d)){let{tool_calls:a,...b}=d;c.push(b)}continue}c.push(d)}return c}function p(a,b){let c=Array.isArray(a)?a.map(a=>({...a})):a?[{type:"text",text:a}]:[],e=new Set(c.map(a=>{let b=a.image_url??a.audio_url??a.video_url??a.file;return`${String(a.type??"")}|${JSON.stringify(b??"")}`})),f=["[Available generated artifacts]",...b.map((a,b)=>{let c=a.name?.trim()||`${a.type} ${b+1}`,d=a.mimeType?` (${a.mimeType})`:"";return a.localPath?`- ${c}${d}: ${a.localPath}`:a.resourceUri?`- ${c}${d}: ${a.resourceUri} (use read_resource to obtain a host-local path)`:a.url&&!a.url.startsWith("data:")?`- ${c}${d}: ${a.url}`:`- ${c}${d}: attached media`})].join("\n"),g=[...c].reverse().find(a=>"text"===a.type&&"string"==typeof a.text),h="string"==typeof g?.text?g.text:void 0;for(let a of(g&&h&&!h.includes(f)?g.text=`${h}
|
|
115
115
|
|
|
116
116
|
${f}`:g||c.push({type:"text",text:f}),b)){let b=function(a){let b=a.resourceUri??(0,d.C)(a);if(b)return"image"===a.type?{type:"image_url",image_url:{url:b}}:"audio"===a.type?{type:"audio_url",audio_url:{url:b,...a.mimeType?{mime_type:a.mimeType}:{}}}:"video"===a.type?{type:"video_url",video_url:{url:b,...a.mimeType?{mime_type:a.mimeType}:{}}}:{type:"file",file:{file_data:b,...a.name?{filename:a.name}:{},...a.mimeType?{mime_type:a.mimeType}:{}}}}(a);if(!b)continue;let f=b.image_url??b.audio_url??b.video_url??b.file,g=`${String(b.type??"")}|${JSON.stringify(f??"")}`;e.has(g)||(e.add(g),c.push(b))}return c}function q(a,b=!1){let c=[],d=[],e=()=>{0!==d.length&&(c.push({role:"user",content:p("[Media produced in the preceding turn]",d)}),d=[])};for(let f of o(a)){let{id:a,timestamp:g,disabled:h,processNodeId:i,depth:j,usage:k,contextUsage:l,injected:m,agentMessage:n,media:o,providerMetadata:q,...r}=f,s=b&&q?{...r,providerMetadata:q}:r;if("tool"===s.role){o?.length&&d.push(...o),c.push(s);continue}if("assistant"===s.role){if(e(),Array.isArray(s.content)){let a=s.content.filter(a=>!!a&&"text"===a.type).map(a=>a.text).join("");c.push({...s,content:a||null})}else c.push(s);o?.length&&d.push(...o);continue}if("user"===s.role&&d.length>0){c.push({...s,content:p(s.content,d)}),d=[];continue}c.push(s)}return e(),c}function r(a){return"string"==typeof a.content&&a.content.length>4e3?{...a,content:`${a.content.slice(0,4e3)}
|
|
117
|
-
…[truncated ${a.content.length-4e3} chars]`}:a}function s(a){let b=new Set;for(let c of a)c.id&&b.add(c.id);return b}function t(a){let{threaded:b,foldedView:c,scopedView:d,systemContent:e,inputMode:f}=a,g=o(d),h=s(c),i=s(d),j=s(g),k=[],l=0,m=0,n=0,p=0;for(let a of b){let b={id:a.id,role:a.role,status:"sent",preview:function(a){if("string"==typeof a.content)return a.content.slice(0,300);if(Array.isArray(a.content))try{return JSON.stringify(a.content).slice(0,300)}catch{}return""}(a),toolCallNames:function(a){if("assistant"===a.role&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0){let b=a.tool_calls.map(a=>"function"===a.type?a.function.name:void 0).filter(a=>!!a);return b.length>0?b:void 0}}(a)};"system"===a.role?b.status="system":a.id&&j.has(a.id)?(b.status="sent",l++):a.id&&i.has(a.id)?(b.status="handoff-stripped",b.reason='Removed as FLUJO handoff plumbing (handoff tool-call / result, or synthetic "Continue").',p++):a.id&&h.has(a.id)?(b.status="scoped-out",b.reason=`Outside this node's input scope (inputMode: ${f??"full-history"}).`,n++):(b.status="folded",b.reason="Settled tool exchange folded away (a node with outputMode: latest-message).",m++),k.push(b)}return{systemMessage:null!=e?{content:e}:null,wireMessages:g.map(r),provenance:k,counts:{threaded:b.length,sent:l,folded:m,scopedOut:n,handoffStripped:p},inputMode:f}}},578615:(a,b,c)=>{"use strict";c.r(b),c.d(b,{loadServerConfigs:()=>q,loadServerRoots:()=>r,saveConfig:()=>t});var d=c(333873),e=c.n(d),f=c(881951),g=c(624788),h=c(621030),i=c(482964),j=c(328461),k=c(296951);let l=(0,i.h)("backend/services/mcp/config"),m=new Set(["streamable","sse","websocket"]),n=new Map;async function o(a){if(n.has(a))return n.get(a);let b=null;try{let c=(0,f.Lp)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return n.set(a,b),b}async function p(a){var b;let c;if(m.has(a.transport))return{type:"remote"};let d="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getWorkspaceDataDir)(),b);if(d&&""!==(c=e().relative(e().join((0,j.getWorkspaceDataDir)(),"mcp-servers"),d))&&!c.startsWith("..")&&!e().isAbsolute(c)){let a=await o(d);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function q(){l.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Zg.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=(0,k.H6)(b.transport),d=a=>"string"==typeof a?(0,j.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"):void 0,e=a=>Array.isArray(a)?a.map(d).filter(a=>void 0!==a):void 0,f=a=>{if(!a||"object"!=typeof a||Array.isArray(a))return;let b={};for(let[c,e]of Object.entries(a)){if("string"==typeof e){b[c]=d(e)??e;continue}e&&"object"==typeof e&&"value"in e&&"string"==typeof e.value&&"metadata"in e&&e.metadata&&"object"==typeof e.metadata&&"isSecret"in e.metadata&&"boolean"==typeof e.metadata.isSecret&&(b[c]={value:d(e.value)??e.value,metadata:{isSecret:e.metadata.isSecret}})}return b},g=b.launch,h=g&&"object"==typeof g?{...g,command:d(g.command),cwd:d(g.cwd),args:e(g.args),env:f(g.env)}:void 0;b={...b,transport:c,rootPath:d(b.rootPath),cwd:d(b.cwd),command:d(b.command),args:e(b.args),roots:e(b.roots),env:f(b.env),...Object.prototype.hasOwnProperty.call(b,"launch")?{launch:h}:{}},m.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(l.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let i=b.source?.type;"stdio"===c&&"string"==typeof b.rootPath&&"."===b.rootPath.trim()&&("registry"===i||"marketplace"===i)&&/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.test(a)&&(l.info(`Normalizing shared Registry rootPath "." of ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let n={name:a,disabled:!1,rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...n,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...n,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...n,...b,name:a,websocketUrl:b.websocketUrl||""}:{...n,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await p(a))})),b}catch(a){if(a instanceof k.UQ)return l.warn("Stored MCP transport is invalid"),{success:!1,error:a.message,statusCode:400};return l.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function r(a){let b=await q();if(!Array.isArray(b))return[];let c=b.find(b=>b.name===a)?.roots;return Array.isArray(c)?c.filter(a=>"string"==typeof a):[]}let s=["_buildCommand","_installCommand","oauthClientId","oauthClientSecret"];async function t(a){l.debug("Entering saveConfig method");try{for(let b of a.values())(0,k.SL)(b);let b=Object.fromEntries(Array.from(a.entries()).map(([a,b])=>[a,function(a){let{name:b,...c}=a,d={};for(let[a,b]of Object.entries(c))void 0!==b&&(""===b&&s.includes(a)||(d[a]=b));return d}(b)]));return await (0,g.VH)(h.Zg.MCP_SERVERS,b),{success:!0}}catch(a){if(a instanceof k.UQ)return l.warn("MCP transport is invalid"),{success:!1,error:a.message,statusCode:400};return l.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}},580118:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>h,Rn:()=>i,b4:()=>j});var d=c(482964),e=c(943990);let f=(0,d.h)("backend/services/model/mediaHandoff");function g(a){return null===a||"object"!=typeof a||Array.isArray(a)?void 0:a}async function h(a,b){let c=!1,d=await Promise.all(a.map(async a=>{if(!a.resourceUri?.startsWith("flujo://run/"))return a;let d=()=>(0,e.QT)(a.resourceUri),f=b?await b(d):await d();if(f===a.localPath)return a;c=!0;let{localPath:g,...h}=a;return f?{...h,localPath:f}:h}));return c?d:a}function i(a,b){if(!b?.length)return a;let c=new Set(b.map(a=>a.toLowerCase()));return c.has("vision")&&c.add("image"),(c.has("document")||c.has("pdf"))&&c.add("file"),a.map(a=>{if(!Array.isArray(a.content))return a;let b=a.content.filter(a=>{let b="image_url"===a.type||"input_image"===a.type?"image":"audio_url"===a.type||"input_audio"===a.type?"audio":"video_url"===a.type||"input_video"===a.type?"video":"file"===a.type||"input_file"===a.type?"file":void 0;return!b||c.has(b)});return b.length===a.content.length?a:{...a,content:b}})}async function j(a,b,c={}){return Promise.all(a.map(async a=>{if(!Array.isArray(a.content))return a;let d=await Promise.all(a.content.map(async a=>{let d=function(a){if("image_url"===a.type){let b=g(a.image_url)?.url;return"string"==typeof b?b:void 0}if("audio_url"===a.type){let b=g(a.audio_url)?.url;return"string"==typeof b?b:void 0}if("video_url"===a.type){let b=g(a.video_url)?.url;return"string"==typeof b?b:void 0}if("file"===a.type||"input_file"===a.type){let b=g(a.file)??a,c=b.file_data??b.file_url??b.url;return"string"==typeof c?c:void 0}}(a);if(!d?.startsWith("flujo://run/"))return a;let h=null;try{let a=()=>(0,e.gy)(d,{at:Date.now(),source:"node",nodeId:b});h=c.commitDurableMutation?await c.commitDurableMutation(a):await a()}catch(a){if(a?.code==="flow_execution_authority_lost")throw a;f.warn(`Failed to read media run resource ${d}; sending a placeholder instead`,a)}let i=h?.contents.contents[0],j=i&&"string"==typeof i.blob?i.blob:void 0;if(!h||!j)return f.warn(`Media run resource is unavailable, degrading to a text note: ${d}`),{type:"text",text:`[media attachment unavailable — its stored payload (${d}) could not be read; it may have passed the run-resource retention window]`};let k=i.mimeType??h.entry.mimeType??"application/octet-stream";return function(a,b,c,d,e){if("image_url"===a.type)return{...a,image_url:{...g(a.image_url),url:b}};if("video_url"===a.type)return{...a,video_url:{...g(a.video_url),url:b,mime_type:c}};if("audio_url"===a.type){let f="audio/mpeg"===c?"mp3":"audio/wav"===c||"audio/x-wav"===c?"wav":void 0;return f?{type:"input_audio",input_audio:{data:d,format:f}}:e?{type:"text",text:`[${c} audio attachment is available as an artifact but this OpenAI input channel accepts only MP3 or WAV]`}:{...a,audio_url:{...g(a.audio_url),url:b,mime_type:c}}}return"file"===a.type||"input_file"===a.type?{type:"file",file:{...g(a.file)??a,file_data:b,mime_type:c}}:a}(a,`data:${k};base64,${j}`,k,j,!0===c.strictOpenAiAudioFormats)}));return{...a,content:d}}))}},584861:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{McpRuntimeAuthorityRetirementError:()=>as,assertMcpRuntimeAuthorityRetired:()=>X,attachShippedWorkspaceReadiness:()=>aj,capabilityKey:()=>U,clientProtectedConfigFingerprint:()=>T,createNewClient:()=>af,createStdioTransport:()=>ak,createTransport:()=>ag,flattenCustomHeaders:()=>aa,getUnderlyingTransport:()=>$,httpConfigKey:()=>ae,isolatedStdioRuntime:()=>ah,protectedConfigFingerprint:()=>S,resolveConfigHeaders:()=>_,resolveStdioLaunch:()=>ai,retireMcpRuntimeAuthority:()=>Z,safelyCloseClient:()=>am,shouldRecreateClient:()=>al,stdioConfigKey:()=>ad});var e=c(275424),f=c(894603),g=c(959654),h=c(687720),i=c(508488),j=c(646460),k=c(405087),l=c(200797),m=c(240505),n=c(302292),o=c(671675),p=c(231318),q=c(629021),r=c(333873),s=c(321820),t=c(977598),u=c(883191),v=c(482964),w=c(296951),x=c(687161),y=c(510217),z=c(826652),A=c(298683),B=c(230314),C=c(193640),D=c(533102),E=c(328461),F=c(84022),G=c(989031),H=c(868644),I=c(622838),J=c(749976),K=c(618836),L=c(471533),M=c(845157),N=c(216085),O=c(214799),P=c(378591),Q=c(589193),R=a([I]);I=(R.then?(await R)():R)[0];let an=globalThis,ao=an.__flujoProtectedConfigFingerprintKey??=(0,t.randomBytes)(32);function S(a){return(0,t.createHmac)("sha256",ao).update(JSON.stringify(a)).digest("hex")}function T(a){return a.__flujoProtectedConfigFingerprint}function U(a){return[(0,I.PP)(a),(0,J.NJ)(a),!0===a.enableMcpApps?"mcp-apps:on":"mcp-apps:off",!0===a.enableMcpSkills?"mcp-skills:on":"mcp-skills:off"].join("|")}let ap=Symbol.for("FLUJO:mcp-authority-retirement-errors:v1"),aq=Object.getOwnPropertyDescriptor(globalThis,ap);if(aq&&(!("value"in aq)||aq.configurable||aq.writable||!(aq.value instanceof WeakSet)))throw Error("MCP retirement error provenance refused.");let ar=aq?.value??new WeakSet;aq||Object.defineProperty(globalThis,ap,{value:ar,writable:!1,configurable:!1,enumerable:!1});class as extends AggregateError{constructor(a,b,c){super(a,b,c),WeakSet.prototype.add.call(ar,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(ar,a)}}function V(){return globalThis.__flujo_mcp_authority_retirement_quarantines??=new Map}function W(a,b=(0,E.getCurrentWorkspace)()){return`${b}\0${a}`}function X(a){let b=V().get(W(a));if(b)throw b.error}function Y(a,b,c,d){let e=V(),f=W(a,b);d?e.set(f,{owner:c,error:d}):e.get(f)?.owner===c&&e.delete(f)}function Z(a,b,c,d){let f=[];try{c&&(0,e.p9)(c)}catch(a){f.push(a)}try{(0,P.tS)(d?.leaseId)}catch(a){f.push(a)}if(f.length){let e=new as(f,"MCP runtime authority retirement failed.",{cause:f[0]});throw Y(a,b,c??d,e),e}Y(a,b,c??d)}function $(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}let at=(0,v.h)("backend/services/mcp/connection");async function _(a){let b=a;if(a.env&&"object"==typeof a.env){let c=new Map;for(let[b,d]of Object.entries(a.env)){if(!(0,M.dR)(b))continue;let a=(0,M.ff)(d);if(!a||(0,L.uh)(a))continue;let e=await (0,K.G)(a);e&&c.set(b,e)}b={...b,env:(0,M.ln)(c)}}if("streamable"!==a.transport&&"sse"!==a.transport||!a.headers||"object"!=typeof a.headers)return b;let c=new Map;for(let[b,d]of Object.entries(a.headers)){if(!(0,M.pI)(b))continue;let a=(0,M.ff)(d);if(!a||(0,L.uh)(a))continue;let e=await (0,K.G)(a);e&&c.set(b,e)}return{...b,headers:(0,M.ln)(c)}}function aa(a){let b=new Map;for(let[c,d]of Object.entries(a)){if(!(0,M.pI)(c))continue;let a=(0,M.ff)(d);"string"==typeof a&&a.length>0&&b.set(c,a)}return(0,M.ln)(b)}function ab(a){let b=new Map;if(a)for(let[c,d]of Object.entries(a)){if(!(0,M.dR)(c))continue;let a=(0,M.ff)(d);void 0!==a&&b.set(c,a)}return(0,M.ln)(b)}let au=new Set(["path","pathext","home","userprofile","homedrive","homepath","appdata","localappdata","programdata","xdg_config_home","xdg_cache_home","xdg_data_home","xdg_state_home","xdg_runtime_dir","tmp","temp","tmpdir","shell","comspec","systemroot","windir","systemdrive","programfiles","programfiles(x86)","gh_config_dir"]);function ac(a,b,c){for(let c of Object.keys(a))c.toLowerCase()===b.toLowerCase()&&delete a[c];void 0!==c&&(a[b]=c)}function ad(a,b=!1){return JSON.stringify({command:a.command,args:a.args??[],env:ab(a.env),cwd:String(a.cwd??""),rootPath:a.rootPath??"",isolateRuntimeHome:b,isolation:a.isolation,trustedHost:a.trustedHost})}function ae(a){return JSON.stringify({transport:a.transport,url:a.serverUrl??"",headers:a.headers??{},requestInit:a.requestInit??{},eventSourceInit:a.eventSourceInit??{},reconnectionOptions:a.reconnectionOptions??{},sessionId:a.sessionId??"",oauthClientId:a.oauthClientId??"",oauthIssuer:a.oauthIssuer??"",oauthClientInformation:a.oauthClientInformation??{},oauthClientSecret:a.oauthClientSecret??"",oauthTokens:a.oauthTokens??{}})}function af(a){if(at.debug("Entering createNewClient method"),(0,l.isProtectedExecutionServer)(a.name)){(0,l.assertExecutionServerConfig)(a);let b=new f.tI({name:`flujo-${a.name}-client`,version:"3.48.1"},{capabilities:{}});return b.__flujoCapKey=U(a),Object.defineProperty(b,"__flujoProtectedConfigFingerprint",{value:S(a),enumerable:!1}),b}let b=(0,I.jV)(a),c=(0,J.fy)(a),d=!0===a.enableMcpApps,e="stdio"===a.transport&&void 0===a.isolation,g=new f.tI({name:`flujo-${a.name}-client`,version:"3.48.1"},{capabilities:{experimental:{},roots:{listChanged:!0},...b?{sampling:{}}:{},...e||c?{elicitation:{...e?{url:{}}:{},...c?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[x.ET]:{}}:{},...e?{[O.OM]:O.XC}:{},...d?{[N.OF]:{mimeTypes:[N.cM]}}:{}}}});return(0,H.FP)(g,a),b&&(0,I.LE)(g,a),(e||c)&&(0,J.n4)(g,a),g.__flujoCapKey=U(a),g}function ag(a,b){if((0,w.SL)(a),at.debug("Entering createTransport method"),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new g.Bk("ISOLATION_POLICY_INVALID");if("streamable"===a.transport){at.info(`Creating streamable http transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.headers&&"object"==typeof a.headers){let c=aa(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},at.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}if(a.oauthClientId||a.oauthClientInformation){at.info(`Setting up OAuth authentication for ${a.name}`);let c=(0,y.Cl)(a);b.authProvider=c,b.fetch=c.oauthFetch,a.oauthTokens?at.debug(`OAuth provider configured for ${a.name} with existing tokens`):at.debug(`OAuth provider configured for ${a.name} - will initiate OAuth flow if needed`)}else at.debug(`No OAuth configuration found for ${a.name}`);let c=new o.j(new URL(a.serverUrl),b);return c.__flujoHttpKey=ae(a),c}if("sse"===a.transport){at.info(`Creating legacy sse transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit),a.headers&&"object"==typeof a.headers){let c=aa(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},at.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}let c=new p.A(new URL(a.serverUrl),b);return c.__flujoHttpKey=ae(a),c}return"websocket"===a.transport?(at.info(`Creating WebSocket transport for server ${a.name} with URL ${a.websocketUrl}`),new n.I(new URL(a.websocketUrl))):ak(a,b)}function ah(a){let b=(0,E.getWorkspaceDataDir)(),c=(0,t.createHash)("sha256").update(a,"utf8").digest("hex").slice(0,24),d=new u.V(b),e=b;for(let a of["userdata","mcp-runtime",c])e=r.join(e,a),d.admit(e,a===c);let f=e,g=r.join(f,"home"),h=r.join(f,"cwd");d.admit(g),d.admit(h);let i={appData:r.join(g,"AppData","Roaming"),localAppData:r.join(g,"AppData","Local"),config:r.join(g,".config"),cache:r.join(g,".cache"),data:r.join(g,".local","share"),state:r.join(g,".local","state"),runtime:r.join(g,".runtime"),temp:r.join(g,"tmp"),npm:r.join(g,".npm"),pip:r.join(g,".cache","pip"),uv:r.join(g,".cache","uv")};for(let a of Object.values(i)){let b=r.relative(g,a),c=g;for(let a of b.split(r.sep).filter(Boolean))c=r.join(c,a),d.admit(c)}let j={HOME:g,USERPROFILE:g,APPDATA:i.appData,LOCALAPPDATA:i.localAppData,XDG_CONFIG_HOME:i.config,XDG_CACHE_HOME:i.cache,XDG_DATA_HOME:i.data,XDG_STATE_HOME:i.state,XDG_RUNTIME_DIR:i.runtime,TMPDIR:i.temp,TMP:i.temp,TEMP:i.temp,NPM_CONFIG_CACHE:i.npm,PIP_CACHE_DIR:i.pip,UV_CACHE_DIR:i.uv,FLUJO_PARENT_DATA_DIR:(0,B.ok)(),FLUJO_DATA_DIR:b,FLUJO_WORKSPACE:(0,E.getCurrentWorkspace)()};if("win32"===process.platform){let a=r.parse(g);j.HOMEDRIVE=a.root.replace(/[\\/]$/,""),j.HOMEPATH=g.slice(a.root.length-1)}return d.verify(),{cwd:h,env:j}}function ai(a,b){if("stdio"!==a.transport)throw new w.UQ;if(void 0!==a.isolation){if(void 0!==a.trustedHost)throw new g.Bk("ISOLATION_POLICY_INVALID");let b=(0,k.O0)(a,ab(a.env)),{launch:c}=b;return{command:c.command,args:[...c.args],env:(0,k.H2)(c),cwd:c.cwd,isolation:b}}if((0,k.iw)(a),void 0!==a.trustedHost){let c=(0,h.FN)(a),d=(0,i.vb)(a),e=b?.isolateRuntimeHome===!0;if(e!==("isolated"===d.policy.runtimeHome))throw new i.Kq("HOST_POLICY_INVALID");if(e){let b=ah(a.name);if(d.policy.packageRunner&&r.resolve(a.cwd)!==r.resolve(b.cwd))throw new i.Kq("HOST_POLICY_INVALID");for(let[a,e]of Object.entries(b.env)){if(!d.policy.environmentNames.includes(a))throw new i.Kq("HOST_POLICY_INVALID");if(d.policy.packageRunner){let b=Object.entries(c.env).find(([b])=>b.toUpperCase()===a.toUpperCase())?.[1];if(b&&b!==e)throw new i.Kq("HOST_POLICY_INVALID")}c.env[a]=e}if(d.policy.packageRunner){let a=c.args.findIndex(a=>a.startsWith("--cache="));if(a<0)throw new i.Kq("HOST_POLICY_INVALID");c.args[a]=`--cache=${b.env.NPM_CONFIG_CACHE}`}}return at.debug("Transformed environment variable names",Object.keys(c.env)),c}let c=(0,F.AW)(a),d=!!c,e=c?.defaultName==="bash",f=a=>d?a:(0,E.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"),j=f(a.command),l=a.args?a.args.map(f):[],m=`${x.VL}/${a.name}`;at.info(`Creating stdio transport for server ${a.name}`),at.debug(`Original command: ${j}`),at.debug(`Original args: ${JSON.stringify(l)}`),at.debug(`Server directory: ${m}`);let n=!r.isAbsolute(j)&&(j.includes("/")||j.includes("\\")),o=!j.includes("/")&&!j.includes("\\");if(at.debug(`Is relative path: ${n}`),at.debug(`Is just filename: ${o}`),"win32"===s.platform()&&j.toLowerCase().endsWith(".bat"))if(at.debug(`Detected .bat file on Windows: ${j}`),o){let a=r.join((0,E.getWorkspaceDataDir)(),m,j);at.debug(`Checking if file exists at: ${a}`);let b=q.existsSync(a);at.debug(`File exists: ${b}`),b?(at.debug(`Using full path to .bat file: ${a}`),l=["/c",a,...l]):(at.warn(`WARNING: .bat file not found at ${a}`),l=["/c",j,...l]),j="cmd.exe"}else at.debug(`Using cmd.exe with path as provided: ${j}`),l=["/c",j,...l],j="cmd.exe";let p=(0,D.u)(j,{execPath:process.execPath,platform:s.platform(),dirname:r.dirname,joinPath:r.join,fileExists:q.existsSync});p!==j&&(at.debug(`Resolved Node toolchain command "${j}" to absolute path: ${p}`),j=p),at.debug(`Final command: ${j}`),at.debug(`Final args: ${JSON.stringify(l)}`);let t=e||b?.isolateRuntimeHome!==!0?void 0:ah(a.name),u=f((0,C.u)({command:a.command,args:a.args,rootPath:a.rootPath,cwd:a.cwd,serverName:a.name,defaultCwd:`${x.VL}/${a.name}`,packageRunnerCwd:t?.cwd})),v=r.isAbsolute(u)?u:r.join((0,E.getWorkspaceDataDir)(),u);at.debug(`cwd: ${v}`);let y=ab(a.env),z=e?function(a){let b={...a},c=Object.entries(process.env).filter(a=>"string"==typeof a[1]);for(let[a,d]of c)ac(b,a,d);for(let a of au)c.find(([b])=>b.toLowerCase()===a)||ac(b,a,void 0);return b}(y):y;if(!d)for(let[a,b]of Object.entries(z))z[a]=f(b);t&&Object.assign(z,t.env),function(a){if("win32"!==process.platform)return;let b=(a,b)=>Object.entries(a).find(([a,c])=>a.toLowerCase()===b.toLowerCase()&&""!==(c??"").trim())?.[1],c=b(process.env,"SystemRoot")??b(process.env,"windir")??"C:\\Windows";for(let[d,e]of Object.entries({SystemRoot:c,windir:c,ComSpec:b(process.env,"ComSpec")??r.join(c,"System32","cmd.exe"),PATHEXT:b(process.env,"PATHEXT")??".COM;.EXE;.BAT;.CMD"}))if(void 0===b(a,d)){for(let b of Object.keys(a))b.toLowerCase()===d.toLowerCase()&&delete a[b];a[d]=e}}(z);let A=(0,B.ok)(),G=(0,E.getWorkspaceDataDir)();if(z.FLUJO_PARENT_DATA_DIR=A,z.FLUJO_DATA_DIR=G,z.FLUJO_WORKSPACE=(0,E.getCurrentWorkspace)(),c?.defaultName==="browser"){if(!z.PLAYWRIGHT_BROWSERS_PATH?.trim()){let a=(0,F.AI)(process.env);a&&(z.PLAYWRIGHT_BROWSERS_PATH=a)}z.FLUJO_BROWSER_PROFILE_DIR=r.join(G,"browser-profile","trusted"),z.FLUJO_BROWSER_SCREENSHOT_DIR=r.join(G,"screenshots","browser"),z.FLUJO_BROWSER_RECORD_DIR=r.join(G,"recordings","browser")}for(let a of Object.keys(z))a.toUpperCase()===Q.wd&&delete z[a];at.verbose("Transformed environment variable names",JSON.stringify(Object.keys(z)));let H=(0,Q.hz)(a);return H&&(z[Q.wd]=H),"1"===process.env.FLUJO_WORKER_MODE&&c?.defaultName==="flujo"&&(z.FLUJO_WORKER_MODE="1",process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN&&(z.FLUJO_SNAPSHOT_CONTROL_TOKEN=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN)),{command:j,args:l,env:z,cwd:v}}function aj(a,b,c){let d=(0,F.AW)(b),e=(0,E.getWorkspaceDataDir)();if(!d||r.resolve(c)!==r.resolve(e,"mcp-servers",d.packageDirectory))return;let f=a.start.bind(a);a.start=async()=>{await (0,G._F)(e,void 0,[d.packageDirectory]),await f()}}function ak(a,b){let c,d,f;if(at.debug("Entering createStdioTransport method"),"stdio"!==a.transport)throw Error("Cannot create stdio transport for non-stdio config");let{command:g,args:i,env:l,cwd:n,isolation:o}=ai(a,b),p=(0,E.getCurrentWorkspace)(),q=()=>Z(a.name,p,d,c);at.info(`Creating StdioClientTransport for ${a.name} with stderr: 'pipe'`);try{X(a.name),d=(0,e.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,P.D9)(a.name):void 0;let p=d?(0,e.Uf)(a,d):{},r={command:g,args:i,env:{...l,...c?a.trustedHost?(0,h.s7)(a,c.env):c.env:{},...p},cwd:n,stderr:o?"ignore":"pipe",...o?{maxBufferSize:262144}:{}};o||(Object.freeze(r.args),Object.freeze(r.env),Object.freeze(r)),f=new m.oQ(r),o?(0,k.We)(f,a,o,q):a.trustedHost?(0,h.Zu)(f,a,q,d):(aj(f,a,n),(0,j.uR)(f,a,a=>JSON.stringify([ad(a,b?.isolateRuntimeHome===!0),U(a)])))}catch(b){let a=[];try{o?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new as([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}return c&&(f.__flujoRuntimeBrokerLeaseId=c.leaseId),f.__flujoBundledWorkload=d,f.__flujoRetireRuntimeAuthority=q,f.__flujoStdioKey=ad(a,b?.isolateRuntimeHome===!0),f.stderr?at.info(`Stderr stream is available for ${a.name}`):at.warn(`Stderr stream is NOT available for ${a.name}`),f}function al(a,b,c=!1,d){if(at.debug("Entering shouldRecreateClient method"),(0,z.wk)(a))return{needsNewClient:!0,reason:"Existing connection is closed"};if((a.__flujoCapKey??"")!==U(b))return{needsNewClient:!0,reason:"Client capabilities (sampling/elicitation/MCP Apps/Skills) changed"};let e=!0===a.__flujoBeta,f=c&&"websocket"!==b.transport;if(e!==f)return{needsNewClient:!0,reason:f?"Beta MCP protocol enabled":"Beta MCP protocol disabled"};if(e){let c=a.transport;if(!c||c.__flujoKind!==b.transport)return{needsNewClient:!0,reason:`Transport type changed to ${b.transport}`};if("stdio"===b.transport){if(c.__flujoStdioKey!==ad(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}else if(c.__flujoHttpKey!==ae(b))return{needsNewClient:!0,reason:`${b.transport} auth/connection parameters changed`};return{needsNewClient:!1}}if("websocket"===b.transport){if(!(a.transport instanceof n.I))return{needsNewClient:!0,reason:"Transport type changed to websocket"}}else if("streamable"===b.transport){if(!(a.transport instanceof o.j))return{needsNewClient:!0,reason:"Transport type changed to streamable"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"Streamable server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing streamable transport has no config key"};if(e!==ae(b))return{needsNewClient:!0,reason:"Streamable auth/connection parameters changed"}}else if("sse"===b.transport){if(!(a.transport instanceof p.A))return{needsNewClient:!0,reason:"Transport type changed to sse"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"SSE server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing sse transport has no config key"};if(e!==ae(b))return{needsNewClient:!0,reason:"SSE auth/connection parameters changed"}}else{if(!(a.transport instanceof m.oQ))return{needsNewClient:!0,reason:"Transport type changed to stdio"};if("stdio"!==b.transport)return{needsNewClient:!0,reason:"Transport type changed from stdio"};let c=a.transport.__flujoStdioKey;if(!c)return{needsNewClient:!0,reason:"Existing stdio transport has no config key"};if(c!==ad(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}return{needsNewClient:!1}}async function am(a,b,c,d){let f,g;at.debug("Entering safelyCloseClient method");let h=Date.now(),i=d?.gracePeriodMs??15e3,j=d?.killEscalationMs??5e3,l=!1,m=!1,n=$(a.transport),o=(0,k.Ck)(n),p=n?._process,q=p&&"function"==typeof p.kill?"owned":c&&"stdio"!==c.transport?"external":"unknown",r="none",s=[];try{if(p&&"function"==typeof p.kill&&(l=null!==p.exitCode||null!==p.signalCode,null===p.exitCode&&null===p.signalCode)){try{p.stdin&&!p.stdin.destroyed&&(p.stdin.end(),at.debug(`Closed stdin for graceful shutdown for ${b}`))}catch(a){at.warn(`Error closing stdin for ${b}:`,a)}if(l=await (null!==p.exitCode||null!==p.signalCode?Promise.resolve(!0):new Promise(a=>{let b=()=>{clearTimeout(c),a(!0)},c=setTimeout(()=>{p.removeListener("exit",b),a(!1)},i);c.unref?.(),p.once("exit",b)})))at.info(`Process exited gracefully for ${b}`);else{at.warn(`Process did not exit within ${i}ms after stdin close; escalating to a tree kill for ${b}`);let a=await (0,A.U)(p,{graceMs:j,finalWaitMs:j});l=a.exited,m=a.forced,l?at.warn(`Process tree for ${b} force-terminated after ${a.durationMs}ms`):at.error(`Process tree for ${b} (pid ${a.pid??"unknown"}) did not exit after forced escalation`)}}await a.close(),at.info(`Client closed successfully for ${b}`)}catch(a){r="close_failed",g=a,at.warn(`Error closing client for ${b}:`,a)}finally{try{f=o?.close()}catch(a){s.push(a)}let a=n?.__flujoRetireRuntimeAuthority;if(a)try{a()}catch(a){s.push(a)}else{try{let a=n?.__flujoBundledWorkload;a&&(0,e.p9)(a)}catch(a){s.push(a)}try{(0,P.tS)(n?.__flujoRuntimeBrokerLeaseId)}catch(a){s.push(a)}}}"owned"===q&&p&&(l||=null!==p.exitCode||null!==p.signalCode),f?.outcome==="unknown"&&(l=!1);let t="external"===q?"not_applicable":l?"observed_exit":"unknown";"unknown"===t&&"none"===r&&(r="exit_unobserved");let u={exited:l,forced:m,durationMs:Date.now()-h,processOwnership:q,exitOutcome:t,errorClassification:r,...o&&f?{isolation:{schemaVersion:1,generation:o.launch.generation,cleanupOutcome:f.outcome}}:{}};if(s.length){let a=void 0===g?s:[g,...s];throw Object.assign(new as(a,"MCP shutdown authority retirement failed.",{cause:a[0]}),{shutdownObservation:u})}return u}d()}catch(a){d(a)}})},585029:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{v:()=>o});var e=c(787951),f=c(482964),g=c(340653),h=c(3924),i=c(373327),j=c(146188),k=c(768680),l=c(748633),m=a([g,i]);[g,i]=m.then?(await m)():m;let n=(0,f.h)("backend/flow/execution/nodes/MCPNode");class o extends e.Yp{async prep(a,b){n.info("prep() started");let c=b?.id||"",d=b?.properties?.boundServer,e=b?.properties?.enabledTools||[],f=b?.properties?.roots||[];if(!d)throw n.error("Missing bound server"),Error("MCP node requires a bound server");return n.info("prep() completed",{mcpServer:d,enabledToolsCount:e.length,nodeRootsCount:f.length}),{nodeId:c,nodeType:"mcp",mcpServer:d,enabledTools:e,nodeRoots:f}}async execCore(a,b){n.info("execCore() started",{mcpServer:a.mcpServer}),n.verbose("execCore() prepResult",JSON.stringify(a));try{let b=await g.z.executeMCP({mcpServer:a.mcpServer,enabledTools:a.enabledTools,nodeId:a.nodeId,nodeRoots:a.nodeRoots});if(!b.success)throw n.error("MCP execution failed",{error:b.error}),Error(`MCP execution failed: ${b.error.message}`);let c={success:!0,server:b.value.server,tools:b.value.tools,enabledTools:b.value.enabledTools};return n.info("execCore() completed",{server:c.server,toolsCount:c.tools?.length||0,enabledToolsCount:c.enabledTools?.length||0}),n.verbose("execCore() execResult",JSON.stringify(c)),c}catch(b){let a={success:!1,error:b instanceof Error?b.message:String(b)};return n.error("execCore() failed",{error:a.error}),n.verbose("execCore() errorResult",JSON.stringify(a)),a}}async post(a,b,c,d){if(n.info("post() started",{server:b.server,toolsCount:b.tools?.length||0,enabledToolsCount:b.enabledTools?.length||0}),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),k.Gv.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"MCPNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"MCP Node",timestamp:new Date().toISOString()}),n.info("Added MCPNode tracking information")),b.success&&b.server&&b.tools){let a,e=d?.properties?.toolTimeout;try{let c=await i.mcpService.loadServerConfigs?.();a=Array.isArray(c)?c.find(a=>a.name===b.server):void 0}catch(a){n.warn("Could not load server-wide tool parameter presets",a)}let f=b.tools.filter(a=>b.enabledTools?.includes(a.name)).map(c=>{let f=(0,l.Ge)(a?.toolParameterPresets,d?.properties?.toolParameterPresets,c.name),g=(0,h.az)(c.inputSchema);return i.mcpService.setToolSchemaHash(b.server,c.name,g),{...c,inputSchema:(0,l.Qm)(c.inputSchema,f),originalName:c.name,server:b.server,nodeId:d?.id,name:(0,h.Y6)(b.server,c.name),timeout:e,clientGeneration:i.mcpService.getClientGeneration(b.server),schemaHash:g,uiResourceUri:(0,j.Gt)(c._meta),...Object.keys(f).length>0?{presetArgs:f}:{}}});if(c.mcpContext){let a=[...c.mcpContext.availableTools||[]];for(let b of f)a.some(a=>a.name===b.name)||a.push(b);c.mcpContext.availableTools=a}else c.mcpContext={server:b.server,availableTools:f};for(let a of(c.toolNameMap=c.toolNameMap||{},f))c.toolNameMap[a.name]={server:b.server,tool:a.originalName,timeout:a.timeout,nodeId:d?.id,clientGeneration:a.clientGeneration,schemaHash:a.schemaHash,annotations:a.annotations,uiResourceUri:a.uiResourceUri,presetArgs:a.presetArgs};let g=f.map(a=>a.name);n.info("Stored MCP context in shared state",{server:b.server,availableToolsCount:f.length,availableToolNames:g.length>10?g.slice(0,10).join(", ")+"...":g.join(", "),totalToolsCount:c.mcpContext.availableTools.length})}n.info("post() completed"),n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`Returning action: ${a}`),a}return"default"}_clone(){return new o}}d()}catch(a){d(a)}})},586278:(a,b,c)=>{"use strict";function d(a,b){if(!b)return a;let c=JSON.stringify(b),d=`The parameters follow this JSON Schema (a composed/conditional schema that cannot be fully expressed as simple parameters) — follow it exactly:
|
|
117
|
+
…[truncated ${a.content.length-4e3} chars]`}:a}function s(a){let b=new Set;for(let c of a)c.id&&b.add(c.id);return b}function t(a){let{threaded:b,foldedView:c,scopedView:d,systemContent:e,inputMode:f}=a,g=o(d),h=s(c),i=s(d),j=s(g),k=[],l=0,m=0,n=0,p=0;for(let a of b){let b={id:a.id,role:a.role,status:"sent",preview:function(a){if("string"==typeof a.content)return a.content.slice(0,300);if(Array.isArray(a.content))try{return JSON.stringify(a.content).slice(0,300)}catch{}return""}(a),toolCallNames:function(a){if("assistant"===a.role&&Array.isArray(a.tool_calls)&&a.tool_calls.length>0){let b=a.tool_calls.map(a=>"function"===a.type?a.function.name:void 0).filter(a=>!!a);return b.length>0?b:void 0}}(a)};"system"===a.role?b.status="system":a.id&&j.has(a.id)?(b.status="sent",l++):a.id&&i.has(a.id)?(b.status="handoff-stripped",b.reason='Removed as FLUJO handoff plumbing (handoff tool-call / result, or synthetic "Continue").',p++):a.id&&h.has(a.id)?(b.status="scoped-out",b.reason=`Outside this node's input scope (inputMode: ${f??"full-history"}).`,n++):(b.status="folded",b.reason="Settled tool exchange folded away (a node with outputMode: latest-message).",m++),k.push(b)}return{systemMessage:null!=e?{content:e}:null,wireMessages:g.map(r),provenance:k,counts:{threaded:b.length,sent:l,folded:m,scopedOut:n,handoffStripped:p},inputMode:f}}},578615:(a,b,c)=>{"use strict";c.r(b),c.d(b,{loadServerConfigs:()=>q,loadServerRoots:()=>r,saveConfig:()=>t});var d=c(333873),e=c.n(d),f=c(881951),g=c(624788),h=c(621030),i=c(482964),j=c(328461),k=c(296951);let l=(0,i.h)("backend/services/mcp/config"),m=new Set(["streamable","sse","websocket"]),n=new Map;async function o(a){if(n.has(a))return n.get(a);let b=null;try{let c=(0,f.Lp)({baseDir:a,timeout:{block:5e3}});b=(await c.remote(["get-url","origin"])||"").trim()||null}catch{b=null}return n.set(a,b),b}async function p(a){var b;let c;if(m.has(a.transport))return{type:"remote"};let d="string"!=typeof(b=a.rootPath)||""===b.trim()?null:e().isAbsolute(b)?b:e().resolve((0,j.getWorkspaceDataDir)(),b);if(d&&""!==(c=e().relative(e().join((0,j.getWorkspaceDataDir)(),"mcp-servers"),d))&&!c.startsWith("..")&&!e().isAbsolute(c)){let a=await o(d);if(a)return{type:"github",repositoryUrl:a}}return{type:"local"}}async function q(){l.debug("Entering loadServerConfigs method");try{let a=await (0,g.loadItem)(h.Zg.MCP_SERVERS,{}),b=Object.entries(a).map(([a,b])=>{let c=(0,k.H6)(b.transport),d=a=>"string"==typeof a?(0,j.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"):void 0,e=a=>Array.isArray(a)?a.map(d).filter(a=>void 0!==a):void 0,f=a=>{if(!a||"object"!=typeof a||Array.isArray(a))return;let b={};for(let[c,e]of Object.entries(a)){if("string"==typeof e){b[c]=d(e)??e;continue}e&&"object"==typeof e&&"value"in e&&"string"==typeof e.value&&"metadata"in e&&e.metadata&&"object"==typeof e.metadata&&"isSecret"in e.metadata&&"boolean"==typeof e.metadata.isSecret&&(b[c]={value:d(e.value)??e.value,metadata:{isSecret:e.metadata.isSecret}})}return b},g=b.launch,h=g&&"object"==typeof g?{...g,command:d(g.command),cwd:d(g.cwd),args:e(g.args),env:f(g.env)}:void 0;b={...b,transport:c,rootPath:d(b.rootPath),cwd:d(b.cwd),command:d(b.command),args:e(b.args),roots:e(b.roots),env:f(b.env),...Object.prototype.hasOwnProperty.call(b,"launch")?{launch:h}:{}},m.has(c)&&function(a){if("string"!=typeof a)return!1;let b=a.trim();return"/"===b||"\\"===b||/^[A-Za-z]:[\\/]?$/.test(b)}(b.rootPath)&&(l.info(`Normalizing filesystem-root rootPath "${b.rootPath}" of remote server ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let i=b.source?.type;"stdio"===c&&"string"==typeof b.rootPath&&"."===b.rootPath.trim()&&("registry"===i||"marketplace"===i)&&/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/.test(a)&&(l.info(`Normalizing shared Registry rootPath "." of ${a} to mcp-servers/${a}`),b={...b,rootPath:`mcp-servers/${a}`});let n={name:a,disabled:!1,rootPath:"",env:{},_buildCommand:"",_installCommand:""};return"streamable"===c?{...n,...b,name:a,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0,reconnectionOptions:b.reconnectionOptions&&"object"==typeof b.reconnectionOptions?b.reconnectionOptions:void 0,sessionId:b.sessionId||void 0,oauthClientId:b.oauthClientId||"",oauthClientSecret:b.oauthClientSecret||"",oauthScopes:b.oauthScopes||(b.oauthClientId||b.oauthClientInformation?["read"]:void 0),oauthClientMetadata:b.oauthClientMetadata,oauthClientInformation:b.oauthClientInformation,oauthTokens:b.oauthTokens,oauthCodeVerifier:b.oauthCodeVerifier}:"sse"===c?{...n,...b,name:a,eventSourceInit:b.eventSourceInit&&"object"==typeof b.eventSourceInit?b.eventSourceInit:void 0,requestInit:b.requestInit&&"object"==typeof b.requestInit?b.requestInit:void 0}:"websocket"===c?{...n,...b,name:a,websocketUrl:b.websocketUrl||""}:{...n,...b,name:a,command:b.command||"",args:b.args||[],stderr:b.stderr||"pipe"}});return await Promise.all(b.map(async a=>{a.source||(a.source=await p(a))})),b}catch(a){if(a instanceof k.UQ)return l.warn("Stored MCP transport is invalid"),{success:!1,error:a.message,statusCode:400};return l.warn("Failed to load server configs",a),{success:!1,error:`Failed to load server configs: ${a instanceof Error?a.message:"Unknown error"}`}}}async function r(a){let b=await q();if(!Array.isArray(b))return[];let c=b.find(b=>b.name===a)?.roots;return Array.isArray(c)?c.filter(a=>"string"==typeof a):[]}let s=["_buildCommand","_installCommand","oauthClientId","oauthClientSecret"];async function t(a){l.debug("Entering saveConfig method");try{for(let b of a.values())(0,k.SL)(b);let b=Object.fromEntries(Array.from(a.entries()).map(([a,b])=>[a,function(a){let{name:b,...c}=a,d={};for(let[a,b]of Object.entries(c))void 0!==b&&(""===b&&s.includes(a)||(d[a]=b));return d}(b)]));return await (0,g.VH)(h.Zg.MCP_SERVERS,b),{success:!0}}catch(a){if(a instanceof k.UQ)return l.warn("MCP transport is invalid"),{success:!1,error:a.message,statusCode:400};return l.warn("Failed to save config",a),{success:!1,error:`Failed to save config: ${a instanceof Error?a.message:"Unknown error"}`}}}},580118:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>h,Rn:()=>i,b4:()=>j});var d=c(482964),e=c(943990);let f=(0,d.h)("backend/services/model/mediaHandoff");function g(a){return null===a||"object"!=typeof a||Array.isArray(a)?void 0:a}async function h(a,b){let c=!1,d=await Promise.all(a.map(async a=>{if(!a.resourceUri?.startsWith("flujo://run/"))return a;let d=()=>(0,e.QT)(a.resourceUri),f=b?await b(d):await d();if(f===a.localPath)return a;c=!0;let{localPath:g,...h}=a;return f?{...h,localPath:f}:h}));return c?d:a}function i(a,b){if(!b?.length)return a;let c=new Set(b.map(a=>a.toLowerCase()));return c.has("vision")&&c.add("image"),(c.has("document")||c.has("pdf"))&&c.add("file"),a.map(a=>{if(!Array.isArray(a.content))return a;let b=a.content.filter(a=>{let b="image_url"===a.type||"input_image"===a.type?"image":"audio_url"===a.type||"input_audio"===a.type?"audio":"video_url"===a.type||"input_video"===a.type?"video":"file"===a.type||"input_file"===a.type?"file":void 0;return!b||c.has(b)});return b.length===a.content.length?a:{...a,content:b}})}async function j(a,b,c={}){return Promise.all(a.map(async a=>{if(!Array.isArray(a.content))return a;let d=await Promise.all(a.content.map(async a=>{let d=function(a){if("image_url"===a.type){let b=g(a.image_url)?.url;return"string"==typeof b?b:void 0}if("audio_url"===a.type){let b=g(a.audio_url)?.url;return"string"==typeof b?b:void 0}if("video_url"===a.type){let b=g(a.video_url)?.url;return"string"==typeof b?b:void 0}if("file"===a.type||"input_file"===a.type){let b=g(a.file)??a,c=b.file_data??b.file_url??b.url;return"string"==typeof c?c:void 0}}(a);if(!d?.startsWith("flujo://run/"))return a;let h=null;try{let a=()=>(0,e.gy)(d,{at:Date.now(),source:"node",nodeId:b});h=c.commitDurableMutation?await c.commitDurableMutation(a):await a()}catch(a){if(a?.code==="flow_execution_authority_lost")throw a;f.warn(`Failed to read media run resource ${d}; sending a placeholder instead`,a)}let i=h?.contents.contents[0],j=i&&"string"==typeof i.blob?i.blob:void 0;if(!h||!j)return f.warn(`Media run resource is unavailable, degrading to a text note: ${d}`),{type:"text",text:`[media attachment unavailable — its stored payload (${d}) could not be read; it may have passed the run-resource retention window]`};let k=i.mimeType??h.entry.mimeType??"application/octet-stream";return function(a,b,c,d,e){if("image_url"===a.type)return{...a,image_url:{...g(a.image_url),url:b}};if("video_url"===a.type)return{...a,video_url:{...g(a.video_url),url:b,mime_type:c}};if("audio_url"===a.type){let f="audio/mpeg"===c?"mp3":"audio/wav"===c||"audio/x-wav"===c?"wav":void 0;return f?{type:"input_audio",input_audio:{data:d,format:f}}:e?{type:"text",text:`[${c} audio attachment is available as an artifact but this OpenAI input channel accepts only MP3 or WAV]`}:{...a,audio_url:{...g(a.audio_url),url:b,mime_type:c}}}return"file"===a.type||"input_file"===a.type?{type:"file",file:{...g(a.file)??a,file_data:b,mime_type:c}}:a}(a,`data:${k};base64,${j}`,k,j,!0===c.strictOpenAiAudioFormats)}));return{...a,content:d}}))}},584861:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{McpRuntimeAuthorityRetirementError:()=>as,assertMcpRuntimeAuthorityRetired:()=>X,attachShippedWorkspaceReadiness:()=>aj,capabilityKey:()=>U,clientProtectedConfigFingerprint:()=>T,createNewClient:()=>af,createStdioTransport:()=>ak,createTransport:()=>ag,flattenCustomHeaders:()=>aa,getUnderlyingTransport:()=>$,httpConfigKey:()=>ae,isolatedStdioRuntime:()=>ah,protectedConfigFingerprint:()=>S,resolveConfigHeaders:()=>_,resolveStdioLaunch:()=>ai,retireMcpRuntimeAuthority:()=>Z,safelyCloseClient:()=>am,shouldRecreateClient:()=>al,stdioConfigKey:()=>ad});var e=c(275424),f=c(894603),g=c(959654),h=c(687720),i=c(508488),j=c(646460),k=c(405087),l=c(200797),m=c(240505),n=c(302292),o=c(671675),p=c(231318),q=c(629021),r=c(333873),s=c(321820),t=c(977598),u=c(883191),v=c(482964),w=c(296951),x=c(687161),y=c(510217),z=c(826652),A=c(298683),B=c(230314),C=c(193640),D=c(533102),E=c(328461),F=c(84022),G=c(989031),H=c(868644),I=c(622838),J=c(749976),K=c(618836),L=c(471533),M=c(845157),N=c(216085),O=c(214799),P=c(378591),Q=c(589193),R=a([I]);I=(R.then?(await R)():R)[0];let an=globalThis,ao=an.__flujoProtectedConfigFingerprintKey??=(0,t.randomBytes)(32);function S(a){return(0,t.createHmac)("sha256",ao).update(JSON.stringify(a)).digest("hex")}function T(a){return a.__flujoProtectedConfigFingerprint}function U(a){return[(0,I.PP)(a),(0,J.NJ)(a),!0===a.enableMcpApps?"mcp-apps:on":"mcp-apps:off",!0===a.enableMcpSkills?"mcp-skills:on":"mcp-skills:off"].join("|")}let ap=Symbol.for("FLUJO:mcp-authority-retirement-errors:v1"),aq=Object.getOwnPropertyDescriptor(globalThis,ap);if(aq&&(!("value"in aq)||aq.configurable||aq.writable||!(aq.value instanceof WeakSet)))throw Error("MCP retirement error provenance refused.");let ar=aq?.value??new WeakSet;aq||Object.defineProperty(globalThis,ap,{value:ar,writable:!1,configurable:!1,enumerable:!1});class as extends AggregateError{constructor(a,b,c){super(a,b,c),WeakSet.prototype.add.call(ar,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(ar,a)}}function V(){return globalThis.__flujo_mcp_authority_retirement_quarantines??=new Map}function W(a,b=(0,E.getCurrentWorkspace)()){return`${b}\0${a}`}function X(a){let b=V().get(W(a));if(b)throw b.error}function Y(a,b,c,d){let e=V(),f=W(a,b);d?e.set(f,{owner:c,error:d}):e.get(f)?.owner===c&&e.delete(f)}function Z(a,b,c,d){let f=[];try{c&&(0,e.p9)(c)}catch(a){f.push(a)}try{(0,P.tS)(d?.leaseId)}catch(a){f.push(a)}if(f.length){let e=new as(f,"MCP runtime authority retirement failed.",{cause:f[0]});throw Y(a,b,c??d,e),e}Y(a,b,c??d)}function $(a){let b=a,c=new Set;for(;b&&"object"==typeof b&&!c.has(b);){c.add(b);let a=b.__flujoInnerTransport;if(!a)break;b=a}return b}let at=(0,v.h)("backend/services/mcp/connection");async function _(a){let b=a;if(a.env&&"object"==typeof a.env){let c=new Map;for(let[b,d]of Object.entries(a.env)){if(!(0,M.dR)(b))continue;let a=(0,M.ff)(d);if(!a||(0,L.uh)(a))continue;let e=await (0,K.G)(a);e&&c.set(b,e)}b={...b,env:(0,M.ln)(c)}}if("streamable"!==a.transport&&"sse"!==a.transport||!a.headers||"object"!=typeof a.headers)return b;let c=new Map;for(let[b,d]of Object.entries(a.headers)){if(!(0,M.pI)(b))continue;let a=(0,M.ff)(d);if(!a||(0,L.uh)(a))continue;let e=await (0,K.G)(a);e&&c.set(b,e)}return{...b,headers:(0,M.ln)(c)}}function aa(a){let b=new Map;for(let[c,d]of Object.entries(a)){if(!(0,M.pI)(c))continue;let a=(0,M.ff)(d);"string"==typeof a&&a.length>0&&b.set(c,a)}return(0,M.ln)(b)}function ab(a){let b=new Map;if(a)for(let[c,d]of Object.entries(a)){if(!(0,M.dR)(c))continue;let a=(0,M.ff)(d);void 0!==a&&b.set(c,a)}return(0,M.ln)(b)}let au=new Set(["path","pathext","home","userprofile","homedrive","homepath","appdata","localappdata","programdata","xdg_config_home","xdg_cache_home","xdg_data_home","xdg_state_home","xdg_runtime_dir","tmp","temp","tmpdir","shell","comspec","systemroot","windir","systemdrive","programfiles","programfiles(x86)","gh_config_dir"]);function ac(a,b,c){for(let c of Object.keys(a))c.toLowerCase()===b.toLowerCase()&&delete a[c];void 0!==c&&(a[b]=c)}function ad(a,b=!1){return JSON.stringify({command:a.command,args:a.args??[],env:ab(a.env),cwd:String(a.cwd??""),rootPath:a.rootPath??"",isolateRuntimeHome:b,isolation:a.isolation,trustedHost:a.trustedHost})}function ae(a){return JSON.stringify({transport:a.transport,url:a.serverUrl??"",headers:a.headers??{},requestInit:a.requestInit??{},eventSourceInit:a.eventSourceInit??{},reconnectionOptions:a.reconnectionOptions??{},sessionId:a.sessionId??"",oauthClientId:a.oauthClientId??"",oauthIssuer:a.oauthIssuer??"",oauthClientInformation:a.oauthClientInformation??{},oauthClientSecret:a.oauthClientSecret??"",oauthTokens:a.oauthTokens??{}})}function af(a){if(at.debug("Entering createNewClient method"),(0,l.isProtectedExecutionServer)(a.name)){(0,l.assertExecutionServerConfig)(a);let b=new f.tI({name:`flujo-${a.name}-client`,version:"3.48.2"},{capabilities:{}});return b.__flujoCapKey=U(a),Object.defineProperty(b,"__flujoProtectedConfigFingerprint",{value:S(a),enumerable:!1}),b}let b=(0,I.jV)(a),c=(0,J.fy)(a),d=!0===a.enableMcpApps,e="stdio"===a.transport&&void 0===a.isolation,g=new f.tI({name:`flujo-${a.name}-client`,version:"3.48.2"},{capabilities:{experimental:{},roots:{listChanged:!0},...b?{sampling:{}}:{},...e||c?{elicitation:{...e?{url:{}}:{},...c?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[x.ET]:{}}:{},...e?{[O.OM]:O.XC}:{},...d?{[N.OF]:{mimeTypes:[N.cM]}}:{}}}});return(0,H.FP)(g,a),b&&(0,I.LE)(g,a),(e||c)&&(0,J.n4)(g,a),g.__flujoCapKey=U(a),g}function ag(a,b){if((0,w.SL)(a),at.debug("Entering createTransport method"),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new g.Bk("ISOLATION_POLICY_INVALID");if("streamable"===a.transport){at.info(`Creating streamable http transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.headers&&"object"==typeof a.headers){let c=aa(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},at.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}if(a.oauthClientId||a.oauthClientInformation){at.info(`Setting up OAuth authentication for ${a.name}`);let c=(0,y.Cl)(a);b.authProvider=c,b.fetch=c.oauthFetch,a.oauthTokens?at.debug(`OAuth provider configured for ${a.name} with existing tokens`):at.debug(`OAuth provider configured for ${a.name} - will initiate OAuth flow if needed`)}else at.debug(`No OAuth configuration found for ${a.name}`);let c=new o.j(new URL(a.serverUrl),b);return c.__flujoHttpKey=ae(a),c}if("sse"===a.transport){at.info(`Creating legacy sse transport for server ${a.name} with URL ${a.serverUrl}`);let b={};if(a.requestInit&&"object"==typeof a.requestInit&&(b.requestInit=a.requestInit),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit),a.headers&&"object"==typeof a.headers){let c=aa(a.headers);Object.keys(c).length>0&&(b.requestInit={...b.requestInit||{},headers:{...b.requestInit?.headers||{},...c}},at.info(`Applied ${Object.keys(c).length} custom header(s) for ${a.name}: ${Object.keys(c).join(", ")}`))}let c=new p.A(new URL(a.serverUrl),b);return c.__flujoHttpKey=ae(a),c}return"websocket"===a.transport?(at.info(`Creating WebSocket transport for server ${a.name} with URL ${a.websocketUrl}`),new n.I(new URL(a.websocketUrl))):ak(a,b)}function ah(a){let b=(0,E.getWorkspaceDataDir)(),c=(0,t.createHash)("sha256").update(a,"utf8").digest("hex").slice(0,24),d=new u.V(b),e=b;for(let a of["userdata","mcp-runtime",c])e=r.join(e,a),d.admit(e,a===c);let f=e,g=r.join(f,"home"),h=r.join(f,"cwd");d.admit(g),d.admit(h);let i={appData:r.join(g,"AppData","Roaming"),localAppData:r.join(g,"AppData","Local"),config:r.join(g,".config"),cache:r.join(g,".cache"),data:r.join(g,".local","share"),state:r.join(g,".local","state"),runtime:r.join(g,".runtime"),temp:r.join(g,"tmp"),npm:r.join(g,".npm"),pip:r.join(g,".cache","pip"),uv:r.join(g,".cache","uv")};for(let a of Object.values(i)){let b=r.relative(g,a),c=g;for(let a of b.split(r.sep).filter(Boolean))c=r.join(c,a),d.admit(c)}let j={HOME:g,USERPROFILE:g,APPDATA:i.appData,LOCALAPPDATA:i.localAppData,XDG_CONFIG_HOME:i.config,XDG_CACHE_HOME:i.cache,XDG_DATA_HOME:i.data,XDG_STATE_HOME:i.state,XDG_RUNTIME_DIR:i.runtime,TMPDIR:i.temp,TMP:i.temp,TEMP:i.temp,NPM_CONFIG_CACHE:i.npm,PIP_CACHE_DIR:i.pip,UV_CACHE_DIR:i.uv,FLUJO_PARENT_DATA_DIR:(0,B.ok)(),FLUJO_DATA_DIR:b,FLUJO_WORKSPACE:(0,E.getCurrentWorkspace)()};if("win32"===process.platform){let a=r.parse(g);j.HOMEDRIVE=a.root.replace(/[\\/]$/,""),j.HOMEPATH=g.slice(a.root.length-1)}return d.verify(),{cwd:h,env:j}}function ai(a,b){if("stdio"!==a.transport)throw new w.UQ;if(void 0!==a.isolation){if(void 0!==a.trustedHost)throw new g.Bk("ISOLATION_POLICY_INVALID");let b=(0,k.O0)(a,ab(a.env)),{launch:c}=b;return{command:c.command,args:[...c.args],env:(0,k.H2)(c),cwd:c.cwd,isolation:b}}if((0,k.iw)(a),void 0!==a.trustedHost){let c=(0,h.FN)(a),d=(0,i.vb)(a),e=b?.isolateRuntimeHome===!0;if(e!==("isolated"===d.policy.runtimeHome))throw new i.Kq("HOST_POLICY_INVALID");if(e){let b=ah(a.name);if(d.policy.packageRunner&&r.resolve(a.cwd)!==r.resolve(b.cwd))throw new i.Kq("HOST_POLICY_INVALID");for(let[a,e]of Object.entries(b.env)){if(!d.policy.environmentNames.includes(a))throw new i.Kq("HOST_POLICY_INVALID");if(d.policy.packageRunner){let b=Object.entries(c.env).find(([b])=>b.toUpperCase()===a.toUpperCase())?.[1];if(b&&b!==e)throw new i.Kq("HOST_POLICY_INVALID")}c.env[a]=e}if(d.policy.packageRunner){let a=c.args.findIndex(a=>a.startsWith("--cache="));if(a<0)throw new i.Kq("HOST_POLICY_INVALID");c.args[a]=`--cache=${b.env.NPM_CONFIG_CACHE}`}}return at.debug("Transformed environment variable names",Object.keys(c.env)),c}let c=(0,F.AW)(a),d=!!c,e=c?.defaultName==="bash",f=a=>d?a:(0,E.remapLegacyDefaultWorkspaceReference)(a,"mcp-servers"),j=f(a.command),l=a.args?a.args.map(f):[],m=`${x.VL}/${a.name}`;at.info(`Creating stdio transport for server ${a.name}`),at.debug(`Original command: ${j}`),at.debug(`Original args: ${JSON.stringify(l)}`),at.debug(`Server directory: ${m}`);let n=!r.isAbsolute(j)&&(j.includes("/")||j.includes("\\")),o=!j.includes("/")&&!j.includes("\\");if(at.debug(`Is relative path: ${n}`),at.debug(`Is just filename: ${o}`),"win32"===s.platform()&&j.toLowerCase().endsWith(".bat"))if(at.debug(`Detected .bat file on Windows: ${j}`),o){let a=r.join((0,E.getWorkspaceDataDir)(),m,j);at.debug(`Checking if file exists at: ${a}`);let b=q.existsSync(a);at.debug(`File exists: ${b}`),b?(at.debug(`Using full path to .bat file: ${a}`),l=["/c",a,...l]):(at.warn(`WARNING: .bat file not found at ${a}`),l=["/c",j,...l]),j="cmd.exe"}else at.debug(`Using cmd.exe with path as provided: ${j}`),l=["/c",j,...l],j="cmd.exe";let p=(0,D.u)(j,{execPath:process.execPath,platform:s.platform(),dirname:r.dirname,joinPath:r.join,fileExists:q.existsSync});p!==j&&(at.debug(`Resolved Node toolchain command "${j}" to absolute path: ${p}`),j=p),at.debug(`Final command: ${j}`),at.debug(`Final args: ${JSON.stringify(l)}`);let t=e||b?.isolateRuntimeHome!==!0?void 0:ah(a.name),u=f((0,C.u)({command:a.command,args:a.args,rootPath:a.rootPath,cwd:a.cwd,serverName:a.name,defaultCwd:`${x.VL}/${a.name}`,packageRunnerCwd:t?.cwd})),v=r.isAbsolute(u)?u:r.join((0,E.getWorkspaceDataDir)(),u);at.debug(`cwd: ${v}`);let y=ab(a.env),z=e?function(a){let b={...a},c=Object.entries(process.env).filter(a=>"string"==typeof a[1]);for(let[a,d]of c)ac(b,a,d);for(let a of au)c.find(([b])=>b.toLowerCase()===a)||ac(b,a,void 0);return b}(y):y;if(!d)for(let[a,b]of Object.entries(z))z[a]=f(b);t&&Object.assign(z,t.env),function(a){if("win32"!==process.platform)return;let b=(a,b)=>Object.entries(a).find(([a,c])=>a.toLowerCase()===b.toLowerCase()&&""!==(c??"").trim())?.[1],c=b(process.env,"SystemRoot")??b(process.env,"windir")??"C:\\Windows";for(let[d,e]of Object.entries({SystemRoot:c,windir:c,ComSpec:b(process.env,"ComSpec")??r.join(c,"System32","cmd.exe"),PATHEXT:b(process.env,"PATHEXT")??".COM;.EXE;.BAT;.CMD"}))if(void 0===b(a,d)){for(let b of Object.keys(a))b.toLowerCase()===d.toLowerCase()&&delete a[b];a[d]=e}}(z);let A=(0,B.ok)(),G=(0,E.getWorkspaceDataDir)();if(z.FLUJO_PARENT_DATA_DIR=A,z.FLUJO_DATA_DIR=G,z.FLUJO_WORKSPACE=(0,E.getCurrentWorkspace)(),c?.defaultName==="browser"){if(!z.PLAYWRIGHT_BROWSERS_PATH?.trim()){let a=(0,F.AI)(process.env);a&&(z.PLAYWRIGHT_BROWSERS_PATH=a)}z.FLUJO_BROWSER_PROFILE_DIR=r.join(G,"browser-profile","trusted"),z.FLUJO_BROWSER_SCREENSHOT_DIR=r.join(G,"screenshots","browser"),z.FLUJO_BROWSER_RECORD_DIR=r.join(G,"recordings","browser")}for(let a of Object.keys(z))a.toUpperCase()===Q.wd&&delete z[a];at.verbose("Transformed environment variable names",JSON.stringify(Object.keys(z)));let H=(0,Q.hz)(a);return H&&(z[Q.wd]=H),"1"===process.env.FLUJO_WORKER_MODE&&c?.defaultName==="flujo"&&(z.FLUJO_WORKER_MODE="1",process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN&&(z.FLUJO_SNAPSHOT_CONTROL_TOKEN=process.env.FLUJO_SNAPSHOT_CONTROL_TOKEN)),{command:j,args:l,env:z,cwd:v}}function aj(a,b,c){let d=(0,F.AW)(b),e=(0,E.getWorkspaceDataDir)();if(!d||r.resolve(c)!==r.resolve(e,"mcp-servers",d.packageDirectory))return;let f=a.start.bind(a);a.start=async()=>{await (0,G._F)(e,void 0,[d.packageDirectory]),await f()}}function ak(a,b){let c,d,f;if(at.debug("Entering createStdioTransport method"),"stdio"!==a.transport)throw Error("Cannot create stdio transport for non-stdio config");let{command:g,args:i,env:l,cwd:n,isolation:o}=ai(a,b),p=(0,E.getCurrentWorkspace)(),q=()=>Z(a.name,p,d,c);at.info(`Creating StdioClientTransport for ${a.name} with stderr: 'pipe'`);try{X(a.name),d=(0,e.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,P.D9)(a.name):void 0;let p=d?(0,e.Uf)(a,d):{},r={command:g,args:i,env:{...l,...c?a.trustedHost?(0,h.s7)(a,c.env):c.env:{},...p},cwd:n,stderr:o?"ignore":"pipe",...o?{maxBufferSize:262144}:{}};o||(Object.freeze(r.args),Object.freeze(r.env),Object.freeze(r)),f=new m.oQ(r),o?(0,k.We)(f,a,o,q):a.trustedHost?(0,h.Zu)(f,a,q,d):(aj(f,a,n),(0,j.uR)(f,a,a=>JSON.stringify([ad(a,b?.isolateRuntimeHome===!0),U(a)])))}catch(b){let a=[];try{o?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new as([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}return c&&(f.__flujoRuntimeBrokerLeaseId=c.leaseId),f.__flujoBundledWorkload=d,f.__flujoRetireRuntimeAuthority=q,f.__flujoStdioKey=ad(a,b?.isolateRuntimeHome===!0),f.stderr?at.info(`Stderr stream is available for ${a.name}`):at.warn(`Stderr stream is NOT available for ${a.name}`),f}function al(a,b,c=!1,d){if(at.debug("Entering shouldRecreateClient method"),(0,z.wk)(a))return{needsNewClient:!0,reason:"Existing connection is closed"};if((a.__flujoCapKey??"")!==U(b))return{needsNewClient:!0,reason:"Client capabilities (sampling/elicitation/MCP Apps/Skills) changed"};let e=!0===a.__flujoBeta,f=c&&"websocket"!==b.transport;if(e!==f)return{needsNewClient:!0,reason:f?"Beta MCP protocol enabled":"Beta MCP protocol disabled"};if(e){let c=a.transport;if(!c||c.__flujoKind!==b.transport)return{needsNewClient:!0,reason:`Transport type changed to ${b.transport}`};if("stdio"===b.transport){if(c.__flujoStdioKey!==ad(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}else if(c.__flujoHttpKey!==ae(b))return{needsNewClient:!0,reason:`${b.transport} auth/connection parameters changed`};return{needsNewClient:!1}}if("websocket"===b.transport){if(!(a.transport instanceof n.I))return{needsNewClient:!0,reason:"Transport type changed to websocket"}}else if("streamable"===b.transport){if(!(a.transport instanceof o.j))return{needsNewClient:!0,reason:"Transport type changed to streamable"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"Streamable server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing streamable transport has no config key"};if(e!==ae(b))return{needsNewClient:!0,reason:"Streamable auth/connection parameters changed"}}else if("sse"===b.transport){if(!(a.transport instanceof p.A))return{needsNewClient:!0,reason:"Transport type changed to sse"};let c=a.transport,d=c._url?.toString();if(void 0!==d&&d!==new URL(b.serverUrl).toString())return{needsNewClient:!0,reason:"SSE server URL changed"};let e=c.__flujoHttpKey;if(!e)return{needsNewClient:!0,reason:"Existing sse transport has no config key"};if(e!==ae(b))return{needsNewClient:!0,reason:"SSE auth/connection parameters changed"}}else{if(!(a.transport instanceof m.oQ))return{needsNewClient:!0,reason:"Transport type changed to stdio"};if("stdio"!==b.transport)return{needsNewClient:!0,reason:"Transport type changed from stdio"};let c=a.transport.__flujoStdioKey;if(!c)return{needsNewClient:!0,reason:"Existing stdio transport has no config key"};if(c!==ad(b,d?.isolateRuntimeHome===!0))return{needsNewClient:!0,reason:"Connection parameters changed"}}return{needsNewClient:!1}}async function am(a,b,c,d){let f,g;at.debug("Entering safelyCloseClient method");let h=Date.now(),i=d?.gracePeriodMs??15e3,j=d?.killEscalationMs??5e3,l=!1,m=!1,n=$(a.transport),o=(0,k.Ck)(n),p=n?._process,q=p&&"function"==typeof p.kill?"owned":c&&"stdio"!==c.transport?"external":"unknown",r="none",s=[];try{if(p&&"function"==typeof p.kill&&(l=null!==p.exitCode||null!==p.signalCode,null===p.exitCode&&null===p.signalCode)){try{p.stdin&&!p.stdin.destroyed&&(p.stdin.end(),at.debug(`Closed stdin for graceful shutdown for ${b}`))}catch(a){at.warn(`Error closing stdin for ${b}:`,a)}if(l=await (null!==p.exitCode||null!==p.signalCode?Promise.resolve(!0):new Promise(a=>{let b=()=>{clearTimeout(c),a(!0)},c=setTimeout(()=>{p.removeListener("exit",b),a(!1)},i);c.unref?.(),p.once("exit",b)})))at.info(`Process exited gracefully for ${b}`);else{at.warn(`Process did not exit within ${i}ms after stdin close; escalating to a tree kill for ${b}`);let a=await (0,A.U)(p,{graceMs:j,finalWaitMs:j});l=a.exited,m=a.forced,l?at.warn(`Process tree for ${b} force-terminated after ${a.durationMs}ms`):at.error(`Process tree for ${b} (pid ${a.pid??"unknown"}) did not exit after forced escalation`)}}await a.close(),at.info(`Client closed successfully for ${b}`)}catch(a){r="close_failed",g=a,at.warn(`Error closing client for ${b}:`,a)}finally{try{f=o?.close()}catch(a){s.push(a)}let a=n?.__flujoRetireRuntimeAuthority;if(a)try{a()}catch(a){s.push(a)}else{try{let a=n?.__flujoBundledWorkload;a&&(0,e.p9)(a)}catch(a){s.push(a)}try{(0,P.tS)(n?.__flujoRuntimeBrokerLeaseId)}catch(a){s.push(a)}}}"owned"===q&&p&&(l||=null!==p.exitCode||null!==p.signalCode),f?.outcome==="unknown"&&(l=!1);let t="external"===q?"not_applicable":l?"observed_exit":"unknown";"unknown"===t&&"none"===r&&(r="exit_unobserved");let u={exited:l,forced:m,durationMs:Date.now()-h,processOwnership:q,exitOutcome:t,errorClassification:r,...o&&f?{isolation:{schemaVersion:1,generation:o.launch.generation,cleanupOutcome:f.outcome}}:{}};if(s.length){let a=void 0===g?s:[g,...s];throw Object.assign(new as(a,"MCP shutdown authority retirement failed.",{cause:a[0]}),{shutdownObservation:u})}return u}d()}catch(a){d(a)}})},585029:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{v:()=>o});var e=c(787951),f=c(482964),g=c(340653),h=c(3924),i=c(373327),j=c(146188),k=c(768680),l=c(748633),m=a([g,i]);[g,i]=m.then?(await m)():m;let n=(0,f.h)("backend/flow/execution/nodes/MCPNode");class o extends e.Yp{async prep(a,b){n.info("prep() started");let c=b?.id||"",d=b?.properties?.boundServer,e=b?.properties?.enabledTools||[],f=b?.properties?.roots||[];if(!d)throw n.error("Missing bound server"),Error("MCP node requires a bound server");return n.info("prep() completed",{mcpServer:d,enabledToolsCount:e.length,nodeRootsCount:f.length}),{nodeId:c,nodeType:"mcp",mcpServer:d,enabledTools:e,nodeRoots:f}}async execCore(a,b){n.info("execCore() started",{mcpServer:a.mcpServer}),n.verbose("execCore() prepResult",JSON.stringify(a));try{let b=await g.z.executeMCP({mcpServer:a.mcpServer,enabledTools:a.enabledTools,nodeId:a.nodeId,nodeRoots:a.nodeRoots});if(!b.success)throw n.error("MCP execution failed",{error:b.error}),Error(`MCP execution failed: ${b.error.message}`);let c={success:!0,server:b.value.server,tools:b.value.tools,enabledTools:b.value.enabledTools};return n.info("execCore() completed",{server:c.server,toolsCount:c.tools?.length||0,enabledToolsCount:c.enabledTools?.length||0}),n.verbose("execCore() execResult",JSON.stringify(c)),c}catch(b){let a={success:!1,error:b instanceof Error?b.message:String(b)};return n.error("execCore() failed",{error:a.error}),n.verbose("execCore() errorResult",JSON.stringify(a)),a}}async post(a,b,c,d){if(n.info("post() started",{server:b.server,toolsCount:b.tools?.length||0,enabledToolsCount:b.enabledTools?.length||0}),n.verbose("post() inputs",JSON.stringify({prepResult:a,execResult:b,nodeParams:d})),k.Gv.ENABLE_EXECUTION_TRACKER&&Array.isArray(c.trackingInfo.nodeExecutionTracker)&&(c.trackingInfo.nodeExecutionTracker.push({nodeType:"MCPNode",nodeId:d?.id||"unknown",nodeName:d?.properties?.name||"MCP Node",timestamp:new Date().toISOString()}),n.info("Added MCPNode tracking information")),b.success&&b.server&&b.tools){let a,e=d?.properties?.toolTimeout;try{let c=await i.mcpService.loadServerConfigs?.();a=Array.isArray(c)?c.find(a=>a.name===b.server):void 0}catch(a){n.warn("Could not load server-wide tool parameter presets",a)}let f=b.tools.filter(a=>b.enabledTools?.includes(a.name)).map(c=>{let f=(0,l.Ge)(a?.toolParameterPresets,d?.properties?.toolParameterPresets,c.name),g=(0,h.az)(c.inputSchema);return i.mcpService.setToolSchemaHash(b.server,c.name,g),{...c,inputSchema:(0,l.Qm)(c.inputSchema,f),originalName:c.name,server:b.server,nodeId:d?.id,name:(0,h.Y6)(b.server,c.name),timeout:e,clientGeneration:i.mcpService.getClientGeneration(b.server),schemaHash:g,uiResourceUri:(0,j.Gt)(c._meta),...Object.keys(f).length>0?{presetArgs:f}:{}}});if(c.mcpContext){let a=[...c.mcpContext.availableTools||[]];for(let b of f)a.some(a=>a.name===b.name)||a.push(b);c.mcpContext.availableTools=a}else c.mcpContext={server:b.server,availableTools:f};for(let a of(c.toolNameMap=c.toolNameMap||{},f))c.toolNameMap[a.name]={server:b.server,tool:a.originalName,timeout:a.timeout,nodeId:d?.id,clientGeneration:a.clientGeneration,schemaHash:a.schemaHash,annotations:a.annotations,uiResourceUri:a.uiResourceUri,presetArgs:a.presetArgs};let g=f.map(a=>a.name);n.info("Stored MCP context in shared state",{server:b.server,availableToolsCount:f.length,availableToolNames:g.length>10?g.slice(0,10).join(", ")+"...":g.join(", "),totalToolsCount:c.mcpContext.availableTools.length})}n.info("post() completed"),n.info("Successors object:",{hasSuccessors:!!this.successors,isMap:this.successors instanceof Map,type:typeof this.successors});let e=this.successors instanceof Map?Array.from(this.successors.keys()):Object.keys(this.successors||{});if(n.info("Actions:",{actionsCount:e.length,actions:e}),e.length>0){let a=e[0];return n.info(`Returning action: ${a}`),a}return"default"}_clone(){return new o}}d()}catch(a){d(a)}})},586278:(a,b,c)=>{"use strict";function d(a,b){if(!b)return a;let c=JSON.stringify(b),d=`The parameters follow this JSON Schema (a composed/conditional schema that cannot be fully expressed as simple parameters) — follow it exactly:
|
|
118
118
|
${c}`;return a?`${a}
|
|
119
119
|
|
|
120
|
-
${d}`:d}c.d(b,{gL:()=>d}),c(880013)},588054:(a,b,c)=>{"use strict";c.d(b,{B:()=>j,_:()=>i});var d=c(977598),e=c(482964),f=c(328461);let g=(0,e.h)("backend/services/model/cache");class h{#a;credentialFingerprint(a){return(0,d.createHmac)("sha256",this.#a).update("flujo:provider-catalogue:credential:v1\0","utf8").update(a,"utf8").digest("hex")}currentCache(){let a=(0,f.getCurrentWorkspace)(),b=this.caches.get(a);return b||(b=new Map,this.caches.set(a,b)),b}normalizeTarget(a){return"string"==typeof a?{baseUrl:a}:a}getCacheKey(a){let b=this.normalizeTarget(a),c=b.baseUrl.trim().toLowerCase().replace(/\/$/,"");return JSON.stringify([b.profileId??"",b.provider??"",b.adapter??"",c,b.credentialFingerprint??""])}logIdentity(a){let b=this.normalizeTarget(a);return{baseUrl:b.baseUrl,...b.provider?{provider:b.provider}:{},...b.adapter?{adapter:b.adapter}:{},...b.profileId?{profileId:b.profileId}:{}}}isValid(a){return Date.now()-a.timestamp<a.ttl}get(a){let b=this.getCacheKey(a),c=this.currentCache(),d=c.get(b),e=this.logIdentity(a);return d?this.isValid(d)?(g.debug("Cache hit",{...e,modelCount:d.models.length}),d.models):(g.debug("Cache miss - entry expired",{...e,age:Date.now()-d.timestamp}),c.delete(b),null):(g.debug("Cache miss - no entry found",e),null)}set(a,b,c){let d=this.getCacheKey(a),e={models:b,timestamp:Date.now(),ttl:c||this.DEFAULT_TTL};this.currentCache().set(d,e),g.debug("Models cached",{...this.logIdentity(a),modelCount:b.length,ttl:e.ttl})}clear(a){let b=this.getCacheKey(a),c=this.currentCache().delete(b);g.debug("Cache cleared",{...this.logIdentity(a),deleted:c})}clearAll(){let a=this.currentCache(),b=a.size;a.clear(),g.debug("All cache cleared",{entriesCleared:b})}getStats(){let a=this.currentCache(),b=a.size,c=0,d=0;for(let b of a.values())this.isValid(b)?c++:d++;return{totalEntries:b,validEntries:c,expiredEntries:d}}cleanup(){let a=this.currentCache(),b=[];for(let[c,d]of a.entries())this.isValid(d)||b.push(c);b.forEach(b=>a.delete(b)),b.length>0&&g.debug("Cache cleanup completed",{expiredEntriesRemoved:b.length})}constructor(){this.caches=new Map,this.DEFAULT_TTL=3e5,this.#a=(0,d.randomBytes)(32)}}let i=new h;function j(a,b){if(!b||0===b.trim().length)return a;let c=b.toLowerCase().trim();return a.filter(a=>{let b=a.id.toLowerCase(),d=a.name.toLowerCase();if(b.includes(c)||d.includes(c))return!0;let e=a=>{let b=0,d=0;for(;b<a.length&&d<c.length;)a[b]===c[d]&&d++,b++;return d===c.length};return e(b)||e(d)}).sort((a,b)=>{let d=a.id.toLowerCase(),e=b.id.toLowerCase(),f=a.name.toLowerCase(),g=b.name.toLowerCase(),h=d.includes(c)||f.includes(c),i=e.includes(c)||g.includes(c);return h&&!i?-1:!h&&i?1:a.id.length-b.id.length})}},595075:(a,b,c)=>{"use strict";function d(a,b){if("low"===b)return 1024;if(a.startsWith("data:image/png;base64,")){let b=Buffer.from(a.slice(22,70),"base64");if(b.length>=24&&b.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10]))){let a=b.readUInt32BE(16),c=b.readUInt32BE(20);if(a&&c)return Math.ceil(a/32)*Math.ceil(c/32)*3}}if(/^data:image\/jpe?g;base64,/i.test(a.slice(0,24))){let b=a.indexOf(",")+1,c=Buffer.from(a.slice(b,b+87384),"base64");for(let a=2;a+9<c.length&&255===c[a];){let b=c[a+1],d=c.readUInt16BE(a+2);if(d<2)break;if([192,193,194].includes(b))return Math.ceil(c.readUInt16BE(a+5)/32)*Math.ceil(c.readUInt16BE(a+7)/32)*3;a+=d+2}}return 8192}function e(a,b,c){let e=0,f=JSON.stringify({messages:a.map(a=>Array.isArray(a.content)?{...a,content:a.content.map(a=>"image_url"!==a.type?a:(e+=d(a.image_url.url,a.image_url.detail),{...a,image_url:{...a.image_url,url:"[native image]"}}))}:a),tools:b??[]});return e+((c?.provider==="openrouter"||c?.adapter==="openrouter-agent")&&c?.name.startsWith("anthropic/")?Buffer.byteLength(f,"utf8"):Math.ceil(f.length/4))}c.d(b,{e:()=>d,y:()=>e})},600916:(a,b,c)=>{"use strict";function d(){let a=!0,b=new Set,c=()=>{if(!a)throw Error("Held read callback scope ended.")};return{assertActive:c,run(a){let d=(async()=>{c();let b=await a();return c(),b})();return b.add(d),d.then(()=>b.delete(d),()=>b.delete(d)),d},async close(){a=!1,await Promise.allSettled([...b])}}}c.d(b,{K:()=>d})},600950:(a,b,c)=>{"use strict";c.d(b,{Jm:()=>h,UR:()=>j,hc:()=>f,kA:()=>k,lr:()=>g,zJ:()=>i});var d=c(130214);let e=new Set(["image","audio","video"]);function f(a){if(a.type&&e.has(a.type))return a.type;if("resource"===a.type&&a.resource&&"string"==typeof a.resource.blob){let b="string"==typeof a.resource.mimeType?a.resource.mimeType:void 0,c=(0,d.X)(b);return"file"===c?void 0:c}}function g(a){let b=f(a),c=i(a);if(!b||!c)return;let d=h(a);return{type:b,data:c,...d?{mimeType:d}:{}}}function h(a){if("string"==typeof a.mimeType)return a.mimeType;let b=a.resource?.mimeType;return"string"==typeof b?b:void 0}function i(a){if("string"==typeof a.data)return a.data;let b=a.resource?.blob;return"string"==typeof b?b:void 0}function j(a){if(!a||!Array.isArray(a.content))return{mediaItems:[],textResult:a,hasMedia:!1};let b=[],c=[];for(let d of a.content){let a=f(d);a?(b.push(d),c.push(function(a,b){let c=h(a)??b,d=i(a)?.length,e=d?` ~${Math.round(3*d/4/1024)} KB`:"";return{type:"text",text:`[${c}${e} media item returned by this tool; delivered to the model as a native ${b} input rather than inline base64]`}}(d,a))):c.push(d)}return 0===b.length?{mediaItems:[],textResult:a,hasMedia:!1}:{mediaItems:b,textResult:{...a,content:c},hasMedia:!0}}function k(a,b,c){return{type:b,...a.mimeType?{mimeType:a.mimeType}:{},...a.name?{name:a.name}:{},resourceUri:a.uri,...c?{localPath:c}:{}}}},601236:(a,b,c)=>{"use strict";c.d(b,{Wn:()=>j,k$:()=>g,n7:()=>k});var d=c(176760),e=c.n(d),f=c(648286);let g="restricted-startup-policy-v1",h=()=>{throw Error("Native Codex startup configuration is unavailable.")};function i(a){let b,c=a.model_providers,d=c?.inventory?.base_url;if("inventory"!==a.model_provider||"string"!=typeof d)return h();try{b=new URL(d)}catch{return h()}return"http:"!==b.protocol||"127.0.0.1"!==b.hostname||!b.port||b.username||b.password||b.search||b.hash||"/"!==b.pathname?h():{model_provider:"inventory",check_for_update_on_startup:!1,analytics:{enabled:!1},features:{...f.Hg.features,enable_request_compression:!1,unbounded_connection_retries:!1},model_providers:{inventory:{name:"Source offline inventory fixture",base_url:d,wire_api:"responses",requires_openai_auth:!1,supports_websockets:!1,request_max_retries:0,stream_max_retries:0}}}}function j(a){if(!e().isAbsolute(a.cwd))return h();let b=["project_root_markers=[]",`projects.${JSON.stringify(a.cwd)}.trust_level="untrusted"`];if(a.neutralTrustOverrides&&JSON.stringify(a.neutralTrustOverrides)!==JSON.stringify(b))return h();let{forced_login_method:c,...d}=f.Hg,g={...d,..."chatgpt"===a.authentication?{forced_login_method:c}:{}},j=a.config.model_catalog_json;if(void 0!==j){if("string"!=typeof j||!e().isAbsolute(j))return h();g.model_catalog_json=j}"offline-inventory"===a.authentication&&Object.assign(g,i(a.config));let k=b.flatMap(a=>["-c",a]),l=(a,b)=>{if("string"==typeof a||"boolean"==typeof a)k.push("-c",`${b}=${JSON.stringify(a)}`);else if("number"==typeof a&&Number.isFinite(a))k.push("-c",`${b}=${a}`);else if(!a||"object"!=typeof a||Array.isArray(a))return h();else for(let[c,d]of Object.entries(a))l(d,b?`${b}.${c}`:c)};for(let[a,b]of Object.entries(g))l(b,a);return k.length>256||k.reduce((a,b)=>a+Buffer.byteLength(b),0)>32768?h():k}function k(a,b){let{forced_login_method:c,...d}=a,{forced_login_method:e,...g}=f.Hg;return{...d,...g,..."chatgpt"===b?{forced_login_method:e}:{},..."offline-inventory"===b?i(a):{}}}},601748:(a,b,c)=>{"use strict";c.d(b,{P:()=>i,e:()=>j});var d=c(257975),e=c(200797);function f(a){if("string"!=typeof a||0===a.length)throw new e.ExecutionExtensionError("execution_model_step_run_required");return a}function g(a,b){let c=Object.getOwnPropertyDescriptor(a,"executionModelStepOrdinals"),d=c&&Object.hasOwn(c,"value")&&c.enumerable?c.value:void 0;if(!h(d))throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let f=Object.getOwnPropertyDescriptors(d);if(2!==Reflect.ownKeys(f).length||!["logicalRunId","nextByNode"].every(a=>Object.hasOwn(f,a)&&Object.hasOwn(f[a],"value")&&f[a].enumerable)||f.logicalRunId.value!==b||!h(f.nextByNode.value))throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let g=Object.getOwnPropertyDescriptors(f.nextByNode.value);for(let a of Reflect.ownKeys(g)){try{(0,e.assertExecutionModelStepNodeId)(a)}catch{throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid")}let b=g[a],c=b.value;if(!Object.hasOwn(b,"value")||!b.enumerable||!b.writable||!Number.isSafeInteger(c)||c<0||c>e.MAX_EXECUTION_MODEL_STEP_ORDINAL+1)throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid")}return d}function h(a){return!!a&&"object"==typeof a&&!d.types.isProxy(a)&&[Object.prototype,null].includes(Object.getPrototypeOf(a))}function i(a,b){let c=f(a.logicalRunId);if(b!==c){a.executionModelStepOrdinals={logicalRunId:c,nextByNode:{}};return}g(a,c)}function j(a,b,c){(0,e.assertExecutionModelStepNodeId)(b);let d=f(c);if(a.logicalRunId!==d)throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let h=g(a,d),i=Object.hasOwn(h.nextByNode,b)?h.nextByNode[b]:0;if(i>e.MAX_EXECUTION_MODEL_STEP_ORDINAL)throw new e.ExecutionExtensionError("execution_model_step_slot_exhausted");return h.nextByNode[b]=i+1,i}},603050:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>h,iL:()=>g});let d="io.flujo/host-owner-scope",e=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function f(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}function g(a,b){let c=e(a);if(!c)return a;let g=e(c._meta),h=f(b)?b:void 0;if(void 0===h&&!Object.hasOwn(g??{},d))return a;let i={...g};return delete i[d],void 0!==h&&(i[d]=h),{...c,_meta:i}}function h(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=e(e(b)?._meta),g=c?.[d];return f(g)?g:void 0}catch{return}}},603886:(a,b,c)=>{"use strict";c.d(b,{y:()=>h});var d=c(295062);let e=["input_tokens","output_tokens","cache_creation_input_tokens","cache_read_input_tokens"],f=()=>({input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0}),g=(a,b)=>{for(let c of e)a[c]+=b[c]??0};class h{constructor(a){this.steps=new Map,this.activeSteps=new Map,this.observedAtResult=f(),this.childrenAtResult=f(),this.modelUsage={},this.anonymousId=0,this.cumulativeOffset=f(),this.cumulativeCostOffset=0,this.seenResults=new Set,this.checkpoint=a,this.baseline=this.countCheckpoint(a),this.baselineCost=a?.totalCostUsd??0}countCheckpoint(a){let b=f();for(let c of Object.values(a?.modelUsage??{}))g(b,{input_tokens:c.inputTokens,output_tokens:c.outputTokens,cache_read_input_tokens:c.cacheReadInputTokens,cache_creation_input_tokens:c.cacheCreationInputTokens});return b}observe(a){if(!a||"object"!=typeof a)return;let b=a.parent_tool_use_id??"";if("stream_event"===a.type){let c=a.event;if(c?.type==="message_start"&&c.message?.id)this.activeSteps.set(b,c.message.id),this.update(b,c.message.id,c.message.usage,c.message.model,!1);else if(c?.type==="message_delta"){let a=this.activeSteps.get(b);a&&this.update(b,a,c.usage,void 0,!0)}else c?.type==="message_stop"&&this.activeSteps.delete(b)}else if("assistant"===a.type&&a.message?.usage){let c=a.message,d=c.id??this.activeSteps.get(b)??a.uuid??`anonymous-${++this.anonymousId}`;this.update(b,d,c.usage,c.model,!1)}else if("result"===a.type){if(a.uuid&&this.seenResults.has(a.uuid)||(a.uuid&&this.seenResults.add(a.uuid),void 0!==a.result_index&&void 0!==this.lastResultIndex&&a.result_index<=this.lastResultIndex))return;void 0!==a.result_index&&(this.lastResultIndex=a.result_index);let b=Object.values(a.modelUsage??{});if((a.is_error||a.subtype?.startsWith("error"))&&!b.some(a=>(a.inputTokens??0)>0||(a.outputTokens??0)>0||(a.cacheReadInputTokens??0)>0||(a.cacheCreationInputTokens??0)>0)&&!e.some(b=>(a.usage?.[b]??0)>0))return;if(b.length){this.modelUsage=a.modelUsage;let c=f();for(let a of b)g(c,{input_tokens:a.inputTokens,output_tokens:a.outputTokens,cache_read_input_tokens:a.cacheReadInputTokens,cache_creation_input_tokens:a.cacheCreationInputTokens});let d=this.countCheckpoint(this.checkpoint);if(e.some(a=>c[a]<d[a])){for(let a of e)this.cumulativeOffset[a]+=Math.max(0,d[a]-this.baseline[a]);this.cumulativeCostOffset+=Math.max(0,(this.checkpoint?.totalCostUsd??0)-this.baselineCost),this.baseline=f(),this.baselineCost=0}for(let a of(this.reportedTotals=f(),e))this.reportedTotals[a]=this.cumulativeOffset[a]+Math.max(0,c[a]-this.baseline[a]);this.checkpoint={modelUsage:Object.fromEntries(Object.entries(a.modelUsage).map(([a,b])=>[a,{inputTokens:b.inputTokens??0,outputTokens:b.outputTokens??0,cacheReadInputTokens:b.cacheReadInputTokens??0,cacheCreationInputTokens:b.cacheCreationInputTokens??0}])),...Number.isFinite(a.total_cost_usd)?{totalCostUsd:a.total_cost_usd}:{}}}else{if(!a.usage)return;this.reportedTotals??=f(),g(this.reportedTotals,a.usage);let b=this.sumSteps(!0);for(let a of e)this.reportedTotals[a]+=Math.max(0,b[a]-this.childrenAtResult[a])}this.observedAtResult=this.sumSteps(),this.childrenAtResult=this.sumSteps(!0)}}update(a,b,c,d,f){if(!c)return;let g=`${a}\0${b}`,h=this.steps.get(g);for(let b of(!h&&(h={usage:{},hasOutput:!1,isChild:!!a},this.steps.set(g,h),a||(this.latestRootStep=h)),d&&(h.model=d),e)){if("output_tokens"===b&&!f)continue;let a=c[b];"number"==typeof a&&Number.isFinite(a)&&a>=0&&(h.usage[b]=a)}f&&null!=c.output_tokens&&(h.hasOutput=!0)}sumSteps(a=!1){let b=f();for(let c of this.steps.values())(!a||c.isChild)&&g(b,c.usage);return b}getUsage(){if(!this.reportedTotals&&!this.steps.size)return;let a=this.sumSteps();if(!this.reportedTotals)return a;let b={...this.reportedTotals};for(let c of e)b[c]+=Math.max(0,a[c]-this.observedAtResult[c]);return b}getCheckpoint(){return this.checkpoint}getAccounting(){return{scope:"completion",costBasis:"sdk-estimate",usage:this.getUsage(),...this.checkpoint?.totalCostUsd!==void 0?{estimatedCostUsd:this.cumulativeCostOffset+Math.max(0,this.checkpoint.totalCostUsd-this.baselineCost)}:{},childRequestUsage:this.sumSteps(!0)}}getContextUsage(a){let b=this.latestRootStep;if(!b||null==b.usage.input_tokens)return null;let c=(0,d.k)(b.usage),e=Object.values(this.modelUsage),f=(b.model?this.modelUsage[b.model]??e.find(a=>a.canonicalModel===b.model):1===e.length?e[0]:void 0)?.contextWindow,g="number"==typeof f&&Number.isFinite(f)&&f>0?f:void 0,h=g??a;return{promptTokens:c.promptTokens,...b.hasOutput?{completionTokens:c.completionTokens,totalTokens:c.totalTokens}:{},..."number"==typeof h&&Number.isFinite(h)&&h>0?{contextWindow:h,contextWindowSource:g?"runtime":"configured"}:{}}}}},608878:(a,b,c)=>{"use strict";c.d(b,{YA:()=>e,uz:()=>f});var d=c(193640);function e(a){return"stdio"===a.transport&&(0,d.G)(a.command,a.args??[])}function f(a){return e(a)?9e4:15e3}},617758:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{UQ:()=>L,e:()=>I,gf:()=>K,nK:()=>N,po:()=>M,q1:()=>G,s5:()=>H});var e=c(825969),f=c(328461),g=c(361784),h=c(687161),i=c(768680),j=c(964870),k=c(94917),l=c(275424),m=c(489428),n=c(116416),o=c(482964),p=c(296951),q=c(624788),r=c(621030),s=c(584861),t=c(510217),u=c(959654),v=c(405087),w=c(687720),x=c(646460),y=c(868644),z=c(622838),A=c(749976),B=c(216085),C=c(214799),D=c(157721),E=c(378591),F=a([s,z]);[s,z]=F.then?(await F)():F;let O=(0,o.h)("backend/services/mcp/betaClient");async function G(){try{let a=await (0,q.loadItem)(r.Zg.SPEECH_SETTINGS,void 0);return!!a?.experimental?.mcpBetaProtocol}catch(a){return O.warn("Failed to read mcpBetaProtocol setting; defaulting to disabled",{err:a}),!1}}function H(a){return!0===a.__flujoBeta}function I(a,b){let d=(0,z.jV)(a),l=(0,A.fy)(a),n=!0===a.enableMcpApps,o="stdio"===a.transport&&void 0===a.isolation,p={name:`flujo-${a.name}-client`,version:"3.48.1"},q={roots:{listChanged:!0},...d?{sampling:{}}:{},...o||l?{elicitation:{...o?{url:{}}:{},...l?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[h.ET]:{}}:{},...o?{[C.OM]:C.XC}:{},...n?{[B.OF]:{mimeTypes:[B.cM]}}:{}}},r=new m.Kj(p,{capabilities:q,listChanged:{tools:{autoRefresh:!1,onChanged:()=>{}},prompts:{autoRefresh:!1,onChanged:()=>{}},resources:{autoRefresh:!1,onChanged:()=>b?.()}},versionNegotiation:{mode:"stdio"===a.transport?"legacy":"auto"}}),t=(0,y.sG)(a,r),u=d?(0,z.c3)(a):void 0,v=o||l?(0,A.Cd)(a):void 0;if((0,e.zD)(r,"roots/list",t),u&&(0,e.zD)(r,"sampling/createMessage",u),v&&(0,e.zD)(r,"elicitation/create",v),r.setRequestHandler("roots/list",async(a,b)=>{b.mcpReq.signal.throwIfAborted();let c=await t();return b.mcpReq.signal.throwIfAborted(),c}),d&&r.setRequestHandler("sampling/createMessage",async(a,b)=>u(a,{signal:b.mcpReq.signal})),(o||l)&&r.setRequestHandler("elicitation/create",async(a,b)=>v(a,{signal:b.mcpReq.signal})),"stdio"!==a.transport&&void 0===a.isolation&&void 0===a.trustedHost){let b=(0,f.bindToCurrentWorkspace)(async()=>{if(!i.Gv.ENABLE_MCP_TASKS_CLIENT)return!1;let{mcpService:b}=await Promise.resolve().then(c.bind(c,373327));return b.getClient(a.name)===r});(0,g.Wk)(r,{endpointId:(0,f.workspaceCacheKey)(a.name),clientInfo:p,clientCapabilities:q,authorizeLateTaskCancellation:b,isAuthorityCurrent:b,handleInputRequest:(0,f.bindToCurrentWorkspace)(async(c,d,f)=>{let g=async()=>{if(d?.throwIfAborted(),!await b())throw Error("MCP Tasks input connection is no longer current");let c=(0,k.lx)(a.name);if(void 0!==f&&(!c||c.conversationId!==f||c.getUnattended()))throw Error("MCP Tasks input owner is no longer attended")};if(await g(),"elicitation/create"===c.method&&!l)throw Error("The requested MCP Tasks input capability is disabled");let h=await (0,e.jq)(r,c,{signal:d,assertCurrent:g,expectedConversationId:f});return await g(),j.t5.parse(h)})})}return r.__flujoBeta=!0,r.__flujoCapKey=(0,s.capabilityKey)(a),O.info(`Created split-SDK MCP client for ${a.name} (version negotiation: ${"stdio"===a.transport?"legacy":"auto"})`),r}function J(a){let b=a.requestInit&&"object"==typeof a.requestInit?a.requestInit:void 0;if(a.headers&&"object"==typeof a.headers){let c=(0,s.flattenCustomHeaders)(a.headers);Object.keys(c).length>0&&(b={...b||{},headers:{...b?.headers||{},...c}})}return b}function K(a,b){let c,d,e;if((0,p.SL)(a),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new u.Bk("ISOLATION_POLICY_INVALID");if("websocket"===a.transport)throw Error("The v2-beta MCP SDK has no websocket transport; use the v1 path");if("streamable"===a.transport){let b={},c=J(a);if(c&&(b.requestInit=c),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.oauthClientId||a.oauthClientInformation){let c=(0,t.Cl)(a);b.fetch=c.oauthFetch,b.authProvider=c}let d=new m.jS(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,s.httpConfigKey)(a),d.__flujoKind="streamable",O.info(`Created v2-beta streamable transport for ${a.name}`),d}if("sse"===a.transport){let b={},c=J(a);c&&(b.requestInit=c),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit);let d=new m.Am(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,s.httpConfigKey)(a),d.__flujoKind="sse",O.info(`Created v2-beta SSE transport for ${a.name}`),d}let{command:g,args:h,env:i,cwd:j,isolation:k}=(0,s.resolveStdioLaunch)(a,b),o=(0,f.getCurrentWorkspace)(),q=()=>(0,s.retireMcpRuntimeAuthority)(a.name,o,d,c);try{(0,s.assertMcpRuntimeAuthorityRetired)(a.name),d=(0,l.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,E.D9)(a.name):void 0;let f=d?(0,l.Uf)(a,d):{},m={command:g,args:h,env:{...i,...c?a.trustedHost?(0,w.s7)(a,c.env):c.env:{},...f},cwd:j,stderr:k?"ignore":"pipe",...k?{maxBufferSize:262144}:{}};k||(Object.freeze(m.args),Object.freeze(m.env),Object.freeze(m)),e=new n.oQ(m),k?(0,v.We)(e,a,k,q):a.trustedHost?(0,w.Zu)(e,a,q,d):((0,s.attachShippedWorkspaceReadiness)(e,a,j),(0,x.uR)(e,a,a=>JSON.stringify([(0,s.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),(0,s.capabilityKey)(a)])))}catch(b){let a=[];try{k?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new s.McpRuntimeAuthorityRetirementError([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}let r=e;return r.__flujoRuntimeBrokerLeaseId=c?.leaseId,r.__flujoBundledWorkload=d,r.__flujoRetireRuntimeAuthority=q,r.__flujoStdioKey=(0,s.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),r.__flujoKind="stdio",P.set(e,new D.$6),O.info(`Created v2-beta stdio transport for ${a.name}`),e}let P=new WeakMap;function L(a){return P.get(a)}function M(a){P.get(a)?.attach(a)}function N(a){if(H(a))try{return a.getNegotiatedProtocolVersion()}catch{return}}d()}catch(a){d(a)}})},618836:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(204583),e=c(482964),f=c(624788),g=c(621030),h=c(4551),i=c(770059);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Zg.GLOBAL_ENV_VARS,{}),e=!!d&&"object"==typeof d&&Object.values(d).every(a=>{if(!a||"object"!=typeof a)return!1;let b=a.metadata;return"string"==typeof a.value&&null!==b&&"object"==typeof b&&"boolean"==typeof b.isSecret});j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i=new Map,l=new Set;if(e)for(let[a,b]of Object.entries(d))i.set(a,b.value),b.metadata.isSecret&&l.add(a);else for(let[a,b]of Object.entries(d))i.set(a,b);let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1),e=i.get(b);if(void 0!==e){let f=e;if(!c&&(l.has(b)||f.startsWith("encrypted:")||f.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(f.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=f.substring(10),c=await (0,h.Do)(a);if(c)f=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(f.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,f)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b=new Map;for(let[c,d]of Object.entries(a))b.set(c,await n(d));return Object.fromEntries(b)}return a},o=await n(a);return j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn("Maximum resolution depth reached (10)"),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.Do)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"6010e875bb1ec447b1991123e680a44c5158f676c8",null),(0,d.A)(l,"405d4ac0f7a3aed328e0357aaa74ee748da3fff638",null),(0,d.A)(m,"60348b8c89fec0e88537cd36a5ef925ab95adc8ecb",null)},620968:(a,b,c)=>{"use strict";c.d(b,{M4:()=>i});var d=c(482964),e=c(943990),f=c(927739);let g=(0,d.h)("backend/flow/execution/resolveRunResourceRefs"),h=/\$\{res:([^}]+)\}/g;async function i(a,b,c,d,j={}){if(!a||!a.includes("${res:")||!b)return a?a.replace(h,""):a;h.lastIndex=0;let k=new Set;for(let b=h.exec(a);b;b=h.exec(a))k.add(b[1]);let l=new Map;for(let a of k){let h="";try{let i=await (0,e.FA)(b,a.trim());if(i){let b=await (0,f.Gi)(j,async()=>{let b=await (0,e.gy)(i.uri,{at:Date.now(),source:"res-ref",nodeId:d?.nodeId});return b&&c?.({type:"resource:read",node:d,server:"flujo",uri:i.uri,name:a,mimeType:i.mimeType,size:i.size,source:"res-ref"}),b});if(b){let c=b.contents.contents[0];if(c&&"string"==typeof c.text&&"link"!==i.kind)h=`
|
|
120
|
+
${d}`:d}c.d(b,{gL:()=>d}),c(880013)},588054:(a,b,c)=>{"use strict";c.d(b,{B:()=>j,_:()=>i});var d=c(977598),e=c(482964),f=c(328461);let g=(0,e.h)("backend/services/model/cache");class h{#a;credentialFingerprint(a){return(0,d.createHmac)("sha256",this.#a).update("flujo:provider-catalogue:credential:v1\0","utf8").update(a,"utf8").digest("hex")}currentCache(){let a=(0,f.getCurrentWorkspace)(),b=this.caches.get(a);return b||(b=new Map,this.caches.set(a,b)),b}normalizeTarget(a){return"string"==typeof a?{baseUrl:a}:a}getCacheKey(a){let b=this.normalizeTarget(a),c=b.baseUrl.trim().toLowerCase().replace(/\/$/,"");return JSON.stringify([b.profileId??"",b.provider??"",b.adapter??"",c,b.credentialFingerprint??""])}logIdentity(a){let b=this.normalizeTarget(a);return{baseUrl:b.baseUrl,...b.provider?{provider:b.provider}:{},...b.adapter?{adapter:b.adapter}:{},...b.profileId?{profileId:b.profileId}:{}}}isValid(a){return Date.now()-a.timestamp<a.ttl}get(a){let b=this.getCacheKey(a),c=this.currentCache(),d=c.get(b),e=this.logIdentity(a);return d?this.isValid(d)?(g.debug("Cache hit",{...e,modelCount:d.models.length}),d.models):(g.debug("Cache miss - entry expired",{...e,age:Date.now()-d.timestamp}),c.delete(b),null):(g.debug("Cache miss - no entry found",e),null)}set(a,b,c){let d=this.getCacheKey(a),e={models:b,timestamp:Date.now(),ttl:c||this.DEFAULT_TTL};this.currentCache().set(d,e),g.debug("Models cached",{...this.logIdentity(a),modelCount:b.length,ttl:e.ttl})}clear(a){let b=this.getCacheKey(a),c=this.currentCache().delete(b);g.debug("Cache cleared",{...this.logIdentity(a),deleted:c})}clearAll(){let a=this.currentCache(),b=a.size;a.clear(),g.debug("All cache cleared",{entriesCleared:b})}getStats(){let a=this.currentCache(),b=a.size,c=0,d=0;for(let b of a.values())this.isValid(b)?c++:d++;return{totalEntries:b,validEntries:c,expiredEntries:d}}cleanup(){let a=this.currentCache(),b=[];for(let[c,d]of a.entries())this.isValid(d)||b.push(c);b.forEach(b=>a.delete(b)),b.length>0&&g.debug("Cache cleanup completed",{expiredEntriesRemoved:b.length})}constructor(){this.caches=new Map,this.DEFAULT_TTL=3e5,this.#a=(0,d.randomBytes)(32)}}let i=new h;function j(a,b){if(!b||0===b.trim().length)return a;let c=b.toLowerCase().trim();return a.filter(a=>{let b=a.id.toLowerCase(),d=a.name.toLowerCase();if(b.includes(c)||d.includes(c))return!0;let e=a=>{let b=0,d=0;for(;b<a.length&&d<c.length;)a[b]===c[d]&&d++,b++;return d===c.length};return e(b)||e(d)}).sort((a,b)=>{let d=a.id.toLowerCase(),e=b.id.toLowerCase(),f=a.name.toLowerCase(),g=b.name.toLowerCase(),h=d.includes(c)||f.includes(c),i=e.includes(c)||g.includes(c);return h&&!i?-1:!h&&i?1:a.id.length-b.id.length})}},595075:(a,b,c)=>{"use strict";function d(a,b){if("low"===b)return 1024;if(a.startsWith("data:image/png;base64,")){let b=Buffer.from(a.slice(22,70),"base64");if(b.length>=24&&b.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10]))){let a=b.readUInt32BE(16),c=b.readUInt32BE(20);if(a&&c)return Math.ceil(a/32)*Math.ceil(c/32)*3}}if(/^data:image\/jpe?g;base64,/i.test(a.slice(0,24))){let b=a.indexOf(",")+1,c=Buffer.from(a.slice(b,b+87384),"base64");for(let a=2;a+9<c.length&&255===c[a];){let b=c[a+1],d=c.readUInt16BE(a+2);if(d<2)break;if([192,193,194].includes(b))return Math.ceil(c.readUInt16BE(a+5)/32)*Math.ceil(c.readUInt16BE(a+7)/32)*3;a+=d+2}}return 8192}function e(a,b,c){let e=0,f=JSON.stringify({messages:a.map(a=>Array.isArray(a.content)?{...a,content:a.content.map(a=>"image_url"!==a.type?a:(e+=d(a.image_url.url,a.image_url.detail),{...a,image_url:{...a.image_url,url:"[native image]"}}))}:a),tools:b??[]});return e+((c?.provider==="openrouter"||c?.adapter==="openrouter-agent")&&c?.name.startsWith("anthropic/")?Buffer.byteLength(f,"utf8"):Math.ceil(f.length/4))}c.d(b,{e:()=>d,y:()=>e})},600916:(a,b,c)=>{"use strict";function d(){let a=!0,b=new Set,c=()=>{if(!a)throw Error("Held read callback scope ended.")};return{assertActive:c,run(a){let d=(async()=>{c();let b=await a();return c(),b})();return b.add(d),d.then(()=>b.delete(d),()=>b.delete(d)),d},async close(){a=!1,await Promise.allSettled([...b])}}}c.d(b,{K:()=>d})},600950:(a,b,c)=>{"use strict";c.d(b,{Jm:()=>h,UR:()=>j,hc:()=>f,kA:()=>k,lr:()=>g,zJ:()=>i});var d=c(130214);let e=new Set(["image","audio","video"]);function f(a){if(a.type&&e.has(a.type))return a.type;if("resource"===a.type&&a.resource&&"string"==typeof a.resource.blob){let b="string"==typeof a.resource.mimeType?a.resource.mimeType:void 0,c=(0,d.X)(b);return"file"===c?void 0:c}}function g(a){let b=f(a),c=i(a);if(!b||!c)return;let d=h(a);return{type:b,data:c,...d?{mimeType:d}:{}}}function h(a){if("string"==typeof a.mimeType)return a.mimeType;let b=a.resource?.mimeType;return"string"==typeof b?b:void 0}function i(a){if("string"==typeof a.data)return a.data;let b=a.resource?.blob;return"string"==typeof b?b:void 0}function j(a){if(!a||!Array.isArray(a.content))return{mediaItems:[],textResult:a,hasMedia:!1};let b=[],c=[];for(let d of a.content){let a=f(d);a?(b.push(d),c.push(function(a,b){let c=h(a)??b,d=i(a)?.length,e=d?` ~${Math.round(3*d/4/1024)} KB`:"";return{type:"text",text:`[${c}${e} media item returned by this tool; delivered to the model as a native ${b} input rather than inline base64]`}}(d,a))):c.push(d)}return 0===b.length?{mediaItems:[],textResult:a,hasMedia:!1}:{mediaItems:b,textResult:{...a,content:c},hasMedia:!0}}function k(a,b,c){return{type:b,...a.mimeType?{mimeType:a.mimeType}:{},...a.name?{name:a.name}:{},resourceUri:a.uri,...c?{localPath:c}:{}}}},601236:(a,b,c)=>{"use strict";c.d(b,{Wn:()=>j,k$:()=>g,n7:()=>k});var d=c(176760),e=c.n(d),f=c(648286);let g="restricted-startup-policy-v1",h=()=>{throw Error("Native Codex startup configuration is unavailable.")};function i(a){let b,c=a.model_providers,d=c?.inventory?.base_url;if("inventory"!==a.model_provider||"string"!=typeof d)return h();try{b=new URL(d)}catch{return h()}return"http:"!==b.protocol||"127.0.0.1"!==b.hostname||!b.port||b.username||b.password||b.search||b.hash||"/"!==b.pathname?h():{model_provider:"inventory",check_for_update_on_startup:!1,analytics:{enabled:!1},features:{...f.Hg.features,enable_request_compression:!1,unbounded_connection_retries:!1},model_providers:{inventory:{name:"Source offline inventory fixture",base_url:d,wire_api:"responses",requires_openai_auth:!1,supports_websockets:!1,request_max_retries:0,stream_max_retries:0}}}}function j(a){if(!e().isAbsolute(a.cwd))return h();let b=["project_root_markers=[]",`projects.${JSON.stringify(a.cwd)}.trust_level="untrusted"`];if(a.neutralTrustOverrides&&JSON.stringify(a.neutralTrustOverrides)!==JSON.stringify(b))return h();let{forced_login_method:c,...d}=f.Hg,g={...d,..."chatgpt"===a.authentication?{forced_login_method:c}:{}},j=a.config.model_catalog_json;if(void 0!==j){if("string"!=typeof j||!e().isAbsolute(j))return h();g.model_catalog_json=j}"offline-inventory"===a.authentication&&Object.assign(g,i(a.config));let k=b.flatMap(a=>["-c",a]),l=(a,b)=>{if("string"==typeof a||"boolean"==typeof a)k.push("-c",`${b}=${JSON.stringify(a)}`);else if("number"==typeof a&&Number.isFinite(a))k.push("-c",`${b}=${a}`);else if(!a||"object"!=typeof a||Array.isArray(a))return h();else for(let[c,d]of Object.entries(a))l(d,b?`${b}.${c}`:c)};for(let[a,b]of Object.entries(g))l(b,a);return k.length>256||k.reduce((a,b)=>a+Buffer.byteLength(b),0)>32768?h():k}function k(a,b){let{forced_login_method:c,...d}=a,{forced_login_method:e,...g}=f.Hg;return{...d,...g,..."chatgpt"===b?{forced_login_method:e}:{},..."offline-inventory"===b?i(a):{}}}},601748:(a,b,c)=>{"use strict";c.d(b,{P:()=>i,e:()=>j});var d=c(257975),e=c(200797);function f(a){if("string"!=typeof a||0===a.length)throw new e.ExecutionExtensionError("execution_model_step_run_required");return a}function g(a,b){let c=Object.getOwnPropertyDescriptor(a,"executionModelStepOrdinals"),d=c&&Object.hasOwn(c,"value")&&c.enumerable?c.value:void 0;if(!h(d))throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let f=Object.getOwnPropertyDescriptors(d);if(2!==Reflect.ownKeys(f).length||!["logicalRunId","nextByNode"].every(a=>Object.hasOwn(f,a)&&Object.hasOwn(f[a],"value")&&f[a].enumerable)||f.logicalRunId.value!==b||!h(f.nextByNode.value))throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let g=Object.getOwnPropertyDescriptors(f.nextByNode.value);for(let a of Reflect.ownKeys(g)){try{(0,e.assertExecutionModelStepNodeId)(a)}catch{throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid")}let b=g[a],c=b.value;if(!Object.hasOwn(b,"value")||!b.enumerable||!b.writable||!Number.isSafeInteger(c)||c<0||c>e.MAX_EXECUTION_MODEL_STEP_ORDINAL+1)throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid")}return d}function h(a){return!!a&&"object"==typeof a&&!d.types.isProxy(a)&&[Object.prototype,null].includes(Object.getPrototypeOf(a))}function i(a,b){let c=f(a.logicalRunId);if(b!==c){a.executionModelStepOrdinals={logicalRunId:c,nextByNode:{}};return}g(a,c)}function j(a,b,c){(0,e.assertExecutionModelStepNodeId)(b);let d=f(c);if(a.logicalRunId!==d)throw new e.ExecutionExtensionError("execution_model_step_run_state_invalid");let h=g(a,d),i=Object.hasOwn(h.nextByNode,b)?h.nextByNode[b]:0;if(i>e.MAX_EXECUTION_MODEL_STEP_ORDINAL)throw new e.ExecutionExtensionError("execution_model_step_slot_exhausted");return h.nextByNode[b]=i+1,i}},603050:(a,b,c)=>{"use strict";c.d(b,{AQ:()=>h,iL:()=>g});let d="io.flujo/host-owner-scope",e=a=>null===a||"object"!=typeof a||Array.isArray(a)?void 0:a;function f(a){return"string"==typeof a&&a.length>0&&a.length<=512&&a.trim()===a}function g(a,b){let c=e(a);if(!c)return a;let g=e(c._meta),h=f(b)?b:void 0;if(void 0===h&&!Object.hasOwn(g??{},d))return a;let i={...g};return delete i[d],void 0!==h&&(i[d]=h),{...c,_meta:i}}function h(a){if(void 0!==a)try{let b="string"==typeof a?JSON.parse(a):a,c=e(e(b)?._meta),g=c?.[d];return f(g)?g:void 0}catch{return}}},603886:(a,b,c)=>{"use strict";c.d(b,{y:()=>h});var d=c(295062);let e=["input_tokens","output_tokens","cache_creation_input_tokens","cache_read_input_tokens"],f=()=>({input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0}),g=(a,b)=>{for(let c of e)a[c]+=b[c]??0};class h{constructor(a){this.steps=new Map,this.activeSteps=new Map,this.observedAtResult=f(),this.childrenAtResult=f(),this.modelUsage={},this.anonymousId=0,this.cumulativeOffset=f(),this.cumulativeCostOffset=0,this.seenResults=new Set,this.checkpoint=a,this.baseline=this.countCheckpoint(a),this.baselineCost=a?.totalCostUsd??0}countCheckpoint(a){let b=f();for(let c of Object.values(a?.modelUsage??{}))g(b,{input_tokens:c.inputTokens,output_tokens:c.outputTokens,cache_read_input_tokens:c.cacheReadInputTokens,cache_creation_input_tokens:c.cacheCreationInputTokens});return b}observe(a){if(!a||"object"!=typeof a)return;let b=a.parent_tool_use_id??"";if("stream_event"===a.type){let c=a.event;if(c?.type==="message_start"&&c.message?.id)this.activeSteps.set(b,c.message.id),this.update(b,c.message.id,c.message.usage,c.message.model,!1);else if(c?.type==="message_delta"){let a=this.activeSteps.get(b);a&&this.update(b,a,c.usage,void 0,!0)}else c?.type==="message_stop"&&this.activeSteps.delete(b)}else if("assistant"===a.type&&a.message?.usage){let c=a.message,d=c.id??this.activeSteps.get(b)??a.uuid??`anonymous-${++this.anonymousId}`;this.update(b,d,c.usage,c.model,!1)}else if("result"===a.type){if(a.uuid&&this.seenResults.has(a.uuid)||(a.uuid&&this.seenResults.add(a.uuid),void 0!==a.result_index&&void 0!==this.lastResultIndex&&a.result_index<=this.lastResultIndex))return;void 0!==a.result_index&&(this.lastResultIndex=a.result_index);let b=Object.values(a.modelUsage??{});if((a.is_error||a.subtype?.startsWith("error"))&&!b.some(a=>(a.inputTokens??0)>0||(a.outputTokens??0)>0||(a.cacheReadInputTokens??0)>0||(a.cacheCreationInputTokens??0)>0)&&!e.some(b=>(a.usage?.[b]??0)>0))return;if(b.length){this.modelUsage=a.modelUsage;let c=f();for(let a of b)g(c,{input_tokens:a.inputTokens,output_tokens:a.outputTokens,cache_read_input_tokens:a.cacheReadInputTokens,cache_creation_input_tokens:a.cacheCreationInputTokens});let d=this.countCheckpoint(this.checkpoint);if(e.some(a=>c[a]<d[a])){for(let a of e)this.cumulativeOffset[a]+=Math.max(0,d[a]-this.baseline[a]);this.cumulativeCostOffset+=Math.max(0,(this.checkpoint?.totalCostUsd??0)-this.baselineCost),this.baseline=f(),this.baselineCost=0}for(let a of(this.reportedTotals=f(),e))this.reportedTotals[a]=this.cumulativeOffset[a]+Math.max(0,c[a]-this.baseline[a]);this.checkpoint={modelUsage:Object.fromEntries(Object.entries(a.modelUsage).map(([a,b])=>[a,{inputTokens:b.inputTokens??0,outputTokens:b.outputTokens??0,cacheReadInputTokens:b.cacheReadInputTokens??0,cacheCreationInputTokens:b.cacheCreationInputTokens??0}])),...Number.isFinite(a.total_cost_usd)?{totalCostUsd:a.total_cost_usd}:{}}}else{if(!a.usage)return;this.reportedTotals??=f(),g(this.reportedTotals,a.usage);let b=this.sumSteps(!0);for(let a of e)this.reportedTotals[a]+=Math.max(0,b[a]-this.childrenAtResult[a])}this.observedAtResult=this.sumSteps(),this.childrenAtResult=this.sumSteps(!0)}}update(a,b,c,d,f){if(!c)return;let g=`${a}\0${b}`,h=this.steps.get(g);for(let b of(!h&&(h={usage:{},hasOutput:!1,isChild:!!a},this.steps.set(g,h),a||(this.latestRootStep=h)),d&&(h.model=d),e)){if("output_tokens"===b&&!f)continue;let a=c[b];"number"==typeof a&&Number.isFinite(a)&&a>=0&&(h.usage[b]=a)}f&&null!=c.output_tokens&&(h.hasOutput=!0)}sumSteps(a=!1){let b=f();for(let c of this.steps.values())(!a||c.isChild)&&g(b,c.usage);return b}getUsage(){if(!this.reportedTotals&&!this.steps.size)return;let a=this.sumSteps();if(!this.reportedTotals)return a;let b={...this.reportedTotals};for(let c of e)b[c]+=Math.max(0,a[c]-this.observedAtResult[c]);return b}getCheckpoint(){return this.checkpoint}getAccounting(){return{scope:"completion",costBasis:"sdk-estimate",usage:this.getUsage(),...this.checkpoint?.totalCostUsd!==void 0?{estimatedCostUsd:this.cumulativeCostOffset+Math.max(0,this.checkpoint.totalCostUsd-this.baselineCost)}:{},childRequestUsage:this.sumSteps(!0)}}getContextUsage(a){let b=this.latestRootStep;if(!b||null==b.usage.input_tokens)return null;let c=(0,d.k)(b.usage),e=Object.values(this.modelUsage),f=(b.model?this.modelUsage[b.model]??e.find(a=>a.canonicalModel===b.model):1===e.length?e[0]:void 0)?.contextWindow,g="number"==typeof f&&Number.isFinite(f)&&f>0?f:void 0,h=g??a;return{promptTokens:c.promptTokens,...b.hasOutput?{completionTokens:c.completionTokens,totalTokens:c.totalTokens}:{},..."number"==typeof h&&Number.isFinite(h)&&h>0?{contextWindow:h,contextWindowSource:g?"runtime":"configured"}:{}}}}},608878:(a,b,c)=>{"use strict";c.d(b,{YA:()=>e,uz:()=>f});var d=c(193640);function e(a){return"stdio"===a.transport&&(0,d.G)(a.command,a.args??[])}function f(a){return e(a)?9e4:15e3}},617758:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{UQ:()=>L,e:()=>I,gf:()=>K,nK:()=>N,po:()=>M,q1:()=>G,s5:()=>H});var e=c(825969),f=c(328461),g=c(361784),h=c(687161),i=c(768680),j=c(964870),k=c(94917),l=c(275424),m=c(489428),n=c(116416),o=c(482964),p=c(296951),q=c(624788),r=c(621030),s=c(584861),t=c(510217),u=c(959654),v=c(405087),w=c(687720),x=c(646460),y=c(868644),z=c(622838),A=c(749976),B=c(216085),C=c(214799),D=c(157721),E=c(378591),F=a([s,z]);[s,z]=F.then?(await F)():F;let O=(0,o.h)("backend/services/mcp/betaClient");async function G(){try{let a=await (0,q.loadItem)(r.Zg.SPEECH_SETTINGS,void 0);return!!a?.experimental?.mcpBetaProtocol}catch(a){return O.warn("Failed to read mcpBetaProtocol setting; defaulting to disabled",{err:a}),!1}}function H(a){return!0===a.__flujoBeta}function I(a,b){let d=(0,z.jV)(a),l=(0,A.fy)(a),n=!0===a.enableMcpApps,o="stdio"===a.transport&&void 0===a.isolation,p={name:`flujo-${a.name}-client`,version:"3.48.2"},q={roots:{listChanged:!0},...d?{sampling:{}}:{},...o||l?{elicitation:{...o?{url:{}}:{},...l?{form:{}}:{}}}:{},extensions:{...!0===a.enableMcpSkills?{[h.ET]:{}}:{},...o?{[C.OM]:C.XC}:{},...n?{[B.OF]:{mimeTypes:[B.cM]}}:{}}},r=new m.Kj(p,{capabilities:q,listChanged:{tools:{autoRefresh:!1,onChanged:()=>{}},prompts:{autoRefresh:!1,onChanged:()=>{}},resources:{autoRefresh:!1,onChanged:()=>b?.()}},versionNegotiation:{mode:"stdio"===a.transport?"legacy":"auto"}}),t=(0,y.sG)(a,r),u=d?(0,z.c3)(a):void 0,v=o||l?(0,A.Cd)(a):void 0;if((0,e.zD)(r,"roots/list",t),u&&(0,e.zD)(r,"sampling/createMessage",u),v&&(0,e.zD)(r,"elicitation/create",v),r.setRequestHandler("roots/list",async(a,b)=>{b.mcpReq.signal.throwIfAborted();let c=await t();return b.mcpReq.signal.throwIfAborted(),c}),d&&r.setRequestHandler("sampling/createMessage",async(a,b)=>u(a,{signal:b.mcpReq.signal})),(o||l)&&r.setRequestHandler("elicitation/create",async(a,b)=>v(a,{signal:b.mcpReq.signal})),"stdio"!==a.transport&&void 0===a.isolation&&void 0===a.trustedHost){let b=(0,f.bindToCurrentWorkspace)(async()=>{if(!i.Gv.ENABLE_MCP_TASKS_CLIENT)return!1;let{mcpService:b}=await Promise.resolve().then(c.bind(c,373327));return b.getClient(a.name)===r});(0,g.Wk)(r,{endpointId:(0,f.workspaceCacheKey)(a.name),clientInfo:p,clientCapabilities:q,authorizeLateTaskCancellation:b,isAuthorityCurrent:b,handleInputRequest:(0,f.bindToCurrentWorkspace)(async(c,d,f)=>{let g=async()=>{if(d?.throwIfAborted(),!await b())throw Error("MCP Tasks input connection is no longer current");let c=(0,k.lx)(a.name);if(void 0!==f&&(!c||c.conversationId!==f||c.getUnattended()))throw Error("MCP Tasks input owner is no longer attended")};if(await g(),"elicitation/create"===c.method&&!l)throw Error("The requested MCP Tasks input capability is disabled");let h=await (0,e.jq)(r,c,{signal:d,assertCurrent:g,expectedConversationId:f});return await g(),j.t5.parse(h)})})}return r.__flujoBeta=!0,r.__flujoCapKey=(0,s.capabilityKey)(a),O.info(`Created split-SDK MCP client for ${a.name} (version negotiation: ${"stdio"===a.transport?"legacy":"auto"})`),r}function J(a){let b=a.requestInit&&"object"==typeof a.requestInit?a.requestInit:void 0;if(a.headers&&"object"==typeof a.headers){let c=(0,s.flattenCustomHeaders)(a.headers);Object.keys(c).length>0&&(b={...b||{},headers:{...b?.headers||{},...c}})}return b}function K(a,b){let c,d,e;if((0,p.SL)(a),(void 0!==a.isolation||void 0!==a.trustedHost)&&"stdio"!==a.transport)throw new u.Bk("ISOLATION_POLICY_INVALID");if("websocket"===a.transport)throw Error("The v2-beta MCP SDK has no websocket transport; use the v1 path");if("streamable"===a.transport){let b={},c=J(a);if(c&&(b.requestInit=c),a.reconnectionOptions&&"object"==typeof a.reconnectionOptions&&(b.reconnectionOptions=a.reconnectionOptions),"string"==typeof a.sessionId&&a.sessionId.length>0&&(b.sessionId=a.sessionId),a.oauthClientId||a.oauthClientInformation){let c=(0,t.Cl)(a);b.fetch=c.oauthFetch,b.authProvider=c}let d=new m.jS(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,s.httpConfigKey)(a),d.__flujoKind="streamable",O.info(`Created v2-beta streamable transport for ${a.name}`),d}if("sse"===a.transport){let b={},c=J(a);c&&(b.requestInit=c),a.eventSourceInit&&"object"==typeof a.eventSourceInit&&(b.eventSourceInit=a.eventSourceInit);let d=new m.Am(new URL(a.serverUrl),b);return d.__flujoHttpKey=(0,s.httpConfigKey)(a),d.__flujoKind="sse",O.info(`Created v2-beta SSE transport for ${a.name}`),d}let{command:g,args:h,env:i,cwd:j,isolation:k}=(0,s.resolveStdioLaunch)(a,b),o=(0,f.getCurrentWorkspace)(),q=()=>(0,s.retireMcpRuntimeAuthority)(a.name,o,d,c);try{(0,s.assertMcpRuntimeAuthorityRetired)(a.name),d=(0,l.bG)(a),c=b?.enableRuntimeBroker&&!0===a.enableMcpApps?(0,E.D9)(a.name):void 0;let f=d?(0,l.Uf)(a,d):{},m={command:g,args:h,env:{...i,...c?a.trustedHost?(0,w.s7)(a,c.env):c.env:{},...f},cwd:j,stderr:k?"ignore":"pipe",...k?{maxBufferSize:262144}:{}};k||(Object.freeze(m.args),Object.freeze(m.env),Object.freeze(m)),e=new n.oQ(m),k?(0,v.We)(e,a,k,q):a.trustedHost?(0,w.Zu)(e,a,q,d):((0,s.attachShippedWorkspaceReadiness)(e,a,j),(0,x.uR)(e,a,a=>JSON.stringify([(0,s.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),(0,s.capabilityKey)(a)])))}catch(b){let a=[];try{k?.close()}catch(b){a.push(b)}try{q()}catch(b){a.push(b)}if(a.length)throw new s.McpRuntimeAuthorityRetirementError([b,...a],"MCP transport creation and authority retirement failed.",{cause:b});throw b}let r=e;return r.__flujoRuntimeBrokerLeaseId=c?.leaseId,r.__flujoBundledWorkload=d,r.__flujoRetireRuntimeAuthority=q,r.__flujoStdioKey=(0,s.stdioConfigKey)(a,b?.isolateRuntimeHome===!0),r.__flujoKind="stdio",P.set(e,new D.$6),O.info(`Created v2-beta stdio transport for ${a.name}`),e}let P=new WeakMap;function L(a){return P.get(a)}function M(a){P.get(a)?.attach(a)}function N(a){if(H(a))try{return a.getNegotiatedProtocolVersion()}catch{return}}d()}catch(a){d(a)}})},618836:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(204583),e=c(482964),f=c(624788),g=c(621030),h=c(4551),i=c(770059);let j=(0,e.h)("backend/utils/resolveGlobalVars");async function k(a,b={}){j.debug("Entering resolveGlobalVars method");let c=!1!==b.resolveSecrets,d=await (0,f.loadItem)(g.Zg.GLOBAL_ENV_VARS,{}),e=!!d&&"object"==typeof d&&Object.values(d).every(a=>{if(!a||"object"!=typeof a)return!1;let b=a.metadata;return"string"==typeof a.value&&null!==b&&"object"==typeof b&&"boolean"==typeof b.isSecret});j.debug(`Loaded ${Object.keys(d).length} global environment variables (${e?"new":"old"} format)`);let i=new Map,l=new Set;if(e)for(let[a,b]of Object.entries(d))i.set(a,b.value),b.metadata.isSecret&&l.add(a);else for(let[a,b]of Object.entries(d))i.set(a,b);let m=async a=>{let b=a.match(/\$\{global:([^}]+)\}/g);if(!b)return a;let d=a;for(let a of b){let b=a.substring(9,a.length-1),e=i.get(b);if(void 0!==e){let f=e;if(!c&&(l.has(b)||f.startsWith("encrypted:")||f.startsWith("encrypted_failed:"))){j.debug(`Keeping secret global variable unresolved: ${b}`);continue}if(f.startsWith("encrypted:")){j.debug(`Decrypting encrypted global variable: ${b}`);try{let a=f.substring(10),c=await (0,h.Do)(a);if(c)f=c,j.debug(`Successfully decrypted global variable: ${b}`);else{j.warn(`Failed to decrypt global variable: ${b}`);continue}}catch(a){j.error(`Error decrypting global variable: ${b}`,a);continue}}else if(f.startsWith("encrypted_failed:")){j.warn(`Skipping failed encrypted global variable: ${b}`);continue}j.debug(`Resolved global variable: ${b}`),d=d.replace(a,f)}else j.warn(`Global variable not found: ${b}`)}return d},n=async a=>{if("string"==typeof a)return await m(a);if(Array.isArray(a))return await Promise.all(a.map(a=>n(a)));if(null!==a&&"object"==typeof a){let b=new Map;for(let[c,d]of Object.entries(a))b.set(c,await n(d));return Object.fromEntries(b)}return a},o=await n(a);return j.debug("Completed global variable resolution"),o}async function l(a){return k(a,{resolveSecrets:!1})}async function m(a,b=0){if(j.debug(`Entering resolveAndDecryptApiKey method (depth: ${b})`),!a)return j.warn("Empty value provided"),null;if(b>=10)return j.warn("Maximum resolution depth reached (10)"),a;let c=a;if(c.startsWith("encrypted:")){j.debug(`Decrypting encrypted value at depth ${b}`);try{let a=c.substring(10),d=await (0,h.Do)(a);if(!d)return j.warn(`Failed to decrypt value at depth ${b}`),null;j.debug(`Successfully decrypted value at depth ${b}`),c=d}catch(a){return j.error(`Error decrypting value at depth ${b}:`,a),null}}else c.startsWith("encrypted_failed:")&&(j.warn(`Skipping failed encrypted value at depth ${b}`),c=c.substring(17));if(c.includes("${global:")){j.debug(`Resolving global variables at depth ${b}`);try{let a=await k(c);if(a!==c)return j.debug(`Value changed after resolving globals at depth ${b}, processing recursively`),m(a,b+1);c=a}catch(a){return j.error(`Error resolving global variables at depth ${b}:`,a),null}}return j.debug(`Completed resolveAndDecryptApiKey at depth ${b}`),c}(0,i.D)([k,l,m]),(0,d.A)(k,"603178a35b1410c0aaf391136953b3bb477ab58c61",null),(0,d.A)(l,"408e95c9b906f3ef839dde556a95e6adaefe9dc1be",null),(0,d.A)(m,"605160b4fcfcb41b05d153a2ecabb01cd2c84a62bb",null)},620968:(a,b,c)=>{"use strict";c.d(b,{M4:()=>i});var d=c(482964),e=c(943990),f=c(927739);let g=(0,d.h)("backend/flow/execution/resolveRunResourceRefs"),h=/\$\{res:([^}]+)\}/g;async function i(a,b,c,d,j={}){if(!a||!a.includes("${res:")||!b)return a?a.replace(h,""):a;h.lastIndex=0;let k=new Set;for(let b=h.exec(a);b;b=h.exec(a))k.add(b[1]);let l=new Map;for(let a of k){let h="";try{let i=await (0,e.FA)(b,a.trim());if(i){let b=await (0,f.Gi)(j,async()=>{let b=await (0,e.gy)(i.uri,{at:Date.now(),source:"res-ref",nodeId:d?.nodeId});return b&&c?.({type:"resource:read",node:d,server:"flujo",uri:i.uri,name:a,mimeType:i.mimeType,size:i.size,source:"res-ref"}),b});if(b){let c=b.contents.contents[0];if(c&&"string"==typeof c.text&&"link"!==i.kind)h=`
|
|
121
121
|
--- resource ${a} (${i.uri}) ---
|
|
122
122
|
${c.text}
|
|
123
123
|
--- end resource ${a} ---
|