Commit graph

335 commits

Author SHA1 Message Date
Lawrence Chen
d08f28d770
Merge pull request #83 from manaflow-ai/perf/portal-hosting-selected-mount
Reduce terminal input latency via portal hosting + selected-only workspace mounting
2026-02-18 22:31:45 -08:00
Lawrence Chen
ee4848c008 Speed up workspace switching: reduce portal churn and enforce selected z-order 2026-02-18 22:13:40 -08:00
Lawrence Chen
75b25217b5
Bump version to 0.51.0 (#94) 2026-02-18 22:11:58 -08:00
Lawrence Chen
699db2a9ed
Fix menubar lag on M1 Macs by using universal xcframework target (#93)
Remove -Dxcframework-target=native from CI and release workflows,
defaulting to universal (matching upstream ghostty). The native target
produces a macos-arm64 xcframework slice that causes Xcode to link the
final binary differently (~70KB more __text), resulting in menubar and
right-click lag on M1 Max. The arm64 static libraries are byte-for-byte
identical between native and universal builds - the difference is purely
in how Xcode resolves the xcframework slice.
2026-02-18 22:09:13 -08:00
Austin Wang
ab89fab897
Fix browser opening new tabs on link click (#92)
* Fix browser panel opening new tabs on every link click

Navigate target=_blank and window.open() links in the current webview
instead of spawning new browser tabs.

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

* Preserve cmd+click new tab behavior in createWebViewWith

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:53:36 -08:00
Lawrence Chen
442eb1f01d Rename test targets to cmuxTests and cmuxUITests 2026-02-18 21:19:56 -08:00
Lawrence Chen
7aa80b9cdc Stabilize rapid workspace switching handoff 2026-02-18 21:17:53 -08:00
Austin Wang
0851cff378
Bump version to 0.50.0 (#91)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 21:10:34 -08:00
Austin Wang
2d64ecfc44
fixes crashes and filedrop fatal issue 2026-02-18 20:46:31 -08:00
Lawrence Chen
915e34bd38
Revert xcframework-target removal that broke CI (#86) (#90)
The -Dxcframework-target flag controls platform slices (native=macOS
only, universal=macOS+iOS), not CPU microarchitecture. Removing it
caused CI to attempt iOS builds which fail due to missing Metal
iOS toolchain on the runner.
2026-02-18 20:37:59 -08:00
Austin Wang
65ac29d827
Fix zsh git branch refresh race after cwd change (#71)
* Fix zsh git branch refresh race after cwd change

* Clarify intentional duplicate cwd check in git refresh path

* Add Metal Toolchain download step to CI and release workflows

Fixes build failure when compiling Metal shaders for iOS xcframework
targets — the self-hosted runner needs `xcodebuild -downloadComponent
MetalToolchain` installed before `xcrun metal` can run.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 20:36:27 -08:00
Lawrence Chen
a723bbaa6a Fix Finder file drop routing for portal-hosted terminals 2026-02-18 20:33:35 -08:00
Lawrence Chen
57db48eca1 Merge remote-tracking branch 'origin/main' into perf/portal-hosting-selected-mount 2026-02-18 20:29:12 -08:00
Lawrence Chen
27df9cd171 Remove SwiftUI dimming fallback for portal terminals 2026-02-18 20:28:00 -08:00
Lawrence Chen
b05347884d Restore unfocused pane dimming for portal-hosted terminals 2026-02-18 20:24:54 -08:00
Lawrence Chen
d24030db58
Use universal xcframework target instead of native (#86)
The self-hosted runner (M4 Mac Mini) was building GhosttyKit with
-Dxcframework-target=native, producing M4-tuned binaries. This caused
menubar and right-click lag on M1 machines. Dropping the flag defaults
to universal, which works well across all Apple Silicon chips.
2026-02-18 20:21:34 -08:00
Lawrence Chen
22aa4d48da Fix portal lifecycle retention and add regression tests 2026-02-18 20:17:44 -08:00
Lawrence Chen
fb85b690d5
Add /release-nightly skill and fix release skills (#85)
- New /release-nightly: end-to-end version bump + local build + release
- Fix /release-local: source secrets directly, use signing hash to avoid
  keychain ambiguity, correct create-dmg --codesign flag, export
  SPARKLE_PRIVATE_KEY for appcast generation
- Add `say` notification on completion/failure to all release skills
2026-02-18 20:14:17 -08:00
Lawrence Chen
edadda6d8c Fix portal hit-testing and teardown visibility 2026-02-18 20:05:49 -08:00
Lawrence Chen
ed7f6301d0 Improve terminal hosting depth and workspace mount policy 2026-02-18 19:55:41 -08:00
Lawrence Chen
9e3f5830a8
Bump version to 0.49.0 (#84) 2026-02-18 19:54:58 -08:00
Lawrence Chen
03a1cc13e0
Fix stack overflow in FileDropOverlayView mouse forwarding (#82)
The hide-send-unhide pattern in forwardEvent() can recurse infinitely
when gesture recognizer routing re-delivers the event despite isHidden.
Add a re-entrancy guard to break the cycle.

Fixes EXC_BAD_ACCESS (stack overflow) crash in production.
2026-02-18 19:51:25 -08:00
Lawrence Chen
88ee368f78
Fix titlebar folder icon briefly enlarging on workspace switch (#81) 2026-02-18 19:05:57 -08:00
Lawrence Chen
fe082cd213
Bump version to 0.48.0 (#80) 2026-02-18 17:56:22 -08:00
Lawrence Chen
29becbe079
Fix claude shim conflicting with --resume, --continue, and --session-id (#78)
The shim always injected --session-id with a fresh UUID, which broke
`claude --resume <id>` and `claude --continue` by conflicting with the
user's session flag. Now scans args and skips injection when the user
already specifies a session/resume flag.

Also passes through subcommands (mcp, config, api-key) without injecting
hooks or session flags since they don't support them.
2026-02-18 17:49:57 -08:00
Lawrence Chen
2dd4a3c6b2
Bump version to 0.47.0 (#77) 2026-02-18 17:22:46 -08:00
Lawrence Chen
6748c202f2
Fix sidebar drag-and-drop broken by FileDropOverlayView (#76)
* Fix sidebar drag-and-drop broken by FileDropOverlayView

The FileDropOverlayView (added in 9fd3cc2) sits on the window's theme
frame above the content view. Its hitTest returned self for all events,
causing AppKit to route drag sessions to the overlay instead of the
content view where SwiftUI lives. AppKit walks UP the superview chain
from the hit-tested view, never checking siblings — so SwiftUI's
.onDrop handlers for sidebar tab reordering were never reached.

Three changes fix this:

1. Smart hitTest: check NSPasteboard(name: .drag) for .fileURL and only
   return self during Finder file drags. Return nil otherwise so mouse
   events and internal drags pass through to the content view.

2. Custom UTType for sidebar drags: replace the fragile UTType.plainText
   hack with a proper com.cmux.sidebar-tab-reorder type registered in
   Info.plist. Uses visibility: .ownProcess since it's internal-only.

3. Narrow overlay registration: only register for .fileURL instead of
   .fileURL + .URL + .string. The broad .string type collided with
   text-based drag payloads.

* Add custom UTType Info.plist pitfall to CLAUDE.md
2026-02-18 17:20:22 -08:00
Lawrence Chen
cf0f08f0e2
Bump version to 0.46.0 (#75) 2026-02-18 16:49:22 -08:00
Austin Wang
5647aacacd
Revert "ok (#68)" (#74)
This reverts commit 5a10ec8d17.
2026-02-18 16:42:41 -08:00
Lawrence Chen
9105ecbf03 Bump version to 0.45.0 2026-02-18 16:27:15 -08:00
Lawrence Chen
5e4f07d8e9 Update homebrew-cmux submodule to latest 2026-02-18 16:13:40 -08:00
Austin Wang
adac50c5b9
Bump version to 0.44.0 (#70)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 14:41:20 -08:00
Austin Wang
5a10ec8d17
ok (#68) 2026-02-18 14:38:07 -08:00
Lawrence Chen
cb86322e98
Remove docs-site, add PostHog analytics to web (#66)
- Delete docs-site/ (superseded by web/app/docs)
- Add posthog-js with Vercel reverse proxy at /cdata to bypass adblockers
- Track pageviews (SPA-aware), download clicks (hero/navbar/mobile_drawer),
  and GitHub link clicks (hero/navbar/mobile_drawer/footer)
2026-02-18 04:00:04 -08:00
Lawrence Chen
fdd8029c00 Bump version to 0.43.0 2026-02-18 02:19:30 -08:00
Lawrence Chen
0ec5a3af1b Restore lost bonsplit + button commits via merge
Three bonsplit commits (429af82, 2ff740d, b1948ab) adding the tab bar
+ button were lost when ad159da moved the submodule pointer to a
branch that forked before those commits. Merge origin/term-browser-icons
back into bonsplit main to restore them.
2026-02-18 02:17:46 -08:00
Lawrence Chen
4c42bd8078 Fix migrateMode dropping allowAll to default cmuxOnly
migrateMode() had no case for "allowAll" rawValue, so it fell
through to the default branch which returned .cmuxOnly. This
silently downgraded any persisted allowAll setting.
2026-02-18 02:12:19 -08:00
Lawrence Chen
21bbe80410
Add features table with images to README (#64)
Replace the hero screenshot and add a visual features table showing
notification rings, notification panel, in-app browser, and vertical
tabs & splits with per-feature screenshots.
2026-02-18 01:31:21 -08:00
Lawrence Chen
f2f4fb8a22
Add features table with images to README (#63)
* Add features table with images to README

Replace the hero screenshot and add a visual features table showing
notification rings, notification panel, in-app browser, and vertical
tabs & splits with per-feature screenshots.

* Rename feature heading to "Vertical + horizontal tabs"

* Remove parenthetical from notification rings description
2026-02-18 01:24:54 -08:00
Lawrence Chen
ad159daa80 Update bonsplit: onFileDrop API, PaneDragContainerView, dirty indicator fix 2026-02-18 01:21:17 -08:00
Lawrence Chen
fb93a9f5ef Bump version to 0.42.0 2026-02-18 01:11:18 -08:00
Lawrence Chen
51a67e31fd
Socket access control: process ancestry check (#58)
* Socket access control: process ancestry check + file permissions

Redesign socket control modes from (off, notifications, full) to
(off, cmuxOnly, allowAll):

- cmuxOnly (default): uses LOCAL_PEERPID + sysctl process tree walk to
  verify the connecting process is a descendant of cmux. External
  processes (SSH, other terminals) are rejected.
- allowAll: hidden mode accessible only via CMUX_SOCKET_MODE=allowAll
  env var, skips ancestry check. Legacy "full"/"notifications" env
  values map here for backward compat.
- off: disables socket entirely.

Security hardening:
- Server: chmod 0600 on socket after bind (owner-only access)
- CLI: stat() ownership check before connect (reject fake sockets)

Removes per-command allow-list (isCommandAllowed) — once a process
passes the ancestry check, all commands are available.

Includes migration for persisted UserDefaults values and env var
aliases (cmux_only, cmux-only, allow_all, allow-all).

* Add /sync-branch skill for submodule + main sync
2026-02-18 01:09:24 -08:00
Lawrence Chen
60978d4d8b Update secrets path from cmux.env to cmuxterm.env 2026-02-18 01:03:03 -08:00
Lawrence Chen
d62153bdc6 Update submodules: ghostty upstream sync, homebrew cask bumps 2026-02-18 01:01:40 -08:00
Lawrence Chen
4d6a3f81bf Bump version to 0.41.0 2026-02-17 22:23:12 -08:00
Lawrence Chen
e4d31819d2 Merge remote-tracking branch 'origin/main' into fix-file-drop-targeting 2026-02-17 22:16:15 -08:00
Lawrence Chen
3b4c6f124b Add submodule safety rule to CLAUDE.md
Instructs AI agents to always push submodule commits to remote main
before updating the parent pointer, preventing orphaned commits.
2026-02-17 22:14:32 -08:00
Lawrence Chen
893e1a5d4b Fix ghostty submodule pointer to existing commit
Reverts ghostty to 5a987a14 (the state before 50fce94 pointed it at
orphaned commit eac00f3 which no longer exists on the remote).
2026-02-17 22:14:26 -08:00
Lawrence Chen
d8b39aeaa4 Merge remote-tracking branch 'origin/main' into fix-file-drop-targeting 2026-02-17 22:12:26 -08:00
Lawrence Chen
8104c1675b Use paste path for file drops and don't steal focus
Switch from ghostty_surface_key (key event path) to ghostty_surface_text
(paste path) for file drops, matching upstream Ghostty. This triggers
bracketed paste mode and eliminates the lag on drop.

Remove makeFirstResponder calls from insertDroppedPasteboard and
handleDroppedURLs so dropping a file doesn't steal keyboard focus from
the currently focused terminal.
2026-02-17 22:11:47 -08:00