CLI improvements: status/json/wait, config flags, agent installer, CI - #8
Merged
Conversation
Implements the device-matching fix and feature set tracked in #1–#7: - Match devices by identifier() (an NSUUID) instead of display name, fixing list dedup and matching for same-named devices. (#1) - Add --wait <seconds> to poll for device discovery before acting, making the login auto-connect path reliable. (#2) - Add `status [name]` command: exit 0 if connected, 3 if not; --json supported. (#3) - Add --json output for `list` (name, identifier, connected). (#4) - Add `make install-agent` / `uninstall-agent` and a correct plist template in dist/ (fixes the old filename typo); replaces the manual launchctl steps. (#5) - Add `version`/--version, --quiet, and a macOS CI build/smoke-test workflow. (#6) - Add --no-sidebar / --no-touchbar via connectToDevice:withConfig:; the live SidecarCore API exposes sidebar/touchbar config rather than a mirror/extend toggle (that's a CGDisplay concern). (#7) Co-Authored-By: Claude Opus 4.8 <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.
Implements the seven improvement issues opened for this project. Built and smoke-tested against the live
SidecarCoreframework on macOS 26 (read-only commands verified against a real connected iPad;connect/disconnectnot exercised to avoid dropping the live Sidecar session).What's in here
identifier(), not name —SidecarDevice.identifier()returns anNSUUID; declaring it asString?crashed with-[__NSConcreteUUID length]. Now read as an object and rendered as a UUID string, used as the identity key forlistdedup andstatus. Closes Match devices by identifier(), not display name #1.--wait <seconds>— pollsdevices()until the target appears before acting, fixing the login auto-connect race. Closes Add --wait flag to poll for device discovery before giving up #2.status [name]— exit 0 if connected, 3 if not; human +--json. Closes Add status command with meaningful exit codes #3.--jsonforlist(name, identifier, connected). Closes Add --json output for list (and status) #4.make install-agent/uninstall-agent+ correct plist template indist/(old repo file had asidercarfilename typo and was never installed). Bakes the real install path in, loads vialaunchctl bootstrap, runsconnect iPad --wait 60 --quietat login. Closes Add make install-agent / uninstall-agent with a correct LaunchAgent plist #5.version/--version,--quiet, and macOS CI that builds + smoke-tests. Closes Polish: --version, --quiet, suppress NSForwarding stderr noise, CI build check #6.--no-sidebar/--no-touchbarviaconnectToDevice:withConfig:. The live API exposes sidebar/Touch Bar config, not a mirror/extend boolean (that's a CGDisplay concern) — scope adjusted accordingly and documented. Closes Expose mirror vs extend / display arrangement options #7.Testing
Plist validated with
plutil -lint;make install-agentdry-run (make -n) confirmed correct path substitution. README updated.🤖 Generated with Claude Code