Preserve daemon sessions when workers stall (#3263)

Stop treating heartbeat silence as proof that a live daemon worker should be destroyed. Crash recovery, explicit lifecycle requests, and supervisor-loss cleanup remain unchanged.
This commit is contained in:
Mohamed Boudra
2026-08-12 10:58:58 +02:00
committed by GitHub
parent d012b6f071
commit 74f2158c45
6 changed files with 20 additions and 225 deletions
@@ -27,10 +27,6 @@ interface SupervisorHeartbeatMessage {
type: "paseo:supervisor-heartbeat";
}
interface WorkerHeartbeatMessage {
type: "paseo:worker-heartbeat";
}
interface BootstrapResult {
paseoHome: string;
logger: ReturnType<typeof createRootLogger>;
@@ -232,13 +228,6 @@ async function main() {
const supervisorPid = process.ppid;
let lastSupervisorHeartbeatAt = Date.now();
let supervisorExitRequested = false;
const sendWorkerHeartbeat = () => {
try {
process.send?.({ type: "paseo:worker-heartbeat" } satisfies WorkerHeartbeatMessage);
} catch {
// The disconnect handler below owns supervisor-loss shutdown.
}
};
const exitAfterSupervisorLoss = (reason: string) => {
if (supervisorExitRequested) {
return;
@@ -272,10 +261,6 @@ async function main() {
});
process.on("disconnect", () => exitAfterSupervisorLoss("ipc_disconnect_event"));
sendWorkerHeartbeat();
const workerHeartbeat = setInterval(sendWorkerHeartbeat, 1_000);
workerHeartbeat.unref();
const timer = setInterval(() => {
const ipcConnected = typeof process.connected === "boolean" ? process.connected : true;
const heartbeatExpired = Date.now() - lastSupervisorHeartbeatAt > 3500;