+
    „WÝjù´  ã                  óè   € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHtHt ]t]t]! R ] 4       4      tRtR	R
RRRR/tR R ltRR R llt ! R R4      tR# )uV  Streaming output, reasoning preview, tool progress callbacks, and busy-command spinner for the interactive CLI

Mixin split out of ``cli.py``; bound onto ``HermesCLI`` via the MRO. cli.py-internal
symbols are imported LAZILY inside each method (``from cli import ...``) â€” the mixin
never imports ``cli`` at module load time (import cycle).
)ÚannotationsN)Úcontextmanager)ÚPath)Úescape©Út)ÚTHINK_CLOSE_TAGSÚTHINK_OPEN_TAGSc              #  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)Úlen)Ú.0r   s   & ÚOC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_cli\cli_stream_mixin.pyÚ	<genexpr>r      s   é € Ð5© Aœ˜QŸ˜«ùó   ‚z/reload-mcpzcli.stream.busy_reload_mcpz/reload-skillszcli.stream.busy_reload_skillsz/reload_skillsc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "r   Ú__annotate__r   )   s   € ÷ 2ñ 2˜#ñ 2ó    c                 ó    € R\        R4       R2# )uP   ``  [thinking] `` â€” the reasoning-preview label; also measured for wrap width.ú  zcli.stream.thinking_labelÚ r   r   r   r   Ú_thinking_prefixr   )   s   € à”Ð-Ó.Ð/¨qÐ1Ð1r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚdefaultÚintr   r   )r   s   "r   r   r   .   s   € ÷ ñ ˜sð ¨Cñ r   c                óh   €  \         P                  ! 4       P                  #   \         d    T u # i ; ir   )ÚshutilÚget_terminal_sizeÚcolumnsÚ	Exception©r   s   &r   Ú_terminal_columnsr'   .   s0   € ðÜ×'Ò'Ó)×1Ñ1Ð1øÜô ØŠðús   ‚! ¡1°1c                  ó¨  € ] tR t^5tRtR R ltR R ltR R ltR R	 ltR
 t	R R lt
RR/R R lltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR- R. lt]R/R0/R1 R2 ll4       tR3R0/R4 R5 lltR6 tR7 R8 ltRER: R; llt R< R= lt!R> R? lt"R@ RA lt#RB RC lt$RDt%R9# )FÚCLIStreamMixinznStreaming output, reasoning preview, tool progress callbacks, and busy-command spinner for the interactive CLIc               ó    € V ^8„  d   QhRRRR/# ©r   Útextr   r   ÚNoner   )r   s   "r   r   ÚCLIStreamMixin.__annotate__8   s   € ÷ mñ m ð m¨ñ mr   c                óÀ   a a€ \        \        S RR4      RR4      '       d   R# ^ RIHpHp V V3R lpV! VR\	        SV4      \        \        S RR4      RR4      R	7       R# )
z@Called by agent when thinking starts/stops. Updates TUI spinner.ÚagentNÚ_mute_notification_replyF)ÚDiagnosticTextÚrender_notificationc                 óŒ   <€ S'       g   S P                  R R7       S;'       g    RS n        RS n        S P                  4        R# )T©ÚforceÚ ç        N)Ú_flush_reasoning_previewÚ_spinner_textÚ_tool_start_timeÚ_invalidate)Úselfr,   s   €€r   ÚshowÚ)CLIStreamMixin._on_thinking.<locals>.show=   s9   ø€ ßØ×-Ñ-°DÐ-Ô9Ø!%§ ¨ˆDÔØ$'ˆDÔ!Ø×ÑÖr   ÚcliÚ_notification_config©ÚplatformÚ
diagnosticÚuser_config)ÚgetattrÚgateway.warning_notificationsr2   r3   Ú
isinstance)r=   r,   r2   r3   r>   s   ff   r   Ú_on_thinkingÚCLIStreamMixin._on_thinking8   sV   ù€ ä”7˜4 ¨$Ó/Ð1KÈU×SÒSÙßUö	ñ 	˜D¨5¼ZÈÈnÓ=]Ü(/´¸¸gÀtÓ0LÐNdÐfjÓ(k÷	mr   c               ó   € V ^8„  d   QhRR/# ©r   r   r-   r   )r   s   "r   r   r.   F   s   € ÷ ñ  Dñ r   c                óR  a aa€  \        VRR4      ;'       g    Ro\        \        S RR4      RR4      '       d   R# S'       g   R# \        VRR4      ;'       g    Ro^ R	IHpHp VV V3R
 lpV! VRV! V4      \        \        S RR4      RR4      R7       R#   \         d     R# i ; i)a+  Queue an out-of-band AgentNotice for rendering at the next clean boundary.

Notices fire mid-turn (cold-start seed, per-turn _capture_credits); printing immediately
races the stream and buries the line behind the prompt. Flushed by _flush_credit_notices()
after run_conversation returns. Fail-soft.
r,   r7   r0   Nr1   FÚlevelÚinfo)Úis_diagnostic_noticer3   c                 ót   <€ \        SR 4      '       g   . Sn        SP                  P                  S S34       R# )Ú_pending_credit_noticesN)ÚhasattrrR   Úappend)rN   r=   r,   s   €€€r   Úqueue_noticeÚ/CLIStreamMixin._on_notice.<locals>.queue_noticeU   s1   ø€ Ü˜tÐ%>×?Ò?Ø35�DÔ0Ø×,Ñ,×3Ñ3°U¸D°MÖBr   r@   rA   rB   )rF   rG   rP   r3   r%   )r=   ÚnoticerP   r3   rU   rN   r,   s   f&   @@r   Ú
_on_noticeÚCLIStreamMixin._on_noticeF   s¡   ú€ ð	Ü˜6 6¨2Ó.×4Ð4°"ˆDÜ”w˜t W¨dÓ3Ð5OÐQV×WÒWÙßÙÜ˜F G¨VÓ4×>Ð>¸ˆEß_÷Cñ   °uÑI]Ð^dÓIeÜ,3´G¸DÀ'È4Ó4PÐRhÐjnÓ,o÷qøäô 	Úð	ús'   …B ™!B ¼B ÁB Á;B ÂB&Â%B&c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   ^   s   € ÷ ñ  tñ r   c                óâ   € ^ RI HpHpHp  \	        V RR4      pV'       g   R# . V n        RRRRRR	R
V/pV F#  w  rgV! RVP                  Wa4       V V 24       K%  	  R#   \         d     R# i ; i)z†Print queued credit notices as level-colored lines at turn end (after
run_conversation) where _cprint paints cleanly above the prompt.©Ú_DIMÚ_RSTÚ_cprintrR   NÚerrorz[31mÚwarnz[33mÚsuccessz[32mrO   r   )r@   r]   r^   r_   rF   rR   Úgetr%   )r=   r]   r^   r_   ÚpendingÚcolorsrN   r,   s   &       r   Ú_flush_credit_noticesÚ$CLIStreamMixin._flush_credit_notices^   sƒ   € ÷ 	,Ñ+ð		Ü˜dÐ$=¸tÓDˆGßÙØ+-ˆDÔ(Ø˜z¨6°:¸yÈ*ÐV\Ð^bÐcˆFÛ&‘�Ù˜"˜VŸZ™Z¨Ó4Ð5°d°V¸D¸6ÐBÖCó  'øäô 	Úð	ús   ŒA £:A ÁA.Á-A.c               ó    € V ^8„  d   QhRRRR/# )r   Úkeyr   r   r-   r   )r   s   "r   r   r.   m   s   € ÷ ñ  Cð ¨Dñ r   c                ó   € R# )z•No-op for the REPL (lines are printed, no persistent slot to wipe); kept so the
agent's clear callback is bound symmetrically with the show callback.Nr   )r=   ri   s   &&r   Ú_on_notice_clearÚCLIStreamMixin._on_notice_clearm   s   € ñ 	r   c                óÆ   € V P                   '       d   V P                  '       d   V P                  # V P                  '       d   V P                   '       g   V P                  # R# )zBReturn the active reasoning display callback for the current mode.N)Úshow_reasoningÚstreaming_enabledÚ_stream_reasoning_deltaÚverboseÚ_on_reasoning©r=   s   &r   Ú_current_reasoning_callbackÚ*CLIStreamMixin._current_reasoning_callbackr   sH   € à××Ð 4×#9×#9Ð#9Ø×/Ñ/Ð/Ø�<�<ˆ< × 3× 3Ð 3Ø×%Ñ%Ð%Ùr   c               ó    € V ^8„  d   QhRRRR/# )r   Úreasoning_textr   r   r-   r   )r   s   "r   r   r.   z   s   € ÷ >ñ >°cð >¸dñ >r   c                ó>  € ^ RI HpHpHp VP	                  4       pV'       g   R# \        ^\        4       \        \        4       4      ,
          ^,
          4      p. p\        P                  ! RVP                  RR4      4       FY  pRP                  R VP                  4        4       4      p	V	'       g   K3  VP                  \        P                   ! W–R7      4       K[  	  RP                  V4      pV'       g   R# V P"                  '       d   V! V \        4        V V 24       R# VP                  4       p
\        V
4      ^8”  d?   RP                  V
R	,          4      R
\%        R\        V
4      ^,
          R7       2,           pMTpV! V \        4        V V 24       R# )zARender a buffered reasoning preview as a single [thinking] block.r\   Nz\n\s*\n+z
Ú
r   c              3  óp   "  € T F,  qP                  4       '       g   K  VP                  4       x € K.  	  R # 5ir   )Ústrip©r   Úlines   & r   r   Ú9CLIStreamMixin._emit_reasoning_preview.<locals>.<genexpr>ƒ   s%   é € Ð_Ñ8N°×R\ÑR\×R^œ|˜tŸz™zŸ|˜|Ó8Nùs   ‚6ž6)Úwidth:Né   Nz
  zcli.stream.thinking_more_lines©Úcount)r@   r]   r^   r_   r{   Úmaxr'   r   r   ÚreÚsplitÚreplaceÚjoinÚ
splitlinesrT   ÚtextwrapÚfillrq   r   )r=   rw   r]   r^   r_   Úpreview_textÚ
wrap_widthÚ
paragraphsÚ	paragraphÚcompactÚlinesÚpreviews   &&          r   Ú_emit_reasoning_previewÚ&CLIStreamMixin._emit_reasoning_previewz   sP  € ç+Ñ+Ø%×+Ñ+Ó-ˆßÙÜ˜Ô.Ó0´3Ô7GÓ7IÓ3JÕJÈQÕNÓOˆ
Øˆ
ÜŸš +¨|×/CÑ/CÀFÈDÓ/QÖRˆIØ—h‘hÑ_¸	×8LÑ8LÔ8NÓ_Ó_ˆGß‰wØ×!Ñ!¤(§-¢-°Ô"JÖKñ Sð —y‘y Ó,ˆßÙØ�<�<ˆ<Ù�t�fÔ-Ó/Ð0°°¸t¸fÐEÔFÙØ×'Ñ'Ó)ˆÜˆu‹:˜Œ>Ø—i‘i  b¥	Ó*¨t´AÐ6VÔ^aÐbgÓ^hÐklÕ^lÔ4mÐ3nÐ-oÕo‰Gà"ˆGÙ�4�&Ô)Ó+Ð,¨W¨I°d°VÐ<Ö=r   r6   Fc               ó    € V ^8„  d   QhRRRR/# )r   r6   Úboolr   r-   r   )r   s   "r   r   r.   “   s   € ÷  5ñ  5°ð  5À$ñ  5r   c               ó  aaa	€ \        V RR4      oS'       g   R# \        ^(\        4       \        \	        4       4      ,
          ^,
          4      pRpV'       d   SRupoMïSP                  R4      p\        ^V^,          4      pVR8w  d8   WE8¼  g   SP                  R4      '       d   SRV^,            SV^,           R upoM�\        S4      V8¼  d~   \        ^V^,          4      o	\        \        S4      \        W"^,          ,           V^,           4      4      o\        VVV	3R lR 4       4      pVR8w  d   SRV^,            SV^,           R upoV'       d   SP                  4       MSV n	        V'       d   V P                  V4       R# R# )	zÇFlush buffered reasoning text at natural boundaries.

