feat: pair, discover, and manage display recovery from the manager - #11
Merged
Conversation
… causes A daemon started from a binary that is later rebuilt sees its own executable as deleted, so every supervisor launch failed with the bare message "launch supervisor". The path is now resolved once at startup, and worker errors keep their cause chain in the session record.
Setup - Discover computers through Tailscale peers and Sunshine's mDNS announcements, merged by name, with platform, reachability, and whether Moonlight already paired them. Both tools are optional. - Pair a host from the app with a PIN. Pairing runs Moonlight's own `moonlight pair` so certificates and the client identity stay in Moonlight; the result is read back from its configuration. Refused while the Moonlight window is open. - Managed display recovery per platform: on macOS follow the main display or manage a chosen display with BetterDisplay, reading displays and modes over SSH; on Windows use the console helper with an SSH alias, host inspection, capture display choice, and helper installation from the app. The check step also proves SSH and the chosen display, read-only. Backend - `settings discover`, `settings pair`, `settings inspect`, and `settings install-helper` in the Rust CLI, backed by a new Python setup module, a read-only macOS display listing, and Windows inspection that reuses the shipped display enumerator over SSH. - SSH user, control socket, and alias plus the default profile's display block are editable through settings get/save; other fields stay untouched. Manager - Discovery picker, pairing page, and display recovery section in setup. - Add to or Remove from app launcher, reflecting the desktop entry's presence. Tests and docs cover the new operations with fake tools on PATH.
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
Adds in-app pairing, computer discovery, and managed display recovery setup, plus launcher removal.
Discovery and pairing
tailscale status --json) and on the LAN (avahi-browse _nvstream._tcp), merged by name, with platform, online state, and paired state.moonlight pair HOST --pin PIN. Certificates and the client identity stay in Moonlight; the app reads the new host back from Moonlight's configuration. Refused while the Moonlight GUI is open.Managed display recovery
Backend
settings discover,pair,inspect, andinstall-helpercommands; a Pythonsetupmodule; a read-onlylistoperation in the macOS adapter; Windowsinspectandinstallfunctions.Manager
Verification
python3 scripts/check.py,cargo fmt --check,cargo clippy --all-targets --locked -- -D warnings,cargo test --locked,cargo build --lockedpython3 -m unittest discover -s tests -v(36 tests, including the newtest_setup.pywith faketailscale,avahi-browse,moonlight, andpgrep)python3 tests/integration.py -v(26 tests, including discover, pair, inspect through a fakessh, and editable recovery fields)ctest --test-dir build/ui(26 suites, including the demo pairing, inspection, helper install, and launcher removal flows, and smoke renders of the new pages)