@@ -9,6 +9,7 @@ import { ContentWithMarkdown } from './content-with-markdown'
99import { ThinkingBlock } from './thinking-block'
1010import { trimTrailingNewlines , sanitizePreview } from './block-helpers'
1111import { useTheme } from '../../hooks/use-theme'
12+ import { useChatStore } from '../../state/chat-store'
1213import { AGENT_CONTENT_HORIZONTAL_PADDING } from '../../utils/layout-helpers'
1314import { shouldRenderAsSimpleText } from '../../utils/constants'
1415import { isImplementorAgent , getImplementorIndex } from '../../utils/implementor-helpers'
@@ -30,7 +31,6 @@ interface AgentBodyProps {
3031 parentIsStreaming : boolean
3132 availableWidth : number
3233 markdownPalette : MarkdownPalette
33- streamingAgents : Set < string >
3434 onToggleCollapsed : ( id : string ) => void
3535 onBuildFast : ( ) => void
3636 onBuildMax : ( ) => void
@@ -44,7 +44,6 @@ interface AgentBodyPropsRef {
4444 parentIsStreaming : boolean
4545 availableWidth : number
4646 markdownPalette : MarkdownPalette
47- streamingAgents : Set < string >
4847 onToggleCollapsed : ( id : string ) => void
4948 onBuildFast : ( ) => void
5049 onBuildMax : ( ) => void
@@ -60,7 +59,6 @@ const AgentBody = memo(
6059 parentIsStreaming,
6160 availableWidth,
6261 markdownPalette,
63- streamingAgents,
6462 onToggleCollapsed,
6563 onBuildFast,
6664 onBuildMax,
@@ -94,7 +92,6 @@ const AgentBody = memo(
9492 parentIsStreaming,
9593 availableWidth,
9694 markdownPalette,
97- streamingAgents,
9895 onToggleCollapsed,
9996 onBuildFast,
10097 onBuildMax,
@@ -130,7 +127,6 @@ const AgentBody = memo(
130127 nextIndex = { nextIndex }
131128 siblingBlocks = { p . nestedBlocks }
132129 availableWidth = { p . availableWidth }
133- streamingAgents = { p . streamingAgents }
134130 onToggleCollapsed = { p . onToggleCollapsed }
135131 markdownPalette = { p . markdownPalette }
136132 />
@@ -157,14 +153,12 @@ const AgentBody = memo(
157153 agentBlocks = { agentBlocks }
158154 keyPrefix = { `${ p . keyPrefix } -agent-grid-${ startIndex } ` }
159155 availableWidth = { p . availableWidth }
160- streamingAgents = { p . streamingAgents }
161156 renderAgentBranch = { ( innerAgentBlock , prefix , width ) => (
162157 < AgentBranchWrapper
163158 agentBlock = { innerAgentBlock }
164159 keyPrefix = { prefix }
165160 availableWidth = { width }
166161 markdownPalette = { p . markdownPalette }
167- streamingAgents = { p . streamingAgents }
168162 onToggleCollapsed = { p . onToggleCollapsed }
169163 onBuildFast = { p . onBuildFast }
170164 onBuildMax = { p . onBuildMax }
@@ -249,7 +243,6 @@ export interface AgentBranchWrapperProps {
249243 keyPrefix : string
250244 availableWidth : number
251245 markdownPalette : MarkdownPalette
252- streamingAgents : Set < string >
253246 onToggleCollapsed : ( id : string ) => void
254247 onBuildFast : ( ) => void
255248 onBuildMax : ( ) => void
@@ -263,19 +256,18 @@ export const AgentBranchWrapper = memo(
263256 keyPrefix,
264257 availableWidth,
265258 markdownPalette,
266- streamingAgents,
267259 onToggleCollapsed,
268260 onBuildFast,
269261 onBuildMax,
270262 siblingBlocks,
271263 isLastMessage,
272264 } : AgentBranchWrapperProps ) => {
273265 const theme = useTheme ( )
266+ // Derive streaming boolean for this specific agent to avoid re-renders when other agents change
267+ const agentIsStreaming = useChatStore ( ( state ) => state . streamingAgents . has ( agentBlock . agentId ) )
274268
275269 if ( shouldRenderAsSimpleText ( agentBlock . agentType ) ) {
276- const isStreaming =
277- agentBlock . status === 'running' ||
278- streamingAgents . has ( agentBlock . agentId )
270+ const isStreaming = agentBlock . status === 'running' || agentIsStreaming
279271
280272 const effectiveStatus = isStreaming ? 'running' : agentBlock . status
281273 const { indicator : statusIndicator , color : statusColor } =
@@ -343,8 +335,7 @@ export const AgentBranchWrapper = memo(
343335 }
344336
345337 const isCollapsed = agentBlock . isCollapsed ?? false
346- const isStreaming =
347- agentBlock . status === 'running' || streamingAgents . has ( agentBlock . agentId )
338+ const isStreaming = agentBlock . status === 'running' || agentIsStreaming
348339
349340 const allTextContent =
350341 agentBlock . blocks
@@ -395,7 +386,6 @@ export const AgentBranchWrapper = memo(
395386 parentIsStreaming = { isStreaming }
396387 availableWidth = { availableWidth }
397388 markdownPalette = { markdownPalette }
398- streamingAgents = { streamingAgents }
399389 onToggleCollapsed = { onToggleCollapsed }
400390 onBuildFast = { onBuildFast }
401391 onBuildMax = { onBuildMax }
0 commit comments