Some providers stream reasoning in tiny word/punctuation chunks; buffering keeps the
preview path from printing one `[thinking]` line per token.
Ú_reasoning_preview_bufr7   Nry   c              3  óJ   <"  € T F  pSP                  VSS4      x € K  	  R # 5ir   )Úrfind)r   ÚbÚbufÚ
search_endÚsearch_starts   & €€€r   r   Ú:CLIStreamMixin._flush_reasoning_preview.<locals>.<genexpr>«   s)   øé € ð HáF˜ð —I‘I˜a ¨z×:Ð:ÛFùs   ƒ #éÿÿÿÿ)ú

z.
z!
z?
z:
)r   Ú	Ú.Ú!Ú?Ú,Ú;Ú:)rF   rƒ   r'   r   r   r™   ÚendswithÚminÚlstripr—   r’   )
r=   r6   Útarget_widthÚ
flush_textÚ
line_breakÚmin_newline_flushÚcutr›   rœ   r�   s
   &$     @@@r   r9   Ú'CLIStreamMixin._flush_reasoning_preview“   s`  ú€ ô �dÐ4°bÓ9ˆßÙÜ˜2Ô0Ó2´SÔ9IÓ9KÓ5LÕLÈqÕPÓQˆØˆ
ßØ! 2ˆOˆJ™àŸ™ 4›ˆJÜ # B¨¸Õ(9Ó :ÐØ˜RÔØÔ/Ø—<‘<Ð D×EÒEØ"%Ð&6¨
°Q­Ð"7¸¸ZÈ!½^Ð=MÐ9N��
™CÜ�S“˜\Ô)Ü" 2 |°qÕ'8Ó9�Ü Ü˜“Hœc ,À!Õ2CÕ"DÀlÐUVÕFVÓWóY�
äö HáFóHó H�ð ˜"”9Ø&)¨)¨C°!­G n°c¸#À½'¸)°n�O�J ç6@ c§j¡j¤lÀcˆÔ#ßØ×(Ñ(¨Ö4ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   Ú
user_inputr   r   r   )r   s   "r   r   r.   µ   s   € ÷ (ñ (Àð (Èñ (r   c           
     ó"  € ^ RI HpHp \        V RR4      '       d/   RVP	                  4       P                  \        V RR4      4       R2MRpVP                  R	4      p^ R
IHpH	p V! V 4      '       d   \        V! 4       4      MRp\        V4      ^8:  d   RV! 4        RV R\        V4       RV 2# \        ^\        \        V R^4      4      4      p	\        ^ \        \        V R^4      4      4      p
VRV	 p\        V
\        ^ \        V4      \        V4      ,
          4      4      pV'       d   W\) R M. p\        V4      \        V4      ,
          \        V4      ,
          pV^ 8  d   ^ p. pRV! 4        RV R\        V^ ,          4       RV 2.pVP                  R VR,           4       4       V^ 8”  d5   V^8X  d   RMRpVP!                  R\        \#        VVR7      4       R24       VP                  R V 4       4       R	P%                  V4      # )z5Format the submitted user-message scrollback preview.)Ú_accent_hexÚdatetimeÚshow_timestampsFz [dim]Útimestamp_formatú%H:%Mú[/]r7   ry   )Ú	is_modernÚprompt_glyphu   â—�ú[bold Ú]z
[/] [bold]Ú user_message_preview_first_linesÚuser_message_preview_last_linesNc              3  ó@   "  € T F  pR \        V4       R2x € K  	  R# 5i©z[bold]r¹   N©Ú_escaper|   s   & r   r   ÚHCLIStreamMixin._format_submitted_user_message_preview.<locals>.<genexpr>Ì   s   é € ÐNÁX¸T˜v¤g¨d£m _°CÕ8ÃXùó   ‚:é   NNz!cli.stream.preview_more_lines_onez#cli.stream.preview_more_lines_otherz[dim]r�   c              3  ó@   "  € T F  pR \        V4       R2x € K  	  R# 5irÁ   rÂ   r|   s   & r   r   rÄ   Ð   s   é € ÐJÁT¸T˜v¤g¨d£m _°CÕ8ÃTùrÅ   )r@   r´   rµ   rF   ÚnowÚstrftimer…   Úhermes_cli.cli_modern_layoutrº   r»   rÃ   r   rƒ   r    r©   ÚextendrT   r   r‡   )r=   r²   r´   rµ   Ú	ts_suffixr�   rº   r»   ÚmarkÚfirst_linesÚ
last_linesÚheadÚ
tail_countÚtailÚhidden_middle_countÚpreview_linesri   s   &&               r   Ú&_format_submitted_user_message_previewÚ5CLIStreamMixin._format_submitted_user_message_previewµ   s÷  € ç-ô �tÐ.°×6Ò6ð �X—\‘\“^×,Ñ,¬W°TÐ;MÈwÓ-WÓXÐYÐY\Ñ]Ø<>ð 	ð × Ñ  Ó&ˆßHÙ*3°D¯/ª/Œw‘|“~Ô&¸uˆÜˆu‹:˜Œ?Ø™K›M˜?¨!¨D¨6°¼GÀJÓ<OÐ;PÐPSÐT]ÐS^Ð_Ð_ä˜!œS¤¨Ð/QÐSTÓ!UÓVÓWˆÜ˜œC¤¨Ð.OÐQRÓ SÓTÓUˆ
Ø�\�kÐ"ˆÜ˜¤S¨¬C°«J¼¸T»Õ,BÓ%CÓDˆ
ß&0ˆu�[�\Ñ"°bˆÜ! %›j¬3¨t«9Õ4´s¸4³yÕ@ÐØ Ô"Ø"#ÐØˆDà!¡+£- °°$°°zÄ'È$ÈqÍ'ÓBRÐASÐSVÐW`ÐVaÐbÐcˆØ×ÑÑNÀTÈ"ÆXÓNÔNØ Ô"Ø9LÐPQÔ9QÑ5ÐW|ˆCØ× Ñ  5¬´°3Ð>QÔ1RÓ)SÐ(TÐTWÐ!XÔYØ×ÑÑJÁTÓJÔJØ�y‰y˜Ó'Ð'r   c               ó    € V ^8„  d   QhRRRR/# )r   r,   ú
str | Noner   r   r   )r   s   "r   r   r.   Ó   s   € ÷ 3ñ 3¨Zð 3¸Cñ 3r   c                ó¼   a€ ^ RI Ho \        V\        4      '       d   RV9  d   T;'       g    R# \        P
                  ! R4      pV3R lpVP                  W14      # )z@Expand [Pasted text #N -> file] placeholders into file contents.©Úloggerz[Pasted text #r7   z,\[Pasted text #\d+: \d+ lines \u2192 (.+?)\]c                óÆ   <€ \        V P                  ^4      4      p VP                  RR7      #   \         d'    SP	                  RT4       T P                  ^ 4      u # i ; i)rÆ   z	utf-8-sig)Úencodingz8Paste file gone or unreadable, returning placeholder: %s)r   ÚgroupÚ	read_textÚOSErrorÚwarning)ÚmatchÚpathrÛ   s   & €r   Ú_expand_refÚ<CLIStreamMixin._expand_paste_references.<locals>._expand_refÚ   sX   ø€ Ü˜Ÿ™ A›Ó'ˆDð&à—~‘~¨{�~Ó;Ð;øÜô &Ø—‘ÐYÐ[_Ô`Ø—{‘{ 1“~Ò%ð&ús   �/ ¯.A ÁA )r@   rÛ   rH   r   r„   ÚcompileÚsub)r=   r,   Úpaste_ref_rerä   rÛ   s   &&  @r   Ú_expand_paste_referencesÚ'CLIStreamMixin._expand_paste_referencesÓ   sN   ø€ åÜ˜$¤×$Ò$Ð(8ÀÔ(DØ—:�:˜2ÐÜ—z’zÐ"QÓRˆõ		&ð ×Ñ Ó2Ð2r   c               ó    € V ^8„  d   QhRRRR/# )r   r²   r   r   r-   r   )r   s   "r   r   r.   ç   s   € ÷ -ñ -°cð -¸dñ -r   c                ó¼  aa€ ^ RI HoHpHp ^ RIHp \        SV4      '       d&   ^ RIHp V! VV3R lRSP                  R8H  R7       R# \        V R	R
