Address review:
- All four provider stream handlers (openai, codex, anthropic, gemini) now treat
ErrStreamStalled in the same branch as ErrStreamIdle, via a new
providerio.StreamTimeoutMessage helper that gives the stall a distinct, accurate
message (it reports the content window and does NOT claim the upstream stopped
sending data — keep-alives were still arriving). Previously a stalled stream fell
through to the generic provider-error path.
- Widen the content-watchdog test timing margins (idle 100ms, data/keepalive every
30ms) so CI/GC jitter can't trip the idle watchdog and mask the content path.
- Add a StreamTimeoutMessage unit test.