ReactMarkdown plugins disabled during streaming to prevent removeChild crash
Two commits fix a real `removeChild` exception in `AssistantMessage.tsx` that hits any React chat UI running `rehypeKatex` or `remarkGfm` while a stream is in flight. The fix took two passes to get right.
The root cause is React reconciliation fighting against shifting DOM trees produced by remark/rehype plugins parsing partial markdown. Commit 4872c90 adds a key prop to <ReactMarkdown> that toggles between "streaming" and "done", forcing a full remount when the stream settles. That alone wasn't enough: the plugins still crashed mid-stream because they were still running.
Commit 78e2b03 is the actual solution. During streaming, remarkPlugins and rehypePlugins are both set to []. On the final remount (key flips to "done"), the full plugin list comes back, so equations and GFM tables render correctly in the settled message. The isStreaming prop threads down from AssistantMessage to MarkdownContent only for the last content block - earlier blocks in a multi-part message get isStreaming: false regardless.
The diff is 14 lines net. Both commits touch only AssistantMessage.tsx.
If you skip 4872c90 and only take 78e2b03, you lose the remount: plugins re-enable correctly but there's no key change to trigger the clean render. You need both.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?