4      pV'       d   ^ RIHp V! RV! R4      ,           4       M"S! 4       P                  RV! 4        RR R24       \        S;'       g    R4      pRV9   d)   S! 4       P                  V P                  V4      VR7       M]V'       d+   ^ RIHp	 S! 4       P                  V	! W‚! 4       4      RR7       M+S! 4       P                  RV! 4        R\#        V4       R24       V'       d   ^ RIHp
 V! V
! R4      4       R# R# )z=Render a user message using the normal chat scrollback style.)ÚChatConsoler´   r_   )ÚTimelineNotification©r3   c                 ó^   <€ S ! 4       P                  R \        SP                  4       R24      # )u	   [dim]â—ˆ z[/dim])ÚprintrÃ   Údisplay_text)rí   r²   s   €€r   Ú<lambda>Ú<CLIStreamMixin._print_user_message_preview.<locals>.<lambda>í   s)   ø€ ©«×(;Ñ(;¸iÌÐPZ×PgÑPgÓHhÐGiÐioÐ<pÔ(qr   r@   rD   )rC   rD   NÚ_modern_layoutF)Ú	separatorry   TÚ[r½   r¹   r7   )Ú	soft_wrap)Úuser_echo_markupr¼   u   ]â—�[/] [bold]©Úclosing_separatorux   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€)r@   rí   r´   r_   Ú$tools.process_registry_notificationsrî   rH   rG   r3   Únotification_categoryrF   rÊ   rö   rñ   r   rÕ   rù   rÃ   rû   )r=   r²   r´   r_   rî   r3   Úmodernrö   r,   rù   rû   rí   s   &f         @r   Ú_print_user_message_previewÚ*CLIStreamMixin._print_user_message_previewç   s#  ù€ ç9Ñ9ÝMÜ�jÐ"6×7Ò7ÝIÙÕ qØ).¸:×;[Ñ;[Ð_kÑ;kõmáÜ˜Ð/°Ó7ˆßÝ>Ù�D™9 T›?Õ*Õ+á‹M×Ñ !¡K£M ?°!°J°<¸sÐ CÔDÜ�:×#Ð# Ó$ˆØ�4Œ<á‹M×Ñ × KÑ KÈDÓ QÐ]cÐÕdßÝEÙ‹M×ÑÑ 0°°{³}Ó EÐQUÐÕVá‹M×Ñ &©«¨°~ÄgÈdÃmÀ_ÐTWÐ XÔYßÝFÙÑ% dÓ+Ö,ñ r   c               ó    € V ^8„  d   QhRRRR/# r+   r   )r   s   "r   r   r.     s   € ÷ ,%ñ ,%¨Cð ,%°Dñ ,%r   c                óÜ  € ^ RI HpHpHp V'       g   R# RV n        \        V RR4      '       d   R# \        V RR4      '       Ed   ^ RIHpHp \        V RR4      '       gG   R\        P                  ! 4       uV n        V n        R	R	uV n        V n        V! R
V! R4      ,           4       \        V RR	4      V,           V n        \        V RR	4      V,           V n        R
V P                  9   d4   V P                  P                  R
^4      w  qpn        V! V! V4      4       KD  \!        V P                  4      ^P8”  d    V! V! V P                  4      4       R	V n        R# \        V RR4      '       gk   RV n        V P#                  4       pR\%        R4       R2p	V^,
          \!        V	4      ,
          p
V! R
V RV	 R\'        V
^,
          ^ 4      ,           RV 24       \        V RR	4      V,           V n        R
V P                  9   d4   V P                  P                  R
^4      w  qpn        V! V V V 24       KD  \!        V P                  4      ^P8”  d"   V! V V P                   V 24       R	V n        R# R# )u8  Stream reasoning tokens into a dim box above the response.

Opened on the first token, closed when content arrives (_emit_stream_text). Once the
response box is open further reasoning is suppressed â€” a late thinking block (e.g. after
an interrupt) would otherwise draw a reasoning box inside the response box.
r\   NTÚ_stream_box_openedFrõ   )Úreasoning_text_linerö   Ú_reasoning_box_openedr7   ry   Ú_reasoning_full_textÚ_reasoning_bufr   zcli.chat.reasoning_labelu   â”Œâ”€õ   â”€u   â”�)r@   r]   r^   r_   Ú_reasoning_shown_this_turnrF   rÊ   r  rö   ÚtimeÚ	monotonicr  Ú_reasoning_started_atr  r  r…   r   Ú_scrollback_box_widthr   rƒ   )r=   r,   r]   r^   r_   r  rö   r}   ÚwÚr_labelÚr_fills   &&         r   rp   Ú&CLIStreamMixin._stream_reasoning_delta  s9  € ÷ 	,Ñ+ßÙØ*.ˆÔ'Ü�4Ð-¨u×5Ò5ÙÜ�4Ð)¨5×1Ó1ßSÜ˜4Ð!8¸%×@Ò@ØIMÌtÏ~Ê~ÓO_ÐF�Ô*¨DÔ,FØACÀRÐ>�Ô# TÔ%>Ù˜™y¨Ó/Õ/Ô0Ü(/°Ð6LÈbÓ(QÐTXÕ(XˆDÔ%Ü")¨$Ð0@À"Ó"EÈÕ"LˆDÔà˜$×-Ñ-Ô-Ø,0×,?Ñ,?×,EÑ,EÀdÈAÓ,NÑ)�Ô)ÙÑ+¨DÓ1Ö2Ü�4×&Ñ&Ó'¨"Ô,ÙÑ+¨D×,?Ñ,?Ó@ÔAØ&(�Ô#ÙÜ�tÐ4°e×<Ò<Ø)-ˆDÔ&Ø×*Ñ*Ó,ˆAØœ!Ð6Ó7Ð8¸Ð:ˆGØ˜•UœS ›\Õ)ˆFÙ�b˜˜˜f W I¨e´c¸&À1½*ÀaÓ6HÕ.HÐ-IÈÈTÈFÐSÔTä% dÐ,<¸bÓAÀDÕHˆÔð �d×)Ñ)Ô)Ø(,×(;Ñ(;×(AÑ(AÀ$ÈÓ(JÑ%ˆDÔ%Ù�t�f˜T˜F 4 &Ð)Ö*Üˆt×"Ñ"Ó# bÔ(Ù�t�f˜T×0Ñ0Ð1°$°Ð8Ô9Ø"$ˆDÖñ )r   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   1  s   € ÷ 
ñ 
°dñ 
r   c                óö   € ^ RI Hp VP                  RR4      P                  R V 4       4      p\	        V RR4      '       g   \	        V RR4      '       d   \	        V R. 4      V.,           V n        R	# V! V4       R	# )
u’  ``agent._print_fn`` for the interactive CLI: agent status lines (subagent completion ``âœ“ [set n Â· i/N]``,
background-process notices, spinner ``print_above`` text) arrive from other threads at any moment. While
a response or reasoning box is being streamed they are HELD and released at the box footer, so a line
never lands between two paragraphs of the reply. Outside a box they print immediately.©r_   Úsepr   c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5ir   )r   )r   Úas   & r   r   Ú5CLIStreamMixin._agent_status_print.<locals>.<genexpr>7  s   é € Ð*@¹4°a¬3¨q¯6¨6»4ùr   Ú_stream_box_liveFr  Ú_held_status_linesN)r@   r_   rc   r‡   rF   r  )r=   ÚargsÚkwargsr_   r,   s   &*,  r   Ú_agent_status_printÚ"CLIStreamMixin._agent_status_print1  sm   € õ
 	 Ø�z‰z˜% Ó%×*Ñ*Ñ*@¹4Ó*@Ó@ˆÜ�4Ð+¨U×3Ò3´w¸tÐE\Ð^c×7dÒ7dÜ&-¨dÐ4HÈ"Ó&MÐQUÐPVÕ&VˆDÔ#ÙÙ�Žr   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   =  s   € ÷ ñ ¨Dñ r   c                ó\   € ^ RI Hp \        V R. 4      . uq n        V F  pV! V4       K  	  R# )zOPrint status lines held while a box was open (called right after a box footer).r  r  N)r@   r_   rF   r  )r=   r_   Úheldr}   s   &   r   Ú_release_held_status_linesÚ)CLIStreamMixin._release_held_status_lines=  s.   € åÜ(/°Ð6JÈBÓ(OÐQSÐ%ˆÔ%ÛˆDÙ�DŽMó r   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   D  s   € ÷ .ñ . dñ .r   c           
     ó  € ^ RI HpHpHp \	        V RR4      '       g   R# \	        V RR4      '       dÊ   ^ RIHpHpHp \	        V RR4      '       d   V! V! V P                  4      4       \	        V R	R
