784
throw relayErr;
785
}
787
>
// Resolve the CLI now (we skipped it on the reuse path).
788
const relayErrorMessage = relayErr instanceof Error ? relayErr.message : String(relayErr);
789
this._logService.warn(`${LOG_PREFIX} Failed to connect to reused agent host on ${remoteHost}:${remotePort}: ${relayErrorMessage}. Starting fresh`);
790
await cleanupRemoteAgentHost(exec, this._logService, this._serverDataFolderName, this._quality);
792
>
793
>
reportProgress(localize('sshProgressStartingAgent', "Starting remote agent host..."));
794
>
const result = await this._startRemoteAgentHost(sshClient, cliBin, getRemoteCLIDataDir(this._serverDataFolderName), config.remoteAgentHostCommand);
795
>
remoteHost = '127.0.0.1';
796
>
remotePort = result.port;
797
>
connectionToken = result.connectionToken;
798
>
agentStream = result.stream;
799
>
await writeAgentHostState(exec, this._logService, this._serverDataFolderName, this._quality, result.pid, remotePort, connectionToken);
800
>
801
>
reportProgress(localize('sshProgressForwarding', "Connecting to remote agent host..."));
802
>
relay = await this._createWebSocketRelay(
803
>
sshClient, remoteHost, remotePort, connectionToken,
804
>
(data: string) => this._onDidRelayMessage.fire({ connectionId, data }),
805
>
() => { conn?.dispose(); },
806
>
);
807
>
}
808
809
// 7. Create connection object