Add auto-reconnect with exponential backoff

Sessions configured with auto-reconnect will automatically attempt to
re-establish the connection when unexpectedly disconnected. Uses
exponential backoff (1s, 2s, 4s, 8s... up to 30s) with a configurable
maximum number of attempts (default 5).

- New SessionReconnecting state with pulsing indicator in tab bar
- SSH and Telnet profiles gain autoReconnect and maxReconnectTries fields
- RAW protocol already had autoReconnect; now uses the shared mechanism
- CancelReconnect API to abort in-progress reconnection
- Frontend shows reconnect attempt notifications
- Profile editor exposes toggle and max attempts in Advanced/Reconnection
This commit is contained in:
2026-04-17 00:00:00 +01:00
parent f42662c44e
commit e56496d423
10 changed files with 314 additions and 16 deletions
+12 -1
View File
@@ -134,10 +134,21 @@ class App {
this.terminals.handleData(payload.sessionID, payload.data);
});
// Session state transitions (connecting → connected → disconnected)
// Session state transitions (connecting → connected → reconnecting → disconnected)
window.runtime.EventsOn('session:state', (payload) => {
this.tabs.updateSessionState(payload.sessionID, payload.state, payload.error);
this.updateStatusBar();
// Show reconnecting notification
if (payload.state === 'reconnecting') {
const attempt = payload.attempt || 1;
const maxRetries = payload.maxRetries || 5;
const delaySec = payload.delaySec || 1;
this.notifications.info(
`Reconnecting (attempt ${attempt}/${maxRetries}) in ${delaySec}s…`
);
}
// Once connected, ensure the backend PTY has the correct dimensions.
// The initial fit happens before the SSH handshake completes, so the
// onResize callback fires when the backend isn't ready. By the time