Adds CmuxCLIPathInstaller with symlink management at /usr/local/bin/cmux,
exposed via Cmd+Shift+P command palette (VS Code style). Install entry
shown when CLI is not in PATH, uninstall entry shown when it is.
Falls back to osascript admin privilege escalation when /usr/local/bin
is not user-writable. Uses attributesOfItem instead of fileExists to
correctly handle dangling symlinks from relocated app bundles.
Closes https://github.com/manaflow-ai/cmux/issues/618
Cmd+Shift+Enter toggles zoom on the focused pane, expanding it to fill
the workspace. Splitting or creating new tabs auto-unzooms. Zoom state
shown as icon in sidebar tab. Includes bonsplit zoom toggle support.
Closes https://github.com/manaflow-ai/cmux/issues/136
The app sometimes launched to a frozen blank state with an empty sidebar
and no terminal loaded. This was caused by restoreSessionSnapshot emitting
intermediate @Published states (empty tabs, nil selectedTabId) that left
SwiftUI's mountedWorkspaceIds empty.
Two fixes:
1. Make restoreSessionSnapshot atomic: build the new tab list locally
before assigning to @Published properties in a single batch, so
SwiftUI observers never see an intermediate empty state.
2. Add a startup recovery timer that detects and fixes broken state
(empty tabs, invalid selection, unmounted workspaces) 500ms after
the view appears, with Sentry breadcrumbs for diagnostics.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The equalize splits command was a no-op that always returned false.
Implement it by recursively walking the bonsplit tree and setting
every split divider position to 0.5. Also register the command in
the command palette with a "workspace has splits" precondition so
it only appears when there are multiple panes.
Adds a regression test that creates a nested split layout, skews
divider positions, equalizes, and verifies all dividers are at 0.5.
Fixes https://github.com/manaflow-ai/cmux/issues/571
The browser portal's hit-test was intercepting clicks in the titlebar
region, preventing double-click-to-zoom from reaching the window.
Three fixes:
- BrowserWindowPortal: pass through hits landing in the native titlebar
- WindowDragHandleView: only let titlebar-overlay views block capture,
not underlay browser content; respect AppleActionOnDoubleClick pref
- ContentView: use shared performStandardTitlebarDoubleClick() helper
Closes https://github.com/manaflow-ai/cmux/issues/422
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The browser portal's hit-test was intercepting clicks in the titlebar
region, preventing double-click-to-zoom from reaching the window.
Three fixes:
- BrowserWindowPortal: pass through hits landing in the native titlebar
- WindowDragHandleView: only let titlebar-overlay views block capture,
not underlay browser content; respect AppleActionOnDoubleClick pref
- ContentView: use shared performStandardTitlebarDoubleClick() helper
Closes https://github.com/manaflow-ai/cmux/issues/422
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>