Tags: amirlehmam/wmux
Tags
feat(updater): notify of new GitHub releases via in-app badge (v0.7.9) The existing electron-updater wiring fails silently because our portable-zip release flow doesn't ship a latest.yml manifest. Add a lightweight notify-only path: poll the GitHub /releases/latest REST endpoint at startup (5s delay) and every 6h, broadcast new versions to all renderers via IPC, render a green pulsing badge in the titlebar. Click opens the GitHub release page in the default browser via shell.openExternal — URL whitelisted to github.com. This unblocks awareness of new versions without requiring NSIS + signing, which we still want long-term once SignPath OSS quota lands.
fix(terminal): route Ctrl+V through xterm paste so bracketed-paste ma… …rkers reach Claude Code (v0.7.8) Ctrl+V was writing the clipboard directly to the PTY, bypassing xterm's bracketed-paste wrapping. Claude Code therefore saw each newline as Enter and only the first line of a long paste landed (no [Pasted text #N] placeholder). Use terminal.paste() instead — it consults bracketedPasteMode and emits through onData (already wired to PTY), so the text arrives wrapped in \x1b[200~ ... \x1b[201~ when the foreground app has the mode enabled.
fix(terminal): honor user's Default Shell setting on new terminals (v… …0.7.7) The Default Shell preference (Settings → Workspace → Shell) was written to the store but never read on the spawn path: PaneWrapper passed workspace.shell (always '' for the initial session) into useTerminal, which forwarded the empty string to the main process. resolveShell() in pty-manager.ts then fell back to the system default (pwsh → powershell → cmd), silently ignoring the user's WSL/cmd/bash choice. useTerminal now resolves the effective shell with the chain: workspace.shell → workspacePrefs.defaultShell → main-process default. Read via useStore.getState() at PTY-creation time so changing the preference doesn't re-spawn live PTYs — the new default applies only to terminals opened afterward, matching user expectation. Fixes #5
fix(render): hide inactive workspace panes (v0.7.5) Explicit `visibility: visible` on the active surface layer overrode the parent workspace div's `visibility: hidden`, so switching sessions left the previous workspace painting on top of the new one. Gate the surface-layer visibility on isWorkspaceActive so inactive workspaces inherit hidden correctly.
fix(terminal): re-focus xterm textarea on workspace switch (v0.7.4) When switching workspaces, React state focusedPaneId updated correctly but xterm.js's hidden textarea was never re-focused, so document.activeElement stayed on the previous (now-hidden) workspace's textarea and keystrokes appeared to hit nothing — the "frozen session" bug. useTerminal now takes a focused prop and calls term.focus() inside the visibility-change effect once refresh() has repainted the canvas. Also wires the titlebar Settings button that was unhooked. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
chore(brand): refresh logo across app + site, bump to v0.7.3 Swap the old "w" mark for the new green terminal-window logo everywhere it surfaces: Electron window icon, Windows taskbar/.exe icon (multi-resolution ICO: 16/32/48/64/128/256), React titlebar component, and wmux.org favicon + nav logo. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
feat(config): add ~/.wmux/config.toml reader + 17 bundled themes Follow-up to issue #4. Ships: - Minimal hand-rolled TOML parser (src/main/toml-parser.ts) — zero deps so the OneDrive-path native-module trap can't break it. - User-config loader maps [terminal] + [terminal.colors] + [terminal.colors.schemes.*] onto TerminalPrefs; file-wins-at-startup, app-wins-at-runtime semantics. - IPC: config.getUserConfig / config.reloadUserConfig / broadcast event. V2 pipe: config.get / config.reload. - CLI: `wmux reload-config`, `wmux config show|reload|path`. - Renderer merges parsed config over Zustand terminalPrefs on startup and on reload; userColorSchemes MERGE (don't clobber app-defined schemes). - 17 new bundled presets: Ayu Dark/Mirage/Light, Cobalt 2, Material Dark, Monokai Pro, Palenight, Oceanic Next, Everforest Dark, Rose Pine, Kanagawa, Horizon, SynthWave 84, Zenburn, GitHub Dark, Night Owl, Nightfly. (Now 29 total.) - docs/config.md with full example and precedence rules. - Tests: 13 new unit tests for parser + mapper (all pass). Bumps to 0.7.2. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(agent): validate cmd field and accept prompt alias in spawn handlers Agent spawn was sending "undefined" to terminal when batch JSON used "prompt" instead of "cmd" as the field name. Now both agent.spawn and agent.spawn_batch accept either field name, with clear error if neither is provided. Defense-in-depth validation added in AgentManager.spawn(). Bumps version to 0.7.0. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>