personal memory agent

providers: add json_schema parameter with advisory validation master

Adds an optional `json_schema: dict | None` parameter to generate(), agenerate(), and generate_with_result() in think/models.py and threads it through all four provider modules. Each provider translates to its native structured-output mechanism (Gemini response_json_schema, OpenAI Responses text.format.json_schema, Anthropic output_config with forced-tool-use fallback on BadRequestError, Ollama dict format). After the call, an advisory jsonschema.validate pass logs violations and surfaces a schema_validation field on GenerateResult from generate_with_result; it never raises and never mutates the returned text. When json_schema is None, every provider's SDK kwargs are byte-for-byte identical to before. Lode 1 of 3 — talents and callers unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>