Improve mobile terminal reliability and session tooling - #173
Conversation
- Replace the split extended-keyboard option with responsive Esc, arrows, Enter, and Tab controls for keyboard-hidden and keyboard-open layouts. - Add swipe navigation, Up+Down Enter chords, best-effort volume-key input, and optional haptic/sound feedback. - Keep the accessory layout keyboard-safe, phone-width contained, and hidden behind application modals. Verified: 21 unit tests, 64 mobile browser tests, public asset/syntax checks, and npm run build.
- arbitrate shared PTY dimensions from explicit interaction and input - force one desktop redraw when the terminal or session tab retakes control - isolate mobile and viewport browser tests from host state
- distinguish editable prompt rows from TUI-owned readbacks and choices\n- keep content taps keyboard-free while preserving prompt focus and cursor positioning\n- cover readback collapse in unit and mobile browser tests
- add admin-only graceful shutdown with exact supervisor ownership checks - add a keyboard-safe header confirmation flow with phone browser coverage
- keep multiline clipboard text inside one bracketed-paste frame across native, CJK, dialog, image fallback, and voice paths - hold the first local draft until replay establishes the real prompt position
- keep bracketed multiline text on the direct PTY path when WebSocket delivery falls back to HTTP - recognize Android input-only paste events and Enter races in the CJK field
- confirm multiline paste from Android insertText and line-break event bursts - preserve ordinary Gboard word-space input and desktop autocomplete behavior - cover full textarea, segmented, and non-paste input paths in browser tests
- clear xterm helper text after handled touch input - turn Android delete mutations into one terminal Backspace each - forward deletes when editable text already lives in the PTY
- keep transient IME candidates separate from committed draft text - commit finalized composition atomically without duplicate words - guard newer compositions from stale cleanup timers
- let the prompt-aware overlay own composition rendering - keep xterm composition processing active but visually hidden - cover native-helper and local-overlay coexistence
Commit the last Android composition when xterm omits its final data event. Suppress one delayed matching payload so continued typing does not duplicate the word.
Read insertText mutations from xterm's helper textarea when Android omits InputEvent.data. Cover continued typing after the first visible character.
Release stale composition state when Android resumes with an explicitly non-composing text mutation. Keep later submissions visible without reviving the abandoned candidate.
Route mobile-control Enter through local echo so committed and composing text is sent before Enter. Keep the next draft clean without focusing xterm or opening the keyboard.
|
Thanks for the effort here, and for the audit document, that is a genuinely useful artifact. I deployed this branch to an isolated instance and tested it on a real phone before reviewing the code. Reporting what I found, starting with the blocker. Blocking: the on-screen keyboard can no longer be openedOn a phone, tapping the terminal no longer raises the keyboard. There is no longer any way to type into a session. I hit this by hand first, then reduced it. Reproduction, iPhone-class viewport (390x844), Claude-mode session, tap the middle of the terminal:
Mechanism. if (intent === 'content') {
this._blurMobileTerminalInput();
}so the tap explicitly blurs. Separately, The intended escape hatch is that tapping the prompt row classifies as The reason is the early return: if (!mouseTrackingOn && !this._sessionUsesServerMouseStrip()) return 'input';For claude/codex/gemini sessions the server strips the mouse DECSETs, so
Worth adding a test that asserts a tap somewhere on a claude-mode terminal ends with Security:
|
|
I see, you would prefer a more focused pr's 8n the future, make sense I just kind off went on every qa issue i found to make the mobile experience more convenient for me. Ill go over the issues you reported |
Summary
Merge notes
Merged
origin/masterat57b6be1. Conflicts inCLAUDE.mdandstyles.cssretain upstream structure/theme work and document the combined mobile/webview invariants.Validation