Launchpad: consoles and logs in a Ghostty terminal - #499
Merged
Merged
Conversation
The machine inspector drew the guest console as one SwiftUI Text per line and updated it on the main actor for every line of serial output, which made Launchpad unresponsive while a guest printed. Consoles and the creation log now render in GhosttyTerminal (Lakr233/libghostty-spm) and are read from their log files: - The inspector's Console section is an Open Console button. It opens a sheet with the terminal filling it and a Close button. - The creation sheet's log is the same terminal over a new <name>-create.log, written on a serial queue by VPhoneLaunchpadLogWriter. - The view replays the file's last 4 MiB and follows it from a @Concurrent task. Ghostty parses on its own queue. - Command output callbacks run on the reader thread. The main actor hears only panic lines. - The terminal uses the project's light palette and a dark counterpart, chosen by the system appearance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
macOS 13 deprecated SMJobBless in favour of SMAppService, but it still works. The helper's install, update and client checks rely on it (SMPrivilegedExecutables and SMAuthorizedClients), so the helper keeps using it. The function is now looked up in ServiceManagement with dlopen and dlsym, in one documented place, instead of leaving a permanent warning in the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The machine inspector drew the guest console as one SwiftUI
Textper line and updated it on the main actor for every line of serial output. A chatty guest made Launchpad unresponsive.arrow.up.right). It opens a sheet where a Ghostty terminal fills the sheet, with a Close button. The actions menu has Open Console too.~/Library/Logs/vphone-launchpad/<name>-create.log, written on a serial queue byVPhoneLaunchpadLogWriter.@concurrenttask. Ghostty parses on its own queue. Command output callbacks run on the reader thread, and the main actor only hears about panic lines. No log text goes through the app model any more.window-padding-color = extend) and a dark counterpart with the same ANSI colours. The system appearance picks which one.Lakr233/libghostty-spm1.6.20260922 (GhosttyTerminal) to the Launchpad project, withPackage.resolvedpinned for the project and the workspace. The new strings are translated inLocalizable.xcstrings.Testing
VPhoneLaunchpadDebug build: succeeds, and none of the warnings come from our sources.VPHONE_LAUNCHPAD_SNAPSHOT_DIR) captures the console sheet and the creation log in light and dark.SMJobBlessresolves throughdlopenanddlsymon this host.🤖 Generated with Claude Code