Repository navigation
Runtime page, Linux arm64, and dependency audit (0.5.0) - #45
Merged
Merged
Conversation
RuntimeIdentity, the keep-alive default, and the runtime output separator live in @oxbit/protocol; the RuntimeConnector service types live in @oxbit/workbench.
The runtime listens before the workspace watcher scans; watcher failures become fs.watchError events and a stderr line. node-pty loads on first terminal use, the CLI exits on Node below 24, desktop error frames carry the error message, SSH startup errors carry the remote stderr tail, and foreground serve failures print one line.
The supervisor pipes the runtime's stderr into a 4 KiB tail, appends it to startup errors after the runtime output separator, and sends it as detail with desktop-runtime-failed. desktop_connection takes an optional keepAlive that the launch frame carries.
The runtime persists an id in runtime.json and serves { id, name, version,
startedAt } from /api/health, /api/pair, and auth.authenticate. The CLI
binds an OS-assigned port unless --port or PORT is set, records the id in
daemon.json, and prints it from --status. The dev script keeps port 9277.
New @oxbit/feature-runtime package: Runtime tab, status item, runtime.open and runtime.cloud commands, runtime.keepAlive and runtime.autoReconnect settings. The web app supplies a RuntimeConnector that replaces ConnectionDialog; RuntimeClient stores tokens by runtime id and exposes the runtime identity.
createRuntime takes idleShutdown and reports idleSince. The CLI accepts --keep-alive and OXBIT_KEEP_ALIVE (default: run until stopped). Remote desktop runtimes take keepAlive from the launch frame, hold the lease while a client is connected, and outlive a closed stdin until the lease expires. A reconnect with the same workspace key stops the previous owner and takes the lock. The server pings clients every 30 s and terminates silent ones.
Each project gets a DesktopRuntimeConnector: one tap restarts a stopped runtime, SSH projects list their hosts with Start Oxbit on this server, and startup errors show the runtime's stderr under Details. desktop_connection receives runtime.keepAlive. The Runtime page replaces TrustDialog, and pairing is optional in the connector contract.
- Pin Node 24.20.0 and ripgrep 15.1.0 for linux-arm64; remote:prepare builds darwin-arm64, linux-x64, and linux-arm64. A Linux host reuses its native node-pty build; other Linux targets compile in Docker with per-platform node:24.20.0-bookworm manifest digests. - The release manifest, the iOS pinned-manifest parser, and their tests require all three platforms. - Desktop and iOS SSH map Linux/aarch64 to linux-arm64 and name arm64 in the unsupported-host message and connection dialogs. - OXBIT_SSH_TEST_PLATFORM=linux/arm64 runs remote:test and ios:ssh-live against an arm64 sshd container with the linux-arm64 payload. bundle-tools.mjs reads the per-arch linuxBundleTools lists from binaries.json. binaries.json lists Tauri's AppImage helpers per arch (x64, arm64) and refreshes the x86_64 linuxdeploy and linuxdeploy-plugin-appimage pins, which changed upstream under their mutable release tags.
- release.yml builds the linux-arm64 remote runtime on ubuntu-24.04-arm and adds a linux job that builds, signs the updater AppImage, smoke-tests, and uploads the .deb and AppImage for x64 and arm64 (arm64 continue-on-error). publish waits for it. - desktop.yml builds the linux-arm64 remote runtime, runs its SSH acceptance on an arm64 container, and adds an ubuntu-24.04-arm desktop leg. - publish-release.mjs requires the Linux x64 files and all three remote runtime archives; latest.json lists linux-x86_64 and, when built, linux-aarch64. - Desktop scripts accept linux-arm64: run.mjs allows the host, licenses.mjs reads the Rust notice triple from the runtime inventory.
oxbit --lan binds 0.0.0.0 on a free port, allows tauri://localhost and http origins for every LAN address and the .local name, and advertises _oxbit._tcp with a dependency-free mDNS responder on node:dgram. Runtimes bound to 0.0.0.0 or :: allow LAN origins; daemon probes and local links use 127.0.0.1.
docs/runtime.md covers the random port, runtime identity, --lan with Bonjour advertising (RFC 6762, RFC 6763 references), --keep-alive, and startup failure reporting. docs/remote-ssh.md covers the keepAlive lease and same-workspace reconnect takeover.
Processes.create loads node-pty on first use and returns a promise.
Connect Runtime on the start screen opens the Runtime page as a sheet; inside a workspace the cloud button runs one-tap. The iOS connector lists Bonjour runtimes, reconnects paired ones by runtime id, starts SSH runtimes with the keep-alive setting, and reconnects URL runtimes on foreground when runtime.autoReconnect is on. Failed connections say whether anything answered.
The page called connector.trust, disconnect, and restart unbound, so trust failed with 'this.session' undefined. Switch styles now outrank the global checkbox rules. New browser spec covers pairing from the page, one-tap reconnect, and the failure explanation; the mobile and tooltip specs use the page in place of the removed dialog.
The bridge mocks runtime_discovery and runtime_credentials and can seed app storage. Specs cover listing and pairing a network runtime, keep-alive set on the start screen carrying into a workspace, and one tap opening the page with the reason. The Runtime sheet is a labelled dialog.
README describes the assigned port, --lan, --keep-alive, and the cloud button. runtime.md gains a Runtime page section with the per-app connectors; settings.md lists runtime.keepAlive and runtime.autoReconnect; the index lists runtime.md and settings.md; ios.md drops the implemented SSH tunnel item.
- managedPlatforms adds linux-arm64; the install gate uses it. - artifacts.lock.json pins the upstream aarch64 Linux assets for marksman 2026-02-08, taplo 0.10.0, ShellCheck 0.11.0, Temurin JRE 21.0.12.1+1, and Laravel LSP 0.0.31, and the LemMinX 0.31.2 jar, with sha256 integrity computed from the downloads. - A unit test requires every native server for every managed platform. - scripts/language/package.ts bundles linux-arm64 caches; the language server workflow adds ubuntu-24.04-arm. - themes.spec.ts writes its screenshots under testInfo.outputPath() instead of /private/tmp, which does not exist on Linux.
…ncaught exception tar 7.5.9 is affected by GHSA-qffp-2rhf-9h96, GHSA-9ppj-qmqm-q256, GHSA-vmf3-w455-68vh, GHSA-w8wr-v893-vjvp, GHSA-23hp-3jrh-7fpw, GHSA-8x88-c5mf-7j5w, GHSA-gvwx-54wh-qm9j and GHSA-r292-9mhp-454m. The extract filter threw inside tar's stream handler, which left the untar promise pending and raised an uncaught exception; it now records the rejection and throws after extraction.
markdown-it 10.0.0: GHSA-6v5v-wf23-fmfq, GHSA-6vfc-qv3f-vr6c, GHSA-253c-mchw-3w2r. linkify-it 2.2.0 -> 5.0.2: GHSA-22p9-wv53-3rq4, GHSA-v245-v573-v5vm. argparse 1 -> 2 removes sprintf-js from the markdown-it path. @types/markdown-it 14.2.0 removes highlight.js 9.18.5 (GHSA-7wwv-vh3v-89cq). dompurify 3.4.15: GHSA-p98j-92pf-mc4p, GHSA-6688-9rhm-gjv2. A render diff of 38 inputs across the previews, agent and hover configurations shows two parser changes: a pipe inside a table code span splits the cell (GFM), and linkify keeps a trailing '*b' inside the URL. Link validation and escaping output are unchanged.
fast-uri 3.1.7 via ajv 8 (root devDependency): GHSA-hrr3-gc8f-f4qj.
vitest 3.2.7 -> 4.1.11: @vitest/mocker GHSA-82fw-gwwq-j7x9; removes tinypool 1.1.1 (GHSA-5gmw-xhrv-c9v3, GHSA-85c8-ppgw-ccpr). Overrides: basic-ftp 6.2.2 (GHSA-c475-qrg2-pj4r), ip-address 10.7.1 (GHSA-j6r3-76f7-8jcv, GHSA-h3mg-xc3c-68pw), serialize-javascript 7.0.5 (GHSA-5c6j-r48x-rmvq, GHSA-qj8w-gfj5-8c6v), smol-toml 1.9.0 (GHSA-r4xh-jqrq-34v2), source-map-js 1.2.2 (GHSA-68fv-2mgg-jv7q). bun.lock entries for brace-expansion move to 1.1.21, 2.1.7 and 5.0.12 within their parents' ranges (GHSA-6j4f-fj2g-mc7p, GHSA-qhr7-859c-m2p7, GHSA-q2hr-2g5m-vwhr); bun applies a nested override to every parent, so the entries are set in the lock.
rustls 0.23.43: RUSTSEC-2026-0285 / GHSA-2mjx-qc3c-rqvc. The iOS host and oxbit-files locks do not include rustls.
… transitive packages bash-language-server 5.6.0 -> 5.8.1 moves editorconfig to 3.0.2: minimatch 10.2.6 (GHSA-3ppc-4f35-3m26, GHSA-7r86-cg39-jmmj, GHSA-23c5-xmqv-rm74) and brace-expansion 5.0.12 (GHSA-6j4f-fj2g-mc7p, GHSA-qhr7-859c-m2p7, GHSA-q2hr-2g5m-vwhr). Overrides: fast-uri 3.1.8, source-map-js 1.2.2, ip-address 10.7.3, protobufjs 8.8.0, basic-ftp 6.2.2, @opentelemetry/core, resources and sdk-trace-base 2.12.0. intelephense stays at 1.18.5 (latest). Its lib/intelephense.js bundles its dependencies, so the overridden node_modules copies are not loaded.
Adds scripts/osv-cargo.mjs to query OSV for Cargo.lock crates.
# Conflicts: # apps/runtime/tests/lsp-manager.test.ts
… off acceptDiagnostics waited on remoteVersions() and then stored diagnostics even if the file switch was turned off during the wait. Also type the linux-arm64 managed platform and note that Linux packages now ship.
# Conflicts: # apps/ios/src-tauri/src/ssh/live_runtime_tests.rs # docs/INDEX.md
tar 7.5.22's async pack writes a hardlink entry after the stream ends in about one run in four, which surfaced as an uncaught ZlibError in vitest.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
oxbit | ab18608 | Commit Preview URL Branch Preview URL |
Oct 09 2026, 08:38 AM |
A launch with the owner's own workspace key now takes over its orphaned runtime, so the smoke test checks that another owner is still rejected.
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.
Phase 1 of the runtime work plus the dependency audit, for 0.5.0. Merges p1/runtime-page, p1/linux-arm64-builds (#44) and sec/dependency-audit.
Runtime: the cloud button connects to the last runtime in one tap and opens the new Runtime page when it cannot. The page holds connection state, trust, keep-alive (
runtime.keepAlive,runtime.autoReconnect), saved and Bonjour-discovered runtimes, SSH servers and pairing. The CLI binds a random free port by default,oxbit --lanadvertises_oxbit._tcpfor the iOS app,--keep-alivestops idle runtimes, and startup errors (port in use, watcher scans, missing node-pty) are reported instead of hanging. Linux x64 and arm64 get desktop AppImage/.deb packages, the arm64 SSH runtime, and arm64 managed language servers.Security: tar 7.5.22 (8 GHSAs) with unsafe archive entries rejected without crashing the runtime, markdown-it 14.3.2, DOMPurify 3.4.16, desktop rustls 0.23.45, managed bash-language-server 5.8.1 and transitive overrides;
bun auditgoes from 41 to 3 and the managed lock from 20 to 5. Remaining advisories and reachability are in docs/security.md. Integration fixes: diagnostics arriving after a file's server is turned off are dropped, and the test archives are built synchronously to avoid a tar 7.5.22 pack race.