import { fauxAssistantMessage } from "@mariozechner/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; import { createHarness, getAssistantTexts, type Harness } from "../harness.js"; describe("issue #3317 network connection lost retry", () => { const harnesses: Harness[] = []; afterEach(() => { while (harnesses.length > 0) { harnesses.pop()?.cleanup(); } }); it('retries transient "Network connection lost." failures', async () => { const harness = await createHarness({ settings: { retry: { enabled: true, maxRetries: 3, baseDelayMs: 1 } }, }); harnesses.push(harness); harness.setResponses([ fauxAssistantMessage("", { stopReason: "error", errorMessage: "Network connection lost." }), fauxAssistantMessage("recovered after reconnect"), ]); await harness.session.prompt("test"); expect(harness.faux.state.callCount).toBe(2); expect(harness.eventsOfType("auto_retry_start").map((event) => event.errorMessage)).toEqual([ "Network connection lost.", ]); expect(harness.eventsOfType("auto_retry_end").map((event) => event.success)).toEqual([true]); expect(getAssistantTexts(harness)).toContain("recovered after reconnect"); }); });