v3.1.1
Headline: the embedded browser pane is now reachable from where you actually work — terminal URLs route smartly, sidebar port badges open localhost in one click, and browser panes restore on the page you last visited. And the field-reported "keyboard input dies until you toggle multiview" IME failure on Korean Windows now self-heals: the suspect textarea-clearing is off by default and a storm guard detects the dead-input signature and resyncs the IME automatically.
Added
- The embedded browser pane is now wired into the terminal workflow (X3). Clicking a URL printed in a terminal routes smartly: localhost / 127.0.0.1 URLs open in the workspace's embedded browser pane (reusing the existing pane and navigating it), external URLs open in the system browser, and Ctrl/Cmd+click inverts the choice. The sidebar's listening-port badges (X1) are now clickable — one click shows
http://localhost:<port>in that workspace's browser pane, un-zooming any pane that would hide it.target="_blank"links inside the browser pane now work and open in the same pane (popup windows stay blocked).Ctrl+Shift+Land the palette's "Open Browser" keep their always-create-a-new-pane behavior. - Browser panes restore on the page you last visited. Every navigation — toolbar, in-page links, agent-driven CDP navigations alike — is persisted per surface, so a session restore reopens each browser pane on its last URL instead of the one it was created with.
Fixed
- Keyboard input no longer dies until the terminal is remounted (Korean/CJK IME "claim storm"). Field report on v3.0.0: typing and arrow keys stopped reaching the terminal — clicking didn't help, only forcing multiview on and off (which remounts the terminal) recovered it. Mechanism: when the Windows IME's state desyncs from xterm's hidden textarea, it claims every keydown (
keyCode 229) and xterm drops all of them. Two-part fix: (1) the v3.0.0 idle IME-textarea clearing (#167 protection for field-replacing voice injectors) is now off by default — its programmatic wipe of the IME-owned textarea is the prime suspect for the desync; it remains available under Settings → Terminal for AutoGLM-style tool users. (2) A new always-on storm guard detects the claim-storm signature (consecutive 229 keydowns across distinct keys with zero composition activity) and resyncs the IME with a blur/refocus — the remount cure, automated — surfacing a toast and a console diagnostic so the trigger can be confirmed in the field. - Session restore no longer leaves keyboard focus on nothing. Restored terminals register for focus only after their async scrollback load, but the focus driver gave up after ~10 animation frames and the boot-time focus target never changes again — so on slower restores the app came up with DOM focus on
<body>(typing went nowhere until a pane/workspace switch). Terminal registration now pushes a notification the focus driver subscribes to, one-shot, so late registrations still receive focus and later re-registrations can't steal it. browser.openon an existing browser surface now actually navigates the webview. The reuse path only rewrote store state, which the mounted webview never re-reads — the MCP call reported success while the page stayed put.browser.openno longer resets an unspecified partition to the default. The forced reset remounted the webview (the partition is part of its render key) and dropped the login session.
Full Changelog: v3.1.0...v3.1.1