Compatibility-native bootstrap

August 25, 2026 ยท View on GitHub

scripts/install-local.ps1 can install the version-locked compatibility seam and queue one remote workspace for first startup. It never writes DSH session JSONL, workspace databases, or arbitrary profile internals.

The queued file is declarative and non-secret: connection identity, public host-key line/fingerprint, key-file path or SSH Agent, allowed roots, and one POSIX directory. Private-key bytes, passwords, passphrases, tokens, shell commands, scripts, and argv fields are rejected before the installer changes DSH.

Flow

  1. Build the adjacent pinned Core and this plugin; completely exit the target DSH Host/Desktop.
  2. Fill a copy of remote-workspace-bootstrap.v1.json using the verified server public host-key line and fingerprint. The identity-file path belongs to the DSH Host machine.
  3. Run the compatibility installer with -BootstrapFile and the matching profile.
  4. On the next DSH startup, the Client reads the queued declaration. It waits for an exact Workspace Provider API v1 health result, creates the SSH profile and connects, resolves the server directory, then calls the native structured-workspace service with a dsh-remote-ssh target.
  5. The queue is removed only after the resulting workspace has been linked. Connection failure, Provider mismatch, or a profile ID conflict leaves it queued and does not create a local fallback workspace.
powershell -ExecutionPolicy Bypass -File .\scripts\install-local.ps1 `
  -Profiles desktop `
  -DshDesktopExecutable 'C:\path\to\DSH Desktop.exe' `
  -DshPackageRoot 'C:\path\to\node_modules\@deepseek-ai\dsh' `
  -BootstrapProfile desktop `
  -BootstrapFile .\docs\examples\remote-workspace-bootstrap.v1.json

root, /, and /root (including descendants) are excluded from unattended bootstrap by default. They require both workspace.highRiskAccepted: true in the JSON and the explicit PowerShell switch -AcceptHighRiskBootstrap; a root username also requires connection.allowRoot: true.

This remains a developer compatibility path pinned to DSH core 0.1.1-rc.2 / Desktop 2.0.2. The script refuses unknown core hashes, mismatched versions, or a live target DSH process. Use -WhatIf for a no-write preflight.

Before acquiring its installer lock or creating a journal, the script scans active persisted session logs for a v0 session header. Core v1 refuses that format, so the installer stops with recovery guidance and makes no changes; restore, export, or migrate the affected history with its matching DSH version before retrying. Installer receipt v5 also records the prior pending-bootstrap file and SHA-256. A failed install or -RestoreLastInstall restores that prior file exactly, or removes a queue created by that transaction.