Problem
`agent.Run` returns `fmt.Errorf("max turns reached")` after `MaxTurns` iterations (default 50). The partial output is discarded and the caller has no signal beyond a generic error string. In the TUI, the user sees a red `!` block with no context.
Proposal
- Emit an explicit `EventMaxTurnsReached` (or include a typed sentinel error `ErrMaxTurns`).
- Return the accumulated final text alongside the error so the caller can render what was generated.
- TUI: render "hit turn limit (50). Reply to continue." as a distinct block, not as a generic error.
Acceptance
- Callers can distinguish "hit turn limit" from other errors.
- Partial transcript text is visible to the user.
- Test in `agent_test.go` drives a fake provider into the limit and asserts the typed error + partial text.
Problem
`agent.Run` returns `fmt.Errorf("max turns reached")` after `MaxTurns` iterations (default 50). The partial output is discarded and the caller has no signal beyond a generic error string. In the TUI, the user sees a red `!` block with no context.
Proposal
Acceptance