diff --git a/packages/collab-web/CHANGELOG.md b/packages/collab-web/CHANGELOG.md index cf07b4023..ff8daa692 100644 --- a/packages/collab-web/CHANGELOG.md +++ b/packages/collab-web/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed the agent appearing to stop silently with no message: terminal `auto_retry_end` failures now surface as an error notice instead of being discarded. + ## [17.1.0] - 2026-07-24 ### Fixed diff --git a/packages/collab-web/src/lib/client.ts b/packages/collab-web/src/lib/client.ts index 6de49294c..0c6fe414b 100644 --- a/packages/collab-web/src/lib/client.ts +++ b/packages/collab-web/src/lib/client.ts @@ -454,6 +454,9 @@ export class GuestClient { case "auto_retry_start": this.#pushNotice("info", `retry ${event.attempt}/${event.maxAttempts}: ${event.errorMessage}`); break; + case "auto_retry_end": + if (!event.success) this.#pushNotice("error", event.finalError ?? "retry failed"); + break; case "auto_compaction_start": this.#pushNotice("info", `compacting context (${event.reason})`); break; diff --git a/packages/collab-web/test/client.test.ts b/packages/collab-web/test/client.test.ts index 11f8ada91..d979910a4 100644 --- a/packages/collab-web/test/client.test.ts +++ b/packages/collab-web/test/client.test.ts @@ -234,6 +234,17 @@ describe("GuestClient frame apply", () => { expect(notices[0]).toMatchObject({ level: "error", message: "boom" }); }); + it("auto_retry_end failure surfaces an error notice", () => { + const client = liveClient(); + client.applyFrameForTest({ + t: "event", + event: { type: "auto_retry_end", success: false, attempt: 3, finalError: "x" }, + }); + const notices = client.getSnapshot().notices; + expect(notices).toHaveLength(1); + expect(notices[0]).toMatchObject({ level: "error", message: "x" }); + }); + it("a pre-welcome error (hello rejection, e.g. protocol mismatch) ends the session with the host's reason", () => { const client = new GuestClient(LINK, "tester"); client.applyFrameForTest({