Send button:
- submitText() sends text without trailing "\n", then a discrete Enter
key event after 100ms. cmux delivers send_text as a bracketed paste,
so a trailing newline became a literal newline in the Claude/Codex
input box instead of submitting — this required a second (empty)
press to actually send. Now one press = the full type-then-Enter
sequence. Fixes Codex always needing two presses and Claude 4+ line
messages not sending / rendering mid-state.
- data-text shortcut keys now type then send Enter separately
- mousedown.preventDefault keeps soft keyboard up so first tap submits
- Remove IME composition Enter handler (textarea Enter = newline now)
Codex view:
- New codex-parser.js / codex-renderer.js for OpenAI Codex CLI surfaces
- /api/codex-surfaces endpoint; generalize surface-ref lookup into
_getSurfaceRefsForProcess() (claude + codex)
- app.js updateCodexMode(), terminal.setCodexMode(), codex-mode body
class (mutually exclusive with claude-mode)
Claude mode:
- Auto-load scrollback when content fits the viewport
- Trim claude-keyboard.js scaffolding; parser/renderer/CSS tweaks
Bump virtual-keyboard.js?v=9 cache-bust.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add Claude Code parsed view with block-based rendering (prompt, tool-use,
tool-result, code, diff, table, selection options, status bar)
- Add session status dots in sidebar and top bar (idle=yellow, working=green
with pulse animation) parsed from terminal title characters
- Differentiate active input prompt vs previous submitted prompts with
distinct background colors
- Fix Korean IME composition issue (last character on next line on Enter)
- Fix CSP inline script violation by moving to external sw-unregister.js
- Add per-block DOM diffing to prevent layout shifts on re-render
- Strip box-drawing borders from tool-result blocks for stable layout
- Add ngrok tunnel support, replace qrcode with qrcode-terminal
- Add Claude-specific keyboard action bar with mode toggle and shortcuts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>