4      pT! T! V'       d   \        P                  ! 4       V,
          MR\	        V RR4      4      4       V! V! R4      4       RRRuV n	        V n        V n        \	        V RR4      '       g   V P                  4        R# \	        V RR4      pV'       d   V! V V V 24       RV n	        V P                  4       p	V! V RRV	^,
          ,           RV 24       RV n        \	        V RR4      '       g   V P                  4        R# R# )zPClose the live reasoning box if it's open (renders the buffered reasoning tail).r\   r  FNrõ   )rû   r  Úthought_liner  r7   r  r8   r  r  u   â””r  u   â”˜)r@   r]   r^   r_   rF   rÊ   rû   r  r&  r  r
  r  r  r  r"  r  )
r=   r]   r^   r_   rû   r  r&  Ústartedr›   r  s
   &         r   Ú_close_reasoning_boxÚ#CLIStreamMixin._close_reasoning_boxD  sd  € ç+Ñ+Ü�tÐ4°e×<Ò<ÙÜ�4Ð)¨5×1Ò1ßiÑiÜ�tÐ-¨r×2Ò2ÙÑ+¨D×,?Ñ,?Ó@ÔAÜ˜dÐ$;¸SÓAˆGÙ‘L¿w¤§¢Ó!1°GÖ!;ÈDÜ!(¨Ð/EÀrÓ!JóLô MáÑ% eÓ,Ô-ØY[Ð]_ÐafÐVˆDÔ Ô!:¸DÔ<VÜ˜4Ð!3°U×;Ò;Ø×/Ñ/Ô1ÙÜ�dÐ,¨bÓ1ˆßÙ�t�f˜S˜E $ Ð(Ô)Ø"$ˆDÔØ×&Ñ&Ó(ˆÙ�4�&˜˜E Q¨¥U�OÐ,¨C°¨vÐ6Ô7Ø%*ˆÔ"Ü�tÐ/°×7Ò7Ø×+Ñ+Ö-ñ 8r   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   _  s   € ÷ Vñ V Tñ Vr   c                ó²  € Vf#   V P                  4        V P                  4        R# V'       g   R# RV n        \        V RR4      V,           V n        \        V R4      '       g   RV n        \        V RR4      '       Eg   V P                  P                  4       p\         EF  pVP                  4       p^ p VP                  WE4      pVR	8X  d   MÊV P                  RV pWwP                  R4      ^,           R P                  4       R8H  ;'       d    RV9   ;'       g    \        V RR4      pV'       d\   V'       d(   V P                  V4       VP                  R4      V n        RV n        V P                  V\        V4      ,           R V n        MV^,           pKä  \        V RR4      '       g   EK   M	  \        V RR4      '       gÁ   V P                  p	\         F\  pVP                  4       p\!        ^\        V4      4       F0  p
VP                  VRV
 4      '       g   K  V P                  RV
)  p	 KZ  	  K^  	  V	'       dE   V P                  V	4       V	P                  R4      V n        V P                  \        V	4      R V n        R# \        V RR4      '       Ed?   V P                  P                  4       p\"         F¬  pVP                  VP                  4       4      pVR	8w  g   K+  RV n        V P$                  '       d)   V P                  RV pV'       d   V P'                  V4       V P                  V\        V4      ,           R pRV n        V'       d   V P)                  V4        R# 	  \        V P                  4      \*        8”  dO   V P$                  '       d$   V P'                  V P                  R\*        )  4       V P                  \*        ) R V n        R# R# )
aD  Line-buffered streaming callback for real-time token rendering.

Emits complete lines via _cprint (reliable under prompt_toolkit's patch_stdout);
reasoning tags are suppressed, or routed to the reasoning box when show_reasoning is on.
``None`` = intermediate turn boundary (tools about to run): flush boxes and reset state.
NTÚ_stream_prefiltr7   Ú_stream_last_was_newlineÚ_in_reasoning_blockFry   rŸ   )Ú_flush_streamÚ_reset_stream_stateÚ_stream_startedrF   r,  rS   r-  ÚlowerÚ
_OPEN_TAGSÚfindr™   r{   Ú_emit_stream_textr¨   r.  r   ÚrangeÚ_CLOSE_TAGSrn   rp   Ú_stream_deltaÚ_MAX_CLOSE_TAG_LEN)r=   r,   Úprefilt_lowerÚtagÚ	tag_lowerr�   ÚidxÚ	precedingÚis_block_boundaryÚsafeÚiÚinnerÚafters   &&           r   r8  ÚCLIStreamMixin._stream_delta_  sb  € ð Š<Ø×ÑÔ Ø×$Ñ$Ô&ÙßÙØ#ˆÔÜ& tÐ->ÀÓCÀdÕJˆÔô
 �tÐ7×8Ò8Ø,0ˆDÔ)ä�tÐ2°E×:Ó:à ×0Ñ0×6Ñ6Ó8ˆMß!�z�ØŸI™I›K�	Ø �ØØ'×,Ñ,¨YÓE�CØ˜b”yØØ $× 4Ñ 4°T°cÐ :�Ið )2·/±/À$Ó2GÈ!Õ2KÐ2LÐ(M×(SÑ(SÓ(UÐY[Ñ([÷ )^ð )^Ø 	Ñ)×\Ð\¬W°TÐ;UÐW[Ó-\ð &ç(ß$Ø ×2Ñ2°9Ô=Ø<E×<NÑ<NÈtÓ<T˜DÔ9Ø37˜Ô0Ø/3×/CÑ/CÀCÌ#ÈcË(ÅNÀOÐ/T˜Ô,ØØ#&¨¥7’LÜ˜4Ð!6¸×>Õ>Ùñ+ "ô. ˜4Ð!6¸×>Ò>à×+Ñ+�ß%�CØ #§	¡	£�IÜ" 1¤c¨#£hÖ/˜Ø(×1Ñ1°)¸B¸Q°-×@Ô@Ø#'×#7Ñ#7¸¸!¸Ð#<˜DÚ!ó 0ñ &÷ Ø×*Ñ*¨4Ô0Ø48·M±MÀ$Ó4G�DÔ1Ø+/×+?Ñ+?ÄÀDÃ	À
Ð+K�DÔ(Ùô �4Ð.°×6Ó6Ø ×0Ñ0×6Ñ6Ó8ˆMß"�Ø#×(Ñ(¨¯©«Ó5�Ø˜"–9Ø/4�DÔ,Ø×*×*Ð*Ø $× 4Ñ 4°T°cÐ :˜ß Ø ×8Ñ8¸Ô?Ø ×0Ñ0°´s¸3³xµ°ÐA�EØ+-�DÔ(ßØ×*Ñ*¨5Ô1Úñ #ô �4×'Ñ'Ó(Ô+=Ô=Ø×&×&Ð&Ø×0Ñ0°×1EÑ1EÐFZÔHZÐGZÐ1[Ô\Ø'+×';Ñ';Ô=OÐ<OÐ<PÐ'Q�Ô$Ùñ+ 7r   c               ó    € V ^8„  d   QhRRRR/# )r   Úprinted_liner   r   r-   r   )r   s   "r   r   r.   ·  s   € ÷ bñ b¨cð b°dñ br   c                ó|   € ^ RI HpHpHp \	        V RR4      pT! V'       d   V V V V 24       R# V V 24       R# )zHPrint one response line with the skin's true-color text escape (if any).)r^   Ú_STREAM_PADr_   Ú_stream_text_ansir7   N)r@   r^   rH  r_   rF   )r=   rF  r^   rH  r_   Ú_tcs   &&    r   Ú_emit_stream_lineÚ CLIStreamMixin._emit_stream_line·  sJ   € ç2Ñ2Ü�dÐ/°Ó4ˆÙß9<ˆ{ˆm˜C˜5  ¨t¨fÐ5ö	bØEPÀMÐR^ÐQ_ÐB`ö	br   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   ¾  s   € ÷ 'ñ '¨ñ 'r   c                ó"  € ^ RI HpHpHp V P                  p. V n        RV n        V'       g   R# RP                  V4      pV P                  R8X  d	   V! V4      pV! WR! 4       4      pVP                  R4       F  pV P                  V4       K  	  R# )z¨Emit the held table block re-aligned as a whole. Cell-level markdown is stripped FIRST
so the realigner pads to the final visible width, not the marker-decorated width.)Ú_strip_markdown_syntaxÚ_terminal_width_for_streamingÚrealign_markdown_tablesFNry   r{   )
r@   rO  rP  rQ  Ú_stream_table_bufÚ_in_stream_tabler‡   Úfinal_response_markdownr…   rK  )r=   rO  rP  rQ  r›   ÚjoinedÚblockÚlns   &       r   Ú_flush_stream_table_bufÚ&CLIStreamMixin._flush_stream_table_buf¾  s…   € ÷	\ñ 	\à×$Ñ$ˆØ!#ˆÔØ %ˆÔßÙØ—‘˜3“ˆØ×'Ñ'¨7Ô2Ù+¨FÓ3ˆFÙ'¨Ð0MÓ0OÓPˆØ—+‘+˜dÖ#ˆBØ×"Ñ" 2Ö&ó $r   c               ó    € V ^8„  d   QhRRRR/# r+   r   )r   s   "r   r   r.   Ï  s   € ÷ Oñ O cð O¨dñ Or   c                ó,  a€ ^ RI HpHp ^ RIHpHpHpHpHpH	p	H
p
 V'       g   R# V P                  4        V P                  '       Eg|   VP                  R4      pV'       g   R# RV n        RV n         ^ RIHp V! 4       pVP#                  RR4      pVP%                  R	R
