* docs: add design spec for retry/backoff (#15)
* docs: add implementation plan for retry/backoff (#15)
* feat(providers): add HttpError class for typed retry classification (#15)
* feat(providers): classify retriable errors via isRetriable (#15)
* feat(providers): add parseRetryAfter and backoffDelay helpers (#15)
* feat(providers): add withRetry helper with abort-aware backoff (#15)
* feat(providers): expose response headers on StreamResult (#15)
* feat(providers): add maxRetries and onRetry to CompletionRequest (#15)
* feat(pipeline): add retry variant to ProgressEvent (#15)
* feat(settings): add maxRetries to PennySettings (default 3) (#15)
* feat(providers): apply withRetry to Anthropic complete() (#15)
* feat(providers): apply withRetry to OpenAI complete() (#15)
* feat(providers): apply withRetry to Google complete() (#15)
* feat(providers): apply withRetry to Ollama complete() (#15)
* feat(pipeline): forward maxRetries and surface retry events (#15)
* feat(settings): expose maxRetries in Behavior tab (#15)
* feat(progress-modal): render retry status events (#15)
* chore(ci): ratchet coverage thresholds for retry/backoff (#15)
* fix(tests): keep streaming-errors mock real for HttpError/withRetry exports (#15)
The streaming-errors mock returned only streamRequest/withTimeout, but the
post-#15 providers also import HttpError and withRetry from node-stream.
Spread the actual module via importActual; only override streamRequest and
withTimeout. Pass maxRetries: 0 in each test call so pre-token errors do
not trigger retry sleeps and exceed the test timeout.