Skip to content

Update Desktop's own remote installs without asking - #1032

Closed
thesiti92 wants to merge 39 commits into
remote/12-host-down-surfacesfrom
remote/13-dev-remote-updates
Closed

thesiti92 wants to merge 39 commits into
remote/12-host-down-surfacesfrom
remote/13-dev-remote-updates

Conversation

@thesiti92

@thesiti92 thesiti92 commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Updates Whiteboard on a host without asking when Desktop installed it there before, as VS Code updates its server. A first install still asks, and a whiteboard you installed yourself still gets the question.

  • The host's install path asks only when it finds no version Desktop installed.
  • The installer and uninstaller sort versions with the fork's semver module instead of a hand-written comparator.

Stacked on #974.

Test plan

  • Add a host with no Whiteboard: Desktop asks, then installs.
  • Bump Desktop's version and relaunch: the host installs the new version without a question and its server restarts on it.
  • A host with only a hand-installed whiteboard on PATH of another version: Desktop asks.
  • remote-install journey passes.

@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from 491ca94 to e7f38fb Compare October 8, 2026 13:10
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from c6d63ce to 52d2b2e Compare October 8, 2026 13:10
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from e7f38fb to b48915f Compare October 11, 2026 13:28
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from 52d2b2e to 9c42559 Compare October 11, 2026 13:28
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from b48915f to c77fa01 Compare October 11, 2026 13:34
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from 9c42559 to d28d296 Compare October 11, 2026 13:34
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from c77fa01 to 815cd30 Compare October 13, 2026 14:44
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from d28d296 to 6ff1d09 Compare October 13, 2026 14:44
@thesiti92
thesiti92 added this pull request to stack #1105 October 13, 2026 15:38
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from 6ff1d09 to ab2d091 Compare October 13, 2026 16:00
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch 2 times, most recently from 089ca1e to a30078e Compare October 13, 2026 17:22
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch 2 times, most recently from 9959913 to d000415 Compare October 13, 2026 17:38
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from a30078e to b7255b3 Compare October 13, 2026 17:38
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from b7255b3 to d4d6b79 Compare October 13, 2026 21:49
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from d000415 to 6a7b432 Compare October 13, 2026 21:49
@thesiti92
thesiti92 removed this pull request from stack #1105 October 13, 2026 22:42
@thesiti92
thesiti92 added this pull request to stack #1117 October 13, 2026 22:42
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch 2 times, most recently from 92a40c6 to a091e50 Compare October 13, 2026 22:54
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from a094dab to 8bfb9f6 Compare October 13, 2026 22:54
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from a091e50 to 0a0e2a0 Compare October 14, 2026 00:50
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from 8bfb9f6 to 7d0bc9c Compare October 14, 2026 00:50
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch 3 times, most recently from 91e5dbe to 40e65f0 Compare October 14, 2026 07:13
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from 9c8814b to 32e2000 Compare October 14, 2026 07:13
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from 40e65f0 to 969ffd6 Compare October 14, 2026 14:14
Retry shows for exactly the states reviewHostStatus gives a next step, and the Settings buttons run through useHostAction.
The status bar and the notice use the host's own words, such as
"Can't sign in to alex-box", instead of "offline, reconnecting…" for
every state. While the host is offline, both offer Retry. A later
outage in the same window notifies again.

Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 9a4d92ed-7a0d-42a1-9169-574bca60095b
Agent-Session: 1c093463-922b-435b-a925-664d5d5c3c0a
Agent-Session: 2b51b153-90b5-4a72-a052-fccf0beb9f1c
Opening a remote review's source used to wait up to a minute and then
show the raw error. When the host is known to be down it now fails at
once, with the host's words and Retry. The canvas no longer leaves the
rejection unhandled.

Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 9a4d92ed-7a0d-42a1-9169-574bca60095b
Agent-Session: 1c093463-922b-435b-a925-664d5d5c3c0a
Agent-Session: 2b51b153-90b5-4a72-a052-fccf0beb9f1c
The input is disabled and a banner says why, with the step that helps.
A question is never queued. A failed request offers Try again, and a
host that cannot list its agents for now keeps the last list, so Ask
does not disappear.

Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 9a4d92ed-7a0d-42a1-9169-574bca60095b
Agent-Session: 1c093463-922b-435b-a925-664d5d5c3c0a
Agent-Session: 2b51b153-90b5-4a72-a052-fccf0beb9f1c
Common OpenSSH failures read as one sentence naming the host: refused,
unknown host name, timed out, key not accepted, host key changed, and
a connection that stopped answering. Other failures keep OpenSSH's
words. The raw output stays in the log.

Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 9a4d92ed-7a0d-42a1-9169-574bca60095b
Agent-Session: 1c093463-922b-435b-a925-664d5d5c3c0a
Agent-Session: 2b51b153-90b5-4a72-a052-fccf0beb9f1c
The gateway gives a remote review's availability a reason: the host's
sentence while it is down, or why its VS Code server is unavailable.
Source tree stays in the top bar and is disabled with that reason as its
tooltip, instead of disappearing. Missing language extensions do not
disable it.
The checkout banner and the lenses say "The checkout on <host> is
unavailable." for a remote review, not "Local checkout unavailable."
A failed Dismiss shows its error in the banner instead of only logging
it.
The gateway answers a down host's review at once with 503 and its alias, so the navigator no longer checks the catalog first.
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from 61eaf25 to d951095 Compare October 14, 2026 19:55
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from b88ee6e to 3a90432 Compare October 14, 2026 19:56
A whiteboard CLI the user installed on a host is theirs: replacing it with Desktop's version asks first, and a declined host stays declined, as VS Code updates only its own server.
A dev Desktop pins no tarball and cannot build one, so a state-stamped version only made every checkout edit leave its hosts incompatible. The semver comparator stays.
@thesiti92
thesiti92 force-pushed the remote/13-dev-remote-updates branch from d951095 to a1824fb Compare October 14, 2026 20:06
@thesiti92
thesiti92 removed this pull request from stack #1117 October 14, 2026 20:13
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from ed83e74 to a420031 Compare October 14, 2026 20:18
thesiti92 added a commit that referenced this pull request Oct 14, 2026
Folded from #1032: a host with a Desktop or install.sh install updates like VS Code's server; a CLI the user put on PATH still gets the question.
@thesiti92
thesiti92 force-pushed the remote/12-host-down-surfaces branch from a420031 to 13f0aef Compare October 14, 2026 20:44
@thesiti92 thesiti92 closed this Oct 14, 2026
thesiti92 added a commit that referenced this pull request Oct 14, 2026
Folded from #1032: a host with a Desktop or install.sh install updates like VS Code's server; a CLI the user put on PATH still gets the question.
thesiti92 added a commit that referenced this pull request Oct 15, 2026
Folded from #1032: a host with a Desktop or install.sh install updates like VS Code's server; a CLI the user put on PATH still gets the question.
thesiti92 added a commit that referenced this pull request Oct 15, 2026
Replaces the remote installer's seven SSH round trips, and the separate
dev and hand-install paths, with one POSIX script:
`packages/review/remote/install.sh`.

