Merge remote-tracking branch 'upstream/main' into fix/collab-web-liveness-state

This commit is contained in:
robomp-bot
2026-07-30 08:06:32 +09:00
193 changed files with 11506 additions and 1109 deletions
+1
View File
@@ -5,6 +5,7 @@
### Fixed
- Fixed the guest rendering idle while the host agent is running (spinner vanishing mid-turn after a reconnect dropped `agent_start`): host `state` frames are now authoritative for liveness in both directions, and an idle report clears tool cards pinned by a dropped `tool_execution_end` ([#6990](https://github.com/can1357/oh-my-pi/pull/6990) by [@metaphorics](https://github.com/metaphorics)).
- Fixed an issue where the agent would stop silently without a message by ensuring terminal auto-retry failures are properly surfaced as error notices.
## [17.1.0] - 2026-07-24
+3
View File
@@ -461,6 +461,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;
+11
View File
@@ -262,6 +262,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({