@@ -9,6 +9,7 @@ import type {
99 AgentContentBlock ,
1010 TextContentBlock ,
1111 AgentListContentBlock ,
12+ ThinkingCollapseState ,
1213} from '../../types/chat'
1314
1415// Type helper for accessing isCollapsed/userOpened on any block type
@@ -64,13 +65,13 @@ const createAgentBlock = (
6465// Helper to create thinking/text blocks with thinkingId
6566const createThinkingBlock = (
6667 thinkingId : string ,
67- isCollapsed ?: boolean ,
68+ thinkingCollapseState ?: ThinkingCollapseState ,
6869 userOpened ?: boolean ,
6970) : ContentBlock => ( {
7071 type : 'text' ,
7172 content : 'thinking content' ,
7273 thinkingId,
73- isCollapsed ,
74+ ... ( thinkingCollapseState !== undefined && { thinkingCollapseState } ) ,
7475 userOpened,
7576} )
7677
@@ -195,14 +196,14 @@ describe('hasAnyExpandedBlocks', () => {
195196 describe ( 'thinking blocks' , ( ) => {
196197 test ( 'returns true when thinking block is expanded' , ( ) => {
197198 const messages = [
198- createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , false ) ] ) ,
199+ createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , 'expanded' ) ] ) ,
199200 ]
200201 expect ( hasAnyExpandedBlocks ( messages ) ) . toBe ( true )
201202 } )
202203
203204 test ( 'returns false when thinking block is collapsed' , ( ) => {
204205 const messages = [
205- createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , true ) ] ) ,
206+ createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , 'hidden' ) ] ) ,
206207 ]
207208 expect ( hasAnyExpandedBlocks ( messages ) ) . toBe ( false )
208209 } )
@@ -463,22 +464,22 @@ describe('setAllBlocksCollapsedState', () => {
463464 describe ( 'thinking blocks' , ( ) => {
464465 test ( 'collapses thinking blocks' , ( ) => {
465466 const messages = [
466- createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , false ) ] ) ,
467+ createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , 'expanded' ) ] ) ,
467468 ]
468469 const result = setAllBlocksCollapsedState ( messages , true )
469470
470- const block = result [ 0 ] ?. blocks ?. [ 0 ] as CollapsibleBlock
471- expect ( block ?. isCollapsed ) . toBe ( true )
471+ const block = result [ 0 ] ?. blocks ?. [ 0 ] as TextContentBlock
472+ expect ( block ?. thinkingCollapseState ) . toBe ( 'hidden' )
472473 } )
473474
474475 test ( 'expands thinking blocks and sets userOpened' , ( ) => {
475476 const messages = [
476- createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , true ) ] ) ,
477+ createMessage ( '1' , 'ai' , [ createThinkingBlock ( 'think-1' , 'hidden' ) ] ) ,
477478 ]
478479 const result = setAllBlocksCollapsedState ( messages , false )
479480
480- const block = result [ 0 ] ?. blocks ?. [ 0 ] as CollapsibleBlock
481- expect ( block ?. isCollapsed ) . toBe ( false )
481+ const block = result [ 0 ] ?. blocks ?. [ 0 ] as TextContentBlock
482+ expect ( block ?. thinkingCollapseState ) . toBe ( 'expanded' )
482483 expect ( block ?. userOpened ) . toBe ( true )
483484 } )
484485
@@ -522,7 +523,7 @@ describe('setAllBlocksCollapsedState', () => {
522523 createMessage ( '1' , 'ai' , [
523524 createToolBlock ( 'tool-1' , false ) ,
524525 createAgentBlock ( 'agent-1' , false ) ,
525- createThinkingBlock ( 'think-1' , false ) ,
526+ createThinkingBlock ( 'think-1' , 'expanded' ) ,
526527 createAgentListBlock ( 'list-1' , false ) ,
527528 createTextBlock ( 'regular text' ) ,
528529 ] ) ,
@@ -532,7 +533,7 @@ describe('setAllBlocksCollapsedState', () => {
532533 const blocks = result [ 0 ] ?. blocks as CollapsibleBlock [ ]
533534 expect ( blocks [ 0 ] ?. isCollapsed ) . toBe ( true ) // tool
534535 expect ( blocks [ 1 ] ?. isCollapsed ) . toBe ( true ) // agent
535- expect ( blocks [ 2 ] ?. isCollapsed ) . toBe ( true ) // thinking
536+ expect ( ( blocks [ 2 ] as TextContentBlock ) ?. thinkingCollapseState ) . toBe ( 'hidden' ) // thinking
536537 expect ( blocks [ 3 ] ?. isCollapsed ) . toBe ( true ) // agent-list
537538 expect ( ( blocks [ 4 ] as TextContentBlock ) ?. isCollapsed ) . toBeUndefined ( ) // text (not collapsible)
538539 } )
@@ -542,7 +543,7 @@ describe('setAllBlocksCollapsedState', () => {
542543 createMessage ( '1' , 'ai' , [
543544 createToolBlock ( 'tool-1' , true ) ,
544545 createAgentBlock ( 'agent-1' , true ) ,
545- createThinkingBlock ( 'think-1' , true ) ,
546+ createThinkingBlock ( 'think-1' , 'hidden' ) ,
546547 createAgentListBlock ( 'list-1' , true ) ,
547548 ] ) ,
548549 ]
@@ -553,8 +554,8 @@ describe('setAllBlocksCollapsedState', () => {
553554 expect ( blocks [ 0 ] ?. userOpened ) . toBe ( true )
554555 expect ( blocks [ 1 ] ?. isCollapsed ) . toBe ( false )
555556 expect ( blocks [ 1 ] ?. userOpened ) . toBe ( true )
556- expect ( blocks [ 2 ] ?. isCollapsed ) . toBe ( false )
557- expect ( blocks [ 2 ] ?. userOpened ) . toBe ( true )
557+ expect ( ( blocks [ 2 ] as TextContentBlock ) ?. thinkingCollapseState ) . toBe ( 'expanded' )
558+ expect ( ( blocks [ 2 ] as TextContentBlock ) ?. userOpened ) . toBe ( true )
558559 expect ( blocks [ 3 ] ?. isCollapsed ) . toBe ( false )
559560 expect ( blocks [ 3 ] ?. userOpened ) . toBe ( true )
560561 } )
@@ -746,27 +747,27 @@ describe('toggle-all edge cases', () => {
746747
747748 test ( 'setAllBlocksCollapsedState: collapses both parent and nested blocks' , ( ) => {
748749 const nestedBlocks = [
749- createToolBlock ( 'tool-1' , false ) , // expanded
750- createThinkingBlock ( 'think-1' , false ) , // expanded
750+ createToolBlock ( 'tool-1' , false ) ,
751+ createThinkingBlock ( 'think-1' , 'expanded' ) ,
751752 ]
752753 const messages = [
753- createMessage ( '1' , 'ai' , [ createAgentBlock ( 'agent-1' , false , false , nestedBlocks ) ] ) , // expanded parent
754+ createMessage ( '1' , 'ai' , [ createAgentBlock ( 'agent-1' , false , false , nestedBlocks ) ] ) ,
754755 ]
755756 const result = setAllBlocksCollapsedState ( messages , true )
756757
757758 const agentBlock = result [ 0 ] ?. blocks ?. [ 0 ] as AgentContentBlock
758759 expect ( agentBlock ?. isCollapsed ) . toBe ( true )
759760 expect ( ( agentBlock ?. blocks ?. [ 0 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( true )
760- expect ( ( agentBlock ?. blocks ?. [ 1 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( true )
761+ expect ( ( agentBlock ?. blocks ?. [ 1 ] as TextContentBlock ) ?. thinkingCollapseState ) . toBe ( 'hidden' )
761762 } )
762763
763764 test ( 'setAllBlocksCollapsedState: expands both parent and nested blocks' , ( ) => {
764765 const nestedBlocks = [
765- createToolBlock ( 'tool-1' , true ) , // collapsed
766- createThinkingBlock ( 'think-1' , true ) , // collapsed
766+ createToolBlock ( 'tool-1' , true ) ,
767+ createThinkingBlock ( 'think-1' , 'hidden' ) ,
767768 ]
768769 const messages = [
769- createMessage ( '1' , 'ai' , [ createAgentBlock ( 'agent-1' , true , false , nestedBlocks ) ] ) , // collapsed parent
770+ createMessage ( '1' , 'ai' , [ createAgentBlock ( 'agent-1' , true , false , nestedBlocks ) ] ) ,
770771 ]
771772 const result = setAllBlocksCollapsedState ( messages , false )
772773
@@ -775,8 +776,8 @@ describe('toggle-all edge cases', () => {
775776 expect ( agentBlock ?. userOpened ) . toBe ( true )
776777 expect ( ( agentBlock ?. blocks ?. [ 0 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( false )
777778 expect ( ( agentBlock ?. blocks ?. [ 0 ] as CollapsibleBlock ) ?. userOpened ) . toBe ( true )
778- expect ( ( agentBlock ?. blocks ?. [ 1 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( false )
779- expect ( ( agentBlock ?. blocks ?. [ 1 ] as CollapsibleBlock ) ?. userOpened ) . toBe ( true )
779+ expect ( ( agentBlock ?. blocks ?. [ 1 ] as TextContentBlock ) ?. thinkingCollapseState ) . toBe ( 'expanded' )
780+ expect ( ( agentBlock ?. blocks ?. [ 1 ] as TextContentBlock ) ?. userOpened ) . toBe ( true )
780781 } )
781782 } )
782783
@@ -1087,7 +1088,7 @@ describe('toggle-all edge cases', () => {
10871088 test ( 'nested agent blocks with all types of collapsible blocks' , ( ) => {
10881089 const deepBlocks = [
10891090 createToolBlock ( 'deep-tool' , false ) ,
1090- createThinkingBlock ( 'deep-think' , false ) ,
1091+ createThinkingBlock ( 'deep-think' , 'expanded' ) ,
10911092 createAgentListBlock ( 'deep-list' , false ) ,
10921093 ]
10931094 const messages = [
@@ -1101,7 +1102,7 @@ describe('toggle-all edge cases', () => {
11011102 const outerAgent = result [ 0 ] ?. blocks ?. [ 0 ] as AgentContentBlock
11021103 expect ( outerAgent ?. isCollapsed ) . toBe ( true )
11031104 expect ( ( outerAgent ?. blocks ?. [ 0 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( true )
1104- expect ( ( outerAgent ?. blocks ?. [ 1 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( true )
1105+ expect ( ( outerAgent ?. blocks ?. [ 1 ] as TextContentBlock ) ?. thinkingCollapseState ) . toBe ( 'hidden' )
11051106 expect ( ( outerAgent ?. blocks ?. [ 2 ] as CollapsibleBlock ) ?. isCollapsed ) . toBe ( true )
11061107 } )
11071108 } )
0 commit comments