4      o V3R lR 4       w  rïpRV RV RV R2V n        V P.                  '       d0   V RV
P1                  4       P3                  \5        V RR4      4       2p\5        V RR4      '       dR   ^ RIHp T! T! V P.                  '       d+   V
P1                  4       P3                  \5        V RR4      4      MR4      4       MZV P;                  4       pV^,
          VP=                  V4      ,
          pV! RV RV R\?        V^,
          ^ 4      ,           RV 24       \5        V RR4      V,           V n         V ;PB                  V,          un!        RV PB                  9   dß   V PB                  PE                  R^4      w  pV n!        V PF                  '       dK   V! V4      '       g   V! V4      '       d   V PH                  PK                  V4       K€  V PM                  4        M2V! V4      '       d%   V PH                  PK                  V4       RV n#        KÃ  V PN                  R8X  d	   V	! V4      pV PQ                  V4       Kï  V PB                  '       d×   V PF                  '       gÃ   V PB                  P                  4       PS                  R4      '       g’   \U        V PB                  4      ^P8¼  dv   V PB                  \W        V4      ) R pVPY                  R4      p^ Tu;8  d   \U        V4      ^,
          8  d   M MVV^,           R p RV 2V n-        V P]                  4        R# R# R# R# R#   \&         d	    RpR
o EL=i ; i  \*        \,        3 d    RT n         EL;i ; i  \&         d     R# i ; i)z,Emit filtered text to the streaming display.©Úis_table_dividerÚlooks_like_table_row)Ú	HermesCLIÚ_ACCENTr^   Ú_STREAM_PARTIAL_PREVIEW_LENr_   rO  rµ   Nry   T)Úget_active_skinÚresponse_labelu
   â˜¤ HermesÚbanner_textz#FFF8DCc              3  óN   <"  € T F  p\        SW^,            ^4      x € K  	  R# 5i)r   N)r    )r   rA  Ú	_text_hexs   & €r   r   Ú3CLIStreamMixin._emit_stream_text.<locals>.<genexpr>ê  s$   øé € ÐMÁ9¸aœc )¨A°!­eÐ"4°b×9Ð9Ã9ùs   ƒ"%z[38;2;r¦   Úmr7   r   r·   r¸   rõ   F)Úanswer_labelu   â•­â”€r  u   â•®Ú_streamed_text_this_turnr{   Ú|u   â€¦ )rÆ   é   r€   )/Úagent.markdown_tablesr]  r^  r@   r_  r`  r^   ra  r_   rO  rµ   r(  r  rª   r  Úhermes_cli.skin_enginerb  Úget_brandingÚ	get_colorr%   rI  Ú
ValueErrorÚ
IndexErrorr¶   rÈ   rÉ   rF   rÊ   ri  r  Ú_status_bar_display_widthrƒ   rj  Ú_stream_bufr…   rS  rR  rT   rX  rT  rK  Ú
startswithr   r    r4  r:   r<   )r=   r,   r]  r^  r_  r`  r^   ra  r_   rO  rµ   rb  Ú_skinÚlabelÚ_rÚ_gÚ_bri  r  rŠ   r}   r‘   r¯   rf  s   &&                     @r   r5  Ú CLIStreamMixin._emit_stream_textÏ  s¹  ø€ çP÷	n÷ 	nñ 	nçÙð 	×!Ñ!Ô#ð ×&×&Ñ&Ø—;‘;˜tÓ$ˆDßÙØ&*ˆDÔ#Ø$(ˆDÔ!ð&ÝBÙ'Ó)�Ø×*Ñ*Ð+;¸\ÓJ�Ø!ŸO™O¨M¸9ÓE�	ð,ÜMÁ9ÓM‘
�˜Ø+5°b°T¸¸2¸$¸aÀ¸tÀ1Ð)E�Ô&ð ×#×#Ð#Ø ˜'  8§<¡<£>×#:Ñ#:¼7À4ÐI[Ð]dÓ;eÓ#fÐ"gÐh�Ü�tÐ-¨u×5Ò5ÝEÙ™Ø(,×(<×(<Ð(<ð &.§\¡\£^×%<Ñ%<¼WÀTÐK]Ð_fÓ=gÔ%hØBDóFõ Gð ×.Ñ.Ó0�Ø˜1•u˜y×BÑBÀ5ÓIÕI�Ù˜"˜W˜I V¨E¨7°5¼3¸tÀa½xÈÓ;KÕ3KÐ2LÈCÐPTÈvÐVÔWô )0°Ð6PÐRTÓ(UÐX\Õ(\ˆÔ%Ø×Ò˜DÕ ÕØ�d×&Ñ&Ô&Ø%)×%5Ñ%5×%;Ñ%;¸DÀ!Ó%DÑ"ˆD�$Ô"ð ×$×$Ð$Ù'¨×-Ò-Ñ1AÀ$×1GÒ1GØ×*Ñ*×1Ñ1°$Ô7ÙØ×,Ñ,Õ.Ù% d×+Ò+Ø×&Ñ&×-Ñ-¨dÔ3Ø(,�Ô%ÙØ×+Ñ+¨wÔ6Ù-¨dÓ3�Ø×"Ñ" 4Ö(ð ××ÐØ×)×)Ð)Ø×$Ñ$×+Ñ+Ó-×8Ñ8¸×=Ò=Ü�D×$Ñ$Ó%¨Ô+Ø×&Ñ&¬Ð,GÓ(HÐ'HÐ'IÐJˆGØ—,‘,˜sÓ#ˆCØ�3Ö)œ˜W›¨Õ)×)Ø! #¨¥' (Ð+�ðØ'+¨G¨9Ð%5�Ô"Ø× Ñ Ö"ñ ,ñ >ñ *ñ øôY ô &Ø$�Ø%“	ð&ûô ¤
Ð+ô ,Ø)+�×&ð,ûôb ô Úðús6   Á31O Â% O% Î+P ÏO"Ï!O"Ï%PÐ PÐPÐPc               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.      s   € ÷ !*ñ !*˜tñ !*r   c                ó
  € ^ RI HpHp ^ RIHpHpHpHp \        V RR4      '       d=   \        V RR4      '       d*   RV n	        V P                  V P                  4       RV n        V P                  4        V P                  '       dp   \        V RR4      '       d]   V! V P                  4      '       g   V! V P                  4      '       d-   V P                  P                  V P                  4       RV n        \        V RR	4      '       d   V P!                  4        V P                  '       dH   V P"                  R
8X  d   V! V P                  4      MV P                  pV P%                  V4       RV n        V P&                  '       dj   \        V RR4      '       dW   \        V RR4      '       d   ^ RIHp V! V! R4      4       M.V P-                  4       p	V! V RRV	^,
          ,           RV 24       RV n        V P1                  4        R	# )zIEmit any remaining partial line from the stream buffer and close the box.r\  )r`  r^   r_   rO  r.  Fr,  r7   rS  rR  Nr{   r  rõ   rú   Tu   â•°r  u   â•¯)rm  r]  r^  r@   r`  r^   r_   rO  rF   r.  r5  r,  r(  rt  rR  rT   rX  rT  rK  r  rÊ   rû   r  r  r"  )
r=   r]  r^  r`  r^   r_   rO  r}   rû   r  s
   &         r   r/  ÚCLIStreamMixin._flush_stream   s¥  € çPßFÓFô �4Ð.°×6Ò6¼7À4ÐIZÐ\^×;_Ò;_Ø',ˆDÔ$Ø×"Ñ" 4×#7Ñ#7Ô8Ø#%ˆDÔ Ø×!Ñ!Ô#ð ××ÐÜ˜Ð0°%×8Ò8Ù% d×&6Ñ&6×7Ò7Ñ;KÈD×L\ÑL\×;]Ò;]Ø×"Ñ"×)Ñ)¨$×*:Ñ*:Ô;Ø!ˆDÔÜ�4Ð,¨d×3Ò3Ø×(Ñ(Ô*Ø××ÐØ?C×?[Ñ?[Ð_fÔ?fÑ)¨$×*:Ñ*:Ô;Ðlp×l|Ñl|ˆDØ×"Ñ" 4Ô(Ø!ˆDÔØ×"×"Ð"¤w¨tÐ5GÈ×'OÒ'OÜ�tÐ-¨u×5Ò5ÝJÙÑ)¨$Ó/Õ0à×.Ñ.Ó0�Ù˜7˜) 3 u°°Aµ¥Ð&7°s¸4¸&ÐAÔBØ %ˆÔØ×'Ñ'Ö)r   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   C  s   € ÷ &ñ & Tñ &r   c                óô   € RV n         RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n	        V P                  P                  RR4       . V n        RV n        RV n        R# )z3Reset streaming state before each agent invocation.r7   FTÚ_tool_gen_announcedN)rt  r1  r  rI  r,  r.  r-  r  r  r—   Ú__dict__ÚpoprR  rS  r  rs   s   &r   r0  Ú"CLIStreamMixin._reset_stream_stateC  s   € àˆÔØ$ˆÔØ"'ˆÔØ!#ˆÔØ!ˆÔØ#(ˆÔ Ø(,ˆÔ%Ø%*ˆÔ"Ø ˆÔØ&(ˆÔ#à�‰×ÑÐ/°Ô6Ø!#ˆÔØ %ˆÔØ %ˆÖr   c               ó    € V ^8„  d   QhRRRR/# )r   Úcommandr   r   r   )r   s   "r   r   r.   U  s   € ÷ 	2ñ 	2¨Cð 	2°Cñ 	2r   c                ó
  € VP                  4       P                  4       p\        P                  V4      pV'       d   \	        V4      # \
         F)  w  rEVP                  V4      '       g   K  \	        V4      u # 	  \	        R4      # )z>Return a user-facing status message for slower slash commands.zcli.stream.processing_command)r2  r{   Ú_SLOW_COMMAND_STATUS_EXACTrc   r   Ú_SLOW_COMMAND_STATUSru  )r=   r†  Ú	cmd_lowerÚexactÚprefixri   s   &&    r   Ú_slow_command_statusÚ#CLIStreamMixin._slow_command_statusU  sf   € à—M‘M“O×)Ñ)Ó+ˆ	Ü*×.Ñ.¨yÓ9ˆßÜ�U“8ˆOß/‰KˆFØ×#Ñ# F×+Ô+Ü˜“v’ñ 0ô Ð0Ó1Ð1r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r.   `  s   € ÷ bñ b¨ñ br   c                ó†   € ^ RI Hp V\        \        P                  ! 4       ^
