| ... | @@ -623,7 +623,11 @@ export const MessagesTimeline = memo(function MessagesTimeline({ | ... | @@ -623,7 +623,11 @@ export const MessagesTimeline = memo(function MessagesTimeline({ |
| 623 | listRef, | 623 | listRef, |
| 624 | timestampFormat, | 624 | timestampFormat, |
| 625 | routeThreadKey, | 625 | routeThreadKey, |
| 626 | threadRef: parseScopedThreadKey(routeThreadKey), | 626 | // Must be referentially stable: ChatMarkdown keys its react-markdown |
| | 627 | // component map on threadRef, and a fresh object here remounts every |
| | 628 | // rendered markdown node whenever this memo recomputes (e.g. on each |
| | 629 | // activity delta while the thread is working). |
| | 630 | threadRef: citationThreadRef, |
| 627 | markdownCwd, | 631 | markdownCwd, |
| 628 | resolvedTheme, | 632 | resolvedTheme, |
| 629 | workspaceRoot, | 633 | workspaceRoot, |
| ... | @@ -648,6 +652,7 @@ export const MessagesTimeline = memo(function MessagesTimeline({ | ... | @@ -648,6 +652,7 @@ export const MessagesTimeline = memo(function MessagesTimeline({ |
| 648 | listRef, | 652 | listRef, |
| 649 | timestampFormat, | 653 | timestampFormat, |
| 650 | routeThreadKey, | 654 | routeThreadKey, |
| | 655 | citationThreadRef, |
| 651 | markdownCwd, | 656 | markdownCwd, |
| 652 | resolvedTheme, | 657 | resolvedTheme, |
| 653 | workspaceRoot, | 658 | workspaceRoot, |