native macOS codings agent orchestrator
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge remote-tracking branch 'upstream/main'

# Conflicts:
# supacode.xcodeproj/project.pbxproj

onevcat 06f21967 2364dcbc

+22 -13
-2
.github/actions/setup-macos/action.yml
··· 33 33 Resources/ghostty 34 34 Resources/terminfo 35 35 key: ${{ runner.os }}-${{ runner.arch }}-ghostty-${{ env.GHOSTTY_SHA }} 36 - restore-keys: | 37 - ${{ runner.os }}-${{ runner.arch }}-ghostty- 38 36 - name: Build ghostty 39 37 if: steps.ghostty_cache.outputs.cache-hit != 'true' 40 38 shell: bash
+4
supacode/App/supacodeApp.swift
··· 32 32 var appStore: StoreOf<AppFeature>? 33 33 34 34 func applicationDidFinishLaunching(_ notification: Notification) { 35 + // Disable press-and-hold accent menu so that key repeat works in the terminal. 36 + UserDefaults.standard.register(defaults: [ 37 + "ApplePressAndHoldEnabled": false, 38 + ]) 35 39 appStore?.send(.appLaunched) 36 40 } 37 41
+9 -4
supacode/Domain/OpenWorktreeAction.swift
··· 26 26 case terminal 27 27 case vscode 28 28 case vscodeInsiders 29 + case vscodium 29 30 case warp 30 31 case webstorm 31 32 case wezterm ··· 56 57 case .terminal: "Terminal" 57 58 case .vscode: "VS Code" 58 59 case .vscodeInsiders: "VS Code Insiders" 60 + case .vscodium: "VSCodium" 59 61 case .warp: "Warp" 60 62 case .wezterm: "WezTerm" 61 63 case .webstorm: "WebStorm" ··· 72 74 case .editor: "$EDITOR" 73 75 case .alacritty, .antigravity, .cursor, .fork, .githubDesktop, .gitkraken, .gitup, .ghostty, 74 76 .intellij, .kitty, .pycharm, .rustrover, .smartgit, .sourcetree, .sublimeMerge, .terminal, 75 - .vscode, .vscodeInsiders, .warp, .webstorm, .wezterm, .windsurf, .xcode, .zed: 77 + .vscode, .vscodeInsiders, .vscodium, .warp, .webstorm, .wezterm, .windsurf, .xcode, .zed: 76 78 title 77 79 } 78 80 } ··· 94 96 return true 95 97 case .alacritty, .antigravity, .cursor, .fork, .githubDesktop, .gitkraken, .gitup, .ghostty, 96 98 .intellij, .kitty, .pycharm, .rustrover, .smartgit, .sourcetree, .sublimeMerge, .terminal, 97 - .vscode, .vscodeInsiders, .warp, .webstorm, .wezterm, .windsurf, .xcode, .zed: 99 + .vscode, .vscodeInsiders, .vscodium, .warp, .webstorm, .wezterm, .windsurf, .xcode, .zed: 98 100 return NSWorkspace.shared.urlForApplication(withBundleIdentifier: bundleIdentifier) != nil 99 101 } 100 102 } ··· 121 123 case .terminal: "terminal" 122 124 case .vscode: "vscode" 123 125 case .vscodeInsiders: "vscode-insiders" 126 + case .vscodium: "vscodium" 124 127 case .warp: "warp" 125 128 case .webstorm: "webstorm" 126 129 case .wezterm: "wezterm" ··· 152 155 case .terminal: "com.apple.Terminal" 153 156 case .vscode: "com.microsoft.VSCode" 154 157 case .vscodeInsiders: "com.microsoft.VSCodeInsiders" 158 + case .vscodium: "com.vscodium" 155 159 case .warp: "dev.warp.Warp-Stable" 156 160 case .webstorm: "com.jetbrains.WebStorm" 157 161 case .wezterm: "com.github.wez.wezterm" ··· 169 173 .vscode, 170 174 .windsurf, 171 175 .vscodeInsiders, 176 + .vscodium, 172 177 .intellij, 173 178 .webstorm, 174 179 .pycharm, ··· 279 284 } 280 285 } 281 286 case .alacritty, .antigravity, .cursor, .fork, .githubDesktop, .gitkraken, .gitup, .ghostty, 282 - .kitty, .smartgit, .sourcetree, .sublimeMerge, .terminal, .vscode, .vscodeInsiders, .warp, 283 - .wezterm, .windsurf, .xcode, .zed: 287 + .kitty, .smartgit, .sourcetree, .sublimeMerge, .terminal, .vscode, .vscodeInsiders, .vscodium, 288 + .warp, .wezterm, .windsurf, .xcode, .zed: 284 289 guard 285 290 let appURL = NSWorkspace.shared.urlForApplication( 286 291 withBundleIdentifier: bundleIdentifier
+9 -7
supacode/Infrastructure/Ghostty/GhosttyRuntime.swift
··· 242 242 _ userdata: UnsafeMutableRawPointer?, 243 243 _ location: ghostty_clipboard_e, 244 244 _ state: UnsafeMutableRawPointer? 245 - ) { 245 + ) -> Bool { 246 246 let userdataBits = userdata.map { UInt(bitPattern: $0) } 247 247 let stateBits = state.map { UInt(bitPattern: $0) } 248 248 if Thread.isMainThread { 249 - MainActor.assumeIsolated { 249 + return MainActor.assumeIsolated { 250 250 readClipboard(userdataBits: userdataBits, location: location, stateBits: stateBits) 251 251 } 252 - return 253 252 } 254 - DispatchQueue.main.async { 253 + return DispatchQueue.main.sync { 255 254 MainActor.assumeIsolated { 256 255 readClipboard(userdataBits: userdataBits, location: location, stateBits: stateBits) 257 256 } ··· 417 416 userdataBits: UInt?, 418 417 location: ghostty_clipboard_e, 419 418 stateBits: UInt? 420 - ) { 419 + ) -> Bool { 421 420 let userdata = userdataBits.flatMap { UnsafeMutableRawPointer(bitPattern: $0) } 422 421 let state = stateBits.flatMap { UnsafeMutableRawPointer(bitPattern: $0) } 423 422 guard let bridge = surfaceBridge(fromUserdata: userdata), let surface = bridge.surface else { 424 - return 423 + return false 424 + } 425 + guard let value = NSPasteboard.ghostty(location)?.getOpinionatedStringContents() else { 426 + return false 425 427 } 426 - let value = NSPasteboard.ghostty(location)?.getOpinionatedStringContents() ?? "" 427 428 value.withCString { ptr in 428 429 ghostty_surface_complete_clipboard_request(surface, ptr, state, false) 429 430 } 431 + return true 430 432 } 431 433 432 434 private static func confirmReadClipboard(