flujo-ai 3.48.6 → 3.48.7
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 +60 -60
- 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]/models/route.js +1 -1
- package/.next/server/app/api/flow/[id]/models/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/comparisons/[id]/route.js +1 -1
- package/.next/server/app/api/harness/comparisons/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/harness/comparisons/route.js +1 -1
- package/.next/server/app/api/harness/comparisons/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/projects/route.js +1 -1
- package/.next/server/app/api/projects/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.js +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 +60 -60
- package/.next/server/chunks/14645.js +1 -1
- package/.next/server/chunks/21392.js +3 -3
- package/.next/server/chunks/{83503.js → 25847.js} +3 -3
- package/.next/server/chunks/31519.js +3 -3
- package/.next/server/chunks/34679.js +1 -1
- package/.next/server/chunks/52152.js +3 -3
- package/.next/server/chunks/73633.js +1 -1
- package/.next/server/chunks/81306.js +1 -1
- package/.next/server/chunks/82300.js +3 -3
- package/.next/server/chunks/83718.js +1 -1
- package/.next/server/chunks/8464.js +1 -1
- package/.next/server/chunks/{78608.js → 87864.js} +3 -3
- package/.next/server/chunks/89031.js +1 -1
- 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-5f61569b0629e957.js → 2103-be5e06316fbab625.js} +1 -1
- package/.next/static/chunks/app/chat/{page-569fe5a097bb2c06.js → page-314d31c432c2d88b.js} +1 -1
- package/.next/static/chunks/webpack-1449ea081feba501.js +1 -0
- 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/chunks/webpack-d7e41a6b1b459ed1.js +0 -1
- /package/.next/static/{QzwOWTB7GKoP7AaFNpYr5 → dA-lF06zcBoG4LavbX9MD}/_buildManifest.js +0 -0
- /package/.next/static/{QzwOWTB7GKoP7AaFNpYr5 → dA-lF06zcBoG4LavbX9MD}/_ssgManifest.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
exports.id=78608,exports.ids=[78608],exports.modules={12778:(a,b,c)=>{"use strict";c.d(b,{dw:()=>o,gF:()=>i,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=g.waiters??=[],i=4,j=new WeakMap;function k(a){let b=6*a+131072;if(!Number.isSafeInteger(b)||a<0)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}function l(a){let b=(0,d.getHeapStatistics)();return g.bytes+a<=b.heap_size_limit-b.used_heap_size-0x4000000}function m(){for(let a of h.splice(0))a()}async function n(a){let b=Date.now()+3e4;for(;;){let c=g.active<i;if(c&&l(a))return;if(c&&0===g.active)throw new e("CONVERSATION_LOG_READ_MEMORY",503);let d=b-Date.now();if(d<=0)throw c?new e("CONVERSATION_LOG_READ_MEMORY",503):new e("CONVERSATION_LOG_READ_BUSY",429);await new Promise(a=>{let b=setTimeout(a,Math.min(d,1e3));h.push(()=>{clearTimeout(b),a()})})}}async function o(a,b,c){if(void 0!==c){let d=c&&j.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let f=k(a);if(!l(f))throw new e("CONVERSATION_LOG_READ_MEMORY",503);g.bytes+=f;let h=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=f,m()});return d.pending.add(h),h.then(()=>d.pending.delete(h),()=>d.pending.delete(h)),h}let d=k(a);await n(d);let f=Object.freeze({}),h={open:!0,pending:new Set};j.set(f,h),g.active++,g.bytes+=d;try{return await b(f)}finally{h.open=!1,await Promise.allSettled([...h.pending]),j.delete(f),g.active--,g.bytes-=d,m()}}},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,"60eab620425ddbd86cc239ac6b8fc50095e3a9f1ef",null),(0,d.A)(l,"40064b3bb4012d9b48afd736a05e4a27b19486d83b",null),(0,d.A)(m,"6017d1d90a84849ef08e2cd5f773e5acb98dedee0f",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()}},68159:(a,b,c)=>{"use strict";c.d(b,{$j:()=>E,BD:()=>s,Bh:()=>X,DV:()=>v,Do:()=>t,Ik:()=>O,Jl:()=>D,Kq:()=>w,Ny:()=>C,OU:()=>L,Sy:()=>W,VN:()=>R,Zl:()=>u,f:()=>V,g:()=>M,jf:()=>H,pr:()=>G,r:()=>p,tm:()=>F,vb:()=>Q,y0:()=>B});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(463319),n=c(497137),o=c(332400);function p(a){let b=new Map;for(let[c,d]of Object.entries(Object.getOwnPropertyDescriptors(a.env??{}))){if(!d.enumerable)continue;if(!("value"in d))throw new w("HOST_POLICY_INVALID");let a=d.value,e=a&&"object"==typeof a?Object.getOwnPropertyDescriptor(a,"value"):void 0,f="string"==typeof a?a:e&&"value"in e?e.value:void 0;if("string"!=typeof f||Buffer.byteLength(f)>16384||f.includes("\0"))throw new w("HOST_POLICY_INVALID");b.set(c,f)}return b}let q=i.string().regex(/^[a-f0-9]{64}$/),r=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),s=["HOME","USERPROFILE","APPDATA","LOCALAPPDATA","XDG_CONFIG_HOME","XDG_CACHE_HOME","XDG_DATA_HOME","XDG_STATE_HOME","XDG_RUNTIME_DIR","TMPDIR","TMP","TEMP","NPM_CONFIG_CACHE","PIP_CACHE_DIR","UV_CACHE_DIR","FLUJO_PARENT_DATA_DIR","FLUJO_DATA_DIR","FLUJO_WORKSPACE",..."win32"===process.platform?["HOMEDRIVE","HOMEPATH"]:[]];function t(a,b){let c=u.parse(a.trustedHost),d=b??c.runtimeHome,e=p(a),f="win32"===process.platform?"USERPROFILE":"HOME",i=[...e].find(([a])=>"win32"===process.platform?a.toUpperCase()===f:a===f)?.[1],k="isolated"===d?g().join((0,j.getWorkspaceDataDir)(),"userdata","mcp-runtime",(0,h.createHash)("sha256").update(a.name).digest("hex").slice(0,24),"home"):i??"";return{command:a.command,home:k}}let u=i.object({schemaVersion:i.literal(1),kind:i.literal("trusted-host"),privileges:i.literal("owner-account"),runtime:i.enum(["node","native","npx"]),runtimeHome:i.enum(["host","isolated"]).optional(),entryPoint:r,sourceRoot:r,sourceDigest:q,executableDigest:q,packageRunner:o.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:r,dependencyNamespaceRoot:r,assetDigest:q,dependencyGraphDigest:q,dependencyDirectories:i.array(r).max(256),dependencyLinks:i.array(i.object({link:r,target:r}).strict()).max(64),workload:i.object({purpose:i.literal("bundled-flujo-control-v1"),inventory:i.array(i.object({action:i.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/),method:i.enum(["GET","POST"]),path:i.enum(["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/resources/read","/api/mcp/flujo/skills","/api/mcp/flujo/authoring","/api/mcp/flujo/flows","/api/mcp/flujo/servers","/api/mcp/flujo/automation","/api/mcp/flujo/state"]),schemaDigest:q}).strict()).min(1).max(70).refine(a=>new Set(a.map(a=>a.action)).size===a.length)}).strict().optional()}).strict().optional(),environmentNames:i.array(i.string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/).refine(a=>!["NODE_OPTIONS","NODE_PATH","PYTHONPATH","PYTHONHOME","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH"].includes(a.toUpperCase()))).max(64)}).strict().refine(a=>new Set(a.environmentNames.map(a=>"win32"===process.platform?a.toUpperCase():a)).size===a.environmentNames.length).refine(a=>!a.bundledInstallation?.workload||"flujo"===a.bundledInstallation.packageDirectory).refine(a=>"npx"===a.runtime==!!a.packageRunner&&!(a.packageRunner&&a.bundledInstallation)),v=i.object({schemaVersion:i.literal(1),ownerId:i.string().regex(/^[A-Za-z0-9_-]{1,64}$/),approvals:i.array(i.object({workspace:i.string().refine(j.isValidWorkspaceName),serverName:i.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),policyDigest:q,expiresAt:i.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()).max(128)}).strict().refine(a=>new Set(a.approvals.map(a=>JSON.stringify([a.workspace,a.serverName]))).size===a.approvals.length);class w extends Error{constructor(a){super("HOST_CONSENT_REQUIRED"===a?"MCP host execution requires explicit owner consent for this workspace, server, package revision and capabilities. Configure an approved isolated profile or a separately protected trusted-host approval.":"HOST_SOURCE_CHANGED"===a?"MCP executable or package revision changed. Inspect the fixed package and renew owner consent before execution.":"MCP trusted-host policy is invalid. Use an absolute executable, working directory and fixed workspace package; dynamic package runners require an approved isolated profile."),this.code=a,this.name="TrustedHostMcpError"}}function x(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function y(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new w("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(x(e().realpathSync(a))!==x(a))throw new w("HOST_SOURCE_CHANGED")}function z(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}function A(a,b,c){let f=e().openSync(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=e().fstatSync(f,{bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||(y(a),!z(d,e().lstatSync(a,{bigint:!0}))))throw new w("HOST_SOURCE_CHANGED");let g=Buffer.alloc(65536),h=0;for(;;){let a=e().readSync(f,g,0,g.length,null);if(!a)break;if((h+=a)>b||BigInt(h)>d.size)throw new w("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(y(a),BigInt(h)!==d.size||!z(d,e().fstatSync(f,{bigint:!0}))||!z(d,e().lstatSync(a,{bigint:!0})))throw new w("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function B(a){try{let b=(0,h.createHash)("sha256");return A(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new w("HOST_SOURCE_CHANGED")}}function C(a,b=[]){try{let c=g().resolve(a),d=g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),f=g().relative(d,c);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=a=>{if(++k>16384)throw Error();y(a);let d=e().lstatSync(a,{bigint:!0});if(!d.isDirectory())throw Error();let f=e().readdirSync(a).sort((a,b)=>a<b?-1:+(a>b));for(let j of(i.update(JSON.stringify(["directory",g().relative(c,a).split(g().sep).join("/"),String(d.mode)])),f)){let d=g().join(a,j),f=e().lstatSync(d,{bigint:!0});if(f.isSymbolicLink()){let a=b.find(a=>x(a.link)===x(d));if(!a||x(e().realpathSync(d))!==x(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(c,d).split(g().sep).join("/"),x(a.target)]));continue}if(f.isDirectory()&&!f.isSymbolicLink()){m(d);continue}if(++k>16384||!f.isFile()||f.isSymbolicLink()||f.nlink!==BigInt(1))throw Error();let n=(0,h.createHash)("sha256"),o=A(d,0x10000000-l,a=>n.update(a));l+=Number(o.size),i.update(JSON.stringify(["file",g().relative(c,d).split(g().sep).join("/"),String(o.mode),n.digest("hex")]))}if(y(a),!z(d,e().lstatSync(a,{bigint:!0})))throw Error()};return m(c),i.digest("hex")}catch{throw new w("HOST_SOURCE_CHANGED")}}function D(a){let b="win32"===process.platform&&a?(0,m.f)(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=J(a);if(void 0!==b&&(0,m.f)(a)!==b||c&&a&&(y(a),!z(c,e().lstatSync(a,{bigint:!0}))))throw new w("HOST_CONSENT_REQUIRED");return d}async function E(a,b){return(await I(a,b)).value}async function F(a,b,c){if(!a||!b||c?.aborted)throw new w("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await (0,m.p)(d,c):void 0,h=d.map(a=>J(a));if(void 0!==g&&await (0,m.p)(d,c)!==g)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(y(b),!z(f[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new w("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function G(a,b,c){let d,f="1"===process.env.FLUJO_MCP_WORKLOAD_TRACE?Date.now():void 0,h="input";try{if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let c=[...a];h="identity-before";let f=c.map((a,b)=>(d=b,e().lstatSync(a,{bigint:!0})));h="native-before",d=void 0;let i="win32"===process.platform?await (0,m.p)(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,J(a)));if(h="native-after",d=void 0,void 0!==i&&await (0,m.p)(c,b)!==i)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,y(b),!z(f[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return j}catch(a){throw!function(a,b,c,d,e,f){try{if(void 0===f)return;let g=void 0!==b&&c?Object.getOwnPropertyDescriptor(c,String(b)):void 0,h=g&&"value"in g?g.value:void 0,i=void 0===b?"set":"record"===h||"marker"===h||"owner"===h||"ledger"===h?h:"member",j=d&&"object"==typeof d?Object.getOwnPropertyDescriptors(d):{},k=j.code&&"value"in j.code?j.code.value:void 0,l=j.errno&&"value"in j.errno?j.errno.value:void 0,m="string"==typeof k&&["HOST_CONSENT_REQUIRED","HOST_SOURCE_CHANGED","HOST_POLICY_INVALID","ENOENT","EACCES","EPERM","EIO","EBUSY","EMFILE","ENFILE","ENOTDIR","ELOOP","EINVAL"].includes(k)?k:"unknown";console.info("[private-approval-set-reader]","refused",{phase:a,role:i,errorKind:m,..."number"==typeof l&&Number.isInteger(l)&&65535>=Math.abs(l)?{errno:l}:{},cancelled:e?.aborted===!0,elapsedMs:Math.max(0,Date.now()-f)})}catch{}}(h,d,c,a,b,f),a}}function H(a,b){if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?(0,m.f)(c):void 0,h=c.map(a=>J(a));if(void 0!==f&&(0,m.f)(c)!==f)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(y(b),!z(d[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return h}async function I(a,b){let c="signal-before";try{if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await (0,m.p)(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=J(a);if(c="native-after",void 0!==d&&await (0,m.p)(a,b)!==d||(c="identity-after",f&&a&&(y(a),!z(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new w("HOST_CONSENT_REQUIRED");return{value:g,windowsAuthority:d}}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[private-approval-reader]","refused",c)}catch{}throw a}}function J(a){if(!a||!g().isAbsolute(a))throw new w("HOST_CONSENT_REQUIRED");let b=g().relative(g().resolve((0,k.ok)()),g().resolve(a));if(!b||".."!==b&&!b.startsWith(`..${g().sep}`)&&!g().isAbsolute(b))throw new w("HOST_CONSENT_REQUIRED");if("win32"!==process.platform&&"function"==typeof process.getuid){let b=BigInt(process.getuid()),c=g().dirname(g().resolve(a));for(;;){let a=e().lstatSync(c,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||a.uid!==b&&a.uid!==BigInt(0)||(a.mode&BigInt(18))!==BigInt(0)&&(a.mode&BigInt(512))===BigInt(0))throw new w("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=A(a,65536,a=>c.push(Buffer.from(a)));if("win32"!==process.platform&&(b.mode&BigInt(63))!==BigInt(0)||"win32"!==process.platform&&"function"==typeof process.getuid&&b.uid!==BigInt(process.getuid())&&b.uid!==BigInt(0))throw new w("HOST_CONSENT_REQUIRED");return JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Buffer.concat(c)))}finally{for(let a of c)a.fill(0)}}function K(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=u.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=r.parse(a.command),e=r.parse(a.cwd),f=i.array(i.string().max(2048).refine(a=>!a.includes("\0"))).max(64).parse(a.args??[]);if(void 0!==a.isolation||/\.(?:cmd|bat|ps1)$/i.test(d)||"npx"!==b.runtime&&x(e)!==x(b.sourceRoot))throw Error();let h=g().relative(b.sourceRoot,b.entryPoint);if(!h||".."===h||h.startsWith(`..${g().sep}`)||g().isAbsolute(h))throw Error();let l=g().basename(d).toLowerCase().replace(/\.exe$/,"");if("npx"===b.runtime)(0,o.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:p(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(x(d)!==x(b.entryPoint)||["node","npm","npx","pnpm","yarn","corepack","uv","uvx","pip","pip3","python","python3","bash","sh","cmd","powershell","pwsh","ruby","perl","deno","bun","go","cargo"].includes(l))throw Error();if(c="CONSENT_BUNDLE",b.bundledInstallation){if("node"!==b.runtime||x(b.entryPoint)!==x(g().join(b.sourceRoot,"dist","index.js"))||x(b.sourceRoot)!==x(g().join((0,j.getWorkspaceDataDir)(),"mcp-servers",b.bundledInstallation.packageDirectory)))throw Error();let a=g().relative(g().resolve((0,k.ok)()),b.bundledInstallation.installationRoot);if(!a||".."!==a&&!a.startsWith(`..${g().sep}`)&&!g().isAbsolute(a))throw Error();for(let a of b.bundledInstallation.dependencyLinks){let c=g().relative(g().join(b.sourceRoot,"node_modules"),a.link);if(".."===c||c.startsWith(`..${g().sep}`)||g().isAbsolute(c))throw Error()}}c="CONSENT_ENVIRONMENT";let m=[...p(a)].sort(([a],[b])=>a<b?-1:+(a>b)).map(([a,c])=>{if(!b.environmentNames.includes(a))throw Error();return[a,c]});c="CONSENT_CAPABILITIES";let n=i.string().max(2048).refine(a=>!a.includes("${global:")&&!/[\x00-\x1f\x7f]/.test(a)),q=i.array(n).max(64).parse(a.roots??[]),s=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let t=JSON.stringify({domain:"flujo:mcp:trusted-host-consent:v2",command:d,args:f,cwd:e,requestedEnvironment:m,policy:{...b,environmentNames:[...b.environmentNames].sort()},capabilities:{roots:q,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:s,runtimeHomeMode:a.runtimeHomeMode??null}}),v=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:t,salt:v}}catch(a){if(b)throw new n.IP(c,a);throw new w("HOST_POLICY_INVALID")}}function L(a){let{consent:b,salt:c}=K(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function M(a,b){let c=K(a),d=K(b);return c.consent===d.consent&&c.salt===d.salt}async function N(a,b){return P(a,b,!1)}async function O(a){return P(a,void 0,!0)}async function P(a,b,c){if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=K(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new n.IP("CONSENT_SCRYPT",a):a);try{(0,h.scrypt)(d,e,32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>b?f(b):a(c))}catch(a){f(a)}});try{if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function Q(a){if(void 0===a.trustedHost)throw new w("HOST_CONSENT_REQUIRED");try{let b=u.parse(a.trustedHost),c=L(a),d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw Error();let g=[d,f],h=g.map(a=>e().lstatSync(a,{bigint:!0})),i="win32"===process.platform?(0,m.f)(g):void 0,k=g.map(a=>J(a));if(void 0!==i&&(0,m.f)(g)!==i)throw Error();for(let[a,b]of g.entries())if(y(b),!z(h[a],e().lstatSync(b,{bigint:!0})))throw Error();if(d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let n=v.parse(k[0]),o=l.rF.parse(k[1]),p=n.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(o.ownerId!==n.ownerId||!p||p.expiresAt<=Date.now()||p.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:o.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:p.expiresAt}}catch(a){if(a instanceof w)throw a;throw new w("HOST_CONSENT_REQUIRED")}}async function R(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=u.parse(c.trustedHost),f=await N(c,b),g=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,h=process.env.FLUJO_OWNER_AUTH_FILE;if(!g||!h)throw Error();let i=await F(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=v.parse(i[0]),m=l.rF.parse(i[1]),n=k.approvals.find(a=>a.workspace===d&&a.serverName===c.name);if(b?.aborted||d!==(0,j.getCurrentWorkspace)()||m.ownerId!==k.ownerId||!n||n.expiresAt<=Date.now()||n.policyDigest!==f)throw Error();return{policy:e,digest:f,ownerId:m.ownerId,workspace:d,expiresAt:n.expiresAt}}catch(a){if(a instanceof w)throw a;throw new w("HOST_CONSENT_REQUIRED")}}async function S(a){let b=[],c=g().resolve(a);for(;;){b.push(c);let a=g().dirname(c);if(a===c)break;c=a}for(let a=0;a<b.length;a+=8)if((await Promise.allSettled(b.slice(a,a+8).map(a=>e().promises.lstat(a)))).some(a=>"rejected"===a.status||a.value.isSymbolicLink()))throw Error();if(x(await e().promises.realpath(a))!==x(a))throw Error()}async function T(a,b,c,f){let g;if(c?.aborted)throw Error();let i=await e().promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=await i.stat({bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||f&&!z(f,d)||(await S(a),!z(d,await e().promises.lstat(a,{bigint:!0}))))throw Error();let j=(0,h.createHash)("sha256");g=Buffer.alloc(d.size>BigInt(1048576)?1048576:65536);let k=0;for(;;){if(c?.aborted)throw Error();let{bytesRead:a}=await i.read(g,0,g.length,null);if(!a)break;if((k+=a)>b||BigInt(k)>d.size)throw Error();j.update(g.subarray(0,a))}if(await S(a),BigInt(k)!==d.size||!z(d,await i.stat({bigint:!0}))||!z(d,await e().promises.lstat(a,{bigint:!0})))throw Error();return{digest:j.digest("hex"),size:k}}finally{g?.fill(0),await i.close()}}async function U(a,b,c=[]){let d=g().resolve(a),f=g().relative(g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),d);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=async a=>{if(b?.aborted||++k>16384)throw Error();await S(a);let f=await e().promises.lstat(a,{bigint:!0});if(!f.isDirectory())throw Error();i.update(JSON.stringify(["directory",g().relative(d,a).split(g().sep).join("/"),String(f.mode)]));let h=(await e().promises.readdir(a)).sort((a,b)=>a<b?-1:+(a>b)),j=[],n=async()=>{let a=j.splice(0),c=await Promise.allSettled(a.map(({filename:a,stat:c})=>T(a,Number(c.size),b,c)));if(b?.aborted||c.some(a=>"rejected"===a.status))throw Error();for(let[b,e]of c.entries()){if("fulfilled"!==e.status)throw Error();let{filename:c,stat:f}=a[b];if(e.value.size!==Number(f.size))throw Error();i.update(JSON.stringify(["file",g().relative(d,c).split(g().sep).join("/"),String(f.mode),e.value.digest]))}};for(let f of h){if(b?.aborted)throw Error();let h=g().join(a,f),o=await e().promises.lstat(h,{bigint:!0});if(o.isSymbolicLink()){await n();let a=c.find(a=>x(a.link)===x(h));if(!a||x(await e().promises.realpath(h))!==x(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),x(a.target)]));continue}if(o.isDirectory()&&!o.isSymbolicLink()){await n(),await m(h);continue}if(++k>16384||!o.isFile()||o.isSymbolicLink()||o.nlink!==BigInt(1)||o.size<BigInt(0)||o.size>BigInt(0x10000000-l))throw Error();l+=Number(o.size),j.push({filename:h,stat:o}),8===j.length&&await n()}if(await n(),await S(a),!z(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function V(a,b){try{return await U(a,b)}catch{throw new w("HOST_SOURCE_CHANGED")}}async function W(a,b){try{return(await T(a,0x20000000,b)).digest}catch{throw new w("HOST_SOURCE_CHANGED")}}async function X(a,b){let d=structuredClone(a),e=await R(d,b),f="inspection";try{let a=async()=>{let a=e.policy.bundledInstallation;if(!a)return;let{inspectShippedWorkspaceProvenance:b}=await c.e(8464).then(c.bind(c,8464));return b((0,j.getWorkspaceDataDir)(),a.packageDirectory,a.installationRoot)},g=await Promise.allSettled([T(d.command,0x20000000,b),U(e.policy.sourceRoot,b,e.policy.bundledInstallation?.dependencyLinks),a()]);if("rejected"===g[0].status)throw f="executable-read",g[0].reason;if("rejected"===g[1].status)throw f="source-read",g[1].reason;if("rejected"===g[2].status)throw f="provenance-read",g[2].reason;let h=(a,b)=>{if(f=b,!a)throw Error()},i=g[0].value,k=g[1].value;if(e.policy.bundledInstallation){let a=e.policy.bundledInstallation,c=g[2].value;if(f="provenance-result",!c)throw Error();h(!b?.aborted,"signal"),h(c.assetDigest===a.assetDigest,"asset-digest"),h(x(c.dependencyNamespaceRoot)===x(a.dependencyNamespaceRoot),"namespace"),h(c.dependencyGraph.digest===a.dependencyGraphDigest,"graph-digest"),h(JSON.stringify(c.dependencyLinks)===JSON.stringify(a.dependencyLinks),"links"),h(JSON.stringify(c.dependencies.map(a=>a.directory))===JSON.stringify(a.dependencyDirectories),"directories")}if(h(i.digest===e.policy.executableDigest,"executable-digest"),h(k===e.policy.sourceDigest,"source-digest"),e.policy.packageRunner){let a=e.policy.packageRunner;(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...t(d),inspectClosure:!1});let c=await T(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,t(d))}}catch{try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[trusted-host-source]","refused",b?.aborted?"signal-aborted":"revision-or-read",f)}catch{}throw new w(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let g=await R(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new w("HOST_CONSENT_REQUIRED");return g}},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(29620),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(15209)]).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(29620),c.e(45481),c.e(45546),c.e(74107),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(92967),c.e(7937),c.e(61992),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))}},199061:(a,b,c)=>{"use strict";c.d(b,{At:()=>g,Hd:()=>f,MO:()=>d,sE:()=>e});class d extends Error{constructor(a,b,c){super(`Conversation publication refused: ${b}. Existing durable history is retained.`,c),this.code=a,this.name="ConversationPublicationError",this.status="CONVERSATION_PUBLICATION_BUSY"===a?429:503,this.details={code:a,status:this.status,type:"conversation_publication_error"}}}function e(a){return a instanceof Error&&"ConversationPublicationError"===a.name}function f(a){return e(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name}function g(a){return"string"==typeof a&&(a.startsWith("CONVERSATION_PUBLICATION_")||a.startsWith("CONVERSATION_SEQUENCE_"))}},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)}}},437175:(a,b,c)=>{"use strict";c.d(b,{B_:()=>z,Ev:()=>x,JN:()=>s,Lf:()=>t,MO:()=>i.MO,Ob:()=>G,Sd:()=>u,Sg:()=>E,by:()=>w,gm:()=>I,l7:()=>v,oK:()=>y,pw:()=>F,sE:()=>i.sE,sR:()=>A});var d=c(16698),e=c(257975),f=c(178877),g=c(750231),h=c(497776),i=c(199061);let j=Object.freeze({writers:4,retainedBytes:0x10000000,ownerBytes:0x8000000,slots:262144,depth:128,bufferBytes:65536,stringChars:8192}),k=globalThis,l=k.__flujoConversationPublicationV1??={bytes:0,retained:0,owners:0,writers:0,quarantined:0,rejected:0,chains:new Map,fences:new Map,receipts:new Map,waiters:[],context:new d.AsyncLocalStorage,batches:new Map,captures:new WeakMap,immutableSnapshots:new WeakSet};function m(a,b){throw l.rejected++,new i.MO(a,b)}function n(a){let b=0;for(let c=a;c;c=Object.getPrototypeOf(c)){(++b>128||e.types.isProxy(c))&&m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported");let a=Object.getOwnPropertyDescriptor(c,"toJSON");!a||"value"in a&&"function"!=typeof a.value||m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported")}}function o(a,b){let c=Object.getOwnPropertyDescriptor(a,b);return!c||"value"in c||m("CONVERSATION_PUBLICATION_DATA","accessors are unsupported"),c?.value}l.captures??=new WeakMap,l.immutableSnapshots??=new WeakSet,l.batches??=new Map,(0,g.rF)("publication",l.bytes);let p=a=>void 0===a||"function"==typeof a||"symbol"==typeof a;function q(a,b,c){let d=0,i=0,k=0,q=null!==b&&"object"==typeof b?l.captures.get(b):void 0,r=l.context.getStore(),s=!!q?.live&&q===r&&q.owner.live&&q.owner.key===a&&l.immutableSnapshots.has(b)&&!c,t=new Set,u=(a,b,f)=>{if(!f&&(++d>j.slots||b>j.depth)&&m("CONVERSATION_PUBLICATION_DATA","JSON descriptor work exceeds the bounded publication policy"),f||(k+=64),"string"==typeof a)f||(i+=2*a.length);else if(null!==a&&"object"==typeof a){(e.types.isProxy(a)||t.has(a))&&m("CONVERSATION_PUBLICATION_DATA","a proxy or cycle cannot be captured");let d=Array.isArray(a);!function a(b,c){if(null===b)return!c;if(e.types.isProxy(b))return!1;let d=Object.getOwnPropertyDescriptor(b,"constructor");if(!d||!("value"in d)||"function"!=typeof d.value||e.types.isProxy(d.value))return!1;let f=c?Array:Object;return Function.prototype.toString.call(d.value)===Function.prototype.toString.call(f)&&Object.getOwnPropertyDescriptor(d.value,"prototype")?.value===b&&(c?a(Object.getPrototypeOf(b),!1):null===Object.getPrototypeOf(b))}(Object.getPrototypeOf(a),d)&&m("CONVERSATION_PUBLICATION_DATA","only plain JSON containers can be captured"),n(a),t.add(a);let g=f?d?[]:Object.create(null):void 0;try{if(d){let c=o(a,"length");c>j.slots&&m("CONVERSATION_PUBLICATION_DATA","array length exceeds publication policy");for(let d=0;d<c;d++){let c=String(d);!Object.hasOwn(a,c)&&c in a&&m("CONVERSATION_PUBLICATION_DATA","inherited array values are unsupported");let e=o(a,c),h=u(e,b+1,f);f&&g.push(p(e)?null:h)}}else for(let d in a){if(!Object.hasOwn(a,d)||0===b&&c?.has(d))continue;f||(k+=48+2*d.length,i+=2*d.length);let e=o(a,d),h=u(e,b+1,f);f&&!p(e)&&(g[d]=h)}}finally{t.delete(a)}if(f)return g}else"bigint"==typeof a?m("CONVERSATION_PUBLICATION_DATA","BigInt is not JSON data"):"function"==typeof a&&n(a);return!f&&i+k>j.ownerBytes&&m("CONVERSATION_PUBLICATION_MEMORY","retained data exceeds the per-publication bound"),a};p(b)&&m("CONVERSATION_PUBLICATION_DATA","publication has no JSON value"),s||u(b,0,!1);let v=2*k+524288,w=(0,f.getHeapStatistics)(),x=(0,g.XF)("publication",l.bytes+v),y=process.memoryUsage().rss;(l.retained+i+k>j.retainedBytes||x>.8*w.heap_size_limit-w.used_heap_size-0x4000000||!Number.isFinite(y)||y+x>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","publication allocation capacity is occupied"),l.bytes+=v,l.retained+=i+k,(0,g.rF)("publication",l.bytes);try{return{value:s?b:u(b,0,!0),retained:i+k,bytes:v,borrowed:s}}catch(a){throw l.bytes-=v,l.retained-=i+k,(0,g.rF)("publication",l.bytes),a}}async function r(a){for(;l.writers+l.quarantined>=j.writers;)await new Promise(a=>l.waiters.push(a));l.writers++;try{return await a()}finally{l.writers--,l.waiters.shift()?.()}}function s(a,b,c,d,e){a.length>4096&&m("CONVERSATION_PUBLICATION_DATA","publication key is too long");let f=l.context.getStore(),h=f?.live&&f.owner.live&&f.owner.key===a,i=q(a,b,d);try{e?.(i.value)}catch(a){throw l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes),a}let j=h?f.owner:{key:a,live:!0,bytes:0,quarantined:!1,snapshotCommits:0},k={owner:j,live:!0,tail:Promise.resolve(),pending:new Set};i.borrowed||null===i.value||"object"!=typeof i.value||l.captures.set(i.value,k),l.owners++;let n=async()=>{let b;try{return await c(i.value)}catch(a){throw b=a}finally{k.live=!1;let c=(await Promise.allSettled([...k.pending])).find(a=>"rejected"===a.status);if(void 0===b&&void 0!==k.failure)throw k.failure;if(void 0===b&&c?.status==="rejected")throw c.reason;void 0!==b||h||(l.fences.delete(a),l.receipts.delete(a))}},o=(h?f.tail:l.chains.get(a)??Promise.resolve()).catch(()=>void 0).then(()=>h?l.context.run(k,n):r(()=>l.context.run(k,n))).finally(()=>{h?l.owners--:(j.live=!1,l.owners--,j.descriptorUncertain&&(j.descriptorUncertain=!1,l.quarantined=Math.max(0,l.quarantined-1),l.waiters.shift()?.()),l.bytes-=j.bytes,l.chains.get(a)===o&&l.chains.delete(a)),i.value=void 0,l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes)});return h?(f.tail=o,f.pending.add(o),o.then(()=>f.pending.delete(o),a=>{f.pending.delete(o),f.failure??=a})):l.chains.set(a,o),o}function t(a){let b=l.captures.get(a);if(!b?.live||b.owner!==l.context.getStore()?.owner)throw Error("Snapshot is not owned by this live publication");let c=a=>{if(null!==a&&"object"==typeof a){for(let b in a)Object.hasOwn(a,b)&&c(a[b]);Object.isFrozen(a)||Object.freeze(a)}};return c(a),l.immutableSnapshots.add(a),a}function u(){return l.context.getStore()?.owner.snapshotCommits??0}async function v(){let a=l.context.getStore();if(!a)throw Error("No conversation publication frame");a.live=!1;let b=(await Promise.allSettled([...a.pending])).find(a=>"rejected"===a.status);if(void 0!==a.failure)throw a.failure;if(b?.status==="rejected")throw b.reason}function w(){return!!l.context.getStore()?.owner.quarantined}function x(a){let b=l.context.getStore()?.owner;if(!b?.live||!Number.isSafeInteger(a)||a<0||a>0x2000000)throw Error("Invalid publication scratch reservation");let c=Math.max(0,a-b.bytes),d=(0,f.getHeapStatistics)(),e=(0,g.XF)("publication",l.bytes+c),i=process.memoryUsage().rss;(e>.8*d.heap_size_limit-d.used_heap_size-0x4000000||!Number.isFinite(i)||i+e>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","rewrite metadata allocation capacity is occupied"),b.bytes+=c,l.bytes+=c,(0,g.rF)("publication",l.bytes)}function y(){let a=l.context.getStore()?.owner;if(!a?.live)throw Error("No live conversation publication owner");a.snapshotCommits++}function z(a,b,c=!1,d){let e=l.context.getStore()?.owner;if(!e?.live)throw Error("No live conversation publication owner");let f=new i.MO("CONVERSATION_PUBLICATION_UNCERTAIN",a,b instanceof Error?{cause:Error("Publication operation failed")}:void 0);if(e.quarantined||(e.quarantined=!0),c&&!e.descriptorUncertain&&(e.descriptorUncertain=!0,l.quarantined++),d){let a=Object.entries(d);if(a.length>8||a.some(([a,b])=>a.length>64||b.length>4096))throw Error("Publication receipt exceeded its bound");l.receipts.set(e.key,Object.freeze({...d}))}return l.fences.set(e.key,f),f}async function A(a){await l.chains.get(a);let b=l.fences.get(a);if(b)throw b}let B=new Set(["EBUSY","EPERM","EACCES","EAGAIN","EMFILE","ENFILE","ETIMEDOUT","EIO","ENOSPC"]),C=new Set(["PersonaRuntimeLockTimeoutError","WorkspaceSnapshotTimeoutError"]),D=Object.freeze([100,300,900]);async function E(a){for(let b=0;;b++)try{return await a()}catch(c){let a=D[b];if(void 0===a||!(c instanceof Error&&(C.has(c.name)||((0,i.sE)(c)?"CONVERSATION_PUBLICATION_DATA"!==c.code:B.has(c.code??"")))))throw c;await new Promise(b=>setTimeout(b,a))}}function F(a,b,c,d){let e=l.context.getStore(),f=e?.live&&e.owner.live&&e.owner.key===a?e:void 0,h=l.batches.get(a);if(h&&!h.started&&h.settled&&h.parent===f&&h.owner===d&&h.settled===(f?f.tail:l.chains.get(a))){let c=q(a,b);return h.items.push(c.value),h.bytes+=c.bytes,h.retained+=c.retained,h.settled}let i={items:[],started:!1,parent:f,owner:d,bytes:0,retained:0},j=s(a,[b],async b=>{i.started=!0,l.batches.get(a)===i&&l.batches.delete(a),await c(b)},void 0,a=>{i.items=a});i.settled=j,l.batches.set(a,i);let k=()=>{l.batches.get(a)===i&&l.batches.delete(a),i.items=[],l.bytes-=i.bytes,l.retained-=i.retained,i.bytes=0,i.retained=0,(0,g.rF)("publication",l.bytes)};return j.then(k,k),j}function G(){return{owners:l.owners,writers:l.writers,allocationBytes:l.bytes,retainedBytes:l.retained,queuedWriters:l.waiters.length,openBatches:l.batches.size,chains:l.chains.size,fences:l.fences.size,receipts:l.receipts.size,quarantinedWriterSlots:l.quarantined,rejected:l.rejected}}function*H(a){yield'"';for(let b=0;b<a.length;){let c=Math.min(b+j.stringChars,a.length),d=a.charCodeAt(c-1),e=a.charCodeAt(c);c<a.length&&d>=55296&&d<=56319&&e>=56320&&e<=57343&&c--,yield JSON.stringify(a.slice(b,c)).slice(1,-1),b=c}yield'"'}function*I(a,b){let c=Buffer.allocUnsafe(j.bufferBytes),d=0;for(let e of a)for(let a of function*(){yield*function* a(b){if("string"==typeof b)return void(yield*H(b));if(null===b||"object"!=typeof b)return void(yield JSON.stringify(b));let c=Array.isArray(b);yield c?"[":"{";let d=0;for(let e in b)Object.hasOwn(b,e)&&(d++&&(yield","),c||(yield*H(e),yield":"),yield*a(b[e]));yield c?"]":"}"}(e),b&&(yield"\n")}()){let b=Buffer.byteLength(a);if(b>c.length)throw Error("Conversation JSON encoder chunk exceeded its bound");d+b>c.length&&(yield c.subarray(0,d),d=0),d+=c.write(a,d,"utf8")}d&&(yield c.subarray(0,d))}},463319:(a,b,c)=>{"use strict";c.d(b,{f:()=>l,p:()=>n});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731421);let j=String.raw`
|
|
1
|
+
exports.id=87864,exports.ids=[87864],exports.modules={12778:(a,b,c)=>{"use strict";c.d(b,{dw:()=>o,gF:()=>i,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=g.waiters??=[],i=4,j=new WeakMap;function k(a){let b=6*a+131072;if(!Number.isSafeInteger(b)||a<0)throw new e("CONVERSATION_LOG_READ_MEMORY",503);return b}function l(a){let b=(0,d.getHeapStatistics)();return g.bytes+a<=b.heap_size_limit-b.used_heap_size-0x4000000}function m(){for(let a of h.splice(0))a()}async function n(a){let b=Date.now()+3e4;for(;;){let c=g.active<i;if(c&&l(a))return;if(c&&0===g.active)throw new e("CONVERSATION_LOG_READ_MEMORY",503);let d=b-Date.now();if(d<=0)throw c?new e("CONVERSATION_LOG_READ_MEMORY",503):new e("CONVERSATION_LOG_READ_BUSY",429);await new Promise(a=>{let b=setTimeout(a,Math.min(d,1e3));h.push(()=>{clearTimeout(b),a()})})}}async function o(a,b,c){if(void 0!==c){let d=c&&j.get(c);if(!d?.open)throw Error("Conversation read reservation is invalid or has expired.");let f=k(a);if(!l(f))throw new e("CONVERSATION_LOG_READ_MEMORY",503);g.bytes+=f;let h=Promise.resolve().then(()=>b(c)).finally(()=>{g.bytes-=f,m()});return d.pending.add(h),h.then(()=>d.pending.delete(h),()=>d.pending.delete(h)),h}let d=k(a);await n(d);let f=Object.freeze({}),h={open:!0,pending:new Set};j.set(f,h),g.active++,g.bytes+=d;try{return await b(f)}finally{h.open=!1,await Promise.allSettled([...h.pending]),j.delete(f),g.active--,g.bytes-=d,m()}}},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,"600ff7d2206eae52f9d771674d5f8029e5c095bb5e",null),(0,d.A)(l,"40841aa02a531ebbf36e631e77030d97227e9d3930",null),(0,d.A)(m,"6024367037e23f118f42c473679aff2d02bbea4b67",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()}},68159:(a,b,c)=>{"use strict";c.d(b,{$j:()=>E,BD:()=>s,Bh:()=>X,DV:()=>v,Do:()=>t,Ik:()=>O,Jl:()=>D,Kq:()=>w,Ny:()=>C,OU:()=>L,Sy:()=>W,VN:()=>R,Zl:()=>u,f:()=>V,g:()=>M,jf:()=>H,pr:()=>G,r:()=>p,tm:()=>F,vb:()=>Q,y0:()=>B});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(463319),n=c(497137),o=c(332400);function p(a){let b=new Map;for(let[c,d]of Object.entries(Object.getOwnPropertyDescriptors(a.env??{}))){if(!d.enumerable)continue;if(!("value"in d))throw new w("HOST_POLICY_INVALID");let a=d.value,e=a&&"object"==typeof a?Object.getOwnPropertyDescriptor(a,"value"):void 0,f="string"==typeof a?a:e&&"value"in e?e.value:void 0;if("string"!=typeof f||Buffer.byteLength(f)>16384||f.includes("\0"))throw new w("HOST_POLICY_INVALID");b.set(c,f)}return b}let q=i.string().regex(/^[a-f0-9]{64}$/),r=i.string().min(1).max(2048).refine(a=>g().isAbsolute(a)&&!a.includes("\0")),s=["HOME","USERPROFILE","APPDATA","LOCALAPPDATA","XDG_CONFIG_HOME","XDG_CACHE_HOME","XDG_DATA_HOME","XDG_STATE_HOME","XDG_RUNTIME_DIR","TMPDIR","TMP","TEMP","NPM_CONFIG_CACHE","PIP_CACHE_DIR","UV_CACHE_DIR","FLUJO_PARENT_DATA_DIR","FLUJO_DATA_DIR","FLUJO_WORKSPACE",..."win32"===process.platform?["HOMEDRIVE","HOMEPATH"]:[]];function t(a,b){let c=u.parse(a.trustedHost),d=b??c.runtimeHome,e=p(a),f="win32"===process.platform?"USERPROFILE":"HOME",i=[...e].find(([a])=>"win32"===process.platform?a.toUpperCase()===f:a===f)?.[1],k="isolated"===d?g().join((0,j.getWorkspaceDataDir)(),"userdata","mcp-runtime",(0,h.createHash)("sha256").update(a.name).digest("hex").slice(0,24),"home"):i??"";return{command:a.command,home:k}}let u=i.object({schemaVersion:i.literal(1),kind:i.literal("trusted-host"),privileges:i.literal("owner-account"),runtime:i.enum(["node","native","npx"]),runtimeHome:i.enum(["host","isolated"]).optional(),entryPoint:r,sourceRoot:r,sourceDigest:q,executableDigest:q,packageRunner:o.kU.optional(),bundledInstallation:i.object({packageDirectory:i.enum(["flujo","filesystem","bash","browser"]),installationRoot:r,dependencyNamespaceRoot:r,assetDigest:q,dependencyGraphDigest:q,dependencyDirectories:i.array(r).max(256),dependencyLinks:i.array(i.object({link:r,target:r}).strict()).max(64),workload:i.object({purpose:i.literal("bundled-flujo-control-v1"),inventory:i.array(i.object({action:i.string().regex(/^[A-Za-z][A-Za-z0-9_]{0,127}$/),method:i.enum(["GET","POST"]),path:i.enum(["/api/mcp/flujo/tools","/api/mcp/flujo/resources","/api/mcp/flujo/resources/read","/api/mcp/flujo/skills","/api/mcp/flujo/authoring","/api/mcp/flujo/flows","/api/mcp/flujo/servers","/api/mcp/flujo/automation","/api/mcp/flujo/state"]),schemaDigest:q}).strict()).min(1).max(70).refine(a=>new Set(a.map(a=>a.action)).size===a.length)}).strict().optional()}).strict().optional(),environmentNames:i.array(i.string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/).refine(a=>!["NODE_OPTIONS","NODE_PATH","PYTHONPATH","PYTHONHOME","LD_PRELOAD","LD_LIBRARY_PATH","DYLD_INSERT_LIBRARIES","DYLD_LIBRARY_PATH"].includes(a.toUpperCase()))).max(64)}).strict().refine(a=>new Set(a.environmentNames.map(a=>"win32"===process.platform?a.toUpperCase():a)).size===a.environmentNames.length).refine(a=>!a.bundledInstallation?.workload||"flujo"===a.bundledInstallation.packageDirectory).refine(a=>"npx"===a.runtime==!!a.packageRunner&&!(a.packageRunner&&a.bundledInstallation)),v=i.object({schemaVersion:i.literal(1),ownerId:i.string().regex(/^[A-Za-z0-9_-]{1,64}$/),approvals:i.array(i.object({workspace:i.string().refine(j.isValidWorkspaceName),serverName:i.string().min(1).max(256).refine(a=>!/[\x00-\x1f\x7f]/.test(a)),policyDigest:q,expiresAt:i.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()).max(128)}).strict().refine(a=>new Set(a.approvals.map(a=>JSON.stringify([a.workspace,a.serverName]))).size===a.approvals.length);class w extends Error{constructor(a){super("HOST_CONSENT_REQUIRED"===a?"MCP host execution requires explicit owner consent for this workspace, server, package revision and capabilities. Configure an approved isolated profile or a separately protected trusted-host approval.":"HOST_SOURCE_CHANGED"===a?"MCP executable or package revision changed. Inspect the fixed package and renew owner consent before execution.":"MCP trusted-host policy is invalid. Use an absolute executable, working directory and fixed workspace package; dynamic package runners require an approved isolated profile."),this.code=a,this.name="TrustedHostMcpError"}}function x(a){let b=g().resolve(a);return"win32"===process.platform?b.toLowerCase():b}function y(a){let b=g().resolve(a);for(;;){if(e().lstatSync(b).isSymbolicLink())throw new w("HOST_SOURCE_CHANGED");let a=g().dirname(b);if(a===b)break;b=a}if(x(e().realpathSync(a))!==x(a))throw new w("HOST_SOURCE_CHANGED")}function z(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}function A(a,b,c){let f=e().openSync(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=e().fstatSync(f,{bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||(y(a),!z(d,e().lstatSync(a,{bigint:!0}))))throw new w("HOST_SOURCE_CHANGED");let g=Buffer.alloc(65536),h=0;for(;;){let a=e().readSync(f,g,0,g.length,null);if(!a)break;if((h+=a)>b||BigInt(h)>d.size)throw new w("HOST_SOURCE_CHANGED");c(g.subarray(0,a))}if(y(a),BigInt(h)!==d.size||!z(d,e().fstatSync(f,{bigint:!0}))||!z(d,e().lstatSync(a,{bigint:!0})))throw new w("HOST_SOURCE_CHANGED");return d}finally{e().closeSync(f)}}function B(a){try{let b=(0,h.createHash)("sha256");return A(a,0x20000000,a=>b.update(a)),b.digest("hex")}catch{throw new w("HOST_SOURCE_CHANGED")}}function C(a,b=[]){try{let c=g().resolve(a),d=g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),f=g().relative(d,c);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=a=>{if(++k>16384)throw Error();y(a);let d=e().lstatSync(a,{bigint:!0});if(!d.isDirectory())throw Error();let f=e().readdirSync(a).sort((a,b)=>a<b?-1:+(a>b));for(let j of(i.update(JSON.stringify(["directory",g().relative(c,a).split(g().sep).join("/"),String(d.mode)])),f)){let d=g().join(a,j),f=e().lstatSync(d,{bigint:!0});if(f.isSymbolicLink()){let a=b.find(a=>x(a.link)===x(d));if(!a||x(e().realpathSync(d))!==x(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(c,d).split(g().sep).join("/"),x(a.target)]));continue}if(f.isDirectory()&&!f.isSymbolicLink()){m(d);continue}if(++k>16384||!f.isFile()||f.isSymbolicLink()||f.nlink!==BigInt(1))throw Error();let n=(0,h.createHash)("sha256"),o=A(d,0x10000000-l,a=>n.update(a));l+=Number(o.size),i.update(JSON.stringify(["file",g().relative(c,d).split(g().sep).join("/"),String(o.mode),n.digest("hex")]))}if(y(a),!z(d,e().lstatSync(a,{bigint:!0})))throw Error()};return m(c),i.digest("hex")}catch{throw new w("HOST_SOURCE_CHANGED")}}function D(a){let b="win32"===process.platform&&a?(0,m.f)(a):void 0,c=a?e().lstatSync(a,{bigint:!0}):void 0,d=J(a);if(void 0!==b&&(0,m.f)(a)!==b||c&&a&&(y(a),!z(c,e().lstatSync(a,{bigint:!0}))))throw new w("HOST_CONSENT_REQUIRED");return d}async function E(a,b){return(await I(a,b)).value}async function F(a,b,c){if(!a||!b||c?.aborted)throw new w("HOST_CONSENT_REQUIRED");let d=[a,b],f=d.map(a=>e().lstatSync(a,{bigint:!0})),g="win32"===process.platform?await (0,m.p)(d,c):void 0,h=d.map(a=>J(a));if(void 0!==g&&await (0,m.p)(d,c)!==g)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of d.entries())if(y(b),!z(f[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(c?.aborted)throw new w("HOST_CONSENT_REQUIRED");return[h[0],h[1]]}async function G(a,b,c){let d,f="1"===process.env.FLUJO_MCP_WORKLOAD_TRACE?Date.now():void 0,h="input";try{if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let c=[...a];h="identity-before";let f=c.map((a,b)=>(d=b,e().lstatSync(a,{bigint:!0})));h="native-before",d=void 0;let i="win32"===process.platform?await (0,m.p)(c,b):void 0;h="contents";let j=c.map((a,b)=>(d=b,J(a)));if(h="native-after",d=void 0,void 0!==i&&await (0,m.p)(c,b)!==i)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of(h="identity-after",c.entries()))if(d=a,y(b),!z(f[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(h="signal-after",d=void 0,b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return j}catch(a){throw!function(a,b,c,d,e,f){try{if(void 0===f)return;let g=void 0!==b&&c?Object.getOwnPropertyDescriptor(c,String(b)):void 0,h=g&&"value"in g?g.value:void 0,i=void 0===b?"set":"record"===h||"marker"===h||"owner"===h||"ledger"===h?h:"member",j=d&&"object"==typeof d?Object.getOwnPropertyDescriptors(d):{},k=j.code&&"value"in j.code?j.code.value:void 0,l=j.errno&&"value"in j.errno?j.errno.value:void 0,m="string"==typeof k&&["HOST_CONSENT_REQUIRED","HOST_SOURCE_CHANGED","HOST_POLICY_INVALID","ENOENT","EACCES","EPERM","EIO","EBUSY","EMFILE","ENFILE","ENOTDIR","ELOOP","EINVAL"].includes(k)?k:"unknown";console.info("[private-approval-set-reader]","refused",{phase:a,role:i,errorKind:m,..."number"==typeof l&&Number.isInteger(l)&&65535>=Math.abs(l)?{errno:l}:{},cancelled:e?.aborted===!0,elapsedMs:Math.max(0,Date.now()-f)})}catch{}}(h,d,c,a,b,f),a}}function H(a,b){if(!a.length||a.length>4||new Set(a).size!==a.length||a.some(a=>"string"!=typeof a||!g().isAbsolute(a)||a.length>2048||a.includes("\0"))||b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let c=[...a],d=c.map(a=>e().lstatSync(a,{bigint:!0})),f="win32"===process.platform?(0,m.f)(c):void 0,h=c.map(a=>J(a));if(void 0!==f&&(0,m.f)(c)!==f)throw new w("HOST_CONSENT_REQUIRED");for(let[a,b]of c.entries())if(y(b),!z(d[a],e().lstatSync(b,{bigint:!0})))throw new w("HOST_CONSENT_REQUIRED");if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return h}async function I(a,b){let c="signal-before";try{if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");c="native-before";let d="win32"===process.platform&&a?await (0,m.p)(a,b):void 0;c="identity-before";let f=a?e().lstatSync(a,{bigint:!0}):void 0;c="contents";let g=J(a);if(c="native-after",void 0!==d&&await (0,m.p)(a,b)!==d||(c="identity-after",f&&a&&(y(a),!z(f,e().lstatSync(a,{bigint:!0}))))||(c="signal-after",b?.aborted))throw new w("HOST_CONSENT_REQUIRED");return{value:g,windowsAuthority:d}}catch(a){try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[private-approval-reader]","refused",c)}catch{}throw a}}function J(a){if(!a||!g().isAbsolute(a))throw new w("HOST_CONSENT_REQUIRED");let b=g().relative(g().resolve((0,k.ok)()),g().resolve(a));if(!b||".."!==b&&!b.startsWith(`..${g().sep}`)&&!g().isAbsolute(b))throw new w("HOST_CONSENT_REQUIRED");if("win32"!==process.platform&&"function"==typeof process.getuid){let b=BigInt(process.getuid()),c=g().dirname(g().resolve(a));for(;;){let a=e().lstatSync(c,{bigint:!0});if(!a.isDirectory()||a.isSymbolicLink()||a.uid!==b&&a.uid!==BigInt(0)||(a.mode&BigInt(18))!==BigInt(0)&&(a.mode&BigInt(512))===BigInt(0))throw new w("HOST_CONSENT_REQUIRED");let d=g().dirname(c);if(d===c)break;c=d}}let c=[];try{let b=A(a,65536,a=>c.push(Buffer.from(a)));if("win32"!==process.platform&&(b.mode&BigInt(63))!==BigInt(0)||"win32"!==process.platform&&"function"==typeof process.getuid&&b.uid!==BigInt(process.getuid())&&b.uid!==BigInt(0))throw new w("HOST_CONSENT_REQUIRED");return JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(Buffer.concat(c)))}finally{for(let a of c)a.fill(0)}}function K(a,b=!1){let c="CONSENT_POLICY_SCHEMA";try{let b=u.parse(a.trustedHost);c="CONSENT_LAUNCH";let d=r.parse(a.command),e=r.parse(a.cwd),f=i.array(i.string().max(2048).refine(a=>!a.includes("\0"))).max(64).parse(a.args??[]);if(void 0!==a.isolation||/\.(?:cmd|bat|ps1)$/i.test(d)||"npx"!==b.runtime&&x(e)!==x(b.sourceRoot))throw Error();let h=g().relative(b.sourceRoot,b.entryPoint);if(!h||".."===h||h.startsWith(`..${g().sep}`)||g().isAbsolute(h))throw Error();let l=g().basename(d).toLowerCase().replace(/\.exe$/,"");if("npx"===b.runtime)(0,o.nT)({sourceRoot:b.sourceRoot,entryPoint:b.entryPoint,command:d,cwd:e,args:f,runner:b.packageRunner,environment:p(a)});else if("node"===b.runtime){if("node"!==l||f[0]!==b.entryPoint||!/\.(?:mjs|cjs|js)$/.test(b.entryPoint))throw Error()}else if(x(d)!==x(b.entryPoint)||["node","npm","npx","pnpm","yarn","corepack","uv","uvx","pip","pip3","python","python3","bash","sh","cmd","powershell","pwsh","ruby","perl","deno","bun","go","cargo"].includes(l))throw Error();if(c="CONSENT_BUNDLE",b.bundledInstallation){if("node"!==b.runtime||x(b.entryPoint)!==x(g().join(b.sourceRoot,"dist","index.js"))||x(b.sourceRoot)!==x(g().join((0,j.getWorkspaceDataDir)(),"mcp-servers",b.bundledInstallation.packageDirectory)))throw Error();let a=g().relative(g().resolve((0,k.ok)()),b.bundledInstallation.installationRoot);if(!a||".."!==a&&!a.startsWith(`..${g().sep}`)&&!g().isAbsolute(a))throw Error();for(let a of b.bundledInstallation.dependencyLinks){let c=g().relative(g().join(b.sourceRoot,"node_modules"),a.link);if(".."===c||c.startsWith(`..${g().sep}`)||g().isAbsolute(c))throw Error()}}c="CONSENT_ENVIRONMENT";let m=[...p(a)].sort(([a],[b])=>a<b?-1:+(a>b)).map(([a,c])=>{if(!b.environmentNames.includes(a))throw Error();return[a,c]});c="CONSENT_CAPABILITIES";let n=i.string().max(2048).refine(a=>!a.includes("${global:")&&!/[\x00-\x1f\x7f]/.test(a)),q=i.array(n).max(64).parse(a.roots??[]),s=n.parse(a.rootPath??"");c="CONSENT_SERIALIZE";let t=JSON.stringify({domain:"flujo:mcp:trusted-host-consent:v2",command:d,args:f,cwd:e,requestedEnvironment:m,policy:{...b,environmentNames:[...b.environmentNames].sort()},capabilities:{roots:q,sampling:a.sampling??null,elicitation:a.elicitation??null,apps:!0===a.enableMcpApps,skills:!0===a.enableMcpSkills,rootPath:s,runtimeHomeMode:a.runtimeHomeMode??null}}),v=JSON.stringify(["flujo:mcp:trusted-host-consent:v2",(0,j.getCurrentWorkspace)(),a.name,b.sourceRoot]);return{consent:t,salt:v}}catch(a){if(b)throw new n.IP(c,a);throw new w("HOST_POLICY_INVALID")}}function L(a){let{consent:b,salt:c}=K(a);return(0,h.scryptSync)(b,c,32,{N:16384,r:8,p:1,maxmem:0x4000000}).toString("hex")}function M(a,b){let c=K(a),d=K(b);return c.consent===d.consent&&c.salt===d.salt}async function N(a,b){return P(a,b,!1)}async function O(a){return P(a,void 0,!0)}async function P(a,b,c){if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let{consent:d,salt:e}=K(a,c),f=await new Promise((a,b)=>{let f=a=>b(c?new n.IP("CONSENT_SCRYPT",a):a);try{(0,h.scrypt)(d,e,32,{N:16384,r:8,p:1,maxmem:0x4000000},(b,c)=>b?f(b):a(c))}catch(a){f(a)}});try{if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");return f.toString("hex")}finally{f.fill(0)}}function Q(a){if(void 0===a.trustedHost)throw new w("HOST_CONSENT_REQUIRED");try{let b=u.parse(a.trustedHost),c=L(a),d=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,f=process.env.FLUJO_OWNER_AUTH_FILE;if(!d||!f)throw Error();let g=[d,f],h=g.map(a=>e().lstatSync(a,{bigint:!0})),i="win32"===process.platform?(0,m.f)(g):void 0,k=g.map(a=>J(a));if(void 0!==i&&(0,m.f)(g)!==i)throw Error();for(let[a,b]of g.entries())if(y(b),!z(h[a],e().lstatSync(b,{bigint:!0})))throw Error();if(d!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||f!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let n=v.parse(k[0]),o=l.rF.parse(k[1]),p=n.approvals.find(b=>b.workspace===(0,j.getCurrentWorkspace)()&&b.serverName===a.name);if(o.ownerId!==n.ownerId||!p||p.expiresAt<=Date.now()||p.policyDigest!==c)throw Error();return{policy:b,digest:c,ownerId:o.ownerId,workspace:(0,j.getCurrentWorkspace)(),expiresAt:p.expiresAt}}catch(a){if(a instanceof w)throw a;throw new w("HOST_CONSENT_REQUIRED")}}async function R(a,b){try{let c=structuredClone(a),d=(0,j.getCurrentWorkspace)(),e=u.parse(c.trustedHost),f=await N(c,b),g=process.env.FLUJO_MCP_TRUSTED_HOST_FILE,h=process.env.FLUJO_OWNER_AUTH_FILE;if(!g||!h)throw Error();let i=await F(g,h,b);if(g!==process.env.FLUJO_MCP_TRUSTED_HOST_FILE||h!==process.env.FLUJO_OWNER_AUTH_FILE)throw Error();let k=v.parse(i[0]),m=l.rF.parse(i[1]),n=k.approvals.find(a=>a.workspace===d&&a.serverName===c.name);if(b?.aborted||d!==(0,j.getCurrentWorkspace)()||m.ownerId!==k.ownerId||!n||n.expiresAt<=Date.now()||n.policyDigest!==f)throw Error();return{policy:e,digest:f,ownerId:m.ownerId,workspace:d,expiresAt:n.expiresAt}}catch(a){if(a instanceof w)throw a;throw new w("HOST_CONSENT_REQUIRED")}}async function S(a){let b=[],c=g().resolve(a);for(;;){b.push(c);let a=g().dirname(c);if(a===c)break;c=a}for(let a=0;a<b.length;a+=8)if((await Promise.allSettled(b.slice(a,a+8).map(a=>e().promises.lstat(a)))).some(a=>"rejected"===a.status||a.value.isSymbolicLink()))throw Error();if(x(await e().promises.realpath(a))!==x(a))throw Error()}async function T(a,b,c,f){let g;if(c?.aborted)throw Error();let i=await e().promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0)|(d.constants.O_NONBLOCK??0));try{let d=await i.stat({bigint:!0});if(!d.isFile()||d.nlink!==BigInt(1)||d.size>BigInt(b)||f&&!z(f,d)||(await S(a),!z(d,await e().promises.lstat(a,{bigint:!0}))))throw Error();let j=(0,h.createHash)("sha256");g=Buffer.alloc(d.size>BigInt(1048576)?1048576:65536);let k=0;for(;;){if(c?.aborted)throw Error();let{bytesRead:a}=await i.read(g,0,g.length,null);if(!a)break;if((k+=a)>b||BigInt(k)>d.size)throw Error();j.update(g.subarray(0,a))}if(await S(a),BigInt(k)!==d.size||!z(d,await i.stat({bigint:!0}))||!z(d,await e().promises.lstat(a,{bigint:!0})))throw Error();return{digest:j.digest("hex"),size:k}}finally{g?.fill(0),await i.close()}}async function U(a,b,c=[]){let d=g().resolve(a),f=g().relative(g().resolve((0,j.getWorkspaceDataDir)(),"mcp-servers"),d);if(!f||".."===f||f.startsWith(`..${g().sep}`)||g().isAbsolute(f))throw Error();let i=(0,h.createHash)("sha256").update("flujo:mcp:trusted-host-source:v1\0"),k=0,l=0,m=async a=>{if(b?.aborted||++k>16384)throw Error();await S(a);let f=await e().promises.lstat(a,{bigint:!0});if(!f.isDirectory())throw Error();i.update(JSON.stringify(["directory",g().relative(d,a).split(g().sep).join("/"),String(f.mode)]));let h=(await e().promises.readdir(a)).sort((a,b)=>a<b?-1:+(a>b)),j=[],n=async()=>{let a=j.splice(0),c=await Promise.allSettled(a.map(({filename:a,stat:c})=>T(a,Number(c.size),b,c)));if(b?.aborted||c.some(a=>"rejected"===a.status))throw Error();for(let[b,e]of c.entries()){if("fulfilled"!==e.status)throw Error();let{filename:c,stat:f}=a[b];if(e.value.size!==Number(f.size))throw Error();i.update(JSON.stringify(["file",g().relative(d,c).split(g().sep).join("/"),String(f.mode),e.value.digest]))}};for(let f of h){if(b?.aborted)throw Error();let h=g().join(a,f),o=await e().promises.lstat(h,{bigint:!0});if(o.isSymbolicLink()){await n();let a=c.find(a=>x(a.link)===x(h));if(!a||x(await e().promises.realpath(h))!==x(a.target))throw Error();i.update(JSON.stringify(["approved-dependency-link",g().relative(d,h).split(g().sep).join("/"),x(a.target)]));continue}if(o.isDirectory()&&!o.isSymbolicLink()){await n(),await m(h);continue}if(++k>16384||!o.isFile()||o.isSymbolicLink()||o.nlink!==BigInt(1)||o.size<BigInt(0)||o.size>BigInt(0x10000000-l))throw Error();l+=Number(o.size),j.push({filename:h,stat:o}),8===j.length&&await n()}if(await n(),await S(a),!z(f,await e().promises.lstat(a,{bigint:!0})))throw Error()};return await m(d),i.digest("hex")}async function V(a,b){try{return await U(a,b)}catch{throw new w("HOST_SOURCE_CHANGED")}}async function W(a,b){try{return(await T(a,0x20000000,b)).digest}catch{throw new w("HOST_SOURCE_CHANGED")}}async function X(a,b){let d=structuredClone(a),e=await R(d,b),f="inspection";try{let a=async()=>{let a=e.policy.bundledInstallation;if(!a)return;let{inspectShippedWorkspaceProvenance:b}=await c.e(8464).then(c.bind(c,8464));return b((0,j.getWorkspaceDataDir)(),a.packageDirectory,a.installationRoot)},g=await Promise.allSettled([T(d.command,0x20000000,b),U(e.policy.sourceRoot,b,e.policy.bundledInstallation?.dependencyLinks),a()]);if("rejected"===g[0].status)throw f="executable-read",g[0].reason;if("rejected"===g[1].status)throw f="source-read",g[1].reason;if("rejected"===g[2].status)throw f="provenance-read",g[2].reason;let h=(a,b)=>{if(f=b,!a)throw Error()},i=g[0].value,k=g[1].value;if(e.policy.bundledInstallation){let a=e.policy.bundledInstallation,c=g[2].value;if(f="provenance-result",!c)throw Error();h(!b?.aborted,"signal"),h(c.assetDigest===a.assetDigest,"asset-digest"),h(x(c.dependencyNamespaceRoot)===x(a.dependencyNamespaceRoot),"namespace"),h(c.dependencyGraph.digest===a.dependencyGraphDigest,"graph-digest"),h(JSON.stringify(c.dependencyLinks)===JSON.stringify(a.dependencyLinks),"links"),h(JSON.stringify(c.dependencies.map(a=>a.directory))===JSON.stringify(a.dependencyDirectories),"directories")}if(h(i.digest===e.policy.executableDigest,"executable-digest"),h(k===e.policy.sourceDigest,"source-digest"),e.policy.packageRunner){let a=e.policy.packageRunner;(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,{...t(d),inspectClosure:!1});let c=await T(a.shell,0x20000000,b);h(c.digest===a.shellDigest,"executable-digest"),(0,o.P1)(e.policy.sourceRoot,e.policy.entryPoint,d.cwd,a,t(d))}}catch{try{"1"===process.env.FLUJO_MCP_WORKLOAD_TRACE&&console.info("[trusted-host-source]","refused",b?.aborted?"signal-aborted":"revision-or-read",f)}catch{}throw new w(b?.aborted?"HOST_CONSENT_REQUIRED":"HOST_SOURCE_CHANGED")}if(b?.aborted)throw new w("HOST_CONSENT_REQUIRED");let g=await R(d,b);if(g.ownerId!==e.ownerId||g.digest!==e.digest||g.workspace!==e.workspace)throw new w("HOST_CONSENT_REQUIRED");return g}},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(29620),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(15209)]).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(29620),c.e(45481),c.e(45546),c.e(74107),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(92967),c.e(7937),c.e(61992),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))}},199061:(a,b,c)=>{"use strict";c.d(b,{At:()=>g,Hd:()=>f,MO:()=>d,sE:()=>e});class d extends Error{constructor(a,b,c){super(`Conversation publication refused: ${b}. Existing durable history is retained.`,c),this.code=a,this.name="ConversationPublicationError",this.status="CONVERSATION_PUBLICATION_BUSY"===a?429:503,this.details={code:a,status:this.status,type:"conversation_publication_error"}}}function e(a){return a instanceof Error&&"ConversationPublicationError"===a.name}function f(a){return e(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name}function g(a){return"string"==typeof a&&(a.startsWith("CONVERSATION_PUBLICATION_")||a.startsWith("CONVERSATION_SEQUENCE_"))}},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)}}},402101:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40841aa02a531ebbf36e631e77030d97227e9d3930":()=>d.V,"600ff7d2206eae52f9d771674d5f8029e5c095bb5e":()=>d.resolveGlobalVars,"6024367037e23f118f42c473679aff2d02bbea4b67":()=>d.G});var d=c(18705)},437175:(a,b,c)=>{"use strict";c.d(b,{B_:()=>z,Ev:()=>x,JN:()=>s,Lf:()=>t,MO:()=>i.MO,Ob:()=>G,Sd:()=>u,Sg:()=>E,by:()=>w,gm:()=>I,l7:()=>v,oK:()=>y,pw:()=>F,sE:()=>i.sE,sR:()=>A});var d=c(16698),e=c(257975),f=c(178877),g=c(750231),h=c(497776),i=c(199061);let j=Object.freeze({writers:4,retainedBytes:0x10000000,ownerBytes:0x8000000,slots:262144,depth:128,bufferBytes:65536,stringChars:8192}),k=globalThis,l=k.__flujoConversationPublicationV1??={bytes:0,retained:0,owners:0,writers:0,quarantined:0,rejected:0,chains:new Map,fences:new Map,receipts:new Map,waiters:[],context:new d.AsyncLocalStorage,batches:new Map,captures:new WeakMap,immutableSnapshots:new WeakSet};function m(a,b){throw l.rejected++,new i.MO(a,b)}function n(a){let b=0;for(let c=a;c;c=Object.getPrototypeOf(c)){(++b>128||e.types.isProxy(c))&&m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported");let a=Object.getOwnPropertyDescriptor(c,"toJSON");!a||"value"in a&&"function"!=typeof a.value||m("CONVERSATION_PUBLICATION_DATA","serialization hooks and proxies are unsupported")}}function o(a,b){let c=Object.getOwnPropertyDescriptor(a,b);return!c||"value"in c||m("CONVERSATION_PUBLICATION_DATA","accessors are unsupported"),c?.value}l.captures??=new WeakMap,l.immutableSnapshots??=new WeakSet,l.batches??=new Map,(0,g.rF)("publication",l.bytes);let p=a=>void 0===a||"function"==typeof a||"symbol"==typeof a;function q(a,b,c){let d=0,i=0,k=0,q=null!==b&&"object"==typeof b?l.captures.get(b):void 0,r=l.context.getStore(),s=!!q?.live&&q===r&&q.owner.live&&q.owner.key===a&&l.immutableSnapshots.has(b)&&!c,t=new Set,u=(a,b,f)=>{if(!f&&(++d>j.slots||b>j.depth)&&m("CONVERSATION_PUBLICATION_DATA","JSON descriptor work exceeds the bounded publication policy"),f||(k+=64),"string"==typeof a)f||(i+=2*a.length);else if(null!==a&&"object"==typeof a){(e.types.isProxy(a)||t.has(a))&&m("CONVERSATION_PUBLICATION_DATA","a proxy or cycle cannot be captured");let d=Array.isArray(a);!function a(b,c){if(null===b)return!c;if(e.types.isProxy(b))return!1;let d=Object.getOwnPropertyDescriptor(b,"constructor");if(!d||!("value"in d)||"function"!=typeof d.value||e.types.isProxy(d.value))return!1;let f=c?Array:Object;return Function.prototype.toString.call(d.value)===Function.prototype.toString.call(f)&&Object.getOwnPropertyDescriptor(d.value,"prototype")?.value===b&&(c?a(Object.getPrototypeOf(b),!1):null===Object.getPrototypeOf(b))}(Object.getPrototypeOf(a),d)&&m("CONVERSATION_PUBLICATION_DATA","only plain JSON containers can be captured"),n(a),t.add(a);let g=f?d?[]:Object.create(null):void 0;try{if(d){let c=o(a,"length");c>j.slots&&m("CONVERSATION_PUBLICATION_DATA","array length exceeds publication policy");for(let d=0;d<c;d++){let c=String(d);!Object.hasOwn(a,c)&&c in a&&m("CONVERSATION_PUBLICATION_DATA","inherited array values are unsupported");let e=o(a,c),h=u(e,b+1,f);f&&g.push(p(e)?null:h)}}else for(let d in a){if(!Object.hasOwn(a,d)||0===b&&c?.has(d))continue;f||(k+=48+2*d.length,i+=2*d.length);let e=o(a,d),h=u(e,b+1,f);f&&!p(e)&&(g[d]=h)}}finally{t.delete(a)}if(f)return g}else"bigint"==typeof a?m("CONVERSATION_PUBLICATION_DATA","BigInt is not JSON data"):"function"==typeof a&&n(a);return!f&&i+k>j.ownerBytes&&m("CONVERSATION_PUBLICATION_MEMORY","retained data exceeds the per-publication bound"),a};p(b)&&m("CONVERSATION_PUBLICATION_DATA","publication has no JSON value"),s||u(b,0,!1);let v=2*k+524288,w=(0,f.getHeapStatistics)(),x=(0,g.XF)("publication",l.bytes+v),y=process.memoryUsage().rss;(l.retained+i+k>j.retainedBytes||x>.8*w.heap_size_limit-w.used_heap_size-0x4000000||!Number.isFinite(y)||y+x>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","publication allocation capacity is occupied"),l.bytes+=v,l.retained+=i+k,(0,g.rF)("publication",l.bytes);try{return{value:s?b:u(b,0,!0),retained:i+k,bytes:v,borrowed:s}}catch(a){throw l.bytes-=v,l.retained-=i+k,(0,g.rF)("publication",l.bytes),a}}async function r(a){for(;l.writers+l.quarantined>=j.writers;)await new Promise(a=>l.waiters.push(a));l.writers++;try{return await a()}finally{l.writers--,l.waiters.shift()?.()}}function s(a,b,c,d,e){a.length>4096&&m("CONVERSATION_PUBLICATION_DATA","publication key is too long");let f=l.context.getStore(),h=f?.live&&f.owner.live&&f.owner.key===a,i=q(a,b,d);try{e?.(i.value)}catch(a){throw l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes),a}let j=h?f.owner:{key:a,live:!0,bytes:0,quarantined:!1,snapshotCommits:0},k={owner:j,live:!0,tail:Promise.resolve(),pending:new Set};i.borrowed||null===i.value||"object"!=typeof i.value||l.captures.set(i.value,k),l.owners++;let n=async()=>{let b;try{return await c(i.value)}catch(a){throw b=a}finally{k.live=!1;let c=(await Promise.allSettled([...k.pending])).find(a=>"rejected"===a.status);if(void 0===b&&void 0!==k.failure)throw k.failure;if(void 0===b&&c?.status==="rejected")throw c.reason;void 0!==b||h||(l.fences.delete(a),l.receipts.delete(a))}},o=(h?f.tail:l.chains.get(a)??Promise.resolve()).catch(()=>void 0).then(()=>h?l.context.run(k,n):r(()=>l.context.run(k,n))).finally(()=>{h?l.owners--:(j.live=!1,l.owners--,j.descriptorUncertain&&(j.descriptorUncertain=!1,l.quarantined=Math.max(0,l.quarantined-1),l.waiters.shift()?.()),l.bytes-=j.bytes,l.chains.get(a)===o&&l.chains.delete(a)),i.value=void 0,l.bytes-=i.bytes,l.retained-=i.retained,(0,g.rF)("publication",l.bytes)});return h?(f.tail=o,f.pending.add(o),o.then(()=>f.pending.delete(o),a=>{f.pending.delete(o),f.failure??=a})):l.chains.set(a,o),o}function t(a){let b=l.captures.get(a);if(!b?.live||b.owner!==l.context.getStore()?.owner)throw Error("Snapshot is not owned by this live publication");let c=a=>{if(null!==a&&"object"==typeof a){for(let b in a)Object.hasOwn(a,b)&&c(a[b]);Object.isFrozen(a)||Object.freeze(a)}};return c(a),l.immutableSnapshots.add(a),a}function u(){return l.context.getStore()?.owner.snapshotCommits??0}async function v(){let a=l.context.getStore();if(!a)throw Error("No conversation publication frame");a.live=!1;let b=(await Promise.allSettled([...a.pending])).find(a=>"rejected"===a.status);if(void 0!==a.failure)throw a.failure;if(b?.status==="rejected")throw b.reason}function w(){return!!l.context.getStore()?.owner.quarantined}function x(a){let b=l.context.getStore()?.owner;if(!b?.live||!Number.isSafeInteger(a)||a<0||a>0x2000000)throw Error("Invalid publication scratch reservation");let c=Math.max(0,a-b.bytes),d=(0,f.getHeapStatistics)(),e=(0,g.XF)("publication",l.bytes+c),i=process.memoryUsage().rss;(e>.8*d.heap_size_limit-d.used_heap_size-0x4000000||!Number.isFinite(i)||i+e>(0,h.RN)().maxRssBytes)&&m("CONVERSATION_PUBLICATION_MEMORY","rewrite metadata allocation capacity is occupied"),b.bytes+=c,l.bytes+=c,(0,g.rF)("publication",l.bytes)}function y(){let a=l.context.getStore()?.owner;if(!a?.live)throw Error("No live conversation publication owner");a.snapshotCommits++}function z(a,b,c=!1,d){let e=l.context.getStore()?.owner;if(!e?.live)throw Error("No live conversation publication owner");let f=new i.MO("CONVERSATION_PUBLICATION_UNCERTAIN",a,b instanceof Error?{cause:Error("Publication operation failed")}:void 0);if(e.quarantined||(e.quarantined=!0),c&&!e.descriptorUncertain&&(e.descriptorUncertain=!0,l.quarantined++),d){let a=Object.entries(d);if(a.length>8||a.some(([a,b])=>a.length>64||b.length>4096))throw Error("Publication receipt exceeded its bound");l.receipts.set(e.key,Object.freeze({...d}))}return l.fences.set(e.key,f),f}async function A(a){await l.chains.get(a);let b=l.fences.get(a);if(b)throw b}let B=new Set(["EBUSY","EPERM","EACCES","EAGAIN","EMFILE","ENFILE","ETIMEDOUT","EIO","ENOSPC"]),C=new Set(["PersonaRuntimeLockTimeoutError","WorkspaceSnapshotTimeoutError"]),D=Object.freeze([100,300,900]);async function E(a){for(let b=0;;b++)try{return await a()}catch(c){let a=D[b];if(void 0===a||!(c instanceof Error&&(C.has(c.name)||((0,i.sE)(c)?"CONVERSATION_PUBLICATION_DATA"!==c.code:B.has(c.code??"")))))throw c;await new Promise(b=>setTimeout(b,a))}}function F(a,b,c,d){let e=l.context.getStore(),f=e?.live&&e.owner.live&&e.owner.key===a?e:void 0,h=l.batches.get(a);if(h&&!h.started&&h.settled&&h.parent===f&&h.owner===d&&h.settled===(f?f.tail:l.chains.get(a))){let c=q(a,b);return h.items.push(c.value),h.bytes+=c.bytes,h.retained+=c.retained,h.settled}let i={items:[],started:!1,parent:f,owner:d,bytes:0,retained:0},j=s(a,[b],async b=>{i.started=!0,l.batches.get(a)===i&&l.batches.delete(a),await c(b)},void 0,a=>{i.items=a});i.settled=j,l.batches.set(a,i);let k=()=>{l.batches.get(a)===i&&l.batches.delete(a),i.items=[],l.bytes-=i.bytes,l.retained-=i.retained,i.bytes=0,i.retained=0,(0,g.rF)("publication",l.bytes)};return j.then(k,k),j}function G(){return{owners:l.owners,writers:l.writers,allocationBytes:l.bytes,retainedBytes:l.retained,queuedWriters:l.waiters.length,openBatches:l.batches.size,chains:l.chains.size,fences:l.fences.size,receipts:l.receipts.size,quarantinedWriterSlots:l.quarantined,rejected:l.rejected}}function*H(a){yield'"';for(let b=0;b<a.length;){let c=Math.min(b+j.stringChars,a.length),d=a.charCodeAt(c-1),e=a.charCodeAt(c);c<a.length&&d>=55296&&d<=56319&&e>=56320&&e<=57343&&c--,yield JSON.stringify(a.slice(b,c)).slice(1,-1),b=c}yield'"'}function*I(a,b){let c=Buffer.allocUnsafe(j.bufferBytes),d=0;for(let e of a)for(let a of function*(){yield*function* a(b){if("string"==typeof b)return void(yield*H(b));if(null===b||"object"!=typeof b)return void(yield JSON.stringify(b));let c=Array.isArray(b);yield c?"[":"{";let d=0;for(let e in b)Object.hasOwn(b,e)&&(d++&&(yield","),c||(yield*H(e),yield":"),yield*a(b[e]));yield c?"]":"}"}(e),b&&(yield"\n")}()){let b=Buffer.byteLength(a);if(b>c.length)throw Error("Conversation JSON encoder chunk exceeded its bound");d+b>c.length&&(yield c.subarray(0,d),d=0),d+=c.write(a,d,"utf8")}d&&(yield c.subarray(0,d))}},463319:(a,b,c)=>{"use strict";c.d(b,{f:()=>l,p:()=>n});var d=c(973024),e=c.n(d),f=c(176760),g=c.n(f),h=c(977598),i=c(731421);let j=String.raw`
|
|
3
3
|
$ErrorActionPreference = 'Stop'
|
|
4
4
|
$phase = 'input'
|
|
5
5
|
try {
|
|
@@ -53,6 +53,6 @@ while ($null -ne $current) {
|
|
|
53
53
|
[Console]::Error.WriteLine('FLUJO_AUTHORITY_REFUSED:' + $phase)
|
|
54
54
|
exit 1
|
|
55
55
|
}
|
|
56
|
-
`;function k(a,b=""){try{if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return;let c=/^FLUJO_AUTHORITY_REFUSED:(input|native-acl|owner-dacl|outsider-access|evidence-bounds)\s*$/.exec(b)?.[1];console.info("[private-authority-native]","refused",c??a)}catch{}}function l(a){if("win32"!==process.platform)throw Error("Windows authority inspection unavailable");let b="string"==typeof a?[a]:a;if(b.length<1||b.length>4||b.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let c=process.env.SystemRoot;if(!c||!g().isAbsolute(c))throw Error("Windows authority inspection unavailable");let d=g().join(c,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!e().statSync(d).isFile())throw Error("Windows authority inspection unavailable");let f=(0,i.spawnSync)(d,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{input:JSON.stringify("string"==typeof a?{filename:g().resolve(a)}:{filenames:b.map(a=>g().resolve(a))}),encoding:"utf8",windowsHide:!0,timeout:3e4,maxBuffer:65536,env:{NODE_ENV:"production",SystemRoot:c,WINDIR:c,PATH:g().join(c,"System32")}});if(f.error||0!==f.status||f.signal)throw Error("Windows authority inspection refused");return m(f.stdout)}function m(a){let b;try{b=JSON.parse(a)}catch{throw Error("Windows authority inspection refused")}let c=b;if(!c||1!==c.schemaVersion||!Array.isArray(c.records)||c.records.length<2||c.records.length>128||c.records.some(a=>"string"!=typeof a||a.length>8192))throw Error("Windows authority inspection refused");return(0,h.createHash)("sha256").update(JSON.stringify(c.records)).digest("hex")}async function n(a,b){if("win32"!==process.platform||b?.aborted)throw"win32"===process.platform&&b?.aborted&&k("abort-before-spawn"),Error("Windows authority inspection unavailable");let c="string"==typeof a?[a]:a;if(c.length<1||c.length>4||c.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let d=process.env.SystemRoot;if(!d||!g().isAbsolute(d))throw Error("Windows authority inspection unavailable");let f=g().join(d,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!(await e().promises.stat(f)).isFile())throw Error("Windows authority inspection unavailable");if(b?.aborted)throw k("abort-before-spawn"),Error("Windows authority inspection cancelled");return new Promise((c,e)=>{let h,l=(0,i.spawn)(f,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{windowsHide:!0,stdio:["pipe","pipe","pipe"],env:{NODE_ENV:"production",SystemRoot:d,WINDIR:d,PATH:g().join(d,"System32")}}),n=0,o=[],p=[],q=a=>{k(a),h??=Error("Windows authority inspection cancelled or exceeded bounds"),l.kill()},r=()=>q("abort"),s=setTimeout(()=>q("deadline"),3e4);for(let a of(b?.addEventListener("abort",r,{once:!0}),l.on("error",a=>{h=a,q("spawn")}),l.stdin.on("error",a=>{h=a,q("stdin")}),[l.stdout,l.stderr]))a.on("data",b=>{(n+=b.length)>65536?q("bounds"):a===l.stdout?o.push(b):p.push(b)});l.on("close",(a,d)=>{clearTimeout(s),b?.removeEventListener("abort",r);try{if(h||0!==a||d||b?.aborted)throw h??Error("Windows authority inspection refused");c(m(Buffer.concat(o).toString("utf8")))}catch(b){k(0===a?"evidence":"exit",Buffer.concat(p).toString("utf8")),e(b)}finally{for(let a of[...o,...p])a.fill(0)}});let t="string"==typeof a?{filename:g().resolve(a)}:{filenames:a.map(a=>g().resolve(a))};l.stdin.end(JSON.stringify(t)),b?.aborted&&r()})}},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))}}}},483325:(a,b,c)=>{"use strict";c.r(b),c.d(b,{"40064b3bb4012d9b48afd736a05e4a27b19486d83b":()=>d.V,"6017d1d90a84849ef08e2cd5f773e5acb98dedee0f":()=>d.G,"60eab620425ddbd86cc239ac6b8fc50095e3a9f1ef":()=>d.resolveGlobalVars});var d=c(18705)},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"}},497776:(a,b,c)=>{"use strict";c.d(b,{K9:()=>E,RN:()=>G,VV:()=>F,bH:()=>D,l8:()=>C,uv:()=>r,zN:()=>m});var d=c(16698),e=c(848161),f=c.n(e),g=c(257975),h=c(178877),i=c(750231),j=c(907986);let k=new Set(["emit","abortSignal","executionAuthority","executionExtensionContext","behaviorToolRegistry"]);class l extends Error{constructor(a){super("FLOW_RUN_BUSY"===a?"Flow execution capacity is busy. Retry after active work finishes.":"FLOW_RUN_INPUT_TOO_LARGE"===a?"Flow input exceeds safe admission limits. Reduce the input before retrying.":"Insufficient memory to admit another Flow execution. Retry after active work finishes."),this.code=a,this.retryAfterSeconds=5,this.name="FlowRunPressureError",this.status="FLOW_RUN_BUSY"===a?429:"FLOW_RUN_INPUT_TOO_LARGE"===a?413:503}}function m(a){return a instanceof Error&&"FlowRunPressureError"===a.name&&["FLOW_RUN_BUSY","FLOW_RUN_MEMORY","FLOW_RUN_INPUT_TOO_LARGE"].includes(a.code)}let n=globalThis,o=n.__flujoFlowRunAdmission??={active:0,bytes:0,workspaces:new Map,reservations:new WeakMap,scope:new d.AsyncLocalStorage,rejectedBusy:0,rejectedMemory:0,rejectedInput:0};function p(a,b){let c=Number(process.env[`FLUJO_RUN_ADMISSION_${a}`]);return Number.isSafeInteger(c)&&c>0?c:b}function q(){let a,b;return{maxProcessRuns:p("MAX_PROCESS_RUNS",64),maxWorkspaceRuns:p("MAX_WORKSPACE_RUNS",32),maxConversationRuns:p("MAX_CONVERSATION_RUNS",4),maxProcessBytes:p("MAX_PROCESS_BYTES",0x20000000),maxWorkspaceBytes:p("MAX_WORKSPACE_BYTES",0x10000000),maxInputBytes:p("MAX_INPUT_BYTES",0x4000000),maxRssBytes:p("MAX_RSS_BYTES",(a=f().totalmem(),Number.isFinite(b="function"==typeof process.constrainedMemory?process.constrainedMemory():0)&&b>0&&b<a&&(a=b),Math.max(0x80000000,Math.floor(.75*a))))}}function r(){return q().maxRssBytes}function s(a){throw"FLOW_RUN_BUSY"===a?o.rejectedBusy++:"FLOW_RUN_MEMORY"===a?o.rejectedMemory++:o.rejectedInput++,new l(a)}(0,i.rF)("run",o.bytes);let t=Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get,u="u"<typeof SharedArrayBuffer?void 0:Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get,v=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype),"buffer").get,w=Object.getOwnPropertyDescriptor(DataView.prototype,"buffer").get;function x(a,b){if(g.types.isProxy(a))return!1;let c=Object.getOwnPropertyDescriptor(a,"constructor");return!(!c||!("value"in c)||"function"!=typeof c.value||g.types.isProxy(c.value))&&Object.getOwnPropertyDescriptor(c.value,"prototype")?.value===a&&Function.prototype.toString.call(c.value)===Function.prototype.toString.call(b)}function y(a){return null!==a&&!g.types.isProxy(a)&&null===Object.getPrototypeOf(a)&&x(a,Object)}function z(a){(!a||"object"!=typeof a||g.types.isProxy(a))&&s("FLOW_RUN_INPUT_TOO_LARGE");let b=Object.getOwnPropertyDescriptor(a,"conversationId");return!b||"value"in b&&(void 0===b.value||"string"==typeof b.value)||s("FLOW_RUN_INPUT_TOO_LARGE"),b?.value}function A(a,b){var c;let d,e,f,h,i,j=Math.max(1048576,(c=b.maxInputBytes,d=0,e=0,f=new Set,h=a=>{(!Number.isSafeInteger(d+=a)||d>c)&&s("FLOW_RUN_INPUT_TOO_LARGE")},(i=(a,b)=>{var c,d;let j;if((++e>1e5||b>64)&&s("FLOW_RUN_INPUT_TOO_LARGE"),"string"==typeof a)return void h(24+2*a.length);if(null==a||"number"==typeof a||"boolean"==typeof a)return void h(8);if(("object"!=typeof a||g.types.isProxy(a))&&s("FLOW_RUN_INPUT_TOO_LARGE"),f.has(a))return;if(f.add(a),h(64),g.types.isArrayBuffer(a))return void h(t.call(a));if(g.types.isSharedArrayBuffer(a))return void h(u.call(a));if(ArrayBuffer.isView(a))return void i((g.types.isDataView(a)?w:v).call(a),b+1);let l=Array.isArray(a);for(let e in c=a,d=l,null===(j=Object.getPrototypeOf(c))||!g.types.isProxy(j)&&(d?Array.isArray(j)&&x(j,Array)&&y(Object.getPrototypeOf(j)):y(j))||s("FLOW_RUN_INPUT_TOO_LARGE"),l&&(a.length>1e5&&s("FLOW_RUN_INPUT_TOO_LARGE"),h(8*a.length)),a){if(!Object.hasOwn(a,e)||0===b&&k.has(e))continue;h(16+2*e.length);let c=Object.getOwnPropertyDescriptor(a,e);"value"in c||s("FLOW_RUN_INPUT_TOO_LARGE"),i(c.value,b+1)}})(a,0),4*d));return Number.isSafeInteger(j)||s("FLOW_RUN_INPUT_TOO_LARGE"),j}function B(a,b,c,d){let e=o.bytes-c+a,f=(b?.bytes??0)-c+a,g=(0,h.getHeapStatistics)(),j=process.memoryUsage().rss,k=g.heap_size_limit-g.used_heap_size-Math.ceil(.2*g.heap_size_limit)-0x4000000,l=(0,i.XF)("run",e);(e>d.maxProcessBytes||f>d.maxWorkspaceBytes||!Number.isFinite(k)||l>k||!Number.isFinite(j)||j+l>d.maxRssBytes)&&s("FLOW_RUN_MEMORY")}function C(a){let b=(0,j.getCurrentWorkspace)(),c=z(a),d=q(),e=o.workspaces.get(b);(o.active>=d.maxProcessRuns||(e?.active??0)>=d.maxWorkspaceRuns||void 0!==c&&(e?.conversations.get(c)??0)>=d.maxConversationRuns)&&s("FLOW_RUN_BUSY");let f=A(a,d);B(f,e,0,d),e||(e={active:0,bytes:0,conversations:new Map},o.workspaces.set(b,e));let g=e,h={workspace:b,conversationId:c,bytes:f,open:!0,scoped:!1,claimed:!1},k=Object.freeze({release:()=>{if(h.open){if(h.open=!1,o.active--,o.bytes-=h.bytes,(0,i.rF)("run",o.bytes),g.active--,g.bytes-=h.bytes,void 0!==c){let a=g.conversations.get(c)-1;a?g.conversations.set(c,a):g.conversations.delete(c)}g.active||o.workspaces.delete(b)}}});return o.reservations.set(k,h),o.active++,o.bytes+=f,(0,i.rF)("run",o.bytes),g.active++,g.bytes+=f,void 0!==c&&g.conversations.set(c,(g.conversations.get(c)??0)+1),k}function D(a){let b=o.scope.getStore(),c=b&&o.reservations.get(b);if(!b||c?.claimed){let b=C(a);return o.reservations.get(b).claimed=!0,b}if(!c?.open)throw Error("Flow run admission scope has expired.");return E(b,a),c.claimed=!0,b}function E(a,b){let c=a&&o.reservations.get(a);if(!c?.open)throw Error("Flow run admission permit has expired.");if(c.workspace!==(0,j.getCurrentWorkspace)()||c.conversationId!==z(b))throw Error("Flow run admission does not match the current workspace and conversation.");let d=q(),e=Math.max(c.bytes,A(b,d)),f=o.workspaces.get(c.workspace);B(e,f,c.bytes,d);let g=e-c.bytes;o.bytes+=g,f.bytes+=g,c.bytes=e,(0,i.rF)("run",o.bytes)}async function F(a,b){let c=a&&o.reservations.get(a);if(!c?.open||c.scoped||c.claimed)throw Error("Flow run admission permit is invalid or already used.");if(c.workspace!==(0,j.getCurrentWorkspace)())throw Error("Flow run admission workspace mismatch.");c.scoped=!0;try{return await o.scope.run(a,b)}finally{a.release()}}function G(){let a=o.workspaces.get((0,j.getCurrentWorkspace)());return{activeRuns:o.active,reservedBytes:o.bytes,activeWorkspaces:o.workspaces.size,workspaceActiveRuns:a?.active??0,workspaceReservedBytes:a?.bytes??0,workspaceConversations:a?.conversations.size??0,rejectedBusy:o.rejectedBusy,rejectedMemory:o.rejectedMemory,rejectedInput:o.rejectedInput,...q(),minReservationBytes:1048576,inputExpansion:4}}},572687:(a,b,c)=>{"use strict";c.d(b,{H6:()=>y,MI:()=>s,Sc:()=>u});var d=c(973024),e=c(176760),f=c.n(e),g=c(446193),h=c(16698),i=c(977598),j=c(907986),k=c(879628),l=c(619335),m=c(437175);let n=globalThis,o=n.__flujoPublicationIntentContextV1??=new h.AsyncLocalStorage,p=n.__flujoPublicationIntentProcessV1??={token:(0,i.randomUUID)(),startedAt:Date.now()-Math.round(1e3*process.uptime()),live:new Set};async function q(a){let b,c;if(p.live.has(a))return;try{b=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0))}catch(a){return"ENOENT"===a.code?"gone":void 0}let e={};try{c=await b.stat({bigint:!0});try{e=JSON.parse(await b.readFile("utf8"))??{}}catch{}}catch{return}finally{await b.close().catch(()=>void 0)}if(!c.isFile())return;if(e.process===p.token)return c;let f="number"==typeof e.startedAt?e.startedAt:Number(c.mtimeMs);return Date.now()-f>6e5?c:"number"==typeof e.pid?e.pid!==process.pid&&function(a){try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}}(e.pid)?void 0:c:f<p.startedAt?c:void 0}async function r(a,b){try{let c=await d.promises.lstat(a,{bigint:!0});w(c,b)&&await d.promises.unlink(a)}catch{}}async function s(a,b){let c,e=f().join((0,j.getWorkspaceDataDir)(),"db","conversation-publications",`${a}.json`),g=o.getStore();if(g?.live&&g.filename===e)return b();await x(),await u(()=>d.promises.mkdir(f().dirname(e),{recursive:!0}));let h=await u(()=>d.promises.lstat(f().dirname(e),{bigint:!0}));if(!h.isDirectory()||h.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","publication intent directory is unsafe");let i=Date.now()+15e3;for(let a=0;!c;a++)try{c=await d.promises.open(e,"wx",384)}catch(c){if("EEXIST"!==c.code)throw new m.MO("CONVERSATION_PUBLICATION_IO","could not create a publication intent",{cause:c});let b=a<3?await q(e):void 0;if(b){"gone"!==b&&await r(e,b);continue}if(Date.now()>=i)throw new m.MO("CONVERSATION_PUBLICATION_BUSY","another FLUJO process is still writing this conversation");await new Promise(b=>setTimeout(b,Math.min(1e3,50*2**a)))}p.live.add(e);try{return await t(c,e,h,a,b)}finally{p.live.delete(e)}}async function t(a,b,c,e,g){let h,j;try{h=await a.stat({bigint:!0}),await a.writeFile(JSON.stringify({version:2,conversationId:e,token:(0,i.randomUUID)(),startedAt:Date.now(),pid:process.pid,process:p.token}))}catch(c){try{await a.close()}catch{(0,m.B_)("intent descriptor closure is uncertain",void 0,!0,{intent:b})}throw(0,m.B_)("publication intent did not finish",c,!1,{intent:b})}try{await a.close()}catch(a){throw(0,m.B_)("intent descriptor closure is uncertain",a,!0,{intent:b})}let k={filename:b,live:!0};try{return await o.run(k,g)}catch(a){throw j=a}finally{try{await (0,m.l7)()}catch(a){void 0===j&&(j=a)}if(k.live=!1,!(0,m.by)())try{await x();let a=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.lstat(f().dirname(b),{bigint:!0});if(!h||!v(a,h)||!e.isDirectory()||e.isSymbolicLink()||e.dev!==c.dev||e.ino!==c.ino)throw Error("Publication intent identity changed");await d.promises.unlink(b)}catch{}if(void 0!==j)throw j}}async function u(a){try{return await a()}catch(a){if((0,m.sE)(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name)throw a;throw new m.MO("CONVERSATION_PUBLICATION_IO","required durable publication failed",{cause:a})}}let v=(a,b)=>a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===b.dev&&a.ino===b.ino,w=(a,b)=>v(a,b)&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs;async function x(){await (0,k.qy)(),await (0,l.QO)()}async function y(a,b){await x();let c=f().dirname(a);await u(()=>d.promises.mkdir(c,{recursive:!0}));let e=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!e.isDirectory()||e.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log directory is unsafe");let g=await u(()=>d.promises.open(a,d.constants.O_RDWR|d.constants.O_CREAT|(d.constants.O_NOFOLLOW??0),384)),h={filename:a};try{let f=await u(()=>g.stat({bigint:!0}));if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(Number.MAX_SAFE_INTEGER))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log is not a regular owned file");let i=f,j=Number(f.size);h={filename:a,dev:String(f.dev),ino:String(f.ino),start:String(f.size)};let k=async()=>{let b=await u(()=>d.promises.lstat(a,{bigint:!0})),f=await u(()=>g.stat({bigint:!0})),j=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!w(f,i)||!w(b,i)||!j.isDirectory()||j.isSymbolicLink()||j.dev!==e.dev||j.ino!==e.ino)throw(0,m.B_)("conversation log identity or appended suffix changed",void 0,!1,h);await x()};await k();let l=!1;if(j>0){let a=Buffer.alloc(1),{bytesRead:b}=await u(()=>g.read(a,0,1,j-1));l=1===b&&10!==a[0]}let n=l,o=async a=>{let b=0;for(;b<a.length;){let c=await g.write(a,b,a.length-b,j);if(!c.bytesWritten)throw Error("Conversation log made no write progress");b+=c.bytesWritten,j+=c.bytesWritten}},p=async a=>{try{let b=await g.stat({bigint:!0});if(!v(b,f)||b.size<BigInt(a))return!1;return b.size!==BigInt(a)&&(await g.truncate(a),await g.sync()),i=await g.stat({bigint:!0}),j=a,i.size===BigInt(a)}catch{return!1}};return await b({activeMessageIds:()=>u(()=>z(g,Number(f.size))),append:async a=>{await k();let b=j;try{for(let b of(l&&await o(Buffer.from("\n")),(0,m.gm)(a,!0)))await o(b);if(await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==BigInt(j))throw(0,m.B_)("conversation append completion has no owned suffix witness",void 0,!1,h);await k(),l=!1}catch(a){if(await p(b))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation append did not finish and was rolled back",{cause:a});throw(0,m.B_)("conversation append outcome requires reconciliation",a,!1,{...h,acknowledgedEnd:String(j)})}},rollback:async()=>{await k();try{if(await g.truncate(Number(f.size)),await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==f.size)throw Error("Rollback size changed");j=Number(f.size),l=n,await k()}catch(a){throw(0,m.B_)("conversation rollback requires reconciliation",a,!1,h)}}})}finally{try{await g.close()}catch{}}}async function z(a,b){(0,m.Ev)(0x2000000);let c=Buffer.alloc(65536),d=new g.StringDecoder("utf8"),e=new Set,f=new Map,h=[],i="",j=0,k="",l=!1,n=!1,o=!1,p=0,q=!1,r=!1,s=0,t=0,u=0,v=0,w=()=>{throw new m.MO("CONVERSATION_PUBLICATION_MEMORY","transcript metadata exceeds its bounded rewrite policy")},x=()=>{h=[],i="",j=0,u=0,v=0},y=a=>{j+a.length>1048576&&w(),j+=a.length;for(let b=0;b<a.length;){let c=Math.min(4096-i.length,a.length-b);i+=a.slice(b,b+c),b+=c,4096===i.length&&(h.push(Buffer.from(i,"utf16le").toString("utf16le")),i="")}},z=()=>{let a;if(r){r=!1,x();return}i&&h.push(i);let b=h.join("");if(x(),b.trim()){try{a=JSON.parse(b)}catch{return}if(a?.type==="message"&&a.message&&"system"!==a.message.role){let b=a.message.id;if(null===b&&w(),"string"!=typeof b||!b)return;b.length>4096&&w();let c=b;if(e.has(c)&&/^stream_codex_item_/.test(c)){let a=(f.get(c)??1)+1;f.set(c,a),c=`${c}_legacy_${a}`}else f.has(c)||((t+=c.length)>1048576&&w(),f.set(c,1));e.has(c)||(e.add(c),p+=c.length),(e.size>65536||f.size>65536||p>1048576)&&w()}else a?.type==="message:removed"&&(null===a.messageId&&w(),"string"==typeof a.messageId&&e.delete(a.messageId)&&(p-=a.messageId.length))}},A=a=>{for(let b=0;b<a.length;b++){let c=a[b];if(q){if(" "===c||" "===c||"\r"===c)continue;y(":"===c?'""':"null"),q=!1}if("\n"===c){l?(x(),r=!1):z(),l=!1,n=!1,k="",o=!1,s=0;continue}if(!l){"{"===c||"["===c?++u>128&&w():("}"===c||"]"===c)&&u--,'{[,"'.includes(c)&&++v>262144&&w(),'"'===c?(l=!0,k='"',o=!1):y(c);continue}!o&&(k+=c).length>24578&&(o=!0,k=""),s?(/[0-9a-f]/i.test(c)||(r=!0),s--):n?(n=!1,"u"===c?s=4:'"\\/bfnrt'.includes(c)||(r=!0)):"\\"===c?n=!0:'"'===c?(l=!1,o?q=!0:y(k),k=""):32>c.charCodeAt(0)&&(r=!0)}};for(let e=0;e<b;){let{bytesRead:f}=await a.read(c,0,Math.min(c.length,b-e),e);if(!f)throw Error("Conversation log changed while reading rewrite metadata");e+=f,A(d.write(c.subarray(0,f)))}return A(d.end()),q&&y("null"),l||z(),[...e]}},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:()=>W,ln:()=>S,N2:()=>Q,bB:()=>ar,U2:()=>an,U3:()=>aj,Vx:()=>V,al:()=>ah,JV:()=>al,$G:()=>at,pL:()=>as,av:()=>au,EI:()=>aq,loadItem:()=>O,H0:()=>N,Jk:()=>ag,w5:()=>av,Ch:()=>am,l_:()=>ao,Vt:()=>ap,VH:()=>M,Gl:()=>ai,Pv:()=>H,c0:()=>P,Zf:()=>L});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),A=c(437175),B=c(572687);let C=(0,v.h)("utils/storage/backend"),D=()=>g().join((0,x.getWorkspaceDataDir)(),"db"),E=()=>g().join((0,w.ok)(),".next","storage"),F=a=>g().join(D(),`${a}.json`);async function G(){let a=D(),b=E();try{await e.promises.access(a),C.verbose(`Storage directory exists: ${a}`)}catch{C.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),C.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}async function H(){for(let a of(C.debug("Verifying storage system initialization"),await G(),Object.values(u.Zg)))try{let b=F(a),c=!1;try{await e.promises.access(b),c=!0}catch{}C.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let d=g().join(E(),`${a}.json`);try{await e.promises.access(d),c?C.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):C.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){C.error(`Storage verification failed for ${a}:`,b)}C.debug("Storage verification completed")}let I=new Map,J=new Set(["EPERM","EBUSY","EACCES"]);async function K(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||!J.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 L(a,b,c){let f,i=!1,j=async a=>{try{await a()}catch(a){throw i=!0,f=a,a}},k=a=>"string"==typeof b?a():(0,B.Sc)(a);await (0,y.af)(a),await (0,z.withWorkspaceMutation)(async()=>{let l,m;await (0,y.af)(a),await j(()=>(0,z.qy)());let n=g().dirname(a);await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),await k(()=>e.promises.mkdir(n,{recursive:!0}));let o=await k(()=>e.promises.lstat(n,{bigint:!0})),p=await k(()=>e.promises.realpath(n));(!o.isDirectory()||o.isSymbolicLink())&&await k(async()=>{throw Error("Atomic write parent is unsafe")});let q=`${a}.tmp.${(0,h.randomUUID)()}`,r=!1,s=!1,t=!1,u=!1;try{await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()));let f=await e.promises.open(q,"wx",384);r=!0;try{if(l=await f.stat({bigint:!0}),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),"string"==typeof b)await f.writeFile(b);else{let a=0,c=(0,h.createHash)("sha256");for(let d of(0,A.gm)([b.value],!1)){c.update(d);let b=0;for(;b<d.length;){let c=await f.write(d,b,d.length-b,a+b);if(!c.bytesWritten)throw Error("Conversation snapshot made no write progress");b+=c.bytesWritten}a+=d.length}m=c.digest("hex")}await j(()=>(0,z.qy)()),await f.sync(),await j(()=>(0,z.qy)()),l=await f.stat({bigint:!0})}catch(a){try{await f.close()}catch{u=!0,"string"!=typeof b&&(0,A.B_)("snapshot descriptor closure is uncertain",void 0,!0)}throw a}if(!u)try{await f.close()}catch(a){if(u=!0,"string"!=typeof b)throw(0,A.B_)("snapshot descriptor closure is uncertain",a,!0);throw a}await K(q,a,async()=>{let[a,b,f]=await Promise.allSettled([e.promises.lstat(q,{bigint:!0}),e.promises.lstat(n,{bigint:!0}),e.promises.realpath(n)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===f.status)throw f.reason;let g=a.value,h=b.value,i=f.value;if(!l||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==l.dev||g.ino!==l.ino||g.size!==l.size||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid||!h.isDirectory()||h.isSymbolicLink()||h.dev!==o.dev||h.ino!==o.ino||h.mode!==o.mode||h.uid!==o.uid||h.gid!==o.gid||i!==p)throw Error("Atomic write file or parent changed");await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),s=!0}),r=!1,t=!0,"string"!=typeof b&&(0,A.oK)(),await j(()=>(0,z.qy)())}catch(c){if("string"!=typeof b&&s&&!t&&l){let b=async a=>{try{return await e.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}};try{let c=await e.promises.lstat(n,{bigint:!0}),d=await e.promises.realpath(n);if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==o.dev||c.ino!==o.ino||d!==p)throw Error("Snapshot commit parent changed");let f=await b(a),g=await b(q),i=a=>a?.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===l.dev&&a.ino===l.ino&&a.size===l.size;if(i(f)){let b,c=await e.promises.open(a,e.constants.O_RDONLY|e.constants.O_NONBLOCK|(e.constants.O_NOFOLLOW??0));try{let b=await c.stat({bigint:!0});if(!i(b)||b.mtimeNs!==f.mtimeNs||b.ctimeNs!==f.ctimeNs)throw Error("Snapshot readback identity changed");let d=Buffer.alloc(65536),g=(0,h.createHash)("sha256"),j=0;for(;j<Number(l.size);){let{bytesRead:a}=await c.read(d,0,Math.min(d.length,Number(l.size)-j),j);if(!a)throw Error("Snapshot readback ended early");j+=a,g.update(d.subarray(0,a))}let k=await c.stat({bigint:!0}),n=await e.promises.lstat(a,{bigint:!0});if(!i(k)||k.mtimeNs!==b.mtimeNs||k.ctimeNs!==b.ctimeNs||!i(n)||n.mtimeNs!==k.mtimeNs||n.ctimeNs!==k.ctimeNs||g.digest("hex")!==m)throw Error("Snapshot readback bytes changed")}catch(a){throw b=a,a}finally{try{await c.close()}catch(c){let a=(0,A.B_)("snapshot readback descriptor closure is uncertain",c,!0);if(void 0===b)throw a}}(0,A.oK)(),r=!1}else if(!i(g)||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid)throw Error("Snapshot commit has no exclusive owned witness")}catch(b){throw(0,A.B_)("snapshot rename outcome requires reconciliation",b,!1,{destination:a,temporary:q,dev:String(l.dev),ino:String(l.ino),size:String(l.size)})}}if(r&&!u)try{let a=await e.promises.lstat(q,{bigint:!0});l&&a.isFile()&&!a.isSymbolicLink()&&a.dev===l.dev&&a.ino===l.ino&&await e.promises.unlink(q)}catch{}if(i&&c===f)throw c;await k(async()=>{throw c})}})}async function M(a,b,c){let d=F(a);if(a.startsWith("conversations/")){let e=a.slice(14);return S(e),(0,A.JN)((0,x.workspaceCacheKey)("conversation-publication",e),b,a=>(0,A.Sg)(()=>(0,z.withWorkspaceMutation)(()=>(0,B.MI)(e,()=>L(d,{conversation:!0,value:a},c)))))}await (0,y.af)(d),await (0,z.withWorkspaceMutation)(async()=>{let e=(0,x.workspaceCacheKey)("item",a),f=(I.get(e)??Promise.resolve()).catch(()=>{}).then(()=>L(d,JSON.stringify(b,null,2),c));I.set(e,f);try{await f,C.verbose(`Successfully saved item to: ${d}`)}catch(b){throw C.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{I.get(e)===f&&I.delete(e)}})}async function N(a,b){let c,d=F(a);await (0,y.af)(d),await G();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 O(a,b){if(a.startsWith("conversations/"))return P(a.slice(14),async a=>void 0===a?b:a);await (0,y.af)(F(a));try{await G();let c=F(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return C.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return C.verbose(`Successfully loaded item from: ${c}`),a}catch(b){C.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),C.info(`Created backup of corrupted file at: ${a}`)}catch(a){C.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 C.verbose(`Item with key "${a}" not found at ${F(a)}, returning default.`),b;throw C.error(`CRITICAL: Error loading item with key "${a}" from ${F(a)}:`,c),c}}async function P(a,b,c={}){let d;c.signal?.throwIfAborted(),S(a);let f=F(`conversations/${a}`);await (0,y.af)(f),await G();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){C.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 Q(a){let b=F(a);await (0,y.af)(b),await (0,z.withWorkspaceMutation)(async()=>{await (0,y.af)(b);try{await e.promises.unlink(b),C.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?C.warn(`Error clearing item with key "${a}" at ${b}:`,c):C.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let R=/^[A-Za-z0-9_-]{1,64}$/;function S(a){if("string"!=typeof a||!R.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let T=a=>g().join(D(),a),U=(a,b)=>g().join(T(a),`${b}.json`);async function V(a,b){S(b);try{let c=await e.promises.stat(U(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let W=["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"],X=new Set(W);function Y(a){if(!X.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function Z(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 $(a,b){return Y(a),S(b),U(a,b)}function _(a,b,c){Y(a),S(b),S(c);let d=T(a),e=g().join(d,b,`${c}.json`);return Z(d,e),e}async function aa(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function ab(a,b,c){Y(a),S(b);let d=T(a),f=g().join(d,b);Z(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await aa(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 aa(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 Z(j,k),f}async function ac(a){return s(a,D())}async function ad(a){return(await ac(a))?.content??null}function ae(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 af 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 ag(a,b,c,d,e){Y(a),S(b),S(c);let f=await ab(a,b,!1),g=_(a,b,c),h=$(a,c),[i,j]=await Promise.all([f?ad(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):ad(h)]);if(null!==i&&null!==j&&i!==j)throw new af(a,b,c);let k=i??j;return null===k?d:ae(k,a,b,c)}async function ah(a,b,c){Y(a),S(b),S(c);let d=await ab(a,b,!1),e=_(a,b,c),f=$(a,c),[g,h]=await Promise.all([d?ac(e):Promise.resolve(null),ac(f)]);if(g&&h&&g.content!==h.content)throw new af(a,b,c);let i=g??h;return i?(ae(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ai(a,b,c,f){if(Y(a),S(b),S(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=_(a,b,c),h=$(a,c);await ao(`persona-shard/${a}/${b}/${c}`,async()=>{await ab(a,b,!0);let i=await ad(h);null!==i&&ae(i,a,b,c),await L(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 aj(a,b,c){Y(a),S(b),S(c);let d=_(a,b,c),f=$(a,c);await ao(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await ab(a,b,!1),[h,i]=await Promise.all([g?ad(d):Promise.resolve(null),ad(f)]);null!==h&&ae(h,a,b,c),null!==i&&ae(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 ak(a,b){let c=await ab(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);S(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 ab(a,b,!1)}})).toString("utf8");f.push(ae(l,a,b,d))}return f}async function al(a){Y(a);let b=T(a),c=await aa(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(S(c.name),await ak(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new af(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);S(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.`);S(d.personaId);let j=ae(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new af(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}async function am(a,b,c){Y(a),S(b),S(c);let f=_(a,b,c),g=$(a,c);return ao(`persona-shard/${a}/${b}/${c}`,async()=>{let h=await ab(a,b,!1),[i,j]=await Promise.all([h?ad(f):Promise.resolve(null),ad(g)]);if(null!==i&&ae(i,a,b,c),null!==j&&ae(j,a,b,c),null!==i&&null!==j&&i!==j)throw new af(a,b,c);if(null===j)return null===i?"missing":"already-migrated";if(null===i&&(await ab(a,b,!0),await L(f,j),await ad(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 an(a,b){Y(a),S(b),await ao(`persona-shard/${a}/${b}`,async()=>{let c=await ab(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 ao(a,b){return(0,z.withWorkspaceMutation)(async()=>{let c=(0,x.workspaceCacheKey)("chain",a),d=(I.get(c)??Promise.resolve()).catch(()=>{}).then(b);return I.set(c,d),d.catch(()=>{}).finally(()=>{I.get(c)===d&&I.delete(c)}),d})}async function ap(a,b,c){S(b);let d=U(a,b);if("conversations"===a)return(0,A.JN)((0,x.workspaceCacheKey)("conversation-publication",b),c,a=>(0,A.Sg)(()=>(0,z.withWorkspaceMutation)(()=>(0,B.MI)(b,()=>L(d,{conversation:!0,value:a})))));try{await ao(`${a}/${b}`,()=>L(d,JSON.stringify(c,null,2))),C.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw C.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function aq(a,b,c){if(S(b),"conversations"===a)return P(b,async a=>void 0===a?c:a);let d=U(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return C.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){C.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),C.info(`Created backup of corrupted file at: ${a}`)}catch(a){C.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 C.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw C.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function ar(a,b){S(b);let c=U(a,b);await ao(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),C.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;C.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function as(a){let b,c=T(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){C.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){C.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function at(a){let b,c=T(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);S(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 au(a){let b,c=T(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){C.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){C.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function av(a,b,c){let f,g,h=F(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 C.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return C.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(T(b),{recursive:!0}),g)){let d;try{d=c(a),S(d)}catch(a){C.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=U(b,d);try{await e.promises.access(f),C.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await L(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),C.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(68159),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(44201)]).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()}},750231:(a,b,c)=>{"use strict";c.d(b,{RI:()=>i,XF:()=>j,rF:()=>h});let d=globalThis;function e(a){if(void 0===a)return 0;if(!a||"object"!=typeof a)throw Error("Invalid existing allocation ledger.");let b=Object.getOwnPropertyDescriptor(a,"bytes");if(!b||!("value"in b)||!Number.isSafeInteger(b.value)||b.value<0)throw Error("Invalid existing allocation ledger.");return b.value}let f=d.__flujoAllocationReservationsV1??={run:e(d.__flujoFlowRunAdmission),preparation:e(d.__flujoSubflowPreparation),output:e(d.__flujoSubflowOutput),ingress:e(d.__flujoChatIngressV1),publication:e(d.__flujoConversationPublicationV1)};function g(a,b){if(!["run","preparation","output","ingress","publication"].includes(a)||!Number.isSafeInteger(b)||b<0)throw Error("Invalid allocation reservation observation.")}function h(a,b){g(a,b),f[a]=b}function i(){return Object.freeze({...f,total:f.run+f.preparation+f.output+f.ingress+f.publication})}function j(a,b){return g(a,b),f.run+f.preparation+f.output+f.ingress+f.publication-f[a]+b}f.publication??=e(d.__flujoConversationPublicationV1)},774755:(a,b,c)=>{"use strict";c.d(b,{Zg:()=>d.Zg});var d=c(326042)},777943:(a,b,c)=>{"use strict";a.exports=c(707553).vendored["react-rsc"].ReactServerDOMWebpackServer},792711:(a,b,c)=>{"use strict";c.d(b,{Ov:()=>l,l:()=>m,qV:()=>k,rF:()=>i});var d=c(977598),e=c(18963);let f=["openai:read","openai:execute","mcp:access","control:admin","secrets:read","avatar:voice"],g=e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),h=e.object({id:e.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),digest:e.string().regex(/^[a-f0-9]{64}$/),scopes:e.array(e.enum(f)).min(1).max(f.length).refine(a=>new Set(a).size===a.length),issuedAt:g,expiresAt:g,revokedAt:g.nullable(),workspaceId:e.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).refine(a=>!/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(a)).optional()}).strict().refine(a=>a.expiresAt>a.issuedAt).refine(a=>void 0===a.workspaceId||a.scopes.every(a=>"avatar:voice"===a)),i=e.object({schemaVersion:e.literal(1),ownerId:e.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),credentials:e.array(h).max(128)}).strict().superRefine((a,b)=>{(new Set(a.credentials.map(a=>a.id)).size!==a.credentials.length||new Set(a.credentials.map(a=>a.digest)).size!==a.credentials.length)&&b.addIssue({code:"custom",message:"Duplicate credential identity"})});function j(a){return(0,d.createHash)("sha256").update(a,"utf8").digest()}function k(a,b,c=Date.now(),e={}){let f=`flo_v1_${(0,d.randomBytes)(32).toString("base64url")}`,g=h.parse({id:(0,d.randomBytes)(16).toString("hex"),digest:j(f).toString("hex"),scopes:[...a],issuedAt:c,expiresAt:b,revokedAt:null,...void 0===e.workspaceId?{}:{workspaceId:e.workspaceId}});return{token:f,record:g}}function l(a,b,c=Date.now()){let e=/^Bearer[ \t]+(flo_v1_[A-Za-z0-9_-]{43})[ \t]*$/i.exec(a.headers.get("authorization")??"");if(!e||!Number.isSafeInteger(c)||c<0)return null;let f=j(e[1]),g=b.credentials.find(a=>(0,d.timingSafeEqual)(f,Buffer.from(a.digest,"hex")));return!g||null!==g.revokedAt||g.issuedAt>c||g.expiresAt<=c?null:Object.freeze({ownerId:b.ownerId,credentialId:g.id,scopes:Object.freeze([...g.scopes]),...void 0===g.workspaceId?{}:{workspaceId:g.workspaceId}})}function m(a,b){return b.every(b=>a.scopes.includes(b))}},824424:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
56
|
+
`;function k(a,b=""){try{if("1"!==process.env.FLUJO_MCP_WORKLOAD_TRACE)return;let c=/^FLUJO_AUTHORITY_REFUSED:(input|native-acl|owner-dacl|outsider-access|evidence-bounds)\s*$/.exec(b)?.[1];console.info("[private-authority-native]","refused",c??a)}catch{}}function l(a){if("win32"!==process.platform)throw Error("Windows authority inspection unavailable");let b="string"==typeof a?[a]:a;if(b.length<1||b.length>4||b.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let c=process.env.SystemRoot;if(!c||!g().isAbsolute(c))throw Error("Windows authority inspection unavailable");let d=g().join(c,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!e().statSync(d).isFile())throw Error("Windows authority inspection unavailable");let f=(0,i.spawnSync)(d,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{input:JSON.stringify("string"==typeof a?{filename:g().resolve(a)}:{filenames:b.map(a=>g().resolve(a))}),encoding:"utf8",windowsHide:!0,timeout:3e4,maxBuffer:65536,env:{NODE_ENV:"production",SystemRoot:c,WINDIR:c,PATH:g().join(c,"System32")}});if(f.error||0!==f.status||f.signal)throw Error("Windows authority inspection refused");return m(f.stdout)}function m(a){let b;try{b=JSON.parse(a)}catch{throw Error("Windows authority inspection refused")}let c=b;if(!c||1!==c.schemaVersion||!Array.isArray(c.records)||c.records.length<2||c.records.length>128||c.records.some(a=>"string"!=typeof a||a.length>8192))throw Error("Windows authority inspection refused");return(0,h.createHash)("sha256").update(JSON.stringify(c.records)).digest("hex")}async function n(a,b){if("win32"!==process.platform||b?.aborted)throw"win32"===process.platform&&b?.aborted&&k("abort-before-spawn"),Error("Windows authority inspection unavailable");let c="string"==typeof a?[a]:a;if(c.length<1||c.length>4||c.some(a=>!g().isAbsolute(a)||a.length>4096||a.includes("\0")))throw Error("Windows authority inspection unavailable");let d=process.env.SystemRoot;if(!d||!g().isAbsolute(d))throw Error("Windows authority inspection unavailable");let f=g().join(d,"System32","WindowsPowerShell","v1.0","powershell.exe");if(!(await e().promises.stat(f)).isFile())throw Error("Windows authority inspection unavailable");if(b?.aborted)throw k("abort-before-spawn"),Error("Windows authority inspection cancelled");return new Promise((c,e)=>{let h,l=(0,i.spawn)(f,["-NoLogo","-NoProfile","-NonInteractive","-Command",j],{windowsHide:!0,stdio:["pipe","pipe","pipe"],env:{NODE_ENV:"production",SystemRoot:d,WINDIR:d,PATH:g().join(d,"System32")}}),n=0,o=[],p=[],q=a=>{k(a),h??=Error("Windows authority inspection cancelled or exceeded bounds"),l.kill()},r=()=>q("abort"),s=setTimeout(()=>q("deadline"),3e4);for(let a of(b?.addEventListener("abort",r,{once:!0}),l.on("error",a=>{h=a,q("spawn")}),l.stdin.on("error",a=>{h=a,q("stdin")}),[l.stdout,l.stderr]))a.on("data",b=>{(n+=b.length)>65536?q("bounds"):a===l.stdout?o.push(b):p.push(b)});l.on("close",(a,d)=>{clearTimeout(s),b?.removeEventListener("abort",r);try{if(h||0!==a||d||b?.aborted)throw h??Error("Windows authority inspection refused");c(m(Buffer.concat(o).toString("utf8")))}catch(b){k(0===a?"evidence":"exit",Buffer.concat(p).toString("utf8")),e(b)}finally{for(let a of[...o,...p])a.fill(0)}});let t="string"==typeof a?{filename:g().resolve(a)}:{filenames:a.map(a=>g().resolve(a))};l.stdin.end(JSON.stringify(t)),b?.aborted&&r()})}},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"}},497776:(a,b,c)=>{"use strict";c.d(b,{K9:()=>E,RN:()=>G,VV:()=>F,bH:()=>D,l8:()=>C,uv:()=>r,zN:()=>m});var d=c(16698),e=c(848161),f=c.n(e),g=c(257975),h=c(178877),i=c(750231),j=c(907986);let k=new Set(["emit","abortSignal","executionAuthority","executionExtensionContext","behaviorToolRegistry"]);class l extends Error{constructor(a){super("FLOW_RUN_BUSY"===a?"Flow execution capacity is busy. Retry after active work finishes.":"FLOW_RUN_INPUT_TOO_LARGE"===a?"Flow input exceeds safe admission limits. Reduce the input before retrying.":"Insufficient memory to admit another Flow execution. Retry after active work finishes."),this.code=a,this.retryAfterSeconds=5,this.name="FlowRunPressureError",this.status="FLOW_RUN_BUSY"===a?429:"FLOW_RUN_INPUT_TOO_LARGE"===a?413:503}}function m(a){return a instanceof Error&&"FlowRunPressureError"===a.name&&["FLOW_RUN_BUSY","FLOW_RUN_MEMORY","FLOW_RUN_INPUT_TOO_LARGE"].includes(a.code)}let n=globalThis,o=n.__flujoFlowRunAdmission??={active:0,bytes:0,workspaces:new Map,reservations:new WeakMap,scope:new d.AsyncLocalStorage,rejectedBusy:0,rejectedMemory:0,rejectedInput:0};function p(a,b){let c=Number(process.env[`FLUJO_RUN_ADMISSION_${a}`]);return Number.isSafeInteger(c)&&c>0?c:b}function q(){let a,b;return{maxProcessRuns:p("MAX_PROCESS_RUNS",64),maxWorkspaceRuns:p("MAX_WORKSPACE_RUNS",32),maxConversationRuns:p("MAX_CONVERSATION_RUNS",4),maxProcessBytes:p("MAX_PROCESS_BYTES",0x20000000),maxWorkspaceBytes:p("MAX_WORKSPACE_BYTES",0x10000000),maxInputBytes:p("MAX_INPUT_BYTES",0x4000000),maxRssBytes:p("MAX_RSS_BYTES",(a=f().totalmem(),Number.isFinite(b="function"==typeof process.constrainedMemory?process.constrainedMemory():0)&&b>0&&b<a&&(a=b),Math.max(0x80000000,Math.floor(.75*a))))}}function r(){return q().maxRssBytes}function s(a){throw"FLOW_RUN_BUSY"===a?o.rejectedBusy++:"FLOW_RUN_MEMORY"===a?o.rejectedMemory++:o.rejectedInput++,new l(a)}(0,i.rF)("run",o.bytes);let t=Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get,u="u"<typeof SharedArrayBuffer?void 0:Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,"byteLength").get,v=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Uint8Array.prototype),"buffer").get,w=Object.getOwnPropertyDescriptor(DataView.prototype,"buffer").get;function x(a,b){if(g.types.isProxy(a))return!1;let c=Object.getOwnPropertyDescriptor(a,"constructor");return!(!c||!("value"in c)||"function"!=typeof c.value||g.types.isProxy(c.value))&&Object.getOwnPropertyDescriptor(c.value,"prototype")?.value===a&&Function.prototype.toString.call(c.value)===Function.prototype.toString.call(b)}function y(a){return null!==a&&!g.types.isProxy(a)&&null===Object.getPrototypeOf(a)&&x(a,Object)}function z(a){(!a||"object"!=typeof a||g.types.isProxy(a))&&s("FLOW_RUN_INPUT_TOO_LARGE");let b=Object.getOwnPropertyDescriptor(a,"conversationId");return!b||"value"in b&&(void 0===b.value||"string"==typeof b.value)||s("FLOW_RUN_INPUT_TOO_LARGE"),b?.value}function A(a,b){var c;let d,e,f,h,i,j=Math.max(1048576,(c=b.maxInputBytes,d=0,e=0,f=new Set,h=a=>{(!Number.isSafeInteger(d+=a)||d>c)&&s("FLOW_RUN_INPUT_TOO_LARGE")},(i=(a,b)=>{var c,d;let j;if((++e>1e5||b>64)&&s("FLOW_RUN_INPUT_TOO_LARGE"),"string"==typeof a)return void h(24+2*a.length);if(null==a||"number"==typeof a||"boolean"==typeof a)return void h(8);if(("object"!=typeof a||g.types.isProxy(a))&&s("FLOW_RUN_INPUT_TOO_LARGE"),f.has(a))return;if(f.add(a),h(64),g.types.isArrayBuffer(a))return void h(t.call(a));if(g.types.isSharedArrayBuffer(a))return void h(u.call(a));if(ArrayBuffer.isView(a))return void i((g.types.isDataView(a)?w:v).call(a),b+1);let l=Array.isArray(a);for(let e in c=a,d=l,null===(j=Object.getPrototypeOf(c))||!g.types.isProxy(j)&&(d?Array.isArray(j)&&x(j,Array)&&y(Object.getPrototypeOf(j)):y(j))||s("FLOW_RUN_INPUT_TOO_LARGE"),l&&(a.length>1e5&&s("FLOW_RUN_INPUT_TOO_LARGE"),h(8*a.length)),a){if(!Object.hasOwn(a,e)||0===b&&k.has(e))continue;h(16+2*e.length);let c=Object.getOwnPropertyDescriptor(a,e);"value"in c||s("FLOW_RUN_INPUT_TOO_LARGE"),i(c.value,b+1)}})(a,0),4*d));return Number.isSafeInteger(j)||s("FLOW_RUN_INPUT_TOO_LARGE"),j}function B(a,b,c,d){let e=o.bytes-c+a,f=(b?.bytes??0)-c+a,g=(0,h.getHeapStatistics)(),j=process.memoryUsage().rss,k=g.heap_size_limit-g.used_heap_size-Math.ceil(.2*g.heap_size_limit)-0x4000000,l=(0,i.XF)("run",e);(e>d.maxProcessBytes||f>d.maxWorkspaceBytes||!Number.isFinite(k)||l>k||!Number.isFinite(j)||j+l>d.maxRssBytes)&&s("FLOW_RUN_MEMORY")}function C(a){let b=(0,j.getCurrentWorkspace)(),c=z(a),d=q(),e=o.workspaces.get(b);(o.active>=d.maxProcessRuns||(e?.active??0)>=d.maxWorkspaceRuns||void 0!==c&&(e?.conversations.get(c)??0)>=d.maxConversationRuns)&&s("FLOW_RUN_BUSY");let f=A(a,d);B(f,e,0,d),e||(e={active:0,bytes:0,conversations:new Map},o.workspaces.set(b,e));let g=e,h={workspace:b,conversationId:c,bytes:f,open:!0,scoped:!1,claimed:!1},k=Object.freeze({release:()=>{if(h.open){if(h.open=!1,o.active--,o.bytes-=h.bytes,(0,i.rF)("run",o.bytes),g.active--,g.bytes-=h.bytes,void 0!==c){let a=g.conversations.get(c)-1;a?g.conversations.set(c,a):g.conversations.delete(c)}g.active||o.workspaces.delete(b)}}});return o.reservations.set(k,h),o.active++,o.bytes+=f,(0,i.rF)("run",o.bytes),g.active++,g.bytes+=f,void 0!==c&&g.conversations.set(c,(g.conversations.get(c)??0)+1),k}function D(a){let b=o.scope.getStore(),c=b&&o.reservations.get(b);if(!b||c?.claimed){let b=C(a);return o.reservations.get(b).claimed=!0,b}if(!c?.open)throw Error("Flow run admission scope has expired.");return E(b,a),c.claimed=!0,b}function E(a,b){let c=a&&o.reservations.get(a);if(!c?.open)throw Error("Flow run admission permit has expired.");if(c.workspace!==(0,j.getCurrentWorkspace)()||c.conversationId!==z(b))throw Error("Flow run admission does not match the current workspace and conversation.");let d=q(),e=Math.max(c.bytes,A(b,d)),f=o.workspaces.get(c.workspace);B(e,f,c.bytes,d);let g=e-c.bytes;o.bytes+=g,f.bytes+=g,c.bytes=e,(0,i.rF)("run",o.bytes)}async function F(a,b){let c=a&&o.reservations.get(a);if(!c?.open||c.scoped||c.claimed)throw Error("Flow run admission permit is invalid or already used.");if(c.workspace!==(0,j.getCurrentWorkspace)())throw Error("Flow run admission workspace mismatch.");c.scoped=!0;try{return await o.scope.run(a,b)}finally{a.release()}}function G(){let a=o.workspaces.get((0,j.getCurrentWorkspace)());return{activeRuns:o.active,reservedBytes:o.bytes,activeWorkspaces:o.workspaces.size,workspaceActiveRuns:a?.active??0,workspaceReservedBytes:a?.bytes??0,workspaceConversations:a?.conversations.size??0,rejectedBusy:o.rejectedBusy,rejectedMemory:o.rejectedMemory,rejectedInput:o.rejectedInput,...q(),minReservationBytes:1048576,inputExpansion:4}}},572687:(a,b,c)=>{"use strict";c.d(b,{H6:()=>y,MI:()=>s,Sc:()=>u});var d=c(973024),e=c(176760),f=c.n(e),g=c(446193),h=c(16698),i=c(977598),j=c(907986),k=c(879628),l=c(619335),m=c(437175);let n=globalThis,o=n.__flujoPublicationIntentContextV1??=new h.AsyncLocalStorage,p=n.__flujoPublicationIntentProcessV1??={token:(0,i.randomUUID)(),startedAt:Date.now()-Math.round(1e3*process.uptime()),live:new Set};async function q(a){let b,c;if(p.live.has(a))return;try{b=await d.promises.open(a,d.constants.O_RDONLY|(d.constants.O_NOFOLLOW??0))}catch(a){return"ENOENT"===a.code?"gone":void 0}let e={};try{c=await b.stat({bigint:!0});try{e=JSON.parse(await b.readFile("utf8"))??{}}catch{}}catch{return}finally{await b.close().catch(()=>void 0)}if(!c.isFile())return;if(e.process===p.token)return c;let f="number"==typeof e.startedAt?e.startedAt:Number(c.mtimeMs);return Date.now()-f>6e5?c:"number"==typeof e.pid?e.pid!==process.pid&&function(a){try{return process.kill(a,0),!0}catch(a){return"EPERM"===a.code}}(e.pid)?void 0:c:f<p.startedAt?c:void 0}async function r(a,b){try{let c=await d.promises.lstat(a,{bigint:!0});w(c,b)&&await d.promises.unlink(a)}catch{}}async function s(a,b){let c,e=f().join((0,j.getWorkspaceDataDir)(),"db","conversation-publications",`${a}.json`),g=o.getStore();if(g?.live&&g.filename===e)return b();await x(),await u(()=>d.promises.mkdir(f().dirname(e),{recursive:!0}));let h=await u(()=>d.promises.lstat(f().dirname(e),{bigint:!0}));if(!h.isDirectory()||h.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","publication intent directory is unsafe");let i=Date.now()+15e3;for(let a=0;!c;a++)try{c=await d.promises.open(e,"wx",384)}catch(c){if("EEXIST"!==c.code)throw new m.MO("CONVERSATION_PUBLICATION_IO","could not create a publication intent",{cause:c});let b=a<3?await q(e):void 0;if(b){"gone"!==b&&await r(e,b);continue}if(Date.now()>=i)throw new m.MO("CONVERSATION_PUBLICATION_BUSY","another FLUJO process is still writing this conversation");await new Promise(b=>setTimeout(b,Math.min(1e3,50*2**a)))}p.live.add(e);try{return await t(c,e,h,a,b)}finally{p.live.delete(e)}}async function t(a,b,c,e,g){let h,j;try{h=await a.stat({bigint:!0}),await a.writeFile(JSON.stringify({version:2,conversationId:e,token:(0,i.randomUUID)(),startedAt:Date.now(),pid:process.pid,process:p.token}))}catch(c){try{await a.close()}catch{(0,m.B_)("intent descriptor closure is uncertain",void 0,!0,{intent:b})}throw(0,m.B_)("publication intent did not finish",c,!1,{intent:b})}try{await a.close()}catch(a){throw(0,m.B_)("intent descriptor closure is uncertain",a,!0,{intent:b})}let k={filename:b,live:!0};try{return await o.run(k,g)}catch(a){throw j=a}finally{try{await (0,m.l7)()}catch(a){void 0===j&&(j=a)}if(k.live=!1,!(0,m.by)())try{await x();let a=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.lstat(f().dirname(b),{bigint:!0});if(!h||!v(a,h)||!e.isDirectory()||e.isSymbolicLink()||e.dev!==c.dev||e.ino!==c.ino)throw Error("Publication intent identity changed");await d.promises.unlink(b)}catch{}if(void 0!==j)throw j}}async function u(a){try{return await a()}catch(a){if((0,m.sE)(a)||a instanceof Error&&"ConversationSequenceSafetyError"===a.name)throw a;throw new m.MO("CONVERSATION_PUBLICATION_IO","required durable publication failed",{cause:a})}}let v=(a,b)=>a.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===b.dev&&a.ino===b.ino,w=(a,b)=>v(a,b)&&a.size===b.size&&a.mtimeNs===b.mtimeNs&&a.ctimeNs===b.ctimeNs;async function x(){await (0,k.qy)(),await (0,l.QO)()}async function y(a,b){await x();let c=f().dirname(a);await u(()=>d.promises.mkdir(c,{recursive:!0}));let e=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!e.isDirectory()||e.isSymbolicLink())throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log directory is unsafe");let g=await u(()=>d.promises.open(a,d.constants.O_RDWR|d.constants.O_CREAT|(d.constants.O_NOFOLLOW??0),384)),h={filename:a};try{let f=await u(()=>g.stat({bigint:!0}));if(!f.isFile()||f.nlink!==BigInt(1)||f.size>BigInt(Number.MAX_SAFE_INTEGER))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation log is not a regular owned file");let i=f,j=Number(f.size);h={filename:a,dev:String(f.dev),ino:String(f.ino),start:String(f.size)};let k=async()=>{let b=await u(()=>d.promises.lstat(a,{bigint:!0})),f=await u(()=>g.stat({bigint:!0})),j=await u(()=>d.promises.lstat(c,{bigint:!0}));if(!w(f,i)||!w(b,i)||!j.isDirectory()||j.isSymbolicLink()||j.dev!==e.dev||j.ino!==e.ino)throw(0,m.B_)("conversation log identity or appended suffix changed",void 0,!1,h);await x()};await k();let l=!1;if(j>0){let a=Buffer.alloc(1),{bytesRead:b}=await u(()=>g.read(a,0,1,j-1));l=1===b&&10!==a[0]}let n=l,o=async a=>{let b=0;for(;b<a.length;){let c=await g.write(a,b,a.length-b,j);if(!c.bytesWritten)throw Error("Conversation log made no write progress");b+=c.bytesWritten,j+=c.bytesWritten}},p=async a=>{try{let b=await g.stat({bigint:!0});if(!v(b,f)||b.size<BigInt(a))return!1;return b.size!==BigInt(a)&&(await g.truncate(a),await g.sync()),i=await g.stat({bigint:!0}),j=a,i.size===BigInt(a)}catch{return!1}};return await b({activeMessageIds:()=>u(()=>z(g,Number(f.size))),append:async a=>{await k();let b=j;try{for(let b of(l&&await o(Buffer.from("\n")),(0,m.gm)(a,!0)))await o(b);if(await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==BigInt(j))throw(0,m.B_)("conversation append completion has no owned suffix witness",void 0,!1,h);await k(),l=!1}catch(a){if(await p(b))throw new m.MO("CONVERSATION_PUBLICATION_IO","conversation append did not finish and was rolled back",{cause:a});throw(0,m.B_)("conversation append outcome requires reconciliation",a,!1,{...h,acknowledgedEnd:String(j)})}},rollback:async()=>{await k();try{if(await g.truncate(Number(f.size)),await g.sync(),i=await g.stat({bigint:!0}),!v(i,f)||i.size!==f.size)throw Error("Rollback size changed");j=Number(f.size),l=n,await k()}catch(a){throw(0,m.B_)("conversation rollback requires reconciliation",a,!1,h)}}})}finally{try{await g.close()}catch{}}}async function z(a,b){(0,m.Ev)(0x2000000);let c=Buffer.alloc(65536),d=new g.StringDecoder("utf8"),e=new Set,f=new Map,h=[],i="",j=0,k="",l=!1,n=!1,o=!1,p=0,q=!1,r=!1,s=0,t=0,u=0,v=0,w=()=>{throw new m.MO("CONVERSATION_PUBLICATION_MEMORY","transcript metadata exceeds its bounded rewrite policy")},x=()=>{h=[],i="",j=0,u=0,v=0},y=a=>{j+a.length>1048576&&w(),j+=a.length;for(let b=0;b<a.length;){let c=Math.min(4096-i.length,a.length-b);i+=a.slice(b,b+c),b+=c,4096===i.length&&(h.push(Buffer.from(i,"utf16le").toString("utf16le")),i="")}},z=()=>{let a;if(r){r=!1,x();return}i&&h.push(i);let b=h.join("");if(x(),b.trim()){try{a=JSON.parse(b)}catch{return}if(a?.type==="message"&&a.message&&"system"!==a.message.role){let b=a.message.id;if(null===b&&w(),"string"!=typeof b||!b)return;b.length>4096&&w();let c=b;if(e.has(c)&&/^stream_codex_item_/.test(c)){let a=(f.get(c)??1)+1;f.set(c,a),c=`${c}_legacy_${a}`}else f.has(c)||((t+=c.length)>1048576&&w(),f.set(c,1));e.has(c)||(e.add(c),p+=c.length),(e.size>65536||f.size>65536||p>1048576)&&w()}else a?.type==="message:removed"&&(null===a.messageId&&w(),"string"==typeof a.messageId&&e.delete(a.messageId)&&(p-=a.messageId.length))}},A=a=>{for(let b=0;b<a.length;b++){let c=a[b];if(q){if(" "===c||" "===c||"\r"===c)continue;y(":"===c?'""':"null"),q=!1}if("\n"===c){l?(x(),r=!1):z(),l=!1,n=!1,k="",o=!1,s=0;continue}if(!l){"{"===c||"["===c?++u>128&&w():("}"===c||"]"===c)&&u--,'{[,"'.includes(c)&&++v>262144&&w(),'"'===c?(l=!0,k='"',o=!1):y(c);continue}!o&&(k+=c).length>24578&&(o=!0,k=""),s?(/[0-9a-f]/i.test(c)||(r=!0),s--):n?(n=!1,"u"===c?s=4:'"\\/bfnrt'.includes(c)||(r=!0)):"\\"===c?n=!0:'"'===c?(l=!1,o?q=!0:y(k),k=""):32>c.charCodeAt(0)&&(r=!0)}};for(let e=0;e<b;){let{bytesRead:f}=await a.read(c,0,Math.min(c.length,b-e),e);if(!f)throw Error("Conversation log changed while reading rewrite metadata");e+=f,A(d.write(c.subarray(0,f)))}return A(d.end()),q&&y("null"),l||z(),[...e]}},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:()=>W,ln:()=>S,N2:()=>Q,bB:()=>ar,U2:()=>an,U3:()=>aj,Vx:()=>V,al:()=>ah,JV:()=>al,$G:()=>at,pL:()=>as,av:()=>au,EI:()=>aq,loadItem:()=>O,H0:()=>N,Jk:()=>ag,w5:()=>av,Ch:()=>am,l_:()=>ao,Vt:()=>ap,VH:()=>M,Gl:()=>ai,Pv:()=>H,c0:()=>P,Zf:()=>L});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),A=c(437175),B=c(572687);let C=(0,v.h)("utils/storage/backend"),D=()=>g().join((0,x.getWorkspaceDataDir)(),"db"),E=()=>g().join((0,w.ok)(),".next","storage"),F=a=>g().join(D(),`${a}.json`);async function G(){let a=D(),b=E();try{await e.promises.access(a),C.verbose(`Storage directory exists: ${a}`)}catch{C.debug(`Creating storage directory: ${a}`),await e.promises.mkdir(a,{recursive:!0})}try{await e.promises.access(b),C.warn(`Old storage directory found: ${b}. This may cause data inconsistency issues.`)}catch{}}async function H(){for(let a of(C.debug("Verifying storage system initialization"),await G(),Object.values(u.Zg)))try{let b=F(a),c=!1;try{await e.promises.access(b),c=!0}catch{}C.debug(`Storage check: ${a} - ${c?"File exists":"File does not exist yet"}`);let d=g().join(E(),`${a}.json`);try{await e.promises.access(d),c?C.warn(`Found ${a} in both old and new storage locations. This may cause data inconsistency.`):C.warn(`Found ${a} in old storage location but not in new location. This may cause data loss.`)}catch{}}catch(b){C.error(`Storage verification failed for ${a}:`,b)}C.debug("Storage verification completed")}let I=new Map,J=new Set(["EPERM","EBUSY","EACCES"]);async function K(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||!J.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 L(a,b,c){let f,i=!1,j=async a=>{try{await a()}catch(a){throw i=!0,f=a,a}},k=a=>"string"==typeof b?a():(0,B.Sc)(a);await (0,y.af)(a),await (0,z.withWorkspaceMutation)(async()=>{let l,m;await (0,y.af)(a),await j(()=>(0,z.qy)());let n=g().dirname(a);await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),await k(()=>e.promises.mkdir(n,{recursive:!0}));let o=await k(()=>e.promises.lstat(n,{bigint:!0})),p=await k(()=>e.promises.realpath(n));(!o.isDirectory()||o.isSymbolicLink())&&await k(async()=>{throw Error("Atomic write parent is unsafe")});let q=`${a}.tmp.${(0,h.randomUUID)()}`,r=!1,s=!1,t=!1,u=!1;try{await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()));let f=await e.promises.open(q,"wx",384);r=!0;try{if(l=await f.stat({bigint:!0}),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),"string"==typeof b)await f.writeFile(b);else{let a=0,c=(0,h.createHash)("sha256");for(let d of(0,A.gm)([b.value],!1)){c.update(d);let b=0;for(;b<d.length;){let c=await f.write(d,b,d.length-b,a+b);if(!c.bytesWritten)throw Error("Conversation snapshot made no write progress");b+=c.bytesWritten}a+=d.length}m=c.digest("hex")}await j(()=>(0,z.qy)()),await f.sync(),await j(()=>(0,z.qy)()),l=await f.stat({bigint:!0})}catch(a){try{await f.close()}catch{u=!0,"string"!=typeof b&&(0,A.B_)("snapshot descriptor closure is uncertain",void 0,!0)}throw a}if(!u)try{await f.close()}catch(a){if(u=!0,"string"!=typeof b)throw(0,A.B_)("snapshot descriptor closure is uncertain",a,!0);throw a}await K(q,a,async()=>{let[a,b,f]=await Promise.allSettled([e.promises.lstat(q,{bigint:!0}),e.promises.lstat(n,{bigint:!0}),e.promises.realpath(n)]);if("rejected"===a.status)throw a.reason;if("rejected"===b.status)throw b.reason;if("rejected"===f.status)throw f.reason;let g=a.value,h=b.value,i=f.value;if(!l||!g.isFile()||g.isSymbolicLink()||g.nlink!==BigInt(1)||g.dev!==l.dev||g.ino!==l.ino||g.size!==l.size||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid||!h.isDirectory()||h.isSymbolicLink()||h.dev!==o.dev||h.ino!==o.ino||h.mode!==o.mode||h.uid!==o.uid||h.gid!==o.gid||i!==p)throw Error("Atomic write file or parent changed");await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)()),c&&(await j(()=>c()),await j(()=>(0,z.qy)()),await j(()=>(0,d.QO)())),s=!0}),r=!1,t=!0,"string"!=typeof b&&(0,A.oK)(),await j(()=>(0,z.qy)())}catch(c){if("string"!=typeof b&&s&&!t&&l){let b=async a=>{try{return await e.promises.lstat(a,{bigint:!0})}catch(a){if("ENOENT"===a.code)return;throw a}};try{let c=await e.promises.lstat(n,{bigint:!0}),d=await e.promises.realpath(n);if(!c.isDirectory()||c.isSymbolicLink()||c.dev!==o.dev||c.ino!==o.ino||d!==p)throw Error("Snapshot commit parent changed");let f=await b(a),g=await b(q),i=a=>a?.isFile()&&!a.isSymbolicLink()&&a.nlink===BigInt(1)&&a.dev===l.dev&&a.ino===l.ino&&a.size===l.size;if(i(f)){let b,c=await e.promises.open(a,e.constants.O_RDONLY|e.constants.O_NONBLOCK|(e.constants.O_NOFOLLOW??0));try{let b=await c.stat({bigint:!0});if(!i(b)||b.mtimeNs!==f.mtimeNs||b.ctimeNs!==f.ctimeNs)throw Error("Snapshot readback identity changed");let d=Buffer.alloc(65536),g=(0,h.createHash)("sha256"),j=0;for(;j<Number(l.size);){let{bytesRead:a}=await c.read(d,0,Math.min(d.length,Number(l.size)-j),j);if(!a)throw Error("Snapshot readback ended early");j+=a,g.update(d.subarray(0,a))}let k=await c.stat({bigint:!0}),n=await e.promises.lstat(a,{bigint:!0});if(!i(k)||k.mtimeNs!==b.mtimeNs||k.ctimeNs!==b.ctimeNs||!i(n)||n.mtimeNs!==k.mtimeNs||n.ctimeNs!==k.ctimeNs||g.digest("hex")!==m)throw Error("Snapshot readback bytes changed")}catch(a){throw b=a,a}finally{try{await c.close()}catch(c){let a=(0,A.B_)("snapshot readback descriptor closure is uncertain",c,!0);if(void 0===b)throw a}}(0,A.oK)(),r=!1}else if(!i(g)||g.mtimeNs!==l.mtimeNs||g.ctimeNs!==l.ctimeNs||g.mode!==l.mode||g.uid!==l.uid||g.gid!==l.gid)throw Error("Snapshot commit has no exclusive owned witness")}catch(b){throw(0,A.B_)("snapshot rename outcome requires reconciliation",b,!1,{destination:a,temporary:q,dev:String(l.dev),ino:String(l.ino),size:String(l.size)})}}if(r&&!u)try{let a=await e.promises.lstat(q,{bigint:!0});l&&a.isFile()&&!a.isSymbolicLink()&&a.dev===l.dev&&a.ino===l.ino&&await e.promises.unlink(q)}catch{}if(i&&c===f)throw c;await k(async()=>{throw c})}})}async function M(a,b,c){let d=F(a);if(a.startsWith("conversations/")){let e=a.slice(14);return S(e),(0,A.JN)((0,x.workspaceCacheKey)("conversation-publication",e),b,a=>(0,A.Sg)(()=>(0,z.withWorkspaceMutation)(()=>(0,B.MI)(e,()=>L(d,{conversation:!0,value:a},c)))))}await (0,y.af)(d),await (0,z.withWorkspaceMutation)(async()=>{let e=(0,x.workspaceCacheKey)("item",a),f=(I.get(e)??Promise.resolve()).catch(()=>{}).then(()=>L(d,JSON.stringify(b,null,2),c));I.set(e,f);try{await f,C.verbose(`Successfully saved item to: ${d}`)}catch(b){throw C.error(`Error saving item with key "${a}" to ${d}:`,b),b}finally{I.get(e)===f&&I.delete(e)}})}async function N(a,b){let c,d=F(a);await (0,y.af)(d),await G();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 O(a,b){if(a.startsWith("conversations/"))return P(a.slice(14),async a=>void 0===a?b:a);await (0,y.af)(F(a));try{await G();let c=F(a),d=await e.promises.readFile(c,"utf-8");if(0===d.trim().length)return C.warn(`Item with key "${a}" at ${c} is empty; treating as missing and returning default.`),b;try{let a=JSON.parse(d);return C.verbose(`Successfully loaded item from: ${c}`),a}catch(b){C.error(`CRITICAL: Failed to parse JSON from ${c}:`,b);let a=`${c}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,d),C.info(`Created backup of corrupted file at: ${a}`)}catch(a){C.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 C.verbose(`Item with key "${a}" not found at ${F(a)}, returning default.`),b;throw C.error(`CRITICAL: Error loading item with key "${a}" from ${F(a)}:`,c),c}}async function P(a,b,c={}){let d;c.signal?.throwIfAborted(),S(a);let f=F(`conversations/${a}`);await (0,y.af)(f),await G();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){C.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 Q(a){let b=F(a);await (0,y.af)(b),await (0,z.withWorkspaceMutation)(async()=>{await (0,y.af)(b);try{await e.promises.unlink(b),C.verbose(`Successfully cleared item: ${b}`)}catch(c){"ENOENT"!==c.code?C.warn(`Error clearing item with key "${a}" at ${b}:`,c):C.verbose(`Item with key "${a}" not found at ${b}, nothing to clear.`)}})}let R=/^[A-Za-z0-9_-]{1,64}$/;function S(a){if("string"!=typeof a||!R.test(a))throw Error(`Unsafe collection item id: ${JSON.stringify(a)}`)}let T=a=>g().join(D(),a),U=(a,b)=>g().join(T(a),`${b}.json`);async function V(a,b){S(b);try{let c=await e.promises.stat(U(a,b));return{mtimeMs:c.mtimeMs,sizeBytes:c.size}}catch(a){if("ENOENT"===a.code)return null;throw a}}let W=["persona-memories","persona-mailbox","persona-work-items","persona-activities","persona-lease-history"],X=new Set(W);function Y(a){if(!X.has(a))throw Error(`Unsupported Persona-sharded collection: ${JSON.stringify(a)}`)}function Z(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 $(a,b){return Y(a),S(b),U(a,b)}function _(a,b,c){Y(a),S(b),S(c);let d=T(a),e=g().join(d,b,`${c}.json`);return Z(d,e),e}async function aa(a){try{return await e.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}}async function ab(a,b,c){Y(a),S(b);let d=T(a),f=g().join(d,b);Z(d,f),c&&await e.promises.mkdir(d,{recursive:!0});let h=await aa(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 aa(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 Z(j,k),f}async function ac(a){return s(a,D())}async function ad(a){return(await ac(a))?.content??null}function ae(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 af 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 ag(a,b,c,d,e){Y(a),S(b),S(c);let f=await ab(a,b,!1),g=_(a,b,c),h=$(a,c),[i,j]=await Promise.all([f?ad(g):Promise.resolve(null),e?.includeLegacy===!1?Promise.resolve(null):ad(h)]);if(null!==i&&null!==j&&i!==j)throw new af(a,b,c);let k=i??j;return null===k?d:ae(k,a,b,c)}async function ah(a,b,c){Y(a),S(b),S(c);let d=await ab(a,b,!1),e=_(a,b,c),f=$(a,c),[g,h]=await Promise.all([d?ac(e):Promise.resolve(null),ac(f)]);if(g&&h&&g.content!==h.content)throw new af(a,b,c);let i=g??h;return i?(ae(i.content,a,b,c),{mtimeMs:i.mtimeMs,sizeBytes:i.sizeBytes}):null}async function ai(a,b,c,f){if(Y(a),S(b),S(c),f.id!==c||f.personaId!==b)throw Error("Persona-sharded save identity does not match its destination.");let g=_(a,b,c),h=$(a,c);await ao(`persona-shard/${a}/${b}/${c}`,async()=>{await ab(a,b,!0);let i=await ad(h);null!==i&&ae(i,a,b,c),await L(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 aj(a,b,c){Y(a),S(b),S(c);let d=_(a,b,c),f=$(a,c);await ao(`persona-shard/${a}/${b}/${c}`,async()=>{let g=await ab(a,b,!1),[h,i]=await Promise.all([g?ad(d):Promise.resolve(null),ad(f)]);null!==h&&ae(h,a,b,c),null!==i&&ae(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 ak(a,b){let c=await ab(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);S(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 ab(a,b,!1)}})).toString("utf8");f.push(ae(l,a,b,d))}return f}async function al(a){Y(a);let b=T(a),c=await aa(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(S(c.name),await ak(a,c.name))){let d=JSON.stringify(b),e=f.get(b.id);if(e&&e.content!==d)throw new af(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);S(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.`);S(d.personaId);let j=ae(i,a,d.personaId,h),k=JSON.stringify(j),l=f.get(h);if(l&&l.content!==k)throw new af(a,d.personaId,h);f.set(h,{content:k,value:j})}return[...f.values()].map(({value:a})=>a)}async function am(a,b,c){Y(a),S(b),S(c);let f=_(a,b,c),g=$(a,c);return ao(`persona-shard/${a}/${b}/${c}`,async()=>{let h=await ab(a,b,!1),[i,j]=await Promise.all([h?ad(f):Promise.resolve(null),ad(g)]);if(null!==i&&ae(i,a,b,c),null!==j&&ae(j,a,b,c),null!==i&&null!==j&&i!==j)throw new af(a,b,c);if(null===j)return null===i?"missing":"already-migrated";if(null===i&&(await ab(a,b,!0),await L(f,j),await ad(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 an(a,b){Y(a),S(b),await ao(`persona-shard/${a}/${b}`,async()=>{let c=await ab(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 ao(a,b){return(0,z.withWorkspaceMutation)(async()=>{let c=(0,x.workspaceCacheKey)("chain",a),d=(I.get(c)??Promise.resolve()).catch(()=>{}).then(b);return I.set(c,d),d.catch(()=>{}).finally(()=>{I.get(c)===d&&I.delete(c)}),d})}async function ap(a,b,c){S(b);let d=U(a,b);if("conversations"===a)return(0,A.JN)((0,x.workspaceCacheKey)("conversation-publication",b),c,a=>(0,A.Sg)(()=>(0,z.withWorkspaceMutation)(()=>(0,B.MI)(b,()=>L(d,{conversation:!0,value:a})))));try{await ao(`${a}/${b}`,()=>L(d,JSON.stringify(c,null,2))),C.verbose(`Successfully saved collection item: ${d}`)}catch(c){throw C.error(`Error saving collection item "${a}/${b}" to ${d}:`,c),c}}async function aq(a,b,c){if(S(b),"conversations"===a)return P(b,async a=>void 0===a?c:a);let d=U(a,b);try{let f=await e.promises.readFile(d,"utf-8");if(0===f.trim().length)return C.warn(`Collection item "${a}/${b}" at ${d} is empty; treating as missing.`),c;try{return JSON.parse(f)}catch(b){C.error(`CRITICAL: Failed to parse JSON from ${d}:`,b);let a=`${d}.corrupted.${Date.now()}.bak`;try{await e.promises.writeFile(a,f),C.info(`Created backup of corrupted file at: ${a}`)}catch(a){C.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 C.verbose(`Collection item "${a}/${b}" not found at ${d}, returning default.`),c;throw C.error(`CRITICAL: Error loading collection item "${a}/${b}" from ${d}:`,e),e}}async function ar(a,b){S(b);let c=U(a,b);await ao(`${a}/${b}`,async()=>{try{await (0,d.QO)(),await e.promises.unlink(c),C.verbose(`Successfully deleted collection item: ${c}`)}catch(d){if("ENOENT"!==d.code)throw d;C.verbose(`Collection item "${a}/${b}" not found at ${c}, nothing to delete.`)}})}async function as(a){let b,c=T(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){C.warn(`Collection item file ${b} is empty; skipping.`);continue}d.push(JSON.parse(a))}catch(a){C.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function at(a){let b,c=T(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);S(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 au(a){let b,c=T(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){C.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){C.error(`Failed to read collection item ${b}; skipping.`,a)}}return d}async function av(a,b,c){let f,g,h=F(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 C.error(`Migration: legacy ${a}.json is not valid JSON; leaving it in place.`,b),0}if(!Array.isArray(g))return C.error(`Migration: legacy ${a}.json is not an array; leaving it in place.`),0;for(let a of(await e.promises.mkdir(T(b),{recursive:!0}),g)){let d;try{d=c(a),S(d)}catch(a){C.error(`Migration: skipping ${b} item with invalid/unsafe id`,a);continue}let f=U(b,d);try{await e.promises.access(f),C.debug(`Migration: ${b}/${d} already exists; keeping the existing file.`);continue}catch{}await L(f,JSON.stringify(a,null,2))}return await (0,d.QO)(),await e.promises.rename(h,`${h}.migrated-${Date.now()}.bak`),C.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(68159),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(44201)]).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()}},750231:(a,b,c)=>{"use strict";c.d(b,{RI:()=>i,XF:()=>j,rF:()=>h});let d=globalThis;function e(a){if(void 0===a)return 0;if(!a||"object"!=typeof a)throw Error("Invalid existing allocation ledger.");let b=Object.getOwnPropertyDescriptor(a,"bytes");if(!b||!("value"in b)||!Number.isSafeInteger(b.value)||b.value<0)throw Error("Invalid existing allocation ledger.");return b.value}let f=d.__flujoAllocationReservationsV1??={run:e(d.__flujoFlowRunAdmission),preparation:e(d.__flujoSubflowPreparation),output:e(d.__flujoSubflowOutput),ingress:e(d.__flujoChatIngressV1),publication:e(d.__flujoConversationPublicationV1)};function g(a,b){if(!["run","preparation","output","ingress","publication"].includes(a)||!Number.isSafeInteger(b)||b<0)throw Error("Invalid allocation reservation observation.")}function h(a,b){g(a,b),f[a]=b}function i(){return Object.freeze({...f,total:f.run+f.preparation+f.output+f.ingress+f.publication})}function j(a,b){return g(a,b),f.run+f.preparation+f.output+f.ingress+f.publication-f[a]+b}f.publication??=e(d.__flujoConversationPublicationV1)},774755:(a,b,c)=>{"use strict";c.d(b,{Zg:()=>d.Zg});var d=c(326042)},777943:(a,b,c)=>{"use strict";a.exports=c(707553).vendored["react-rsc"].ReactServerDOMWebpackServer},792711:(a,b,c)=>{"use strict";c.d(b,{Ov:()=>l,l:()=>m,qV:()=>k,rF:()=>i});var d=c(977598),e=c(18963);let f=["openai:read","openai:execute","mcp:access","control:admin","secrets:read","avatar:voice"],g=e.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),h=e.object({id:e.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),digest:e.string().regex(/^[a-f0-9]{64}$/),scopes:e.array(e.enum(f)).min(1).max(f.length).refine(a=>new Set(a).size===a.length),issuedAt:g,expiresAt:g,revokedAt:g.nullable(),workspaceId:e.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/).refine(a=>!/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i.test(a)).optional()}).strict().refine(a=>a.expiresAt>a.issuedAt).refine(a=>void 0===a.workspaceId||a.scopes.every(a=>"avatar:voice"===a)),i=e.object({schemaVersion:e.literal(1),ownerId:e.string().regex(/^[a-zA-Z0-9_-]{1,64}$/),credentials:e.array(h).max(128)}).strict().superRefine((a,b)=>{(new Set(a.credentials.map(a=>a.id)).size!==a.credentials.length||new Set(a.credentials.map(a=>a.digest)).size!==a.credentials.length)&&b.addIssue({code:"custom",message:"Duplicate credential identity"})});function j(a){return(0,d.createHash)("sha256").update(a,"utf8").digest()}function k(a,b,c=Date.now(),e={}){let f=`flo_v1_${(0,d.randomBytes)(32).toString("base64url")}`,g=h.parse({id:(0,d.randomBytes)(16).toString("hex"),digest:j(f).toString("hex"),scopes:[...a],issuedAt:c,expiresAt:b,revokedAt:null,...void 0===e.workspaceId?{}:{workspaceId:e.workspaceId}});return{token:f,record:g}}function l(a,b,c=Date.now()){let e=/^Bearer[ \t]+(flo_v1_[A-Za-z0-9_-]{43})[ \t]*$/i.exec(a.headers.get("authorization")??"");if(!e||!Number.isSafeInteger(c)||c<0)return null;let f=j(e[1]),g=b.credentials.find(a=>(0,d.timingSafeEqual)(f,Buffer.from(a.digest,"hex")));return!g||null!==g.revokedAt||g.issuedAt>c||g.expiresAt<=c?null:Object.freeze({ownerId:b.ownerId,credentialId:g.id,scopes:Object.freeze([...g.scopes]),...void 0===g.workspaceId?{}:{workspaceId:g.workspaceId}})}function m(a,b){return b.every(b=>a.scopes.includes(b))}},824424:(a,b)=>{"use strict";function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
57
57
|
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`)}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},826045:(a,b,c)=>{"use strict";c.d(b,{Dw:()=>j,Tm:()=>k,af:()=>m,bV:()=>l});var d=c(973024),e=c(176760),f=c.n(e),g=c(907986);let h=["models","mcp_servers","global_env_vars","registry_account","encryption_key"];class i extends Error{constructor(){super("Credential migration is pending. Resume or roll back using its recovery passphrase."),this.name="CredentialMigrationPendingError"}}function j(a){return f().join((0,g.getWorkspaceDataDir)(a),"db",".credential-migration.pending")}async function k(a){try{return await d.promises.lstat(j(a)),!0}catch(a){return"ENOENT"!==a.code}}async function l(){if(await k())throw new i}async function m(a){let b=f().basename(a);h.some(a=>b===`${a}.json`)&&await l()}},851018:(a,b,c)=>{"use strict";c.d(b,{$$:()=>l,Gr:()=>g,IU:()=>m,Mk:()=>r,OD:()=>j,TE:()=>o,Xt:()=>u,Z7:()=>n,b:()=>s,fn:()=>f,ho:()=>q,od:()=>p,ue:()=>t,xs:()=>k});var d=c(977598);let e=(0,c(257975).promisify)(d.pbkdf2),f=6e5,g="FLUJO~";function h(a,b){return"string"==typeof a&&RegExp(`^[a-f0-9]{${2*b}}$`).test(a)}function i(a){if(!a||"object"!=typeof a||2!==a.version||!h(a.activeKey,32)||void 0!==a.legacyKey&&!h(a.legacyKey,16))throw Error("Invalid encryption keyring");return{version:2,activeKey:a.activeKey,...a.legacyKey?{legacyKey:a.legacyKey}:{}}}function j(a){return i({version:2,activeKey:(0,d.randomBytes)(32).toString("hex"),legacyKey:a})}function k(a){return(0,d.createHash)("sha256").update(Buffer.from(a.activeKey,"hex")).digest("hex")}function l(a){return(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex")}function m(a,b){if(void 0!==b&&!h(b,32))throw Error("Invalid encryption metadata revision");return`v2:${JSON.stringify({...i(a),...b?{metadataRevision:b}:{}})}`}function n(a){if(a.startsWith("v2:")){let b=JSON.parse(a.slice(3));if(void 0!==b.metadataRevision&&!h(b.metadataRevision,32))throw Error("Invalid encryption metadata revision");return{...i(b),...b.metadataRevision?{metadataRevision:b.metadataRevision}:{}}}if(h(a,16))return{legacyKey:a};throw Error("Invalid encryption session key")}function o(a){if("string"!=typeof a)return!1;try{return n(a),!0}catch{return!1}}function p(a,b,c){if(!h(b,32))throw Error("Invalid AES-256 key");let e=(0,d.randomBytes)(12),f=(0,d.createCipheriv)("aes-256-gcm",Buffer.from(b,"hex"),e);f.setAAD(Buffer.from(c));let g=Buffer.concat([f.update(a,"utf8"),f.final()]);return`v2:${e.toString("hex")}:${f.getAuthTag().toString("hex")}:${g.toString("base64")}`}function q(a,b,c){let e=a.split(":");if(4!==e.length||"v2"!==e[0]||!h(e[1],12)||!h(e[2],16)||!h(b,32)||!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(e[3]))throw Error("Invalid authenticated ciphertext");let f=(0,d.createDecipheriv)("aes-256-gcm",Buffer.from(b,"hex"),Buffer.from(e[1],"hex"));return f.setAAD(Buffer.from(c)),f.setAuthTag(Buffer.from(e[2],"hex")),Buffer.concat([f.update(Buffer.from(e[3],"base64")),f.final()]).toString("utf8")}async function r(a,b,c,g){if(g&&"user"!==b)throw Error("Invalid private key protection");let h=(0,d.randomBytes)(16),i=await e(c,h,f,32,"sha256"),j=k(a);return{encryption_version:2,encryption_type:b,key_id:j,kdf:"pbkdf2-sha256",kdf_iterations:f,...g?{key_protection:g}:{},data_encryption_salt:h.toString("hex"),data_encryption_key:p(JSON.stringify(a),i.toString("hex"),`flujo:keyring:v2:${b}:${j}${g?`:${g}`:""}`)}}async function s(a,b){if(2!==a.encryption_version||"pbkdf2-sha256"!==a.kdf||a.kdf_iterations!==f||!h(a.data_encryption_salt,16)||!h(a.key_id,32)||!["default","user"].includes(a.encryption_type??"")||void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Unsupported encryption metadata");let c=await e(b,Buffer.from(a.data_encryption_salt,"hex"),f,32,"sha256"),d=i(JSON.parse(q(a.data_encryption_key,c.toString("hex"),`flujo:keyring:v2:${a.encryption_type}:${a.key_id}${a.key_protection?`:${a.key_protection}`:""}`)));if(k(d)!==a.key_id)throw Error("Encryption key identity mismatch");return d}async function t(a,b){if(1!==a.encryption_version||!h(a.data_encryption_iv,16))throw Error("Unsupported legacy encryption metadata");let c="user"===a.encryption_type?Buffer.from(a.data_encryption_salt,"hex"):Buffer.from("flujo_fixed_salt_v1");if("user"===a.encryption_type&&!h(a.data_encryption_salt,16))throw Error("Invalid legacy encryption salt");let f=await e(b,c,1e5,32,"sha256"),g=(0,d.createDecipheriv)("aes-256-cbc",f,Buffer.from(a.data_encryption_iv,"hex")),i=Buffer.concat([g.update(Buffer.from(a.data_encryption_key,"base64")),g.final()]).toString("utf8");if(!h(i,8))throw Error("Invalid legacy encryption key");return Buffer.from(i,"utf8").toString("hex")}function u(a,b){let c=a.split(":");if(2!==c.length||!h(c[0],16)||!h(b,16)||!/^[A-Za-z0-9+/]+={0,2}$/.test(c[1]))throw Error("Invalid legacy ciphertext");let e=(0,d.createDecipheriv)("aes-128-cbc",Buffer.from(b,"hex"),Buffer.from(c[0],"hex"));return Buffer.concat([e.update(Buffer.from(c[1],"base64")),e.final()]).toString("utf8")}},858405:(a,b,c)=>{"use strict";c.d(b,{Gv:()=>m,HJ:()=>k,Ok:()=>n,Ug:()=>g,nN:()=>f,p3:()=>l});let d=Object.freeze({maxSegmentBytes:8388608,maxSegmentEvents:2e4,retentionDays:0,maxClosedSegments:30});function e(a,b,c){if(void 0===a)return b;if(!/^-?\d+$/.test(a))return null;let d=Number(a);return Number.isSafeInteger(d)&&d>=c?d:null}function f(a=process.env){let b=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_BYTES,d.maxSegmentBytes,1),c=e(a.FLUJO_PERSONA_RUNTIME_EVENT_SEGMENT_MAX_EVENTS,d.maxSegmentEvents,1),g=e(a.FLUJO_PERSONA_RUNTIME_EVENT_RETENTION_DAYS,d.retentionDays,0),h=e(a.FLUJO_PERSONA_RUNTIME_EVENT_MAX_CLOSED_SEGMENTS,d.maxClosedSegments,0);return null===b||null===c||null===g||null===h?{...d}:{maxSegmentBytes:b,maxSegmentEvents:c,retentionDays:g,maxClosedSegments:h}}let g=Object.freeze({mode:"disabled",rolloutBasisPoints:0,cohortVersion:"persona-runtime-retention-v1",criticalPersonaIds:Object.freeze([])}),h=new Set(["disabled","shadow","active"]),i=/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/,j=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;function k(a){if(!h.has(a.mode)||!Number.isSafeInteger(a.rolloutBasisPoints)||a.rolloutBasisPoints<0||a.rolloutBasisPoints>1e4||!i.test(a.cohortVersion))return null;let b=[...new Set(a.criticalPersonaIds)];return b.some(a=>!j.test(a))?null:{mode:a.mode,rolloutBasisPoints:a.rolloutBasisPoints,cohortVersion:a.cohortVersion,criticalPersonaIds:b}}function l(a=process.env){let b=a.FLUJO_PERSONA_RUNTIME_RETENTION_MODE??"disabled",c=a.FLUJO_PERSONA_RUNTIME_RETENTION_BASIS_POINTS??"0",d=a.FLUJO_PERSONA_RUNTIME_RETENTION_COHORT_VERSION??g.cohortVersion,e=a.FLUJO_PERSONA_RUNTIME_RETENTION_CRITICAL_PERSONA_IDS??"";return/^\d+$/.test(c)?k({mode:b,rolloutBasisPoints:Number(c),cohortVersion:d,criticalPersonaIds:""===e?[]:e.split(",").map(a=>a.trim())})??{...g}:{...g}}let m={LOG_LEVEL:3,INCLUDE_TOOL_CALLS_IN_RESPONSE:!0,ENABLE_EXECUTION_TRACKER:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_ADMISSION:!1,ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS:!1,get ENABLE_MCP_TASKS_CLIENT(){return"true"===process.env.FLUJO_MCP_TASKS_CLIENT},get ENABLE_MCP_TASKS_SERVER(){return"true"===process.env.FLUJO_MCP_TASKS_SERVER},ENABLE_MEMORY_CANDIDATE_EXPIRY:!0,ENABLE_MEMORY_AUTO_PROMOTION:!1,ENABLE_MEMORY_CONFLICT_SURFACING:!0,ENABLE_PERSONA_RUNTIME_RETENTION:!1,ENABLE_PERSONA_LEASE_HISTORY_PRUNING:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS:!1,ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK:!1};function n(){return m.ENABLE_PERSONA_BEHAVIOR_MAINTENANCE_DIAGNOSIS&&m.ENABLE_PERSONA_BEHAVIOR_OUTCOME_METRICS&&m.ENABLE_PERSONA_BEHAVIOR_OUTCOME_AUTO_ROLLBACK}},879628:(a,b,c)=>{"use strict";c.d(b,{B7:()=>r,Ns:()=>p,in:()=>o,qy:()=>j,withWorkspaceMutation:()=>n});var d=c(16698),e=c(907986);function f(a,b){let c=Error(`Workspace ${a?"recovery":"mutation"} ${b}.`);return c.name=a?"WorkspaceRecoveryOwnershipError":"WorkspaceMutationContextError",c}async function g(a,b,c){let d={live:!0,admission:b};b.participants+=1;let f=new Map(l.getStore()?.participants??[]);f.set(a,d);try{return await (0,e.runWithWorkspace)(a,()=>l.run({participants:f,readCaptures:l.getStore()?.readCaptures},()=>c(d)))}finally{if(d.live=!1,b.participants-=1,0===b.participants){for(let a of b.waiters)a();b.waiters.clear()}}}async function h(a){a.participants>0&&await new Promise(b=>a.waiters.add(b))}async function i(a,b){let c=b.admission.recovery,d=()=>{if(!b.live)throw f(!!c,"context has finished");if((0,e.getCurrentWorkspace)()!==a)throw f(!!c,"workspace changed");if(c?.signal?.aborted)throw f(!0,"was cancelled")};if(d(),c){try{await c.assertOwned()}catch{throw f(!0,"ownership was lost")}d()}}async function j(){let a=(0,e.normalizeWorkspaceName)((0,e.getCurrentWorkspace)()),b=l.getStore()?.participants?.get(a);if(!b)throw f(!1,"has no admitted participant");await i(a,b)}let k=globalThis.__flujoWorkspaceMutationGates??(globalThis.__flujoWorkspaceMutationGates=new Map),l=globalThis.__flujoWorkspaceMutationContext??(globalThis.__flujoWorkspaceMutationContext=new d.AsyncLocalStorage);function m(a){let b=k.get(a);return b||(b={activeMutations:0,blocked:!1,generation:0,admissionWaiters:new Set,drainWaiters:new Set},k.set(a,b)),b}async function n(a,b=(0,e.getCurrentWorkspace)()){let d=(0,e.normalizeWorkspaceName)(b),j=l.getStore();if(j&&!j.participants)throw f(!1,"context predates the current admission protocol");if(j?.readCaptures?.has(d))throw f(!1,"cannot write from a read capture");let k=j?.participants?.get(d);if(k&&!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k?.live){if(await (0,e.runWithWorkspace)(d,()=>i(d,k)),!k.live&&k.admission.recovery)throw f(!0,"context has finished");if(k.live)return(0,e.runWithWorkspace)(d,()=>g(d,k.admission,async b=>{await i(d,b);let c=await a();return await i(d,b),c}))}let o=m(d);for(;o.blocked;)await new Promise(a=>o.admissionWaiters.add(a));o.activeMutations+=1;let p={participants:0,waiters:new Set};try{let{withWorkspaceProcessMutation:b}=await Promise.all([c.e(19913),c.e(25399)]).then(c.bind(c,425399));return await (0,e.runWithWorkspace)(d,()=>b(async()=>{try{return await g(d,p,a)}finally{await h(p)}}))}finally{o.activeMutations-=1,function(a){if(0!==a.activeMutations)return;let b=[...a.drainWaiters];for(let c of(a.drainWaiters.clear(),b))c()}(o)}}async function o(a,b={}){let d,j=(0,e.normalizeWorkspaceName)(b.workspace??(0,e.getCurrentWorkspace)()),k=b.signal,l=b.timeoutMs??3e4,m=performance.now();if(k?.aborted)throw f(!0,"was cancelled");try{d=await q(j,l,k,!0)}catch(a){if(k?.aborted)throw f(!0,"was cancelled");throw a}try{let{withWorkspaceProcessSnapshot:b}=await Promise.all([c.e(19913),c.e(25399)]).then(c.bind(c,425399));return await (0,e.runWithWorkspace)(j,()=>b(async b=>{let c={participants:0,waiters:new Set,recovery:{signal:k,assertOwned:()=>b.assertOwned()}};try{let e=await g(j,c,async b=>{let c=Object.freeze({workspace:j,generation:d.generation,assertOwned:()=>i(j,b)});await c.assertOwned();let e=await a(c);return await c.assertOwned(),e});if(await h(c),k?.aborted)throw f(!0,"was cancelled");try{await b.assertOwned()}catch{throw f(!0,"ownership was lost")}if(k?.aborted)throw f(!0,"was cancelled");return e}finally{await h(c)}},{signal:k,timeoutMs:Math.max(1,l-(performance.now()-m))}))}catch(a){if(k?.aborted)throw f(!0,"was cancelled");throw a}finally{d.release()}}async function p(a,b={}){let d=(0,e.normalizeWorkspaceName)(b.workspace??(0,e.getCurrentWorkspace)()),f=b.signal,g=b.timeoutMs??3e4,h=performance.now(),i=await q(d,g,f);try{let{withWorkspaceProcessSnapshot:b}=await Promise.all([c.e(19913),c.e(25399)]).then(c.bind(c,425399));return await (0,e.runWithWorkspace)(d,()=>b(()=>{let b=l.getStore(),c=new Set(b?.readCaptures??[]);return c.add(d),l.run({participants:new Map(b?.participants??[]),readCaptures:c},()=>a(i.generation))},{signal:f,timeoutMs:Math.max(1,g-(performance.now()-h))}))}finally{i.release()}}async function q(a=(0,e.getCurrentWorkspace)(),b=3e4,c,d=!1){let g,h,i;c?.throwIfAborted();let j=(0,e.normalizeWorkspaceName)(a),k=l.getStore();if(k&&!k.participants)throw f(!1,"context predates the current admission protocol");if(k?.participants?.has(j))throw Error("A workspace snapshot cannot begin inside a workspace mutation.");let n=m(j);if(n.blocked){let a=Error("A workspace snapshot boundary is already active.");throw a.name="WorkspaceSnapshotBusyError",a}n.blocked=!0;let o=!1,p=!1,r=()=>{o||(o=!0,c?.removeEventListener("abort",s),function(a){if(!a.blocked)return;a.blocked=!1;let b=[...a.admissionWaiters];for(let c of(a.admissionWaiters.clear(),b))c()}(n))},s=()=>{p&&d||(r(),i?.(c?.reason??Error("Workspace snapshot was aborted.")))};c?.addEventListener("abort",s,{once:!0});try{n.activeMutations>0&&await Promise.race([new Promise(a=>{h=a,n.drainWaiters.add(a)}),new Promise((a,c)=>{g=setTimeout(()=>{let a=Error("Timed out waiting for workspace mutations to drain.");a.name="WorkspaceSnapshotTimeoutError",c(a)},b)}),new Promise((a,b)=>{i=b})]),c?.throwIfAborted()}catch(a){throw r(),a}finally{g&&clearTimeout(g),h&&n.drainWaiters.delete(h)}return n.generation+=1,p=!0,{generation:n.generation,release:r}}function r(a=(0,e.getCurrentWorkspace)()){let b=m((0,e.normalizeWorkspaceName)(a));return{activeMutations:b.activeMutations,blocked:b.blocked,generation:b.generation}}},907986:(a,b,c)=>{"use strict";c.r(b),c.d(b,{DEFAULT_WORKSPACE:()=>m,InvalidWorkspaceNameError:()=>q,WORKSPACE_COLORS:()=>G,WORKSPACE_NAME_PATTERN:()=>n,WORKSPACE_SUBTREES:()=>p,WorkspaceMutationError:()=>K,activeProjectOf:()=>V,assertValidWorkspaceName:()=>s,assertWorkspaceRoots:()=>L,bindToCurrentWorkspace:()=>E,createWorkspace:()=>ac,deleteWorkspace:()=>ai,ensureWorkspaceDirs:()=>ak,getCurrentWorkspace:()=>C,getWorkspaceDataDir:()=>w,getWorkspaceDbDir:()=>x,getWorkspaceDir:()=>v,getWorkspaceMcpServersDir:()=>y,getWorkspaceUserdataDir:()=>z,getWorkspacesDir:()=>u,isValidWorkspaceName:()=>r,listWorkspaces:()=>Y,loadWorkspaceRoots:()=>U,normalizeWorkspaceName:()=>t,readWorkspaceMetadata:()=>N,remapLegacyDefaultWorkspacePath:()=>A,remapLegacyDefaultWorkspaceReference:()=>function a(b,c){let d=A(b,c);if(d!==b)return d;try{let a=new URL(b);if("file:"===a.protocol){let b=(0,k.fileURLToPath)(a),d=A(b,c);if(d!==b){let b=(0,k.pathToFileURL)(d);return b.search=a.search,b.hash=a.hash,b.href}}}catch{}let e=b.indexOf("=");if(e<=0||e===b.length-1)return b;let f=b.slice(0,e+1),g=b.slice(e+1),h="";g.length>=2&&('"'===g[0]||"'"===g[0])&&g.at(-1)===g[0]&&(h=g[0],g=g.slice(1,-1));let i=a(g,c);return i===g?b:`${f}${h}${i}${h}`},renameWorkspace:()=>af,runWithWorkspace:()=>D,sameFilesystemPath:()=>W,updateWorkspaceMetadata:()=>T,updateWorkspaceRoots:()=>ah,withWorkspaceNamespaceMutation:()=>ad,workspaceCacheKey:()=>F,workspaceColor:()=>I,workspaceColorIndex:()=>H,workspaceExists:()=>Z});var d=c(333873),e=c.n(d),f=c(79748),g=c.n(f),h=c(629021),i=c(584297),j=c(455511),k=c(379551),l=c(134887);let m="default-workspace",n=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,o=/^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])$/i,p=["db","mcp-servers","userdata","snapshots","screenshots","recordings","browser-profile","bash-utils","artifacts"];class q extends Error{constructor(a){super(`Invalid workspace name: ${JSON.stringify(a)}. Workspace names must match /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/ and must not be a reserved Windows device name.`),this.code="INVALID_WORKSPACE_NAME",this.name="InvalidWorkspaceNameError",this.value=a}}function r(a){return"string"==typeof a&&n.test(a)&&!o.test(a)}function s(a){if(!r(a))throw new q(a);return a}function t(a){return null==a||"string"==typeof a&&""===a.trim()?m:s(a)}function u(){return e().join((0,l.ok)(),"workspaces")}function v(a){let b=t(a),c=u(),d=e().resolve(c,b),f=e().relative(c,d);if(""===f||f.startsWith("..")||e().isAbsolute(f))throw new q(a);return d}function w(a){return v(a??C())}function x(a){return e().join(w(a),"db")}function y(a){return e().join(w(a),"mcp-servers")}function z(a){return e().join(w(a),"userdata")}function A(a,b){if("string"!=typeof a||!e().isAbsolute(a)||C()!==m)return a;let c=e().join((0,l.ok)(),b),d=e().relative(c,a);if(""===d||d.startsWith("..")||e().isAbsolute(d))return a;let[f]=d.split(e().sep);if(!f)return a;let g=e().join(c,f),i=e().join(w(m),b,f),j=!1;try{let a=(0,h.lstatSync)(g);j=!a.isDirectory()||a.isSymbolicLink()||(0,h.readdirSync)(g).length>0}catch(a){"ENOENT"!==a.code&&(j=!0)}let k=!1;try{let a=(0,h.lstatSync)(i);k=!a.isSymbolicLink()&&(a.isDirectory()||a.isFile())}catch{k=!1}return j||!k?a:e().join(w(m),b,d)}function B(){return global.__flujo_workspace_als||(global.__flujo_workspace_als=new i.AsyncLocalStorage),global.__flujo_workspace_als}function C(){let a=B().getStore();return a&&r(a)?a:m}function D(a,b){let c=t(a);return B().run(c,b)}function E(a){let b=C();return(...c)=>D(b,()=>a(...c))}function F(...a){return[C(),...a].join("\0")}let G=["#6656E8","#10A8C3","#2E9E5B","#D2761B","#C2417E","#7A57C9","#1F86D0","#B4453A"];function H(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b%G.length}function I(a){return a===m?G[0]:G[H(a)]}let J=".workspace.json";class K extends Error{constructor(a,b){super(b),this.code=a,this.name="WorkspaceMutationError"}}function L(a){if(!Array.isArray(a))throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be a list.");let b=function(a){if(!Array.isArray(a))return[];let b=[],c=new Set;for(let d of a.slice(0,64)){if("string"!=typeof d)continue;let a=d.trim();if(!a||a.length>4096||!e().isAbsolute(a))continue;let f=e().normalize(a),g="win32"===process.platform?f.toLowerCase():f;c.has(g)||(c.add(g),b.push(f))}return b}(a);if(b.length!==a.length)throw new K("WORKSPACE_INVALID_ROOTS","Workspace folders must be unique absolute filesystem paths.");return b}async function M(a){try{let b=JSON.parse(await g().readFile(e().join(a,J),"utf8"));return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}catch(a){if("ENOENT"===a.code)return{};throw a}}async function N(a){return M(v(t(a??C())))}let O=globalThis,P=O.__flujoWorkspaceMetadataWritesV1??=new Map,Q=new Set(["EPERM","EBUSY","EACCES"]);async function R(a,b){for(let c=1;;c+=1)try{await g().rename(a,b);return}catch(b){let a=b.code;if(c>=15||!a||!Q.has(a))throw b;await new Promise(a=>setTimeout(a,Math.min(100,5*2**(c-1))+10*Math.random()))}}async function S(a){try{return await M(a)}catch(a){if(a instanceof SyntaxError)return{};throw a}}async function T(a,b){let d=s(a),f=(P.get(d)??Promise.resolve()).catch(()=>void 0).then(async()=>{let{withWorkspaceMutation:a}=await Promise.resolve().then(c.bind(c,879628));return a(async()=>{let a=await ab(d),c=await S(a),f=b(c);if(f===c)return c;let h=e().join(a,J),i=e().join(a,`${J}.${process.pid}.${(0,j.randomUUID)()}.tmp`);await g().writeFile(i,`${JSON.stringify(f,null,2)}
|
|
58
58
|
`,{encoding:"utf8",flag:"wx"});try{await R(i,h)}catch(a){throw await g().rm(i,{force:!0}),a}return f},d)});P.set(d,f);try{return await f}finally{P.get(d)===f&&P.delete(d)}}async function U(a){return L((await N(a)).roots??[])}function V(a,b){let c="string"==typeof a.activeProject?a.activeProject:void 0;return void 0===c?void 0:b.find(a=>W(a,c))}function W(a,b){let c=e().resolve(a),d=e().resolve(b);return"win32"===process.platform?c.toLowerCase()===d.toLowerCase():c===d}async function X(a){let b=await N(a),c=L(b.roots??[]);return{name:a,color:I(a),isDefault:a===m,roots:c,activeProject:V(b,c)}}async function Y(){let a=u(),b=new Set([m]),c=[];try{c=await g().readdir(a,{withFileTypes:!0})}catch(a){if("ENOENT"===a.code)c=[];else throw a}let d=new Map;for(let a of c){if(!r(a.name))continue;let b=a.name.toLowerCase(),c=d.get(b)??[];c.push(a.name),d.set(b,c)}for(let a of c)if(r(a.name)&&!((d.get(a.name.toLowerCase())?.length??0)>1)){if(a.isDirectory()){b.add(a.name);continue}if(a.isSymbolicLink())continue}return Promise.all([...b].sort((a,b)=>a===m?-1:b===m?1:a.localeCompare(b)).map(X))}async function Z(a){if(!r(a))return!1;try{let b=(await g().readdir(u(),{withFileTypes:!0})).filter(b=>r(b.name)&&b.name.toLowerCase()===a.toLowerCase());if(1!==b.length||b[0].name!==a)return!1;let c=await g().lstat(v(a));return c.isDirectory()&&!c.isSymbolicLink()}catch(a){if("ENOENT"===a.code)return!1;throw a}}async function $(a,b){let c=await g().lstat(a);if(!c.isDirectory()||c.isSymbolicLink())throw Error(`${b} must be a real directory, not a file, symlink, or junction: ${a}`)}async function _(a,b){try{await $(a,b)}catch(c){if("ENOENT"!==c.code)throw c;await g().mkdir(a,{recursive:!0}),await $(a,b)}}async function aa(){let a=(0,l.ok)(),b=u();return await _(a,"FLUJO data root"),await _(b,"Workspaces root"),b}async function ab(a){let b,c,d=s(a),f=u();try{b=await g().readdir(f)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}let h=b.filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(1!==h.length||h[0]!==d)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist or is ambiguous on disk.`);let i=v(d);try{c=await g().lstat(i)}catch(a){if("ENOENT"===a.code)throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} does not exist.`);throw a}if(!c.isDirectory()||c.isSymbolicLink())throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is not a managed directory.`);let[j,k]=await Promise.all([g().realpath(f),g().realpath(i)]),l=e().relative(j,k);if(""===l||l.startsWith("..")||e().isAbsolute(l))throw new K("WORKSPACE_NOT_FOUND",`Workspace ${JSON.stringify(d)} is outside the managed workspace root.`);return i}async function ac(a){return ad(()=>ae(a))}async function ad(a){let b=C(),{withWorkspaceRuntimeLock:d}=await Promise.all([c.e(19913),c.e(25399)]).then(c.bind(c,425399));return D(m,()=>d("workspace-namespace",()=>D(b,a)))}async function ae(a){let b=s(a);if(b===m)throw new K("WORKSPACE_ALREADY_EXISTS",`Workspace ${JSON.stringify(m)} already exists.`);let d=await aa();if((await g().readdir(d)).filter(a=>r(a)&&a.toLowerCase()===b.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);let e=v(b);try{await g().mkdir(e)}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(b)} already exists.`);throw a}try{await ak(b);let{migrateShippedMcpServers:a}=await Promise.all([c.e(8464),c.e(61274)]).then(c.bind(c,661274));await D(b,()=>a())}catch(a){throw await g().rm(e,{recursive:!0,force:!0}),a}return X(b)}async function af(a,b){return ad(()=>ag(a,b))}async function ag(a,b){let c=s(a),d=s(b);if(c===m||d===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be renamed or replaced.");if(c===d)return X(c);if(c.toLowerCase()===d.toLowerCase())throw new K("WORKSPACE_ALREADY_EXISTS","Case-only workspace renames are not supported.");let e=await ab(c),f=u();if((await g().readdir(f)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase()).length>0)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);try{await g().rename(e,v(d))}catch(a){if("EEXIST"===a.code)throw new K("WORKSPACE_ALREADY_EXISTS",`A workspace named ${JSON.stringify(d)} already exists.`);throw a}return X(d)}async function ah(a,b){let c=s(a),d=L(b);return await T(c,a=>({...a,roots:d})),X(c)}async function ai(a){return ad(()=>aj(a))}async function aj(a){let b=s(a);if(b===m)throw new K("DEFAULT_WORKSPACE_PROTECTED","default-workspace cannot be deleted.");let d=await ab(b),{stopAndDrainPersonaGoalRuntime:e}=await 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(29620),c.e(74107),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(92967),c.e(7937),c.e(61992),c.e(22698),c.e(17319),c.e(36009),c.e(51835)]).then(c.bind(c,412537));await D(b,()=>e());let{mcpService:f}=await 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(29620),c.e(83829),c.e(19913),c.e(25399),c.e(51161),c.e(21453),c.e(65326),c.e(79365),c.e(89667),c.e(8464),c.e(62377),c.e(42248),c.e(51459),c.e(31519),c.e(39099),c.e(78591)]).then(c.bind(c,110844)),h=await D(b,()=>f.disconnectAll("workspace deletion")),i=new Set(h.failed);for(let a of h.shutdownReceipts)("unknown"===a.exitOutcome||a.isolation?.cleanupOutcome==="unknown")&&i.add(a.serverName);if(i.size>0)throw Error(`Cannot delete workspace while ${i.size} MCP server(s) remain open.`);for(let a=0;a<5;a++)try{await g().rm(d,{recursive:!0,force:!0});return}catch(c){let b=c.code;if(4!==a&&("EBUSY"===b||"EPERM"===b)){let b=100*Math.pow(2,a);await new Promise(a=>setTimeout(a,b));continue}throw c}}async function ak(a){let b=v(a),c=await aa(),d=e().basename(b),f=(await g().readdir(c)).filter(a=>r(a)&&a.toLowerCase()===d.toLowerCase());if(f.some(a=>a!==d)||f.length>1)throw Error(`Workspace name ${JSON.stringify(d)} conflicts with a case alias on disk: `+f.join(", "));await _(b,`Workspace ${d}`);let h=await g().realpath(c),i=await g().realpath(b),j=e().relative(h,i);if(""===j||j.startsWith("..")||e().isAbsolute(j))throw Error(`Workspace directory escapes the workspaces root: ${b}`);for(let a of p){let c=e().join(b,a);await _(c,`Workspace subtree ${a}`)}return b}},930100:(a,b,c)=>{"use strict";c.d(b,{BE:()=>M,C3:()=>T,C4:()=>w,Do:()=>L,Dr:()=>x,FO:()=>F,Gz:()=>P,OS:()=>Q,QF:()=>N,SO:()=>H,YO:()=>E,e3:()=>U,eS:()=>R,hO:()=>D,pF:()=>K,ri:()=>O,s$:()=>V});var d=c(973024),e=c(176760),f=c.n(e),g=c(977598),h=c(610782),i=c(774755),j=c(907986),k=c(266844),l=c(158601),m=c(851018),n=c(826045),o=c(879628),p=c(720929),q=c(388100),r=c(580940),s=c(134887),t=c(472178);let u=(0,k.h)("utils/encryption/secure"),v="flujo:secret:v2";class w extends Error{constructor(a="Encryption is locked: unlock with your password before accessing secrets"){super(a),this.name="EncryptionLockedError",Object.setPrototypeOf(this,w.prototype)}}class x extends Error{constructor(){super("Run credential migration preflight and confirm migration to retire the public-default active key before enabling private encryption."),this.name="CredentialMigrationRequiredError"}}async function y(a){let b=global.__flujo_encryption_metadata_locks??=new Map,c=(0,j.workspaceCacheKey)("encryption-metadata"),d=(b.get(c)??Promise.resolve()).catch(()=>void 0).then(a);b.set(c,d);try{return await d}finally{b.get(c)===d&&b.delete(c)}}async function z(){let a=await (0,h.loadItem)(i.Zg.ENCRYPTION_KEY,null);if(null==a){let a=f().join((0,j.getWorkspaceDataDir)(),"db",`${i.Zg.ENCRYPTION_KEY}.json`);try{await d.promises.lstat(a)}catch(a){if("ENOENT"===a.code)return null;throw a}throw Error("Existing encryption metadata is empty or invalid; restore it from a matching workspace backup")}if("object"!=typeof a||Array.isArray(a))throw Error("Invalid encryption metadata");if(![1,2].includes(a.encryption_version))throw Error("Unsupported encryption metadata version");if(void 0!==a.encryption_type&&!["default","user"].includes(a.encryption_type))throw Error("Invalid encryption type");if(void 0!==a.key_protection&&("user"!==a.encryption_type||!["passphrase","operator-file"].includes(a.key_protection)))throw Error("Invalid key protection");return a}async function A(a,b,c,e,k=!1){(0,q.hA)(),await (0,n.bV)();let l=await (0,m.Mk)(a,b,c,e);if(k){let a=f().join((0,j.getWorkspaceDataDir)(),"db",`${i.Zg.ENCRYPTION_KEY}.json`),b=`${a}.initial.${(0,g.randomUUID)()}`;try{await (0,h.Zf)(b,JSON.stringify(l));try{await d.promises.link(b,a)}catch(a){if("EEXIST"!==a.code)throw a}let c=await z();if(!c)throw Error("Private encryption initialization did not commit");return c}finally{try{await d.promises.unlink(b)}catch(a){if("ENOENT"!==a.code)throw a}}}return await (0,o.withWorkspaceMutation)(async()=>{await (0,n.bV)();let b=await z();if(b?.encryption_version===2&&b.key_id!==(0,m.xs)(a))throw new w("Encryption key changed; retry using current metadata");await (0,h.VH)(i.Zg.ENCRYPTION_KEY,l)}),l}async function B(){let a=await z();if(a)return a;let b=(0,p.Z)();if(!b&&(0,r.ye)())throw new w("Restore the worker workspace encryption metadata before accessing credentials");return b?A((0,m.OD)(),"user",b,"operator-file",!0):A((0,m.OD)(),"default",m.Gr,void 0,!0)}async function C(a,b){if(2===a.encryption_version)return(0,m.b)(a,b);let c=await (0,m.ue)(a,b),d=(0,m.OD)(c);return await A(d,a.encryption_type??"default",b),d}async function D(){try{return await y(async()=>(await B(),!0))}catch{return u.error("Could not initialize encryption metadata"),!1}}async function E(a){if(!a||a===m.Gr)return!1;try{return await y(async()=>{let b=await z();if(b?.encryption_type==="user")return!1;if(b?.encryption_version===2)throw new x;let c=b?(0,m.OD)(await (0,m.ue)(b,m.Gr)):(0,m.OD)();return(await A(c,"user",a,"passphrase",!b)).key_id===(0,m.xs)(c)})}catch(a){if(a instanceof x)throw a;return u.error("Could not initialize password encryption"),!1}}async function F(a,b){if(!b||b===m.Gr)return!1;try{return await y(async()=>{let c=await z();if(!c)return!1;if(2===c.encryption_version&&"user"!==c.encryption_type)throw new x;let d="operator-file"===c.key_protection?(0,p.Z)():"user"===c.encryption_type?a:m.Gr;if(!d)return!1;let e=2===c.encryption_version?await (0,m.b)(c,d):(0,m.OD)(await (0,m.ue)(c,d)),f=await A(e,"user",b,"passphrase");return(0,l.eu)()&&(0,l.YM)((0,m.IU)(e,(0,m.$$)(f))),!0})}catch(a){if(a instanceof x)throw a;return u.error("Could not change encryption password"),!1}}async function G(a){let b=f().resolve((0,j.getWorkspaceDataDir)());if(f().resolve(a)!==b)throw new w("Worker transfer root mismatch");await (0,t.V$)((0,s.ok)(),f().join(b,"probe"));let c=await d.promises.lstat(b,{bigint:!0}),e=await d.promises.realpath(b);if(!c.isDirectory()||c.isSymbolicLink()||""!==f().relative(b,e))throw new w("Worker transfer root is unavailable");return{root:e,rootDevice:c.dev.toString(),rootInode:c.ino.toString()}}async function H(a,b){await y(async()=>{if(!(0,r.ye)()||b.workspace!==(0,j.getCurrentWorkspace)()||await (0,n.Tm)())throw new w("Worker transfer is unavailable");let c=await G(b.root),d=await z(),e=(0,m.Z7)(a);if(!d||"user"!==d.encryption_type||"operator-file"===d.key_protection&&2!==d.encryption_version||2===d.encryption_version&&(!("activeKey"in e)||(0,m.xs)(e)!==d.key_id||void 0!==e.metadataRevision&&e.metadataRevision!==(0,m.$$)(d)||("operator-file"===d.key_protection||"passphrase"===d.key_protection)&&void 0===e.metadataRevision)||1===d.encryption_version&&!("legacyKey"in e))throw new w("Worker transfer does not match encryption metadata");if(JSON.stringify(await G(b.root))!==JSON.stringify(c))throw new w("Worker transfer root changed");(0,l.YM)(a),"operator-file"===d.key_protection&&"activeKey"in e&&(0,l.ip)({workspace:b.workspace,...c,keyId:(0,m.xs)(e),metadataRevision:(0,m.$$)(d)})})}async function I(a){if(!(0,r.ye)()||void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)return null;let b=(0,l.Fc)();if(!b||b.workspace!==(0,j.getCurrentWorkspace)()||"operator-file"!==a.key_protection||"user"!==a.encryption_type||b.metadataRevision!==(0,m.$$)(a)||b.keyId!==a.key_id)return null;let c=await G(b.root);if(c.root!==b.root||c.rootDevice!==b.rootDevice||c.rootInode!==b.rootInode)return null;let d=(0,l.eu)();if(!d)return null;let e=(0,m.Z7)(d);return"activeKey"in e&&e.metadataRevision===b.metadataRevision&&(0,m.xs)(e)===b.keyId?e:null}async function J(a,b=!1,c=!1){return y(async()=>{if(await (0,n.Tm)())throw new w("Credential migration is pending; resume or roll back it before unlocking");let d=c?await B():await z();if(!d)throw new w("Restore matching encryption metadata before decrypting credentials");if("operator-file"===d.key_protection){let a=await I(d);return a||(0,q.oc)(d,z)}if((0,q.hA)(),"user"!==d.encryption_type)return C(d,m.Gr);if(a&&!b)return C(d,a);let e=b&&a?(0,l.bA)(a):(0,l.eu)();if(!e)throw new w;let f=(0,m.Z7)(e);if("activeKey"in f&&(void 0!==f.metadataRevision&&f.metadataRevision!==(0,m.$$)(d)||"passphrase"===d.key_protection&&void 0===f.metadataRevision)||2===d.encryption_version&&(!("activeKey"in f)||(0,m.xs)(f)!==d.key_id))throw new w("Encryption metadata changed; unlock this workspace again");return f}).catch(a=>{if((0,q.hA)(),a instanceof q.dJ)throw new w(a.message);throw a})}async function K(a,b,c=!1){try{let d=await J(b,c,!0);if(!("activeKey"in d))throw new w("Unlock with your password to upgrade legacy encryption before saving secrets");return(0,m.od)(a,d.activeKey,v)}catch(a){if(a instanceof w)throw a;return u.error("Secret encryption failed; no plaintext value will be saved"),null}}async function L(a,b,c=!1){try{let d=await J(b,c);if(a.startsWith("v2:")){if(!("activeKey"in d))return null;return(0,m.ho)(a,d.activeKey,v)}if(!d.legacyKey)return null;return(0,m.Xt)(a,d.legacyKey)}catch(a){if(a instanceof w)throw a;return u.error("Secret decryption failed: invalid credentials, metadata or ciphertext"),null}}async function M(a){try{return await y(async()=>{let b=await z();if(!b||"user"!==b.encryption_type||"operator-file"===b.key_protection)return{valid:!1};let c=await C(b,a),d=await z();if(!d||d.key_id!==(0,m.xs)(c))return{valid:!1};let e=(0,m.IU)(c,(0,m.$$)(d));return(0,l.YM)(e),{valid:!0,token:(0,l.jw)(e)}})}catch{return{valid:!1}}}async function N(a){let b=await M(a);return b.valid?b.token??null:null}async function O(a){return(0,l.ui)(a),!0}async function P(){return await z()!==null}async function Q(a){return y(async()=>{await (0,n.bV)();let b=await z();if(!b||"operator-file"!==b.key_protection||(0,m.$$)(b)!==(0,m.$$)(a))throw new w("Worker snapshot encryption metadata changed");let c=await I(b);if(c)return(0,m.IU)(c,(0,m.$$)(b));let d=await (0,q.oc)(b,z);return(0,m.IU)(d,(0,m.$$)(b))}).catch(a=>{if((0,q.hA)(),a instanceof q.dJ)throw new w(a.message);throw a})}async function R(){let a=await z();return a?.encryption_type==="user"&&"operator-file"!==a.key_protection}async function S(){if(await (0,n.Tm)())return(0,q.hA)(),!0;let a=await z();if(!a&&void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE)try{a=await y(B)}catch{return!0}if(!a)return(0,q.hA)(),(0,r.ye)();let b=(0,l.eu)();if(b)try{let c=(0,m.Z7)(b);if("activeKey"in c&&void 0!==c.metadataRevision&&c.metadataRevision!==(0,m.$$)(a))return(0,q.hA)(),!0}catch{return(0,q.hA)(),!0}if("operator-file"===a.key_protection)try{if(await I(a))return!1;return await (0,q.oc)(a,z),!1}catch{return(0,q.hA)(),!0}return(0,q.hA)(),await R()&&(0,l.c$)()}async function T(){try{return await S()}catch(a){throw(0,q.hA)(),a}}async function U(){let a=await z();return a?a.encryption_type??"default":null}async function V(){if(await (0,n.Tm)())return{initialized:!0,locked:!0,protection:"migration-pending"};let a=await T(),b=await z();return{initialized:null!==b,locked:a,protection:b?b.key_protection??("user"===b.encryption_type?"passphrase":"legacy-default"):void 0!==process.env.FLUJO_ENCRYPTION_SECRET_FILE?"operator-file":"uninitialized"}}}};
|