- **Desktop** pipes the copy in its bundled runtime: one SSH call each
to probe, install or update, and uninstall. Progress lines still drive
Settings.
- **Hand installs** use the same file, published beside the tarballs:
`curl -fsSL https://install.dev.fast/releases/<v>/remote/install.sh | sh
-s -- --version <v>`. They land in Desktop's layout, so Desktop updates
them. An old symlinked hand install is adopted.
- **The dev install** runs it with `--file`.
- The on-disk layout, lock and marker are unchanged, so older Desktops
and `whiteboard remote uninstall` keep working.
- **Updates without asking** on a host with an install Desktop
recognises, as VS Code updates its server; a `whiteboard` the user put
on `PATH` still gets the question. Folded from #1032, which this
replaces.
- Removes the per-arch `target` field the old hand hint needed. CI runs
shellcheck on the script.

## Test plan
- [x] Remote host, installer, probe and uninstall unit tests run the
real script under `/bin/sh` (162 pass).
- [x] Container tests (`WB_TEST_CONTAINERS=1`), 17 pass, including new
ones: an update installs beside the old version and moves the launcher;
a hand install through the published script is recognised and updated;
the old hand layout is adopted.
- [x] `remote-install` journey: all 12 checks, including the update
(step 7), uninstall (step 10) and the hand-install line (step 11).
- [x] `pnpm lint`, typecheck (only the known
`diffr/packages/claude-code` failure), shellcheck.
thesiti92 added a commit that referenced this pull request Oct 15, 2026
Starting the remote hosts manager called `reviewSshControlDirectory()`,
which throws on Windows (no uid, no ControlMaster sockets), so every
Windows launch hit an unhandled rejection after the first window opened.
`startRemoteHosts` now returns early on `win32`; every other entry point
already treats a missing manager as "Remote hosts are off."

Windows OpenSSH support is a separate follow-up.

Stacked on #1032.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant