Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
a8543f1
ContentView drain: lift command-palette domain into CmuxCommandPalett…
azooz2003-bit Jun 13, 2026
7bb426d
ContentView drain: complete command-palette test cutover (stack E)
azooz2003-bit Jun 13, 2026
d017279
ContentView drain: remove leftover duplicate overlay-promotion policy…
azooz2003-bit Jun 13, 2026
521da34
ContentView drain: lift AppKit-support primitives into CmuxAppKitSupp…
azooz2003-bit Jun 13, 2026
b9d9911
ContentView drain: lift NSColor.hexString into CmuxFoundation (stack …
azooz2003-bit Jun 13, 2026
cd036a7
ContentView drain: lift String.nilIfEmpty into CmuxFoundation (stack …
azooz2003-bit Jun 13, 2026
cffc1f3
ContentView drain: import CmuxFoundation in cmuxTests callers of NSCo…
azooz2003-bit Jun 13, 2026
6f0aadd
ContentView drain: lift sidebar scroll-view resolver cluster into Cmu…
azooz2003-bit Jun 13, 2026
ff864cf
ContentView drain: retarget SidebarScrollViewConfiguratorTests to Cmu…
azooz2003-bit Jun 13, 2026
fdc6420
ContentView drain: lift feedback composer domain into CmuxFeedback (s…
azooz2003-bit Jun 13, 2026
06ff565
ContentView drain: lift feedback composer message-editor views into C…
azooz2003-bit Jun 13, 2026
c9ac520
ContentView drain: link CmuxAppKitSupportUI into cmuxTests target (st…
azooz2003-bit Jun 13, 2026
656773c
ContentView drain: retarget app-host palette tests to CmuxCommandPale…
azooz2003-bit Jun 13, 2026
48f9614
ContentView drain: make SidebarScrollViewResolverView.resolveScrollVi…
azooz2003-bit Jun 13, 2026
8373ccc
ContentView drain: link CmuxCommandPalette into cmuxTests target (sta…
azooz2003-bit Jun 13, 2026
fc6d171
ContentView drain: fix CmuxAppKitSupportUI strict-concurrency errors …
azooz2003-bit Jun 13, 2026
b561670
ContentView drain: refresh file-length budget for palette-test import…
azooz2003-bit Jun 13, 2026
48bcea5
ContentView drain: import CmuxCommandPalette in CommandPaletteNucleoF…
azooz2003-bit Jun 13, 2026
393fe30
ContentView drain: retarget palette fingerprint test calls to package…
azooz2003-bit Jun 13, 2026
5cdf4bd
ContentView drain: lift sidebar drag auto-scroll domain to CmuxAppKit…
azooz2003-bit Jun 13, 2026
b0c1ca6
ContentView drain: lift sidebar drop planner to CmuxFoundation (stack E)
azooz2003-bit Jun 13, 2026
6720428
ContentView drain: lift sidebar tab drop-indicator predicate to CmuxF…
azooz2003-bit Jun 13, 2026
ec97502
ContentView drain: lift browser-stack drop planner to CmuxSidebarProv…
azooz2003-bit Jun 13, 2026
307fcfa
ContentView drain: lift sidebar drag-lifecycle policies to CmuxFounda…
azooz2003-bit Jun 13, 2026
cec2995
ContentView drain: wire CmuxSidebarProviderKit into cmuxTests target …
azooz2003-bit Jun 13, 2026
f36cdfb
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 13, 2026
57df083
ContentView drain: import CmuxFoundation in two lifted-type test cons…
azooz2003-bit Jun 13, 2026
1675a29
ContentView drain: lift SidebarFeedbackComposerSheet to CmuxFeedbackUI
azooz2003-bit Jun 13, 2026
547fd6a
ContentView drain: lift shortcut-hint + dev-banner + markdown leaves …
azooz2003-bit Jun 13, 2026
2196d23
ContentView drain: lift SidebarWorkspaceSelectionSyncPolicy to CmuxFo…
azooz2003-bit Jun 13, 2026
68a2620
ContentView drain: lift SidebarDragLifecycleNotification to CmuxFound…
azooz2003-bit Jun 13, 2026
743c2ae
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 13, 2026
de016c5
Merge origin/main into feat-contentview-drain (re-sync after Wave-3 m…
azooz2003-bit Jun 14, 2026
b0f340a
ContentView drain: mark lifted policy/value namespace enums lint:allow
azooz2003-bit Jun 14, 2026
7978cb2
Merge origin/main into feat-contentview-drain (re-sync #2 after #6067)
azooz2003-bit Jun 14, 2026
e878eb0
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 14, 2026
3e88c09
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 14, 2026
a271bd9
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 14, 2026
f2bd672
Merge remote-tracking branch 'origin/main' into feat-contentview-drain
azooz2003-bit Jun 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 27 additions & 25 deletions .github/swift-file-length-budget.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,57 @@
# Format: max_lines<TAB>relative path
# Reduce counts as files shrink. CI fails if tracked files exceed this budget.
33454 CLI/cmux.swift
19204 Sources/ContentView.swift
17913 Sources/AppDelegate.swift
14610 Sources/TerminalController.swift
16826 Sources/ContentView.swift
14612 Sources/TerminalController.swift
13577 Sources/Panels/BrowserPanel.swift
12084 Sources/GhosttyTerminalView.swift
12085 Sources/GhosttyTerminalView.swift
12046 cmuxTests/AppDelegateShortcutRoutingTests.swift
12020 Sources/Workspace.swift
12021 Sources/Workspace.swift
9345 cmuxTests/CLINotifyProcessIntegrationRegressionTests.swift
7850 Sources/Panels/BrowserPanelView.swift
7851 Sources/Panels/BrowserPanelView.swift
7349 cmuxTests/WorkspaceUnitTests.swift
6944 cmuxTests/WorkspaceRemoteConnectionTests.swift
6316 cmuxTests/SessionPersistenceTests.swift
6296 cmuxTests/GhosttyConfigTests.swift
6317 cmuxTests/SessionPersistenceTests.swift
6297 cmuxTests/GhosttyConfigTests.swift
6153 CLI/cmux_open.swift
6074 Sources/TabManager.swift
6074 Sources/TextBoxInput.swift
5969 cmuxTests/TerminalAndGhosttyTests.swift
5925 cmuxTests/TerminalAndGhosttyTests.swift
5500 cmuxTests/BrowserConfigTests.swift
5487 Sources/cmuxApp.swift
5113 Packages/CmuxMobileShell/Sources/CmuxMobileShell/MobileShellComposite.swift
4460 Sources/Panels/FilePreviewPanel.swift
4400 cmuxTests/BrowserPanelTests.swift
4227 Sources/BrowserWindowPortal.swift
3937 Sources/Feed/FeedPanelView.swift
3895 cmuxTests/WindowAndDragTests.swift
3896 cmuxTests/WindowAndDragTests.swift
3764 cmuxTests/TabManagerUnitTests.swift
3699 cmuxTests/CLIGenericHookPersistenceTests.swift
3664 Packages/CmuxMobileTerminal/Sources/CmuxMobileTerminal/GhosttySurfaceView.swift
3397 Sources/CmuxConfig.swift
3331 cmuxTests/TabManagerSessionSnapshotTests.swift
3202 Sources/Update/UpdateTitlebarAccessory.swift
2877 Sources/SessionIndexView.swift
3203 Sources/Update/UpdateTitlebarAccessory.swift
2878 Sources/SessionIndexView.swift
2871 cmuxTests/CMUXOpenCommandTests.swift
2573 Sources/KeyboardShortcutSettings.swift
2565 Sources/Panels/CmuxWebView.swift
2545 cmuxTests/WorkspaceManualUnreadTests.swift
2544 cmuxTests/CommandPaletteSearchEngineTests.swift
2546 cmuxTests/WorkspaceManualUnreadTests.swift
2449 cmuxTests/CommandPaletteSearchEngineTests.swift
2395 Sources/Mobile/MobileHostService.swift
2328 cmuxTests/CJKIMEInputTests.swift
2314 Sources/FileExplorerView.swift
2261 Sources/TerminalWindowPortal.swift
2252 Sources/TerminalWindowPortal.swift
2236 Sources/TerminalNotificationStore.swift
2134 cmuxTests/ShortcutAndCommandPaletteTests.swift
2117 cmuxTests/CmuxConfigTests.swift
2100 cmuxTests/ShortcutAndCommandPaletteTests.swift
2059 Sources/SessionPersistence.swift
2034 Sources/KeyboardShortcutSettingsFileStore.swift
1949 Sources/Panels/BrowserWebAuthnSupport.swift
1860 cmuxTests/NotificationAndMenuBarTests.swift
1794 Sources/SessionIndexStore.swift
1777 Sources/RestorableAgentSession.swift
1751 Sources/WindowDragHandleView.swift
1747 Sources/WindowDragHandleView.swift
1723 cmuxTests/TerminalControllerSocketSecurityTests.swift
1695 cmuxTests/WorkspacePullRequestSidebarTests.swift
1677 cmuxUITests/BrowserPaneNavigationKeybindUITests.swift
Expand All @@ -62,41 +62,42 @@
1498 cmuxTests/OmnibarAndToolsTests.swift
1496 cmuxUITests/MultiWindowNotificationsUITests.swift
1446 Sources/FileExplorerStore.swift
1410 Sources/CommandPalette/CommandPaletteSearch.swift
1380 cmuxUITests/MenuKeyEquivalentRoutingUITests.swift
1376 cmuxTests/KeyboardShortcutSettingsFileStoreStartupTests.swift
1373 cmuxTests/AppDelegateIssue2907RoutingTests.swift
1366 Sources/Feed/FeedButtonStyleDebugWindowController.swift
1362 Sources/CMUXInstalledExtensionSidebarHostView.swift
1312 cmuxTests/MobileHostAuthorizationTests.swift
1292 Packages/CmuxTerminalCore/Sources/CmuxTerminalCore/Config/GhosttyConfig.swift
1285 cmuxUITests/SidebarHelpMenuUITests.swift
1276 cmuxTests/MobileHostAuthorizationTests.swift
1270 cmuxTests/RestorableAgentSessionIndexTests.swift
1257 Sources/Feed/FeedCoordinator.swift
1216 Packages/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteSearchEngineTests.swift
1205 Packages/CmuxMobileTerminal/Sources/CmuxMobileTerminal/TerminalInputTextView.swift
1197 cmuxTests/CodexAppServerSessionTests.swift
1166 Sources/VaultAgentProcessScanner.swift
1159 cmuxTests/SidebarOrderingTests.swift
1161 cmuxTests/SidebarOrderingTests.swift
1144 cmuxTests/PiVaultAgentPersistenceTests.swift
1126 cmuxTests/FileExplorerStoreTests.swift
1120 cmuxTests/AgentHibernationTests.swift
1107 Sources/AppDelegate+CmuxSSHURL.swift
1093 cmuxUITests/BonsplitTabDragUITests.swift
1048 Packages/CmuxCommandPalette/Sources/CmuxCommandPalette/Search/CommandPaletteFuzzyMatcher.swift
1021 cmuxUITests/TerminalCmdClickUITests.swift
1006 cmuxTests/CmuxSSHURLRequestTests.swift
1000 cmuxTests/CmuxTopSnapshotScopeTests.swift
951 Sources/App/TerminalDirectoryOpenSupport.swift
947 Sources/TerminalNotificationPolicy.swift
945 Sources/SessionIndexRegisteredAgents.swift
941 Sources/App/TerminalDirectoryOpenSupport.swift
937 Sources/TextBoxMentionIndexStore.swift
934 Sources/App/ShortcutRoutingSupport.swift
926 Sources/DockPanelView.swift
919 Packages/CmuxTerminal/Sources/CmuxTerminal/Surface/TerminalSurface+RuntimeLifecycle.swift
917 cmuxTests/WorkspaceGroupTests.swift
913 Sources/CommandPalette/CommandPaletteSettingsToggle.swift
918 cmuxTests/WorkspaceGroupTests.swift
914 Sources/CommandPalette/CommandPaletteSettingsToggle.swift
905 Sources/CmuxSSHURLRequest.swift
901 Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/AppSection.swift
892 Sources/WorkspaceContentView.swift
893 Sources/WorkspaceContentView.swift
868 Sources/Panels/BrowserScreenshotSnapshotter.swift
866 Sources/Panels/TerminalPanel.swift
852 Packages/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Workspace/ControlCommandCoordinator+Workspace.swift
Expand All @@ -123,8 +124,8 @@
706 CLI/CMUXCLI+Config.swift
705 cmuxUITests/BrowserOmnibarSuggestionsUITests.swift
701 CLI/CMUXCLI+AgentHookDefinitions.swift
699 Sources/RightSidebarPanelView.swift
699 cmuxTests/TerminalNotificationClearAllTests.swift
698 Sources/RightSidebarPanelView.swift
698 cmuxTests/RestorableAgentHookProviderResumeTests.swift
696 cmuxTests/UpdatePillReleaseVisibilityTests.swift
693 Sources/Panels/BrowserPopupWindowController.swift
Expand All @@ -141,7 +142,7 @@
650 Sources/Panels/MarkdownRemoteImageLoader.swift
649 Sources/CmuxTopSnapshot.swift
648 Packages/CmuxRemoteSession/Sources/CmuxRemoteSession/Session/RemoteSessionCoordinator.swift
640 cmuxTests/CommandPaletteNucleoFFITests.swift
641 cmuxTests/CommandPaletteNucleoFFITests.swift
630 Packages/CmuxSettings/Sources/CmuxSettings/Values/ShortcutWhenClause.swift
621 cmuxTests/FinderFileDropRegressionTests.swift
621 cmuxUITests/RightSidebarChromeHeightUITests.swift
Expand All @@ -150,6 +151,7 @@
614 cmuxTests/SessionIndexViewTests.swift
611 Sources/TerminalController+ControlPaneContext.swift
608 Packages/CmuxWorkspaces/Sources/CmuxWorkspaces/Coordinators/WorkspaceGroupCoordinator.swift
604 Packages/CmuxCommandPalette/Tests/CmuxCommandPaletteTests/CommandPaletteNucleoFFITests.swift
603 Sources/SettingsNavigation.swift
599 Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift
596 cmuxTests/CmuxEventBusTests.swift
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,11 @@ jobs:
- name: Run Swift package unit tests
run: |
set -euo pipefail
# CmuxCommandPalette's nucleo FFI tests load the Rust dylib through
# CMUX_NUCLEO_FFI_LIB (they skip when it is absent, so build it here
# to keep the FFI parity suite a real gate).
cargo build --manifest-path Native/CommandPaletteNucleoFFI/Cargo.toml --release
export CMUX_NUCLEO_FFI_LIB="$PWD/Native/CommandPaletteNucleoFFI/target/release/libcmux_command_palette_nucleo_ffi.dylib"
# The cmux-unit scheme only runs the cmuxTests app-host suite; it does
# not execute the SPM package test targets. Run them here so package
# tests (settings stores, secret-file migration, socket-control
Expand All @@ -467,6 +472,7 @@ jobs:
CmuxRemoteWorkspace
CmuxRemoteSession
CmuxAuthRuntime
CmuxCommandPalette
CmuxControlSocket
CmuxFileWatch
CmuxFoundation
Expand Down
35 changes: 35 additions & 0 deletions Packages/CmuxAppKitSupportUI/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// swift-tools-version: 6.0

import PackageDescription

let package = Package(
name: "CmuxAppKitSupportUI",
platforms: [
.macOS(.v14),
],
products: [
.library(
name: "CmuxAppKitSupportUI",
targets: ["CmuxAppKitSupportUI"]
),
],
targets: [
.target(
name: "CmuxAppKitSupportUI",
swiftSettings: [
.swiftLanguageMode(.v6),
.enableUpcomingFeature("ExistentialAny"),
.enableUpcomingFeature("InternalImportsByDefault"),
]
),
.testTarget(
name: "CmuxAppKitSupportUITests",
dependencies: ["CmuxAppKitSupportUI"],
swiftSettings: [
.swiftLanguageMode(.v6),
.enableUpcomingFeature("ExistentialAny"),
.enableUpcomingFeature("InternalImportsByDefault"),
]
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import AppKit
public import SwiftUI

/// A transparent overlay that intercepts only middle-mouse clicks, letting left-click
/// selection and right-click context menus hit-test through to the underlying view tree.
public struct MiddleClickCapture: NSViewRepresentable {
public let onMiddleClick: () -> Void

/// Creates a middle-click capture overlay.
/// - Parameter onMiddleClick: Invoked when a middle (button 2) click lands on the overlay.
public init(onMiddleClick: @escaping () -> Void) {
self.onMiddleClick = onMiddleClick
}

public func makeNSView(context: Context) -> MiddleClickCaptureView {
let view = MiddleClickCaptureView()
view.onMiddleClick = onMiddleClick
return view
}

public func updateNSView(_ nsView: MiddleClickCaptureView, context: Context) {
nsView.onMiddleClick = onMiddleClick
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
public import AppKit

/// Backing `NSView` for ``MiddleClickCapture`` that hit-tests only middle-clicks.
public final class MiddleClickCaptureView: NSView {
/// Invoked when a middle (button 2) mouse-down lands on this view.
public var onMiddleClick: (() -> Void)?

public override func hitTest(_ point: NSPoint) -> NSView? {
// Only intercept middle-click so left-click selection and right-click context menus
// continue to hit-test through to SwiftUI/AppKit normally.
guard let event = NSApp.currentEvent,
event.type == .otherMouseDown,
event.buttonNumber == 2 else {
return nil
}
return self
}

public override func otherMouseDown(with event: NSEvent) {
guard event.buttonNumber == 2 else {
super.otherMouseDown(with: event)
return
}
onMiddleClick?()
}
}
Loading
Loading