v0.6.2 Fail loudly on invalid API keys & fix typed pack SSE streams
Patch release — launch-audit fixes.
Fixed
- Invalid API key no longer returns HTTP 200 with degraded content. With a wrong or placeholder
ANTHROPIC_API_KEY, the provider's 401 was silently swallowed into placeholder text ("Summary unavailable.", "structured extraction failed") withcost_usd: 0.0. NewAgentAuthenticationErrornow propagates through agents and packs to the API, which returns HTTP 502 with an actionable detail ("Check ANTHROPIC_API_KEY in your .env … or set LLM_PROVIDER=mock"). SSE streams emit the same message as an expliciterrorevent. - Same bug, non-auth case. Any other fatal LLM error (persistent 5xx after retries exhausted, a bad model name, a content-policy refusal) was swallowed identically. Every
ResearchAgent/AnalystAgentnode now lets the LLM call fail loudly — only genuine JSON-parsing hiccups still get a fallback. - Typed pack SSE streams (
/packs/{id}/run/stream) were broken on the default config.summariserand everyStructuredLLMPackvertical drove a syncgraph.invokeon the event loop thread, whichAsyncSqliteSaverrejects. Fixed viaasyncio.to_thread. - Stale
ANTHROPIC_MODELdefault indocs/security.md— documented as the retiredclaude-3-5-sonnet-20241022; corrected toclaude-sonnet-5.
Changed
- README: new Troubleshooting section, tests badge 758+ → 790+, 422-vs-403 clarification for regulated packs.
- Remaining French docstrings/comments translated to English.
core/cost.py: documented Claude Sonnet 5's introductory pricing window.- Dev deps:
pip>=26.1.2pinned (PYSEC-2026-196).
Full Changelog: v0.6.1...v0.6.2