28e9e698a1
Adds a nullable `reasoning` field to InferenceResponse and maps the llama.cpp / OpenAI-compat `reasoning_content` field into it, so local models that emit their chain-of-thought have it captured. Provider/model side only — the emit-site event field (reasoningArtifactId) + CAS storage in the orchestrator are still pending (tracked in Vikunja Correx #4).