@@ -57,6 +57,14 @@ export interface ISSHAgentHostConfig {
5757 readonly name : string ;
5858 /** SSH config host alias (e.g. "robfast2") for reconnection on restart. */
5959 readonly sshConfigHost ?: string ;
60+ /** Resolved ProxyJump value for this connect attempt. Never persisted. */
61+ readonly proxyJump ?: string ;
62+ /** Resolved ProxyCommand value for this connect attempt. Never persisted or logged. */
63+ readonly proxyCommand ?: string ;
64+ /** Whether the resolved SSH config requests ProxyUseFdpass. */
65+ readonly proxyUseFdpass ?: boolean ;
66+ /** Resolved HostKeyAlias used by OpenSSH's `%k` proxy token. */
67+ readonly hostKeyAlias ?: string ;
6068 /** Dev override: custom command to start the remote agent host instead of the default CLI. */
6169 readonly remoteAgentHostCommand ?: string ;
6270 /** When true, enables OpenSSH agent forwarding (auth-agent@openssh.com) for this connection. Requires {@link authMethod} to be Agent. */
@@ -114,11 +122,10 @@ export function computeSSHConnectionKey(config: { sshConfigHost?: string; userna
114122}
115123
116124/**
117- * A sanitized view of the SSH config that omits secret material
118- * (password, private key path). Exposed on active connections so
119- * consumers can inspect connection metadata without accessing credentials.
125+ * A sanitized view of the SSH config that omits credentials and the raw
126+ * ProxyCommand. Exposed on active connections for non-sensitive metadata.
120127 */
121- export type ISSHAgentHostConfigSanitized = Omit < ISSHAgentHostConfig , 'password' | 'privateKeyPath' > ;
128+ export type ISSHAgentHostConfigSanitized = Omit < ISSHAgentHostConfig , 'password' | 'privateKeyPath' | 'proxyCommand' > ;
122129
123130export interface ISSHAgentHostConnection extends IDisposable {
124131 /** The SSH config used to establish this connection (secrets stripped). */
@@ -276,6 +283,14 @@ export interface ISSHResolvedConfig {
276283 readonly identityFile : string [ ] ;
277284 readonly identityAgent : string | undefined ;
278285 readonly forwardAgent : boolean ;
286+ /** Effective ProxyJump value. */
287+ readonly proxyJump ?: string ;
288+ /** Effective ProxyCommand value. Sensitive; never persist or log it. */
289+ readonly proxyCommand ?: string ;
290+ /** Effective ProxyUseFdpass value. */
291+ readonly proxyUseFdpass : boolean ;
292+ /** Effective HostKeyAlias value, including the explicit literal `none`. */
293+ readonly hostKeyAlias ?: string ;
279294 /**
280295 * `UserKnownHostsFile` paths, in priority order. `ssh -G` emits these as a
281296 * single space-separated list, so this is already split. Typically
@@ -322,6 +337,21 @@ export interface ISSHKeyboardInteractiveRequest {
322337 readonly prompts : readonly ISSHKeyboardInteractivePrompt [ ] ;
323338}
324339
340+ export type SSHNativeAskpassPromptKind = 'confirm' | 'password' | 'passphrase' | 'secret' ;
341+
342+ /**
343+ * Prompt raised by a native OpenSSH ProxyCommand/ProxyJump helper through
344+ * `SSH_ASKPASS`. The raw prompt is transient and must never be persisted or
345+ * logged because implementations may include sensitive command context.
346+ */
347+ export interface ISSHNativeAskpassRequest {
348+ readonly requestId : string ;
349+ readonly connectionKey : string ;
350+ readonly displayHost : string ;
351+ readonly prompt : string ;
352+ readonly kind : SSHNativeAskpassPromptKind ;
353+ }
354+
325355/**
326356 * One live remote agent host endpoint the user could connect to, as
327357 * surfaced by `code agent endpoints` on the remote machine. Deliberately
@@ -504,6 +534,18 @@ export interface ISSHRemoteAgentHostMainService {
504534 */
505535 respondKeyboardInteractive ( requestId : string , responses : readonly string [ ] | undefined ) : Promise < void > ;
506536
537+ /** Fires when a native OpenSSH proxy helper needs confirmation or a secret. */
538+ readonly onDidRequestNativeAskpass : Event < ISSHNativeAskpassRequest > ;
539+
540+ /** Dismisses renderer UI when the owning native proxy helper no longer needs a prompt. */
541+ readonly onDidCancelNativeAskpass : Event < string /* requestId */ > ;
542+
543+ /**
544+ * Answer a native OpenSSH proxy-helper prompt. Pass `undefined` to cancel
545+ * the owning connection attempt.
546+ */
547+ respondNativeAskpass ( requestId : string , response : string | undefined ) : Promise < void > ;
548+
507549 /**
508550 * Fires when connect() discovers at least one live `editor`-owned
509551 * endpoint on the remote and needs the renderer to choose which
0 commit comments