This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+12 more
Affected surfaces
Summary
AI summaryUpdates terminal, mcp, and X1 across a mixed release.
Full changelog
Headline: wmux panes and sidebars are now extensible by third-party UI plugins running in sandboxed iframes under the same permission stack as MCP plugins; the workspace sidebar shows live zero-config context (git branch, PR status, process-scoped listening ports, latest notification); and standard terminal notification escape sequences (OSC 9/777/99) are parsed into first-class events. Plus a batch of rendering and MCP-routing fixes. All features dogfood-verified on a live build.
Added
- Workspace context sidebar (X1): live git branch, PR status, scoped listening ports, and latest notification per workspace — zero config. The sidebar now shows each workspace's git branch via an
fs.watchon.git/HEAD(no polling; linked worktrees detected and marked), the current branch's PR number/state/CI checks from a 5-minuteghcache (silently absent whenghisn't installed; click opens the PR), listening TCP ports matched against each pane's own process tree (previously the port list was machine-global — every workspace showed the same first-20 ports), and a one-line summary of the latest terminal notification. All context flows through the existingworkspace.metadata.changedevent, so MCP clients and plugins see the same data the sidebar does. - UI plugin host: sandboxed sidebar panels, status-bar widgets, pane badges, and palette commands. Drop a bundle in
~/.wmux/plugins/<name>/with amanifest.jsonand wmux hosts its UI in a sandboxed iframe (opaque origin, no network — the postMessage bridge is the only channel out). Plugin RPCs dispatch through the same permission stack as MCP plugins (trust DB, capability enforcement, approval prompts), with new capabilitiesui.sidebar/ui.statusbar/ui.pane-decoration/ui.commands/notifications.read. Includes a reference plugin underexamples/plugins/hello-panel. Verified end-to-end on a live build (approval flow → mount → bridge RPC → pane badge). - Terminal desktop notifications (OSC 9 / OSC 777 / OSC 99) are now parsed and surfaced as events. Programs that emit the standard notification escape sequences — iTerm2-style OSC 9, urxvt
OSC 777;notify, and the kitty OSC 99 desktop-notification protocol (including chunked and base64 payloads) — produce a newnotification.receivedevent on the event bus (pollable viawmux_events_poll) in both daemon and local PTY modes. ConEmu's OSC 9 progress subcommands no longer trigger spurious toasts, and notification text is sanitized and length-capped. Groundwork for the attention-ring / toast-routing notification system.
Fixed
surface_list/pane.listno longer report a stale, workspace-wide cwd for every surface. Each surface's own live working directory (OSC 7 / prompt scrape) is now authoritative; the workspace-level metadata cwd — which is just whichever active surface last changed directory — is only a fallback. Previously that single path was stamped onto every surface in the workspace.- Panes no longer turn into X-boxes or blank out after splitting / tab-switching through many content-heavy panes in a long session. xterm's
WebglAddon.dispose()detaches the renderer but never frees the underlying WebGL2 context, so split/tab churn accumulated zombie contexts past Chromium's ~16-context cap, force-evicting a live pane's context. Every addon teardown now force-releases its GL context immediately viaWEBGL_lose_context.loseContext(). (#199, resolves #197) - Non-selected panes no longer render garbled or blank glyphs when switching pane selection. After long use with content-heavy panes, switching the selected pane could corrupt the other panes. xterm's WebGL addon shares one glyph texture atlas across every same-config terminal (
CharAtlasCache); the focus/visible defensive repaint calledclearTextureAtlas(), which empties that shared atlas and rebuilds only the newly-focused pane — the siblings kept stale per-cell texture coordinates and sampled an emptied/repositioned atlas. The repaint now does a full-rangerefresh()only and never touches the shared atlas; the earlier "garbled glyphs after a burst" case (#166) was already covered by the burst-path refresh, which never cleared the atlas. (#196, resolves #191) - MCP workspace-identity resolution no longer blocks the event loop. The identity PID-tree walk used a synchronous
execFileSyncper ancestor; it now walks the tree with asyncexecFile, preserving the resolution result and the source invariant. (#195, resolves #194) - Playwright auto-open is pinned to the calling session's workspace.
browser.openwithout an explicit workspaceId opened the browser in whichever workspace happened to be active; the engine now resolves the calling session's workspace and fails closed instead of falling back to the active one. (#193, resolves #190) - Esc now reaches the terminal under a CJK IME. While a CJK IME composition was active (keyCode 229), xterm dropped the Esc keystroke; wmux now matches the physical key code and injects Esc directly, the same class of fix as the Ctrl+J newline issue. (#189)
Contributors
- @zer0ken — WebGL context-leak fix (#199), shared-atlas pane-corruption fix (#196), non-blocking MCP identity walk (#195), and Playwright workspace pinning (#193).
- @snowyukitty — CJK IME Esc fix (#189).
What's Changed
- fix(terminal): send Esc under a CJK IME (keyCode 229) by @snowyukitty in https://github.com/openwong2kim/wmux/pull/189
- macOS support: substrate를 Windows 수준으로 (focus/CLI/격리/zsh OSC133/agent detection) by @openwong2kim in https://github.com/openwong2kim/wmux/pull/192
- fix(mcp): pin Playwright auto-open to the calling session's workspace (#190) by @zer0ken in https://github.com/openwong2kim/wmux/pull/193
- fix(mcp): walk the identity PID tree with async execFile, not blocking execFileSync (#194) by @zer0ken in https://github.com/openwong2kim/wmux/pull/195
- fix(terminal): stop non-selected panes garbling on pane-selection switch (#191) by @zer0ken in https://github.com/openwong2kim/wmux/pull/196
- fix(terminal): release WebGL contexts on teardown to stop split-churn X-boxes (#197) by @zer0ken in https://github.com/openwong2kim/wmux/pull/199
Full Changelog: https://github.com/openwong2kim/wmux/compare/v3.0.0...v3.1.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Wmux
All releases →Related context
Beta — feedback welcome: [email protected]