Commit graph

998 commits

Author SHA1 Message Date
austinpower1258
72f2e3b89d fix: show Sparkle dialog on first manual update check 2026-03-20 23:06:46 -07:00
Lawrence Chen
43c61f6e63
Fix SSH image transfer followups (#1904)
* Add regressions for SSH image transfer followups

* Fix SSH image transfer followup regressions

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-20 21:32:21 -07:00
Austin Wang
cdf8d367b2
Fix browser back navigation history handoff (#1897)
* Add regression test for browser back history

* Fix browser back history handoff

* Fix browser tab favicon not updating on navigation

Two issues caused stale or missing favicons in browser tabs:

1. KVO race: The isLoading observer read webView.isLoading inside a deferred
   Task instead of capturing the KVO change value at observation time. For fast
   navigations (back-forward cache), isLoading flips true→false before the Task
   runs, so handleWebViewLoadingChanged(true) was never called and the old
   favicon was never cleared.

2. SPA favicon discovery: Sites that inject <link rel="icon"> via JavaScript
   (e.g. React apps) had no favicon link in the DOM when didFinish fired. The
   fallback to /favicon.ico often 404'd, leaving the globe icon permanently.
   Now retries the JS query after 600ms to give client-side scripts time to
   add the tag.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 21:11:56 -07:00
Austin Wang
5c4fab1296
Fix sidebar PR badge detection for workspace branches (#1896)
* test: cover sidebar PR probe selection

* fix: detect sidebar PR badges across github remotes
2026-03-20 21:10:08 -07:00
Lawrence Chen
4376e6e19a
Support image drag-and-drop into SSH terminals (#1838)
* Add remote image drag-and-drop uploads

* test: cover ssh image paste planning

* fix: upload images pasted into ssh terminals

* fix: share zsh history in cmux ssh relay shells

* fix: add cancellable ssh image transfer indicator

* fix: harden async ssh image transfer callbacks

* fix: address ssh image upload review feedback

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-20 18:31:19 -07:00
Lawrence Chen
cc0fc557cf
Share browser context with OAuth popups (#1600)
* Add popup browser context regression tests

* Share browser context with OAuth popups

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-20 03:57:36 -07:00
Lawrence Chen
886de2a7c9
Add IntelliJ IDEA to command palette Open Directory targets (#1860)
Co-authored-by: jjonyo <jonyo.park@gmail.com>
2026-03-20 02:57:17 -07:00
이수민
8b49d66763
fix: support keyboard shortcuts with CJK input sources (Korean, Chinese, Japanese) (#1649)
When a non-Latin input source is active, event.charactersIgnoringModifiers
returns CJK characters that cannot match Latin shortcut keys. This adds
ASCII-capable input source fallback in KeyboardLayout and updates the
matchShortcut guard to skip early-return when event chars are non-ASCII.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 02:47:19 -07:00
Lawrence Chen
22689d5e0d
fix(sidebar): avoid premature workspace title truncation (#1859)
Co-authored-by: Brian Le <brian@brianle.xyz>
2026-03-20 02:44:29 -07:00
BillionToken
8782978aba
fix(hooks): handle TabManager unavailable in SessionEnd/Start hooks (#1735)
Fixes #1715

The resolveTabForReport() function had an early guard that returned nil
when self.tabManager was nil, even when a valid --tab argument was
provided. This prevented Claude hook commands from resolving tabs via
AppDelegate.shared when the local tabManager wasn't available.

Changes:
- Modified resolveTabForReport() to allow tab resolution via --tab param
  even when self.tabManager is nil
- Removed early guard in upsertSidebarMetadata() that blocked resolution

Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
2026-03-20 02:14:29 -07:00
pstanton237
0fa7160de8
fix: align titlebar icons with traffic-light buttons (#1754)
The titlebar control icons (sidebar, notifications, new tab) were
vertically misaligned — centered within the full titlebar+tab-bar
area instead of the titlebar alone.

Use the close button's superview height as the true titlebar height
so the icons sit at the same vertical center as the traffic lights,
matching the behavior of apps like Slack.
2026-03-20 01:57:35 -07:00
Zachary Salzbank
730d64b943
feat: add --direction flag to markdown open command (#1763)
Supports left/right/up/down, defaulting to right (existing behavior).
Matches the --direction flag convention used by new-pane and new-split.
2026-03-20 01:48:28 -07: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