Repository navigation
RTerm v3.9.2
RTerm v3.9.2 — AI-Native Terminal App by Hyperspace Technologies
v3.9.2 (2026-09-24)
Fix: the bundled neuralOS engine shipped without its exec bit — every
neuralos_ask/neuralos_graph call in the desktop app died with
engine exited EACCES: (empty stderr).
Root cause chain: curl -o in the release workflow writes files with mode
0644 and the workflow never chmod'd them; electron-builder's extraResources
preserves that mode into the packaged app; and resolveEngine checked only
existence (F_OK), so the un-runnable bundled engine permanently shadowed
perfectly good alternatives (the shared cache, <instancesDir>/engine/needle).
Fixes, layered so this class of bug cannot recur:
resolveEnginenow checks executability (X_OK), not existence. A
present-but-unexecutable candidate is skipped (never a hard stop), so a
broken bundle falls through to the next runnable engine.- One-shot chmod recovery: a 0644 engine we own is fixed in place
(chmod 0755 + re-probe) instead of skipped — covers curl -o, zip/tar
extraction, and copy flows that drop the exec bit. - EACCES at spawn time is named, with the fix in the message
(engine not executable (path) — restore the exec bit (chmod +x) or set neuralos.engineBin/engineWeights) instead of the cryptic
engine exited EACCES:with a trailing colon and no stderr. - Exhausted-path errors now explain every failure: when no candidate is
usable, the error lists the found-but-not-executable paths alongside the
auto-download failure, so operators see why every route was exhausted. - Release workflow chmods the downloaded engines on all 4 platforms and
the verify steps now asserttest -x(mac + Linux) so an un-runnable
engine can never ship again.
Also fixed in the same review (all error-as-data, no thrown exceptions):
defaultExecpreserved a realEACCEScode but reported timeout kills
(SIGTERM from our own timeout) as a genericexit 1— now reported as
killed (SIGTERM)so timeouts are distinguishable from crashes.truncate(undefined)crashed (JSON.stringify(undefined)is
undefined, not a string) — now renders'null'honestly.graphProbethrew on a corrupt/non-arrayneedle_menu.jsoninstead of
answering with an error — every other read path in the plugin already
reports errors as data; this one now does too.
Spec: 9 new tests (section 12) — 0644-bundle skip, chmod recovery, EACCES
naming, non-EACCES crash shape, real-EACCES code preservation, timeout-kill
honesty, truncate(undefined), corrupt menu, non-array menu. 51 total.
Downloads
| Platform | File |
|---|---|
| macOS ARM64 | RTerm-3.9.2-arm64.dmg |
| Windows x64 (Portable) | RTerm.Portable.3.9.2-x64.exe |
| Windows x64 (Setup) | RTerm.Setup.3.9.2-x64.exe |
| Linux x64 (AppImage) | RTerm-3.9.2-x64.AppImage |
| Linux x64 (deb) | RTerm-3.9.2-x64.deb |
| Linux x64 (pacman) | RTerm-3.9.2-x64.pacman |
| Linux x64 (rpm) | RTerm-3.9.2-x64.rpm |
| Linux ARM64 (AppImage) | RTerm-3.9.2-arm64.AppImage |
| Linux ARM64 (deb) | RTerm-3.9.2-arm64.deb |
| Linux ARM64 (rpm) | RTerm-3.9.2-arm64.rpm |
Install
macOS: After installing, run xattr -cr /Applications/RTerm.app to remove quarantine.
Linux AppImage: chmod +x RTerm-*.AppImage && ./RTerm-*.AppImage
Linux deb: sudo dpkg -i RTerm-*.deb
Linux rpm: sudo rpm -i RTerm-*.rpm
Contact: rterm@hyperspace.ng