Repository navigation
M4: Start Oxbit on an SSH host from iOS - #42
Merged
Merged
Conversation
The macos job copies the bundled SSH runtime payloads (after the darwin archive is signed and repacked) into the release as remote-runtime-<platform>.tar.gz with a combined remote-runtime-manifest.json. The ios job waits for macos and embeds that manifest through OXBIT_REMOTE_RUNTIME_MANIFEST; remote_runtime.rs validates it and builds the release download URL.
…ronment tauri ios build drops OXBIT_ variables before cargo runs in the Xcode script phase, so the pin uses TAURI_OXBIT_REMOTE_RUNTIME_MANIFEST.
…ntime # Conflicts: # apps/ios/src-tauri/src/lib.rs
Mirror the desktop remote runtime: detect the platform, reuse the shared ~/.oxbit/remote/runtimes/<sha256> install, let the host download the pinned archive with curl or wget, or verify and stream it from the device. Launch desktop.js with the same environment scrubbing and frame protocol, tunnel a loopback port over direct-tcpip, answer taskForward, send heartbeats, and relaunch after a dropped connection within a three-per-minute budget.
A saved SSH host can start the remote runtime from the start screen or the command palette. The dialog shows the desktop's install and start progress and defaults the folder to the host's last one. The workspace connects the existing runtime client to the loopback tunnel, appears in recent workspaces, resumes when the app returns to the foreground, and stops the remote runtime when it closes.
Covers the device-stream and curl installs, fs.read and a terminal command through the tunnel, the cached launch, relaunch after kill -9, and reconnect after docker restart. The live script serves the tarball while cargo runs.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
oxbit | e7cdef2 | Commit Preview URL Branch Preview URL |
Oct 08 2026, 07:16 PM |
RuntimeDownloadStore checks size and SHA-256 before keeping an archive and cancels by runtime ID, so closing a workspace ends its download. ios:check runs a macOS harness against a fixed GitHub release asset.
A user's start or Reconnect no longer counts toward the three automatic relaunches per minute, and the app reports when automatic attempts stop.
The second live runtime test installs with wget on a host without curl, fetches a service task through its taskForward listener, and checks that three failed automatic relaunches wait for Reconnect.
…os-remote-runtime
…y on npm npm 11 rejects publish --dry-run over an existing version, so pull requests that touch the publish inputs failed while the package versions stayed unchanged.
…os-remote-runtime
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
iOS starts an Oxbit runtime on a saved SSH host and connects to it, so terminal, tasks, and Agent ACP run on that host through the existing runtime client. The device installs the same signed payload as desktop under
~/.oxbit/remote/runtimes/<sha256>. The host downloads it with curl or wget, and the device downloads and streams it when the host cannot. Both paths check the sha256 pinned into the iOS build. A loopback listener forwards connections overdirect-tcpip,taskForwardgets its own listeners, and the app relaunches or reconnects after drops and on return to the foreground (3 automatic tries per minute).Release changes: each release attaches
remote-runtime-{darwin-arm64,linux-x64}.tar.gzandremote-runtime-manifest.json. Theiosjob now waits formacos, because the darwin tarball is re-signed there and iOS pins that digest. The build variable isTAURI_OXBIT_REMOTE_RUNTIME_MANIFEST.Stacked on #41 and draft for the same export compliance reason. Agent checks: lint, typecheck, vitest 816/816, ios:check (83 Rust tests), plugin tests 10/10, tests/ios 22/22, the release manifest script tests, and
ssh-live3/3 against a Docker sshd. Thessh-liverun covered device-stream and curl installs, the cached launch, a terminal command through the tunnel, relaunch after kill -9, and reconnect after a restart. Not run: release.yml itself, device download through URLSession, wget, a darwin-arm64 host, taskForward end to end, and a real device.