.docs/remote-architecture.md | 80 ++ .gitignore | 1 + .plans/19-remote-endpoints-hosted-static.md | 350 ++++++ REMOTE.md | 77 +- apps/desktop/package.json | 4 + apps/desktop/src/clientPersistence.test.ts | 6 + apps/desktop/src/clientPersistence.ts | 15 +- apps/desktop/src/desktopSettings.test.ts | 83 ++ apps/desktop/src/desktopSettings.ts | 33 + apps/desktop/src/main.ts | 133 ++- apps/desktop/src/preload.ts | 59 + apps/desktop/src/serverExposure.test.ts | 121 +- apps/desktop/src/serverExposure.ts | 110 +- apps/desktop/src/sshEnvironment.test.ts | 98 ++ apps/desktop/src/sshEnvironment.ts | 420 +++++++ apps/desktop/src/tailscaleEndpointProvider.test.ts | 122 ++ apps/desktop/src/tailscaleEndpointProvider.ts | 142 +++ apps/server/package.json | 1 + apps/server/src/cli-config.test.ts | 36 + apps/server/src/cli.test.ts | 2 + apps/server/src/cli.ts | 47 + apps/server/src/config.ts | 4 + apps/server/src/environment/Layers/ServerEnvironment.test.ts | 2 + apps/server/src/keybindings.ts | 292 +---- apps/server/src/server.test.ts | 41 +- apps/server/src/server.ts | 53 + apps/server/src/ws.ts | 4 + apps/web/src/branding.ts | 2 +- apps/web/src/clientPersistenceStorage.test.ts | 6 + apps/web/src/clientPersistenceStorage.ts | 17 +- apps/web/src/components/BranchToolbar.tsx | 42 +- apps/web/src/components/ChatView.browser.tsx | 68 ++ apps/web/src/components/ChatView.tsx | 375 +++++-- apps/web/src/components/KeybindingsToast.browser.tsx | 2 +- apps/web/src/components/ProjectFavicon.tsx | 26 +- apps/web/src/components/WebSocketConnectionSurface.logic.test.ts | 1 + apps/web/src/components/WebSocketConnectionSurface.tsx | 16 +- apps/web/src/components/auth/PairingRouteSurface.tsx | 123 ++ apps/web/src/components/chat/ChatComposer.tsx | 29 +- apps/web/src/components/chat/ChatHeader.test.ts | 48 + apps/web/src/components/chat/ChatHeader.tsx | 21 +- apps/web/src/components/chat/ComposerBannerStack.tsx | 195 ++++ apps/web/src/components/chat/ComposerPrimaryActions.tsx | 29 +- apps/web/src/components/desktop/SshPasswordPromptDialog.tsx | 221 ++++ apps/web/src/components/settings/ConnectionsSettings.tsx | 1929 +++++++++++++++++++++++++++----- apps/web/src/components/settings/SettingsPanels.browser.tsx | 311 ++++- apps/web/src/components/settings/pairingUrls.test.ts | 24 + apps/web/src/components/settings/pairingUrls.ts | 20 + apps/web/src/components/settings/settingsLayout.tsx | 2 +- apps/web/src/components/ui/alert-dialog.tsx | 4 +- apps/web/src/components/ui/dialog.tsx | 4 +- apps/web/src/components/ui/scroll-area.tsx | 2 +- apps/web/src/environments/remote/api.test.ts | 13 + apps/web/src/environments/remote/api.ts | 6 + apps/web/src/environments/remote/target.ts | 11 + apps/web/src/environments/runtime/catalog.ts | 22 +- apps/web/src/environments/runtime/index.ts | 1 + apps/web/src/environments/runtime/service.addSavedEnvironment.test.ts | 837 +++++++++++++- apps/web/src/environments/runtime/service.threadSubscriptions.test.ts | 205 +++- apps/web/src/environments/runtime/service.ts | 758 +++++++++++-- apps/web/src/hostedPairing.test.ts | 66 ++ apps/web/src/hostedPairing.ts | 70 ++ apps/web/src/localApi.test.ts | 31 + apps/web/src/localApi.ts | 47 +- apps/web/src/routes/__root.tsx | 95 +- apps/web/src/routes/_chat.index.tsx | 55 + apps/web/src/routes/_chat.tsx | 5 +- apps/web/src/routes/pair.tsx | 18 +- apps/web/src/routes/settings.tsx | 5 +- apps/web/src/rpc/protocol.ts | 186 ++- apps/web/src/rpc/serverState.test.ts | 23 + apps/web/src/rpc/serverState.ts | 10 +- apps/web/src/rpc/wsConnectionState.test.ts | 34 +- apps/web/src/rpc/wsConnectionState.ts | 69 +- apps/web/src/rpc/wsRpcClient.ts | 42 +- apps/web/src/rpc/wsTransport.test.ts | 79 +- apps/web/src/rpc/wsTransport.ts | 81 +- apps/web/src/store.test.ts | 34 + apps/web/src/store.ts | 17 + apps/web/src/uiStateStore.test.ts | 25 + apps/web/src/uiStateStore.ts | 28 +- apps/web/src/versionSkew.test.ts | 78 ++ apps/web/src/versionSkew.ts | 116 ++ apps/web/src/vite-env.d.ts | 3 + apps/web/vercel.json | 10 + apps/web/vite.config.ts | 10 + bun.lock | 88 +- package.json | 19 +- packages/client-runtime/src/advertisedEndpoint.test.ts | 61 + packages/client-runtime/src/advertisedEndpoint.ts | 78 ++ packages/client-runtime/src/index.ts | 1 + packages/contracts/src/index.ts | 1 + packages/contracts/src/ipc.ts | 65 +- packages/contracts/src/remoteAccess.ts | 68 ++ packages/contracts/src/server.ts | 1 + packages/shared/package.json | 4 + packages/shared/src/keybindings.ts | 283 +++++ packages/ssh/package.json | 46 + packages/ssh/src/auth.test.ts | 65 ++ packages/ssh/src/auth.ts | 205 ++++ packages/ssh/src/command.test.ts | 151 +++ packages/ssh/src/command.ts | 337 ++++++ packages/ssh/src/config.test.ts | 136 +++ packages/ssh/src/config.ts | 251 +++++ packages/ssh/src/errors.ts | 46 + packages/ssh/src/tunnel.test.ts | 294 +++++ packages/ssh/src/tunnel.ts | 1584 ++++++++++++++++++++++++++ packages/ssh/tsconfig.json | 17 + packages/tailscale/package.json | 28 + packages/tailscale/src/index.ts | 1 + packages/tailscale/src/tailscale.test.ts | 141 +++ packages/tailscale/src/tailscale.ts | 320 ++++++ packages/tailscale/tsconfig.json | 17 + patches/effect@4.0.0-beta.59.patch | 277 +++++ scripts/apply-web-brand-assets.ts | 56 + scripts/lib/brand-assets.test.ts | 45 + scripts/lib/brand-assets.ts | 83 +- scripts/release-smoke.ts | 13 + turbo.json | 2 + 119 files changed, 12687 insertions(+), 1040 deletions(-)