Skip to content

feat(remote-ssh): complete multi-hop and container workspaces#1742

Merged
bobleer merged 3 commits into
GCWing:mainfrom
bobleer:bob/complete-remote-workspaces
Jul 24, 2026
Merged

feat(remote-ssh): complete multi-hop and container workspaces#1742
bobleer merged 3 commits into
GCWing:mainfrom
bobleer:bob/complete-remote-workspaces

Conversation

@bobleer

@bobleer bobleer commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Closes #1725.

  • introduce a transport-neutral workspace stdio abstraction shared by SSH and Docker-backed workspaces, including stdin/stdout/stderr, completion, interruption, cancellation, ACP, terminal, command, agent, and search paths
  • complete arbitrary ProxyJump chains, per-hop SSH config identities, ssh-agent/certificate/keyboard-interactive authentication, bounded retries/timeouts, and staged connection diagnostics
  • support local and remote Docker container discovery, Auto sshd probing with Docker Exec fallback, TTY/non-TTY execution, and binary-safe atomic file transfers with cancellation
  • add one unified connection entry point in the UI, container selection, all authentication modes, effective-access reporting, and localized staged test results
  • preserve existing saved connections, workspaces, legacy agent profiles, password-vault behavior, and reconnect semantics across upgrades
  • harden macOS/Windows/Linux client behavior: preserve split UTF-8 across independent stdout/stderr streams, keep remote paths POSIX, reject unsafe local filename mappings and symlink traversal, and signal Docker process groups inside the container before closing the Docker CLI
  • document the architecture, capability matrix, compatibility guarantees, and security boundary

Compatibility

Existing serialized connection/workspace records remain loadable through serde defaults and legacy auth deserialization. Startup does not prune an existing workspace when its connection needs credentials or is temporarily unavailable. Auto is re-probed on reconnect, while the original saved configuration is retained.

Normal existing mirror/session path mappings are unchanged. Safe legacy dot-segment paths keep resolving to their previous effective mirror directories, while paths that would escape the mirror root are contained. Previously unsafe or unrepresentable recursive-transfer entries now fail explicitly instead of being silently skipped, overwritten, followed outside the selected tree, or mapped through host-specific path semantics.

Legacy local-Docker profiles with an empty password placeholder continue to load and connect without a password-vault entry. Docker process supervision also degrades to the previous transport-level cancellation behavior when a read-only container filesystem cannot create its optional PID tracking file, so supervision does not become a new runtime prerequisite after upgrade.

Verification

  • cargo check --workspace
  • cargo check -p bitfun-desktop
  • cargo test -p bitfun-services-integrations --features remote-ssh,remote-ssh-concrete,workspace-search remote_ssh
  • cargo test -p bitfun-services-integrations --features remote-ssh-concrete remote_ssh --lib
  • cargo test -p bitfun-services-integrations --features remote-ssh,remote-ssh-concrete,workspace-search --test remote_ssh_contracts
  • cargo test -p bitfun-services-integrations --features remote-ssh-concrete --test remote_ssh_contracts
  • cargo test -p bitfun-services-integrations --features remote-ssh --test remote_ssh_disabled_contracts
  • cargo test -p bitfun-desktop remote_workspace_policy --lib
  • cargo test -p bitfun-desktop api::ssh_api::tests --lib
  • real Docker round-trip integration (binary files, stdio/stderr/exit, cancellation preserving the prior destination)
  • node --test scripts/check-core-boundaries.test.mjs
  • pnpm run type-check:web
  • pnpm run lint:web
  • pnpm --dir src/web-ui run test:run src/features/ssh-remote/SSHRemoteProvider.test.tsx src/features/ssh-remote/remoteWorkspaceReconnect.test.ts
  • pnpm run i18n:audit
  • pnpm run theme:color-audit:all
  • pnpm run check:repo-hygiene
  • pnpm run check:github-config

@bobleer
bobleer force-pushed the bob/complete-remote-workspaces branch from 3c99050 to 9419cf8 Compare July 24, 2026 09:43
@bobleer
bobleer merged commit 0923b59 into GCWing:main Jul 24, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 远程连接支持跳板机(多跳)与 Docker 容器工作区(sshd 或 docker exec)

1 participant