Handle budget_reached as a terminal session budget error (#59228)

## What changed

Map provider `budget_reached` errors to `SessionBudgetExceeded` for HTTP 400 responses and streaming failures. End SSE streams immediately on this error, ignoring retry headers and later completion events, and display `budget reached` in the TUI.

## Testing

Add coverage for HTTP error classification, immediate SSE termination without retries, WebSocket error delivery and subsequent request recovery, and TUI error rendering and task-state cleanup.

GitOrigin-RevId: 6a62d699cdb9cb446214cacfacd0c9ed68bf21a6
This commit is contained in:
yuning-oai
2026-11-03 21:02:34 +00:00
committed by copyberry
parent 8960c363c6
commit 0ed9d6fa4b
13 changed files with 143 additions and 77 deletions
+1
View File
@@ -2515,6 +2515,7 @@ fn websocket_error_detail(err: &ApiError) -> String {
| ApiError::ContextWindowExceeded
| ApiError::QuotaExceeded
| ApiError::UsageNotIncluded
| ApiError::SessionBudgetExceeded
| ApiError::FlexUnavailable
| ApiError::ServerOverloaded { .. }
| ApiError::PolicyCapacityUnavailable { .. } => format!("handshake error: {err}"),