Connect to ssh_config hosts, and a logo you can actually see - #11
Merged
Conversation
The server picker offers saved connections *and* hosts read from ~/.ssh/config, which are deliberately never persisted. But every remote operation resolved its id with db.findConnection(), which only ever sees saved rows — so selecting an ssh_config host threw "That connection no longer exists." and the pane rendered "Could not read this directory". On a machine with no saved connections that was every server in the list, which is exactly what it looked like from the outside: the remote pane simply did not work. Both lookups now go through resolveConnection(), which falls back to the ssh_config list for an `ssh-config:` id. Saved rows still win, so importing a host and then editing it is not undone by the file it came from. Fixes browsing, mkdir, rename, delete, test and transfers alike. Verified end to end against a real ssh_config host: `ssh-config:dev` resolves and lists its home directory over the same SFTP path the pane uses. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTQ3RzTAey9nT6r1kbGBCd
The desktop lockup was 22px tall, about 66px wide — small enough to read as a favicon rather than a brand. It is now 150px wide, and the header grows from 52px to 72px so the 3:1 lockup sits in it with room above and below rather than touching the border. The site's was 240px (w-60); it comes down to the same 150px so the two surfaces match. Verified in a headless render of the real export, under the app's real CSP, in both themes: header 72px, logo 150x50, 11px clear top and bottom, no CSP refusals. The site's build emits width:150px. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTQ3RzTAey9nT6r1kbGBCd
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.
The remote pane never worked
Reported as: the app opens, but the right pane won't connect to any server — "could not read this directory", "that connection no longer exists".
The server picker offers two kinds of host: saved connections, and hosts read from
~/.ssh/config. The latter are deliberately never persisted (sshConfigConnections()mints them with anssh-config:<alias>id). But every remote operation resolved that id withdb.findConnection(), which only ever sees saved rows — so selecting an ssh_config host threwThat connection no longer exists.and the pane fell back to "Could not read this directory".On a machine with no saved connections, that is every server in the list, which is exactly what it looked like from the outside.
Six call sites were affected:
fs:listRemote,fs:mkdirRemote,fs:renameRemote,fs:deleteRemote,connections:test, and transfers (endpoint resolution, shell options, and the source connection'srsyncPath).The fix
A single
resolveConnection()inelectron/main/services/connections.ts: database first, falling back to the ssh_config list for anssh-config:id. Saved rows still win, so importing a host and then editing it is not undone by the file it came from.Verified end to end against a real ssh_config host, over the same
SshSession→SftpBrowserpath the pane uses:ssh-config:devresolves and lists 219 entries. Five new unit tests cover ssh_config-only resolution, saved-row precedence, saved ids, a deleted id, and a host that has since left the file.Logo at 150px
The desktop lockup was 22px tall (~66px wide). It is now 150px wide, with the header growing 52px → 72px so the 3:1 lockup has room above and below. The site's came down from 240px to the same 150px so the two surfaces match.
Verified in a headless render of the real export under the app's real CSP, both themes: header 72px, logo 150×50, 11px clear top and bottom, no CSP refusals.
Checks
pnpm test— 271 passed, 26 filespnpm typecheck— clean across every package and apppnpm build:rendererand the webnext buildboth succeed🤖 Generated with Claude Code
https://claude.ai/code/session_01GTQ3RzTAey9nT6r1kbGBCd