Fix: Capture error from turn_end event in agent state

Previously, errors in turn_end events (e.g., from OpenRouter Auto Router)
were not captured in agent.state.error, making failed requests appear as
successful completions.

Fixes #6
This commit is contained in:
Mario Zechner 2025-11-13 23:20:03 +01:00
parent ed9786e5d6
commit 0ef3370085
3 changed files with 20 additions and 0 deletions

View file

@ -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.

View file

@ -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;

View file

@ -144,6 +144,8 @@ async function abortExecution(model: Model<any>) {
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<any>) {