v0.2.0 — streaming, web chat, resilience; agent_sdk cut
The "you can actually use it" release. Chaos-gated: 235 kill/deploy cycles across worker/supervisor/SIGTERM/parked on SQLite and Postgres — 100% completion, byte-identical replay, zero duplicate side effects.
- Token streaming, end to end — the engine streams;
silas:chatprints tokens as they arrive; the inbox trace renders them live over Turbo (~10Hz coalescing). Deltas are decoration over the durable rows: never persisted, never re-emitted on replay. - Web chat in the inbox — start a session or reply from the browser; same durable loop, write-gated like approvals.
- Audit trail — every tool call's arguments and result/error, who approved, who declined and why; cancel button on active turns; the awaiting-approval badge filters to what needs you.
- Model-call resilience — transient provider errors (429/529/timeouts) retry with backoff and resume from the last completed step; exhaustion and permanent rejections fail the turn loudly with approvals expired; the rescuer sweeps stranded turns. A turn can never sit in
runningforever. approval :onceis now (tool, arguments)-scoped — approving a £5 refund no longer auto-approves a £5,000 one.- Removed the
:agent_sdkengine — its subscription-auth rationale was structurally unreachable.config.engine = :agent_sdkraises clearly;agent_sdk_*/authoptions are warning no-ops for this release. The in-process MCP server survives as the seam for a future "mount your tools as MCP" feature. - Onboarding — generated
bin/cican actually fail; complete initializer template (Sonnet default); provider-key and async-adapter guards raise at boot in production; idempotent, environment-aware rescuer recurring entry.
Upgrade: bin/rails silas:install:migrations db:migrate (drops two unused agent_sdk columns). Full details in CHANGELOG.md.