Skip to content

v0.2.0 - SSH Terminal — Input Routing & Live Render

Choose a tag to compare

@Natfii Natfii released this 29 Mar 22:24
· 83 commits to main since this release

SSH Terminal — Input Routing & Live Render

The TTY terminal's SSH session is now fully interactive. Commands typed over SSH reach the remote shell and output renders immediately on screen.

Using the Terminal

  1. Open Terminal tab in the bottom navigation and type '@'tty (no ' marks)
  2. Type /ssh user@host -p port (e.g. /ssh test@10.0.2.2 -p 2222)
  3. Accept the host key when prompted
  4. Enter your password
  5. You're in — type commands normally, output renders live

Special keys: Use the key row below the terminal for Tab, Ctrl, Esc, and Alt modifiers. Ctrl+C, Ctrl+D, and arrow keys work as expected.

Local shell: The terminal also supports a local Android shell (no SSH needed) — just start typing without the /ssh prefix.

Fixes

  • SSH input routing: commands now reach the remote shell reliably — the full write chain (Kotlin → FFI → russh channel) is verified end-to-end
  • Live render updates: terminal output refreshes immediately after each command, no longer frozen on the MOTD
  • Zombie polling coroutine: cancelled render-polling coroutines no longer survive through blocking FFI calls to overwrite valid frames with stale data
  • Duplicate polling race: startHostKeyPolling and sshSubmitPassword no longer race to create competing render loops
  • PARTIAL frame stale cache: render snapshots now always extract all row data, eliminating blank/stale output from StateFlow conflation
  • Fallback frame blank screen: empty-row race-loser snapshots no longer trigger unrenderable fallback frames

CI

  • Clippy pedantic lints configured at workspace level
  • Rust host tests gracefully skip when ghostty native symbols are unavailable