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,5 +1,5 @@
|
|
|
1
|
-
exports.id=28644,exports.ids=[28644],exports.modules={12778:(a,b,c)=>{"use strict";c.d(b,{dw:()=>k,gF:()=>h,re:()=>e});var d=c(178877);class e extends Error{constructor(a,b){super(429===b?"Conversation history reads are busy. Retry shortly.":"Insufficient memory to safely load complete conversation history. Retry after active work finishes."),this.code=a,this.status=b,this.name="ConversationLogReadPressureError"}}let f=globalThis,g=f.__flujoConversationLogReadAdmission??={active:0,bytes:0},h=4,i=new WeakMap;function j(a){let b=16*a+131072,c=(0,d.getHeapStatistics)();if(!Number.isSafeInteger(b)||a<0||g.bytes+b>c.heap_size_limit-c.used_heap_size-0x4000000)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}async function k(a,b,c){if(void 0!==c){let d=c&&i.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let e=j(a);g.bytes+=e;let f=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=e});return d.pending.add(f),f.then(()=>d.pending.delete(f),()=>d.pending.delete(f)),f}if(g.active>=h)throw new e("CONVERSATION_LOG_READ_BUSY",429);let d=j(a),f=Object.freeze({}),k={open:!0,pending:new Set};i.set(f,k),g.active++,g.bytes+=d;try{return await b(f)}finally{k.open=!1,await Promise.allSettled([...k.pending]),i.delete(f),g.active--,g.bytes-=d}}},18705:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(649796),e=c(266844),f=c(610782),g=c(774755),h=c(930100),i=c(824424);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)},47293:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(750122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},78335:()=>{},100629:(a,b,c)=>{"use strict";c.d(b,{$:()=>f,b:()=>i});var d=c(973024),e=c(504573);class f extends Error{constructor(a,b){super("SIZE_LIMIT"===a?"File exceeds the size limit.":"File is unsafe or changed while being read."),this.code=a,this.detail=b,this.name="PlainFileReadError"}}function g(a,b){for(let c of["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"])if(a[c]!==b[c])return c}function h(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function i(a,b={}){b.signal?.throwIfAborted();let c=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let i=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===i[0].status)throw i[0].reason;if("rejected"===i[1].status)throw i[1].reason;let j=i[0].value,k=i[1].value;if(!j.isFile()||!k.isFile()||k.isSymbolicLink()||j.nlink!==BigInt(1)||!h(j,k)||b.expected&&!h(b.expected,j)||b.ownerOnly&&"win32"!==process.platform&&(j.mode&BigInt(63))!==BigInt(0)){let a=g(j,k),c=b.expected&&g(b.expected,j),d=!j.isFile()||!k.isFile()||k.isSymbolicLink()?"not-plain-file":j.nlink!==BigInt(1)?"hard-linked":a?`descriptor-path:${a}`:c?`expected:${c}`:"permissions";throw new f("UNSAFE_FILE",d)}let l=Math.min(b.maxBytes??e.constants.MAX_LENGTH-1,e.constants.MAX_LENGTH-1);if(!Number.isSafeInteger(l)||l<0||j.size<BigInt(0)||j.size>BigInt(l))throw new f("SIZE_LIMIT");await b.verifyPath?.();let m=Number(j.size)+1,n=Buffer.alloc(b.consume?Math.min(65536,m):m),o=0;for(;o<m;){b.signal?.throwIfAborted();let a=b.consume?0:o,{bytesRead:d}=await c.read(n,a,Math.min(m-o,b.consume?n.length:1048576),o);if(0===d)break;b.consume&&await b.consume(n.subarray(0,d)),o+=d}if(BigInt(o)!==j.size)throw new f("FILE_CHANGED");let p=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===p[0].status)throw p[0].reason;if(!h(j,p[0].value))throw new f("FILE_CHANGED");if("rejected"===p[1].status)throw p[1].reason;let q=p[1].value;if(q.isSymbolicLink()||!h(j,q))throw new f("FILE_CHANGED");return await b.verifyPath?.(),b.signal?.throwIfAborted(),b.consume?Buffer.alloc(0):n.subarray(0,o)}finally{await c.close()}}},134887:(a,b,c)=>{"use strict";c.d(b,{JC:()=>f,Ne:()=>j,Sx:()=>h,ok:()=>g,v0:()=>i});var d=c(333873),e=c.n(d);function f(){return process.cwd()}function g(){let a=process.env.FLUJO_PARENT_DATA_DIR;if(a&&a.trim().length>0)return e().resolve(a);let b=process.env.FLUJO_DATA_DIR;return b&&b.trim().length>0?e().resolve(b):f()}function h(){let a=process.env.FLUJO_OLLAMA_URL;return(a&&a.trim().length>0?a.trim():"http://localhost:11434").replace(/\/+$/,"")}function i(){let a=process.env.FLUJO_OLLAMA;return"1"===a||"true"===a||"yes"===a}function j(){return process.env.FLUJO_CONTAINER?"container":process.env.FLUJO_NPM?"npm":"git"}},158601:(a,b,c)=>{"use strict";c.d(b,{Fc:()=>s,YM:()=>n,bA:()=>l,c$:()=>p,eu:()=>q,ip:()=>r,jw:()=>k,pi:()=>o,ui:()=>m});var d=c(47293),e=c(266844),f=c(907986),g=c(388100);let h=(0,e.h)("utils/encryption/session");function i(a=(0,f.getCurrentWorkspace)()){if(a===f.DEFAULT_WORKSPACE)return global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map);let b=global.__flujo_encryption_sessions_by_workspace??(global.__flujo_encryption_sessions_by_workspace=new Map),c=b.get(a);return c||(c=new Map,b.set(a,c)),c}function j(){return global.__flujo_server_deks_by_workspace??(global.__flujo_server_deks_by_workspace=new Map)}function k(a){(0,g.hA)();let b=(0,d.A)(),c=Date.now(),e={workspace:(0,f.getCurrentWorkspace)(),token:b,dek:a,createdAt:c,lastUsed:c};return i().set(b,e),h.info("Created encryption session"),!u&&(u=setInterval(t,36e5)).unref&&u.unref(),b}function l(a){let b=(0,f.getCurrentWorkspace)(),c=i(b),d=c.get(a);if(!d||(d.workspace??f.DEFAULT_WORKSPACE)!==b)return h.warn("Encryption session not found"),null;let e=Date.now();return e-d.createdAt>72e5?(h.warn("Encryption session expired"),c.delete(a),(0,g.hA)(),null):(d.lastUsed=e,d.dek)}function m(a){let b=i();b.has(a)&&(b.delete(a),(0,g.hA)(),h.info("Invalidated encryption session"))}function n(a){(0,g.hA)();let b=(0,f.getCurrentWorkspace)();global.__flujo_worker_transfer_provenance?.delete(b),b===f.DEFAULT_WORKSPACE?global.__flujo_server_dek=a:j().set(b,a),h.info("Server encryption unlocked",{workspace:b})}function o(){(0,g.hA)();let a=(0,f.getCurrentWorkspace)();global.__flujo_worker_transfer_provenance?.delete(a),a===f.DEFAULT_WORKSPACE?global.__flujo_server_dek=null:j().set(a,null),h.info("Server encryption locked",{workspace:a})}function p(){return!q()}function q(){let a=(0,f.getCurrentWorkspace)();return a===f.DEFAULT_WORKSPACE?global.__flujo_server_dek??null:j().get(a)??null}function r(a){if(a.workspace!==(0,f.getCurrentWorkspace)())throw Error("Worker transfer workspace mismatch");(0,g.hA)(),(global.__flujo_worker_transfer_provenance??=new Map).set(a.workspace,Object.freeze({...a}))}function s(){return global.__flujo_worker_transfer_provenance?.get((0,f.getCurrentWorkspace)())}function t(){let a=Date.now(),b=0;for(let[c,d]of[[f.DEFAULT_WORKSPACE,global.__flujo_encryption_sessions],...Array.from(global.__flujo_encryption_sessions_by_workspace?.entries()??[])]){if(!d)continue;let e=!1;for(let[c,f]of d.entries())a-f.createdAt>72e5&&(d.delete(c),b++,e=!0);e&&(0,f.runWithWorkspace)(c,g.hA)}b>0&&h.info(`Cleaned up ${b} expired encryption sessions`)}let u=null},181465:(a,b,c)=>{"use strict";c.d(b,{RD:()=>k,ju:()=>e,oA:()=>g,zz:()=>j});var d=c(977598);let e="bundled-flujo-control-v1",f="/api/mcp/flujo/";function g(a){let b=(a,c)=>{if(c>32)throw Error("Workload schema depth refused.");if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return a;if(Array.isArray(a))return a.map(a=>b(a,c+1));if(!a||"object"!=typeof a)throw Error("Workload schema value refused.");let d=Object.getOwnPropertyDescriptors(a);return Object.fromEntries(Object.keys(d).sort().filter(a=>d[a].enumerable).map(a=>{if(!("value"in d[a]))throw Error("Workload schema accessor refused.");return[a,b(d[a].value,c+1)]}))},c=JSON.stringify(b(a,0));if(Buffer.byteLength(c)>65536)throw Error("Workload schema bytes refused.");return c}let h=a=>(0,d.createHash)("sha256").update(g(a)).digest("hex"),i={listTools:{path:"tools",method:"GET",schema:{type:"object",additionalProperties:!1}},listResources:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},listResourceTemplates:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},readResource:{path:"resources/read",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}},listSkills:{path:"skills",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},getSkill:{path:"skills",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}}};async function j(){let[a,b,d]=await Promise.all([Promise.all([c.e(7397),c.e(76364),c.e(53806),c.e(64165),c.e(45775),c.e(76161),c.e(18477),c.e(71244),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(79365),c.e(8464),c.e(62377),c.e(65326),c.e(42248),c.e(86661),c.e(36362),c.e(8849),c.e(7461)]).then(c.bind(c,407461)),Promise.all([c.e(7397),c.e(76364),c.e(53806),c.e(64165),c.e(45775),c.e(76161),c.e(18477),c.e(71244),c.e(45481),c.e(84314),c.e(74107),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(79365),c.e(8464),c.e(62377),c.e(65326),c.e(42248),c.e(86661),c.e(36362),c.e(7937),c.e(61992),c.e(92967),c.e(22698),c.e(17319),c.e(36009),c.e(9961),c.e(65899),c.e(5417),c.e(59678),c.e(48140),c.e(21821),c.e(94063),c.e(87513),c.e(3010),c.e(43384),c.e(56210)]).then(c.bind(c,143384)),c.e(42471).then(c.bind(c,242471))]),e=d.systemScreenshotEnabled(),j=b.internalToolDefinitions(),k=[["authoring",a.FLUJO_AUTHORING_TOOLS],["flows",a.FLUJO_FLOW_TOOLS],["servers",a.FLUJO_SERVER_TOOLS],["automation",a.FLUJO_AUTOMATION_TOOLS],["state",a.FLUJO_STATE_TOOLS]],l=new Set,m=[];for(let[a,b]of k)for(let c of b){if(l.has(c))throw Error("Duplicate workload action refused.");l.add(c);let b=j.filter(a=>a.name===c);if("system_screenshot"===c&&0===b.length&&!e&&void 0===d.systemScreenshotToolDefinition())continue;if(1!==b.length)throw Error("Missing or ambiguous workload definition.");let g=b[0].inputSchema;m.push({action:{action:c,method:"POST",path:f+a,schemaDigest:h({inputSchema:g,annotations:b[0].annotations??null})},schema:g,tool:!0})}for(let[a,b]of Object.entries(i))m.push({action:{action:a,method:b.method,path:f+b.path,schemaDigest:h(b.schema)},schema:b.schema,tool:!1});if(m.length>70)throw Error("Workload inventory exceeds its bound.");if(m.sort((a,b)=>a.action.action<b.action.action?-1:+(a.action.action>b.action.action)),g(m.map(a=>a.action)),e!==d.systemScreenshotEnabled())throw Error("Workload capability availability changed.");return m}async function k(){return(await j()).map(a=>Object.freeze(a.action))}},235447:(a,b,c)=>{"use strict";c.d(b,{R:()=>d});class d extends Error{constructor(a,b){super(`Persona record ${JSON.stringify(a)} does not match requested Persona ${JSON.stringify(b)}.`),this.code="PERSONA_SHARD_IDENTITY_MISMATCH",this.name="PersonaShardIdentityError"}}},266844:(a,b,c)=>{"use strict";c.d(b,{h:()=>h});var d=c(858405);let e="number"==typeof d.Gv.LOG_LEVEL?d.Gv.LOG_LEVEL:3;function f(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c=new Map([["name",a.name],["message",a.message]]);for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.set("stack",e):"cause"===d?c.set("cause",f(e,b+1)):"errors"===d&&Array.isArray(e)?c.set("errors",e.map(a=>f(a,b+1))):c.set(d,e))}return Object.fromEntries(c)}function g(a,b,c,d,g){if(a>=("number"==typeof g?g:e)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,h=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?f(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?f(b):b,2);h+=`:
|
|
2
|
-
${b}`}catch(a){h+=": [Object cannot be stringified]"}else h+=`: ${d}`;switch(h=h.replace(/[\r\n\u2028\u2029]/g," ").replaceAll("\x1b","[ESC]").replace(/\p{Control}/gu,a=>`\\u${a.charCodeAt(0).toString(16).padStart(4,"0")}`),a){case -1:console.debug(`[VERBOSE] ${h}`);break;case 0:console.debug(h);break;case 1:console.info(h);break;case 2:console.warn(h);break;case 3:console.error(h);break;default:console.log(h)}}}function h(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{g(-1,d,a,c,b)},debug:(a,c)=>{g(0,d,a,c,b)},info:(a,c)=>{g(1,d,a,c,b)},warn:(a,c)=>{g(2,d,a,c,b)},error:(a,c)=>{g(3,d,a,c,b)}}}},296487:()=>{},326042:(a,b,c)=>{"use strict";c.d(b,{Zg:()=>e});var d,e=((d={}).MODELS="models",d.AVATAR_WORLD="avatar_world",d.FLOWS="flows",d.TICKETS="tickets",d.CHAT_HISTORY="history",d.THEME="theme",d.THEME_STYLE="theme_style",d.LIVING_WORLD_ENABLED="living_world_enabled",d.ENCRYPTION_KEY="encryption_key",d.MCP_SERVERS="mcp_servers",d.GLOBAL_ENV_VARS="global_env_vars",d.CURRENT_CONVERSATION_ID="current_conversation_id",d.SELECTED_FLOW_ID="selected_flow_id",d.LAST_PICKED_FLOW_ID="last_picked_flow_id",d.SPEECH_SETTINGS="speech_settings",d.SPOTLIGHT_SERVERS="spotlight_servers",d.PLANNED_EXECUTIONS="planned_executions",d.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",d.MCP_QUALITY_SETTINGS="mcp_quality_settings",d.MCP_APP_CONSENT="mcp_app_consent",d.RUN_RESOURCE_SETTINGS="run_resource_settings",d.MEMORY_SETTINGS="memory_settings",d.SUBFLOW_TASK_SETTINGS="subflow_task_settings",d.MCP_REMOTE_TASK_SETTINGS="mcp_remote_task_settings",d.KV_STORE_SETTINGS="kv_store_settings",d.PENDING_APPROVALS="pending_approvals",d.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",d.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",d.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",d.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",d.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",d.MCP_SHIPPED_SERVER_ROOTS_MIGRATION_V5="mcp_shipped_server_roots_migration_v5",d.MCP_SHIPPED_BROWSER_REPAIR_MIGRATION_V6="mcp_shipped_browser_repair_migration_v6",d.MCP_SHIPPED_FLUJO_REPAIR_MIGRATION_V7="mcp_shipped_flujo_repair_migration_v7",d.MCP_SHIPPED_BASH_REPAIR_MIGRATION_V8="mcp_shipped_bash_repair_migration_v8",d.PACKAGE_INSTALLS="package_installs",d.EXPERIMENTAL_SETTINGS="experimental_settings",d.REGISTRY_ACCOUNT="registry_account",d.REGISTRY_SETTINGS="registry_settings",d.TELEMETRY_STATE="telemetry_state",d.SNAPSHOT_RETENTION_POLICY="snapshot_retention_policy",d.MEMORY_EMBEDDINGS="memory_embeddings",d)},332400:(a,b,c)=>{"use strict";c.d(b,{HK:()=>t,P1:()=>s,kU:()=>n,nT:()=>q});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(18963),i=c(977598);let j=process.getBuiltinModule("node:module"),{createRequire:k}=j,l=h.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),m=h.string().max(256).regex(/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/),n=h.object({packageName:h.string().max(214).regex(/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/),packageVersion:m,npmVersion:m,packageDirectory:l,binaryName:h.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),shell:l,shellDigest:h.string().regex(/^[a-f0-9]{64}$/)}).strict();function o(a,b){let c=g().relative(a,b);return!!c&&".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}function p(a,b){return"win32"===process.platform?g().resolve(a).toLowerCase()===g().resolve(b).toLowerCase():g().resolve(a)===g().resolve(b)}function q(a){let{sourceRoot:b,entryPoint:c,command:d,cwd:e,args:f,runner:h,environment:i}=a;if(!o(b,h.packageDirectory)||!o(b,h.shell)||!o(b,c)||"npx-cli.js"!==g().basename(c)||"bin"!==g().basename(g().dirname(c))||o(b,e)||p(b,e)||!/^node(?:\.exe)?$/i.test(g().basename(d))||"-y"!==f[0]||f[1]!==`${h.packageName}@${h.packageVersion}`)throw Error("Invalid package runner declaration");for(let[a]of i)if(/^npm_config_/i.test(a)&&"NPM_CONFIG_CACHE"!==a.toUpperCase())throw Error("Ambient npm configuration is forbidden");let j=a=>[...i].find(([b])=>b.toUpperCase()===a)?.[1];if(!j("NPM_CONFIG_CACHE")||!g().isAbsolute(j("NPM_CONFIG_CACHE")))throw Error("Declare the package runner cache");if("win32"===process.platform&&(j("COMSPEC")!==h.shell||".COM;.EXE;.BAT;.CMD"!==j("PATHEXT")))throw Error("Declare the reviewed Windows shell and extensions");let k=[g().join(h.packageDirectory,"node_modules",".bin"),g().dirname(d)].join(g().delimiter);if(j("PATH")!==k)throw Error("Declare only the reviewed package and Node binary paths")}function r(a){let b,c=()=>{for(let b=g().resolve(a);;b=g().dirname(b)){if(e().lstatSync(b).isSymbolicLink())throw Error("Linked package manifest path");if(g().dirname(b)===b)break}if(!p(e().realpathSync(a),a))throw Error("Retargeted package manifest")};c();let d=e().openSync(a,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let f=e().fstatSync(d,{bigint:!0});if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(1048576))throw Error("Invalid package manifest");b=Buffer.alloc(Number(f.size)+1);let g=0;for(;g<b.length;){let a=e().readSync(d,b,g,b.length-g,null);if(!a)break;g+=a}if(BigInt(g)!==f.size)throw Error("Manifest changed while reading");let h=e().fstatSync(d,{bigint:!0}),i=e().lstatSync(a,{bigint:!0});if(c(),i.isSymbolicLink()||!i.isFile()||!["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(a=>f[a]===h[a]&&f[a]===i[a]))throw Error("Manifest changed");let j=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(b.subarray(0,g)));if(!j||"object"!=typeof j||Array.isArray(j))throw Error("Invalid package manifest");return j}finally{b?.fill(0),e().closeSync(d)}}function s(a,b,c,d,f){for(let a=g().resolve(c);;a=g().dirname(a)){if(e().lstatSync(a).isSymbolicLink()||!p(e().realpathSync(a),a))throw Error("Unsafe package runner working directory");for(let b of[g().join(a,"node_modules",".bin")]){try{e().lstatSync(b)}catch(a){if("ENOENT"===a.code)continue;throw a}throw Error("Unreviewed npm ancestor resolution candidate")}if(g().dirname(a)===a)break}let h=r(g().join(g().dirname(g().dirname(b)),"package.json"));if("npm"!==h.name||h.version!==d.npmVersion)throw Error("npm revision changed");let l=g().join(d.packageDirectory,".npmrc");try{let a=e().lstatSync(l);if(!a.isFile()||a.isSymbolicLink()||1!==a.nlink||0!==a.size)throw Error("Unreviewed project npm configuration")}catch(a){if("ENOENT"!==a.code)throw a}for(let b of["runner-user.npmrc","runner-global.npmrc"]){let c=g().join(a,b),d=e().lstatSync(c);if(!d.isFile()||d.isSymbolicLink()||1!==d.nlink||0!==d.size)throw Error("npm control file changed")}let n=g().join(d.packageDirectory,"node_modules",...d.packageName.split("/")),q=r(g().join(d.packageDirectory,"package.json"));if(void 0!==q.bin||void 0!==q.workspaces)throw Error("Installation project may not redirect npm binary selection");let s=r(g().join(n,"package.json"));if(s.name!==d.packageName||s.version!==d.packageVersion)throw Error("Package revision changed");let t=s.bin,u="string"==typeof t&&d.binaryName===d.packageName.split("/").at(-1)?t:t&&"object"==typeof t&&!Array.isArray(t)?t[d.binaryName]:void 0;if("string"!=typeof u||!o(n,g().resolve(n,u)))throw Error("Package binary changed");let v="string"==typeof t?{[d.packageName.split("/").at(-1)]:t}:t;if((1===new Set(Object.values(v)).size?Object.keys(v)[0]:v[d.packageName.split("/").at(-1)]?d.packageName.split("/").at(-1):void 0)!==d.binaryName)throw Error("npm binary selection differs from the reviewed binary");let w=g().join(d.packageDirectory,"node_modules",".bin",d.binaryName+("win32"===process.platform?".cmd":""));if(!e().lstatSync(w).isFile()||e().lstatSync(w).isSymbolicLink())throw Error("Materialize the reviewed package binary shim");return f?.inspectClosure===!1?void 0:function(a,b,c){let d=new Map,f=new Set,h=[],l=0,n=a=>{let b=d.get(a);if(!b){if(d.size>=1024)throw Error("Package graph exceeds inspection bounds");if("string"!=typeof(b=r(g().join(a,"package.json"))).name||b.name.length>214||!m.safeParse(b.version).success)throw Error("Package graph revision unavailable");d.set(a,b)}return b},p=a=>{try{return e().lstatSync(a),!0}catch(a){if("ENOENT"===a.code)return!1;throw a}},q=b=>{if(f.has(b))return;f.add(b);let d=n(b),e={directory:g().relative(a,b).split(g().sep).join("/"),name:d.name,version:d.version,dependencies:[]};h.push(e);let i=new Map;for(let a of["dependencies","peerDependencies","optionalDependencies"]){let b=d[a];if(void 0!==b){if(!b||"object"!=typeof b||Array.isArray(b)||Object.keys(b).length>256)throw Error("Invalid package dependencies");for(let[c,e]of Object.entries(b)){if(++l>8192||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(c)||c.length>214||"string"!=typeof e||e.length>2048)throw Error("Invalid package dependency declaration");let b=d.peerDependenciesMeta,f="peerDependencies"===a&&b&&"object"==typeof b&&b[c]?.optional===!0,g=e.startsWith("npm:")?/^npm:((?:@[^/]+\/)?[^@]+)(?:@.*)?$/.exec(e)?.[1]:void 0;if(e.startsWith("npm:")&&!g)throw Error("Invalid package alias");i.set(c,{optional:"optionalDependencies"===a||!!f,target:g??c})}}}let m=function(a,b){let c=Reflect.get(j,"globalPaths");if(!Array.isArray(c)||c.some(a=>"string"!=typeof a))throw Error("Native module search roots unavailable");let d=new Set(c.map(a=>g().resolve(a))),e=(k(a).resolve.paths("flujo-owned-dependency-inspection")??[]).filter(a=>!d.has(g().resolve(a)));if(b){let a="win32"===process.platform?g().dirname(b.command):g().dirname(g().dirname(b.command));e.push(g().join(a,"lib","node"),...b.home?[g().join(b.home,".node_modules"),g().join(b.home,".node_libraries")]:[])}return[...new Set(e)]}(g().join(b,"package.json"),c);for(let[b,c]of i){let d;for(let c of m){let e=g().join(c,...b.split("/"));if(!o(a,c)){if(["",".js",".json",".node"].some(a=>p(e+a)))throw Error("Ambient Node dependency candidate");continue}if([".js",".json",".node"].some(a=>p(e+a)))throw Error("Package dependency redirected to an unreviewed file");if(p(e)){d=e;break}}if(!d){if(!c.optional)throw Error(`Materialized runtime dependency missing: ${b}`);e.dependencies.push({name:b,...c,directory:null});continue}if(n(d).name!==c.target)throw Error("Package dependency identity differs from its declaration");e.dependencies.push({name:b,...c,directory:g().relative(a,d).split(g().sep).join("/")}),q(d)}};for(let a of b)q(a);for(let a of(h.sort((a,b)=>a.directory<b.directory?-1:+(a.directory>b.directory)),h))a.dependencies.sort((a,b)=>a.name<b.name?-1:+(a.name>b.name));return{inventory:h,digest:(0,i.createHash)("sha256").update("flujo:mcp:local-npx-dependencies:v1\0").update(JSON.stringify(h)).digest("hex")}}(a,[g().dirname(g().dirname(b)),d.packageDirectory],f)}function t(a,b,c,d,e){return[c,`--prefix=${b.packageDirectory}`,"--offline","--ignore-scripts","--no-update-notifier","--no-audit","--no-fund","--workspaces=false",`--userconfig=${g().join(a,"runner-user.npmrc")}`,`--globalconfig=${g().join(a,"runner-global.npmrc")}`,`--script-shell=${b.shell}`,`--cache=${e}`,...d]}},388100:(a,b,c)=>{"use strict";c.d(b,{dJ:()=>n,hA:()=>p,oc:()=>r});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(907986),i=c(134887),j=c(580940),k=c(826045),l=c(720929),m=c(851018);class n extends Error{constructor(){super("Private encryption context changed; retry with the current profile")}}function o(){return(0,h.workspaceCacheKey)(f().resolve((0,h.getWorkspaceDataDir)()))}function p(){let a,b=global.__flujo_verified_operator_keyring;if(b){if(2!==b.version){for(let a of(global.__flujo_verified_operator_keyring=void 0,b.checks??[]))a.invalidated=!0;return}try{a=o()}catch{for(let a of(b.entries.clear(),b.checks??[]))a.invalidated=!0;return}for(let c of(b.entries.delete(a),b.checks??[]))c.namespace===a&&(c.invalidated=!0)}}async function q(a){await (0,k.bV)();let b=await a();if(!b||2!==b.encryption_version||"user"!==b.encryption_type||"operator-file"!==b.key_protection)throw new n;let c=f().resolve((0,h.getWorkspaceDataDir)()),e=await d.promises.realpath(c),o=await d.promises.stat(c,{bigint:!0});if(!o.isDirectory())throw new n;let p=(0,l.b)();if(!p)throw new n;let q=(0,h.workspaceCacheKey)(f().resolve((0,i.ok)()),c,e,o.dev.toString(),o.ino.toString(),String((0,j.ye)())),r=(0,m.$$)(b),s=(0,g.createHash)("sha256").update(p.secret).digest("hex");return{metadata:b,secret:p.secret,revision:r,identity:JSON.stringify([q,r,p.identity,s])}}async function r(a,b){let c=global.__flujo_verified_operator_keyring;if(c?.version!==2){for(let a of c?.checks??[])a.invalidated=!0;global.__flujo_verified_operator_keyring=c={version:2,entries:new Map,checks:new Set}}let d={namespace:o(),invalidated:!1};c.checks.add(d);try{let e=await q(b);if(e.revision!==(0,m.$$)(a)||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==o())throw new n;let f=c.entries.get(d.namespace);if(f?.namespace===d.namespace&&f.identity===e.identity&&(0,m.xs)(f.ring)===e.metadata.key_id)return c.entries.delete(d.namespace),c.entries.set(d.namespace,f),{...f.ring};let g=await (0,m.b)(e.metadata,e.secret),h=await q(b);if(h.identity!==e.identity||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==o())throw new n;for(c.entries.delete(d.namespace),c.entries.set(d.namespace,Object.freeze({namespace:d.namespace,identity:h.identity,ring:Object.freeze({...g})}));c.entries.size>16;){let a=c.entries.keys().next();if(a.done){c.entries.clear();break}c.entries.delete(a.value)}return{...g}}catch(a){for(let a of(c.entries.delete(d.namespace),c.checks))a.namespace===d.namespace&&(a.invalidated=!0);throw a}finally{c.checks.delete(d)}}},472178:(a,b,c)=>{"use strict";c.d(b,{N:()=>q,V$:()=>s,lA:()=>t,sA:()=>r});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(504573);let i=new Set(["node_modules",".git"]);function j(a,b,c=!1){let d=f().relative(f().resolve(a),f().resolve(b));return""===d?c:!d.startsWith("..")&&!f().isAbsolute(d)}async function k(a){try{return await d.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}function l(a,b){if(!a||a.isSymbolicLink()||!a.isDirectory())throw Error(`${b} must be a real directory, not a symbolic link or junction.`)}function m(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function n(a,b,c){c?.throwIfAborted();let d=Buffer.alloc(b),e=0;for(;e<b;){c?.throwIfAborted();let{bytesRead:f}=await a.read(d,e,Math.min(b-e,1048576),e);if(0===f)break;e+=f}return e===b?d:d.subarray(0,e)}function o(a,b){let c=function(a){if(!a||a.includes("\\")||a.includes("\0")||f().posix.isAbsolute(a)||f().win32.isAbsolute(a)||/^[A-Za-z]:/.test(a))return null;let b=a.split("/");return b.some(a=>!a||"."===a||".."===a||a.includes(":"))?null:b}(b);if(!c)return null;let d=f().resolve(a,...c);return j(a,d)?d:null}async function p(a,b,c){let e=f().resolve(a),g=f().resolve(b);if(l(await k(e),"Workspace restore boundary"),!j(e,g,!0))throw Error(`Restore directory escapes workspace boundary: ${g}`);let h=f().relative(e,g),i=e;for(let a of h?h.split(f().sep):[]){i=f().join(i,a);let b=await k(i);if(!b&&c){try{await d.promises.mkdir(i)}catch(a){if("EEXIST"!==a.code)throw a}b=await k(i)}l(b,`Restore path component ${i}`)}if(!j(await d.promises.realpath(e),await d.promises.realpath(g),!0))throw Error(`Restore directory resolves outside workspace boundary: ${g}`)}async function q(a,b,c,e,g=()=>void 0,o={}){let p=o.maxFileBytes??0xa00000,r=o.skippedDirectories??i,s=f().resolve(e),t=f().resolve(b);if(l(await k(s),"Workspace backup boundary"),l(await k(t),"MCP backup root"),!j(s,t))throw Error("MCP backup root escapes its workspace.");let u=await d.promises.realpath(s),v=await d.promises.realpath(t);if(!j(u,v))throw Error("MCP backup root resolves outside its workspace.");let w=async(b,c)=>{o.signal?.throwIfAborted();let e=await k(b);if(!e||e.isSymbolicLink()||!e.isDirectory())return void g(c,"directory is a symbolic link, junction, or no longer exists");if(!j(v,await d.promises.realpath(b),!0))return void g(c,"directory resolves outside MCP backup root");for(let e of(await d.promises.readdir(b,{withFileTypes:!0}))){let l;o.signal?.throwIfAborted();let q=f().join(b,e.name),s=f().posix.join(c,e.name);if(o.skipPath?.(s))continue;try{l=await k(q)}catch(a){g(s,`lstat failed: ${a instanceof Error?a.message:String(a)}`);continue}if(!l||l.isSymbolicLink()){g(s,"symbolic links and junctions are not backed up");continue}if(l.isDirectory()){let b;if(r.has(e.name))continue;try{b=await d.promises.realpath(q)}catch{g(s,"directory disappeared while being inspected");continue}if(!j(v,b)){g(s,"directory resolves outside MCP backup root");continue}a.folder(s),await w(q,s);continue}if(!l.isFile()){g(s,"non-regular filesystem entry");continue}if(l.nlink>BigInt(1)&&!o.allowHardLinks){g(s,"hard-linked files are not backed up");continue}if(l.size>BigInt(Math.min(p,h.constants.MAX_LENGTH))){g(s,"file exceeds backup size limit");continue}let t=null,u=!1;try{let b="number"==typeof d.constants.O_NOFOLLOW?d.constants.O_NOFOLLOW:0;t=await d.promises.open(q,d.constants.O_RDONLY|b|(d.constants.O_NONBLOCK??0));let c=await t.stat({bigint:!0}),e=await d.promises.realpath(q);if(!c.isFile()||c.nlink>BigInt(1)&&!o.allowHardLinks||c.size>BigInt(Math.min(p,h.constants.MAX_LENGTH))||!m(l,c)||!j(v,e)){g(s,"file changed or escaped while being opened");continue}if(o.onFileStream){let a=t;async function*i(){for(let b=0;b<Number(c.size);){o.signal?.throwIfAborted();let d=Buffer.alloc(Math.min(65536,Number(c.size)-b)),{bytesRead:e}=await a.read(d,0,d.length,b);if(!e)throw Error("File ended before its admitted size.");b+=e,yield d.subarray(0,e)}let b=await a.stat({bigint:!0}),e=await d.promises.lstat(q,{bigint:!0});if(!m(c,b)||!m(c,e)||!j(v,await d.promises.realpath(q)))throw Error("File changed while being captured.")}await o.onFileStream(s,i(),c);continue}let f=await n(t,Number(c.size),o.signal),k=await t.stat({bigint:!0});if(BigInt(f.byteLength)!==c.size||!m(c,k)){g(s,"file changed while being read");continue}o.signal?.throwIfAborted(),o.onFile?.(s,f,k),a.file(s,f,o.preserveMode?{unixPermissions:Number(k.mode&BigInt(33279))}:void 0)}catch(a){u=!0,o.signal?.throwIfAborted(),g(s,`file could not be read safely: ${a instanceof Error?a.message:String(a)}`)}finally{try{await t?.close()}catch(a){if(o.onFileStream&&!u)throw a}}}};await w(t,c)}async function r(a,b,c,e={}){let h,i=e.assertOwned;await i?.();let j=f().dirname(b);await p(a,j,!0),await i?.();let l=await k(b);if(l?.isSymbolicLink())throw Error(`Refusing to replace symbolic link or junction: ${b}`);if(l&&!l.isFile())throw Error(`Refusing to replace non-file restore target: ${b}`);let n=f().join(j,`.flujo-restore-${(0,g.randomUUID)()}.tmp`),o=!1;try{let f=384|(e.mode??0)&64;await i?.();let g=await d.promises.open(n,d.constants.O_WRONLY|d.constants.O_CREAT|d.constants.O_EXCL,f);o=!0;try{h=await g.stat({bigint:!0}),await i?.(),await g.writeFile(c),await i?.(),await g.sync(),await i?.(),h=await g.stat({bigint:!0})}finally{await g.close()}for(let c=0;;c++){await p(a,j,!1);let e=await d.promises.lstat(n,{bigint:!0});if(!h||e.isSymbolicLink()||!e.isFile()||!m(h,e))throw Error("Restore temporary file changed before publication.");let f=await k(b);if(f?.isSymbolicLink()||f&&!f.isFile())throw Error(`Restore target became unsafe: ${b}`);await i?.();try{await d.promises.rename(n,b);break}catch(a){if(c>=14||!["EPERM","EBUSY","EACCES"].includes(a.code??""))throw a;await new Promise(a=>setTimeout(a,Math.min(100,5*2**c)))}}o=!1,await i?.()}finally{if(o)try{let a=await d.promises.lstat(n,{bigint:!0});h&&a.isFile()&&!a.isSymbolicLink()&&a.dev===h.dev&&a.ino===h.ino&&await d.promises.unlink(n)}catch{}}}async function s(a,b){await p(a,f().dirname(b),!1)}async function t(a,b,c,d,e=()=>void 0,g={}){let h=f().resolve(c);await p(d,h,!0);let i=`${b}/`,j=Object.keys(a.files).filter(a=>a.startsWith(i)&&a!==i).map(b=>{let c=a.files[b],d=b.slice(i.length);return{entry:c,entryPath:b,relativePath:c.dir?d.replace(/\/+$/,""):d}});for(let a of j.filter(a=>a.entry.dir)){let b=o(h,a.relativePath);if(!b){e(a.entryPath,"unsafe archive directory path");continue}try{await p(d,b,!0)}catch(b){e(a.entryPath,b instanceof Error?b.message:String(b))}}for(let a of j.filter(a=>!a.entry.dir)){let b=o(h,a.relativePath);if(!b){e(a.entryPath,"unsafe archive file path");continue}try{let c=await a.entry.async("nodebuffer");if(c.length>(g.maxFileBytes??0xa00000)){e(a.entryPath,"file exceeds restore size limit");continue}await r(d,b,c,{mode:g.preserveMode?Number(a.entry.unixPermissions):void 0}),g.onRestored?.(a.entryPath)}catch(b){e(a.entryPath,b instanceof Error?b.message:String(b))}}}},497137:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>j,Cg:()=>i,IP:()=>h,hN:()=>k});var d=c(300643);let e=["CONFIG","ASSETS","DEP_LAYOUT","DEP_GRAPH","DEP_LINKS","SOURCE_FINGERPRINT","EXEC_FINGERPRINT","CONSENT_DIGEST","CONSENT_POLICY_SCHEMA","CONSENT_LAUNCH","CONSENT_BUNDLE","CONSENT_ENVIRONMENT","CONSENT_CAPABILITIES","CONSENT_SERIALIZE","CONSENT_SCRYPT","APPROVAL_INITIALIZE","APPROVAL_SEED_PARENT","APPROVAL_SEED_OWNER","APPROVAL_SEED_IDENTITY","APPROVAL_SEED_AUTHORITY","APPROVAL_LOCK","APPROVAL_REQUEST","APPROVAL_PROPOSAL","APPROVAL_AUTHORITY","APPROVAL_STAGE","APPROVAL_RECHECK","APPROVAL_CONFIG","APPROVAL_SAVE","APPROVAL_PUBLICATION","APPROVAL_DISPOSE"];function f(a){try{if("1"!==process.env.FLUJO_BUNDLED_CONSENT_TRACE||!e.includes(a))return;let b=d.performance.now();return Number.isFinite(b)?b:void 0}catch{return}}function g(a,b){if(void 0!==b)try{let c=d.performance.now()-b;if(!Number.isFinite(c))return;console.info(JSON.stringify({bundledConsentStage:a,elapsedMs:Math.max(0,c)}))}catch{}}class h extends Error{constructor(a,b){super("Bundled consent preview refused.",{cause:b}),this.stage=a}}async function i(a,b){let c=f(a);try{return await b()}catch(b){if(b instanceof h)throw b;throw new h(a,b)}finally{g(a,c)}}function j(a,b){let c=f(a);try{return b()}catch(b){if(b instanceof h)throw b;throw new h(a,b)}finally{g(a,c)}}function k(a){return a instanceof h&&e.includes(a.stage)?a.stage:"CONFIG"}},580940:(a,b,c)=>{"use strict";function d(){return"1"===process.env.FLUJO_WORKER_MODE}function e(){return d()?global.__flujo_worker_bootstrap_status??{mode:"worker",state:"not-started"}:{mode:"local",state:"not-started"}}function f(a){d()&&(global.__flujo_worker_bootstrap_status={...e(),...a,mode:"worker"})}function g(a,b){if(!d())return null;let c=e();if(c.workspace&&b!==c.workspace)return Response.json({error:"This workspace is not assigned to the worker."},{status:404});let f=new URL(a.url).pathname,g="GET"===a.method&&["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/skills"].includes(f);return"ready"===c.state||g||"/api/init"===f||"/api/encryption/secure"===f?null:Response.json({error:"Worker is not ready.",code:"WORKER_NOT_READY"},{status:503,headers:{"Cache-Control":"no-store"}})}c.d(b,{Vv:()=>f,dT:()=>e,f3:()=>g,ye:()=>d})},596923:(a,b,c)=>{"use strict";c.d(b,{T8:()=>l,uj:()=>k});var d=c(973024),e=c(977598),f=c(176760),g=c.n(f),h=c(792711);function i(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function j(a){if(!a.isFile()||a.isSymbolicLink()||a.nlink!==BigInt(1)||a.size>BigInt(65536)||"win32"!==process.platform&&((a.mode&BigInt(63))!==BigInt(0)||a.uid!==BigInt(process.getuid?.()??-1)))throw Error("Invalid owner policy file")}function k(a){if(!g().isAbsolute(a))throw Error("Invalid owner policy path");let b=g().resolve(a),c=(0,d.lstatSync)(b,{bigint:!0});j(c);let e=(0,d.realpathSync)(b);if(""!==g().relative(e,b))throw Error("Invalid owner policy path");let f=(0,d.openSync)(b,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let a=(0,d.fstatSync)(f,{bigint:!0});if(j(a),!i(c,a))throw Error("Owner policy changed");let k=Buffer.alloc(65537),l=0;for(;l<k.length;){let a=(0,d.readSync)(f,k,l,k.length-l,null);if(0===a)break;l+=a}let m=(0,d.lstatSync)(b,{bigint:!0});if(l>65536||BigInt(l)!==a.size||!i(a,(0,d.fstatSync)(f,{bigint:!0}))||!i(a,m)||m.isSymbolicLink()||""!==g().relative(e,(0,d.realpathSync)(b)))throw Error("Owner policy changed");return h.rF.parse(JSON.parse(k.subarray(0,l).toString("utf8")))}finally{(0,d.closeSync)(f)}}function l(a){return(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}},609921:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"405d4ac0f7a3aed328e0357aaa74ee748da3fff638":()=>d.V,"6010e875bb1ec447b1991123e680a44c5158f676c8":()=>d.resolveGlobalVars,"60348b8c89fec0e88537cd36a5ef925ab95adc8ecb":()=>d.G});var d=c(18705)},610782:(a,b,c)=>{"use strict";c.d(b,{zY:()=>U,ln:()=>Q,N2:()=>O,bB:()=>ap,U2:()=>al,U3:()=>ah,Vx:()=>T,al:()=>af,JV:()=>aj,$G:()=>ar,pL:()=>aq,av:()=>as,EI:()=>ao,loadItem:()=>M,H0:()=>L,Jk:()=>ae,w5:()=>at,Ch:()=>ak,l_:()=>am,Vt:()=>an,VH:()=>K,Gl:()=>ag,Pv:()=>F,c0:()=>N,Zf:()=>J});var d=c(619335),e=c(629021),f=c(333873),g=c.n(f),h=c(977598),i=c(12778),j=c(100629),k=c(973024),l=c(176760),m=c.n(l);function n(a,b){let c=m().relative(a,b);if(!c||c.startsWith("..")||m().isAbsolute(c))throw Error("Persona record path escapes its storage root.");return c}function o(a){return a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)}async function p(a){try{return await k.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}async function q(a,b){let c=[a];for(let d of n(a,b).split(m().sep).slice(0,-1))c.push(m().join(c[c.length-1],d));let d=[];for(let a of c){let[b,c]=await Promise.allSettled([p(a),k.promises.realpath(a)]);if("rejected"===b.status)throw b.reason;let e=b.value;if(!e)return null;if(!e.isDirectory()||e.isSymbolicLink())throw Error("Persona record parent is not a link-free directory.");if("rejected"===c.status)throw c.reason;let f=c.value;d.length&&n(d[0].canonical,f),d.push({filename:a,stats:e,canonical:f})}return d}async function r(a){let b=await Promise.allSettled(a.flatMap(a=>[k.promises.lstat(a.filename,{bigint:!0}),k.promises.realpath(a.filename)]));for(let[c,d]of a.entries()){let a=b[2*c],e=b[2*c+1];if("rejected"===a.status)throw a.reason;let f=a.value;if(!f.isDirectory()||f.isSymbolicLink()||f.dev!==d.stats.dev||f.ino!==d.stats.ino||f.mode!==d.stats.mode||f.uid!==d.stats.uid||f.gid!==d.stats.gid)throw Error("Persona record parent changed during its read.");if("rejected"===e.status)throw e.reason;if(e.value!==d.canonical)throw Error("Persona record parent changed during its read.")}}async function s(a,b){let c=m().resolve(b),d=m().resolve(a);n(c,d);let e=await q(c,d);if(!e)return null;let f=await p(d);if(!f)return null;if(!o(f))throw new j.$("UNSAFE_FILE");for(let a=0;a<3;a++){await r(e);try{return{content:(await (0,j.b)(d,{expected:f,verifyPath:()=>r(e)})).toString("utf8"),mtimeMs:Number(f.mtimeNs)/1e6,sizeBytes:Number(f.size)}}catch(c){var g;if(!(c instanceof j.$)||"SIZE_LIMIT"===c.code||a+1===3)throw c;await r(e);let b=await p(d);if(!b||!(o(g=f)&&o(b))||g.ino===b.ino||g.dev!==b.dev||g.uid!==b.uid||g.gid!==b.gid||g.mode!==b.mode)throw c;f=b}}throw new j.$("FILE_CHANGED")}var t=c(235447),u=c(774755),v=c(266844),w=c(134887),x=c(907986),y=c(826045),z=c(879628);let A=(0,v.h)("utils/storage/backend"),B=()=>g().join((0,x.getWorkspaceDataDir)(),"db"),C=()=>g().join((0,w.ok)(),".next","storage"),D=a=>g().join(B(),`${a}.json`);async function E(){let a=B(),b=C();try{await e.promises.access(a),A.verbose(`Storage directory exists: ${a}`)}catch{A.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),A.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}async function F(){for(let a of(A.debug("Verifying storage system initialization"),await E(),Object.values(u.Zg)))try{let b=D(a),c=!1;try{await e.promises.access(b),c=!0}catch{}A.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let d=g().join(C(),`${a}.json`);try{await e.promises.access(d),c?A.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):A.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){A.error(`Storage verification failed for ${a}:`,b)}A.debug("Storage verification completed")}let G=new Map,H=new Set(["EPERM","EBUSY","EACCES"]);async function I(a,b,c){for(let d=1;;d++)try{await c(),await e.promises.rename(a,b);return}catch(c){let a=c.code;if(d>=15||!a||!H.has(a))throw c;let b=Math.min(100,5*2**(d-1));await new Promise(a=>setTimeout(a,b+10*Math.random()))}}async function J(a,b,c){await (0,y.af)(a),await (0,z.NU)(async()=>{let f;await (0,y.af)(a),await (0,z.qy)();let i=g().dirname(a);await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)()),await e.promises.mkdir(i,{recursive:!0});let j=await e.promises.lstat(i,{bigint:!0}),k=await e.promises.realpath(i);if(!j.isDirectory()||j.isSymbolicLink())throw Error("Atomic write parent is unsafe");let l=`${a}.tmp.${(0,h.randomUUID)()}`,m=!1;try{await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)());let g=await e.promises.open(l,"wx",384);m=!0;try{f=await g.stat({bigint:!0}),await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)()),await g.writeFile(b),await (0,z.qy)(),await g.sync(),await (0,z.qy)(),f=await g.stat({bigint:!0})}finally{await g.close()}await I(l,a,async()=>{let[a,b,g]=await Promise.allSettled([e.promises.lstat(l,{bigint:!0}),e.promises.lstat(i,{bigint:!0}),e.promises.realpath(i)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===g.status)throw g.reason;let h=a.value,m=b.value,n=g.value;if(!f||!h.isFile()||h.isSymbolicLink()||h.nlink!==BigInt(1)||h.dev!==f.dev||h.ino!==f.ino||h.size!==f.size||h.mtimeNs!==f.mtimeNs||h.ctimeNs!==f.ctimeNs||h.mode!==f.mode||h.uid!==f.uid||h.gid!==f.gid||!m.isDirectory()||m.isSymbolicLink()||m.dev!==j.dev||m.ino!==j.ino||m.mode!==j.mode||m.uid!==j.uid||m.gid!==j.gid||n!==k)throw Error("Atomic write file or parent changed");await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)())}),m=!1,await (0,z.qy)()}catch(a){if(m)try{let a=await e.promises.lstat(l,{bigint:!0});f&&a.isFile()&&!a.isSymbolicLink()&&a.dev===f.dev&&a.ino===f.ino&&await e.promises.unlink(l)}catch{}throw a}})}async function K(a,b,c){let d=D(a);await (0,y.af)(d),await (0,z.NU)(async()=>{let e=(0,x.workspaceCacheKey)("item",a),f=(G.get(e)??Promise.resolve()).catch(()=>{}).then(()=>J(d,JSON.stringify(b,null,2),c));G.set(e,f);try{await f,A.verbose(`Successfully saved item to: ${d}`)}catch(b){throw A.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{G.get(e)===f&&G.delete(e)}})}async function L(a,b){let c,d=D(a);await (0,y.af)(d),await E();try{c=await e.promises.readFile(d,"utf8")}catch(a){if("ENOENT"===a.code)return b;throw a}if(!c.trim())throw Error("Backup storage item is empty");return JSON.parse(c)}async function M(a,b){if(a.startsWith("conversations/"))return N(a.slice(14),async a=>void 0===a?b:a);await (0,y.af)(D(a));try{await E();let c=D(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return A.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return A.verbose(`Successfully loaded item from: ${c}`),a}catch(b){A.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),A.info(`Created backup of corrupted file at: ${a}`)}catch(a){A.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return A.verbose(`Item with key "${a}" not found at ${D(a)}, returning default.`),b;throw A.error(`CRITICAL: Error loading item with key "${a}" from ${D(a)}:`,c),c}}async function N(a,b,c={}){let d;c.signal?.throwIfAborted(),Q(a);let f=D(`conversations/${a}`);await (0,y.af)(f),await E();try{d=await e.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return(0,i.dw)(0,a=>b(void 0,a));throw a}let g=Number(d.size);return(0,i.dw)(g,async a=>{let g,h=(await (0,j.b)(f,{expected:d,signal:c.signal})).toString("utf8");if(c.signal?.throwIfAborted(),!h.trim())return b(void 0,a);try{g=JSON.parse(h)}catch(b){if(!(b instanceof SyntaxError))throw b;let a=`${f}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,h)}catch(a){A.error("Failed to back up corrupted conversation snapshot:",a)}throw Error(`Failed to parse JSON from ${f}. A backup has been created at ${a}. Original error: ${b.message}`)}return b(g,a)})}async function O(a){let b=D(a);await (0,y.af)(b),await (0,z.NU)(async()=>{await (0,y.af)(b);try{await e.promises.unlink(b),A.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?A.warn(`Error clearing item with key "${a}" at ${b}:`,c):A.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let P=/^[A-Za-z0-9_-]{1,64}$/;function Q(a){if("string"!=typeof a||!P.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let R=a=>g().join(B(),a),S=(a,b)=>g().join(R(a),`${b}.json`);async function T(a,b){Q(b);try{let c=await e.promises.stat(S(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let U=["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"],V=new Set(U);function W(a){if(!V.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function X(a,b){let c=g().relative(g().resolve(a),g().resolve(b));if(!c||c.startsWith("..")||g().isAbsolute(c))throw Error(`Persona shard path escapes its collection: ${b}`)}function Y(a,b){return W(a),Q(b),S(a,b)}function Z(a,b,c){W(a),Q(b),Q(c);let d=R(a),e=g().join(d,b,`${c}.json`);return X(d,e),e}async function $(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function _(a,b,c){W(a),Q(b);let d=R(a),f=g().join(d,b);X(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await $(d);if(!h)return null;if(!h.isDirectory()||h.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${d}`);if(c)try{await e.promises.mkdir(f)}catch(a){if("EEXIST"!==a.code)throw a}let i=await $(f);if(!i)return null;if(!i.isDirectory()||i.isSymbolicLink())throw Error(`Persona shard is not a link-free directory: ${f}`);let[j,k]=await Promise.all([e.promises.realpath(d),e.promises.realpath(f)]);return X(j,k),f}async function aa(a){return s(a,B())}async function ab(a){return(await aa(a))?.content??null}function ac(a,b,c,d){let e;try{e=JSON.parse(a)}catch(a){throw Error(`Invalid JSON in Persona record ${JSON.stringify(`${b}/${c}/${d}`)}: `+a.message)}if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`Persona record ${JSON.stringify(d)} is not an object.`);let f=e;if(f.id!==d||f.personaId!==c)throw new t.R(d,c);return e}class ad extends Error{constructor(a,b,c){super(`Conflicting flat and sharded copies exist for ${JSON.stringify(`${a}/${b}/${c}`)}.`),this.collection=a,this.personaId=b,this.recordId=c,this.code="PERSONA_SHARD_COLLISION",this.name="PersonaShardCollisionError"}}async function ae(a,b,c,d,e){W(a),Q(b),Q(c);let f=await _(a,b,!1),g=Z(a,b,c),h=Y(a,c),[i,j]=await Promise.all([f?ab(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):ab(h)]);if(null!==i&&null!==j&&i!==j)throw new ad(a,b,c);let k=i??j;return null===k?d:ac(k,a,b,c)}async function af(a,b,c){W(a),Q(b),Q(c);let d=await _(a,b,!1),e=Z(a,b,c),f=Y(a,c),[g,h]=await Promise.all([d?aa(e):Promise.resolve(null),aa(f)]);if(g&&h&&g.content!==h.content)throw new ad(a,b,c);let i=g??h;return i?(ac(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ag(a,b,c,f){if(W(a),Q(b),Q(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=Z(a,b,c),h=Y(a,c);await am(`persona-shard/${a}/${b}/${c}`,async()=>{await _(a,b,!0);let i=await ab(h);null!==i&&ac(i,a,b,c),await J(g,JSON.stringify(f,null,2));try{await (0,d.QO)(),await e.promises.unlink(h)}catch(a){if("ENOENT"!==a.code)throw a}})}async function ah(a,b,c){W(a),Q(b),Q(c);let d=Z(a,b,c),f=Y(a,c);await am(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await _(a,b,!1),[h,i]=await Promise.all([g?ab(d):Promise.resolve(null),ab(f)]);null!==h&&ac(h,a,b,c),null!==i&&ac(i,a,b,c),await Promise.all([d,f].map(async a=>{try{await e.promises.unlink(a)}catch(a){if("ENOENT"!==a.code)throw a}}))})}async function ai(a,b){let c=await _(a,b,!1);if(!c)return[];let d=(await e.promises.readdir(c)).sort(),f=[];for(let h of d){if(!h.endsWith(".json")||h.includes(".tmp.")||h.includes(".corrupted."))continue;let d=h.slice(0,-5);Q(d);let i=g().join(c,h),k=await e.promises.lstat(i,{bigint:!0});if(!k.isFile()||k.isSymbolicLink())throw Error(`Persona shard item is not a regular link-free file: ${i}`);let l=(await (0,j.b)(i,{expected:k,verifyPath:async()=>{await _(a,b,!1)}})).toString("utf8");f.push(ac(l,a,b,d))}return f}async function aj(a){W(a);let b=R(a),c=await $(b);if(!c)return[];if(!c.isDirectory()||c.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${b}`);let d=(await e.promises.readdir(b,{withFileTypes:!0})).sort((a,b)=>a.name.localeCompare(b.name)),f=new Map;for(let c of d){let d;if(c.isSymbolicLink())throw Error(`Persona collection contains a symbolic link: ${c.name}`);if(c.isDirectory()){for(let b of(Q(c.name),await ai(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new ad(a,c.name,b.id);f.set(b.id,{content:d,value:b})}continue}if(!c.isFile()||!c.name.endsWith(".json")||c.name.includes(".tmp.")||c.name.includes(".corrupted.")||c.name.endsWith(".bak"))continue;let h=c.name.slice(0,-5);Q(h);let i=await e.promises.readFile(g().join(b,c.name),"utf8");try{d=JSON.parse(i)}catch(b){throw Error(`Invalid JSON in flat Persona record ${JSON.stringify(`${a}/${h}`)}: `+b.message)}if("string"!=typeof d.personaId)throw Error(`Flat Persona record ${JSON.stringify(h)} has no owner.`);Q(d.personaId);let j=ac(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new ad(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}async function ak(a,b,c){W(a),Q(b),Q(c);let f=Z(a,b,c),g=Y(a,c);return am(`persona-shard/${a}/${b}/${c}`,async()=>{let h=await _(a,b,!1),[i,j]=await Promise.all([h?ab(f):Promise.resolve(null),ab(g)]);if(null!==i&&ac(i,a,b,c),null!==j&&ac(j,a,b,c),null!==i&&null!==j&&i!==j)throw new ad(a,b,c);if(null===j)return null===i?"missing":"already-migrated";if(null===i&&(await _(a,b,!0),await J(f,j),await ab(f)!==j))throw Error(`Could not verify migrated Persona record ${JSON.stringify(c)}.`);return await (0,d.QO)(),await e.promises.unlink(g),"migrated"})}async function al(a,b){W(a),Q(b),await am(`persona-shard/${a}/${b}`,async()=>{let c=await _(a,b,!1);if(c){for(let a of(await e.promises.readdir(c,{withFileTypes:!0})))if(!a.isFile()||a.isSymbolicLink())throw Error(`Persona shard contains a non-regular or linked entry: ${g().join(c,a.name)}`);await e.promises.rm(c,{recursive:!0})}})}function am(a,b){return(0,z.NU)(async()=>{let c=(0,x.workspaceCacheKey)("chain",a),d=(G.get(c)??Promise.resolve()).catch(()=>{}).then(b);return G.set(c,d),d.catch(()=>{}).finally(()=>{G.get(c)===d&&G.delete(c)}),d})}async function an(a,b,c){Q(b);let d=S(a,b);try{await am(`${a}/${b}`,()=>J(d,JSON.stringify(c,null,2))),A.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw A.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function ao(a,b,c){if(Q(b),"conversations"===a)return N(b,async a=>void 0===a?c:a);let d=S(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return A.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){A.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),A.info(`Created backup of corrupted file at: ${a}`)}catch(a){A.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${d}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(e){if("ENOENT"===e.code)return A.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw A.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function ap(a,b){Q(b);let c=S(a,b);await am(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),A.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;A.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function aq(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let a=await e.promises.readFile(b,"utf-8");if(0===a.trim().length){A.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){A.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function ar(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let f of b.sort()){let b;if(!f.endsWith(".json")||f.includes(".tmp.")||f.includes(".corrupted.")||f.endsWith(".bak"))continue;let h=f.slice(0,-5);Q(h);let i=g().join(c,f),j=await e.promises.readFile(i,"utf8");if(0===j.trim().length)throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is empty.`);try{b=JSON.parse(j)}catch(b){throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is invalid JSON: ${b.message}`)}d.push({id:h,item:b})}return d}async function as(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let[c,f]=await Promise.all([e.promises.readFile(b,"utf-8"),e.promises.stat(b)]);if(0===c.trim().length){A.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push({id:a.slice(0,-5),item:JSON.parse(c),mtimeMs:f.mtimeMs,sizeBytes:f.size})}catch(a){A.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function at(a,b,c){let f,g,h=D(a);try{f=await e.promises.readFile(h,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===f.trim().length)return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),0;try{g=JSON.parse(f)}catch(b){return A.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return A.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(R(b),{recursive:!0}),g)){let d;try{d=c(a),Q(d)}catch(a){A.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=S(b,d);try{await e.promises.access(f),A.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await J(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),A.info(`Migration: moved ${g.length} ${b} item(s) from ${a}.json to per-item storage.`),g.length}},619335:(a,b,c)=>{"use strict";c.d(b,{F_:()=>aj,GD:()=>am,Hh:()=>ag,Jc:()=>ah,Mr:()=>O,N$:()=>ao,QO:()=>al,RB:()=>ai,Uf:()=>U,Ug:()=>_,bG:()=>T,lc:()=>ap,p9:()=>ad});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(16698),i=c(977598),j=c(18963),k=c(907986),l=c(100629),m=c(826045),n=c(792711),o=c(596923),p=c(755822),q=c(181465);let r="FLUJO_MCP_WORKLOAD_TOKEN",s="FLUJO_MCP_WORKLOAD_AUDIENCE",t=/^flo_mcp1_[A-Za-z0-9_-]{43}$/;function u(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();return console.info("[workload-guard]",a,"start"),b().finally(()=>console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c)))}function v(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();console.info("[workload-guard]",a,"start");try{return b()}finally{console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c))}}let w=a=>(0,i.createHash)("sha256").update(a).digest("hex"),x=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],y=(a,b)=>x.every(c=>a[c]===b[c]),z=j.object(Object.fromEntries(x.map(a=>[a,j.string().regex(/^\d{1,40}$/)]))).strict(),A=p.Zl.shape.bundledInstallation.unwrap().shape.workload.unwrap().shape.inventory,B=j.object({version:j.literal(1),purpose:j.literal("bundled-flujo-control-v1"),tokenHash:j.string().regex(/^[a-f0-9]{64}$/),generation:j.string().uuid(),ownerId:j.string().regex(/^[A-Za-z0-9_-]{1,64}$/),ownerRevision:j.string().regex(/^[a-f0-9]{64}$/),workspace:j.string().refine(k.isValidWorkspaceName),serverName:j.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),audience:j.string().max(2048),policyDigest:j.string().regex(/^[a-f0-9]{64}$/),issuedAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),expiresAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),markerIdentity:z,markerDigest:j.string().regex(/^[a-f0-9]{64}$/),inventory:A}).strict().refine(a=>a.expiresAt>a.issuedAt&&a.expiresAt<=a.issuedAt+3e5),C=j.object({version:j.literal(1),generation:j.string().uuid(),state:j.literal("active"),recordDev:j.string().regex(/^\d{1,40}$/),recordIno:j.string().regex(/^\d{1,40}$/)}).strict(),D=new WeakMap,E=new WeakSet,F=new WeakMap,G=new h.AsyncLocalStorage,H=Symbol.for("FLUJO:bundled-flujo-workload-request:v1"),I=Symbol.for("FLUJO:bundled-flujo-workload-errors:v1");function J(a,b,c){let d=Object.getOwnPropertyDescriptor(globalThis,a);if(d){if(!("value"in d)||d.configurable||d.writable||!c(d.value))throw Error("Workload process context refused.");return d.value}let e=b();return Object.defineProperty(globalThis,a,{value:e,writable:!1,configurable:!1,enumerable:!1}),e}let K=J(H,()=>new h.AsyncLocalStorage,a=>a instanceof h.AsyncLocalStorage),L=J(I,()=>new WeakSet,a=>a instanceof WeakSet);function M(){let a=h.AsyncLocalStorage.prototype.getStore.call(K);if(void 0!==a&&!(a instanceof Request))throw new O;return a}let N=()=>Response.json({error:"Bundled workload authorization refused."},{status:401,headers:{"Cache-Control":"no-store"}});class O extends Error{constructor(a){super("Bundled workload authorization refused.",{cause:a}),this.response=N(),WeakSet.prototype.add.call(L,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(L,a)}}function P(a){if(!a)throw new O;let b=new URL(a);if(!["http:","https:"].includes(b.protocol)||!["127.0.0.1","localhost","[::1]"].includes(b.hostname)||b.username||b.password||"/"!==b.pathname||b.search||b.hash)throw new O;return b.origin}function Q(a){if(!g().isAbsolute(a))throw new O;return g().join(g().dirname(a),`.flujo-workloads-${w(g().resolve(a)).slice(0,24)}`)}function R(a){let b=D.get(a);if(!b)throw new O;return b}function S(a){if("retired"===a.state||"uncertain"===a.state||a.ledger!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||a.ownerFile!==process.env.FLUJO_OWNER_AUTH_FILE||(0,k.getCurrentWorkspace)()!==a.workspace||P(process.env.FLUJO_BASE_URL)!==a.audience)throw new O}function T(a){let b=(0,p.r)(a);if([...b.keys()].some(a=>[r,s].includes(a.toUpperCase())))throw new O;if("1"===process.env.FLUJO_WORKER_MODE||void 0===a.trustedHost)return;let c=p.Zl.parse(a.trustedHost);if(c.bundledInstallation?.packageDirectory!=="flujo")return;if(!c.bundledInstallation?.workload||![r,s].every(a=>c.environmentNames.includes(a)))throw new O;let d=(0,k.getCurrentWorkspace)(),e=P(process.env.FLUJO_BASE_URL);if(P(b.get("FLUJO_BASE_URL"))!==e||b.get("FLUJO_WORKSPACE")!==d)throw new O;let f=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,g=process.env.FLUJO_OWNER_AUTH_FILE;if(!f||!g)throw new O;let h=Object.freeze({});return D.set(h,{config:structuredClone(a),token:`flo_mcp1_${(0,i.randomBytes)(32).toString("base64url")}`,audience:e,workspace:d,ledger:f,ownerFile:g,state:"inactive"}),h}function U(a,b){if(!b)return Object.freeze({});let c=R(b);if(S(c),!(0,p.g)(a,c.config))throw new O;return Object.freeze({[r]:c.token,[s]:c.audience})}function V(a,b){let c=0;for(;c<b.length;){let d=e().writeSync(a,b,c,b.length-c,c);if(!d)throw new O;c+=d}e().ftruncateSync(a,b.length),e().fsyncSync(a)}function W(a){if(void 0===a.fd||void 0!==a.uncertainDescriptor)throw new O;return a.fd}function X(a){let b=g().dirname(a.filename),c=e().lstatSync(b,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==a.parentIdentity.dev||c.ino!==a.parentIdentity.ino||c.mode!==a.parentIdentity.mode||c.uid!==a.parentIdentity.uid||c.gid!==a.parentIdentity.gid||""!==g().relative(e().realpathSync(b),b))throw new O}function Y(a,b=!0){let c=W(a),d=e().fstatSync(c,{bigint:!0});if(!y(d,a.identity)||!d.isFile()||d.nlink!==BigInt(+!a.removed)||b&&!y(d,e().lstatSync(a.filename,{bigint:!0})))throw new O;let f=Buffer.alloc(a.bytes.length+1);try{let g=e().readSync(c,f,0,f.length,0);if(g!==a.bytes.length||!f.subarray(0,g).equals(a.bytes)||!y(d,e().fstatSync(c,{bigint:!0}))||b&&!y(d,e().lstatSync(a.filename,{bigint:!0})))throw new O}finally{f.fill(0)}}function Z(a){let b=e().lstatSync(g().dirname(a),{bigint:!0}),c=e().openSync(a,d.constants.O_RDWR|d.constants.O_CREAT|d.constants.O_EXCL|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0),384);return{fd:c,filename:a,bytes:Buffer.alloc(0),identity:e().fstatSync(c,{bigint:!0}),parentIdentity:b}}function $(a,b){let c=Buffer.from(JSON.stringify(b));if(c.length>65536)throw new O;Y(a),V(W(a),c),a.bytes.fill(0),a.bytes=c,a.identity=e().fstatSync(W(a),{bigint:!0}),Y(a),(0,p.Jl)(a.filename)}async function _(a,b){let d=R(a);if("inactive"!==d.state)throw new O;d.state="activating";try{let f,{assertVerifiedBundledFlujoWorkloadStart:h}=await Promise.all([c.e(53806),c.e(76161),c.e(86661),c.e(3587)]).then(c.bind(c,486661));S(d);let i=h(b,a);if(i.assertLive(),d.generation=i.generation,!(0,p.g)(i.config,d.config))throw new O;let j=await (0,q.RD)();if(S(d),i.assertLive(),(0,q.oA)(j)!==(0,q.oA)(p.Zl.parse(d.config.trustedHost).bundledInstallation?.workload?.inventory))throw new O;let k=n.rF.parse(await u("activation-owner",()=>(0,p.$j)(d.ownerFile)));S(d),i.assertLive();let l=v("activation-grant",()=>(0,p.vb)(d.config));if(k.ownerId!==l.ownerId||l.digest!==i.digest||l.ownerId!==i.ownerId)throw new O;let m=Q(d.ledger);try{e().mkdirSync(m,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}let r=e().lstatSync(m);if(!r.isDirectory()||r.isSymbolicLink()||""!==g().relative(e().realpathSync(m),m)||e().readdirSync(m).length>=512)throw new O;S(d),i.assertLive();let s=w(d.token),t=g().join(m,`${s}.json`);d.record=Z(g().join(m,`${s}.pending`)),d.marker=Z(g().join(m,`${s}.lease`)),v("activation-marker",()=>$(d.marker,{version:1,generation:i.generation,state:"active",recordDev:String(d.record.identity.dev),recordIno:String(d.record.identity.ino)}));let z=Date.now(),A=B.parse({version:1,purpose:"bundled-flujo-control-v1",tokenHash:s,generation:i.generation,ownerId:k.ownerId,ownerRevision:(0,o.T8)(k),workspace:d.workspace,serverName:d.config.name,audience:d.audience,policyDigest:l.digest,issuedAt:z,expiresAt:Math.min(z+3e5,l.expiresAt),markerIdentity:(f=d.marker.identity,Object.fromEntries(x.map(a=>[a,String(f[a])]))),markerDigest:w(d.marker.bytes),inventory:j});if(S(d),i.assertLive(),v("activation-record",()=>$(d.record,A)),(0,o.T8)(n.rF.parse(v("activation-owner-final",()=>(0,p.Jl)(d.ownerFile))))!==A.ownerRevision)throw new O;let C=v("activation-grant-final",()=>(0,p.vb)(d.config));if(S(d),i.assertLive(),C.digest!==A.policyDigest||C.ownerId!==A.ownerId||A.expiresAt<=Date.now()||(Y(d.marker),Y(d.record),e().existsSync(t)))throw new O;S(d),i.assertLive(),e().linkSync(d.record.filename,t);let D=e().fstatSync(W(d.record),{bigint:!0});if(D.nlink!==BigInt(2)||!y(D,e().lstatSync(d.record.filename,{bigint:!0}))||!y(D,e().lstatSync(t,{bigint:!0})))throw new O;e().unlinkSync(d.record.filename),d.record.filename=t,e().fsyncSync(W(d.record)),d.record.identity=e().fstatSync(W(d.record),{bigint:!0}),Y(d.record),d.state="active"}catch(b){try{ad(a)}catch(a){throw AggregateError([b,a],"Workload activation and durable retirement failed.",{cause:b})}throw b}}function aa(a){if(void 0!==a.uncertainDescriptor){try{e().fstatSync(a.uncertainDescriptor)}catch(b){if("EBADF"===b.code){a.uncertainDescriptor=void 0;return}throw b}throw new O}}function ab(a){if(a.recoveryWriter){if(aa(a.recoveryWriter),void 0!==a.recoveryWriter.fd)throw new O;a.recoveryWriter=void 0}}function ac(a){if(ab(a),aa(a),X(a),a.removed){try{e().lstatSync(a.filename)}catch(a){if("ENOENT"===a.code)return;throw a}throw new O}if(void 0!==a.fd){if(Y(a),a.readOnlyWitness){a.bytes.length&&(0,p.Jl)(a.filename);let b=a.fd,c=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),f={fd:c,uncertainDescriptor:void 0};a.recoveryWriter=f;try{if(!y(a.identity,e().fstatSync(c,{bigint:!0})))throw new O;Y(a),X(a)}catch(b){f.fd=void 0;try{e().closeSync(c)}catch(a){f.uncertainDescriptor=c;try{aa(f)}catch{}throw AggregateError([b,a],"Workload retry writer verification and cleanup failed.",{cause:b})}throw a.recoveryWriter=void 0,b}a.fd=c,a.readOnlyWitness=!1,a.recoveryWriter=void 0;try{e().closeSync(b)}catch(c){a.uncertainDescriptor=b;try{aa(a)}catch{}throw c}Y(a),X(a)}return}if(!y(a.identity,e().lstatSync(a.filename,{bigint:!0})))throw new O;a.bytes.length&&(0,p.Jl)(a.filename),a.fd=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),Y(a),X(a)}function ad(a){if(!a)return;let b=R(a);if("retired"===b.state)return;b.state="uncertain";let c=[],f=b.marker;if(f)try{if(ac(f),!b.durablyRevoked){if(f.removed)throw new O;f.bytes.length&&(0,p.Jl)(f.filename),Y(f);let a=Buffer.from(JSON.stringify({version:1,generation:b.generation,state:"revoked"}));V(W(f),a),f.bytes.fill(0),f.bytes=a,f.identity=e().fstatSync(W(f),{bigint:!0}),Y(f),X(f),b.durablyRevoked=!0}}catch(a){c.push(a)}for(let a of[b.record,b.marker])if(a){try{if(ac(a),!a.removed){a.bytes.length&&(0,p.Jl)(a.filename),Y(a),X(a),e().unlinkSync(a.filename);let b=e().fstatSync(W(a),{bigint:!0});if(b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.nlink!==BigInt(0)||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid)throw new O;a.identity=b,a.removed=!0,e().fsyncSync(W(a))}}catch(a){c.push(a)}try{!function(a){let b,c;if(ab(a),aa(a),void 0===a.fd)return;if(!a.removed){X(a),Y(a),a.bytes.length&&(0,p.Jl)(a.filename);let c={fd:b=e().openSync(a.filename,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),uncertainDescriptor:void 0};a.recoveryWriter=c;try{if(!y(a.identity,e().fstatSync(b,{bigint:!0})))throw new O;Y(a),X(a)}catch(d){c.fd=void 0;try{e().closeSync(b)}catch(a){c.uncertainDescriptor=b;try{aa(c)}catch{}throw AggregateError([d,a],"Workload close witness failed.",{cause:d})}throw a.recoveryWriter=void 0,d}a.recoveryWriter=void 0}let f=a.identity,g=a.fd;a.fd=void 0;try{e().closeSync(g)}catch(b){c=b,a.uncertainDescriptor=g;try{aa(a)}catch{}}if(void 0!==b){a.fd=b,a.readOnlyWitness=!0;try{if(void 0===a.uncertainDescriptor){let c=e().fstatSync(b,{bigint:!0});if(!x.filter(a=>"ctimeNs"!==a).every(a=>f[a]===c[a]))throw new O;let d=a.identity;a.identity=c;try{Y(a),X(a),a.bytes.length&&(0,p.Jl)(a.filename),Y(a)}catch(b){throw a.identity=d,b}}}catch(a){if(void 0!==c)throw AggregateError([c,a],"Workload close and witness verification failed.",{cause:c});throw a}}if(void 0!==c)throw c}(a)}catch(a){c.push(a)}}if(c.length)throw AggregateError(c,"Workload retirement remains uncertain.");if(f&&!b.durablyRevoked)throw new O;for(let a of[b.record,b.marker])a?.bytes.fill(0);b.state="retired"}async function ae(a,b){let c=g().resolve((0,k.getWorkspaceDataDir)()),d=g().join(c,"db","mcp_servers.json"),f=[],h=g().dirname(d);for(;;){let a=e().lstatSync(h,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||""!==g().relative(e().realpathSync(h),h))throw new O;f.push({filename:h,identity:a});let b=g().dirname(h);if(b===h)break;h=b}let i=async()=>{for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new O}await (0,m.af)(d)};await i();let j=e().lstatSync(d,{bigint:!0}),n=await (0,l.b)(d,{maxBytes:4194304,signal:b,verifyPath:i,expected:j});try{let c=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n));if(!c||"object"!=typeof c||Array.isArray(c)||!Object.hasOwn(c,a))throw new O;let h=c[a];if(!h||"object"!=typeof h||Array.isArray(h))throw new O;let i={...h,name:a};if("stdio"!==i.transport||i.disabled||"string"!=typeof i.command||"string"!=typeof i.cwd)throw new O;return p.Zl.parse(i.trustedHost),{config:i,assertCurrent:()=>{if(!y(j,e().lstatSync(d,{bigint:!0})))throw new O;for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new O}b.throwIfAborted()}}}finally{n.fill(0)}}async function af(a){let b="request";try{a.signal.throwIfAborted();let c=/^Bearer (flo_mcp1_[A-Za-z0-9_-]{43})$/.exec(a.headers.get("authorization")??"");if(!c||!t.test(c[1])||"1"===process.env.FLUJO_WORKER_MODE)throw new O;let d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw new O;let h=w(c[1]),i=g().join(Q(d),`${h}.json`),j=g().join(Q(d),`${h}.lease`);b="private-files";let l=e().lstatSync(i,{bigint:!0}),m=e().lstatSync(j,{bigint:!0}),r=[i,j,f,d],[s,z,A,D]=await u("private-set-initial",()=>(0,p.pr)(r,a.signal,["record","marker","owner","ledger"]));b="private-binding";let E=B.parse(s),F=C.parse(z),G=n.rF.parse(A),H=p.DV.parse(D),I=H.approvals.find(a=>a.workspace===E.workspace&&a.serverName===E.serverName);if(E.tokenHash!==h||E.issuedAt>Date.now()||E.expiresAt<=Date.now()||!x.every(a=>String(m[a])===E.markerIdentity[a])||1!==F.version||F.generation!==E.generation||"active"!==F.state||F.recordDev!==String(l.dev)||F.recordIno!==String(l.ino)||w(JSON.stringify(F))!==E.markerDigest||G.ownerId!==E.ownerId||(0,o.T8)(G)!==E.ownerRevision||H.ownerId!==E.ownerId||!I||I.expiresAt<=Date.now()||I.policyDigest!==E.policyDigest)throw new O;let J=new URL(a.url);b="request-binding";let K=(a,b)=>{if(!a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-request-binding]","refused",b)}catch{}throw new O}};if(K(J.origin===E.audience,"url-audience"),K(P(process.env.FLUJO_BASE_URL)===E.audience,"process-audience"),K(a.headers.get("host")===J.host,"host"),K(null===a.headers.get("origin")||a.headers.get("origin")===E.audience,"origin"),K(a.headers.get("x-flujo-workspace")===E.workspace,"workspace-header"),K(!J.searchParams.has("workspace"),"workspace-query"),K(E.inventory.some(b=>b.path===J.pathname&&b.method===a.method),"inventory-route"),K(!/%|\\|\/\//.test(J.pathname),"path"),await (0,k.runWithWorkspace)(E.workspace,async()=>{b="config";let c=(await u("config-first",()=>ae(E.serverName,a.signal))).config,d=p.Zl.parse(c.trustedHost);if(d.bundledInstallation?.packageDirectory!=="flujo")throw new O;b="package";let e=await u("package-verification",()=>(0,p.Bh)(c,a.signal));b="inventory-binding";let f=await u("inventory",()=>(0,q.RD)());if(e.ownerId!==E.ownerId||e.digest!==E.policyDigest||(0,q.oA)(d.bundledInstallation.workload?.inventory)!==(0,q.oA)(E.inventory)||(0,q.oA)(f)!==(0,q.oA)(E.inventory))throw new O;b="config-fences";let g=await u("config-latest",()=>ae(E.serverName,a.signal));if(!(0,p.g)(g.config,c))throw new O;let h=await u("config-final",()=>ae(E.serverName,a.signal)),i=h.config;if(!(0,p.g)(i,c))throw new O;let j=v("digest-final",()=>(0,p.OU)(i));b="final-private-binding";let[k,l,m,s]=v("private-set-final",()=>(0,p.jf)(r,a.signal)),t=n.rF.parse(m),w=p.DV.parse(s),x=w.approvals.find(a=>a.workspace===E.workspace&&a.serverName===E.serverName);if((0,q.oA)(B.parse(k))!==(0,q.oA)(E)||(0,q.oA)(C.parse(l))!==(0,q.oA)(F)||t.ownerId!==E.ownerId||(0,o.T8)(t)!==E.ownerRevision||w.ownerId!==E.ownerId||!x||x.expiresAt<=Date.now()||x.policyDigest!==E.policyDigest||j!==E.policyDigest)throw new O;h.assertCurrent()}),b="final-file-fences",!y(l,e().lstatSync(i,{bigint:!0}))||!y(m,e().lstatSync(j,{bigint:!0}))||d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE||P(process.env.FLUJO_BASE_URL)!==E.audience||E.expiresAt<=Date.now())throw new O;return a.signal.throwIfAborted(),E}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-guard]","refused",b)}catch{}throw a}}async function ag(a){if(!/flo_mcp1_/i.test(a.headers.get("authorization")??""))return{kind:"unrelated"};try{let b=await af(a),c=Object.freeze({workspace:b.workspace,serverName:b.serverName,generation:b.generation,inventory:Object.freeze(b.inventory.map(a=>Object.freeze(a))),readRequest:()=>a,recheck:async()=>{try{let c=await af(a);if((0,q.oA)(c)!==(0,q.oA)(b))return N();return null}catch{return N()}}});return E.add(c),{kind:"authorized",authorization:c}}catch{return{kind:"denied",response:N()}}}async function ah(a,b){if(!E.has(a)||b!==a.readRequest())throw new O;let d=await c.e(83829).then(c.bind(c,560493)),e=()=>{let a=Reflect.get(d,"hasExecutionExtensionContext");if("function"!=typeof a||d.executionExtensionAdapter()||a())throw new O};if(e(),await a.recheck())throw new O;e()}async function ai(a,b,c){await ah(a,b);let d=M();if(d&&d!==b)throw new O;return h.AsyncLocalStorage.prototype.run.call(K,b,()=>G.run({authorization:a,request:b},c))}function aj(){let a=G.getStore(),b=M();if(!a&&!b)return;if(!a||!b||a.request!==b||!E.has(a.authorization))throw new O;let c=new Set(["listTools","listResources","listResourceTemplates","readResource","listSkills","getSkill"]);return a.authorization.inventory.filter(a=>!c.has(a.action)).map(a=>a.action)}async function ak(){let a=M(),b=G.getStore();if(!a&&!b)return;if(!a)throw new O;if(b){if(b.request!==a||!E.has(b.authorization))throw new O;return b}let c=F.get(a);if(c){if(!E.has(c)||c.readRequest()!==a)throw new O;return{authorization:c,request:a}}let d=await ag(a);if("authorized"!==d.kind||M()!==a)throw new O;return F.set(a,d.authorization),{authorization:d.authorization,request:a}}async function al(){let a=await ak();a&&await ah(a.authorization,a.request)}async function am(a,b,d,e={}){let f=await ak();if(!f)return;await ah(f.authorization,f.request);let g=await (0,q.zz)(),h="string"==typeof a?[a]:a;if(0===h.length)throw new O;let{AjvJsonSchemaValidator:i}=await c.e(45775).then(c.bind(c,945775)),j=new i;for(let a of h){let c=g.find(c=>c.action.action===a&&c.action.method===b&&c.action.path===d);if(!c||!f.authorization.inventory.some(a=>(0,q.oA)(a)===(0,q.oA)(c.action))||!j.getValidator(c.schema)(e).valid)throw new O}await ah(f.authorization,f.request)}let an=new WeakMap;function ao(a,b=200){let c=new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}});return c.body&&an.set(c,c.body),c}function ap(a,b,c){if(!a.body)return a;let d=a.body,e=d.getReader();return an.get(a)===d?new Response(new ReadableStream({async pull(a){try{c.throwIfAborted();let d=await e.read();c.throwIfAborted(),await ah(b,b.readRequest()),c.throwIfAborted(),d.done||a.enqueue(d.value),a.close(),e.releaseLock()}catch(b){try{await e.cancel(b)}finally{e.releaseLock(),a.error(b)}}},async cancel(a){try{await e.cancel(a)}finally{e.releaseLock()}}}),{status:a.status,statusText:a.statusText,headers:a.headers}):new Response(new ReadableStream({async pull(a){try{c.throwIfAborted(),await ah(b,b.readRequest());let d=await e.read();c.throwIfAborted(),await ah(b,b.readRequest()),d.done?(a.close(),e.releaseLock()):a.enqueue(d.value)}catch(b){try{await e.cancel(b)}finally{e.releaseLock(),a.error(b)}}},async cancel(a){try{await e.cancel(a)}finally{e.releaseLock()}}}),{status:a.status,statusText:a.statusText,headers:a.headers})}},649796:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(777943)},673560:(a,b,c)=>{"use strict";c.d(b,{Th:()=>e});let d=["localhost","network","public"];function e(a=process.env){let b=a.FLUJO_EXPOSURE_MODE?.trim().toLowerCase();return"string"==typeof b&&d.includes(b)?b:function(a=process.env){return a.FLUJO_MCP_APP_SANDBOX_PUBLIC_URL?.trim()||a.FLUJO_MCP_APP_HOST_ORIGINS?.trim()?"public":a.FLUJO_EXTRA_LOCAL_HOSTS?.split(",").some(a=>a.trim().length>0&&"."!==a.trim())?"network":void 0}(a)??"localhost"}},720929:(a,b,c)=>{"use strict";c.d(b,{Z:()=>l,b:()=>k});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(134887);function j(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function k(){let a=process.env.FLUJO_ENCRYPTION_SECRET_FILE;if(void 0===a)return null;if(!g().isAbsolute(a))throw Error("Private encryption secret is unavailable");let b=g().resolve(a),c=[g().resolve((0,i.ok)())];try{c.push(e().realpathSync(c[0]))}catch(a){if("ENOENT"!==a.code)throw a}if(c.some(a=>{let c=g().relative(a,b);return""===c||".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}))throw Error("Private encryption secret must be outside the data directory");let d=e().lstatSync(b,{bigint:!0});if(!d.isFile()||d.isSymbolicLink()||d.nlink!==BigInt(1)||d.size>BigInt(1024)||""!==g().relative(e().realpathSync(b),b)||"win32"!==process.platform&&((d.mode&BigInt(63))!==BigInt(0)||d.uid!==BigInt(process.getuid?.()??-1)))throw Error("Private encryption secret is unavailable");let f=e().openSync(b,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let a=e().fstatSync(f,{bigint:!0});if(!a.isFile()||!j(d,a))throw Error("Private encryption secret changed");let c=Buffer.alloc(1025),i=0;for(;i<c.length;){let a=e().readSync(f,c,i,c.length-i,null);if(!a)break;i+=a}if(BigInt(i)!==a.size||!j(a,e().fstatSync(f,{bigint:!0}))||!j(a,e().lstatSync(b,{bigint:!0}))||""!==g().relative(e().realpathSync(b),b))throw Error("Private encryption secret changed");let k=new TextDecoder("utf-8",{fatal:!0}).decode(c.subarray(0,i)).replace(/\r?\n$/,"");if(!/^[A-Za-z0-9_-]{43,512}$/.test(k))throw Error("Private encryption secret is invalid");let l=(0,h.createHash)("sha256").update(JSON.stringify([b,...["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].map(b=>String(a[b]))])).digest("hex");return{secret:k,identity:l}}finally{e().closeSync(f)}}function l(){return k()?.secret??null}},750122:(a,b,c)=>{"use strict";c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},755822:(a,b,c)=>{"use strict";c.d(b,{BD:()=>x,Kq:()=>B,y0:()=>G,Sy:()=>_,Ny:()=>H,f:()=>$,Jl:()=>I,$j:()=>J,tm:()=>K,jf:()=>M,pr:()=>L,g:()=>R,DV:()=>A,r:()=>u,vb:()=>V,VN:()=>W,OU:()=>Q,Zl:()=>z,Ik:()=>T,Do:()=>y,Bh:()=>aa});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(18963),j=c(907986),k=c(134887),l=c(792711),m=c(731421);let n=String.raw`
|
|
1
|
+
exports.id=75650,exports.ids=[75650],exports.modules={12778:(a,b,c)=>{"use strict";c.d(b,{dw:()=>k,gF:()=>h,re:()=>e});var d=c(178877);class e extends Error{constructor(a,b){super(429===b?"Conversation history reads are busy. Retry shortly.":"Insufficient memory to safely load complete conversation history. Retry after active work finishes."),this.code=a,this.status=b,this.name="ConversationLogReadPressureError"}}let f=globalThis,g=f.__flujoConversationLogReadAdmission??={active:0,bytes:0},h=4,i=new WeakMap;function j(a){let b=16*a+131072,c=(0,d.getHeapStatistics)();if(!Number.isSafeInteger(b)||a<0||g.bytes+b>c.heap_size_limit-c.used_heap_size-0x4000000)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}async function k(a,b,c){if(void 0!==c){let d=c&&i.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let e=j(a);g.bytes+=e;let f=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=e});return d.pending.add(f),f.then(()=>d.pending.delete(f),()=>d.pending.delete(f)),f}if(g.active>=h)throw new e("CONVERSATION_LOG_READ_BUSY",429);let d=j(a),f=Object.freeze({}),k={open:!0,pending:new Set};i.set(f,k),g.active++,g.bytes+=d;try{return await b(f)}finally{k.open=!1,await Promise.allSettled([...k.pending]),i.delete(f),g.active--,g.bytes-=d}}},18705:(a,b,c)=>{"use strict";c.d(b,{G:()=>m,V:()=>l,resolveGlobalVars:()=>k});var d=c(649796),e=c(266844),f=c(610782),g=c(774755),h=c(930100),i=c(824424);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)},32795:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"408e95c9b906f3ef839dde556a95e6adaefe9dc1be":()=>d.V,"603178a35b1410c0aaf391136953b3bb477ab58c61":()=>d.resolveGlobalVars,"605160b4fcfcb41b05d153a2ecabb01cd2c84a62bb":()=>d.G});var d=c(18705)},47293:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});let d=new Uint8Array(16);var e=c(750122);let f=function(a,b,c){return b||a||!crypto.randomUUID?function(a,b,c){let f=(a=a||{}).random??a.rng?.()??crypto.getRandomValues(d);if(f.length<16)throw Error("Random bytes length must be >= 16");if(f[6]=15&f[6]|64,f[8]=63&f[8]|128,b){if((c=c||0)<0||c+16>b.length)throw RangeError(`UUID byte range ${c}:${c+15} is out of buffer bounds`);for(let a=0;a<16;++a)b[c+a]=f[a];return b}return(0,e.k)(f)}(a,b,c):crypto.randomUUID()}},78335:()=>{},100629:(a,b,c)=>{"use strict";c.d(b,{$:()=>f,b:()=>i});var d=c(973024),e=c(504573);class f extends Error{constructor(a,b){super("SIZE_LIMIT"===a?"File exceeds the size limit.":"File is unsafe or changed while being read."),this.code=a,this.detail=b,this.name="PlainFileReadError"}}function g(a,b){for(let c of["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"])if(a[c]!==b[c])return c}function h(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function i(a,b={}){b.signal?.throwIfAborted();let c=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let i=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===i[0].status)throw i[0].reason;if("rejected"===i[1].status)throw i[1].reason;let j=i[0].value,k=i[1].value;if(!j.isFile()||!k.isFile()||k.isSymbolicLink()||j.nlink!==BigInt(1)||!h(j,k)||b.expected&&!h(b.expected,j)||b.ownerOnly&&"win32"!==process.platform&&(j.mode&BigInt(63))!==BigInt(0)){let a=g(j,k),c=b.expected&&g(b.expected,j),d=!j.isFile()||!k.isFile()||k.isSymbolicLink()?"not-plain-file":j.nlink!==BigInt(1)?"hard-linked":a?`descriptor-path:${a}`:c?`expected:${c}`:"permissions";throw new f("UNSAFE_FILE",d)}let l=Math.min(b.maxBytes??e.constants.MAX_LENGTH-1,e.constants.MAX_LENGTH-1);if(!Number.isSafeInteger(l)||l<0||j.size<BigInt(0)||j.size>BigInt(l))throw new f("SIZE_LIMIT");await b.verifyPath?.();let m=Number(j.size)+1,n=Buffer.alloc(b.consume?Math.min(65536,m):m),o=0;for(;o<m;){b.signal?.throwIfAborted();let a=b.consume?0:o,{bytesRead:d}=await c.read(n,a,Math.min(m-o,b.consume?n.length:1048576),o);if(0===d)break;b.consume&&await b.consume(n.subarray(0,d)),o+=d}if(BigInt(o)!==j.size)throw new f("FILE_CHANGED");let p=await Promise.allSettled([c.stat({bigint:!0}),d.promises.lstat(a,{bigint:!0})]);if("rejected"===p[0].status)throw p[0].reason;if(!h(j,p[0].value))throw new f("FILE_CHANGED");if("rejected"===p[1].status)throw p[1].reason;let q=p[1].value;if(q.isSymbolicLink()||!h(j,q))throw new f("FILE_CHANGED");return await b.verifyPath?.(),b.signal?.throwIfAborted(),b.consume?Buffer.alloc(0):n.subarray(0,o)}finally{await c.close()}}},134887:(a,b,c)=>{"use strict";c.d(b,{JC:()=>f,Ne:()=>j,Sx:()=>h,ok:()=>g,v0:()=>i});var d=c(333873),e=c.n(d);function f(){return process.cwd()}function g(){let a=process.env.FLUJO_PARENT_DATA_DIR;if(a&&a.trim().length>0)return e().resolve(a);let b=process.env.FLUJO_DATA_DIR;return b&&b.trim().length>0?e().resolve(b):f()}function h(){let a=process.env.FLUJO_OLLAMA_URL;return(a&&a.trim().length>0?a.trim():"http://localhost:11434").replace(/\/+$/,"")}function i(){let a=process.env.FLUJO_OLLAMA;return"1"===a||"true"===a||"yes"===a}function j(){return process.env.FLUJO_CONTAINER?"container":process.env.FLUJO_NPM?"npm":"git"}},158601:(a,b,c)=>{"use strict";c.d(b,{Fc:()=>s,YM:()=>n,bA:()=>l,c$:()=>p,eu:()=>q,ip:()=>r,jw:()=>k,pi:()=>o,ui:()=>m});var d=c(47293),e=c(266844),f=c(907986),g=c(388100);let h=(0,e.h)("utils/encryption/session");function i(a=(0,f.getCurrentWorkspace)()){if(a===f.DEFAULT_WORKSPACE)return global.__flujo_encryption_sessions??(global.__flujo_encryption_sessions=new Map);let b=global.__flujo_encryption_sessions_by_workspace??(global.__flujo_encryption_sessions_by_workspace=new Map),c=b.get(a);return c||(c=new Map,b.set(a,c)),c}function j(){return global.__flujo_server_deks_by_workspace??(global.__flujo_server_deks_by_workspace=new Map)}function k(a){(0,g.hA)();let b=(0,d.A)(),c=Date.now(),e={workspace:(0,f.getCurrentWorkspace)(),token:b,dek:a,createdAt:c,lastUsed:c};return i().set(b,e),h.info("Created encryption session"),!u&&(u=setInterval(t,36e5)).unref&&u.unref(),b}function l(a){let b=(0,f.getCurrentWorkspace)(),c=i(b),d=c.get(a);if(!d||(d.workspace??f.DEFAULT_WORKSPACE)!==b)return h.warn("Encryption session not found"),null;let e=Date.now();return e-d.createdAt>72e5?(h.warn("Encryption session expired"),c.delete(a),(0,g.hA)(),null):(d.lastUsed=e,d.dek)}function m(a){let b=i();b.has(a)&&(b.delete(a),(0,g.hA)(),h.info("Invalidated encryption session"))}function n(a){(0,g.hA)();let b=(0,f.getCurrentWorkspace)();global.__flujo_worker_transfer_provenance?.delete(b),b===f.DEFAULT_WORKSPACE?global.__flujo_server_dek=a:j().set(b,a),h.info("Server encryption unlocked",{workspace:b})}function o(){(0,g.hA)();let a=(0,f.getCurrentWorkspace)();global.__flujo_worker_transfer_provenance?.delete(a),a===f.DEFAULT_WORKSPACE?global.__flujo_server_dek=null:j().set(a,null),h.info("Server encryption locked",{workspace:a})}function p(){return!q()}function q(){let a=(0,f.getCurrentWorkspace)();return a===f.DEFAULT_WORKSPACE?global.__flujo_server_dek??null:j().get(a)??null}function r(a){if(a.workspace!==(0,f.getCurrentWorkspace)())throw Error("Worker transfer workspace mismatch");(0,g.hA)(),(global.__flujo_worker_transfer_provenance??=new Map).set(a.workspace,Object.freeze({...a}))}function s(){return global.__flujo_worker_transfer_provenance?.get((0,f.getCurrentWorkspace)())}function t(){let a=Date.now(),b=0;for(let[c,d]of[[f.DEFAULT_WORKSPACE,global.__flujo_encryption_sessions],...Array.from(global.__flujo_encryption_sessions_by_workspace?.entries()??[])]){if(!d)continue;let e=!1;for(let[c,f]of d.entries())a-f.createdAt>72e5&&(d.delete(c),b++,e=!0);e&&(0,f.runWithWorkspace)(c,g.hA)}b>0&&h.info(`Cleaned up ${b} expired encryption sessions`)}let u=null},181465:(a,b,c)=>{"use strict";c.d(b,{RD:()=>k,ju:()=>e,oA:()=>g,zz:()=>j});var d=c(977598);let e="bundled-flujo-control-v1",f="/api/mcp/flujo/";function g(a){let b=(a,c)=>{if(c>32)throw Error("Workload schema depth refused.");if(null===a||"string"==typeof a||"boolean"==typeof a||"number"==typeof a&&Number.isFinite(a))return a;if(Array.isArray(a))return a.map(a=>b(a,c+1));if(!a||"object"!=typeof a)throw Error("Workload schema value refused.");let d=Object.getOwnPropertyDescriptors(a);return Object.fromEntries(Object.keys(d).sort().filter(a=>d[a].enumerable).map(a=>{if(!("value"in d[a]))throw Error("Workload schema accessor refused.");return[a,b(d[a].value,c+1)]}))},c=JSON.stringify(b(a,0));if(Buffer.byteLength(c)>65536)throw Error("Workload schema bytes refused.");return c}let h=a=>(0,d.createHash)("sha256").update(g(a)).digest("hex"),i={listTools:{path:"tools",method:"GET",schema:{type:"object",additionalProperties:!1}},listResources:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},listResourceTemplates:{path:"resources",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},readResource:{path:"resources/read",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}},listSkills:{path:"skills",method:"GET",schema:{type:"object",properties:{cursor:{type:"string"}},additionalProperties:!1}},getSkill:{path:"skills",method:"POST",schema:{type:"object",properties:{uri:{type:"string",minLength:1}},required:["uri"],additionalProperties:!1}}};async function j(){let[a,b,d]=await Promise.all([Promise.all([c.e(7397),c.e(76364),c.e(53806),c.e(64165),c.e(45775),c.e(76161),c.e(18477),c.e(71244),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(79365),c.e(8464),c.e(62377),c.e(65326),c.e(42248),c.e(86661),c.e(36362),c.e(8849),c.e(7461)]).then(c.bind(c,407461)),Promise.all([c.e(7397),c.e(76364),c.e(53806),c.e(64165),c.e(45775),c.e(76161),c.e(18477),c.e(71244),c.e(45481),c.e(84314),c.e(74107),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(79365),c.e(8464),c.e(62377),c.e(65326),c.e(42248),c.e(86661),c.e(36362),c.e(7937),c.e(61992),c.e(92967),c.e(22698),c.e(17319),c.e(36009),c.e(9961),c.e(65899),c.e(5417),c.e(59678),c.e(48140),c.e(21821),c.e(94063),c.e(87513),c.e(3010),c.e(43384),c.e(56210)]).then(c.bind(c,143384)),c.e(42471).then(c.bind(c,242471))]),e=d.systemScreenshotEnabled(),j=b.internalToolDefinitions(),k=[["authoring",a.FLUJO_AUTHORING_TOOLS],["flows",a.FLUJO_FLOW_TOOLS],["servers",a.FLUJO_SERVER_TOOLS],["automation",a.FLUJO_AUTOMATION_TOOLS],["state",a.FLUJO_STATE_TOOLS]],l=new Set,m=[];for(let[a,b]of k)for(let c of b){if(l.has(c))throw Error("Duplicate workload action refused.");l.add(c);let b=j.filter(a=>a.name===c);if("system_screenshot"===c&&0===b.length&&!e&&void 0===d.systemScreenshotToolDefinition())continue;if(1!==b.length)throw Error("Missing or ambiguous workload definition.");let g=b[0].inputSchema;m.push({action:{action:c,method:"POST",path:f+a,schemaDigest:h({inputSchema:g,annotations:b[0].annotations??null})},schema:g,tool:!0})}for(let[a,b]of Object.entries(i))m.push({action:{action:a,method:b.method,path:f+b.path,schemaDigest:h(b.schema)},schema:b.schema,tool:!1});if(m.length>70)throw Error("Workload inventory exceeds its bound.");if(m.sort((a,b)=>a.action.action<b.action.action?-1:+(a.action.action>b.action.action)),g(m.map(a=>a.action)),e!==d.systemScreenshotEnabled())throw Error("Workload capability availability changed.");return m}async function k(){return(await j()).map(a=>Object.freeze(a.action))}},235447:(a,b,c)=>{"use strict";c.d(b,{R:()=>d});class d extends Error{constructor(a,b){super(`Persona record ${JSON.stringify(a)} does not match requested Persona ${JSON.stringify(b)}.`),this.code="PERSONA_SHARD_IDENTITY_MISMATCH",this.name="PersonaShardIdentityError"}}},266844:(a,b,c)=>{"use strict";c.d(b,{h:()=>h});var d=c(858405);let e="number"==typeof d.Gv.LOG_LEVEL?d.Gv.LOG_LEVEL:3;function f(a,b=0){if(b>6)return String(a);if(!(a instanceof Error))return a;let c=new Map([["name",a.name],["message",a.message]]);for(let d of Object.getOwnPropertyNames(a)){if("name"===d||"message"===d)continue;let e=a[d];"function"!=typeof e&&("stack"===d?c.set("stack",e):"cause"===d?c.set("cause",f(e,b+1)):"errors"===d&&Array.isArray(e)?c.set("errors",e.map(a=>f(a,b+1))):c.set(d,e))}return Object.fromEntries(c)}function g(a,b,c,d,g){if(a>=("number"==typeof g?g:e)){if("function"==typeof d)try{d=d()}catch{d="[lazy log data threw]"}let e=new Date().toISOString(),g=`[${e}] [${b}]`,h=`${g} ${c}`;if(void 0!==d)if(d instanceof Error||"object"==typeof d)try{let a=d instanceof Error?f(d):d,b=JSON.stringify(a,(a,b)=>b instanceof Error?f(b):b,2);h+=`:
|
|
2
|
+
${b}`}catch(a){h+=": [Object cannot be stringified]"}else h+=`: ${d}`;switch(h=h.replace(/[\r\n\u2028\u2029]/g," ").replaceAll("\x1b","[ESC]").replace(/\p{Control}/gu,a=>`\\u${a.charCodeAt(0).toString(16).padStart(4,"0")}`),a){case -1:console.debug(`[VERBOSE] ${h}`);break;case 0:console.debug(h);break;case 1:console.info(h);break;case 2:console.warn(h);break;case 3:console.error(h);break;default:console.log(h)}}}function h(a,b){let c,d=((c=a.replace(/^src\//,"")).startsWith("/")&&(c=c.substring(1)),c);return{verbose:(a,c)=>{g(-1,d,a,c,b)},debug:(a,c)=>{g(0,d,a,c,b)},info:(a,c)=>{g(1,d,a,c,b)},warn:(a,c)=>{g(2,d,a,c,b)},error:(a,c)=>{g(3,d,a,c,b)}}}},296487:()=>{},326042:(a,b,c)=>{"use strict";c.d(b,{Zg:()=>e});var d,e=((d={}).MODELS="models",d.AVATAR_WORLD="avatar_world",d.FLOWS="flows",d.TICKETS="tickets",d.CHAT_HISTORY="history",d.THEME="theme",d.THEME_STYLE="theme_style",d.LIVING_WORLD_ENABLED="living_world_enabled",d.ENCRYPTION_KEY="encryption_key",d.MCP_SERVERS="mcp_servers",d.GLOBAL_ENV_VARS="global_env_vars",d.CURRENT_CONVERSATION_ID="current_conversation_id",d.SELECTED_FLOW_ID="selected_flow_id",d.LAST_PICKED_FLOW_ID="last_picked_flow_id",d.SPEECH_SETTINGS="speech_settings",d.SPOTLIGHT_SERVERS="spotlight_servers",d.PLANNED_EXECUTIONS="planned_executions",d.MCP_AUTO_INSTALL_SETTINGS="mcp_auto_install_settings",d.MCP_QUALITY_SETTINGS="mcp_quality_settings",d.MCP_APP_CONSENT="mcp_app_consent",d.RUN_RESOURCE_SETTINGS="run_resource_settings",d.MEMORY_SETTINGS="memory_settings",d.SUBFLOW_TASK_SETTINGS="subflow_task_settings",d.MCP_REMOTE_TASK_SETTINGS="mcp_remote_task_settings",d.KV_STORE_SETTINGS="kv_store_settings",d.PENDING_APPROVALS="pending_approvals",d.MCP_INTERNAL_OVERRIDES="mcp_internal_overrides",d.MCP_INTERNAL_SERVERS_MIGRATION_V1="mcp_internal_servers_migration_v1",d.MCP_INTERNAL_CAPABILITIES_MIGRATION_V2="mcp_internal_capabilities_migration_v2",d.MCP_INTERNAL_BROWSER_MIGRATION_V3="mcp_internal_browser_migration_v3",d.MCP_SHIPPED_SERVERS_MIGRATION_V4="mcp_shipped_servers_migration_v4",d.MCP_SHIPPED_SERVER_ROOTS_MIGRATION_V5="mcp_shipped_server_roots_migration_v5",d.MCP_SHIPPED_BROWSER_REPAIR_MIGRATION_V6="mcp_shipped_browser_repair_migration_v6",d.MCP_SHIPPED_FLUJO_REPAIR_MIGRATION_V7="mcp_shipped_flujo_repair_migration_v7",d.MCP_SHIPPED_BASH_REPAIR_MIGRATION_V8="mcp_shipped_bash_repair_migration_v8",d.PACKAGE_INSTALLS="package_installs",d.EXPERIMENTAL_SETTINGS="experimental_settings",d.REGISTRY_ACCOUNT="registry_account",d.REGISTRY_SETTINGS="registry_settings",d.TELEMETRY_STATE="telemetry_state",d.SNAPSHOT_RETENTION_POLICY="snapshot_retention_policy",d.MEMORY_EMBEDDINGS="memory_embeddings",d)},332400:(a,b,c)=>{"use strict";c.d(b,{HK:()=>t,P1:()=>s,kU:()=>n,nT:()=>q});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(18963),i=c(977598);let j=process.getBuiltinModule("node:module"),{createRequire:k}=j,l=h.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),m=h.string().max(256).regex(/^\d+\.\d+\.\d+(?:-[A-Za-z0-9.-]+)?(?:\+[A-Za-z0-9.-]+)?$/),n=h.object({packageName:h.string().max(214).regex(/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/),packageVersion:m,npmVersion:m,packageDirectory:l,binaryName:h.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/),shell:l,shellDigest:h.string().regex(/^[a-f0-9]{64}$/)}).strict();function o(a,b){let c=g().relative(a,b);return!!c&&".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}function p(a,b){return"win32"===process.platform?g().resolve(a).toLowerCase()===g().resolve(b).toLowerCase():g().resolve(a)===g().resolve(b)}function q(a){let{sourceRoot:b,entryPoint:c,command:d,cwd:e,args:f,runner:h,environment:i}=a;if(!o(b,h.packageDirectory)||!o(b,h.shell)||!o(b,c)||"npx-cli.js"!==g().basename(c)||"bin"!==g().basename(g().dirname(c))||o(b,e)||p(b,e)||!/^node(?:\.exe)?$/i.test(g().basename(d))||"-y"!==f[0]||f[1]!==`${h.packageName}@${h.packageVersion}`)throw Error("Invalid package runner declaration");for(let[a]of i)if(/^npm_config_/i.test(a)&&"NPM_CONFIG_CACHE"!==a.toUpperCase())throw Error("Ambient npm configuration is forbidden");let j=a=>[...i].find(([b])=>b.toUpperCase()===a)?.[1];if(!j("NPM_CONFIG_CACHE")||!g().isAbsolute(j("NPM_CONFIG_CACHE")))throw Error("Declare the package runner cache");if("win32"===process.platform&&(j("COMSPEC")!==h.shell||".COM;.EXE;.BAT;.CMD"!==j("PATHEXT")))throw Error("Declare the reviewed Windows shell and extensions");let k=[g().join(h.packageDirectory,"node_modules",".bin"),g().dirname(d)].join(g().delimiter);if(j("PATH")!==k)throw Error("Declare only the reviewed package and Node binary paths")}function r(a){let b,c=()=>{for(let b=g().resolve(a);;b=g().dirname(b)){if(e().lstatSync(b).isSymbolicLink())throw Error("Linked package manifest path");if(g().dirname(b)===b)break}if(!p(e().realpathSync(a),a))throw Error("Retargeted package manifest")};c();let d=e().openSync(a,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let f=e().fstatSync(d,{bigint:!0});if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(1048576))throw Error("Invalid package manifest");b=Buffer.alloc(Number(f.size)+1);let g=0;for(;g<b.length;){let a=e().readSync(d,b,g,b.length-g,null);if(!a)break;g+=a}if(BigInt(g)!==f.size)throw Error("Manifest changed while reading");let h=e().fstatSync(d,{bigint:!0}),i=e().lstatSync(a,{bigint:!0});if(c(),i.isSymbolicLink()||!i.isFile()||!["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(a=>f[a]===h[a]&&f[a]===i[a]))throw Error("Manifest changed");let j=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(b.subarray(0,g)));if(!j||"object"!=typeof j||Array.isArray(j))throw Error("Invalid package manifest");return j}finally{b?.fill(0),e().closeSync(d)}}function s(a,b,c,d,f){for(let a=g().resolve(c);;a=g().dirname(a)){if(e().lstatSync(a).isSymbolicLink()||!p(e().realpathSync(a),a))throw Error("Unsafe package runner working directory");for(let b of[g().join(a,"node_modules",".bin")]){try{e().lstatSync(b)}catch(a){if("ENOENT"===a.code)continue;throw a}throw Error("Unreviewed npm ancestor resolution candidate")}if(g().dirname(a)===a)break}let h=r(g().join(g().dirname(g().dirname(b)),"package.json"));if("npm"!==h.name||h.version!==d.npmVersion)throw Error("npm revision changed");let l=g().join(d.packageDirectory,".npmrc");try{let a=e().lstatSync(l);if(!a.isFile()||a.isSymbolicLink()||1!==a.nlink||0!==a.size)throw Error("Unreviewed project npm configuration")}catch(a){if("ENOENT"!==a.code)throw a}for(let b of["runner-user.npmrc","runner-global.npmrc"]){let c=g().join(a,b),d=e().lstatSync(c);if(!d.isFile()||d.isSymbolicLink()||1!==d.nlink||0!==d.size)throw Error("npm control file changed")}let n=g().join(d.packageDirectory,"node_modules",...d.packageName.split("/")),q=r(g().join(d.packageDirectory,"package.json"));if(void 0!==q.bin||void 0!==q.workspaces)throw Error("Installation project may not redirect npm binary selection");let s=r(g().join(n,"package.json"));if(s.name!==d.packageName||s.version!==d.packageVersion)throw Error("Package revision changed");let t=s.bin,u="string"==typeof t&&d.binaryName===d.packageName.split("/").at(-1)?t:t&&"object"==typeof t&&!Array.isArray(t)?t[d.binaryName]:void 0;if("string"!=typeof u||!o(n,g().resolve(n,u)))throw Error("Package binary changed");let v="string"==typeof t?{[d.packageName.split("/").at(-1)]:t}:t;if((1===new Set(Object.values(v)).size?Object.keys(v)[0]:v[d.packageName.split("/").at(-1)]?d.packageName.split("/").at(-1):void 0)!==d.binaryName)throw Error("npm binary selection differs from the reviewed binary");let w=g().join(d.packageDirectory,"node_modules",".bin",d.binaryName+("win32"===process.platform?".cmd":""));if(!e().lstatSync(w).isFile()||e().lstatSync(w).isSymbolicLink())throw Error("Materialize the reviewed package binary shim");return f?.inspectClosure===!1?void 0:function(a,b,c){let d=new Map,f=new Set,h=[],l=0,n=a=>{let b=d.get(a);if(!b){if(d.size>=1024)throw Error("Package graph exceeds inspection bounds");if("string"!=typeof(b=r(g().join(a,"package.json"))).name||b.name.length>214||!m.safeParse(b.version).success)throw Error("Package graph revision unavailable");d.set(a,b)}return b},p=a=>{try{return e().lstatSync(a),!0}catch(a){if("ENOENT"===a.code)return!1;throw a}},q=b=>{if(f.has(b))return;f.add(b);let d=n(b),e={directory:g().relative(a,b).split(g().sep).join("/"),name:d.name,version:d.version,dependencies:[]};h.push(e);let i=new Map;for(let a of["dependencies","peerDependencies","optionalDependencies"]){let b=d[a];if(void 0!==b){if(!b||"object"!=typeof b||Array.isArray(b)||Object.keys(b).length>256)throw Error("Invalid package dependencies");for(let[c,e]of Object.entries(b)){if(++l>8192||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(c)||c.length>214||"string"!=typeof e||e.length>2048)throw Error("Invalid package dependency declaration");let b=d.peerDependenciesMeta,f="peerDependencies"===a&&b&&"object"==typeof b&&b[c]?.optional===!0,g=e.startsWith("npm:")?/^npm:((?:@[^/]+\/)?[^@]+)(?:@.*)?$/.exec(e)?.[1]:void 0;if(e.startsWith("npm:")&&!g)throw Error("Invalid package alias");i.set(c,{optional:"optionalDependencies"===a||!!f,target:g??c})}}}let m=function(a,b){let c=Reflect.get(j,"globalPaths");if(!Array.isArray(c)||c.some(a=>"string"!=typeof a))throw Error("Native module search roots unavailable");let d=new Set(c.map(a=>g().resolve(a))),e=(k(a).resolve.paths("flujo-owned-dependency-inspection")??[]).filter(a=>!d.has(g().resolve(a)));if(b){let a="win32"===process.platform?g().dirname(b.command):g().dirname(g().dirname(b.command));e.push(g().join(a,"lib","node"),...b.home?[g().join(b.home,".node_modules"),g().join(b.home,".node_libraries")]:[])}return[...new Set(e)]}(g().join(b,"package.json"),c);for(let[b,c]of i){let d;for(let c of m){let e=g().join(c,...b.split("/"));if(!o(a,c)){if(["",".js",".json",".node"].some(a=>p(e+a)))throw Error("Ambient Node dependency candidate");continue}if([".js",".json",".node"].some(a=>p(e+a)))throw Error("Package dependency redirected to an unreviewed file");if(p(e)){d=e;break}}if(!d){if(!c.optional)throw Error(`Materialized runtime dependency missing: ${b}`);e.dependencies.push({name:b,...c,directory:null});continue}if(n(d).name!==c.target)throw Error("Package dependency identity differs from its declaration");e.dependencies.push({name:b,...c,directory:g().relative(a,d).split(g().sep).join("/")}),q(d)}};for(let a of b)q(a);for(let a of(h.sort((a,b)=>a.directory<b.directory?-1:+(a.directory>b.directory)),h))a.dependencies.sort((a,b)=>a.name<b.name?-1:+(a.name>b.name));return{inventory:h,digest:(0,i.createHash)("sha256").update("flujo:mcp:local-npx-dependencies:v1\0").update(JSON.stringify(h)).digest("hex")}}(a,[g().dirname(g().dirname(b)),d.packageDirectory],f)}function t(a,b,c,d,e){return[c,`--prefix=${b.packageDirectory}`,"--offline","--ignore-scripts","--no-update-notifier","--no-audit","--no-fund","--workspaces=false",`--userconfig=${g().join(a,"runner-user.npmrc")}`,`--globalconfig=${g().join(a,"runner-global.npmrc")}`,`--script-shell=${b.shell}`,`--cache=${e}`,...d]}},388100:(a,b,c)=>{"use strict";c.d(b,{dJ:()=>n,hA:()=>p,oc:()=>r});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(907986),i=c(134887),j=c(580940),k=c(826045),l=c(720929),m=c(851018);class n extends Error{constructor(){super("Private encryption context changed; retry with the current profile")}}function o(){return(0,h.workspaceCacheKey)(f().resolve((0,h.getWorkspaceDataDir)()))}function p(){let a,b=global.__flujo_verified_operator_keyring;if(b){if(2!==b.version){for(let a of(global.__flujo_verified_operator_keyring=void 0,b.checks??[]))a.invalidated=!0;return}try{a=o()}catch{for(let a of(b.entries.clear(),b.checks??[]))a.invalidated=!0;return}for(let c of(b.entries.delete(a),b.checks??[]))c.namespace===a&&(c.invalidated=!0)}}async function q(a){await (0,k.bV)();let b=await a();if(!b||2!==b.encryption_version||"user"!==b.encryption_type||"operator-file"!==b.key_protection)throw new n;let c=f().resolve((0,h.getWorkspaceDataDir)()),e=await d.promises.realpath(c),o=await d.promises.stat(c,{bigint:!0});if(!o.isDirectory())throw new n;let p=(0,l.b)();if(!p)throw new n;let q=(0,h.workspaceCacheKey)(f().resolve((0,i.ok)()),c,e,o.dev.toString(),o.ino.toString(),String((0,j.ye)())),r=(0,m.$$)(b),s=(0,g.createHash)("sha256").update(p.secret).digest("hex");return{metadata:b,secret:p.secret,revision:r,identity:JSON.stringify([q,r,p.identity,s])}}async function r(a,b){let c=global.__flujo_verified_operator_keyring;if(c?.version!==2){for(let a of c?.checks??[])a.invalidated=!0;global.__flujo_verified_operator_keyring=c={version:2,entries:new Map,checks:new Set}}let d={namespace:o(),invalidated:!1};c.checks.add(d);try{let e=await q(b);if(e.revision!==(0,m.$$)(a)||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==o())throw new n;let f=c.entries.get(d.namespace);if(f?.namespace===d.namespace&&f.identity===e.identity&&(0,m.xs)(f.ring)===e.metadata.key_id)return c.entries.delete(d.namespace),c.entries.set(d.namespace,f),{...f.ring};let g=await (0,m.b)(e.metadata,e.secret),h=await q(b);if(h.identity!==e.identity||global.__flujo_verified_operator_keyring!==c||d.invalidated||d.namespace!==o())throw new n;for(c.entries.delete(d.namespace),c.entries.set(d.namespace,Object.freeze({namespace:d.namespace,identity:h.identity,ring:Object.freeze({...g})}));c.entries.size>16;){let a=c.entries.keys().next();if(a.done){c.entries.clear();break}c.entries.delete(a.value)}return{...g}}catch(a){for(let a of(c.entries.delete(d.namespace),c.checks))a.namespace===d.namespace&&(a.invalidated=!0);throw a}finally{c.checks.delete(d)}}},472178:(a,b,c)=>{"use strict";c.d(b,{N:()=>q,V$:()=>s,lA:()=>t,sA:()=>r});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(504573);let i=new Set(["node_modules",".git"]);function j(a,b,c=!1){let d=f().relative(f().resolve(a),f().resolve(b));return""===d?c:!d.startsWith("..")&&!f().isAbsolute(d)}async function k(a){try{return await d.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}function l(a,b){if(!a||a.isSymbolicLink()||!a.isDirectory())throw Error(`${b} must be a real directory, not a symbolic link or junction.`)}function m(a,b){return a.dev===b.dev&&a.ino===b.ino&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs&&a.mode===b.mode&&a.uid===b.uid&&a.gid===b.gid&&a.nlink===b.nlink}async function n(a,b,c){c?.throwIfAborted();let d=Buffer.alloc(b),e=0;for(;e<b;){c?.throwIfAborted();let{bytesRead:f}=await a.read(d,e,Math.min(b-e,1048576),e);if(0===f)break;e+=f}return e===b?d:d.subarray(0,e)}function o(a,b){let c=function(a){if(!a||a.includes("\\")||a.includes("\0")||f().posix.isAbsolute(a)||f().win32.isAbsolute(a)||/^[A-Za-z]:/.test(a))return null;let b=a.split("/");return b.some(a=>!a||"."===a||".."===a||a.includes(":"))?null:b}(b);if(!c)return null;let d=f().resolve(a,...c);return j(a,d)?d:null}async function p(a,b,c){let e=f().resolve(a),g=f().resolve(b);if(l(await k(e),"Workspace restore boundary"),!j(e,g,!0))throw Error(`Restore directory escapes workspace boundary: ${g}`);let h=f().relative(e,g),i=e;for(let a of h?h.split(f().sep):[]){i=f().join(i,a);let b=await k(i);if(!b&&c){try{await d.promises.mkdir(i)}catch(a){if("EEXIST"!==a.code)throw a}b=await k(i)}l(b,`Restore path component ${i}`)}if(!j(await d.promises.realpath(e),await d.promises.realpath(g),!0))throw Error(`Restore directory resolves outside workspace boundary: ${g}`)}async function q(a,b,c,e,g=()=>void 0,o={}){let p=o.maxFileBytes??0xa00000,r=o.skippedDirectories??i,s=f().resolve(e),t=f().resolve(b);if(l(await k(s),"Workspace backup boundary"),l(await k(t),"MCP backup root"),!j(s,t))throw Error("MCP backup root escapes its workspace.");let u=await d.promises.realpath(s),v=await d.promises.realpath(t);if(!j(u,v))throw Error("MCP backup root resolves outside its workspace.");let w=async(b,c)=>{o.signal?.throwIfAborted();let e=await k(b);if(!e||e.isSymbolicLink()||!e.isDirectory())return void g(c,"directory is a symbolic link, junction, or no longer exists");if(!j(v,await d.promises.realpath(b),!0))return void g(c,"directory resolves outside MCP backup root");for(let e of(await d.promises.readdir(b,{withFileTypes:!0}))){let l;o.signal?.throwIfAborted();let q=f().join(b,e.name),s=f().posix.join(c,e.name);if(o.skipPath?.(s))continue;try{l=await k(q)}catch(a){g(s,`lstat failed: ${a instanceof Error?a.message:String(a)}`);continue}if(!l||l.isSymbolicLink()){g(s,"symbolic links and junctions are not backed up");continue}if(l.isDirectory()){let b;if(r.has(e.name))continue;try{b=await d.promises.realpath(q)}catch{g(s,"directory disappeared while being inspected");continue}if(!j(v,b)){g(s,"directory resolves outside MCP backup root");continue}a.folder(s),await w(q,s);continue}if(!l.isFile()){g(s,"non-regular filesystem entry");continue}if(l.nlink>BigInt(1)&&!o.allowHardLinks){g(s,"hard-linked files are not backed up");continue}if(l.size>BigInt(Math.min(p,h.constants.MAX_LENGTH))){g(s,"file exceeds backup size limit");continue}let t=null,u=!1;try{let b="number"==typeof d.constants.O_NOFOLLOW?d.constants.O_NOFOLLOW:0;t=await d.promises.open(q,d.constants.O_RDONLY|b|(d.constants.O_NONBLOCK??0));let c=await t.stat({bigint:!0}),e=await d.promises.realpath(q);if(!c.isFile()||c.nlink>BigInt(1)&&!o.allowHardLinks||c.size>BigInt(Math.min(p,h.constants.MAX_LENGTH))||!m(l,c)||!j(v,e)){g(s,"file changed or escaped while being opened");continue}if(o.onFileStream){let a=t;async function*i(){for(let b=0;b<Number(c.size);){o.signal?.throwIfAborted();let d=Buffer.alloc(Math.min(65536,Number(c.size)-b)),{bytesRead:e}=await a.read(d,0,d.length,b);if(!e)throw Error("File ended before its admitted size.");b+=e,yield d.subarray(0,e)}let b=await a.stat({bigint:!0}),e=await d.promises.lstat(q,{bigint:!0});if(!m(c,b)||!m(c,e)||!j(v,await d.promises.realpath(q)))throw Error("File changed while being captured.")}await o.onFileStream(s,i(),c);continue}let f=await n(t,Number(c.size),o.signal),k=await t.stat({bigint:!0});if(BigInt(f.byteLength)!==c.size||!m(c,k)){g(s,"file changed while being read");continue}o.signal?.throwIfAborted(),o.onFile?.(s,f,k),a.file(s,f,o.preserveMode?{unixPermissions:Number(k.mode&BigInt(33279))}:void 0)}catch(a){u=!0,o.signal?.throwIfAborted(),g(s,`file could not be read safely: ${a instanceof Error?a.message:String(a)}`)}finally{try{await t?.close()}catch(a){if(o.onFileStream&&!u)throw a}}}};await w(t,c)}async function r(a,b,c,e={}){let h,i=e.assertOwned;await i?.();let j=f().dirname(b);await p(a,j,!0),await i?.();let l=await k(b);if(l?.isSymbolicLink())throw Error(`Refusing to replace symbolic link or junction: ${b}`);if(l&&!l.isFile())throw Error(`Refusing to replace non-file restore target: ${b}`);let n=f().join(j,`.flujo-restore-${(0,g.randomUUID)()}.tmp`),o=!1;try{let f=384|(e.mode??0)&64;await i?.();let g=await d.promises.open(n,d.constants.O_WRONLY|d.constants.O_CREAT|d.constants.O_EXCL,f);o=!0;try{h=await g.stat({bigint:!0}),await i?.(),await g.writeFile(c),await i?.(),await g.sync(),await i?.(),h=await g.stat({bigint:!0})}finally{await g.close()}for(let c=0;;c++){await p(a,j,!1);let e=await d.promises.lstat(n,{bigint:!0});if(!h||e.isSymbolicLink()||!e.isFile()||!m(h,e))throw Error("Restore temporary file changed before publication.");let f=await k(b);if(f?.isSymbolicLink()||f&&!f.isFile())throw Error(`Restore target became unsafe: ${b}`);await i?.();try{await d.promises.rename(n,b);break}catch(a){if(c>=14||!["EPERM","EBUSY","EACCES"].includes(a.code??""))throw a;await new Promise(a=>setTimeout(a,Math.min(100,5*2**c)))}}o=!1,await i?.()}finally{if(o)try{let a=await d.promises.lstat(n,{bigint:!0});h&&a.isFile()&&!a.isSymbolicLink()&&a.dev===h.dev&&a.ino===h.ino&&await d.promises.unlink(n)}catch{}}}async function s(a,b){await p(a,f().dirname(b),!1)}async function t(a,b,c,d,e=()=>void 0,g={}){let h=f().resolve(c);await p(d,h,!0);let i=`${b}/`,j=Object.keys(a.files).filter(a=>a.startsWith(i)&&a!==i).map(b=>{let c=a.files[b],d=b.slice(i.length);return{entry:c,entryPath:b,relativePath:c.dir?d.replace(/\/+$/,""):d}});for(let a of j.filter(a=>a.entry.dir)){let b=o(h,a.relativePath);if(!b){e(a.entryPath,"unsafe archive directory path");continue}try{await p(d,b,!0)}catch(b){e(a.entryPath,b instanceof Error?b.message:String(b))}}for(let a of j.filter(a=>!a.entry.dir)){let b=o(h,a.relativePath);if(!b){e(a.entryPath,"unsafe archive file path");continue}try{let c=await a.entry.async("nodebuffer");if(c.length>(g.maxFileBytes??0xa00000)){e(a.entryPath,"file exceeds restore size limit");continue}await r(d,b,c,{mode:g.preserveMode?Number(a.entry.unixPermissions):void 0}),g.onRestored?.(a.entryPath)}catch(b){e(a.entryPath,b instanceof Error?b.message:String(b))}}}},497137:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>j,Cg:()=>i,IP:()=>h,hN:()=>k});var d=c(300643);let e=["CONFIG","ASSETS","DEP_LAYOUT","DEP_GRAPH","DEP_LINKS","SOURCE_FINGERPRINT","EXEC_FINGERPRINT","CONSENT_DIGEST","CONSENT_POLICY_SCHEMA","CONSENT_LAUNCH","CONSENT_BUNDLE","CONSENT_ENVIRONMENT","CONSENT_CAPABILITIES","CONSENT_SERIALIZE","CONSENT_SCRYPT","APPROVAL_INITIALIZE","APPROVAL_SEED_PARENT","APPROVAL_SEED_OWNER","APPROVAL_SEED_IDENTITY","APPROVAL_SEED_AUTHORITY","APPROVAL_LOCK","APPROVAL_REQUEST","APPROVAL_PROPOSAL","APPROVAL_AUTHORITY","APPROVAL_STAGE","APPROVAL_RECHECK","APPROVAL_CONFIG","APPROVAL_SAVE","APPROVAL_PUBLICATION","APPROVAL_DISPOSE"];function f(a){try{if("1"!==process.env.FLUJO_BUNDLED_CONSENT_TRACE||!e.includes(a))return;let b=d.performance.now();return Number.isFinite(b)?b:void 0}catch{return}}function g(a,b){if(void 0!==b)try{let c=d.performance.now()-b;if(!Number.isFinite(c))return;console.info(JSON.stringify({bundledConsentStage:a,elapsedMs:Math.max(0,c)}))}catch{}}class h extends Error{constructor(a,b){super("Bundled consent preview refused.",{cause:b}),this.stage=a}}async function i(a,b){let c=f(a);try{return await b()}catch(b){if(b instanceof h)throw b;throw new h(a,b)}finally{g(a,c)}}function j(a,b){let c=f(a);try{return b()}catch(b){if(b instanceof h)throw b;throw new h(a,b)}finally{g(a,c)}}function k(a){return a instanceof h&&e.includes(a.stage)?a.stage:"CONFIG"}},580940:(a,b,c)=>{"use strict";function d(){return"1"===process.env.FLUJO_WORKER_MODE}function e(){return d()?global.__flujo_worker_bootstrap_status??{mode:"worker",state:"not-started"}:{mode:"local",state:"not-started"}}function f(a){d()&&(global.__flujo_worker_bootstrap_status={...e(),...a,mode:"worker"})}function g(a,b){if(!d())return null;let c=e();if(c.workspace&&b!==c.workspace)return Response.json({error:"This workspace is not assigned to the worker."},{status:404});let f=new URL(a.url).pathname,g="GET"===a.method&&["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/skills"].includes(f);return"ready"===c.state||g||"/api/init"===f||"/api/encryption/secure"===f?null:Response.json({error:"Worker is not ready.",code:"WORKER_NOT_READY"},{status:503,headers:{"Cache-Control":"no-store"}})}c.d(b,{Vv:()=>f,dT:()=>e,f3:()=>g,ye:()=>d})},596923:(a,b,c)=>{"use strict";c.d(b,{T8:()=>l,uj:()=>k});var d=c(973024),e=c(977598),f=c(176760),g=c.n(f),h=c(792711);function i(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function j(a){if(!a.isFile()||a.isSymbolicLink()||a.nlink!==BigInt(1)||a.size>BigInt(65536)||"win32"!==process.platform&&((a.mode&BigInt(63))!==BigInt(0)||a.uid!==BigInt(process.getuid?.()??-1)))throw Error("Invalid owner policy file")}function k(a){if(!g().isAbsolute(a))throw Error("Invalid owner policy path");let b=g().resolve(a),c=(0,d.lstatSync)(b,{bigint:!0});j(c);let e=(0,d.realpathSync)(b);if(""!==g().relative(e,b))throw Error("Invalid owner policy path");let f=(0,d.openSync)(b,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let a=(0,d.fstatSync)(f,{bigint:!0});if(j(a),!i(c,a))throw Error("Owner policy changed");let k=Buffer.alloc(65537),l=0;for(;l<k.length;){let a=(0,d.readSync)(f,k,l,k.length-l,null);if(0===a)break;l+=a}let m=(0,d.lstatSync)(b,{bigint:!0});if(l>65536||BigInt(l)!==a.size||!i(a,(0,d.fstatSync)(f,{bigint:!0}))||!i(a,m)||m.isSymbolicLink()||""!==g().relative(e,(0,d.realpathSync)(b)))throw Error("Owner policy changed");return h.rF.parse(JSON.parse(k.subarray(0,l).toString("utf8")))}finally{(0,d.closeSync)(f)}}function l(a){return(0,e.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}},610782:(a,b,c)=>{"use strict";c.d(b,{zY:()=>U,ln:()=>Q,N2:()=>O,bB:()=>ap,U2:()=>al,U3:()=>ah,Vx:()=>T,al:()=>af,JV:()=>aj,$G:()=>ar,pL:()=>aq,av:()=>as,EI:()=>ao,loadItem:()=>M,H0:()=>L,Jk:()=>ae,w5:()=>at,Ch:()=>ak,l_:()=>am,Vt:()=>an,VH:()=>K,Gl:()=>ag,Pv:()=>F,c0:()=>N,Zf:()=>J});var d=c(619335),e=c(629021),f=c(333873),g=c.n(f),h=c(977598),i=c(12778),j=c(100629),k=c(973024),l=c(176760),m=c.n(l);function n(a,b){let c=m().relative(a,b);if(!c||c.startsWith("..")||m().isAbsolute(c))throw Error("Persona record path escapes its storage root.");return c}function o(a){return a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)}async function p(a){try{return await k.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return null;throw a}}async function q(a,b){let c=[a];for(let d of n(a,b).split(m().sep).slice(0,-1))c.push(m().join(c[c.length-1],d));let d=[];for(let a of c){let[b,c]=await Promise.allSettled([p(a),k.promises.realpath(a)]);if("rejected"===b.status)throw b.reason;let e=b.value;if(!e)return null;if(!e.isDirectory()||e.isSymbolicLink())throw Error("Persona record parent is not a link-free directory.");if("rejected"===c.status)throw c.reason;let f=c.value;d.length&&n(d[0].canonical,f),d.push({filename:a,stats:e,canonical:f})}return d}async function r(a){let b=await Promise.allSettled(a.flatMap(a=>[k.promises.lstat(a.filename,{bigint:!0}),k.promises.realpath(a.filename)]));for(let[c,d]of a.entries()){let a=b[2*c],e=b[2*c+1];if("rejected"===a.status)throw a.reason;let f=a.value;if(!f.isDirectory()||f.isSymbolicLink()||f.dev!==d.stats.dev||f.ino!==d.stats.ino||f.mode!==d.stats.mode||f.uid!==d.stats.uid||f.gid!==d.stats.gid)throw Error("Persona record parent changed during its read.");if("rejected"===e.status)throw e.reason;if(e.value!==d.canonical)throw Error("Persona record parent changed during its read.")}}async function s(a,b){let c=m().resolve(b),d=m().resolve(a);n(c,d);let e=await q(c,d);if(!e)return null;let f=await p(d);if(!f)return null;if(!o(f))throw new j.$("UNSAFE_FILE");for(let a=0;a<3;a++){await r(e);try{return{content:(await (0,j.b)(d,{expected:f,verifyPath:()=>r(e)})).toString("utf8"),mtimeMs:Number(f.mtimeNs)/1e6,sizeBytes:Number(f.size)}}catch(c){var g;if(!(c instanceof j.$)||"SIZE_LIMIT"===c.code||a+1===3)throw c;await r(e);let b=await p(d);if(!b||!(o(g=f)&&o(b))||g.ino===b.ino||g.dev!==b.dev||g.uid!==b.uid||g.gid!==b.gid||g.mode!==b.mode)throw c;f=b}}throw new j.$("FILE_CHANGED")}var t=c(235447),u=c(774755),v=c(266844),w=c(134887),x=c(907986),y=c(826045),z=c(879628);let A=(0,v.h)("utils/storage/backend"),B=()=>g().join((0,x.getWorkspaceDataDir)(),"db"),C=()=>g().join((0,w.ok)(),".next","storage"),D=a=>g().join(B(),`${a}.json`);async function E(){let a=B(),b=C();try{await e.promises.access(a),A.verbose(`Storage directory exists: ${a}`)}catch{A.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),A.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}async function F(){for(let a of(A.debug("Verifying storage system initialization"),await E(),Object.values(u.Zg)))try{let b=D(a),c=!1;try{await e.promises.access(b),c=!0}catch{}A.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let d=g().join(C(),`${a}.json`);try{await e.promises.access(d),c?A.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):A.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){A.error(`Storage verification failed for ${a}:`,b)}A.debug("Storage verification completed")}let G=new Map,H=new Set(["EPERM","EBUSY","EACCES"]);async function I(a,b,c){for(let d=1;;d++)try{await c(),await e.promises.rename(a,b);return}catch(c){let a=c.code;if(d>=15||!a||!H.has(a))throw c;let b=Math.min(100,5*2**(d-1));await new Promise(a=>setTimeout(a,b+10*Math.random()))}}async function J(a,b,c){await (0,y.af)(a),await (0,z.NU)(async()=>{let f;await (0,y.af)(a),await (0,z.qy)();let i=g().dirname(a);await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)()),await e.promises.mkdir(i,{recursive:!0});let j=await e.promises.lstat(i,{bigint:!0}),k=await e.promises.realpath(i);if(!j.isDirectory()||j.isSymbolicLink())throw Error("Atomic write parent is unsafe");let l=`${a}.tmp.${(0,h.randomUUID)()}`,m=!1;try{await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)());let g=await e.promises.open(l,"wx",384);m=!0;try{f=await g.stat({bigint:!0}),await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)()),await g.writeFile(b),await (0,z.qy)(),await g.sync(),await (0,z.qy)(),f=await g.stat({bigint:!0})}finally{await g.close()}await I(l,a,async()=>{let[a,b,g]=await Promise.allSettled([e.promises.lstat(l,{bigint:!0}),e.promises.lstat(i,{bigint:!0}),e.promises.realpath(i)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===g.status)throw g.reason;let h=a.value,m=b.value,n=g.value;if(!f||!h.isFile()||h.isSymbolicLink()||h.nlink!==BigInt(1)||h.dev!==f.dev||h.ino!==f.ino||h.size!==f.size||h.mtimeNs!==f.mtimeNs||h.ctimeNs!==f.ctimeNs||h.mode!==f.mode||h.uid!==f.uid||h.gid!==f.gid||!m.isDirectory()||m.isSymbolicLink()||m.dev!==j.dev||m.ino!==j.ino||m.mode!==j.mode||m.uid!==j.uid||m.gid!==j.gid||n!==k)throw Error("Atomic write file or parent changed");await (0,z.qy)(),await (0,d.QO)(),c&&(await c(),await (0,z.qy)(),await (0,d.QO)())}),m=!1,await (0,z.qy)()}catch(a){if(m)try{let a=await e.promises.lstat(l,{bigint:!0});f&&a.isFile()&&!a.isSymbolicLink()&&a.dev===f.dev&&a.ino===f.ino&&await e.promises.unlink(l)}catch{}throw a}})}async function K(a,b,c){let d=D(a);await (0,y.af)(d),await (0,z.NU)(async()=>{let e=(0,x.workspaceCacheKey)("item",a),f=(G.get(e)??Promise.resolve()).catch(()=>{}).then(()=>J(d,JSON.stringify(b,null,2),c));G.set(e,f);try{await f,A.verbose(`Successfully saved item to: ${d}`)}catch(b){throw A.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{G.get(e)===f&&G.delete(e)}})}async function L(a,b){let c,d=D(a);await (0,y.af)(d),await E();try{c=await e.promises.readFile(d,"utf8")}catch(a){if("ENOENT"===a.code)return b;throw a}if(!c.trim())throw Error("Backup storage item is empty");return JSON.parse(c)}async function M(a,b){if(a.startsWith("conversations/"))return N(a.slice(14),async a=>void 0===a?b:a);await (0,y.af)(D(a));try{await E();let c=D(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return A.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return A.verbose(`Successfully loaded item from: ${c}`),a}catch(b){A.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),A.info(`Created backup of corrupted file at: ${a}`)}catch(a){A.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${c}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(c){if("ENOENT"===c.code)return A.verbose(`Item with key "${a}" not found at ${D(a)}, returning default.`),b;throw A.error(`CRITICAL: Error loading item with key "${a}" from ${D(a)}:`,c),c}}async function N(a,b,c={}){let d;c.signal?.throwIfAborted(),Q(a);let f=D(`conversations/${a}`);await (0,y.af)(f),await E();try{d=await e.promises.lstat(f,{bigint:!0})}catch(a){if("ENOENT"===a.code)return(0,i.dw)(0,a=>b(void 0,a));throw a}let g=Number(d.size);return(0,i.dw)(g,async a=>{let g,h=(await (0,j.b)(f,{expected:d,signal:c.signal})).toString("utf8");if(c.signal?.throwIfAborted(),!h.trim())return b(void 0,a);try{g=JSON.parse(h)}catch(b){if(!(b instanceof SyntaxError))throw b;let a=`${f}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,h)}catch(a){A.error("Failed to back up corrupted conversation snapshot:",a)}throw Error(`Failed to parse JSON from ${f}. A backup has been created at ${a}. Original error: ${b.message}`)}return b(g,a)})}async function O(a){let b=D(a);await (0,y.af)(b),await (0,z.NU)(async()=>{await (0,y.af)(b);try{await e.promises.unlink(b),A.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?A.warn(`Error clearing item with key "${a}" at ${b}:`,c):A.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let P=/^[A-Za-z0-9_-]{1,64}$/;function Q(a){if("string"!=typeof a||!P.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let R=a=>g().join(B(),a),S=(a,b)=>g().join(R(a),`${b}.json`);async function T(a,b){Q(b);try{let c=await e.promises.stat(S(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let U=["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"],V=new Set(U);function W(a){if(!V.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function X(a,b){let c=g().relative(g().resolve(a),g().resolve(b));if(!c||c.startsWith("..")||g().isAbsolute(c))throw Error(`Persona shard path escapes its collection: ${b}`)}function Y(a,b){return W(a),Q(b),S(a,b)}function Z(a,b,c){W(a),Q(b),Q(c);let d=R(a),e=g().join(d,b,`${c}.json`);return X(d,e),e}async function $(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function _(a,b,c){W(a),Q(b);let d=R(a),f=g().join(d,b);X(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await $(d);if(!h)return null;if(!h.isDirectory()||h.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${d}`);if(c)try{await e.promises.mkdir(f)}catch(a){if("EEXIST"!==a.code)throw a}let i=await $(f);if(!i)return null;if(!i.isDirectory()||i.isSymbolicLink())throw Error(`Persona shard is not a link-free directory: ${f}`);let[j,k]=await Promise.all([e.promises.realpath(d),e.promises.realpath(f)]);return X(j,k),f}async function aa(a){return s(a,B())}async function ab(a){return(await aa(a))?.content??null}function ac(a,b,c,d){let e;try{e=JSON.parse(a)}catch(a){throw Error(`Invalid JSON in Persona record ${JSON.stringify(`${b}/${c}/${d}`)}: `+a.message)}if(!e||"object"!=typeof e||Array.isArray(e))throw Error(`Persona record ${JSON.stringify(d)} is not an object.`);let f=e;if(f.id!==d||f.personaId!==c)throw new t.R(d,c);return e}class ad extends Error{constructor(a,b,c){super(`Conflicting flat and sharded copies exist for ${JSON.stringify(`${a}/${b}/${c}`)}.`),this.collection=a,this.personaId=b,this.recordId=c,this.code="PERSONA_SHARD_COLLISION",this.name="PersonaShardCollisionError"}}async function ae(a,b,c,d,e){W(a),Q(b),Q(c);let f=await _(a,b,!1),g=Z(a,b,c),h=Y(a,c),[i,j]=await Promise.all([f?ab(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):ab(h)]);if(null!==i&&null!==j&&i!==j)throw new ad(a,b,c);let k=i??j;return null===k?d:ac(k,a,b,c)}async function af(a,b,c){W(a),Q(b),Q(c);let d=await _(a,b,!1),e=Z(a,b,c),f=Y(a,c),[g,h]=await Promise.all([d?aa(e):Promise.resolve(null),aa(f)]);if(g&&h&&g.content!==h.content)throw new ad(a,b,c);let i=g??h;return i?(ac(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ag(a,b,c,f){if(W(a),Q(b),Q(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=Z(a,b,c),h=Y(a,c);await am(`persona-shard/${a}/${b}/${c}`,async()=>{await _(a,b,!0);let i=await ab(h);null!==i&&ac(i,a,b,c),await J(g,JSON.stringify(f,null,2));try{await (0,d.QO)(),await e.promises.unlink(h)}catch(a){if("ENOENT"!==a.code)throw a}})}async function ah(a,b,c){W(a),Q(b),Q(c);let d=Z(a,b,c),f=Y(a,c);await am(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await _(a,b,!1),[h,i]=await Promise.all([g?ab(d):Promise.resolve(null),ab(f)]);null!==h&&ac(h,a,b,c),null!==i&&ac(i,a,b,c),await Promise.all([d,f].map(async a=>{try{await e.promises.unlink(a)}catch(a){if("ENOENT"!==a.code)throw a}}))})}async function ai(a,b){let c=await _(a,b,!1);if(!c)return[];let d=(await e.promises.readdir(c)).sort(),f=[];for(let h of d){if(!h.endsWith(".json")||h.includes(".tmp.")||h.includes(".corrupted."))continue;let d=h.slice(0,-5);Q(d);let i=g().join(c,h),k=await e.promises.lstat(i,{bigint:!0});if(!k.isFile()||k.isSymbolicLink())throw Error(`Persona shard item is not a regular link-free file: ${i}`);let l=(await (0,j.b)(i,{expected:k,verifyPath:async()=>{await _(a,b,!1)}})).toString("utf8");f.push(ac(l,a,b,d))}return f}async function aj(a){W(a);let b=R(a),c=await $(b);if(!c)return[];if(!c.isDirectory()||c.isSymbolicLink())throw Error(`Persona collection path is not a link-free directory: ${b}`);let d=(await e.promises.readdir(b,{withFileTypes:!0})).sort((a,b)=>a.name.localeCompare(b.name)),f=new Map;for(let c of d){let d;if(c.isSymbolicLink())throw Error(`Persona collection contains a symbolic link: ${c.name}`);if(c.isDirectory()){for(let b of(Q(c.name),await ai(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new ad(a,c.name,b.id);f.set(b.id,{content:d,value:b})}continue}if(!c.isFile()||!c.name.endsWith(".json")||c.name.includes(".tmp.")||c.name.includes(".corrupted.")||c.name.endsWith(".bak"))continue;let h=c.name.slice(0,-5);Q(h);let i=await e.promises.readFile(g().join(b,c.name),"utf8");try{d=JSON.parse(i)}catch(b){throw Error(`Invalid JSON in flat Persona record ${JSON.stringify(`${a}/${h}`)}: `+b.message)}if("string"!=typeof d.personaId)throw Error(`Flat Persona record ${JSON.stringify(h)} has no owner.`);Q(d.personaId);let j=ac(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new ad(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}async function ak(a,b,c){W(a),Q(b),Q(c);let f=Z(a,b,c),g=Y(a,c);return am(`persona-shard/${a}/${b}/${c}`,async()=>{let h=await _(a,b,!1),[i,j]=await Promise.all([h?ab(f):Promise.resolve(null),ab(g)]);if(null!==i&&ac(i,a,b,c),null!==j&&ac(j,a,b,c),null!==i&&null!==j&&i!==j)throw new ad(a,b,c);if(null===j)return null===i?"missing":"already-migrated";if(null===i&&(await _(a,b,!0),await J(f,j),await ab(f)!==j))throw Error(`Could not verify migrated Persona record ${JSON.stringify(c)}.`);return await (0,d.QO)(),await e.promises.unlink(g),"migrated"})}async function al(a,b){W(a),Q(b),await am(`persona-shard/${a}/${b}`,async()=>{let c=await _(a,b,!1);if(c){for(let a of(await e.promises.readdir(c,{withFileTypes:!0})))if(!a.isFile()||a.isSymbolicLink())throw Error(`Persona shard contains a non-regular or linked entry: ${g().join(c,a.name)}`);await e.promises.rm(c,{recursive:!0})}})}function am(a,b){return(0,z.NU)(async()=>{let c=(0,x.workspaceCacheKey)("chain",a),d=(G.get(c)??Promise.resolve()).catch(()=>{}).then(b);return G.set(c,d),d.catch(()=>{}).finally(()=>{G.get(c)===d&&G.delete(c)}),d})}async function an(a,b,c){Q(b);let d=S(a,b);try{await am(`${a}/${b}`,()=>J(d,JSON.stringify(c,null,2))),A.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw A.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function ao(a,b,c){if(Q(b),"conversations"===a)return N(b,async a=>void 0===a?c:a);let d=S(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return A.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){A.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),A.info(`Created backup of corrupted file at: ${a}`)}catch(a){A.error("Failed to create backup of corrupted file:",a)}throw Error(`Failed to parse JSON from ${d}. A backup has been created at ${a}. Original error: ${b.message}`)}}catch(e){if("ENOENT"===e.code)return A.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw A.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function ap(a,b){Q(b);let c=S(a,b);await am(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),A.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;A.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function aq(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let a=await e.promises.readFile(b,"utf-8");if(0===a.trim().length){A.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){A.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function ar(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let f of b.sort()){let b;if(!f.endsWith(".json")||f.includes(".tmp.")||f.includes(".corrupted.")||f.endsWith(".bak"))continue;let h=f.slice(0,-5);Q(h);let i=g().join(c,f),j=await e.promises.readFile(i,"utf8");if(0===j.trim().length)throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is empty.`);try{b=JSON.parse(j)}catch(b){throw Error(`Authoritative collection item ${JSON.stringify(`${a}/${h}`)} is invalid JSON: ${b.message}`)}d.push({id:h,item:b})}return d}async function as(a){let b,c=R(a);try{b=await e.promises.readdir(c)}catch(a){if("ENOENT"===a.code)return[];throw a}let d=[];for(let a of b){if(!a.endsWith(".json")||a.includes(".tmp.")||a.includes(".corrupted.")||a.endsWith(".bak"))continue;let b=g().join(c,a);try{let[c,f]=await Promise.all([e.promises.readFile(b,"utf-8"),e.promises.stat(b)]);if(0===c.trim().length){A.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push({id:a.slice(0,-5),item:JSON.parse(c),mtimeMs:f.mtimeMs,sizeBytes:f.size})}catch(a){A.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function at(a,b,c){let f,g,h=D(a);try{f=await e.promises.readFile(h,"utf-8")}catch(a){if("ENOENT"===a.code)return 0;throw a}if(0===f.trim().length)return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),0;try{g=JSON.parse(f)}catch(b){return A.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return A.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(R(b),{recursive:!0}),g)){let d;try{d=c(a),Q(d)}catch(a){A.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=S(b,d);try{await e.promises.access(f),A.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await J(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),A.info(`Migration: moved ${g.length} ${b} item(s) from ${a}.json to per-item storage.`),g.length}},619335:(a,b,c)=>{"use strict";c.d(b,{F_:()=>aj,GD:()=>am,Hh:()=>ag,Jc:()=>ah,Mr:()=>O,N$:()=>ao,QO:()=>al,RB:()=>ai,Uf:()=>U,Ug:()=>_,bG:()=>T,lc:()=>ap,p9:()=>ad});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(16698),i=c(977598),j=c(18963),k=c(907986),l=c(100629),m=c(826045),n=c(792711),o=c(596923),p=c(755822),q=c(181465);let r="FLUJO_MCP_WORKLOAD_TOKEN",s="FLUJO_MCP_WORKLOAD_AUDIENCE",t=/^flo_mcp1_[A-Za-z0-9_-]{43}$/;function u(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();return console.info("[workload-guard]",a,"start"),b().finally(()=>console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c)))}function v(a,b){if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return b();let c=performance.now();console.info("[workload-guard]",a,"start");try{return b()}finally{console.info("[workload-guard]",a,"settled",Math.round(performance.now()-c))}}let w=a=>(0,i.createHash)("sha256").update(a).digest("hex"),x=["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"],y=(a,b)=>x.every(c=>a[c]===b[c]),z=j.object(Object.fromEntries(x.map(a=>[a,j.string().regex(/^\d{1,40}$/)]))).strict(),A=p.Zl.shape.bundledInstallation.unwrap().shape.workload.unwrap().shape.inventory,B=j.object({version:j.literal(1),purpose:j.literal("bundled-flujo-control-v1"),tokenHash:j.string().regex(/^[a-f0-9]{64}$/),generation:j.string().uuid(),ownerId:j.string().regex(/^[A-Za-z0-9_-]{1,64}$/),ownerRevision:j.string().regex(/^[a-f0-9]{64}$/),workspace:j.string().refine(k.isValidWorkspaceName),serverName:j.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),audience:j.string().max(2048),policyDigest:j.string().regex(/^[a-f0-9]{64}$/),issuedAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),expiresAt:j.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),markerIdentity:z,markerDigest:j.string().regex(/^[a-f0-9]{64}$/),inventory:A}).strict().refine(a=>a.expiresAt>a.issuedAt&&a.expiresAt<=a.issuedAt+3e5),C=j.object({version:j.literal(1),generation:j.string().uuid(),state:j.literal("active"),recordDev:j.string().regex(/^\d{1,40}$/),recordIno:j.string().regex(/^\d{1,40}$/)}).strict(),D=new WeakMap,E=new WeakSet,F=new WeakMap,G=new h.AsyncLocalStorage,H=Symbol.for("FLUJO:bundled-flujo-workload-request:v1"),I=Symbol.for("FLUJO:bundled-flujo-workload-errors:v1");function J(a,b,c){let d=Object.getOwnPropertyDescriptor(globalThis,a);if(d){if(!("value"in d)||d.configurable||d.writable||!c(d.value))throw Error("Workload process context refused.");return d.value}let e=b();return Object.defineProperty(globalThis,a,{value:e,writable:!1,configurable:!1,enumerable:!1}),e}let K=J(H,()=>new h.AsyncLocalStorage,a=>a instanceof h.AsyncLocalStorage),L=J(I,()=>new WeakSet,a=>a instanceof WeakSet);function M(){let a=h.AsyncLocalStorage.prototype.getStore.call(K);if(void 0!==a&&!(a instanceof Request))throw new O;return a}let N=()=>Response.json({error:"Bundled workload authorization refused."},{status:401,headers:{"Cache-Control":"no-store"}});class O extends Error{constructor(a){super("Bundled workload authorization refused.",{cause:a}),this.response=N(),WeakSet.prototype.add.call(L,this)}static[Symbol.hasInstance](a){return!!a&&"object"==typeof a&&WeakSet.prototype.has.call(L,a)}}function P(a){if(!a)throw new O;let b=new URL(a);if(!["http:","https:"].includes(b.protocol)||!["127.0.0.1","localhost","[::1]"].includes(b.hostname)||b.username||b.password||"/"!==b.pathname||b.search||b.hash)throw new O;return b.origin}function Q(a){if(!g().isAbsolute(a))throw new O;return g().join(g().dirname(a),`.flujo-workloads-${w(g().resolve(a)).slice(0,24)}`)}function R(a){let b=D.get(a);if(!b)throw new O;return b}function S(a){if("retired"===a.state||"uncertain"===a.state||a.ledger!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||a.ownerFile!==process.env.FLUJO_OWNER_AUTH_FILE||(0,k.getCurrentWorkspace)()!==a.workspace||P(process.env.FLUJO_BASE_URL)!==a.audience)throw new O}function T(a){let b=(0,p.r)(a);if([...b.keys()].some(a=>[r,s].includes(a.toUpperCase())))throw new O;if("1"===process.env.FLUJO_WORKER_MODE||void 0===a.trustedHost)return;let c=p.Zl.parse(a.trustedHost);if(c.bundledInstallation?.packageDirectory!=="flujo")return;if(!c.bundledInstallation?.workload||![r,s].every(a=>c.environmentNames.includes(a)))throw new O;let d=(0,k.getCurrentWorkspace)(),e=P(process.env.FLUJO_BASE_URL);if(P(b.get("FLUJO_BASE_URL"))!==e||b.get("FLUJO_WORKSPACE")!==d)throw new O;let f=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,g=process.env.FLUJO_OWNER_AUTH_FILE;if(!f||!g)throw new O;let h=Object.freeze({});return D.set(h,{config:structuredClone(a),token:`flo_mcp1_${(0,i.randomBytes)(32).toString("base64url")}`,audience:e,workspace:d,ledger:f,ownerFile:g,state:"inactive"}),h}function U(a,b){if(!b)return Object.freeze({});let c=R(b);if(S(c),!(0,p.g)(a,c.config))throw new O;return Object.freeze({[r]:c.token,[s]:c.audience})}function V(a,b){let c=0;for(;c<b.length;){let d=e().writeSync(a,b,c,b.length-c,c);if(!d)throw new O;c+=d}e().ftruncateSync(a,b.length),e().fsyncSync(a)}function W(a){if(void 0===a.fd||void 0!==a.uncertainDescriptor)throw new O;return a.fd}function X(a){let b=g().dirname(a.filename),c=e().lstatSync(b,{bigint:!0});if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==a.parentIdentity.dev||c.ino!==a.parentIdentity.ino||c.mode!==a.parentIdentity.mode||c.uid!==a.parentIdentity.uid||c.gid!==a.parentIdentity.gid||""!==g().relative(e().realpathSync(b),b))throw new O}function Y(a,b=!0){let c=W(a),d=e().fstatSync(c,{bigint:!0});if(!y(d,a.identity)||!d.isFile()||d.nlink!==BigInt(+!a.removed)||b&&!y(d,e().lstatSync(a.filename,{bigint:!0})))throw new O;let f=Buffer.alloc(a.bytes.length+1);try{let g=e().readSync(c,f,0,f.length,0);if(g!==a.bytes.length||!f.subarray(0,g).equals(a.bytes)||!y(d,e().fstatSync(c,{bigint:!0}))||b&&!y(d,e().lstatSync(a.filename,{bigint:!0})))throw new O}finally{f.fill(0)}}function Z(a){let b=e().lstatSync(g().dirname(a),{bigint:!0}),c=e().openSync(a,d.constants.O_RDWR|d.constants.O_CREAT|d.constants.O_EXCL|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0),384);return{fd:c,filename:a,bytes:Buffer.alloc(0),identity:e().fstatSync(c,{bigint:!0}),parentIdentity:b}}function $(a,b){let c=Buffer.from(JSON.stringify(b));if(c.length>65536)throw new O;Y(a),V(W(a),c),a.bytes.fill(0),a.bytes=c,a.identity=e().fstatSync(W(a),{bigint:!0}),Y(a),(0,p.Jl)(a.filename)}async function _(a,b){let d=R(a);if("inactive"!==d.state)throw new O;d.state="activating";try{let f,{assertVerifiedBundledFlujoWorkloadStart:h}=await Promise.all([c.e(53806),c.e(76161),c.e(86661),c.e(3587)]).then(c.bind(c,486661));S(d);let i=h(b,a);if(i.assertLive(),d.generation=i.generation,!(0,p.g)(i.config,d.config))throw new O;let j=await (0,q.RD)();if(S(d),i.assertLive(),(0,q.oA)(j)!==(0,q.oA)(p.Zl.parse(d.config.trustedHost).bundledInstallation?.workload?.inventory))throw new O;let k=n.rF.parse(await u("activation-owner",()=>(0,p.$j)(d.ownerFile)));S(d),i.assertLive();let l=v("activation-grant",()=>(0,p.vb)(d.config));if(k.ownerId!==l.ownerId||l.digest!==i.digest||l.ownerId!==i.ownerId)throw new O;let m=Q(d.ledger);try{e().mkdirSync(m,{mode:448})}catch(a){if("EEXIST"!==a.code)throw a}let r=e().lstatSync(m);if(!r.isDirectory()||r.isSymbolicLink()||""!==g().relative(e().realpathSync(m),m)||e().readdirSync(m).length>=512)throw new O;S(d),i.assertLive();let s=w(d.token),t=g().join(m,`${s}.json`);d.record=Z(g().join(m,`${s}.pending`)),d.marker=Z(g().join(m,`${s}.lease`)),v("activation-marker",()=>$(d.marker,{version:1,generation:i.generation,state:"active",recordDev:String(d.record.identity.dev),recordIno:String(d.record.identity.ino)}));let z=Date.now(),A=B.parse({version:1,purpose:"bundled-flujo-control-v1",tokenHash:s,generation:i.generation,ownerId:k.ownerId,ownerRevision:(0,o.T8)(k),workspace:d.workspace,serverName:d.config.name,audience:d.audience,policyDigest:l.digest,issuedAt:z,expiresAt:Math.min(z+3e5,l.expiresAt),markerIdentity:(f=d.marker.identity,Object.fromEntries(x.map(a=>[a,String(f[a])]))),markerDigest:w(d.marker.bytes),inventory:j});if(S(d),i.assertLive(),v("activation-record",()=>$(d.record,A)),(0,o.T8)(n.rF.parse(v("activation-owner-final",()=>(0,p.Jl)(d.ownerFile))))!==A.ownerRevision)throw new O;let C=v("activation-grant-final",()=>(0,p.vb)(d.config));if(S(d),i.assertLive(),C.digest!==A.policyDigest||C.ownerId!==A.ownerId||A.expiresAt<=Date.now()||(Y(d.marker),Y(d.record),e().existsSync(t)))throw new O;S(d),i.assertLive(),e().linkSync(d.record.filename,t);let D=e().fstatSync(W(d.record),{bigint:!0});if(D.nlink!==BigInt(2)||!y(D,e().lstatSync(d.record.filename,{bigint:!0}))||!y(D,e().lstatSync(t,{bigint:!0})))throw new O;e().unlinkSync(d.record.filename),d.record.filename=t,e().fsyncSync(W(d.record)),d.record.identity=e().fstatSync(W(d.record),{bigint:!0}),Y(d.record),d.state="active"}catch(b){try{ad(a)}catch(a){throw AggregateError([b,a],"Workload activation and durable retirement failed.",{cause:b})}throw b}}function aa(a){if(void 0!==a.uncertainDescriptor){try{e().fstatSync(a.uncertainDescriptor)}catch(b){if("EBADF"===b.code){a.uncertainDescriptor=void 0;return}throw b}throw new O}}function ab(a){if(a.recoveryWriter){if(aa(a.recoveryWriter),void 0!==a.recoveryWriter.fd)throw new O;a.recoveryWriter=void 0}}function ac(a){if(ab(a),aa(a),X(a),a.removed){try{e().lstatSync(a.filename)}catch(a){if("ENOENT"===a.code)return;throw a}throw new O}if(void 0!==a.fd){if(Y(a),a.readOnlyWitness){a.bytes.length&&(0,p.Jl)(a.filename);let b=a.fd,c=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),f={fd:c,uncertainDescriptor:void 0};a.recoveryWriter=f;try{if(!y(a.identity,e().fstatSync(c,{bigint:!0})))throw new O;Y(a),X(a)}catch(b){f.fd=void 0;try{e().closeSync(c)}catch(a){f.uncertainDescriptor=c;try{aa(f)}catch{}throw AggregateError([b,a],"Workload retry writer verification and cleanup failed.",{cause:b})}throw a.recoveryWriter=void 0,b}a.fd=c,a.readOnlyWitness=!1,a.recoveryWriter=void 0;try{e().closeSync(b)}catch(c){a.uncertainDescriptor=b;try{aa(a)}catch{}throw c}Y(a),X(a)}return}if(!y(a.identity,e().lstatSync(a.filename,{bigint:!0})))throw new O;a.bytes.length&&(0,p.Jl)(a.filename),a.fd=e().openSync(a.filename,d.constants.O_RDWR|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),Y(a),X(a)}function ad(a){if(!a)return;let b=R(a);if("retired"===b.state)return;b.state="uncertain";let c=[],f=b.marker;if(f)try{if(ac(f),!b.durablyRevoked){if(f.removed)throw new O;f.bytes.length&&(0,p.Jl)(f.filename),Y(f);let a=Buffer.from(JSON.stringify({version:1,generation:b.generation,state:"revoked"}));V(W(f),a),f.bytes.fill(0),f.bytes=a,f.identity=e().fstatSync(W(f),{bigint:!0}),Y(f),X(f),b.durablyRevoked=!0}}catch(a){c.push(a)}for(let a of[b.record,b.marker])if(a){try{if(ac(a),!a.removed){a.bytes.length&&(0,p.Jl)(a.filename),Y(a),X(a),e().unlinkSync(a.filename);let b=e().fstatSync(W(a),{bigint:!0});if(b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.nlink!==BigInt(0)||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid)throw new O;a.identity=b,a.removed=!0,e().fsyncSync(W(a))}}catch(a){c.push(a)}try{!function(a){let b,c;if(ab(a),aa(a),void 0===a.fd)return;if(!a.removed){X(a),Y(a),a.bytes.length&&(0,p.Jl)(a.filename);let c={fd:b=e().openSync(a.filename,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0)),uncertainDescriptor:void 0};a.recoveryWriter=c;try{if(!y(a.identity,e().fstatSync(b,{bigint:!0})))throw new O;Y(a),X(a)}catch(d){c.fd=void 0;try{e().closeSync(b)}catch(a){c.uncertainDescriptor=b;try{aa(c)}catch{}throw AggregateError([d,a],"Workload close witness failed.",{cause:d})}throw a.recoveryWriter=void 0,d}a.recoveryWriter=void 0}let f=a.identity,g=a.fd;a.fd=void 0;try{e().closeSync(g)}catch(b){c=b,a.uncertainDescriptor=g;try{aa(a)}catch{}}if(void 0!==b){a.fd=b,a.readOnlyWitness=!0;try{if(void 0===a.uncertainDescriptor){let c=e().fstatSync(b,{bigint:!0});if(!x.filter(a=>"ctimeNs"!==a).every(a=>f[a]===c[a]))throw new O;let d=a.identity;a.identity=c;try{Y(a),X(a),a.bytes.length&&(0,p.Jl)(a.filename),Y(a)}catch(b){throw a.identity=d,b}}}catch(a){if(void 0!==c)throw AggregateError([c,a],"Workload close and witness verification failed.",{cause:c});throw a}}if(void 0!==c)throw c}(a)}catch(a){c.push(a)}}if(c.length)throw AggregateError(c,"Workload retirement remains uncertain.");if(f&&!b.durablyRevoked)throw new O;for(let a of[b.record,b.marker])a?.bytes.fill(0);b.state="retired"}async function ae(a,b){let c=g().resolve((0,k.getWorkspaceDataDir)()),d=g().join(c,"db","mcp_servers.json"),f=[],h=g().dirname(d);for(;;){let a=e().lstatSync(h,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||""!==g().relative(e().realpathSync(h),h))throw new O;f.push({filename:h,identity:a});let b=g().dirname(h);if(b===h)break;h=b}let i=async()=>{for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new O}await (0,m.af)(d)};await i();let j=e().lstatSync(d,{bigint:!0}),n=await (0,l.b)(d,{maxBytes:4194304,signal:b,verifyPath:i,expected:j});try{let c=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n));if(!c||"object"!=typeof c||Array.isArray(c)||!Object.hasOwn(c,a))throw new O;let h=c[a];if(!h||"object"!=typeof h||Array.isArray(h))throw new O;let i={...h,name:a};if("stdio"!==i.transport||i.disabled||"string"!=typeof i.command||"string"!=typeof i.cwd)throw new O;return p.Zl.parse(i.trustedHost),{config:i,assertCurrent:()=>{if(!y(j,e().lstatSync(d,{bigint:!0})))throw new O;for(let a of f){let b=e().lstatSync(a.filename,{bigint:!0});if(!b.isDirectory()||b.isSymbolicLink()||b.dev!==a.identity.dev||b.ino!==a.identity.ino||b.mode!==a.identity.mode||b.uid!==a.identity.uid||b.gid!==a.identity.gid||""!==g().relative(e().realpathSync(a.filename),a.filename))throw new O}b.throwIfAborted()}}}finally{n.fill(0)}}async function af(a){let b="request";try{a.signal.throwIfAborted();let c=/^Bearer (flo_mcp1_[A-Za-z0-9_-]{43})$/.exec(a.headers.get("authorization")??"");if(!c||!t.test(c[1])||"1"===process.env.FLUJO_WORKER_MODE)throw new O;let d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw new O;let h=w(c[1]),i=g().join(Q(d),`${h}.json`),j=g().join(Q(d),`${h}.lease`);b="private-files";let l=e().lstatSync(i,{bigint:!0}),m=e().lstatSync(j,{bigint:!0}),r=[i,j,f,d],[s,z,A,D]=await u("private-set-initial",()=>(0,p.pr)(r,a.signal,["record","marker","owner","ledger"]));b="private-binding";let E=B.parse(s),F=C.parse(z),G=n.rF.parse(A),H=p.DV.parse(D),I=H.approvals.find(a=>a.workspace===E.workspace&&a.serverName===E.serverName);if(E.tokenHash!==h||E.issuedAt>Date.now()||E.expiresAt<=Date.now()||!x.every(a=>String(m[a])===E.markerIdentity[a])||1!==F.version||F.generation!==E.generation||"active"!==F.state||F.recordDev!==String(l.dev)||F.recordIno!==String(l.ino)||w(JSON.stringify(F))!==E.markerDigest||G.ownerId!==E.ownerId||(0,o.T8)(G)!==E.ownerRevision||H.ownerId!==E.ownerId||!I||I.expiresAt<=Date.now()||I.policyDigest!==E.policyDigest)throw new O;let J=new URL(a.url);b="request-binding";let K=(a,b)=>{if(!a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-request-binding]","refused",b)}catch{}throw new O}};if(K(J.origin===E.audience,"url-audience"),K(P(process.env.FLUJO_BASE_URL)===E.audience,"process-audience"),K(a.headers.get("host")===J.host,"host"),K(null===a.headers.get("origin")||a.headers.get("origin")===E.audience,"origin"),K(a.headers.get("x-flujo-workspace")===E.workspace,"workspace-header"),K(!J.searchParams.has("workspace"),"workspace-query"),K(E.inventory.some(b=>b.path===J.pathname&&b.method===a.method),"inventory-route"),K(!/%|\\|\/\//.test(J.pathname),"path"),await (0,k.runWithWorkspace)(E.workspace,async()=>{b="config";let c=(await u("config-first",()=>ae(E.serverName,a.signal))).config,d=p.Zl.parse(c.trustedHost);if(d.bundledInstallation?.packageDirectory!=="flujo")throw new O;b="package";let e=await u("package-verification",()=>(0,p.Bh)(c,a.signal));b="inventory-binding";let f=await u("inventory",()=>(0,q.RD)());if(e.ownerId!==E.ownerId||e.digest!==E.policyDigest||(0,q.oA)(d.bundledInstallation.workload?.inventory)!==(0,q.oA)(E.inventory)||(0,q.oA)(f)!==(0,q.oA)(E.inventory))throw new O;b="config-fences";let g=await u("config-latest",()=>ae(E.serverName,a.signal));if(!(0,p.g)(g.config,c))throw new O;let h=await u("config-final",()=>ae(E.serverName,a.signal)),i=h.config;if(!(0,p.g)(i,c))throw new O;let j=v("digest-final",()=>(0,p.OU)(i));b="final-private-binding";let[k,l,m,s]=v("private-set-final",()=>(0,p.jf)(r,a.signal)),t=n.rF.parse(m),w=p.DV.parse(s),x=w.approvals.find(a=>a.workspace===E.workspace&&a.serverName===E.serverName);if((0,q.oA)(B.parse(k))!==(0,q.oA)(E)||(0,q.oA)(C.parse(l))!==(0,q.oA)(F)||t.ownerId!==E.ownerId||(0,o.T8)(t)!==E.ownerRevision||w.ownerId!==E.ownerId||!x||x.expiresAt<=Date.now()||x.policyDigest!==E.policyDigest||j!==E.policyDigest)throw new O;h.assertCurrent()}),b="final-file-fences",!y(l,e().lstatSync(i,{bigint:!0}))||!y(m,e().lstatSync(j,{bigint:!0}))||d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE||P(process.env.FLUJO_BASE_URL)!==E.audience||E.expiresAt<=Date.now())throw new O;return a.signal.throwIfAborted(),E}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[workload-guard]","refused",b)}catch{}throw a}}async function ag(a){if(!/flo_mcp1_/i.test(a.headers.get("authorization")??""))return{kind:"unrelated"};try{let b=await af(a),c=Object.freeze({workspace:b.workspace,serverName:b.serverName,generation:b.generation,inventory:Object.freeze(b.inventory.map(a=>Object.freeze(a))),readRequest:()=>a,recheck:async()=>{try{let c=await af(a);if((0,q.oA)(c)!==(0,q.oA)(b))return N();return null}catch{return N()}}});return E.add(c),{kind:"authorized",authorization:c}}catch{return{kind:"denied",response:N()}}}async function ah(a,b){if(!E.has(a)||b!==a.readRequest())throw new O;let d=await c.e(83829).then(c.bind(c,560493)),e=()=>{let a=Reflect.get(d,"hasExecutionExtensionContext");if("function"!=typeof a||d.executionExtensionAdapter()||a())throw new O};if(e(),await a.recheck())throw new O;e()}async function ai(a,b,c){await ah(a,b);let d=M();if(d&&d!==b)throw new O;return h.AsyncLocalStorage.prototype.run.call(K,b,()=>G.run({authorization:a,request:b},c))}function aj(){let a=G.getStore(),b=M();if(!a&&!b)return;if(!a||!b||a.request!==b||!E.has(a.authorization))throw new O;let c=new Set(["listTools","listResources","listResourceTemplates","readResource","listSkills","getSkill"]);return a.authorization.inventory.filter(a=>!c.has(a.action)).map(a=>a.action)}async function ak(){let a=M(),b=G.getStore();if(!a&&!b)return;if(!a)throw new O;if(b){if(b.request!==a||!E.has(b.authorization))throw new O;return b}let c=F.get(a);if(c){if(!E.has(c)||c.readRequest()!==a)throw new O;return{authorization:c,request:a}}let d=await ag(a);if("authorized"!==d.kind||M()!==a)throw new O;return F.set(a,d.authorization),{authorization:d.authorization,request:a}}async function al(){let a=await ak();a&&await ah(a.authorization,a.request)}async function am(a,b,d,e={}){let f=await ak();if(!f)return;await ah(f.authorization,f.request);let g=await (0,q.zz)(),h="string"==typeof a?[a]:a;if(0===h.length)throw new O;let{AjvJsonSchemaValidator:i}=await c.e(45775).then(c.bind(c,945775)),j=new i;for(let a of h){let c=g.find(c=>c.action.action===a&&c.action.method===b&&c.action.path===d);if(!c||!f.authorization.inventory.some(a=>(0,q.oA)(a)===(0,q.oA)(c.action))||!j.getValidator(c.schema)(e).valid)throw new O}await ah(f.authorization,f.request)}let an=new WeakMap;function ao(a,b=200){let c=new Response(JSON.stringify(a),{status:b,headers:{"Content-Type":"application/json"}});return c.body&&an.set(c,c.body),c}function ap(a,b,c){if(!a.body)return a;let d=a.body,e=d.getReader();return an.get(a)===d?new Response(new ReadableStream({async pull(a){try{c.throwIfAborted();let d=await e.read();c.throwIfAborted(),await ah(b,b.readRequest()),c.throwIfAborted(),d.done||a.enqueue(d.value),a.close(),e.releaseLock()}catch(b){try{await e.cancel(b)}finally{e.releaseLock(),a.error(b)}}},async cancel(a){try{await e.cancel(a)}finally{e.releaseLock()}}}),{status:a.status,statusText:a.statusText,headers:a.headers}):new Response(new ReadableStream({async pull(a){try{c.throwIfAborted(),await ah(b,b.readRequest());let d=await e.read();c.throwIfAborted(),await ah(b,b.readRequest()),d.done?(a.close(),e.releaseLock()):a.enqueue(d.value)}catch(b){try{await e.cancel(b)}finally{e.releaseLock(),a.error(b)}}},async cancel(a){try{await e.cancel(a)}finally{e.releaseLock()}}}),{status:a.status,statusText:a.statusText,headers:a.headers})}},649796:(a,b,c)=>{"use strict";Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(777943)},673560:(a,b,c)=>{"use strict";c.d(b,{Th:()=>e});let d=["localhost","network","public"];function e(a=process.env){let b=a.FLUJO_EXPOSURE_MODE?.trim().toLowerCase();return"string"==typeof b&&d.includes(b)?b:function(a=process.env){return a.FLUJO_MCP_APP_SANDBOX_PUBLIC_URL?.trim()||a.FLUJO_MCP_APP_HOST_ORIGINS?.trim()?"public":a.FLUJO_EXTRA_LOCAL_HOSTS?.split(",").some(a=>a.trim().length>0&&"."!==a.trim())?"network":void 0}(a)??"localhost"}},720929:(a,b,c)=>{"use strict";c.d(b,{Z:()=>l,b:()=>k});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(134887);function j(a,b){return["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].every(c=>a[c]===b[c])}function k(){let a=process.env.FLUJO_ENCRYPTION_SECRET_FILE;if(void 0===a)return null;if(!g().isAbsolute(a))throw Error("Private encryption secret is unavailable");let b=g().resolve(a),c=[g().resolve((0,i.ok)())];try{c.push(e().realpathSync(c[0]))}catch(a){if("ENOENT"!==a.code)throw a}if(c.some(a=>{let c=g().relative(a,b);return""===c||".."!==c&&!c.startsWith(`..${g().sep}`)&&!g().isAbsolute(c)}))throw Error("Private encryption secret must be outside the data directory");let d=e().lstatSync(b,{bigint:!0});if(!d.isFile()||d.isSymbolicLink()||d.nlink!==BigInt(1)||d.size>BigInt(1024)||""!==g().relative(e().realpathSync(b),b)||"win32"!==process.platform&&((d.mode&BigInt(63))!==BigInt(0)||d.uid!==BigInt(process.getuid?.()??-1)))throw Error("Private encryption secret is unavailable");let f=e().openSync(b,e().constants.O_RDONLY|(e().constants.O_NOFOLLOW??0)|(e().constants.O_NONBLOCK??0));try{let a=e().fstatSync(f,{bigint:!0});if(!a.isFile()||!j(d,a))throw Error("Private encryption secret changed");let c=Buffer.alloc(1025),i=0;for(;i<c.length;){let a=e().readSync(f,c,i,c.length-i,null);if(!a)break;i+=a}if(BigInt(i)!==a.size||!j(a,e().fstatSync(f,{bigint:!0}))||!j(a,e().lstatSync(b,{bigint:!0}))||""!==g().relative(e().realpathSync(b),b))throw Error("Private encryption secret changed");let k=new TextDecoder("utf-8",{fatal:!0}).decode(c.subarray(0,i)).replace(/\r?\n$/,"");if(!/^[A-Za-z0-9_-]{43,512}$/.test(k))throw Error("Private encryption secret is invalid");let l=(0,h.createHash)("sha256").update(JSON.stringify([b,...["dev","ino","size","mtimeNs","ctimeNs","mode","uid","gid","nlink"].map(b=>String(a[b]))])).digest("hex");return{secret:k,identity:l}}finally{e().closeSync(f)}}function l(){return k()?.secret??null}},750122:(a,b,c)=>{"use strict";c.d(b,{k:()=>e});let d=[];for(let a=0;a<256;++a)d.push((a+256).toString(16).slice(1));function e(a,b=0){return(d[a[b+0]]+d[a[b+1]]+d[a[b+2]]+d[a[b+3]]+"-"+d[a[b+4]]+d[a[b+5]]+"-"+d[a[b+6]]+d[a[b+7]]+"-"+d[a[b+8]]+d[a[b+9]]+"-"+d[a[b+10]]+d[a[b+11]]+d[a[b+12]]+d[a[b+13]]+d[a[b+14]]+d[a[b+15]]).toLowerCase()}},755822:(a,b,c)=>{"use strict";c.d(b,{BD:()=>x,Kq:()=>B,y0:()=>G,Sy:()=>_,Ny:()=>H,f:()=>$,Jl:()=>I,$j:()=>J,tm:()=>K,jf:()=>M,pr:()=>L,g:()=>R,DV:()=>A,r:()=>u,vb:()=>V,VN:()=>W,OU:()=>Q,Zl:()=>z,Ik:()=>T,Do:()=>y,Bh:()=>aa});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(18963),j=c(907986),k=c(134887),l=c(792711),m=c(731421);let n=String.raw`
|
|
3
3
|
$ErrorActionPreference = 'Stop'
|
|
4
4
|
$phase = 'input'
|
|
5
5
|
try {
|