@@ -24,11 +24,12 @@ interface MessageRendererProps {
2424 collapsedAgents : Set < string >
2525 streamingAgents : Set < string >
2626 isWaitingForResponse : boolean
27- timerStartTime : number | null
27+ timer : any
2828 setCollapsedAgents : React . Dispatch < React . SetStateAction < Set < string > > >
2929 setFocusedAgentId : React . Dispatch < React . SetStateAction < string | null > >
3030 userOpenedAgents : Set < string >
3131 setUserOpenedAgents : React . Dispatch < React . SetStateAction < Set < string > > >
32+ isUserCollapsingRef : React . MutableRefObject < boolean >
3233}
3334
3435export const MessageRenderer = ( props : MessageRendererProps ) : ReactNode => {
@@ -42,15 +43,22 @@ export const MessageRenderer = (props: MessageRendererProps): ReactNode => {
4243 collapsedAgents,
4344 streamingAgents,
4445 isWaitingForResponse,
45- timerStartTime ,
46+ timer ,
4647 setCollapsedAgents,
4748 setFocusedAgentId,
4849 setUserOpenedAgents,
50+ isUserCollapsingRef,
4951 } = props
5052
53+ const timerStartTime = timer ?. startTime ?? null
54+
5155 const onToggleCollapsed = useCallback (
5256 ( id : string ) => {
5357 const wasCollapsed = collapsedAgents . has ( id )
58+
59+ // Set flag to prevent auto-scroll during user-initiated collapse
60+ isUserCollapsingRef . current = true
61+
5462 setCollapsedAgents ( ( prev ) => {
5563 const next = new Set ( prev )
5664 if ( next . has ( id ) ) {
@@ -70,7 +78,7 @@ export const MessageRenderer = (props: MessageRendererProps): ReactNode => {
7078 return next
7179 } )
7280 } ,
73- [ collapsedAgents , setCollapsedAgents , setUserOpenedAgents ] ,
81+ [ collapsedAgents , setCollapsedAgents , setUserOpenedAgents , isUserCollapsingRef ] ,
7482 )
7583
7684 return (
@@ -94,7 +102,7 @@ export const MessageRenderer = (props: MessageRendererProps): ReactNode => {
94102 setUserOpenedAgents = { setUserOpenedAgents }
95103 setFocusedAgentId = { setFocusedAgentId }
96104 isWaitingForResponse = { isWaitingForResponse }
97- timerStartTime = { timerStartTime }
105+ timer = { timer }
98106 onToggleCollapsed = { onToggleCollapsed }
99107 />
100108 )
@@ -118,7 +126,7 @@ interface MessageWithAgentsProps {
118126 setUserOpenedAgents : React . Dispatch < React . SetStateAction < Set < string > > >
119127 setFocusedAgentId : React . Dispatch < React . SetStateAction < string | null > >
120128 isWaitingForResponse : boolean
121- timerStartTime : number | null
129+ timer : any
122130 onToggleCollapsed : ( id : string ) => void
123131}
124132
@@ -138,11 +146,12 @@ const MessageWithAgents = memo(
138146 setUserOpenedAgents,
139147 setFocusedAgentId,
140148 isWaitingForResponse,
141- timerStartTime ,
149+ timer ,
142150 onToggleCollapsed,
143151 } : MessageWithAgentsProps ) : ReactNode => {
144152 const SIDE_GUTTER = 1
145153 const isAgent = message . variant === 'agent'
154+ const timerStartTime = timer ?. startTime ?? null
146155
147156 if ( isAgent ) {
148157 return (
@@ -271,7 +280,7 @@ const MessageWithAgents = memo(
271280 isComplete = { message . isComplete }
272281 completionTime = { message . completionTime }
273282 credits = { message . credits }
274- timerStartTime = { timerStartTime }
283+ timer = { timer }
275284 textColor = { textColor }
276285 timestampColor = { timestampColor }
277286 markdownOptions = { markdownOptions }
@@ -342,7 +351,7 @@ const MessageWithAgents = memo(
342351 setUserOpenedAgents = { setUserOpenedAgents }
343352 setFocusedAgentId = { setFocusedAgentId }
344353 isWaitingForResponse = { isWaitingForResponse }
345- timerStartTime = { timerStartTime }
354+ timer = { timer }
346355 onToggleCollapsed = { onToggleCollapsed }
347356 />
348357 </ box >
@@ -580,7 +589,7 @@ const AgentMessage = memo(
580589 setUserOpenedAgents = { setUserOpenedAgents }
581590 setFocusedAgentId = { setFocusedAgentId }
582591 isWaitingForResponse = { isWaitingForResponse }
583- timerStartTime = { timerStartTime }
592+ timer = { timer }
584593 onToggleCollapsed = { onToggleCollapsed }
585594 />
586595 </ box >
0 commit comments