Add `chat_typed<T>()` default method to LlmProvider trait. T: DeserializeOwned + JsonSchema. Default impl wraps prompt with JSON schema instructions, parses with serde_json::from_str, retries once on parse failure.