aboutsummaryrefslogtreecommitdiff
path: root/src/integration/assets/pi
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-07-05 22:21:30 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-07-05 22:21:30 +0300
commitb1d1a07b1cd3963958ef48028c1c283cb5517d47 (patch)
tree3af2e11d701c2c7139973ae52a63866eab6aa927 /src/integration/assets/pi
parent220b99a9fabf10fad83a570f641ad39737d85875 (diff)
fix: retry pi state socket reports
refs #1049
Diffstat (limited to 'src/integration/assets/pi')
-rw-r--r--src/integration/assets/pi/herdr-agent-state.ts27
1 files changed, 19 insertions, 8 deletions
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<void> {
+function sendRequestAttempt(request: unknown, timeoutMs: number): Promise<boolean> {
if (!enabled()) {
- return Promise.resolve();
+ return Promise.resolve(true);
}
return new Promise((resolve) => {
let done = false;
- const finish = () => {
+ let timeout: ReturnType<typeof setTimeout> | 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<void> {
+ if (await sendRequestAttempt(request, 500)) {
+ return;
+ }
+ await sendRequestAttempt(request, 1500);
+}
+
type AgentState = "working" | "blocked" | "idle";
type QueuedState = {