Repository navigation
Fix review findings: port forwards, refresh retry, snippets, host rename, pairing lockout and more - #82
Merged
Conversation
- Check SFTP aux sessions against the host key learned on a first connect - Rename the MCP "read_file" switch to what it does (list the host), off for new hosts - Don't follow linked folders when downloading or pasting folders - Renaming a host replaces it instead of copying; refuse names already taken - Send key passphrases as UTF-8 - Cap queued live plugin output at 4 MB; stop plugin commands after 1 hour - Let the terminal writer thread exit when idle instead of leaking per reconnect - Record which MCP client made each audited call - Rate-limit pairing attempts instead of locking the code after 5 wrong tries - Keep the Bitwarden unlock prompt alive across rotation - Remove partial files left by a failed or cancelled folder upload Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main had moved 111 commits on. It already fixed the SFTP host-key check, symlinked folders, UTF-8 passphrases, the live output cap and the audit client, and made the read_file switch real and removed UnlockActivity, so those changes are dropped in favour of main's code. Kept: host rename replaces instead of copying, 1-hour plugin command timeout, idle-exiting terminal writer thread, pairing rate limit instead of a 5-try lockout, and cleanup of partial files from a failed folder upload. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Owner port forwards no longer require the MCP token line, which the app never showed and ordinary clients can't send, so they work again - Pooled MCP sessions (and their forwards) close when the MCP server stops, a client is revoked, Claude is disconnected, or MCP read access is turned off - Forwards run on their own threads instead of the shared IO pool, MCP may keep at most 8 per connection, and closing one needs the same access as opening it - A refresh retry inside the grace window leaves only one live token pair; the other copy's next refresh is treated as theft - Upload resume also matches the source's modified time - "Trust new key" updates the latest saved record instead of a stale copy - Snippet values are escaped for the quotes they sit in - Renaming a host also renames it in scheduled jobs 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.
Fixes the findings from two reviews: one of an older snapshot (only the five findings main still had are kept) and one of main as of
f845e68.Port forwards
aaf770fevery forward required a token line that the Port forwards screen never showed and browsers or database clients can't send, so every connection was dropped. Forwards the owner opens no longer require it; MCP agents' forwards still do.ssh.close_forwardnow needs read access, the same as opening one.OAuth
POST /authorize. That allows about 100 guesses per code against 31^8 codes.Other fixes
'…'plain single-quoting left the value unquoted, and inside"…"it left$(…)live. Only exec-scoped agents can run snippets, so there was no privilege gain, but the tool's "quoted, not interpreted" promise was false.Behaviour changes
Testing
gradle testDebugUnitTest: 114 tests, no failures. New tests cover the refresh retry, snippet quoting inside single and double quotes and after an escaped quote, and wrong pairing guesses.gradle :app:assembleDebugsucceeds.🤖 Generated with Claude Code