Files
james.maes ea3cbd2587 fix: retry on 429 / transient 5xx with backoff (#15) (#66)
* 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.
2026-04-28 06:57:00 -05:00
..