Why: The chat timeline needs a persisted thinking duration, and tool duration already lives on the tool call, so the thinking part had nowhere to put it. Evidence: go test ./... passes; the message golden now includes durationMs on the thinking part. Impact: Additive JSON field with omitempty. Existing clients ignore unknown fields. Refs: feature/chat-timeline-preview Co-authored-by: Cursor <cursoragent@cursor.com>