,          4      \        V4      ,          ,          # )z9Return the current spinner frame for slow slash commands.)Ú_COMMAND_SPINNER_FRAMES)r@   r‘  r    r
  r  r   )r=   r‘  s   & r   Ú_command_spinner_frameÚ%CLIStreamMixin._command_spinner_frame`  s,   € å/Ø&¤s¬4¯>ª>Ó+;¸bÕ+@Ó'AÄCÐH_ÓD`Õ'`ÕaÐar   Úblocks_inputTc               ó    € V ^8„  d   QhRRRR/# )r   Ústatusr   r”  r•   r   )r   s   "r   r   r.   f  s   € ÷ /ñ / Cð /¸$ñ /r   c             #  ó@  "  € ^ RI Hp \        V RR4      pRV n        W n        Wn        V P                  RR7        V! RV 24       Rx € RV n        W@n        R	V n        V P                  RR7       R#   RT n        Y@n        R	T n        T P                  RR7       i ; i5i)
zùExpose a temporary busy state in the TUI while a slash command runs.

Most sync slash commands reserve the composer (their completion changes session state);
manual compression is safe to draft through (queued input runs against compacted history).
r  Ú_command_blocks_inputFTr8   )Úmin_intervalu   â�³ Nr7   )r@   r_   rF   Ú_command_runningr˜  Ú_command_statusr<   )r=   r–  r”  r_   Úprevious_blocks_inputs   &&$  r   Ú_busy_commandÚCLIStreamMixin._busy_commande  s¦   é € õ 	 Ü '¨Ð.EÀuÓ MÐØ $ˆÔØ%1Ô"Ø%ÔØ×Ñ cÐÔ*ð	/Ù�d˜6˜(�OÔ$Ûà$)ˆDÔ!Ø)>Ô&Ø#%ˆDÔ Ø×Ñ¨#ÐÖ.øð %*ˆDÔ!Ø)>Ô&Ø#%ˆDÔ Ø×Ñ¨#ÐÕ.üs   ‚9B¼A3 Á(BÁ3(BÂBÚannouncec               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r,   r   ÚimagesÚlistrŸ  r•   r   r   )r   s   "r   r   r.   {  s*   € ÷ 5=ñ 5=°3ð 5=Àð 5=ÐSWð 5=Ðcfñ 5=r   c               ót  aaa€ ^ RI HoHoHo ^ RIp^ RIHp ^ RIHp Rp. pV EFQ  p	V	P                  4       '       g   K  V	P                  4       P                  R,          p
V'       d&   S! RS \        RV	P                  V
R	7       S 24        VP                  V! \        V	4      VR
7      4      p\         P"                  ! V4      pVP%                  R4      '       dQ   VP%                  RR4      pVP'                  RV RV	 R24       V'       d   S! RS \        R4       S 24       EK  EK
  VP'                  RV	 R24       V'       d+   V! VVV3R lR\)        \)        V RR4      RR4      R7       EKQ  EKT  	  \-        V\        4      '       d   V'       d   TMRpV'       d#   RP/                  V4      pV'       d   V RV 2# T# T;'       g    R#   \*         d[   pTP'                  RT RT	 R24       T'       d/   T! TTT3R lR\)        \)        T RR4      RR4      R7        Rp?EK   Rp?EK  Rp?ii ; i)zôDescribe attached images via the auxiliary vision model and prepend the descriptions
to the user's text (works with non-vision models; same approach as the gateway). The
local path is included so the agent can re-examine via ``vision_analyze``.r\   Nrï   )Úvision_analyze_toolz¦Describe everything visible in this image in thorough detail. Include any text, code, data, objects, people, layout, colors, and any other notable visual information.i   r   zcli.stream.vision_analyzing)ÚnameÚsize_kb)Ú	image_urlÚuser_promptrb   Úanalysisr7   z6[The user attached an image. Here's what it contains:
zA]
[If you need a closer look, use vision_analyze with image_url: r½   zcli.stream.vision_analyzedzw[The user attached an image but it couldn't be analyzed. You can try examining it with vision_analyze using image_url: c                 ó4   <€ S! R S  \        R4       S 24      # )r   zcli.stream.vision_failedr   r\   s   €€€r   ró   Ú?CLIStreamMixin._preprocess_images_with_vision.<locals>.<lambda>   s"   ø€ ±G¸bÀÀÄqÐIcÓGdÐFeÐfjÐekÐ<lÔ4mr   r@   r0   rA   )rC   rE   z1[The user attached an image but analysis failed (zA). You can try examining it with vision_analyze using image_url: c                 ó4   <€ S! R S  \        R4       S 24      # )r   zcli.stream.vision_errorr   r\   s   €€€r   ró   r«  ¨  s"   ø€ ±¸"¸T¸FÄ1ÐE^ÓC_ÐB`ÐaeÐ`fÐ8gÔ0hr   r    zWhat do you see in this image?)r@   r]   r^   r_   ÚasynciorG   r3   Útools.vision_toolsr¤  ÚexistsÚstatÚst_sizer   r¥  Úrunr   ÚjsonÚloadsrc   rT   rF   r%   rH   r‡   )r=   r,   r¡  rŸ  Ú_asyncior3   r¤  Úanalysis_promptÚenriched_partsÚimg_pathr¦  Úresult_jsonÚresultÚdescriptionÚeÚ	user_textrŒ  r]   r^   r_   s   &&&$             @@@r   Ú_preprocess_images_with_visionÚ-CLIStreamMixin._preprocess_images_with_vision{  sW  ú€ ÷ 	,Ñ+Û"ÝEÝ:ð8ð 	ð ˆÜˆHØ—?‘?×$Ò$ÙØ—m‘m“o×-Ñ-°Õ5ˆGßÙ˜"˜T˜F¤1Ð%BÈÏÉÐ`gÔ#hÐ"iÐjnÐioÐpÔqðIØ&Ÿl™lÙ'´#°h³-È_Ô]ó_�äŸš KÓ0�Ø—:‘:˜i×(Ò(Ø"(§*¡*¨Z¸Ó"<�KØ"×)Ñ)ØQÐR]ÐQ^ð _&à&. Z¨qð2ô3÷  Ù " T F¬1Ð-IÓ+JÐ*KÈDÈ6Ð R×Sò  ð #×)Ñ)ð&à&. Z¨qð2ô3÷  Ù+Ö,mØ5:ÌÔPWÐX\Ð^eÐgkÓPlð  oEð  GKó  IL÷Mð Mò  ñ/ ôH ' t¬S×1Ò1·d‘DÀˆ	ßØ—[‘[ Ó0ˆFß1:�f�X˜T ) Ð-ÐFÀÐFØ×<Ð<Ð<Ð<øô ô IØ×%Ñ%ØGÈÀsð K"à"* ¨1ð.ô/÷ Ù'Ö(hØ16ÄGÌGÐTXÐZaÐcgÓLhð  kAð  CGó  EH÷Iô Iö ûðIús,   ÂB GÄGÄ.GÅ'GÇH7ÇAH2È2H7c                ó‚   € ^ RI Hp \        V RR4      '       d   V! 4       MV P                  pVP                  ! V/ VB  R# )zvPrint through the active command-safe console (prompt_toolkit-safe Rich once the
TUI is live, else the plain console).)rí   Ú_appN)r@   rí   rF   Úconsolerñ   )r=   r  r  rí   rÂ  s   &*,  r   Ú_console_printÚCLIStreamMixin._console_print²  s3   € õ 	$Ü#*¨4°¸×#>Ò#>‘+”-ÀDÇLÁLˆØ�Š�tÐ&˜vÔ&r   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	tool_namer   r   r-   r   )r   s   "r   r   r.   ¹  s   € ÷ vñ v¨Cð v°Dñ vr   c                óú  € ^ RI Hp \        V RR4      '       d   V P                  4        RV n        V P                  4        V P                  P                  R\        4       4      pW9   d   R# TP                  V4       ^ RI
HpHp V! V4      ;'       g    Tp\        V RR4      '       d2   V! VRR	7       R
\        RVR7       2V n        V P                  4        R# V! R\        RV! VRR	7      VR7       24       R# )a¨  Model began generating tool-call arguments: close open boxes once, then print a status
line so a large payload (e.g. 45 KB write_file) doesn't look like a frozen screen.

