Commit graph

1769 commits

Author SHA1 Message Date
Lawrence Chen
da1bfedb87
Merge pull request #1965 from manaflow-ai/task-scrollbar-fix-mainline
Preserve explicit wheel scrollback against passive follow
2026-03-22 18:51:15 -07:00
Gale
ef9d917bef
Fix reload.sh build failure exit handling (#1888) 2026-03-22 18:40:08 -07:00
Lawrence Chen
c1c028e628
Preserve explicit wheel scrollback against passive follow 2026-03-22 18:11:06 -07:00
Lawrence Chen
7634abe616
Add regression test for wheel scrollback follow bug 2026-03-22 18:11:00 -07:00
Austin Wang
fd279bdcec
Fix splitter hitbox overlap and terminal scrollbar width resync (#1950)
* test: add splitter and scrollbar regressions

* fix: narrow sidebar overlap and resync terminal width

* test: unwrap pending surface width in scrollbar regression

* fix: restore hosted inspector divider drag path
2026-03-22 18:06:11 -07:00
Apptah
5ced3134d3
Fix browser freeze after pane split by reattaching WKWebView rendering state (#1852)
When a pane split occurs, SwiftUI recreates host views and the portal
system rebinds the WKWebView to a new container. However, the bind path
never called BrowserWindowPortalRegistry.refresh(), so WebKit's internal
rendering state (_exitInWindow/_enterInWindow) was never cycled. This
left the WKWebView frozen in the original pane after a split.

Add refresh() calls after every portal bind that changes the host, in
three code paths: the main update path (shouldBindNow), onDidMoveToWindow,
and onGeometryChanged. The refresh is a no-op when no reattach is needed
(browserPortalNeedsRenderingStateReattach == false), so normal rendering
is unaffected.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:05:39 -07:00
Lawrence Chen
5be9edaf5e
Merge pull request #1957 from che-3/fix/esc-not-working-in-panels
Fix Escape key not working in terminal panels (e.g. lazygit)
2026-03-22 17:49:00 -07:00
Austin Wang
e8cf83ca57
Fix claude-hook stop teardown races (#1954)
* Add regression test for claude-hook stop teardown errors

* Handle claude-hook stop teardown races
2026-03-22 17:34:33 -07:00
Lawrence Chen
c9616c59e9
Merge pull request #1937 from rerun0510/fix/macos26-background-thread
Fix terminal black screen on macOS 26.3.1 by dispatching Ghostty callbacks to main thread
2026-03-22 17:28:29 -07:00
Lawrence Chen
4c92271137
Merge pull request #1913 from centraldogma99/fix/korean-input-keyboard-shortcuts
Fix keyboard shortcuts not working with Korean input mode
2026-03-22 17:18:47 -07:00
Lawrence Chen
c5b306655d
Merge pull request #1915 from elvistranhere/fix/split-crash-intel-1870
Fix #1870: prevent split crash on Intel Macs caused by stale font pointer
2026-03-22 17:14:03 -07:00
Austin Wang
100612d96e
Fix locale page crashes under Google Translate (#1956)
* fix(web): fall back to English for missing locale keys

* fix(web): stabilize translated homepage typing
2026-03-22 16:55:00 -07:00
Matthew Z.
eb248a1cdb
Fix Cmd+Shift+key combos being swallowed for unbound keys (#1959)
Use charactersIgnoringModifiers instead of characters when redispatching
Cmd-modified key events in performKeyEquivalent. Cmd-modified keys don't
produce text characters, so event.characters returns an empty string for
Cmd+Shift combos, preventing Ghostty from encoding them as kitty protocol
sequences. charactersIgnoringModifiers returns the actual key character
(e.g. "k" for Cmd+Shift+K) while modifiers are preserved in modifierFlags.

Fixes #1718

Co-authored-by: CHE-3 <schumannzheng@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:52:42 -07:00
CHE-3
5de59cd4ed fix: stop consuming repeated Escape keys after command palette dismissal
The `shouldConsumeSuppressedEscape` function had an early return that
unconditionally consumed all repeated Escape key events (`isARepeat`),
regardless of whether the suppression window had expired. This caused
Escape presses to be swallowed in TUI apps (e.g. lazygit) running in
panels, because the repeat events never reached the active responder.

Removing the `isARepeat` guard lets repeated Escapes fall through to
the existing time-based check (0.35s window), which correctly expires
and stops consuming events after the command palette is dismissed.

Fixes #1610

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 19:42:24 -04:00
Lawrence Chen
e0e0e35279
Merge pull request #1834 from lifrary/fix/replace-force-unwrapped-utf8-data-encoding
Replace force-unwrapped .data(using: .utf8)! with Data(string.utf8)
2026-03-22 15:38:40 -07:00
Lawrence Chen
01ffeb3f44
Merge pull request #1898 from manaflow-ai/feat-tmux-notification-attention-state
Improve tmux notification attention routing
2026-03-22 15:36:36 -07:00
austinpower1258
fd1376d2d5 fix: update WorkspaceShortcutMapper tests to match renamed API from #1951
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 15:04:36 -07:00
Austin Wang
33dcc606bf
Customizable number shortcuts (#1951)
* Allow customizing numbered workspace and surface shortcuts

* Update bonsplit submodule to squashed main commit

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 14:54:54 -07:00
Austin Wang
661a4e8c7f
Merge pull request #1908 from manaflow-ai/issue-1906-update-dialog-double-press
Fix Sparkle update dialog requiring two presses
2026-03-22 13:19:01 -07:00
Hiroki Kajiwara
ad57e10772 fix: dispatch UI updates to main thread for macOS 26 compatibility
Publishing changes from background threads is not allowed in macOS 26
(Tahoe). Ghostty action callbacks run on I/O threads but were modifying
AppKit view properties and posting notifications without dispatching to
the main thread.

Fixes:
- GHOSTTY_ACTION_SCROLLBAR: wrap in DispatchQueue.main.async
- GHOSTTY_ACTION_CELL_SIZE: wrap in DispatchQueue.main.async
- GHOSTTY_ACTION_COLOR_CHANGE: wrap background color updates in main async
- GHOSTTY_ACTION_CONFIG_CHANGE: wrap background color clear in main async
2026-03-22 14:45:53 +09:00
austinpower1258
44b4374f2a fix: harden Sparkle manual update dialog flow 2026-03-21 15:19:31 -07:00
Austin Wang
76c1e632f0
Merge pull request #1895 from manaflow-ai/issue-1863-pinned-workspace-close-protect
Confirm before closing pinned workspaces
2026-03-21 12:36:55 -07:00
Austin Wang
374de63b8b
Merge pull request #1921 from manaflow-ai/issue-1894-browser-fullscreen-video
Fix browser pane video fullscreen
2026-03-21 12:22:59 -07:00
austinpower1258
e935eb57d3 Fix browser pane video fullscreen 2026-03-21 12:17:55 -07:00
Elvis Tran
ded07306df Remove em dash from code comment 2026-03-22 00:15:02 +10:30
Elvis Tran
a396242631 Address review feedback: guard TabManager call site, clarify malloc_size
- Add hasLiveSurface guard in TabManager.inheritedTerminalConfigForNewWorkspace
  to protect the cmuxInheritedSurfaceConfig call site missed in the initial fix
- Expand malloc_size comment to clarify it is a best-effort heuristic, not a
  lifetime guarantee (per Copilot review)
2026-03-22 00:06:15 +10:30
Elvis Tran
b1b07bf55b Fix #1870: prevent split crash on Intel Macs caused by stale font pointer
ghostty_surface_quicklook_font returns an unretained CTFont pointer that
can become stale on Intel Macs, leading to EXC_BAD_ACCESS (SIGSEGV) when
creating a split. This is a follow-up to the same crash pattern fixed in
#1496.

Add malloc_size validation in cmuxCurrentSurfaceFontSizePoints to detect
freed heap allocations before interpreting the pointer as a CTFont. Also
add hasLiveSurface guards in inheritedTerminalConfig and
rememberTerminalConfigInheritanceSource to skip surfaces whose native
state is closing or closed. All callers already handle nil gracefully by
falling back to inherited config values.
2026-03-22 00:00:10 +10:30
최준영
8cd9cd96c1 Fix keyboard shortcuts not working with Korean (한글) input mode
When a non-Latin input source like Korean 두벌식 is active,
event.charactersIgnoringModifiers returns Hangul characters (e.g. ㅅ
for T key) instead of Latin letters. This caused all character-based
shortcut matching to fail — Cmd+T, Cmd+D, Cmd+1-9, Ctrl+N/P, etc.

Root cause: KeyboardLayout.character(forKeyCode:modifierFlags:) assumed
CJK input sources lack kTISPropertyUnicodeKeyLayoutData, but Korean
두벌식 has it. UCKeyTranslate returned Korean characters and the ASCII
fallback was never reached.

Fix:
- KeyboardLayout.character(): check result is ASCII before accepting;
  fall through to TISCopyCurrentASCIICapableKeyboardInputSource() when
  the current source returns non-ASCII characters
- Add KeyboardLayout.normalizedCharacters(for:) helper that normalizes
  event.charactersIgnoringModifiers for shortcut comparison
- Apply normalization in handleCustomShortcut (AppDelegate),
  BrowserPanelView omnibar key handler, and BrowserPopupWindowController
  Cmd+W handler

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 21:16:10 +09:00
Lawrence Chen
5cef77e456
Self-heal tmux attention routing for cmux panes 2026-03-21 03:26:11 -07:00
Lawrence Chen
6ff81579d9
Merge pull request #1858 from martinezhermes/fix/background-opacity-blur-879
fix: apply background-opacity and background-blur to terminal rendering area (#879)
2026-03-21 03:16:47 -07:00
Lawrence Chen
65b2ba7597
Merge pull request #1845 from mvanhorn/osc/1603-close-tab-show-name
feat(dialog): show tab name in close tab confirmation
2026-03-21 03:16:36 -07:00
Lawrence Chen
e1bef073b4
Merge pull request #1826 from grimmerk/fix/applescript-windows-empty
fix: AppleScript count windows returns 0 + working directory returns empty
2026-03-21 03:10:26 -07:00
Lawrence Chen
f0fb098d3b
Add tmux stale-surface routing regression tests 2026-03-21 03:04:53 -07:00
Lawrence Chen
5051123c14
Keep tmux CMUX sync scoped to the workspace 2026-03-21 02:51:20 -07:00
Lawrence Chen
af5207db3c
Add tmux surface scope regression tests 2026-03-21 02:46:18 -07:00
Lawrence Chen
5e9a58d1d0
Sync CMUX environment through tmux automatically 2026-03-21 02:22:59 -07:00
Lawrence Chen
c325e2b49d
Add tmux shell environment regression tests 2026-03-21 02:22:00 -07:00
Lawrence Chen
ae5b81ca1f
Merge pull request #1877 from Jesssullivan/sid/fix-captcha-upstream
fix: Cloudflare/CAPTCHA verification failures in browser panel
2026-03-21 02:11:59 -07:00
austinpower1258
72f2e3b89d fix: show Sparkle dialog on first manual update check 2026-03-20 23:06:46 -07:00
austinpower1258
f0dcdf90e9 test: cover first-click Sparkle dialog regression 2026-03-20 23:06:44 -07:00
Lawrence Chen
a592ed126a
Add failing regression test for browser find focus (#1891)
* test: add browser find focus regression

* ci: run browser find focus regression on prs

* ci: merge pr ui regressions into one job

* fix: focus browser find after navigation

* test: rename ui regressions workflow guard

* Fix browser find focus after address bar navigation

* Fix test-e2e workflow manifest script

* Address PR review feedback

* Stabilize browser focus regression on CI

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-20 22:12:26 -07:00
Lawrence Chen
c2065b135d
Fix SSH image transfer cleanup and IPv6 followups (#1907)
* Add SSH image transfer followup regressions

* Fix SSH image transfer ownership and IPv6 followups

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-20 22:04:52 -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
2a04ac378c
Dismiss notification attention on focus 2026-03-20 20:59:56 -07:00
austinpower1258
0580de44a5 Confirm before closing pinned workspaces 2026-03-20 20:59:43 -07:00
Lawrence Chen
a0485df59c
Add focus notification dismiss regressions 2026-03-20 20:55:41 -07:00
Lawrence Chen
ec6915bfdc
Stop flashing on pane navigation 2026-03-20 20:42:54 -07:00
Lawrence Chen
a41bc97410
Tune navigation flash accent 2026-03-20 20:36:08 -07:00