@@ -608,6 +608,7 @@ def _tail_lines(text: str, n: int) -> str:
608608class _ThinkingSegment :
609609 summary_index : int | None
610610 text : str = ""
611+ encrypted_boundary : bool = False
611612
612613
613614class _StyleOverrideRenderable :
@@ -762,11 +763,21 @@ def render_expanded(self) -> RenderableType:
762763 finally :
763764 self ._report_update .set_expanded (was_expanded )
764765
765- def append (self , content : str , * , summary_index : int | None = None ) -> None :
766+ def append (
767+ self ,
768+ content : str ,
769+ * ,
770+ summary_index : int | None = None ,
771+ encrypted : str | None = None ,
772+ ) -> None :
766773 self .raw_text += content
767774 self ._token_count += _estimate_tokens (content )
768- if self .is_think and content :
769- self ._append_thinking_segment (content , summary_index = summary_index )
775+ if self .is_think and (content or encrypted ):
776+ self ._append_thinking_segment (
777+ content ,
778+ summary_index = summary_index ,
779+ encrypted = encrypted ,
780+ )
770781 self ._invalidate_preview_cache ()
771782 if self ._paced :
772783 # Reveal is paced by reveal_tick() for smooth streaming; just buffer
@@ -970,11 +981,30 @@ def take_committed_renderables(self) -> list[RenderableType]:
970981
971982 # -- Private -------------------------------------------------------------
972983
973- def _append_thinking_segment (self , content : str , * , summary_index : int | None ) -> None :
974- if self ._thinking_segments and self ._thinking_segments [- 1 ].summary_index == summary_index :
975- self ._thinking_segments [- 1 ].text += content
984+ def _append_thinking_segment (
985+ self ,
986+ content : str ,
987+ * ,
988+ summary_index : int | None ,
989+ encrypted : str | None ,
990+ ) -> None :
991+ encrypted_boundary = bool (encrypted )
992+ if (
993+ self ._thinking_segments
994+ and self ._thinking_segments [- 1 ].summary_index == summary_index
995+ and not self ._thinking_segments [- 1 ].encrypted_boundary
996+ ):
997+ segment = self ._thinking_segments [- 1 ]
998+ segment .text += content
999+ segment .encrypted_boundary = encrypted_boundary
9761000 return
977- self ._thinking_segments .append (_ThinkingSegment (summary_index = summary_index , text = content ))
1001+ self ._thinking_segments .append (
1002+ _ThinkingSegment (
1003+ summary_index = summary_index ,
1004+ text = content ,
1005+ encrypted_boundary = encrypted_boundary ,
1006+ )
1007+ )
9781008
9791009 def _pending_text (self ) -> str :
9801010 return self .raw_text [self ._committed_len : self ._revealed_len ]
0 commit comments