Add browser-owned SSH keys and faster warm starts - #13
Merged
Conversation
## Why SSH profiles currently retain targets but authentication still depends on passwords or host-side keys. Moving a browser private key through Python would expand credential exposure, while reconnect backoff also leaves no explicit immediate retry control. ## What changed - Keep non-extractable Ed25519 keys in browser IndexedDB and return only bounded, SID-scoped SSH challenge signatures. - Gate key use to exact saved profiles on loopback or authorized HTTPS, preserving password and host-key fallbacks when Use key is off. - Export and merge browser-owned settings through a versioned Base64 ZIP envelope while excluding keys, credentials, identity, and runtime state. - Add Retry Now to the existing Socket.IO reconnect manager without resending terminal credentials. ## Testing Covered backend payload policy, signature verification, stale signer and background-start rejection, browser key lifecycle, OpenSSH public-key formatting, settings merge and exclusion rules, immediate reconnect, and the existing backend and browser regression suites.
## Why Warm launcher starts import every optional runtime dependency before consulting an install stamp that already records the platform, Python version, and requirements hash. On mounted or network filesystems those imports add several seconds even when the environment is unchanged. ## What changed - Skip dependency imports when the existing install stamp matches the current runtime and requirements. - Preserve install and verification when --force is used or the stamp is missing or stale. - Keep manual recovery through --force or removing the .installed stamp when an environment is modified outside the launcher. ## Testing Covered shell syntax, the current dependency checker, stamp and force branches by inspection, and Windows batch control-flow parity.
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.
Why
SSH profiles retain connection targets, but authentication still depends on passwords or host-side keys. Sending a browser private key through Python would expand credential exposure. Separately, launcher warm starts import all optional dependencies before consulting a valid install stamp, and disconnected pages have no explicit immediate retry control.
What changed
Testing
Covered backend key policy, signature verification, stale signer and background-start rejection, browser key lifecycle, OpenSSH public-key formatting, settings merge and exclusions, reconnect recovery, shell syntax, dependency verification, and the complete backend and browser regression suites.