@cuna_labs/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +9 -0
- package/README.md +169 -0
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/capability-evidence.d.ts +19 -0
- package/dist/api/capability-evidence.d.ts.map +1 -0
- package/dist/api/capability-evidence.js +38 -0
- package/dist/api/capability-evidence.js.map +1 -0
- package/dist/api/client.d.ts +167 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +937 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/contracts.d.ts +345 -0
- package/dist/api/contracts.d.ts.map +1 -0
- package/dist/api/contracts.js +976 -0
- package/dist/api/contracts.js.map +1 -0
- package/dist/api/execution-workspaces.d.ts +17 -0
- package/dist/api/execution-workspaces.d.ts.map +1 -0
- package/dist/api/execution-workspaces.js +46 -0
- package/dist/api/execution-workspaces.js.map +1 -0
- package/dist/api/http.d.ts +76 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +838 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/managed-executions.d.ts +37 -0
- package/dist/api/managed-executions.d.ts.map +1 -0
- package/dist/api/managed-executions.js +80 -0
- package/dist/api/managed-executions.js.map +1 -0
- package/dist/api/observer-v2-schema.d.ts +206 -0
- package/dist/api/observer-v2-schema.d.ts.map +1 -0
- package/dist/api/observer-v2-schema.js +264 -0
- package/dist/api/observer-v2-schema.js.map +1 -0
- package/dist/api/observer-v2.d.ts +33 -0
- package/dist/api/observer-v2.d.ts.map +1 -0
- package/dist/api/observer-v2.js +60 -0
- package/dist/api/observer-v2.js.map +1 -0
- package/dist/api/owner-observe-grants-v2-schema.d.ts +678 -0
- package/dist/api/owner-observe-grants-v2-schema.d.ts.map +1 -0
- package/dist/api/owner-observe-grants-v2-schema.js +887 -0
- package/dist/api/owner-observe-grants-v2-schema.js.map +1 -0
- package/dist/api/owner-observe-grants-v2.d.ts +268 -0
- package/dist/api/owner-observe-grants-v2.d.ts.map +1 -0
- package/dist/api/owner-observe-grants-v2.js +604 -0
- package/dist/api/owner-observe-grants-v2.js.map +1 -0
- package/dist/api/provider-v2-schema.d.ts +293 -0
- package/dist/api/provider-v2-schema.d.ts.map +1 -0
- package/dist/api/provider-v2-schema.js +381 -0
- package/dist/api/provider-v2-schema.js.map +1 -0
- package/dist/api/provider-v2.d.ts +55 -0
- package/dist/api/provider-v2.d.ts.map +1 -0
- package/dist/api/provider-v2.js +54 -0
- package/dist/api/provider-v2.js.map +1 -0
- package/dist/api/remote-workspace.d.ts +29 -0
- package/dist/api/remote-workspace.d.ts.map +1 -0
- package/dist/api/remote-workspace.js +62 -0
- package/dist/api/remote-workspace.js.map +1 -0
- package/dist/api/supervisor-live-update.d.ts +248 -0
- package/dist/api/supervisor-live-update.d.ts.map +1 -0
- package/dist/api/supervisor-live-update.js +434 -0
- package/dist/api/supervisor-live-update.js.map +1 -0
- package/dist/api/terminal-reason.d.ts +5 -0
- package/dist/api/terminal-reason.d.ts.map +1 -0
- package/dist/api/terminal-reason.js +12 -0
- package/dist/api/terminal-reason.js.map +1 -0
- package/dist/auth/browser-handoff.d.ts +59 -0
- package/dist/auth/browser-handoff.d.ts.map +1 -0
- package/dist/auth/browser-handoff.js +33 -0
- package/dist/auth/browser-handoff.js.map +1 -0
- package/dist/auth/browser.d.ts +11 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +47 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/human-client.d.ts +39 -0
- package/dist/auth/human-client.d.ts.map +1 -0
- package/dist/auth/human-client.js +66 -0
- package/dist/auth/human-client.js.map +1 -0
- package/dist/auth/human-contracts.d.ts +52 -0
- package/dist/auth/human-contracts.d.ts.map +1 -0
- package/dist/auth/human-contracts.js +229 -0
- package/dist/auth/human-contracts.js.map +1 -0
- package/dist/auth/human-session.d.ts +48 -0
- package/dist/auth/human-session.d.ts.map +1 -0
- package/dist/auth/human-session.js +902 -0
- package/dist/auth/human-session.js.map +1 -0
- package/dist/auth/onboarding-state.d.ts +31 -0
- package/dist/auth/onboarding-state.d.ts.map +1 -0
- package/dist/auth/onboarding-state.js +52 -0
- package/dist/auth/onboarding-state.js.map +1 -0
- package/dist/auth/pkce.d.ts +15 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +19 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/bin/cuna.d.ts +3 -0
- package/dist/bin/cuna.d.ts.map +1 -0
- package/dist/bin/cuna.js +4 -0
- package/dist/bin/cuna.js.map +1 -0
- package/dist/build-identity.d.ts +20 -0
- package/dist/build-identity.d.ts.map +1 -0
- package/dist/build-identity.js +77 -0
- package/dist/build-identity.js.map +1 -0
- package/dist/cli/command-help.d.ts +9 -0
- package/dist/cli/command-help.d.ts.map +1 -0
- package/dist/cli/command-help.js +324 -0
- package/dist/cli/command-help.js.map +1 -0
- package/dist/cli/help.d.ts +40 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +256 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/output.d.ts +28 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +95 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/parser.d.ts +65 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +294 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/process-entrypoint.d.ts +18 -0
- package/dist/cli/process-entrypoint.d.ts.map +1 -0
- package/dist/cli/process-entrypoint.js +26 -0
- package/dist/cli/process-entrypoint.js.map +1 -0
- package/dist/cli/run.d.ts +114 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +1969 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/commands/commands.d.ts +74 -0
- package/dist/commands/commands.d.ts.map +1 -0
- package/dist/commands/commands.js +2814 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +323 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/infra-contract-witness.d.ts +29 -0
- package/dist/config/infra-contract-witness.d.ts.map +1 -0
- package/dist/config/infra-contract-witness.js +30 -0
- package/dist/config/infra-contract-witness.js.map +1 -0
- package/dist/core/browser-url.d.ts +2 -0
- package/dist/core/browser-url.d.ts.map +1 -0
- package/dist/core/browser-url.js +20 -0
- package/dist/core/browser-url.js.map +1 -0
- package/dist/core/deployed-wire-compatibility.d.ts +15 -0
- package/dist/core/deployed-wire-compatibility.d.ts.map +1 -0
- package/dist/core/deployed-wire-compatibility.js +15 -0
- package/dist/core/deployed-wire-compatibility.js.map +1 -0
- package/dist/core/errors.d.ts +59 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +82 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/exit-codes.d.ts +68 -0
- package/dist/core/exit-codes.d.ts.map +1 -0
- package/dist/core/exit-codes.js +84 -0
- package/dist/core/exit-codes.js.map +1 -0
- package/dist/core/instant.d.ts +60 -0
- package/dist/core/instant.d.ts.map +1 -0
- package/dist/core/instant.js +90 -0
- package/dist/core/instant.js.map +1 -0
- package/dist/core/namespace.d.ts +171 -0
- package/dist/core/namespace.d.ts.map +1 -0
- package/dist/core/namespace.js +227 -0
- package/dist/core/namespace.js.map +1 -0
- package/dist/core/observation-budget.d.ts +185 -0
- package/dist/core/observation-budget.d.ts.map +1 -0
- package/dist/core/observation-budget.js +209 -0
- package/dist/core/observation-budget.js.map +1 -0
- package/dist/core/product-web.d.ts +81 -0
- package/dist/core/product-web.d.ts.map +1 -0
- package/dist/core/product-web.js +87 -0
- package/dist/core/product-web.js.map +1 -0
- package/dist/core/validation.d.ts +90 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +199 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/credentials/contracts.d.ts +82 -0
- package/dist/credentials/contracts.d.ts.map +1 -0
- package/dist/credentials/contracts.js +2 -0
- package/dist/credentials/contracts.js.map +1 -0
- package/dist/credentials/errors.d.ts +19 -0
- package/dist/credentials/errors.d.ts.map +1 -0
- package/dist/credentials/errors.js +16 -0
- package/dist/credentials/errors.js.map +1 -0
- package/dist/credentials/index.d.ts +6 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +6 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/local-session.d.ts +101 -0
- package/dist/credentials/local-session.d.ts.map +1 -0
- package/dist/credentials/local-session.js +839 -0
- package/dist/credentials/local-session.js.map +1 -0
- package/dist/credentials/secret-material.d.ts +17 -0
- package/dist/credentials/secret-material.d.ts.map +1 -0
- package/dist/credentials/secret-material.js +49 -0
- package/dist/credentials/secret-material.js.map +1 -0
- package/dist/credentials/vault.d.ts +41 -0
- package/dist/credentials/vault.d.ts.map +1 -0
- package/dist/credentials/vault.js +719 -0
- package/dist/credentials/vault.js.map +1 -0
- package/dist/daemon/endpoint.d.ts +29 -0
- package/dist/daemon/endpoint.d.ts.map +1 -0
- package/dist/daemon/endpoint.js +66 -0
- package/dist/daemon/endpoint.js.map +1 -0
- package/dist/daemon/journal.d.ts +62 -0
- package/dist/daemon/journal.d.ts.map +1 -0
- package/dist/daemon/journal.js +299 -0
- package/dist/daemon/journal.js.map +1 -0
- package/dist/daemon/lease.d.ts +25 -0
- package/dist/daemon/lease.d.ts.map +1 -0
- package/dist/daemon/lease.js +94 -0
- package/dist/daemon/lease.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +14 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +29 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/protocol.d.ts +65 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +194 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/daemon/supervisor.d.ts +29 -0
- package/dist/daemon/supervisor.d.ts.map +1 -0
- package/dist/daemon/supervisor.js +87 -0
- package/dist/daemon/supervisor.js.map +1 -0
- package/dist/daemon/views.d.ts +31 -0
- package/dist/daemon/views.d.ts.map +1 -0
- package/dist/daemon/views.js +86 -0
- package/dist/daemon/views.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/journey/api-effects.d.ts +59 -0
- package/dist/journey/api-effects.d.ts.map +1 -0
- package/dist/journey/api-effects.js +386 -0
- package/dist/journey/api-effects.js.map +1 -0
- package/dist/journey/derived-identity.d.ts +91 -0
- package/dist/journey/derived-identity.d.ts.map +1 -0
- package/dist/journey/derived-identity.js +123 -0
- package/dist/journey/derived-identity.js.map +1 -0
- package/dist/journey/index.d.ts +6 -0
- package/dist/journey/index.d.ts.map +1 -0
- package/dist/journey/index.js +6 -0
- package/dist/journey/index.js.map +1 -0
- package/dist/journey/intent.d.ts +36 -0
- package/dist/journey/intent.d.ts.map +1 -0
- package/dist/journey/intent.js +191 -0
- package/dist/journey/intent.js.map +1 -0
- package/dist/journey/orchestrator.d.ts +140 -0
- package/dist/journey/orchestrator.d.ts.map +1 -0
- package/dist/journey/orchestrator.js +415 -0
- package/dist/journey/orchestrator.js.map +1 -0
- package/dist/journey/provider-launch-intent.d.ts +12 -0
- package/dist/journey/provider-launch-intent.d.ts.map +1 -0
- package/dist/journey/provider-launch-intent.js +40 -0
- package/dist/journey/provider-launch-intent.js.map +1 -0
- package/dist/journey/remote-workspace.d.ts +34 -0
- package/dist/journey/remote-workspace.d.ts.map +1 -0
- package/dist/journey/remote-workspace.js +91 -0
- package/dist/journey/remote-workspace.js.map +1 -0
- package/dist/journey/root-entry.d.ts +56 -0
- package/dist/journey/root-entry.d.ts.map +1 -0
- package/dist/journey/root-entry.js +19 -0
- package/dist/journey/root-entry.js.map +1 -0
- package/dist/journey/selection.d.ts +165 -0
- package/dist/journey/selection.d.ts.map +1 -0
- package/dist/journey/selection.js +565 -0
- package/dist/journey/selection.js.map +1 -0
- package/dist/journey/session-failure.d.ts +4 -0
- package/dist/journey/session-failure.d.ts.map +1 -0
- package/dist/journey/session-failure.js +28 -0
- package/dist/journey/session-failure.js.map +1 -0
- package/dist/journey/workspace-effects.d.ts +30 -0
- package/dist/journey/workspace-effects.d.ts.map +1 -0
- package/dist/journey/workspace-effects.js +348 -0
- package/dist/journey/workspace-effects.js.map +1 -0
- package/dist/local-actions/broker.d.ts +32 -0
- package/dist/local-actions/broker.d.ts.map +1 -0
- package/dist/local-actions/broker.js +400 -0
- package/dist/local-actions/broker.js.map +1 -0
- package/dist/local-actions/browser-action.d.ts +78 -0
- package/dist/local-actions/browser-action.d.ts.map +1 -0
- package/dist/local-actions/browser-action.js +307 -0
- package/dist/local-actions/browser-action.js.map +1 -0
- package/dist/local-actions/callback-relay.d.ts +45 -0
- package/dist/local-actions/callback-relay.d.ts.map +1 -0
- package/dist/local-actions/callback-relay.js +265 -0
- package/dist/local-actions/callback-relay.js.map +1 -0
- package/dist/local-actions/clipboard.d.ts +3 -0
- package/dist/local-actions/clipboard.d.ts.map +1 -0
- package/dist/local-actions/clipboard.js +18 -0
- package/dist/local-actions/clipboard.js.map +1 -0
- package/dist/local-actions/contracts.d.ts +63 -0
- package/dist/local-actions/contracts.d.ts.map +1 -0
- package/dist/local-actions/contracts.js +18 -0
- package/dist/local-actions/contracts.js.map +1 -0
- package/dist/local-actions/desktop-presentation.d.ts +141 -0
- package/dist/local-actions/desktop-presentation.d.ts.map +1 -0
- package/dist/local-actions/desktop-presentation.js +253 -0
- package/dist/local-actions/desktop-presentation.js.map +1 -0
- package/dist/local-actions/device-selection.d.ts +43 -0
- package/dist/local-actions/device-selection.d.ts.map +1 -0
- package/dist/local-actions/device-selection.js +154 -0
- package/dist/local-actions/device-selection.js.map +1 -0
- package/dist/local-actions/executor.d.ts +49 -0
- package/dist/local-actions/executor.d.ts.map +1 -0
- package/dist/local-actions/executor.js +329 -0
- package/dist/local-actions/executor.js.map +1 -0
- package/dist/local-actions/file-transfers.d.ts +141 -0
- package/dist/local-actions/file-transfers.d.ts.map +1 -0
- package/dist/local-actions/file-transfers.js +446 -0
- package/dist/local-actions/file-transfers.js.map +1 -0
- package/dist/local-actions/foreground-notifications.d.ts +45 -0
- package/dist/local-actions/foreground-notifications.d.ts.map +1 -0
- package/dist/local-actions/foreground-notifications.js +163 -0
- package/dist/local-actions/foreground-notifications.js.map +1 -0
- package/dist/local-actions/git-signing.d.ts +39 -0
- package/dist/local-actions/git-signing.d.ts.map +1 -0
- package/dist/local-actions/git-signing.js +135 -0
- package/dist/local-actions/git-signing.js.map +1 -0
- package/dist/local-actions/index.d.ts +19 -0
- package/dist/local-actions/index.d.ts.map +1 -0
- package/dist/local-actions/index.js +19 -0
- package/dist/local-actions/index.js.map +1 -0
- package/dist/local-actions/local-service-actions.d.ts +87 -0
- package/dist/local-actions/local-service-actions.d.ts.map +1 -0
- package/dist/local-actions/local-service-actions.js +347 -0
- package/dist/local-actions/local-service-actions.js.map +1 -0
- package/dist/local-actions/loopback.d.ts +5 -0
- package/dist/local-actions/loopback.d.ts.map +1 -0
- package/dist/local-actions/loopback.js +15 -0
- package/dist/local-actions/loopback.js.map +1 -0
- package/dist/local-actions/policy-store.d.ts +7 -0
- package/dist/local-actions/policy-store.d.ts.map +1 -0
- package/dist/local-actions/policy-store.js +70 -0
- package/dist/local-actions/policy-store.js.map +1 -0
- package/dist/local-actions/policy.d.ts +21 -0
- package/dist/local-actions/policy.d.ts.map +1 -0
- package/dist/local-actions/policy.js +43 -0
- package/dist/local-actions/policy.js.map +1 -0
- package/dist/local-actions/private-port-forward.d.ts +36 -0
- package/dist/local-actions/private-port-forward.d.ts.map +1 -0
- package/dist/local-actions/private-port-forward.js +154 -0
- package/dist/local-actions/private-port-forward.js.map +1 -0
- package/dist/local-actions/provider-mcp-config.d.ts +101 -0
- package/dist/local-actions/provider-mcp-config.d.ts.map +1 -0
- package/dist/local-actions/provider-mcp-config.js +166 -0
- package/dist/local-actions/provider-mcp-config.js.map +1 -0
- package/dist/local-actions/providers.d.ts +12 -0
- package/dist/local-actions/providers.d.ts.map +1 -0
- package/dist/local-actions/providers.js +42 -0
- package/dist/local-actions/providers.js.map +1 -0
- package/dist/local-actions/schemas.d.ts +4 -0
- package/dist/local-actions/schemas.d.ts.map +1 -0
- package/dist/local-actions/schemas.js +314 -0
- package/dist/local-actions/schemas.js.map +1 -0
- package/dist/local-actions/sensitive-consent.d.ts +32 -0
- package/dist/local-actions/sensitive-consent.d.ts.map +1 -0
- package/dist/local-actions/sensitive-consent.js +47 -0
- package/dist/local-actions/sensitive-consent.js.map +1 -0
- package/dist/machines/command-launch.d.ts +17 -0
- package/dist/machines/command-launch.d.ts.map +1 -0
- package/dist/machines/command-launch.js +52 -0
- package/dist/machines/command-launch.js.map +1 -0
- package/dist/machines/execution-receipt.d.ts +18 -0
- package/dist/machines/execution-receipt.d.ts.map +1 -0
- package/dist/machines/execution-receipt.js +87 -0
- package/dist/machines/execution-receipt.js.map +1 -0
- package/dist/machines/executions-screen.d.ts +6 -0
- package/dist/machines/executions-screen.d.ts.map +1 -0
- package/dist/machines/executions-screen.js +410 -0
- package/dist/machines/executions-screen.js.map +1 -0
- package/dist/machines/explorer.d.ts +75 -0
- package/dist/machines/explorer.d.ts.map +1 -0
- package/dist/machines/explorer.js +1726 -0
- package/dist/machines/explorer.js.map +1 -0
- package/dist/machines/live-supervisor-update.d.ts +325 -0
- package/dist/machines/live-supervisor-update.d.ts.map +1 -0
- package/dist/machines/live-supervisor-update.js +513 -0
- package/dist/machines/live-supervisor-update.js.map +1 -0
- package/dist/machines/machine-first.d.ts +123 -0
- package/dist/machines/machine-first.d.ts.map +1 -0
- package/dist/machines/machine-first.js +119 -0
- package/dist/machines/machine-first.js.map +1 -0
- package/dist/machines/opencode-supervisor.d.ts +51 -0
- package/dist/machines/opencode-supervisor.d.ts.map +1 -0
- package/dist/machines/opencode-supervisor.js +124 -0
- package/dist/machines/opencode-supervisor.js.map +1 -0
- package/dist/machines/pagination.d.ts +4 -0
- package/dist/machines/pagination.d.ts.map +1 -0
- package/dist/machines/pagination.js +7 -0
- package/dist/machines/pagination.js.map +1 -0
- package/dist/machines/provider-availability.d.ts +42 -0
- package/dist/machines/provider-availability.d.ts.map +1 -0
- package/dist/machines/provider-availability.js +82 -0
- package/dist/machines/provider-availability.js.map +1 -0
- package/dist/machines/provider-screen.d.ts +12 -0
- package/dist/machines/provider-screen.d.ts.map +1 -0
- package/dist/machines/provider-screen.js +129 -0
- package/dist/machines/provider-screen.js.map +1 -0
- package/dist/machines/session-actionability.d.ts +86 -0
- package/dist/machines/session-actionability.d.ts.map +1 -0
- package/dist/machines/session-actionability.js +125 -0
- package/dist/machines/session-actionability.js.map +1 -0
- package/dist/machines/session-visibility.d.ts +139 -0
- package/dist/machines/session-visibility.d.ts.map +1 -0
- package/dist/machines/session-visibility.js +109 -0
- package/dist/machines/session-visibility.js.map +1 -0
- package/dist/platform/adapter.d.ts +62 -0
- package/dist/platform/adapter.d.ts.map +1 -0
- package/dist/platform/adapter.js +240 -0
- package/dist/platform/adapter.js.map +1 -0
- package/dist/platform/support.d.ts +12 -0
- package/dist/platform/support.d.ts.map +1 -0
- package/dist/platform/support.js +25 -0
- package/dist/platform/support.js.map +1 -0
- package/dist/pty/contracts.d.ts +45 -0
- package/dist/pty/contracts.d.ts.map +1 -0
- package/dist/pty/contracts.js +2 -0
- package/dist/pty/contracts.js.map +1 -0
- package/dist/pty/evidence-gate.d.ts +14 -0
- package/dist/pty/evidence-gate.d.ts.map +1 -0
- package/dist/pty/evidence-gate.js +35 -0
- package/dist/pty/evidence-gate.js.map +1 -0
- package/dist/pty/index.d.ts +5 -0
- package/dist/pty/index.d.ts.map +1 -0
- package/dist/pty/index.js +5 -0
- package/dist/pty/index.js.map +1 -0
- package/dist/pty/node-host-terminal.d.ts +14 -0
- package/dist/pty/node-host-terminal.d.ts.map +1 -0
- package/dist/pty/node-host-terminal.js +173 -0
- package/dist/pty/node-host-terminal.js.map +1 -0
- package/dist/pty/node-process.d.ts +26 -0
- package/dist/pty/node-process.d.ts.map +1 -0
- package/dist/pty/node-process.js +102 -0
- package/dist/pty/node-process.js.map +1 -0
- package/dist/runtime/api-terminal-control-plane.d.ts +7 -0
- package/dist/runtime/api-terminal-control-plane.d.ts.map +1 -0
- package/dist/runtime/api-terminal-control-plane.js +95 -0
- package/dist/runtime/api-terminal-control-plane.js.map +1 -0
- package/dist/runtime/backoff.d.ts +17 -0
- package/dist/runtime/backoff.d.ts.map +1 -0
- package/dist/runtime/backoff.js +61 -0
- package/dist/runtime/backoff.js.map +1 -0
- package/dist/runtime/boundary.d.ts +171 -0
- package/dist/runtime/boundary.d.ts.map +1 -0
- package/dist/runtime/boundary.js +1858 -0
- package/dist/runtime/boundary.js.map +1 -0
- package/dist/runtime/capability-gate.d.ts +25 -0
- package/dist/runtime/capability-gate.d.ts.map +1 -0
- package/dist/runtime/capability-gate.js +77 -0
- package/dist/runtime/capability-gate.js.map +1 -0
- package/dist/runtime/contracts.d.ts +25 -0
- package/dist/runtime/contracts.d.ts.map +1 -0
- package/dist/runtime/contracts.js +66 -0
- package/dist/runtime/contracts.js.map +1 -0
- package/dist/runtime/errors.d.ts +20 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +22 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +9 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/node-foreground-session.d.ts +50 -0
- package/dist/runtime/node-foreground-session.d.ts.map +1 -0
- package/dist/runtime/node-foreground-session.js +431 -0
- package/dist/runtime/node-foreground-session.js.map +1 -0
- package/dist/runtime/node-websocket-connector.d.ts +6 -0
- package/dist/runtime/node-websocket-connector.d.ts.map +1 -0
- package/dist/runtime/node-websocket-connector.js +344 -0
- package/dist/runtime/node-websocket-connector.js.map +1 -0
- package/dist/runtime/observer-screen.d.ts +6 -0
- package/dist/runtime/observer-screen.d.ts.map +1 -0
- package/dist/runtime/observer-screen.js +144 -0
- package/dist/runtime/observer-screen.js.map +1 -0
- package/dist/runtime/owner-grant-operations.d.ts +136 -0
- package/dist/runtime/owner-grant-operations.d.ts.map +1 -0
- package/dist/runtime/owner-grant-operations.js +216 -0
- package/dist/runtime/owner-grant-operations.js.map +1 -0
- package/dist/runtime/owner-grants-screen.d.ts +40 -0
- package/dist/runtime/owner-grants-screen.d.ts.map +1 -0
- package/dist/runtime/owner-grants-screen.js +987 -0
- package/dist/runtime/owner-grants-screen.js.map +1 -0
- package/dist/runtime/terminal-transport.d.ts +85 -0
- package/dist/runtime/terminal-transport.d.ts.map +1 -0
- package/dist/runtime/terminal-transport.js +152 -0
- package/dist/runtime/terminal-transport.js.map +1 -0
- package/dist/sync/continuous-sync-supervisor.d.ts +107 -0
- package/dist/sync/continuous-sync-supervisor.d.ts.map +1 -0
- package/dist/sync/continuous-sync-supervisor.js +1117 -0
- package/dist/sync/continuous-sync-supervisor.js.map +1 -0
- package/dist/sync/index.d.ts +9 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +9 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/journal.d.ts +57 -0
- package/dist/sync/journal.d.ts.map +1 -0
- package/dist/sync/journal.js +685 -0
- package/dist/sync/journal.js.map +1 -0
- package/dist/sync/revisions.d.ts +118 -0
- package/dist/sync/revisions.d.ts.map +1 -0
- package/dist/sync/revisions.js +364 -0
- package/dist/sync/revisions.js.map +1 -0
- package/dist/sync/supervisor.d.ts +107 -0
- package/dist/sync/supervisor.d.ts.map +1 -0
- package/dist/sync/supervisor.js +246 -0
- package/dist/sync/supervisor.js.map +1 -0
- package/dist/sync/workspace-sync-client.d.ts +18 -0
- package/dist/sync/workspace-sync-client.d.ts.map +1 -0
- package/dist/sync/workspace-sync-client.js +150 -0
- package/dist/sync/workspace-sync-client.js.map +1 -0
- package/dist/sync/workspace-sync-coordinator.d.ts +76 -0
- package/dist/sync/workspace-sync-coordinator.d.ts.map +1 -0
- package/dist/sync/workspace-sync-coordinator.js +621 -0
- package/dist/sync/workspace-sync-coordinator.js.map +1 -0
- package/dist/sync/workspace-sync-product-service.d.ts +79 -0
- package/dist/sync/workspace-sync-product-service.d.ts.map +1 -0
- package/dist/sync/workspace-sync-product-service.js +398 -0
- package/dist/sync/workspace-sync-product-service.js.map +1 -0
- package/dist/sync/workspace-sync-protocol.d.ts +145 -0
- package/dist/sync/workspace-sync-protocol.d.ts.map +1 -0
- package/dist/sync/workspace-sync-protocol.js +347 -0
- package/dist/sync/workspace-sync-protocol.js.map +1 -0
- package/dist/terminal/appbar.d.ts +40 -0
- package/dist/terminal/appbar.d.ts.map +1 -0
- package/dist/terminal/appbar.js +55 -0
- package/dist/terminal/appbar.js.map +1 -0
- package/dist/terminal/cell-width.d.ts +3 -0
- package/dist/terminal/cell-width.d.ts.map +1 -0
- package/dist/terminal/cell-width.js +53 -0
- package/dist/terminal/cell-width.js.map +1 -0
- package/dist/terminal/codec.d.ts +107 -0
- package/dist/terminal/codec.d.ts.map +1 -0
- package/dist/terminal/codec.js +538 -0
- package/dist/terminal/codec.js.map +1 -0
- package/dist/terminal/foreground.d.ts +135 -0
- package/dist/terminal/foreground.d.ts.map +1 -0
- package/dist/terminal/foreground.js +2097 -0
- package/dist/terminal/foreground.js.map +1 -0
- package/dist/terminal/generated/terminal-wire-v1.d.ts +26 -0
- package/dist/terminal/generated/terminal-wire-v1.d.ts.map +1 -0
- package/dist/terminal/generated/terminal-wire-v1.js +27 -0
- package/dist/terminal/generated/terminal-wire-v1.js.map +1 -0
- package/dist/terminal/mode.d.ts +33 -0
- package/dist/terminal/mode.d.ts.map +1 -0
- package/dist/terminal/mode.js +99 -0
- package/dist/terminal/mode.js.map +1 -0
- package/dist/terminal/passthrough.d.ts +47 -0
- package/dist/terminal/passthrough.d.ts.map +1 -0
- package/dist/terminal/passthrough.js +666 -0
- package/dist/terminal/passthrough.js.map +1 -0
- package/dist/terminal/resume.d.ts +58 -0
- package/dist/terminal/resume.d.ts.map +1 -0
- package/dist/terminal/resume.js +185 -0
- package/dist/terminal/resume.js.map +1 -0
- package/dist/terminal/viewport.d.ts +93 -0
- package/dist/terminal/viewport.d.ts.map +1 -0
- package/dist/terminal/viewport.js +266 -0
- package/dist/terminal/viewport.js.map +1 -0
- package/dist/terminal/workbench.d.ts +32 -0
- package/dist/terminal/workbench.d.ts.map +1 -0
- package/dist/terminal/workbench.js +316 -0
- package/dist/terminal/workbench.js.map +1 -0
- package/dist/terminal/xterm-vte.d.ts +49 -0
- package/dist/terminal/xterm-vte.d.ts.map +1 -0
- package/dist/terminal/xterm-vte.js +602 -0
- package/dist/terminal/xterm-vte.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace/binding-path.d.ts +17 -0
- package/dist/workspace/binding-path.d.ts.map +1 -0
- package/dist/workspace/binding-path.js +91 -0
- package/dist/workspace/binding-path.js.map +1 -0
- package/dist/workspace/binding-store.d.ts +107 -0
- package/dist/workspace/binding-store.d.ts.map +1 -0
- package/dist/workspace/binding-store.js +783 -0
- package/dist/workspace/binding-store.js.map +1 -0
- package/dist/workspace/binding.d.ts +35 -0
- package/dist/workspace/binding.d.ts.map +1 -0
- package/dist/workspace/binding.js +70 -0
- package/dist/workspace/binding.js.map +1 -0
- package/dist/workspace/errors.d.ts +4 -0
- package/dist/workspace/errors.d.ts.map +1 -0
- package/dist/workspace/errors.js +19 -0
- package/dist/workspace/errors.js.map +1 -0
- package/dist/workspace/exclusion.d.ts +21 -0
- package/dist/workspace/exclusion.d.ts.map +1 -0
- package/dist/workspace/exclusion.js +243 -0
- package/dist/workspace/exclusion.js.map +1 -0
- package/dist/workspace/index.d.ts +8 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +8 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/lifecycle.d.ts +56 -0
- package/dist/workspace/lifecycle.d.ts.map +1 -0
- package/dist/workspace/lifecycle.js +94 -0
- package/dist/workspace/lifecycle.js.map +1 -0
- package/dist/workspace/manifest.d.ts +47 -0
- package/dist/workspace/manifest.d.ts.map +1 -0
- package/dist/workspace/manifest.js +243 -0
- package/dist/workspace/manifest.js.map +1 -0
- package/dist/workspace/paths.d.ts +14 -0
- package/dist/workspace/paths.d.ts.map +1 -0
- package/dist/workspace/paths.js +67 -0
- package/dist/workspace/paths.js.map +1 -0
- package/dist/workspace/schema.d.ts +15 -0
- package/dist/workspace/schema.d.ts.map +1 -0
- package/dist/workspace/schema.js +33 -0
- package/dist/workspace/schema.js.map +1 -0
- package/dist/workspace/selection-screen.d.ts +4 -0
- package/dist/workspace/selection-screen.d.ts.map +1 -0
- package/dist/workspace/selection-screen.js +216 -0
- package/dist/workspace/selection-screen.js.map +1 -0
- package/dist/workspace/selection-service.d.ts +16 -0
- package/dist/workspace/selection-service.d.ts.map +1 -0
- package/dist/workspace/selection-service.js +65 -0
- package/dist/workspace/selection-service.js.map +1 -0
- package/node_modules/@xterm/headless/README.md +31 -0
- package/node_modules/@xterm/headless/lib-headless/xterm-headless.js +2 -0
- package/node_modules/@xterm/headless/lib-headless/xterm-headless.js.map +1 -0
- package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs +46 -0
- package/node_modules/@xterm/headless/lib-headless/xterm-headless.mjs.map +7 -0
- package/node_modules/@xterm/headless/package.json +29 -0
- package/node_modules/@xterm/headless/typings/xterm-headless.d.ts +1385 -0
- package/package.json +75 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import { ContractViolation } from "../core/validation.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { EXIT_CODES, CunaError } from "../core/errors.js";
|
|
5
|
+
import { deriveMachineCreateIdentity } from "./derived-identity.js";
|
|
6
|
+
import { planAgentSessionSelection, planMachineSelection, } from "./selection.js";
|
|
7
|
+
function frozenLedger(ledger) {
|
|
8
|
+
return Object.freeze({
|
|
9
|
+
idempotencyKey: ledger.idempotencyKey,
|
|
10
|
+
...(ledger.machineCreateRequestId === undefined
|
|
11
|
+
? {}
|
|
12
|
+
: { machineCreateRequestId: ledger.machineCreateRequestId }),
|
|
13
|
+
...(ledger.createdMachineId === undefined ? {} : { createdMachineId: ledger.createdMachineId }),
|
|
14
|
+
...(ledger.createdAgentSessionId === undefined
|
|
15
|
+
? {}
|
|
16
|
+
: { createdAgentSessionId: ledger.createdAgentSessionId }),
|
|
17
|
+
...(ledger.synchronizedBindingId === undefined
|
|
18
|
+
? {}
|
|
19
|
+
: { synchronizedBindingId: ledger.synchronizedBindingId }),
|
|
20
|
+
...(ledger.lastCompletedPhase === undefined
|
|
21
|
+
? {}
|
|
22
|
+
: { lastCompletedPhase: ledger.lastCompletedPhase }),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function cancelled() {
|
|
26
|
+
return new CunaError({
|
|
27
|
+
code: "cuna.journey.cancelled",
|
|
28
|
+
message: "The Cuna journey was cancelled before completion.",
|
|
29
|
+
exitCode: EXIT_CODES.network,
|
|
30
|
+
retryable: true,
|
|
31
|
+
hint: "No cloud resource was assumed deleted. Inspect `cuna machines list` before retrying.",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function selectionFailure(target, plan) {
|
|
35
|
+
const candidates = plan.kind === "ambiguous" ? plan.candidates.map((candidate) => candidate.id) : undefined;
|
|
36
|
+
return new CunaError({
|
|
37
|
+
code: plan.kind === "ambiguous" ? "cuna.journey.ambiguous" : "cuna.journey.authority_unavailable",
|
|
38
|
+
message: plan.kind === "ambiguous"
|
|
39
|
+
? `More than one exact ${target} candidate remains.`
|
|
40
|
+
: `Cuna could not prove a safe ${target} selection.`,
|
|
41
|
+
exitCode: plan.kind === "ambiguous" ? EXIT_CODES.conflict : EXIT_CODES.policy,
|
|
42
|
+
hint: target === "machine"
|
|
43
|
+
? plan.reason === "opencode-supervisor-update-required"
|
|
44
|
+
? "An existing OpenCode machine needs its terminal supervisor updated before a session can start. Cuna did not create another machine. Open `cuna machines`, stop only the machine and sessions you choose, then select Update terminal supervisor."
|
|
45
|
+
: plan.reason === "agent-mismatch"
|
|
46
|
+
? "Choose or create a machine configured for this provider (`cuna machines create --agent claude-code|codex|opencode ...`)."
|
|
47
|
+
: plan.reason === "not-found"
|
|
48
|
+
? "No machine by that name exists in this account. See your machines with `cuna machines list`, create one with `cuna machines create --name NAME --agent claude-code|codex|opencode --yes`, or omit --machine to let Cuna use or create one."
|
|
49
|
+
: plan.reason === "state-not-reusable"
|
|
50
|
+
? "That machine is not running. Start it with `cuna machines start MACHINE_ID --yes`, or omit --machine to let Cuna use or create a running one."
|
|
51
|
+
// `state-unknown` names a running machine whose provider runtime
|
|
52
|
+
// Cuna could not verify. Repeating `--machine NAME` was the old
|
|
53
|
+
// hint and it named the option the caller had already given.
|
|
54
|
+
: plan.reason === "state-unknown"
|
|
55
|
+
? "That machine is running, but Cuna could not verify its agent runtime. Read it with `cuna capabilities --scope machine --resource-id MACHINE_ID`; if the terminal supervisor is the blocker, update it from `cuna machines`."
|
|
56
|
+
: "Read the machine with `cuna machines list` and select one that is running."
|
|
57
|
+
: plan.reason === "attachment-unobservable"
|
|
58
|
+
// Naming the prerequisite instead of implying a retry. The writer seat
|
|
59
|
+
// is read from the API; when it reports no attestable PTY (`none`,
|
|
60
|
+
// `owner_unrecoverable`) or the deployment does not serve the route,
|
|
61
|
+
// reuse cannot prove the session is free and abstains rather than
|
|
62
|
+
// racing a terminal that may already have a writer. Waiting changes
|
|
63
|
+
// nothing, which is exactly why this must not read as staleness.
|
|
64
|
+
? "Cuna cannot observe whether the existing session's terminal is free (no attested terminal for its current process, or this API does not publish the seat), so it will not reuse it. Start a fresh one with --new-session, or inspect it with `cuna agent-sessions get ID`."
|
|
65
|
+
: plan.reason === "already-attached"
|
|
66
|
+
// The holder is the writer seat's client instance id as the API
|
|
67
|
+
// recorded it. No CLI flag exposes an observer attach today, and an
|
|
68
|
+
// explicit --agent-session of a held seat is refused by this same
|
|
69
|
+
// branch, so the hint names the one route that exists.
|
|
70
|
+
? `Another client${plan.kind === "unavailable" && plan.holder !== undefined ? ` (${plan.holder})` : ""} holds the writer seat of the existing session for this workspace. Start a second session with --new-session, or wait until that client detaches.`
|
|
71
|
+
: "Select an exact child with --agent-session ID or request --new-session.",
|
|
72
|
+
details: {
|
|
73
|
+
target: target === "machine" ? "machine" : "agent_session",
|
|
74
|
+
reason: plan.reason,
|
|
75
|
+
...(plan.kind === "unavailable" && plan.holder !== undefined ? { holder: plan.holder } : {}),
|
|
76
|
+
// Which one. Every `unavailable` plan may carry the id it rejected, and
|
|
77
|
+
// dropping it made two different branches indistinguishable from the
|
|
78
|
+
// outside: on 2026-08-30 a refusal reading
|
|
79
|
+
// `authority-observation-stale` could have come either from one
|
|
80
|
+
// session's own freshness or from the whole collection's, and the
|
|
81
|
+
// printed error could not say which -- while both inputs were hardcoded
|
|
82
|
+
// fresh, so neither branch should have been reachable at all.
|
|
83
|
+
...("targetId" in plan && plan.targetId !== undefined
|
|
84
|
+
? { target_id: plan.targetId }
|
|
85
|
+
: {}),
|
|
86
|
+
...(candidates === undefined ? {} : { candidates }),
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function unreconcilableCreate(cause) {
|
|
91
|
+
return new CunaError({
|
|
92
|
+
code: "cuna.journey.machine_create_outcome_unreconcilable",
|
|
93
|
+
message: "Cuna cannot prove whether the machine-create request committed.",
|
|
94
|
+
exitCode: EXIT_CODES.remote,
|
|
95
|
+
retryable: false,
|
|
96
|
+
// This hint used to read "the producer must expose the create request
|
|
97
|
+
// identity". It already did; the client was throwing the key away by
|
|
98
|
+
// minting it from randomness. The identity is now derived from the
|
|
99
|
+
// invocation, so repeating the SAME command is the recovery: it re-derives
|
|
100
|
+
// the same request identity and reconciles instead of creating a sibling.
|
|
101
|
+
hint: "Repeat this exact command to reconcile the same create request. Run `cuna machines list` first if you want to see the outcome before retrying.",
|
|
102
|
+
details: { unproven_outcome: "machine_create_request" },
|
|
103
|
+
cause,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function unreconcilableAgentSessionCreate(cause) {
|
|
107
|
+
// Only fixed vocabulary and opaque UUIDs cross this diagnostic boundary.
|
|
108
|
+
const codes = new Set(["cuna.network.failed", "cuna.network.service_unavailable", "cuna.network.rate_limited", "cuna.remote.rejected", "cuna.remote.conflict", "cuna.remote.not_found", "cuna.remote.operation_not_served", "cuna.remote.malformed_response", "cuna.provider.v2_unavailable", "cuna.provider.selection_cancelled", "cuna.provider.pending_intent_conflict", "cuna.provider.intent_history_full", "cuna.journey.agent_session_create_authority_mismatch"]);
|
|
109
|
+
const reasons = new Set(["agent_session_memory_capacity", "agent_session_machine_not_found", "invalid_provider_session_request", "provider_session_v2_invalid_input", "provider_session_v2_credentials_unavailable", "provider_session_v2_scope_unavailable", "provider_session_v2_profile_unavailable", "provider_session_v2_receipt_invalid", "provider_session_v2_authority_unavailable", "provider_session_v2_operation_conflict", "provider_session_v2_profile_mismatch", "provider_session_v2_capacity_exceeded", "provider_session_v2_machine_not_running"]);
|
|
110
|
+
const predicates = new Set(["provider_v2_create", "provider_v2_create_scope", "provider_v2_schema", "provider_v2_exact_contract", "contract_decode_failed", "matches_requested_resource", "response_within_size_limit"]);
|
|
111
|
+
const details = { recovery: "exhausted" };
|
|
112
|
+
const own = (value, key) => { const descriptor = Object.getOwnPropertyDescriptor(value, key); return descriptor && "value" in descriptor ? descriptor.value : undefined; };
|
|
113
|
+
if (cause instanceof ContractViolation) {
|
|
114
|
+
const predicate = own(cause, "predicate");
|
|
115
|
+
if (typeof predicate === "string" && predicates.has(predicate))
|
|
116
|
+
details.predicate = predicate;
|
|
117
|
+
// Response decoder violations are wrapped by fetchDecoded. This plain exact-contract
|
|
118
|
+
// violation in the create boundary comes from providerSessionBody before transport.
|
|
119
|
+
if (predicate === "provider_v2_exact_contract")
|
|
120
|
+
details.failure_stage = "local_pre_admission";
|
|
121
|
+
}
|
|
122
|
+
if (cause instanceof CunaError) {
|
|
123
|
+
const code = own(cause, "code");
|
|
124
|
+
if (typeof code === "string" && codes.has(code))
|
|
125
|
+
details.cause_code = code;
|
|
126
|
+
const raw = own(cause, "details");
|
|
127
|
+
if (raw && typeof raw === "object") {
|
|
128
|
+
const status = own(raw, "http_status");
|
|
129
|
+
if (typeof status === "number" && Number.isInteger(status) && status >= 400 && status <= 599)
|
|
130
|
+
details.http_status = status;
|
|
131
|
+
const reason = own(raw, "reason");
|
|
132
|
+
if (typeof reason === "string" && reasons.has(reason))
|
|
133
|
+
details.cause_reason = reason;
|
|
134
|
+
const predicate = own(raw, "predicate");
|
|
135
|
+
if (typeof predicate === "string" && predicates.has(predicate))
|
|
136
|
+
details.predicate = predicate;
|
|
137
|
+
for (const key of ["operation_id", "request_id"]) {
|
|
138
|
+
const value = own(raw, key);
|
|
139
|
+
if (typeof value === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(value))
|
|
140
|
+
details[key] = value;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (typeof code === "string" && ["cuna.provider.v2_unavailable", "cuna.provider.selection_cancelled", "cuna.provider.pending_intent_conflict", "cuna.provider.intent_history_full"].includes(code))
|
|
144
|
+
details.failure_stage = "local_pre_admission";
|
|
145
|
+
}
|
|
146
|
+
if (details.cause_code === "cuna.remote.conflict" && details.http_status === 409 && details.cause_reason === "agent_session_memory_capacity") {
|
|
147
|
+
return new CunaError({
|
|
148
|
+
code: "cuna.agent.memory_capacity",
|
|
149
|
+
message: "The selected Machine does not have enough available memory to start this OpenCode session.",
|
|
150
|
+
exitCode: EXIT_CODES.conflict,
|
|
151
|
+
retryable: false,
|
|
152
|
+
hint: "Inspect the Machine's running sessions. If appropriate, stop an unneeded session to free memory, then repeat this command with the same Workspace and preset to resume the recorded launch. Its pending operation identity is preserved; do not request a different launch to bypass this refusal.",
|
|
153
|
+
details: { ...details, recovery: "pending_identity_preserved" },
|
|
154
|
+
cause,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const diagnostic = [details.cause_code, details.cause_reason, details.http_status, details.predicate].filter(value => value !== undefined).join(" / ");
|
|
158
|
+
return new CunaError({
|
|
159
|
+
code: "cuna.journey.agent_session_create_outcome_unreconcilable",
|
|
160
|
+
message: (details.failure_stage === "local_pre_admission" ? "Local launch preparation refused before this attempt dispatched; any earlier launch remains unresolved." : "Cuna cannot prove whether the AgentSession create request committed.") + (diagnostic ? " Diagnostic: " + diagnostic + "." : ""),
|
|
161
|
+
exitCode: EXIT_CODES.remote,
|
|
162
|
+
retryable: false,
|
|
163
|
+
hint: "Do not request another child with a new key. Retry recovery with the original journey identity.",
|
|
164
|
+
details,
|
|
165
|
+
cause,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Only the specifically recognized supervisor preflight refusal is passed
|
|
170
|
+
* through here. An HTTP status alone does not establish non-commit.
|
|
171
|
+
*/
|
|
172
|
+
function isProvenAgentSessionCreateRejection(cause) {
|
|
173
|
+
return cause instanceof CunaError &&
|
|
174
|
+
cause.code === "cuna.agent.opencode_supervisor_upgrade_required";
|
|
175
|
+
}
|
|
176
|
+
function defaultAuthMode(intent) {
|
|
177
|
+
if (intent.authMode !== undefined)
|
|
178
|
+
return intent.authMode;
|
|
179
|
+
return intent.agent === "openclaw" ? "credential_binding" : "interactive_login";
|
|
180
|
+
}
|
|
181
|
+
async function boundary(input) {
|
|
182
|
+
if (input.signal.aborted)
|
|
183
|
+
throw cancelled();
|
|
184
|
+
input.effects.onPhase?.(input.phase);
|
|
185
|
+
if (input.signal.aborted)
|
|
186
|
+
throw cancelled();
|
|
187
|
+
const value = await input.action();
|
|
188
|
+
if (input.signal.aborted)
|
|
189
|
+
throw cancelled();
|
|
190
|
+
input.ledger.lastCompletedPhase = input.phase;
|
|
191
|
+
return value;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Executes the automatic CLI journey as a fenced sequence. A later phase can
|
|
195
|
+
* consume only authoritative output returned by its direct predecessor.
|
|
196
|
+
*/
|
|
197
|
+
export async function orchestrateAgentJourney(input) {
|
|
198
|
+
const controller = input.signal === undefined ? new AbortController() : undefined;
|
|
199
|
+
const signal = input.signal ?? controller?.signal;
|
|
200
|
+
if (signal === undefined)
|
|
201
|
+
throw new TypeError("Missing journey cancellation authority.");
|
|
202
|
+
const ledger = {
|
|
203
|
+
// Scoped to this process on purpose. It keys the AgentSession create, whose
|
|
204
|
+
// canonical intent includes the workspace generation the sync is about to
|
|
205
|
+
// advance, so a value derived before that generation exists would replay
|
|
206
|
+
// the wrong child. The machine create, whose canonical intent IS known up
|
|
207
|
+
// front, gets a derived identity instead — see below.
|
|
208
|
+
idempotencyKey: input.idempotencyKey ?? `cuna-journey-${randomUUID()}`,
|
|
209
|
+
};
|
|
210
|
+
try {
|
|
211
|
+
const localPath = resolve(input.intent.localPath ?? process.cwd());
|
|
212
|
+
const workspaceInspection = await boundary({
|
|
213
|
+
phase: "inspect-workspace", signal, effects: input.effects, ledger,
|
|
214
|
+
action: () => input.effects.inspectWorkspace({
|
|
215
|
+
localPath,
|
|
216
|
+
syncMode: input.intent.syncMode,
|
|
217
|
+
signal,
|
|
218
|
+
}),
|
|
219
|
+
});
|
|
220
|
+
const machines = await boundary({
|
|
221
|
+
phase: "observe-machines", signal, effects: input.effects, ledger,
|
|
222
|
+
action: () => input.effects.observeMachines({ requestedAgent: input.intent.agent, signal }),
|
|
223
|
+
});
|
|
224
|
+
const planMachines = (projectMachineId) => planMachineSelection({
|
|
225
|
+
requestedAgent: input.intent.agent,
|
|
226
|
+
forceNew: input.intent.machine.kind === "new",
|
|
227
|
+
...(input.intent.machine.kind === "exact-name"
|
|
228
|
+
? { selector: { kind: "name", value: input.intent.machine.name } }
|
|
229
|
+
: {}),
|
|
230
|
+
...(projectMachineId === undefined || input.intent.machine.kind !== "automatic"
|
|
231
|
+
? {}
|
|
232
|
+
: { projectBinding: { machineId: projectMachineId, freshness: "fresh" } }),
|
|
233
|
+
collectionFreshness: "fresh",
|
|
234
|
+
machines,
|
|
235
|
+
});
|
|
236
|
+
let machinePlan = planMachines(workspaceInspection.projectMachineId);
|
|
237
|
+
if (machinePlan.kind === "stale-binding" && machinePlan.reason === "machine-missing") {
|
|
238
|
+
// The folder is the project; a Machine is disposable (PRD-PM-008 §H,
|
|
239
|
+
// E14-D1). A binding whose Machine is no longer in the collection does
|
|
240
|
+
// not stop the journey: select or create as an unbound folder would,
|
|
241
|
+
// and let the synchronize step read the bound Machine itself before it
|
|
242
|
+
// rebinds — a listing is not proof of absence, the Machine read is.
|
|
243
|
+
machinePlan = planMachines(undefined);
|
|
244
|
+
}
|
|
245
|
+
let machine;
|
|
246
|
+
if (machinePlan.kind === "select" && machinePlan.target === "machine") {
|
|
247
|
+
machine = { id: machinePlan.machineId, state: machinePlan.machine.state };
|
|
248
|
+
}
|
|
249
|
+
else if (machinePlan.kind === "create-required" && machinePlan.target === "machine") {
|
|
250
|
+
// Derived, not minted. A re-run of this exact invocation re-derives this
|
|
251
|
+
// identity and finds its own previous attempt; a random one is lost with
|
|
252
|
+
// the process that held it, and the orphan it leaves behind bills with
|
|
253
|
+
// nothing able to name it.
|
|
254
|
+
const createIdentity = deriveMachineCreateIdentity({
|
|
255
|
+
userId: input.scope.userId,
|
|
256
|
+
workspaceId: input.scope.workspaceId,
|
|
257
|
+
canonicalLocalRoot: workspaceInspection.canonicalLocalRoot,
|
|
258
|
+
agent: input.intent.agent,
|
|
259
|
+
machine: input.intent.machine,
|
|
260
|
+
});
|
|
261
|
+
const requestId = createIdentity.requestId;
|
|
262
|
+
// Set when the request actually leaves this process. A capability check
|
|
263
|
+
// or a declined confirmation fails BEFORE that, and reconciling then asks
|
|
264
|
+
// the server about a request it was never sent: it answers 404, and that
|
|
265
|
+
// 404 replaces the person's own decision with "the resource was not
|
|
266
|
+
// found" at exit 7, for what they chose at exit 4.
|
|
267
|
+
let dispatched = false;
|
|
268
|
+
try {
|
|
269
|
+
machine = await boundary({
|
|
270
|
+
phase: "create-machine", signal, effects: input.effects, ledger,
|
|
271
|
+
action: () => input.effects.createMachine({
|
|
272
|
+
requestedAgent: input.intent.agent,
|
|
273
|
+
idempotencyKey: createIdentity.idempotencyKey,
|
|
274
|
+
requestId,
|
|
275
|
+
onDispatch: () => {
|
|
276
|
+
// From here on an interrupted journey has a request identity to
|
|
277
|
+
// reconcile against.
|
|
278
|
+
dispatched = true;
|
|
279
|
+
ledger.machineCreateRequestId = requestId;
|
|
280
|
+
},
|
|
281
|
+
signal,
|
|
282
|
+
}),
|
|
283
|
+
});
|
|
284
|
+
ledger.createdMachineId = machine.id;
|
|
285
|
+
}
|
|
286
|
+
catch (createError) {
|
|
287
|
+
if (signal.aborted || !dispatched)
|
|
288
|
+
throw createError;
|
|
289
|
+
const reconciled = await boundary({
|
|
290
|
+
phase: "reconcile-machine-create", signal, effects: input.effects, ledger,
|
|
291
|
+
action: () => input.effects.reconcileMachineCreate({
|
|
292
|
+
requestId,
|
|
293
|
+
cause: createError,
|
|
294
|
+
signal,
|
|
295
|
+
}),
|
|
296
|
+
});
|
|
297
|
+
if (reconciled === "unreconcilable")
|
|
298
|
+
throw unreconcilableCreate(createError);
|
|
299
|
+
machine = reconciled;
|
|
300
|
+
ledger.createdMachineId = machine.id;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
throw selectionFailure("machine", machinePlan);
|
|
305
|
+
}
|
|
306
|
+
machine = await boundary({
|
|
307
|
+
phase: "ready-machine", signal, effects: input.effects, ledger,
|
|
308
|
+
action: () => input.effects.ensureMachineReady({
|
|
309
|
+
machineId: machine.id,
|
|
310
|
+
observedState: machine.state,
|
|
311
|
+
signal,
|
|
312
|
+
}),
|
|
313
|
+
});
|
|
314
|
+
if (machine.state !== "running") {
|
|
315
|
+
throw new CunaError({
|
|
316
|
+
code: "cuna.journey.machine_not_ready",
|
|
317
|
+
message: "The selected machine did not reach authoritative running state.",
|
|
318
|
+
exitCode: EXIT_CODES.remote,
|
|
319
|
+
hint: "Run `cuna machines list` to see its current state, then start it before attaching.",
|
|
320
|
+
details: { machine_id: machine.id, observed_state: machine.state },
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
const workspace = await boundary({
|
|
324
|
+
phase: "synchronize-workspace", signal, effects: input.effects, ledger,
|
|
325
|
+
action: () => input.effects.synchronizeWorkspace({
|
|
326
|
+
machineId: machine.id,
|
|
327
|
+
localPath,
|
|
328
|
+
syncMode: input.intent.syncMode,
|
|
329
|
+
signal,
|
|
330
|
+
}),
|
|
331
|
+
});
|
|
332
|
+
ledger.synchronizedBindingId = workspace.bindingId;
|
|
333
|
+
const agentSessions = await boundary({
|
|
334
|
+
phase: "observe-agent-sessions", signal, effects: input.effects, ledger,
|
|
335
|
+
action: () => input.effects.observeAgentSessions({ machineId: machine.id, signal }),
|
|
336
|
+
});
|
|
337
|
+
const authMode = defaultAuthMode(input.intent);
|
|
338
|
+
const sessionPlan = planAgentSessionSelection({
|
|
339
|
+
machineId: machine.id,
|
|
340
|
+
requestedAgent: input.intent.agent,
|
|
341
|
+
workspaceIdentity: workspace.workspaceIdentity,
|
|
342
|
+
workspaceGeneration: workspace.generation,
|
|
343
|
+
cwd: workspace.remoteCwd.replace(/^\/workspace\/?/u, "") || ".",
|
|
344
|
+
authMode,
|
|
345
|
+
forceNewSession: input.intent.newSession || ledger.createdMachineId !== undefined,
|
|
346
|
+
collectionFreshness: "fresh",
|
|
347
|
+
agentSessions,
|
|
348
|
+
});
|
|
349
|
+
let agentSession;
|
|
350
|
+
if (sessionPlan.kind === "select" && sessionPlan.target === "agent-session") {
|
|
351
|
+
agentSession = { id: sessionPlan.agentSessionId, machineId: sessionPlan.machineId };
|
|
352
|
+
}
|
|
353
|
+
else if (sessionPlan.kind === "create-required" && sessionPlan.target === "agent-session") {
|
|
354
|
+
try {
|
|
355
|
+
agentSession = await boundary({
|
|
356
|
+
phase: "create-agent-session", signal, effects: input.effects, ledger,
|
|
357
|
+
action: () => input.effects.createAgentSession({
|
|
358
|
+
machineId: machine.id,
|
|
359
|
+
agent: input.intent.agent,
|
|
360
|
+
authMode,
|
|
361
|
+
...(input.intent.credentialBindingId === undefined
|
|
362
|
+
? {}
|
|
363
|
+
: { credentialBindingId: input.intent.credentialBindingId }),
|
|
364
|
+
workspace,
|
|
365
|
+
idempotencyKey: `${ledger.idempotencyKey}-agent`,
|
|
366
|
+
signal,
|
|
367
|
+
}),
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
catch (createError) {
|
|
371
|
+
if (signal.aborted || isProvenAgentSessionCreateRejection(createError)) {
|
|
372
|
+
throw createError;
|
|
373
|
+
}
|
|
374
|
+
throw unreconcilableAgentSessionCreate(createError);
|
|
375
|
+
}
|
|
376
|
+
ledger.createdAgentSessionId = agentSession.id;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
throw selectionFailure("AgentSession", sessionPlan);
|
|
380
|
+
}
|
|
381
|
+
agentSession = await boundary({
|
|
382
|
+
phase: "ready-agent-session", signal, effects: input.effects, ledger,
|
|
383
|
+
action: () => input.effects.ensureAgentSessionReady({ agentSessionId: agentSession.id, signal }),
|
|
384
|
+
});
|
|
385
|
+
await boundary({
|
|
386
|
+
phase: "attach", signal, effects: input.effects, ledger,
|
|
387
|
+
action: () => input.effects.attach({
|
|
388
|
+
agentSessionId: agentSession.id,
|
|
389
|
+
expectedAgent: input.intent.agent,
|
|
390
|
+
signal,
|
|
391
|
+
}),
|
|
392
|
+
});
|
|
393
|
+
return Object.freeze({
|
|
394
|
+
machineId: machine.id,
|
|
395
|
+
agentSessionId: agentSession.id,
|
|
396
|
+
workspaceBindingId: workspace.bindingId,
|
|
397
|
+
workspaceGeneration: workspace.generation,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
if (signal.aborted || (error instanceof CunaError && error.code === "cuna.journey.cancelled")) {
|
|
402
|
+
const cleanupSignal = AbortSignal.timeout(5_000);
|
|
403
|
+
try {
|
|
404
|
+
await input.effects.reconcileCancellation({ ledger: frozenLedger(ledger), signal: cleanupSignal });
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
// Cancellation reconciliation is advisory evidence only. Its failure
|
|
408
|
+
// must not turn an unproven cloud outcome into successful cleanup.
|
|
409
|
+
}
|
|
410
|
+
throw cancelled();
|
|
411
|
+
}
|
|
412
|
+
throw error;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/journey/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Reuses the fsync journal and exclusive local writer; no provider credentials are persisted. */
|
|
2
|
+
export declare function withProviderLaunchIntent<T>(input: {
|
|
3
|
+
stateDirectory: string;
|
|
4
|
+
ownerId: string;
|
|
5
|
+
workspaceId: string;
|
|
6
|
+
machineId: string;
|
|
7
|
+
executionWorkspaceId: string;
|
|
8
|
+
intent: Readonly<Record<string, unknown>>;
|
|
9
|
+
confirmNew?: () => Promise<boolean>;
|
|
10
|
+
create: (operationId: string) => Promise<T>;
|
|
11
|
+
}): Promise<T>;
|
|
12
|
+
//# sourceMappingURL=provider-launch-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-launch-intent.d.ts","sourceRoot":"","sources":["../../src/journey/provider-launch-intent.ts"],"names":[],"mappings":"AAMA,kGAAkG;AAClG,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,KAAK,EAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,oBAAoB,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAC,OAAO,CAAC,CAAC,CAAC;IAAA,UAAU,CAAC,EAAC,MAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAAA,MAAM,EAAC,CAAC,WAAW,EAAC,MAAM,KAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAC,GAAE,OAAO,CAAC,CAAC,CAAC,CAoB1R"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { DurableSyncJournal, inspectSyncJournal } from '../sync/journal.js';
|
|
4
|
+
import { CunaError, EXIT_CODES } from '../core/errors.js';
|
|
5
|
+
import { stableUuid } from './derived-identity.js';
|
|
6
|
+
/** Reuses the fsync journal and exclusive local writer; no provider credentials are persisted. */
|
|
7
|
+
export async function withProviderLaunchIntent(input) {
|
|
8
|
+
const scope = JSON.stringify(['provider-launch-v2', input.ownerId, input.workspaceId, input.machineId, input.executionWorkspaceId]);
|
|
9
|
+
const directory = join(input.stateDirectory, 'provider-launch-v2', createHash('sha256').update(scope).digest('hex'));
|
|
10
|
+
const journal = await DurableSyncJournal.open({ directory, bindingId: stableUuid('provider-launch-v2', scope), bindingGeneration: 1, ownerId: randomUUID(), leaseMs: 120000 });
|
|
11
|
+
try {
|
|
12
|
+
const inspection = await inspectSyncJournal(directory);
|
|
13
|
+
const latest = new Map(inspection.records.map(record => [record.operationId, record]));
|
|
14
|
+
const pending = [...latest.values()].filter(record => record.state !== 'applied' && record.state !== 'conflicted');
|
|
15
|
+
const serialized = JSON.stringify(input.intent), digest = createHash('sha256').update(serialized).digest('hex');
|
|
16
|
+
if (pending.length > 1 || pending.some(record => record.digest !== digest))
|
|
17
|
+
throw new CunaError({ code: 'cuna.provider.pending_intent_conflict', message: 'A previous provider launch is unresolved with a different Workspace version or preset. Resolve that launch before requesting another.', exitCode: EXIT_CODES.conflict });
|
|
18
|
+
const resolved = [...latest.values()].filter(record => record.state === 'applied').at(-1);
|
|
19
|
+
if (pending.length === 0 && resolved && !(await input.confirmNew?.())) {
|
|
20
|
+
if (resolved.digest !== digest)
|
|
21
|
+
throw new CunaError({ code: 'cuna.provider.pending_intent_conflict', message: 'Resume requires the previously selected Workspace version and preset. Explicitly confirm a new session to change them.', exitCode: EXIT_CODES.conflict });
|
|
22
|
+
return await input.create(resolved.operationId);
|
|
23
|
+
}
|
|
24
|
+
if (pending.length === 0 && latest.size >= 1024)
|
|
25
|
+
throw new CunaError({ code: 'cuna.provider.intent_history_full', message: 'The local provider launch history is full. Inspect it before starting another launch.', exitCode: EXIT_CODES.conflict });
|
|
26
|
+
let record = pending[0] ?? await journal.append({ operationId: randomUUID(), baseGeneration: 1, digest, byteLength: Buffer.byteLength(serialized) });
|
|
27
|
+
if (record.state === 'queued')
|
|
28
|
+
record = await journal.transition(record.operationId, 'sending');
|
|
29
|
+
const result = await input.create(record.operationId);
|
|
30
|
+
await journal.renew();
|
|
31
|
+
if (record.state === 'sending' || record.state === 'uncertain')
|
|
32
|
+
await journal.transition(record.operationId, 'acknowledged');
|
|
33
|
+
await journal.transition(record.operationId, 'applied');
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
await journal.close();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=provider-launch-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-launch-intent.js","sourceRoot":"","sources":["../../src/journey/provider-launch-intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ProviderPreset } from "../api/provider-v2.js";
|
|
2
|
+
import { type CunaApiClient } from "../api/client.js";
|
|
3
|
+
import type { AgentSession } from "../api/contracts.js";
|
|
4
|
+
/** A remote-only launch never creates a local workspace binding. */
|
|
5
|
+
export declare function launchRemoteWorkspaceSession(input: {
|
|
6
|
+
readonly client: CunaApiClient;
|
|
7
|
+
readonly preset: ProviderPreset;
|
|
8
|
+
readonly machineId: string;
|
|
9
|
+
readonly workspaceId: string;
|
|
10
|
+
readonly agent: "claude-code" | "codex" | "opencode";
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
readonly onProgress?: (message: string) => void;
|
|
13
|
+
readonly now?: () => number;
|
|
14
|
+
readonly sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>;
|
|
15
|
+
readonly providerLaunchState: {
|
|
16
|
+
stateDirectory: string;
|
|
17
|
+
ownerId: string;
|
|
18
|
+
};
|
|
19
|
+
readonly confirmNew?: () => Promise<boolean>;
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
/** Shared canonical admission for already published remote or synchronized Workspaces. */
|
|
22
|
+
export declare function createPublishedProviderSessionV2(input: {
|
|
23
|
+
client: CunaApiClient;
|
|
24
|
+
machineId: string;
|
|
25
|
+
agent: "opencode" | "codex" | "claude-code";
|
|
26
|
+
preset: ProviderPreset;
|
|
27
|
+
operationId: string;
|
|
28
|
+
executionWorkspaceId: string;
|
|
29
|
+
generation: number;
|
|
30
|
+
cwd: string;
|
|
31
|
+
signal: AbortSignal;
|
|
32
|
+
}): Promise<AgentSession>;
|
|
33
|
+
export declare function requireMatchingPreset(agent: string, preset: ProviderPreset): void;
|
|
34
|
+
//# sourceMappingURL=remote-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-workspace.d.ts","sourceRoot":"","sources":["../../src/journey/remote-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,oEAAoE;AACpE,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,mBAAmB,EAAE;QAAC,cAAc,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAC,MAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDlB;AAED,0FAA0F;AAC1F,wBAAsB,gCAAgC,CAAC,KAAK,EAAC;IAAC,MAAM,EAAC,aAAa,CAAC;IAAA,SAAS,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,UAAU,GAAC,OAAO,GAAC,aAAa,CAAC;IAAA,MAAM,EAAC,cAAc,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,oBAAoB,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,WAAW,CAAA;CAAC,GAAE,OAAO,CAAC,YAAY,CAAC,CAQtR;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,GAAE,IAAI,CAE7E"}
|