diff --git a/packages/agent/CHANGELOG.md b/packages/agent/CHANGELOG.md new file mode 100644 index 00000000..7b2bc077 --- /dev/null +++ b/packages/agent/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +## [0.7.6] - Unreleased + +### Fixed + +- Fixed error message loss when `turn_end` event contains an error. Previously, errors in `turn_end` events (e.g., "Provider returned error" from OpenRouter Auto Router) were not captured in `agent.state.error`, making it appear as if the agent completed successfully. ([#6](https://github.com/badlogic/pi-mono/issues/6)) + +## [0.7.5] - 2025-11-13 + +Previous releases did not maintain a changelog. diff --git a/packages/agent/src/agent.ts b/packages/agent/src/agent.ts index cb1f7ddc..27061fde 100644 --- a/packages/agent/src/agent.ts +++ b/packages/agent/src/agent.ts @@ -238,6 +238,13 @@ export class Agent { this._state.pendingToolCalls = s; break; } + case "turn_end": { + // Capture error from turn_end event + if (ev.message.role === "assistant" && ev.message.errorMessage) { + this._state.error = ev.message.errorMessage; + } + break; + } case "agent_end": { this._state.streamMessage = null; break; diff --git a/packages/agent/test/e2e.test.ts b/packages/agent/test/e2e.test.ts index 1087e7bd..a521d042 100644 --- a/packages/agent/test/e2e.test.ts +++ b/packages/agent/test/e2e.test.ts @@ -144,6 +144,8 @@ async function abortExecution(model: Model) { if (lastMessage.role !== "assistant") throw new Error("Expected assistant message"); expect(lastMessage.stopReason).toBe("aborted"); expect(lastMessage.errorMessage).toBeDefined(); + expect(agent.state.error).toBeDefined(); + expect(agent.state.error).toBe(lastMessage.errorMessage); } async function stateUpdates(model: Model) {