@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,240 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { constants as fileConstants } from "node:fs";
|
|
3
|
+
import { chmod, lstat, mkdir, open, rename, unlink } from "node:fs/promises";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { dirname, posix, win32 } from "node:path";
|
|
6
|
+
import { EXIT_CODES, CunaError } from "../core/errors.js";
|
|
7
|
+
export function resolvePlatformKind(platform) {
|
|
8
|
+
if (platform === "win32")
|
|
9
|
+
return "windows";
|
|
10
|
+
if (platform === "darwin")
|
|
11
|
+
return "macos";
|
|
12
|
+
if (platform === "linux")
|
|
13
|
+
return "linux";
|
|
14
|
+
throw new CunaError({
|
|
15
|
+
code: "cuna.platform.unsupported",
|
|
16
|
+
hint: "Run `cuna doctor` to see which runtime features this platform provides.",
|
|
17
|
+
message: `The ${platform} operating system is not supported.`,
|
|
18
|
+
exitCode: EXIT_CODES.unsupported,
|
|
19
|
+
details: { platform },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function resolvePlatformPaths(input) {
|
|
23
|
+
const kind = resolvePlatformKind(input.platform);
|
|
24
|
+
if (kind === "windows") {
|
|
25
|
+
const appData = input.env.APPDATA ?? win32.join(input.homeDirectory, "AppData", "Roaming");
|
|
26
|
+
const localAppData = input.env.LOCALAPPDATA ?? win32.join(input.homeDirectory, "AppData", "Local");
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
configDirectory: win32.join(appData, "Cuna"),
|
|
29
|
+
stateDirectory: win32.join(localAppData, "Cuna", "State"),
|
|
30
|
+
runtimeDirectory: win32.join(localAppData, "Cuna", "Runtime"),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
if (kind === "macos") {
|
|
34
|
+
return Object.freeze({
|
|
35
|
+
configDirectory: posix.join(input.homeDirectory, "Library", "Application Support", "Cuna"),
|
|
36
|
+
stateDirectory: posix.join(input.homeDirectory, "Library", "Application Support", "Cuna", "State"),
|
|
37
|
+
runtimeDirectory: posix.join(input.env.TMPDIR ?? "/tmp", `cuna-${input.userId ?? "user"}`),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const configRoot = input.env.XDG_CONFIG_HOME ?? posix.join(input.homeDirectory, ".config");
|
|
41
|
+
const stateRoot = input.env.XDG_STATE_HOME ?? posix.join(input.homeDirectory, ".local", "state");
|
|
42
|
+
const runtimeRoot = input.env.XDG_RUNTIME_DIR ?? posix.join(input.homeDirectory, ".local", "run");
|
|
43
|
+
return Object.freeze({
|
|
44
|
+
configDirectory: posix.join(configRoot, "cuna"),
|
|
45
|
+
stateDirectory: posix.join(stateRoot, "cuna"),
|
|
46
|
+
runtimeDirectory: posix.join(runtimeRoot, "cuna"),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async function readSafeConfig(kind, expectedUserId, path, maximumBytes) {
|
|
50
|
+
let handle;
|
|
51
|
+
try {
|
|
52
|
+
handle = await open(path, fileConstants.O_RDONLY | fileConstants.O_NOFOLLOW);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error.code === "ENOENT")
|
|
56
|
+
return Object.freeze({ exists: false });
|
|
57
|
+
throw configFileError("unreadable", error);
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const metadata = await handle.stat();
|
|
61
|
+
if (!metadata.isFile())
|
|
62
|
+
throw configFileError("unsafe_type");
|
|
63
|
+
if (metadata.size > maximumBytes)
|
|
64
|
+
throw configFileError("oversized");
|
|
65
|
+
if (kind !== "windows") {
|
|
66
|
+
if (expectedUserId !== undefined && metadata.uid !== expectedUserId) {
|
|
67
|
+
throw configFileError("wrong_owner");
|
|
68
|
+
}
|
|
69
|
+
if ((metadata.mode & 0o022) !== 0)
|
|
70
|
+
throw configFileError("unsafe_permissions");
|
|
71
|
+
}
|
|
72
|
+
const text = await handle.readFile({ encoding: "utf8" });
|
|
73
|
+
if (Buffer.byteLength(text, "utf8") > maximumBytes)
|
|
74
|
+
throw configFileError("oversized");
|
|
75
|
+
return Object.freeze({ exists: true, text });
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error instanceof CunaError)
|
|
79
|
+
throw error;
|
|
80
|
+
throw configFileError("unreadable", error);
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
await handle.close();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The predicates `readSafeConfig` enforces, applied to a file that is about to
|
|
88
|
+
* be replaced rather than read. Written once so the two sides cannot drift:
|
|
89
|
+
* a file the CLI would refuse to read must never be a file it silently
|
|
90
|
+
* overwrites. Windows is excluded from the ownership and mode checks here for
|
|
91
|
+
* the same reason it is excluded there — `st_uid` and the POSIX mode bits carry
|
|
92
|
+
* no ACL meaning on that platform, and the encrypted session store owns the
|
|
93
|
+
* only ACL authority in this codebase.
|
|
94
|
+
*/
|
|
95
|
+
async function assertReplaceableConfigFile(kind, expectedUserId, path) {
|
|
96
|
+
let metadata;
|
|
97
|
+
try {
|
|
98
|
+
metadata = await lstat(path);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error.code === "ENOENT")
|
|
102
|
+
return;
|
|
103
|
+
throw configFileError("unwritable", error);
|
|
104
|
+
}
|
|
105
|
+
if (metadata.isSymbolicLink() || !metadata.isFile())
|
|
106
|
+
throw configFileError("unsafe_type");
|
|
107
|
+
if (kind !== "windows") {
|
|
108
|
+
if (expectedUserId !== undefined && metadata.uid !== expectedUserId)
|
|
109
|
+
throw configFileError("wrong_owner");
|
|
110
|
+
if ((metadata.mode & 0o022) !== 0)
|
|
111
|
+
throw configFileError("unsafe_permissions");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function writeSafeConfig(kind, expectedUserId, path, text, maximumBytes) {
|
|
115
|
+
if (Buffer.byteLength(text, "utf8") > maximumBytes)
|
|
116
|
+
throw configFileError("oversized");
|
|
117
|
+
const directory = dirname(path);
|
|
118
|
+
try {
|
|
119
|
+
await mkdir(directory, { recursive: true, mode: 0o700 });
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
throw configFileError("unwritable", error);
|
|
123
|
+
}
|
|
124
|
+
await assertReplaceableConfigFile(kind, expectedUserId, path);
|
|
125
|
+
// A sibling in the same directory, so the rename is a same-filesystem atomic
|
|
126
|
+
// replacement rather than a copy. `O_EXCL` means this process never writes
|
|
127
|
+
// through a name another process or a symlink already claimed.
|
|
128
|
+
const temporary = `${path}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
|
|
129
|
+
let handle;
|
|
130
|
+
try {
|
|
131
|
+
handle = await open(temporary, fileConstants.O_WRONLY | fileConstants.O_CREAT | fileConstants.O_EXCL, 0o600);
|
|
132
|
+
await handle.writeFile(text, { encoding: "utf8" });
|
|
133
|
+
await handle.sync();
|
|
134
|
+
await handle.close();
|
|
135
|
+
handle = undefined;
|
|
136
|
+
await chmod(temporary, 0o600);
|
|
137
|
+
await rename(temporary, path);
|
|
138
|
+
await chmod(path, 0o600);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
try {
|
|
142
|
+
await handle?.close();
|
|
143
|
+
}
|
|
144
|
+
catch { /* the replacement already failed */ }
|
|
145
|
+
try {
|
|
146
|
+
await unlink(temporary);
|
|
147
|
+
}
|
|
148
|
+
catch { /* the temporary may never have been created */ }
|
|
149
|
+
if (error instanceof CunaError)
|
|
150
|
+
throw error;
|
|
151
|
+
throw configFileError("unwritable", error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The exclusive-create half of the pair above.
|
|
156
|
+
*
|
|
157
|
+
* Deliberately NOT built on `writeSafeConfig`: there is no sequence of replace
|
|
158
|
+
* plus check that is atomic, and adding a pre-read here would reintroduce the
|
|
159
|
+
* exact race this exists to close. The single `open` is the whole mechanism.
|
|
160
|
+
*
|
|
161
|
+
* `assertReplaceableConfigFile` is not called either, and its absence is the
|
|
162
|
+
* point — it returns quietly when the path does not exist, which is the only
|
|
163
|
+
* case that reaches the `open` at all, and it would otherwise leave a window
|
|
164
|
+
* between its own `lstat` and the create.
|
|
165
|
+
*/
|
|
166
|
+
async function createExclusiveConfig(path, text, maximumBytes) {
|
|
167
|
+
if (Buffer.byteLength(text, "utf8") > maximumBytes)
|
|
168
|
+
throw configFileError("oversized");
|
|
169
|
+
try {
|
|
170
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw configFileError("unwritable", error);
|
|
174
|
+
}
|
|
175
|
+
let handle;
|
|
176
|
+
try {
|
|
177
|
+
handle = await open(path, fileConstants.O_WRONLY | fileConstants.O_CREAT | fileConstants.O_EXCL | fileConstants.O_NOFOLLOW, 0o600);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
// The name was taken between this caller deciding to take it and trying to.
|
|
181
|
+
// That is the answer, not a failure.
|
|
182
|
+
if (error.code === "EEXIST")
|
|
183
|
+
return false;
|
|
184
|
+
throw configFileError("unwritable", error);
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
await handle.writeFile(text, { encoding: "utf8" });
|
|
188
|
+
await handle.sync();
|
|
189
|
+
await handle.close();
|
|
190
|
+
handle = undefined;
|
|
191
|
+
await chmod(path, 0o600);
|
|
192
|
+
return true;
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
try {
|
|
196
|
+
await handle?.close();
|
|
197
|
+
}
|
|
198
|
+
catch { /* the create already failed */ }
|
|
199
|
+
// A half-written slot would block this Machine forever with bytes nobody
|
|
200
|
+
// can read, so the failed create takes its own file with it.
|
|
201
|
+
try {
|
|
202
|
+
await unlink(path);
|
|
203
|
+
}
|
|
204
|
+
catch { /* it may never have been created */ }
|
|
205
|
+
throw configFileError("unwritable", error);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function configFileError(reason, cause) {
|
|
209
|
+
return new CunaError({
|
|
210
|
+
code: "cuna.config.unsafe_file",
|
|
211
|
+
message: "The Cuna configuration file is unavailable or unsafe.",
|
|
212
|
+
exitCode: EXIT_CODES.policy,
|
|
213
|
+
hint: "Fix the user-owned configuration file permissions or select a safe file explicitly.",
|
|
214
|
+
details: { reason },
|
|
215
|
+
...(cause === undefined ? {} : { cause }),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
export function createPlatformAdapter(input) {
|
|
219
|
+
const environment = {
|
|
220
|
+
platform: input?.platform ?? process.platform,
|
|
221
|
+
env: input?.env ?? process.env,
|
|
222
|
+
homeDirectory: input?.homeDirectory ?? homedir(),
|
|
223
|
+
...(input?.userId === undefined
|
|
224
|
+
? typeof process.getuid === "function"
|
|
225
|
+
? { userId: process.getuid() }
|
|
226
|
+
: {}
|
|
227
|
+
: { userId: input.userId }),
|
|
228
|
+
};
|
|
229
|
+
const kind = resolvePlatformKind(environment.platform);
|
|
230
|
+
const paths = resolvePlatformPaths(environment);
|
|
231
|
+
const adapter = {
|
|
232
|
+
kind,
|
|
233
|
+
paths,
|
|
234
|
+
readSafeConfig: (path, maximumBytes) => readSafeConfig(kind, environment.userId, path, maximumBytes),
|
|
235
|
+
writeSafeConfig: (path, text, maximumBytes) => writeSafeConfig(kind, environment.userId, path, text, maximumBytes),
|
|
236
|
+
createExclusiveConfig: (path, text, maximumBytes) => createExclusiveConfig(path, text, maximumBytes),
|
|
237
|
+
};
|
|
238
|
+
return Object.freeze(adapter);
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/platform/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface RuntimeSupport {
|
|
2
|
+
readonly nodeRuntime: boolean;
|
|
3
|
+
readonly platform: boolean;
|
|
4
|
+
readonly architecture: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function evaluateRuntimeSupport(input: {
|
|
7
|
+
readonly nodeVersion: string;
|
|
8
|
+
readonly platform: NodeJS.Platform;
|
|
9
|
+
readonly architecture: NodeJS.Architecture;
|
|
10
|
+
}): RuntimeSupport;
|
|
11
|
+
export declare function isSupportedNodeVersion(version: string): boolean;
|
|
12
|
+
//# sourceMappingURL=support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/platform/support.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;CAC5C,GAAG,cAAc,CAMjB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAU/D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const SUPPORTED_PLATFORMS = new Set(["win32", "darwin", "linux"]);
|
|
2
|
+
const SUPPORTED_ARCHITECTURES = new Set(["x64", "arm64"]);
|
|
3
|
+
export function evaluateRuntimeSupport(input) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
nodeRuntime: isSupportedNodeVersion(input.nodeVersion),
|
|
6
|
+
platform: SUPPORTED_PLATFORMS.has(input.platform),
|
|
7
|
+
architecture: SUPPORTED_ARCHITECTURES.has(input.architecture),
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export function isSupportedNodeVersion(version) {
|
|
11
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u.exec(version);
|
|
12
|
+
if (match === null)
|
|
13
|
+
return false;
|
|
14
|
+
const major = Number(match[1]);
|
|
15
|
+
const minor = Number(match[2]);
|
|
16
|
+
const patch = Number(match[3]);
|
|
17
|
+
if (![major, minor, patch].every(Number.isSafeInteger))
|
|
18
|
+
return false;
|
|
19
|
+
if (major === 22)
|
|
20
|
+
return minor > 17 || (minor === 17 && patch >= 1);
|
|
21
|
+
if (major === 24)
|
|
22
|
+
return minor > 4 || (minor === 4 && patch >= 1);
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../src/platform/support.ts"],"names":[],"mappings":"AAMA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/E,MAAM,UAAU,sBAAsB,CAAC,KAItC;IACC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC;QACtD,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjD,YAAY,EAAE,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export declare const LOCAL_PTY_PROTOCOL: "cuna.local-pty.v1";
|
|
2
|
+
export type PtyEvidenceStatus = "verified" | "unverified" | "unavailable";
|
|
3
|
+
export interface PtyCapabilities {
|
|
4
|
+
readonly rawInput: boolean;
|
|
5
|
+
readonly resize: boolean;
|
|
6
|
+
readonly signals: boolean;
|
|
7
|
+
readonly utf8: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface PtyAdapterEvidence {
|
|
10
|
+
readonly status: PtyEvidenceStatus;
|
|
11
|
+
readonly adapterId: string;
|
|
12
|
+
readonly protocol: typeof LOCAL_PTY_PROTOCOL;
|
|
13
|
+
readonly platform: NodeJS.Platform;
|
|
14
|
+
readonly observedAt: number;
|
|
15
|
+
readonly expiresAt: number;
|
|
16
|
+
readonly artifactDigest: string;
|
|
17
|
+
readonly capabilities: PtyCapabilities;
|
|
18
|
+
readonly reason?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface PtySpawnRequest {
|
|
21
|
+
readonly executable: string;
|
|
22
|
+
readonly args: readonly string[];
|
|
23
|
+
readonly cwd?: string;
|
|
24
|
+
readonly environment?: Readonly<Record<string, string>>;
|
|
25
|
+
readonly columns: number;
|
|
26
|
+
readonly rows: number;
|
|
27
|
+
}
|
|
28
|
+
export interface PtyExit {
|
|
29
|
+
readonly exitCode: number | null;
|
|
30
|
+
readonly signal: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface PtyHandle {
|
|
33
|
+
readonly pid: number;
|
|
34
|
+
readonly output: AsyncIterable<string>;
|
|
35
|
+
write(data: string): void;
|
|
36
|
+
resize(columns: number, rows: number): void;
|
|
37
|
+
signal(signal: "interrupt" | "terminate"): void;
|
|
38
|
+
wait(): Promise<PtyExit>;
|
|
39
|
+
close(): void;
|
|
40
|
+
}
|
|
41
|
+
export interface PtyAdapter {
|
|
42
|
+
probe(signal?: AbortSignal): Promise<PtyAdapterEvidence>;
|
|
43
|
+
spawn(request: PtySpawnRequest): PtyHandle;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/pty/contracts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,EAAG,mBAA4B,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;IAChD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzD,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/pty/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAA4B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type PtyAdapter, type PtyAdapterEvidence } from "./contracts.js";
|
|
2
|
+
export interface VerifiedPtyAdapter {
|
|
3
|
+
readonly adapter: PtyAdapter;
|
|
4
|
+
readonly evidence: PtyAdapterEvidence & {
|
|
5
|
+
readonly status: "verified";
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export declare function requireVerifiedPtyAdapter(input: {
|
|
9
|
+
readonly adapter: PtyAdapter | undefined;
|
|
10
|
+
readonly platform?: NodeJS.Platform;
|
|
11
|
+
readonly now?: number;
|
|
12
|
+
readonly signal?: AbortSignal;
|
|
13
|
+
}): Promise<VerifiedPtyAdapter>;
|
|
14
|
+
//# sourceMappingURL=evidence-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-gate.d.ts","sourceRoot":"","sources":["../../src/pty/evidence-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG;QAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;CACzE;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8B9B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { LOCAL_PTY_PROTOCOL } from "./contracts.js";
|
|
2
|
+
import { runtimeFailure } from "../runtime/errors.js";
|
|
3
|
+
export async function requireVerifiedPtyAdapter(input) {
|
|
4
|
+
if (input.adapter === undefined) {
|
|
5
|
+
throw runtimeFailure("pty_unavailable", "No PTY adapter is installed for this runtime.");
|
|
6
|
+
}
|
|
7
|
+
const evidence = await input.adapter.probe(input.signal);
|
|
8
|
+
const now = input.now ?? Date.now();
|
|
9
|
+
const platform = input.platform ?? process.platform;
|
|
10
|
+
if (evidence.status !== "verified" ||
|
|
11
|
+
evidence.protocol !== LOCAL_PTY_PROTOCOL ||
|
|
12
|
+
evidence.platform !== platform ||
|
|
13
|
+
!Number.isFinite(evidence.observedAt) ||
|
|
14
|
+
!Number.isFinite(evidence.expiresAt) ||
|
|
15
|
+
evidence.expiresAt <= now ||
|
|
16
|
+
evidence.expiresAt < evidence.observedAt ||
|
|
17
|
+
!/^sha256:[a-f0-9]{64}$/u.test(evidence.artifactDigest) ||
|
|
18
|
+
!evidence.capabilities.rawInput ||
|
|
19
|
+
!evidence.capabilities.resize ||
|
|
20
|
+
!evidence.capabilities.signals ||
|
|
21
|
+
!evidence.capabilities.utf8) {
|
|
22
|
+
throw runtimeFailure("pty_evidence_invalid", "The installed PTY adapter lacks current conformance evidence.", {
|
|
23
|
+
safeDetails: {
|
|
24
|
+
adapter_id: boundedIdentifier(evidence.adapterId),
|
|
25
|
+
evidence_status: evidence.status,
|
|
26
|
+
platform: evidence.platform,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return Object.freeze({ adapter: input.adapter, evidence: evidence });
|
|
31
|
+
}
|
|
32
|
+
function boundedIdentifier(value) {
|
|
33
|
+
return /^[A-Za-z0-9._-]{1,64}$/u.test(value) ? value : "invalid_adapter";
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=evidence-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-gate.js","sourceRoot":"","sources":["../../src/pty/evidence-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA4C,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOtD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAK/C;IACC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,cAAc,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACpD,IACE,QAAQ,CAAC,MAAM,KAAK,UAAU;QAC9B,QAAQ,CAAC,QAAQ,KAAK,kBAAkB;QACxC,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QAC9B,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,QAAQ,CAAC,SAAS,IAAI,GAAG;QACzB,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU;QACxC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvD,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ;QAC/B,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM;QAC7B,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO;QAC9B,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAC3B,CAAC;QACD,MAAM,cAAc,CAAC,sBAAsB,EAAE,+DAA+D,EAAE;YAC5G,WAAW,EAAE;gBACX,UAAU,EAAE,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACjD,eAAe,EAAE,QAAQ,CAAC,MAAM;gBAChC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAgE,EAAE,CAAC,CAAC;AAC/H,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pty/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReadStream, WriteStream } from "node:tty";
|
|
2
|
+
import type { HostTerminalAdapter } from "../terminal/mode.js";
|
|
3
|
+
import type { ForegroundTerminalHost } from "../terminal/foreground.js";
|
|
4
|
+
export declare function createNodeHostTerminalAdapter(input?: {
|
|
5
|
+
readonly stdin?: ReadStream;
|
|
6
|
+
readonly stdout?: WriteStream;
|
|
7
|
+
readonly writeTimeoutMs?: number;
|
|
8
|
+
}): HostTerminalAdapter;
|
|
9
|
+
export declare function createNodeForegroundTerminalHost(input?: {
|
|
10
|
+
readonly stdin?: ReadStream;
|
|
11
|
+
readonly stdout?: WriteStream;
|
|
12
|
+
readonly writeTimeoutMs?: number;
|
|
13
|
+
}): ForegroundTerminalHost;
|
|
14
|
+
//# sourceMappingURL=node-host-terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-host-terminal.d.ts","sourceRoot":"","sources":["../../src/pty/node-host-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAmBxE,wBAAgB,6BAA6B,CAAC,KAAK,GAAE;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,mBAAmB,CAiD3B;AAED,wBAAgB,gCAAgC,CAAC,KAAK,GAAE;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,sBAAsB,CA6C9B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { HostTerminalLease } from "../terminal/mode.js";
|
|
2
|
+
import { runtimeFailure } from "../runtime/errors.js";
|
|
3
|
+
const ENABLE_LOCAL_BRACKETED_PASTE = "\u001b[?2004h";
|
|
4
|
+
// Rich mode renders cells locally: inherited mouse reporting must not steal
|
|
5
|
+
// the host terminal's text selection and clipboard gestures.
|
|
6
|
+
const DISABLE_MOUSE_REPORTING = "\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l";
|
|
7
|
+
const ENTER_ALTERNATE_SCREEN = `\u001b[?1049h${DISABLE_MOUSE_REPORTING}${ENABLE_LOCAL_BRACKETED_PASTE}\u001b[H`;
|
|
8
|
+
const LEAVE_ALTERNATE_SCREEN = "\u001b[?1049l";
|
|
9
|
+
const RESET_REMOTE_MODES = [
|
|
10
|
+
"\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1004l\u001b[?1006l",
|
|
11
|
+
"\u001b[?2004l\u001b[?2026l",
|
|
12
|
+
"\u001b[?1l\u001b[?6l\u001b[4l\u001b[20l\u001b>",
|
|
13
|
+
"\u001b[?1049l\u001b[?1047l\u001b[?47l",
|
|
14
|
+
"\u001b[r\u001b[0m\u001b[?25h",
|
|
15
|
+
].join("");
|
|
16
|
+
const HOST_WRITE_TIMEOUT_MS = 5_000;
|
|
17
|
+
const ACTIVE_HOST_INPUTS = new WeakSet();
|
|
18
|
+
export function createNodeHostTerminalAdapter(input = {}) {
|
|
19
|
+
const stdin = input.stdin ?? process.stdin;
|
|
20
|
+
const stdout = input.stdout ?? process.stdout;
|
|
21
|
+
const writeTimeoutMs = input.writeTimeoutMs ?? HOST_WRITE_TIMEOUT_MS;
|
|
22
|
+
if (!Number.isSafeInteger(writeTimeoutMs) || writeTimeoutMs < 1 || writeTimeoutMs > 60_000) {
|
|
23
|
+
throw new RangeError("Host terminal write timeout must be between 1 and 60000 milliseconds.");
|
|
24
|
+
}
|
|
25
|
+
let shouldPauseAfterRawMode = false;
|
|
26
|
+
let ownsRawMode = false;
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
enterRawMode() {
|
|
29
|
+
assertInteractive(stdin, stdout);
|
|
30
|
+
if (ACTIVE_HOST_INPUTS.has(stdin)) {
|
|
31
|
+
throw runtimeFailure("session_conflict", "This host terminal is already owned by another foreground session.");
|
|
32
|
+
}
|
|
33
|
+
ACTIVE_HOST_INPUTS.add(stdin);
|
|
34
|
+
ownsRawMode = true;
|
|
35
|
+
// `readableFlowing === null` is Node's initial no-consumer state. Calling
|
|
36
|
+
// resume() changes it to `true` and keeps the process alive, so restoration
|
|
37
|
+
// must pause both the initial and explicitly-paused states.
|
|
38
|
+
shouldPauseAfterRawMode = stdin.readableFlowing !== true;
|
|
39
|
+
stdin.setRawMode(true);
|
|
40
|
+
stdin.resume();
|
|
41
|
+
},
|
|
42
|
+
async enterAlternateScreen() {
|
|
43
|
+
assertInteractive(stdin, stdout);
|
|
44
|
+
await writeWithBackpressure(stdout, new TextEncoder().encode(ENTER_ALTERNATE_SCREEN), writeTimeoutMs);
|
|
45
|
+
},
|
|
46
|
+
async disableRemoteModes() {
|
|
47
|
+
if (stdout.isTTY)
|
|
48
|
+
await writeWithBackpressure(stdout, new TextEncoder().encode(RESET_REMOTE_MODES), writeTimeoutMs);
|
|
49
|
+
},
|
|
50
|
+
async leaveAlternateScreen() {
|
|
51
|
+
if (stdout.isTTY)
|
|
52
|
+
await writeWithBackpressure(stdout, new TextEncoder().encode(LEAVE_ALTERNATE_SCREEN), writeTimeoutMs);
|
|
53
|
+
},
|
|
54
|
+
async leaveRawMode() {
|
|
55
|
+
if (!ownsRawMode)
|
|
56
|
+
return;
|
|
57
|
+
if (shouldPauseAfterRawMode) {
|
|
58
|
+
stdin.pause();
|
|
59
|
+
// Node stops the native stdin read on the next tick after pause().
|
|
60
|
+
// Let Node issue that stop before changing Windows console input mode;
|
|
61
|
+
// changing mode during an active read also restarts the native read.
|
|
62
|
+
await new Promise((resolve) => process.nextTick(resolve));
|
|
63
|
+
}
|
|
64
|
+
if (stdin.isTTY && typeof stdin.setRawMode === "function")
|
|
65
|
+
stdin.setRawMode(false);
|
|
66
|
+
shouldPauseAfterRawMode = false;
|
|
67
|
+
ownsRawMode = false;
|
|
68
|
+
ACTIVE_HOST_INPUTS.delete(stdin);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export function createNodeForegroundTerminalHost(input = {}) {
|
|
73
|
+
const stdin = input.stdin ?? process.stdin;
|
|
74
|
+
const stdout = input.stdout ?? process.stdout;
|
|
75
|
+
const writeTimeoutMs = input.writeTimeoutMs ?? HOST_WRITE_TIMEOUT_MS;
|
|
76
|
+
if (!Number.isSafeInteger(writeTimeoutMs) || writeTimeoutMs < 1 || writeTimeoutMs > 60_000) {
|
|
77
|
+
throw new RangeError("Host terminal write timeout must be between 1 and 60000 milliseconds.");
|
|
78
|
+
}
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
dimensions() {
|
|
81
|
+
assertInteractive(stdin, stdout);
|
|
82
|
+
return Object.freeze({ columns: stdout.columns, rows: stdout.rows });
|
|
83
|
+
},
|
|
84
|
+
async acquire(mode = "rich") {
|
|
85
|
+
const adapter = createNodeHostTerminalAdapter({ stdin, stdout, writeTimeoutMs });
|
|
86
|
+
if (mode === "rich")
|
|
87
|
+
return await HostTerminalLease.acquire(adapter);
|
|
88
|
+
if (mode !== "plain")
|
|
89
|
+
throw new RangeError("Host terminal mode must be rich or plain.");
|
|
90
|
+
return await HostTerminalLease.acquire({
|
|
91
|
+
enterRawMode: () => adapter.enterRawMode(),
|
|
92
|
+
// Passthrough yields the current screen to the remote program. It must
|
|
93
|
+
// not claim alternate-screen ownership or paint trusted chrome.
|
|
94
|
+
enterAlternateScreen: async () => {
|
|
95
|
+
assertInteractive(stdin, stdout);
|
|
96
|
+
await writeWithBackpressure(stdout, new TextEncoder().encode(ENABLE_LOCAL_BRACKETED_PASTE), writeTimeoutMs);
|
|
97
|
+
},
|
|
98
|
+
disableRemoteModes: () => adapter.disableRemoteModes(),
|
|
99
|
+
leaveAlternateScreen: () => undefined,
|
|
100
|
+
leaveRawMode: () => adapter.leaveRawMode(),
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
async write(bytes) {
|
|
104
|
+
assertInteractive(stdin, stdout);
|
|
105
|
+
await writeWithBackpressure(stdout, bytes, writeTimeoutMs);
|
|
106
|
+
},
|
|
107
|
+
onInput(listener) {
|
|
108
|
+
const receive = (chunk) => listener(typeof chunk === "string" ? new TextEncoder().encode(chunk) : new Uint8Array(chunk));
|
|
109
|
+
stdin.on("data", receive);
|
|
110
|
+
return () => stdin.removeListener("data", receive);
|
|
111
|
+
},
|
|
112
|
+
onResize(listener) {
|
|
113
|
+
stdout.on("resize", listener);
|
|
114
|
+
return () => stdout.removeListener("resize", listener);
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function assertInteractive(stdin, stdout) {
|
|
119
|
+
if (!stdin.isTTY || !stdout.isTTY || typeof stdin.setRawMode !== "function") {
|
|
120
|
+
throw runtimeFailure("pty_unavailable", "The current streams do not provide an interactive host terminal.");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function writeWithBackpressure(stdout, bytes, timeoutMs) {
|
|
124
|
+
await new Promise((resolve, reject) => {
|
|
125
|
+
let callbackComplete = false;
|
|
126
|
+
let drainComplete = false;
|
|
127
|
+
let settled = false;
|
|
128
|
+
const timeout = setTimeout(() => finish(new Error("The host terminal output sink exceeded its bounded deadline.")), timeoutMs);
|
|
129
|
+
timeout.unref();
|
|
130
|
+
const cleanup = () => {
|
|
131
|
+
clearTimeout(timeout);
|
|
132
|
+
stdout.removeListener("error", onError);
|
|
133
|
+
stdout.removeListener("drain", onDrain);
|
|
134
|
+
};
|
|
135
|
+
const finish = (error) => {
|
|
136
|
+
if (settled)
|
|
137
|
+
return;
|
|
138
|
+
if (error === undefined || error === null) {
|
|
139
|
+
if (!callbackComplete || !drainComplete)
|
|
140
|
+
return;
|
|
141
|
+
settled = true;
|
|
142
|
+
cleanup();
|
|
143
|
+
resolve();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
settled = true;
|
|
147
|
+
cleanup();
|
|
148
|
+
reject(error);
|
|
149
|
+
};
|
|
150
|
+
const onError = (error) => finish(error);
|
|
151
|
+
const onDrain = () => {
|
|
152
|
+
drainComplete = true;
|
|
153
|
+
finish();
|
|
154
|
+
};
|
|
155
|
+
stdout.once("error", onError);
|
|
156
|
+
let accepted;
|
|
157
|
+
try {
|
|
158
|
+
accepted = stdout.write(Buffer.from(bytes), (error) => {
|
|
159
|
+
callbackComplete = true;
|
|
160
|
+
finish(error);
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
finish(error instanceof Error ? error : new Error("The host terminal output sink failed."));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
drainComplete = accepted;
|
|
168
|
+
if (!accepted)
|
|
169
|
+
stdout.once("drain", onDrain);
|
|
170
|
+
finish();
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=node-host-terminal.js.map
|