Commit graph

249 commits

Author SHA1 Message Date
Lawrence Chen
e49e572505
Fix browser Cmd+F overlay clipping in portal mode (#916)
* Fix browser Cmd+F overlay clipping in portal mode

* Fix browser Cmd+F panel update regression

* Fix browser find overlay lifecycle and focus

* Extract regression test helpers for browser find guards

* Restore new-tab Cmd+F overlay and harden test helper

* Fix browser Cmd+F focus handoff race

* Fix browser Cmd+F focus loss across page load

* Address review feedback on browser find focus guards

* Add Cmd+F pane-switch regression UI tests

* Run Cmd+F pane-switch regressions from existing UI suite

* Restore browser find focus on pane refocus

* Stabilize Cmd+F pane-switch regressions with focus-state recorder

* Make autofocus race UI test wait on deterministic page signal

* Fix cmuxTests WebViewRepresentable init after browser search state param
2026-03-05 15:36:47 -08:00
Lawrence Chen
1408cbb68c
Flush PostHog hourly active events immediately (#934)
* PostHog: flush hourly active captures immediately

* PostHog: move focus-triggered active tracking off main queue

* Lighten PostHog app focus hot path

* Address review: dedupe PostHog event names
2026-03-05 04:00:04 -08:00
Yuki Yamashina
11197a49c4
Fix startup SIGSEGV: pre-warm locale before SentrySDK.start (#927)
Locale initialization on the main thread (os.locale.ensureLocale /
NSLocale._preferredLanguages) can race with Sentry's background
init thread calling posix.getenv, causing a SIGSEGV and leaving
the SDK disabled.

Related to #836
2026-03-05 03:03:32 -08:00
Lawrence Chen
4351c3cf18 Fix notify CLI focus-steal regression and add UI test 2026-03-05 02:20:27 -08:00
Austin Wang
6fe1410918
Fix terminal link opens to stay in source workspace (#912) 2026-03-04 19:21:45 -08:00
Austin Wang
34989e8ad0
Fix portal browser click focus after workspace switch (#908) 2026-03-04 18:36:26 -08:00
Lawrence Chen
80bbfdf206
Add custom file support for notification sounds (#869)
* Add custom-file notification sound option

* Add notification permission controls and test action

* Allow notification enable retries from settings

* Add notification permission flow debug logging
2026-03-04 17:18:07 -08:00
atani
2c330efb8a
feat: add Japanese localization with String Catalog (#819)
* Add i18n infrastructure with String Catalog and Japanese translations

Introduce String Catalog (.xcstrings) for localization support:
- Localizable.xcstrings: 195 UI string entries with en and ja translations
- InfoPlist.xcstrings: Info.plist strings (microphone usage, Finder menu items)
- project.pbxproj: add xcstrings to build phase and ja to knownRegions

* Replace hardcoded UI strings with String(localized:defaultValue:)

Migrate all user-facing strings across 11 source files to use
String(localized:defaultValue:) API (macOS 13+). Each string references
a key in Localizable.xcstrings, with the English text preserved as
defaultValue for fallback.

Files modified:
- KeyboardShortcutSettings: 28 shortcut labels
- SocketControlSettings: mode names and descriptions
- TabManager: placement labels, color names, close dialogs
- BrowserPanel/BrowserPanelView: error pages, context menus, tooltips
- UpdateViewModel/UpdatePopoverView/UpdatePill: update UI states
- NotificationsPage: notification panel labels
- SurfaceSearchOverlay: search bar placeholder and tooltips
- AppDelegate: menus, dialogs, command palette items

* Fix localization gaps from review feedback

Address review comments from CodeRabbit, Greptile, and Cubic Dev AI:
- Use interpolated String(localized:) instead of concatenation for
  version/progress strings in UpdateViewModel
- Localize remaining hardcoded strings in AppDelegate: window labels,
  rename dialog, status menu items, unread notification count
- Localize insecure HTTP alert body in BrowserPanel
- Add 12 new entries to Localizable.xcstrings with Japanese translations

* Fix String(localized:defaultValue:) keys to use StaticString

The localized: parameter requires StaticString when defaultValue: is
used. Move string interpolation from the key to defaultValue only,
and revert maxWidthText to plain strings since they are only used for
layout width calculation.

* Localize remaining UI strings across all source files

Add String(localized:defaultValue:) to all user-facing strings in:
- cmuxApp.swift: settings screen, menus, about panel, dialogs (~180 strings)
- ContentView.swift: command palette, sidebar context menu, dialogs (~200 strings)
- Workspace.swift: rename/move/close tab dialogs, tooltips (~20 strings)
- UpdateTitlebarAccessory.swift: titlebar tooltips, notifications popover (~10 strings)
- TerminalNotificationStore.swift: notification permission dialog (4 strings)
- CmuxWebView.swift: browser context menu items (2 strings)
- AppDelegate.swift: CLI install/uninstall alerts (6 strings)

Add 418 new entries to Localizable.xcstrings with Japanese translations.
Extract sidebar context menu into separate @ViewBuilder to fix Swift
type-checker timeout in large body.
Fix xcstrings format specifiers for interpolated strings (%lld, %@).

Total: 624 localization entries covering the full UI.

* Address review feedback: fix missing localizations and terminology

- Localize javaScriptDialogTitle URL branch in BrowserPanel
- Localize cantReach error message in BrowserPanel
- Localize close other tabs dialog message in TabManager
- Localize workspace accessibility label in ContentView
- Fix unread notification singular/plural (split into two keys)
- Fix insecure connection apostrophe inconsistency (unify to U+2019)
- Rename socketControl.fullOpen.description to socketControl.allowAll.description
- Remove dead code: renameTargetNoun function
- Fix terminology inconsistencies in xcstrings:
  - Unify "Developer Tools" to デベロッパツール
  - Unify "Jump to Latest Unread" phrasing
  - Unify "Flash Focused Panel" terminology
  - Fix dialog.enableNotifications.notNow translation

* fix: address remaining PR 819 review feedback

* fix: use a single localized key for close-other-tabs

* fix: avoid inflection markup in close-other-tabs message

* Address review feedback: localize tooltip, fix subtitle concat, unify keys

- Localize menubar tooltip unread count (hardcoded English -> localized)
- Replace subtitle string concatenation anti-pattern with single localized
  keys containing interpolation placeholders
- Unify workspace fallback key to workspace.displayName.fallback
- Remove unused workspace.defaultName key from xcstrings
- Add Japanese translations for new tooltip and subtitle keys
2026-03-04 14:58:28 -08:00
Lawrence Chen
e0ec448701
Fix Escape propagation when command palette is visible (#847)
* Fix command palette Escape propagation and add regressions

* Respect IME marked text for command palette Escape

* Harden command palette escape pending-open routing
2026-03-04 03:27:54 -08:00
Lawrence Chen
dad52b09d9
Cmd+P: show workspaces only (#844)
* Limit Cmd+P switcher to workspaces

* Fix command palette Enter/Escape handling and add regression test

* Scope command palette key handling to event window
2026-03-04 00:19:01 -08:00
Lawrence Chen
a5de92e9d6
Add customizable notification sound (#839)
* Add customizable notification sound setting

Adds a "Notification Sound" picker in Settings > App that lets users
choose from macOS system sounds (Default, Basso, Blow, Glass, etc.)
or silence notifications entirely with "None".

Closes https://github.com/manaflow-ai/cmux/issues/608

* Add custom notification command with env vars and sound preview

Users can set a shell command in Settings > App > Notification Command
that runs on every notification. CMUX_NOTIFICATION_TITLE,
CMUX_NOTIFICATION_SUBTITLE, and CMUX_NOTIFICATION_BODY env vars are
set. Also adds a play button to preview system sounds and docs.
2026-03-04 00:12:05 -08:00
Lawrence Chen
2f6cb6ff38
Add keyboard copy mode for terminal scrollback (#792)
* Add keyboard copy mode for terminal scrollback

* Show vim copy mode indicator in terminal

* Fix vi copy-mode symbol keys and pending yank handling

* Refine copy-mode badge wording and font

* Rename keyboard copy-mode badge to VI MODE

* Address PR feedback for copy-mode routing and keyup handling

* Refresh copy-mode viewport row after scrolling
2026-03-03 19:01:21 -08:00
Austin Wang
355012b252
Revert "Fix Cmd+Tab activation ordering for cmux windows (#744) (#766)" (#827)
This reverts commit a6f6485e3c.
2026-03-03 18:38:24 -08:00
Lawrence Chen
a139c346f2
Fix Cmd+Shift+Enter pane zoom regression in browser focus (#826) 2026-03-03 18:37:46 -08:00
Austin Wang
a12fb563ff
Fix Ghostty config reload theme refresh (#812) (#818) 2026-03-03 16:28:51 -08:00
Austin Wang
a3681ede5b
ok (#717) 2026-03-03 15:53:39 -08:00
Lawrence Chen
5d463af122
Fix ghost terminal surface rebind after close (#808)
* Fix ghost terminal lifecycle rebind race

* Address review feedback on portal regression checks

* Address follow-up review feedback
2026-03-03 15:20:42 -08:00
Lawrence Chen
682a57d7db
Add workspace-churn typing lag regression and fix (#767)
* Add workspace-churn typing lag regression and fix

* Fix CI build for debug stress split calls

* Stabilize lag regression gate for low baseline latency
2026-03-02 19:06:50 -08:00
Austin Wang
a6f6485e3c
Fix Cmd+Tab activation ordering for cmux windows (#744) (#766) 2026-03-02 16:46:00 -08:00
Lawrence Chen
33242f8780
Fix menubar icon invisible in light mode (#741)
Set isTemplate = true on the menu bar icon image so macOS automatically
renders it black in light mode and white in dark mode. Changed the glyph
fill from white to black per template image convention.

Closes https://github.com/manaflow-ai/cmux/issues/737
2026-03-01 21:35:50 -08:00
Lawrence Chen
ae79d32494
Add inline VS Code open-directory command palette action (#685)
* Add inline VS Code directory command-palette action

* Harden inline VS Code serve-web lifecycle handling

* Add command-palette actions to stop/restart inline VS Code server

* Fix inline VS Code serve-web review comments

* Fix serve-web stop/start race and add regression test
2026-03-01 18:53:08 -08:00
Lawrence Chen
8378bbeaa2
Add dark mode app icon for macOS Sequoia (#702)
* Add dark mode app icon variant for macOS Sequoia

Adds dark appearance entries to the AppIcon asset catalog so macOS 15+
automatically shows a dark-background icon when the system is in dark
mode. The chevron gradient and glow are preserved by recompositing the
foreground over a dark background (#1C1C1E).

Includes a generation script (scripts/generate_dark_icon.py) that
derives the dark PNGs from the light originals.

* Add icon picker in Settings and fix dark icon quality

Use the Figma chevron layer (design/cmux-icon-chevron.png) composited
over a dark background for pixel-perfect results, no white halo or
darkened gradient. Falls back to mathematical recomposition if the Figma
layer is missing.

Add an "App Icon" picker to Settings (under Theme) with three visual
options: Automatic (follows system appearance via asset catalog dark
variants on macOS 15+), Light, and Dark. The selection persists via
UserDefaults and is applied on launch in AppDelegate.ensureApplicationIcon.

* Fix dark icon chevron scale to match light icon

The Figma export was ~25% larger than the repo icon. Scale the Figma
chevron layer by 0.80x before compositing so the chevron size matches
exactly between light and dark variants.

* Use enhanced glow for dark icon

Add a soft blue bloom around the chevron on the dark background using
two Gaussian blur passes (wide at r=25 and tight at r=12) composited
at reduced opacity beneath the sharp chevron. Makes the icon pop more
against the dark squircle.
2026-03-01 03:57:09 -08:00
Lawrence Chen
7143359c04
Stabilize UI keyboard/focus regressions and flaky omnibar/sidebar tests (#689) 2026-02-28 07:09:37 -08:00
Lawrence Chen
7916b2d418
Fix Xcode Cloud UI tests by running TestAction in Debug (#672)
* Set cmux TestAction to Debug for UI tests

* Broaden XCTest detection for debug launch gate

* Fix AutomationSocketUITests launch hang in CI

* Stabilize CI Swift package resolution for test jobs

* Stabilize Xcode Cloud UI test focus and socket handling

* Add Xcode Cloud pre-xcodebuild submodule bootstrap

* Harden Xcode Cloud bonsplit bootstrap fallback
2026-02-28 01:48:49 -08:00
Lawrence Chen
168e6b9b25
Auto-heal missing CLI listener socket (#679)
* Auto-heal missing CLI socket listener

* Add Sentry socket listener breadcrumbs and failure capture
2026-02-28 01:19:38 -08:00
Lawrence Chen
c3b55e2a9f
Fix Cmd+plus zoom handling on non-US layouts (#680) 2026-02-28 00:16:03 -08:00
Lawrence Chen
49e93e4b4c
Add command palette entries to install/uninstall cmux CLI in PATH (#626)
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
2026-02-27 01:53:13 -08:00
Lawrence Chen
978341b228
Add zoom/maximize focused pane in splits (#634)
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
2026-02-27 01:50:56 -08:00
Lawrence Chen
c70ac25eef
Sort TerminalDirectoryOpenTarget enum cases alphabetically (#628)
All four switch statements (case list, commandPaletteTitle,
commandPaletteKeywords, applicationBundlePathCandidates) are now
in consistent alphabetical order.
2026-02-27 01:18:52 -08:00
Lawrence Chen
e14c5a383f
Add Tower to command palette Open Directory targets (#627) 2026-02-27 00:42:42 -08:00
Lawrence Chen
24bc23630a
Disable Sentry sendDefaultPii to match anonymous telemetry label (#623)
sendDefaultPii=true auto-collects usernames, emails, and IPs, which
contradicts the "Send anonymous telemetry" setting label. Set to false.
2026-02-26 23:53:11 -08:00
Lawrence Chen
fa6a18c753
Add telemetry opt-out setting (#610)
Adds a "Send anonymous telemetry" toggle in Settings that lets users
disable Sentry crash reporting and PostHog analytics. The setting is
frozen at launch so toggling mid-session shows a restart hint. The hint
correctly clears if the user toggles back to the launch-time value.
2026-02-26 22:02:29 -08:00
ALPER
4cb278c854
Fix interaction crash in titlebar drag hit-testing (#600) 2026-02-26 20:02:53 -08:00
Lawrence Chen
fab2b8611d
Switch fullscreen shortcut to Cmd+Ctrl+F (#530) 2026-02-25 19:42:21 -08:00
Lawrence Chen
58af38a28d
Add cmux_hourly_active event for hourly retention cohorts (#514)
cmux_daily_active deduplicates by UTC date, so PostHog hourly retention
cohorts show 0s. Add a companion cmux_hourly_active event that fires at
most once per UTC hour, deduped via UserDefaults. No flush() after
hourly events (let them batch). The existing 30-minute timer provides
adequate hour-boundary coverage without changes.
2026-02-25 18:33:57 -08:00
Lawrence Chen
ede4e2fc99 Add Cmd+Enter shortcut to toggle fullscreen 2026-02-25 18:26:29 -08:00
Lawrence Chen
f38bc3b775
Move LaunchServices bundle registration off main thread (#513)
Fixes CMUXTERM-MACOS-DS
2026-02-25 18:02:00 -08:00
Austin Wang
501bb43d04
Merge pull request #496 from manaflow-ai/cmux/branch-inactive-computer-issue
Fix sidebar git branch updates after sleep/wake
2026-02-25 17:21:48 -08:00
Austin Wang
93a9e1a3b6
Merge pull request #495 from manaflow-ai/cmux/fix-chinese-ime-active
Allow Cmd shortcuts during IME composition
2026-02-25 17:21:08 -08:00
Lawrence Chen
381b0c1323 Reduce unchanged autosave snapshot churn
Fixes CMUXTERM-MACOS-RF

Fixes CMUXTERM-MACOS-H4
2026-02-25 16:28:09 -08:00
Lawrence Chen
9140371fcd guard devtools restore from unsafe first-responder churn 2026-02-25 15:59:49 -08:00
austinpower1258
213bda5e14 Fix sidebar git branch recovery after sleep/wake (#494) 2026-02-25 15:36:51 -08:00
austinpower1258
516ace4feb Allow Cmd shortcuts during IME composition
Cmd-based keyboard shortcuts (Cmd+T, Cmd+Shift+L, etc.) were blocked
while an IME had active composition (marked text), affecting Chinese
Pinyin, Japanese, Korean, and all other input methods. Since Cmd is a
system modifier never consumed by IME input sequences, exempt
Cmd-modified events from the three IME bypass points in the key event
chain.

Fixes #440

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:34:26 -08:00
Lawrence Chen
4890fe95fe Move autosave persistence off main thread
Fixes CMUXTERM-MACOS-EA

Fixes CMUXTERM-MACOS-DT
2026-02-25 15:03:26 -08:00
Lawrence Chen
575b53526c Restore safe webview resolution for field-editor responders 2026-02-25 13:39:22 -08:00
Lawrence Chen
0164c870f1 Harden Sentry guards for 0.61.0 issue burst 2026-02-25 13:24:20 -08:00
Lawrence Chen
62fffc7221 Use command palette flow for workspace rename shortcut 2026-02-25 05:12:49 -08:00
Lawrence Chen
2202b6081c Restore Cmd+Shift+R as rename workspace 2026-02-25 05:07:26 -08:00
Lawrence Chen
86bbe4c727 Alias Cmd+Shift+R to rename-tab command palette 2026-02-25 04:30:44 -08:00
Lawrence Chen
eaabaad3d3
Add Cmd+Option+W to close other pane tabs with confirmation (#475)
* Add Cmd+Option+W close-other-tabs confirmation

* Match close-other-tabs shortcut to Cmd+Option+T
2026-02-25 03:54:51 -08:00