Fires once per tool CALL, so a batch of parallel calls to the same tool printed the same
line N times (#10478); repeats within one generation batch are coalesced. The set is
cleared when a tool actually starts (``tool.started``), i.e. on the next batch.r  r  Fr�  N)Úbridge_generating_phraseÚget_tool_emojirõ   u   âš¡r&   r   zcli.modern.preparing)Úwhatu     â”Š zcli.stream.tool_preparing)ÚemojirÊ  )r@   r_   rF   r/  r  r(  r‚  Ú
setdefaultÚsetÚaddÚagent.displayrÈ  rÉ  r   r:   r<   )r=   rÆ  r_   Ú	announcedrÈ  rÉ  rÊ  s   &&     r   Ú_on_tool_gen_startÚ!CLIStreamMixin._on_tool_gen_start¹  sá   € õ 	 Ü�4Ð-¨u×5Ò5Ø×ÑÔ Ø&+ˆDÔ#Ø×!Ñ!Ô#Ø—M‘M×,Ñ,Ð-BÄCÃEÓJˆ	ØÔ!ÙØ�‰�iÔ ßJÙ'¨	Ó2×?Ð?°iˆÜ�4Ð)¨5×1Ò1Ù$2°9ÀeÔ$LÐ#MÈQÌqÐQgÐnrÔOsÐNtÐ!uˆDÔØ×ÑÔÙÙ�&œÐ6¹nÈYÐ`eÔ>fÐmqÔrÐsÐtÖur   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú
event_typer   Úfunction_namerØ   r‘   Úfunction_argszdict | Noner   )r   s   "r   r   r.   Ñ  s4   € ÷ jñ j¨Cð jÀ
ð jÐ\fð jð  Jñ jr   c                óè
  € ^ RI HpHpHpHp	Hp
 VR8X  d¶   T;'       g    \        R4      pT;'       g    RpVP                  R4      pVP                  R4      pV'       d   V'       d   \        RWÞVR7      M\        R	VR
7      p V P                  RR7       V	! RV RV V 24        V P                  V4       V P                  4        R# VR8X  dD   T;'       g    RpV'       d   \        RVR7      M
\        R4      V n        V P                  4        R# VR8X  d%   RV n        V P                  P!                  RR4       MLVR8X  d    VP                  R4      '       d	   RV n        M&V'       d   VP%                  R4      '       d   RV n        VR8X  Ed   RV n        V P)                  V4       V P+                  W%P                  R4      VP                  RR4      4       \-        V RR4      '       d    T P/                  T;'       g    R4       V'       Ed|   V P0                  R-9   Edj   VP                  RR4      pV P2                  P                  V4      pV'       d   VP!                  ^ 4      M/ pVe   V'       g   V P2                  V V P0                  R8X  d#   W P4                  8X  d   V P                  4        R# Y n         ^ R IHp V	! V! WVVVP                  R4      VP                  RR4      4      4        \-        V R!R4      '       g„   V P0                  R8X  ds   VR"8¼  dl   ^ R#IHpHpH pH!p V! VV4      '       gQ   RV n"        V	! RV V! 4        V 24       V! V
R$,          V4       RVPG                  R%/ 4      PG                  R&/ 4      V&   V P                  4        R# VR8w  d"   V PI                  WW5P                  R'4      4      # V'       Ed   VP%                  R(4      '       gú   ^ R)I%H&pH'p T;'       g    TpV! 4       pV^ 8”  d$   \Q        V4      V8”  d   VRV^,
           R*,           pV! W$4       R+V 2V n        V P                  PG                  R,/ 4      PG                  V. 4      PS                  V P                  4       \T        PV                  ! 4       V n        V P2                  PG                  V. 4      PS                  Ve   TM/ 4       V P                  4        R# R# R#   \         d     EL^i ; i  \         d8    TP                  4       '       d   T	! RT TP                  4        T 24        EL�i ; i  \         d     EL@i ; i  \         d     ELei ; i  \         d     ELài ; i).züTool lifecycle events (tool.started / tool.completed / reasoning.* / moa.*).

Drives the TUI spinner (tool.started stamps the elapsed timer); in "all"/"new"/"verbose"
progress modes tool.completed also commits a stacked scrollback line (tool history).
)Ú
CLI_CONFIGr]   r^   r_   Ú_hermes_homezmoa.referencezcli.stream.reference_nounr7   Ú	moa_indexÚ	moa_countz#cli.stream.reference_header_indexed)Úindexr‚   rw  zcli.stream.reference_header)rw  Tr5   r   u   â”Š â—‡ Nzmoa.aggregatingzcli.stream.aggregating_detail)Údetailzcli.stream.aggregatingztool.startedFr�  ztool.completedÚis_errorÚ	reasoningr8   rº  Ú_focus_view_enabledÚnewÚallÚduration)Úcompleted_tool_lineÚ_long_tool_hint_firedg      >@)ÚTOOL_PROGRESS_FLAGÚis_seenÚ	mark_seenÚtool_progress_hint_clizconfig.yamlÚ
onboardingÚseenÚpercentÚ_)Úget_tool_preview_max_lenÚtool_row_emojiz...r   Ú_running_tool_labels>   râ  rá  rq   ),r@   rØ  r]   r^   r_   rÙ  r   rc   r9   r%   r’   r{   r<   r:   Ú_pet_reasoningr‚  rƒ  Ú_pet_turn_errorru  r;   Ú_forget_tool_labelÚ_turn_summary_recordrF   Ú_note_focus_hidden_lineÚtool_progress_modeÚ_pending_tool_infoÚ_last_scrollback_toolrÊ   rä  Úagent.onboardingræ  rç  rè  ré  rå  rÌ  Ú_show_tool_progressrÏ  rî  rï  r   rT   r
  r  )r=   rÔ  rÕ  r‘   rÖ  r  rØ  r]   r^   r_   rÙ  rw  r,   r=  r‚   ÚheaderÚaggrã  ÚstoredÚstored_argsrä  ræ  rç  rè  ré  rî  rï  Ú_pls   &&&&&,                      r   Ú_on_tool_progressÚ CLIStreamMixin._on_tool_progressÑ  sú  € ÷ 	FÕEð ˜Ô(Ø!×CÐC¤QÐ'BÓ%CˆEØ—=�=˜bˆDØ—*‘*˜[Ó)ˆCØ—J‘J˜{Ó+ˆEßgj×ot”aÐ=ÀSÐ]bÕcÜÐ:À%ÔHð ðØ×-Ñ-°DÐ-Ô9ñ �b˜˜˜h v h¨t¨fÐ5Ô6ð=Ø×,Ñ,¨TÔ2ð ×ÑÔÙØÐ*Ô*Ø×%Ð% 2ˆCßSV¤Ð#BÈ3Õ!OÔ\]Ð^vÓ\wˆDÔØ×ÑÔÙð ˜Ô'Ø"'ˆDÔØ�M‰M×ÑÐ3°TÕ:ØÐ+Ô+°·
±
¸:×0FÒ0FØ#'ˆDÕ ß˜J×1Ñ1°+×>Ò>Ø"&ˆDÔàÐ)Õ)Ø$'ˆDÔ!Ø×#Ñ# MÔ2Ø×%Ñ%ØŸz™z¨(Ó3°V·Z±ZÀ
ÈEÓ5RôTô �tÐ2°E×:Ò:ðØ×0Ñ0°×1DÐ1DÀ"ÔE÷
 ˆ} ×!8Ñ!8Ð<UÕ!UØ!Ÿ:™: j°#Ó6�à×0Ñ0×4Ñ4°]ÓC�ß/5˜fŸj™j¨œm¸2�ØÒ%¯fØ×/Ñ/°Ð>à×*Ñ*¨eÔ3¸×IcÑIcÔ8cØ×$Ñ$Ô&ÙØ-:Ô*ðÝPÙÑ/°À[ÐRZÐ\b×\fÑ\fÐgoÓ\pØ06·
