fix(tui): route ssh:// peer attach through label + --session (#53)
The interactive picker's attach-remote path built `host.url + "/" +
session.name` and shelled to `pty-relay connect <that>`. For token URLs
(http/https) that works — pty-relay's parseToken picks the session name
out of the URL path. For ssh:// peers it collapses:
pty-relay connect ssh://user@host/session-name
pty-relay's `connect(tokenUrlOrLabel)` treats non-token URLs as
known-hosts labels, does `hosts.find(h => h.label === that-string)`,
misses, and exits 1 with "No known host". Even if resolveHost matched
by URL, the ssh branch takes the session name from `--session` /
`--spawn`, not from the URL path — the path segment is invisible to it.
Route around the seam by teaching the TUI to invoke pty-relay's
canonical ssh-peer shape:
pty-relay connect <host.label> --session <session.name>
Token URLs still get the existing path-append form (parseToken owns
that convention). Extracted `buildAttachRemoteArgs` so both branches are
unit-testable next to `buildSpawnRemoteArgs`.
A parallel fix in pty-relay (parse the session name from an ssh:// URL
path so `pty-relay connect ssh://user@host/name` also works) is in
flight as a mirror — the two together make the seam robust regardless
of which side the caller is on.