internal/ai/llm defines the single Provider interface (Generate, ListModels, Verify) shared by every vendor adapter, with Request, Message, JSONSchema, Response, Usage and Model types. Typed errors work with errors.Is/As: sentinels ErrAuth, ErrTimeout and ErrBadOutput; *RateLimitedError (RetryAfter) matching ErrRateLimited; *ProviderError (status and body excerpt) matching ErrProvider. NewProviderError redacts every given secret before truncating the body, so no part of an API key reaches an error string. Fake is a thread-safe scripted Provider for tests: it returns queued results in order, fails unscripted calls, and records deep copies of every Request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>