Commit graph

987 commits

Author SHA1 Message Date
martinezhermes
1235daff04
fix: apply background-opacity and background-blur to terminal rendering area
Two root causes for issue #879:

1. GhosttyNSView was missing makeBackingLayer(), so AppKit provided a
   generic CALayer as the view's backing layer. libghostty expects
   (view.layer as? CAMetalLayer) != nil to set up Metal rendering on
   the existing layer. Without a CAMetalLayer backing layer, the Metal
   surface defaulted to isOpaque=true, making the terminal area fully
   opaque regardless of background-opacity config.

   Fix: override makeBackingLayer() to return a CAMetalLayer with
   isOpaque=false and bgra8Unorm pixel format (matching standalone
   Ghostty's SurfaceView behavior).

2. ghostty_set_window_background_blur(app, window) is exposed in
   ghostty.h but was never called in cmux. Without this call the
   macOS window never gets the NSVisualEffectView blur backdrop that
   background-blur requires.

   Fix: add applyWindowBlurIfNeeded() on GhosttyApp that reads
   background-blur from config via ghostty_config_get and calls
   ghostty_set_window_background_blur when the value is non-zero.
   Called from applyBackgroundToKeyWindow() and
   applyWindowBackgroundIfActive() whenever the window is made
   transparent.

Fixes #879

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-20 10:16:27 +01:00
Lawrence Chen
c44e975855 fix: preserve custom commands for focused notifications 2026-03-20 01:11:10 -07:00
Lawrence Chen
60b6d8badc fix: play notification sound when focused 2026-03-20 01:11:10 -07:00
Lawrence Chen
d7db13a140 test: cover focused notification sound feedback 2026-03-20 01:11:10 -07:00
김서현
9844913ea1
fix: skip Korean from CJK font-codepoint-map auto-injection (#1700)
* fix: skip Korean from CJK font-codepoint-map auto-injection

The automatic CJK font-codepoint-map injection (PR #1017) maps Korean
ranges to Apple SD Gothic Neo, which has a different style/weight from
the primary terminal font. This overrides Ghostty's native
CTFontCreateForString fallback, which dynamically selects a
better-matching font for Hangul.

Ghostty itself (ghostty-org/ghostty) has no hardcoded CJK font names
and relies entirely on CTFontCreateForString for fallback. For Korean,
this native fallback produces visually consistent results with the
primary font.

Remove the Korean branch from cjkFontMappings() so Ghostty's native
fallback handles Hangul rendering. Japanese and Chinese mappings are
unaffected.

* test: update CJK font mapping tests for Korean removal

- testCJKFontMappingsReturnsAppleSDGothicNeoWithHangulForKorean
  → renamed to testCJKFontMappingsReturnsNilForKoreanOnly
  → asserts nil since Korean is no longer auto-mapped

- testCJKFontMappingsMultiLanguageMapsScriptSpecificRanges
  → renamed to testCJKFontMappingsMultiLanguageSkipsKorean
  → asserts no Apple SD Gothic Neo mapping exists
  → Japanese mappings remain unchanged

---------

Co-authored-by: dante-ad-shield <danate@ad-shield.io>
2026-03-20 00:14:01 -07:00
bagelcode-jhkim
e0c301b277
feat: add set-color/clear-color to workspace-action CLI (#1833)
* [auto] cmux session changes (1 files) [03/19 17:38]

* feat: add set-color/clear-color to workspace-action

- CLI: parse --color option in runWorkspaceAction
- CLI: validate --color required for set-color action
- CLI: pass color param to v2 payload
- CLI: update help text and usage summary
- TerminalController: add set_color/clear_color to supportedActions
- TerminalController: handle set_color/clear_color cases via setTabColor

* fix: resolve named colors via palette, improve clear_color response

* fix: validate hex input via normalizedHex, fix synopsis typo
2026-03-19 22:34:31 -07:00
Austin Wang
b0ffe7a4cd
Fix browser image copy pasteboard data (#1850) 2026-03-19 22:20:09 -07:00
Austin Wang
638f74f42e
Fix browser pane file drops hanging on Uploading (#1843)
* Add regression test for browser file drop uploads

* Fix browser pane file drop upload lifecycle
2026-03-19 21:23:11 -07:00
Austin Wang
ed18e32d11
Fix terminal pane drag/drop handoff delay (#1837)
* Fix terminal pane portal handoff after drag

* Fix terminal portal handoff during split churn

* Fix terminal host handoff for same-pane rebuilds
2026-03-19 20:37:32 -07:00
Lawrence Chen
944e43ed21
Merge pull request #1799 from manaflow-ai/task-cmux-ssh-notify-blue-border
Fix cmux ssh notify surface targeting
2026-03-19 18:37:03 -07:00
Lawrence Chen
183c5601be
Make remote sidebar directory canonicalization preserve live paths 2026-03-19 01:23:53 -07:00
Lawrence Chen
b301218405
Honor explicit notification surface targets 2026-03-19 01:21:18 -07:00
Lawrence Chen
0010e10bf5
Stabilize sidebar directory ordering when split focus changes (#1798)
* Add sidebar directory ordering regression test

* Stabilize sidebar directory ordering

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-19 01:05:12 -07:00
Lawrence Chen
7cbac356fc
Add optional single-click focus for inactive panes (#1796)
* Add failing first-click pane focus tests

* Enable optional first-click focus for inactive panes

* Address PR review follow-ups

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-19 01:01:10 -07:00
Austin Wang
e203c51c7a
Show update-available banner automatically on launch (#1651)
* Show update-available banner automatically on launch

Probe for updates immediately on launch via Sparkle's
checkForUpdateInformation() so the sidebar surfaces a passive update
indicator without waiting for the 24h scheduler. When Sparkle detects
an available update in the background, the pill now shows
"Update Available: X.Y.Z" with accent styling while the updater is
idle. Clicking it triggers the full interactive update flow.

Also fixes thread safety in delegate callbacks by dispatching
@Published mutations to the main queue.

Closes #1643

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add periodic background update probe every 15 minutes

The launch-only probe wouldn't catch updates published while the app
is already running. Add a repeating 15-minute timer that calls
checkForUpdateInformation() so the sidebar banner appears within a
reasonable window after a new version is published.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change background update probe interval to 30 minutes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change update check interval to 1 hour and migrate existing users

Reduce Sparkle's scheduled check interval from 24h to 1h so update
banners appear sooner. Migrate users stuck on the old 24h default by
bumping the migration key to v2. Align background probe interval with
the Sparkle check interval instead of hardcoding 30 minutes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 12:30:44 -07:00
Lawrence Chen
637a0eed13
Add command palette minimal mode actions 2026-03-18 04:18:11 -07:00
Lawrence Chen
1e908b2b75
Merge origin/main into feat-hidden-titlebar-minimalism-reset 2026-03-18 04:05:43 -07:00
Lawrence Chen
1311d4aec3
Merge pull request #1740 from manaflow-ai/task-command-palette-check-ordering
Fix command palette ordering for check query
2026-03-18 03:52:10 -07:00
Lawrence Chen
d63f852719
Stabilize command palette ordering UI test 2026-03-18 03:34:36 -07:00
Lawrence Chen
8512e6d8a5
fix: skip identical session autosave writes (#1732)
* test: cover repeated identical session saves

* fix: skip identical session snapshot writes

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:24:40 -07:00
Lawrence Chen
2c81192299
Prefer command palette title matches over keywords 2026-03-18 03:13:37 -07:00
Lawrence Chen
cb4197ecee
Make founders email selectable in feedback success view (#1733)
Add .textSelection(.enabled) to the success body text so users can
select and copy the founders@manaflow.com email address.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 02:59:55 -07:00
Lawrence Chen
de1aa7a6ae
Include hardware details in feedback submissions (#1726)
Add chip (e.g. Apple M1 Pro), RAM, hardware model, architecture
(arm64/x86_64), and display info to feedback metadata. All fields are
non-sensitive system properties collected via sysctlbyname, ProcessInfo,
and NSScreen. Server-side route accepts and renders the new fields in
both plain text and HTML email bodies.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 02:59:16 -07:00
Austin Wang
2f08e1bee0
Revert "fix: repair NIGHTLY Sparkle quarantine metadata (#1703)" (#1725)
This reverts commit 629b63dfb8.
2026-03-18 01:56:36 -07:00
Lawrence Chen
c1543ea49a
Fix floating portal terminal after nightly update relaunch (#1696)
* test: add background-prime visibility regression

* fix: hide background-primed workspaces from portals
2026-03-18 01:39:12 -07:00
Lawrence Chen
387742a5a0
Update all remaining cmux.dev references to cmux.com (#1721)
- Swift app: feedback API endpoint, docs URLs, changelog URL, CLI help
- PostHog proxy: r.cmux.dev -> r.cmux.com
- All 20 README files: docs and blog links
- Homebrew cask: homepage URL in update-homebrew workflow

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:32:12 -07:00
Lawrence Chen
798c1fbc42
Fix laggy terminal sync during sidebar drags (#1598)
* Fix sidebar drag terminal resize lag

* Add display resolution churn regression

* Prelaunch display churn helper in e2e workflow

* Use manifest handoff for display churn UI test

* Fix e2e display churn harness startup

* Resolve display churn UI test socket path

* Use marker-based socket discovery in display UI test

* Add failing sidebar drag portal regression tests

* Fix sidebar drag terminal portal resize lag

* Add failing scoped resize regression tests

* Fix terminal portal resize scheduling lag

* Add failing zsh resize prompt regression test

* Fix zsh resize prompt duplication

* Fix Sequoia sidebar resize regression

* Guard display-resolution CI runner

* Run display-resolution CI on WarpBuild

* Allow backgrounded display regression app launch

* Launch display regression app directly

* Launch display regression app via NSWorkspace

* Load display regression launch env from manifest

* Write display regression manifest in runner temp dir

* Write display regression manifest in shared tmp

* Write display regression manifest in repo scratch dir

* Launch display regression app with explicit env

* Avoid xcodebuild broken pipe in compat CI

* Launch display regression via XCUIApplication

* Harden display regression socket readiness

* Trust display socket diagnostics path

* Replace display socket probe with render diagnostics

* Write display churn start marker atomically

* Move display churn harness out of /tmp

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:28:11 -07:00
Austin Wang
629b63dfb8
fix: repair NIGHTLY Sparkle quarantine metadata (#1703)
* test: add quarantine regression coverage

* fix: repair Sparkle quarantine metadata for nightly updates

* fix: repair extracted Sparkle app on extraction callbacks
2026-03-18 01:23:53 -07:00
Austin Wang
55cb5c6763
Fix sidebar workspace PR status display and false positives (#1636)
* test(sidebar): add failing PR checks regressions

* fix(sidebar): show workspace PR status

* refactor(sidebar): restore PR icon style

* refactor(sidebar): simplify PR check labels

* test(sidebar): cover focused workspace PR selection

* fix(sidebar): scope workspace PRs to current branch

* test(sidebar): cover stale PR after branch change

* fix(sidebar): clear stale PRs on branch changes

* test(sidebar): cover workspace PR false positives

* fix(sidebar): stop false-positive workspace PR badges

* test(cmuxTests): remove duplicate sidebar PR regressions
2026-03-17 22:57:12 -07:00
Austin Wang
bdd95902f2
Restore last-surface close preference toggle (#1679)
* test: cover last-surface close preference regression

* fix: restore last-surface close preference
2026-03-17 22:36:32 -07:00
Lawrence Chen
b64fb301c1
fix(terminal): execute Return after Korean IME commit (#1671)
* test(terminal): cover Return after Korean IME commit

* fix(terminal): execute Return after Korean IME commit

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-17 22:07:45 -07:00
Lawrence Chen
58de044f4f
Rename "Import From Browser" to "Import Browser Data" (#1672)
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-17 22:07:19 -07:00
Lawrence Chen
e505782a31
Merge remote-tracking branch 'origin/main' into feat-hidden-titlebar-minimalism-reset 2026-03-17 20:06:43 -07:00
Lawrence Chen
3bca43d6b1
fix(command-palette): address follow-up review comments
PR: https://github.com/manaflow-ai/cmux/pull/1644
2026-03-17 18:59:13 -07:00
BillionToken
1fabe9f33c
fix(terminal): prevent doomscroll when reviewing scrollback (#1616)
The synchronizeScrollView() method was constantly resetting the scroll
position to match the terminal's scrollbar state, even when the user had
manually scrolled up to review scrollback. This caused the 'doomscroll'
bug where panes would fight the user's scroll position.

- Add userScrolledAwayFromBottom flag to track scroll intent
- Only auto-scroll when at bottom or when scrollbar indicates following
- Reset flag when user scrolls back to bottom
- Add 5-point threshold to tolerate minor float drift

Fixes #1577

Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
2026-03-17 17:52:59 -07:00
BillionToken
c0fd15cdd7
fix(terminal): prevent redundant focus events causing Powerlevel10k redraws (#1579)
Add lastFocusState tracking to TerminalSurface to avoid sending duplicate
focus events to the terminal surface. This fixes double prompt / extra redraw
issues when using zsh with Powerlevel10k and switching workspaces.

Fixes #1566

Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
2026-03-17 17:52:56 -07:00
ddotz
6cca8c9264
Fix dark mode icon not applied in automatic mode (#1510)
ensureApplicationIcon() was explicitly loading and setting the light icon
via NSImage(named: NSImage.applicationIconName) even in automatic mode,
overriding the asset catalog's appearance-based icon selection.

Delegate to AppIconSettings.applyIcon() which correctly sets
applicationIconImage = nil for automatic mode, allowing macOS 15+ to
select the dark variant from the asset catalog automatically.

Fixes #1509
Related: #688
2026-03-17 17:50:13 -07:00
Austin Wang
59901034bf
Merge pull request #1627 from manaflow-ai/issue-1623-devtools-x-close-state
Fix browser devtools X-close persistence
2026-03-17 17:48:01 -07:00
Lawrence Chen
86876cf019
Merge remote-tracking branch 'origin/main' into feat-hidden-titlebar-minimalism-reset 2026-03-17 17:46:47 -07:00
Austin Wang
392e98126a
Fix Option+Delete word delete on AZERTY (#1640) 2026-03-17 17:45:30 -07:00
Lawrence Chen
90e573b68f
Merge origin/main into feat-hidden-titlebar-minimalism-reset 2026-03-17 17:37:28 -07:00
austinpower1258
48426bf1ec Tighten browser devtools close timing 2026-03-17 17:37:01 -07:00
Austin Wang
a42e6663c4
Fix layout follow-up spin loop (#1633) 2026-03-17 17:17:24 -07:00
Lawrence Chen
4162eccf66 Keep command palette empty state stable while typing 2026-03-17 17:15:33 -07:00
Lawrence Chen
f6d4229ec7 Show all open-in commands in the palette 2026-03-17 17:15:33 -07:00
Lawrence Chen
a22bfa9709 Fix command palette open target availability 2026-03-17 17:15:33 -07:00
Lawrence Chen
bb6dacf20d Add regression coverage for app lookup open targets 2026-03-17 17:15:33 -07:00
austinpower1258
8397b32067 Debounce browser devtools visibility-loss sync 2026-03-17 17:13:51 -07:00
Lawrence Chen
f5d610e3ea
Merge remote-tracking branch 'origin/main' into task-browser-import-followups
# Conflicts:
#	Sources/Workspace.swift
2026-03-17 16:49:16 -07:00
Lawrence Chen
c4742a4ba1
Refine browser import minimal UI 2026-03-17 16:46:10 -07:00