feat: stabilize SFTP and add secure SSH terminal integration - #2694
feat: stabilize SFTP and add secure SSH terminal integration#2694bajrangCoder wants to merge 7 commits into
Conversation
Greptile SummaryThis PR replaces credential-bearing SFTP URLs with encrypted native profiles, strengthens SFTP connection and cleanup handling, and adds profile-backed interactive SSH terminals.
Confidence Score: 5/5The PR appears safe to merge because no eligible blocking failure remains. No blocking failure remains. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Legacy SFTP URLs in localStorage] --> B[migrateLegacySftpProfiles]
B --> C[Native encrypted profile store]
C --> D[Opaque sftp://profile-id/path URLs]
D --> E[SFTP filesystem client]
D --> F[SSH terminal creation]
E --> G[Maverick SFTP session]
F --> H[Maverick interactive shell]
I[Remove saved storage] --> J[Close matching SFTP connection]
J --> K[Delete unreferenced native profile]
Reviews (3): Last reviewed commit: "refactor(sftp): use themed secure profil..." | Re-trigger Greptile |
This comment has been minimized.
This comment has been minimized.
|
Preview Release for this, has been built. |
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
Tested with Ed25519 private key authSSH Terminal works completely fine on my device, find the screenshots below. Tho I cannot keep the Termux Home directory via SFTP open for too long without Error. Acode Crash ReportWebView Version: 150.0.7871.181 Stack Trace: |


Summary
This PR improves the reliability and security of Acode's SFTP integration and adds interactive SSH terminal support using the existing Maverick Synergy SSH library.
It addresses the SFTP lifecycle, cleanup, and path issues reported in:
SFTP reliability improvements
SSH terminal integration
SessionChannelNG.xterm-256colorPTY and start an interactive remote shell.Secure SFTP profiles
Previously, SFTP URLs could contain usernames, passwords, key-file paths, and passphrases.
This PR replaces persisted connection URLs with opaque identifiers:
The corresponding connection profile is stored natively and encrypted using:
Encrypted profiles contain the server details and authentication material. Profile reads exposed to JavaScript return metadata only and never return passwords, passphrases, or private-key contents.
Private-key files selected for new profiles are read by the native plugin and stored inside the encrypted profile instead of being copied into an SFTP URL.
Migration
On startup, legacy SFTP URLs are migrated across:
Migration behavior is intentionally conservative: