feat: add stable client endpoint compatibility

This commit is contained in:
Ogulcan Celik
2026-09-02 02:09:44 +03:00
parent 18e69891dc
commit 4d683cee2c
45 changed files with 2063 additions and 549 deletions
+9
View File
@@ -10478,6 +10478,15 @@
"default": false,
"type": "boolean"
},
"endpoint_protocol_generation": {
"description": "Stable client-owned endpoint generation supported by this server.",
"format": "uint32",
"minimum": 0,
"type": [
"integer",
"null"
]
},
"live_handoff": {
"type": "boolean"
}
@@ -63,7 +63,7 @@ Then attach with:
herdr --remote workbox
```
Remote attach supports Linux, macOS, and Windows local clients connecting to Linux or macOS hosts on x86_64 and aarch64. Herdr checks the remote platform, prefers a matching `herdr` already on the remote `PATH`, then checks common direct, Homebrew, mise, and Nix profile install paths. If no matching binary exists, interactive runs prompt to install one to `~/.local/bin/herdr`; non-interactive runs fail instead of modifying the host. If `~/.local/bin` is not on the remote `PATH`, Herdr warns after install. Windows is not supported as the remote host.
Remote attach supports Linux, macOS, and Windows local clients connecting to Linux or macOS hosts on x86_64 and aarch64. Herdr checks the remote platform, prefers a compatible `herdr` already on the remote `PATH`, then checks common direct, Homebrew, mise, and Nix profile install paths. Local and remote versions do not need to match once both support the stable endpoint generation. If no compatible binary exists, interactive runs prompt to install one to `~/.local/bin/herdr`; non-interactive runs fail instead of modifying the host. If `~/.local/bin` is not on the remote `PATH`, Herdr warns after install. Windows is not supported as the remote host.
By default, `herdr --remote` runs remote setup and the bridge through a temporary SSH config that includes your SSH config first, then adds fallback keepalive settings. Existing user keepalive settings win. Linux and macOS clients also use a private per-attach control socket for connection reuse; Windows OpenSSH does not. Set `[remote].manage_ssh_config = false` to use plain `ssh` without Herdr's generated config or control socket.
@@ -76,7 +76,7 @@ herdr --remote workbox
For any remote authentication failure, verify plain SSH access first with `ssh workbox`, then run `herdr --remote workbox` again.
By default, remote attach uses the normal restart/stop flow if it needs to replace or restart a running remote server. To opt into experimental live handoff for a supported running remote server, pass `--handoff`:
A version difference alone does not replace or restart a running remote server. Remote attach uses the restart/stop flow only for a server that predates the stable endpoint generation or the detached-daemon baseline. To opt into experimental live handoff when that one-time upgrade is needed, pass `--handoff`:
```bash
herdr --remote workbox --handoff
@@ -934,7 +934,14 @@ Errors look like this:
## Protocol stability
Herdr has a protocol version for client/server compatibility. Protocol changes
are reviewed for release compatibility.
The client-rendered Herdr UI uses a stable endpoint generation for local and SSH
servers. Client and server builds do not need to match. During connection setup,
they agree on the core snapshot, screen, input, and blob codecs, and the server advertises
the API methods it supports. A missing method disables only that action on that
machine; it does not disconnect the UI. Servers from before endpoint generation
1 need one final update.
Check the server protocol with `ping` or `herdr status` before depending on new behavior. Handle unknown fields gracefully.
The numbered binary protocol remains for same-install and internal operations,
including direct terminal attach and live handoff. Check `ping` or `herdr status`
before using those operations across different builds. JSON API clients should
ignore unknown fields and handle unsupported methods as normal errors.