From b1d1a07b1cd3963958ef48028c1c283cb5517d47 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 5 Jul 2026 22:21:30 +0300 Subject: fix: retry pi state socket reports refs #1049 --- src/integration/assets/pi/herdr-agent-state.ts | 27 ++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'src/integration/assets/pi') diff --git a/src/integration/assets/pi/herdr-agent-state.ts b/src/integration/assets/pi/herdr-agent-state.ts index 44a56088..9048911f 100644 --- a/src/integration/assets/pi/herdr-agent-state.ts +++ b/src/integration/assets/pi/herdr-agent-state.ts @@ -16,30 +16,41 @@ function enabled() { return HERDR_ENV === "1" && !!socketPath && !!paneId; } -function sendRequest(request: unknown): Promise { +function sendRequestAttempt(request: unknown, timeoutMs: number): Promise { if (!enabled()) { - return Promise.resolve(); + return Promise.resolve(true); } return new Promise((resolve) => { let done = false; - const finish = () => { + let timeout: ReturnType | undefined; + const finish = (delivered: boolean) => { if (done) return; done = true; + if (timeout) { + clearTimeout(timeout); + } socket.destroy(); - resolve(); + resolve(delivered); }; const socket = createConnection(socketPath!); - socket.on("error", finish); + socket.on("error", () => finish(false)); socket.on("connect", () => socket.write(`${JSON.stringify(request)}\n`)); - socket.on("data", finish); - socket.on("end", finish); - const timeout = setTimeout(finish, 500); + socket.on("data", () => finish(true)); + socket.on("end", () => finish(false)); + timeout = setTimeout(() => finish(false), timeoutMs); timeout.unref?.(); }); } +async function sendRequest(request: unknown): Promise { + if (await sendRequestAttempt(request, 500)) { + return; + } + await sendRequestAttempt(request, 1500); +} + type AgentState = "working" | "blocked" | "idle"; type QueuedState = { -- cgit v1.2.3