diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts index 497929a4..d14b0d7a 100644 --- a/packages/vscode-ide-companion/src/ide-server.ts +++ b/packages/vscode-ide-companion/src/ide-server.ts @@ -75,7 +75,22 @@ export class IDEServer { transports[newSessionId] = transport; }, }); + + const keepAlive = setInterval(() => { + try { + transport.send({ jsonrpc: '2.0', method: 'ping' }); + } catch (e) { + // If sending a ping fails, the connection is likely broken. + // Log the error and clear the interval to prevent further attempts. + this.logger.append( + 'Failed to send keep-alive ping, cleaning up interval.' + e, + ); + clearInterval(keepAlive); + } + }, 60000); // Send ping every 60 seconds + transport.onclose = () => { + clearInterval(keepAlive); if (transport.sessionId) { this.logger.appendLine(`Session closed: ${transport.sessionId}`); sessionsWithInitialNotification.delete(transport.sessionId);