CodeWhisperer leaks literal <thinking> blocks into assistantResponseEvent, duplicating reasoning already routed via reasoningContentEvent. Track inThinking state to strip these tags during SSE transform, handling split chunks across tag boundaries. Co-authored-by: Cursor <cursoragent@cursor.com>