±
¸:ÀuÓ0MóOô Pðä# DÐ*AÀ5×IÒIØ ×3Ñ3°uÔ<Ø$¨Ô,÷\ó \á& zÐ3E×FÒFØ9=˜DÔ6Ù# b¨¨Ñ/EÓ/GÐ.HÈÈÐ$OÔPÙ% l°]Õ&BÐDVÔWØqu˜J×1Ñ1°,ÀÓC×NÑNÈvÐWYÓZÐ[mÑnð ×ÑÔÙØ˜Ô'Ø×+Ñ+¨JÀw×PZÑPZÐ[dÓPeÓfÐfßˆ= ×!9Ñ!9¸#×!>Ò!>ßNØ×,Ð,˜}ˆEÙ*Ó,ˆCØ�QŒwœ3˜u›:¨Ô+Ø˜h˜s Q�w˜¨%Õ/�Ù$2°=Ó$PÐ#QÐQRÐSXÐRYÐ!ZˆDÔØ�M‰M×$Ñ$Ð%;¸RÓ@×KÑKÈMÐ[]Ó^×eÑeÐfj×fxÑfxÔyÜ$(§N¢NÓ$4ˆDÔ!à×#Ñ#×.Ñ.¨}¸bÓA×HÑHØ!.Ò!:‘ÀôDà×ÑÖñ "?‰=øôY ô Úðûô
 ô =Ø—:‘:—<’<Ù˜b   t§z¡z£| n°T°FÐ;Ô<úð=ûô: !ô Úðûô( !ô Úðûô  !ô Úðúsn   ÂS' Â(S9 Ç1T> ÈT> Ë7U Ë:AU" Í AU" Ó'S6Ó5S6Ó9 T;ÔT;Ô:T;Ô>UÕUÕUÕUÕ"U1Õ0U1c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   =  s   € ÷ *ñ *°4ñ *r   c                	óÂ   € V P                   P                  R / 4      pVP                  V4      '       d,   W!,          P                  ^ 4       W!,          '       g   W! R# R# R# )rð  N)r‚  rc   rƒ  )r=   rÕ  Úlabelss   && r   ró  Ú!CLIStreamMixin._forget_tool_label=  sR   € Ø—‘×"Ñ"Ð#9¸2Ó>ˆØ�:‰:�m×$Ò$ØÕ!×%Ñ% aÔ(Ø×(Ô(ØÒ)ñ )ñ %r   c               ó   € V ^8„  d   QhRR/# rL   r   )r   s   "r   r   r.   D  s   € ÷ 	ñ 	ÐRVñ 	r   c                ó¬  € V P                   P                  R/ 4      pVP                  V4      ;'       g    . pVR8X  d–   \        V4      ^8X  d„   \        \	        \        VP                  4       4      4      ^8X  dV   V^ ,          .Ve   V R2.M. ,           V'       d   V.M. ,           pRP                  V4      V n        V P                  4        R# R# R# R# )u  Live MCP progress rides the spinner line: ``<tool label> Â· 42% Â· message``. The CLI has one
spinner, so progress shows only while exactly one call of that tool runs and nothing else does:
with parallel calls the label could belong to another call (tool.started carries no call id).rð  ztool.progressNÚ%u    Â· )	r‚  rc   r   ÚsumÚmapÚvaluesr‡   r:   r<   )r=   rÔ  rÕ  Úmessagerì  r  ÚrunningÚpartss   &&&&&   r   rú  Ú"CLIStreamMixin._show_tool_progressD  s»   € ð —‘×"Ñ"Ð#9¸2Ó>ˆØ—*‘*˜]Ó+×1Ð1¨rˆØ˜Ô(¬S°«\¸QÔ->Ä3ÄsÌ3ÐPV×P]ÑP]ÓP_ÓG`ÓCaÐefÔCfØ˜Q•Z�L°wÒ7J¨ y° ]¡OÐPRÕS×dkÐX_ÑW`ÐqsÕtˆEØ!'§¡¨UÓ!3ˆDÔØ×ÑÖñ DgÑ->Ñ(r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Útool_call_idr   rÕ  rÖ  Údictr   )r   s   "r   r   r.   O  s'   € ÷ 	^ñ 	^¨3ð 	^¸sð 	^ÐSWñ 	^r   c                ó¤   € ^ RI Hp  ^ RIHp V! W#4      pVe   W`P                  V&   R# R#   \
         d    TP                  RTRR7        R# i ; i)z3Capture local before-state for write-capable tools.rÚ   )Úcapture_local_edit_snapshotNz#Edit snapshot capture failed for %sT©Úexc_info)r@   rÛ   rÏ  r  Ú_pending_edit_snapshotsr%   Údebug)r=   r  rÕ  rÖ  rÛ   r  Úsnapshots   &&&&   r   Ú_on_tool_startÚCLIStreamMixin._on_tool_startO  sV   € åð	^ÝAÙ2°=ÓPˆHØÒ#Ø=E×,Ñ,¨\Ó:ñ $øäô 	^Ø�L‰LÐ>ÀÐX\ˆL×]ð	^ús   ˆ , ¬AÁAc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r  r   rÕ  rÖ  r  Úfunction_resultr   )r   s   "r   r   r.   Z  s0   € ÷ Zñ Z¨cð ZÀ#ð ZÐVZð ZÐmpñ Zr   c           	     óœ  € ^ RI HpHp VR8X  d¹    \        V\        4      '       d   \
        P                  ! V4      MT;'       g    / p\        V\        4      '       dj   VP                  R4      R8X  dT   VP                  R4      R8X  d>   VP                  R4      ;'       g    ^pV^8X  d   RMR	p	 V! R
\        W˜R7       R24       T P                  P                  VR4      p
 ^ RIHp ^ RIHp V! W$W:V! V4      R7       R#   \         d    / p LÊi ; i  \         d     L\i ; i  \         d    TP#                  RTRR7        R# i ; i)zFRender file edits with inline diff after write-capable tools complete.)r_   rÛ   Údelegate_taskr–  Ú
dispatchedÚmodeÚ
backgroundr‚   z!cli.stream.background_running_onez#cli.stream.background_running_otherz[2mr�   z[0mN)Úrender_edit_diff_with_delta)Údiff_printer)rÖ  r  Úprint_fnzEdit diff preview failed for %sTr  )r@   r_   rÛ   rH   r   r³  r´  r%   r  rc   r   r  rƒ  rÏ  r#  rÊ   r$  r  )r=   r  rÕ  rÖ  r  r_   rÛ   ÚparsedÚnri   r  r#  r$  s   &&&&&        r   Ú_on_tool_completeÚ CLIStreamMixin._on_tool_completeZ  s9  € ç'ð ˜OÔ+ðÜ8BÀ?ÔTW×8XÒ8XœŸš OÔ4Ð_n×_tÐ_tÐrt�ô ˜&¤$×'Ò'¨F¯J©J°xÓ,@ÀLÔ,PÐU[×U_ÑU_Ð`fÓUgÐkwÔUwØ—J‘J˜wÓ'×,Ð,¨1�Ø=>À!¼VÑ9ÐIn�ðÙ˜g¤a¨¤oÐ%6°gÐ>Ô?ð ×/Ñ/×3Ñ3°LÀ$ÓGˆð	ZÝAÝAÙ'Ø¸mÙ% gÓ.÷0øô ô Ø’ðûô !ô Ùðûô ô 	ZØ�L‰LÐ:¸MÐTXˆL×Yð	Zús;   ‘4D ÁD Â2D Ã%D( ÄDÄDÄD%Ä$D%Ä(EÅ
E)r˜  rš  r›  r  r.  rS  rø  rå  rR   rñ  rò  r  r  r  r—   r	  r  r:   r  r  rt  r-  r,  r1  rR  rI  rj  r;   )NNN)&Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rI   rX   rf   rk   rt   r’   r9   rÕ   ré   rÿ   rp   r  r"  r(  r8  rK  rX  r5  r/  r0  r�  r’  r   r�  r¾  rÃ  rÑ  r   ró  rú  r  r(  Ú__static_attributes__r   r   r   r)   r)   5   sÛ   † Ùxõmõõ0õò
õ>ð2 5¸÷  5õD(õ<3õ(-õ8,%õ\
õõ.õ6Võpbõ'õ"Oõb!*õF&õ$	2õbð
 ð/Àö /ó ð/ð*5=ÐZ^÷ 5=òn'õv÷0jõX*õ	õ	^÷Zñ Zr   r)   ))z/skills searchzcli.stream.busy_skills_search)z/skills browsezcli.stream.busy_skills_browse)z/skills inspectzcli.stream.busy_skills_inspect)z/skills installzcli.stream.busy_skills_install)z/skillszcli.stream.busy_skills)z/browserzcli.stream.busy_browser)éP   )r.  Ú
__future__r   r³  r„   r"   r‰   r
  Ú
contextlibr   Úpathlibr   Úrich.markupr   rÃ   Ú
agent.i18nr   Úagent.think_scrubberr   r	   r3  r7  rƒ   r9  r‰  rˆ  r   r'   r)   r   r   r   Ú<module>r7     s‡   ðñõ #ã Û 	Û Û Û å %Ý Ý )å ß Bð €
Ø€ÙÑ5©Ó5Ó5Ð ðTÐ ð
 Ð/ØÐ5ØÐ5ð7Ð õ2÷
÷~Zó ~Zr   