* 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.
- Add block scope: wrap target text in {{ }} markers, place annotation
after }}. Parser finds matching {{ and scopes to everything between.
- Rewrite annotation guide and settings help with clear examples for
all four scope types (paragraph, block, inline, section)
- Add 6 new parser tests for block scope (393 total)
- Auto-deploy to Obsidian vault on production build
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add provider layer (src/providers/) with LLMService interface,
complexity-based model router (light/standard/heavy tiers),
provider registry, Anthropic and Ollama implementations.
Update settings UI with provider config and model routing.
Update drafter, context, commands for multi-provider support.
Migrate settings from old apiKey/model to new per-provider format.
81 new provider tests (244 total, all passing).