§
    ÷žyjVâ  ã                   ó„  — U d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZdZ ej        e¦  «        ZdZdedefd„Zda e!eef         dz  e"d<   de!eef         fd„Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(dZ)dZ*e G d„ d¦  «        ¦   «         Z+da,e-e"d<   de-ddfd„Z.de-fd„Z/d„ Z0defd „Z1džd"ed#edefd$„Z2d%edefd&„Z3d%ed'e-dz  defd(„Z4 ed)¬*¦  «         G d+„ d,¦  «        ¦   «         Z5h d-£Z6h d.£Z7d/edefd0„Z8d1ede9e         fd2„Z:d1edefd3„Z;d4ede9e         fd5„Z<d1edefd6„Z=d1edefd7„Z>d1ede?fd8„Z@d4edefd9„ZAd:e!defd;„ZBded<edefd=„ZCd"ed:e!dz  de!dz  fd>„ZDd?ed@e-deEe-e9e         f         fdA„ZFdŸd"ed:e!d'e-dz  dedz  fdB„ZGd"ed:e!dz  dCed'e-de5f
dD„ZHi dEdF“dGdH“dIdJ“dKdL“dMdN“dOdH“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdgdhdidjdkdldmœ¥ZIe!eef         e"dn<    eJdodbh¦  «        ZKeJe         e"dp<    eJdEdTh¦  «        ZLeJe         e"dq<   d)aMe?e"dr<   dse?ddfdt„ZNde?fdu„ZOd"ededz  fdv„ZPd"edefdw„ZQd"ede?fdx„ZRd d"ed:e!dz  d'e-dedz  fdz„ZSdŸd"ed:e!d'e-dz  dedz  fd{„ZTd|edefd}„ZUd|ededz  fd~„ZVd|edefd„ZWd:e!de9e         fd€„ZXd"ed�e!dz  de9e         fd‚„ZYd"ed�e!dz  de+dz  fdƒ„ZZd„edz  de?fd…„Z[d†e+dz  dedz  fd‡„Z\dddˆœd"ed„edz  d�e!dz  d†e+dz  dedz  f
d‰„Z]dŠede?fd‹„Z^dŒede9e         fd�„Z_dŒede9e         fdŽ„Z`e)e*d�œdŒed�e-d‘e-de9e         fd’„Zadddd“œd"ed„edz  d�e!dz  d†e+dz  de?f
d”„Zb G d•„ d–¦  «        Zcd—Zdd˜edefd™„Zed"ed„edz  deEe?ef         fdš„Zf	 dŸd"ed:e!d›egd„edz  def
dœ„Zh	 dŸd"ed:e!d›egd„edz  def
d�„ZidS )¡zºCLI presentation -- spinner, kawaii faces, tool preview formatting.

Pure display functions and classes with no AIAgent dependency.
Used by AIAgent._execute_tool_calls for CLI feedback.
é    N)Ú	dataclassÚfield)Úunified_diff)ÚPath)ÚAny)Úurlsplit)Úsafe_json_loads)Úredact_sensitive_text)Úfile_mutation_result_landedz[31mz[0mÚvalueÚreturnc                 óÖ   — t          | t          ¦  «        r*|                      d¦  «        p|                      d¦  «        } t          | t          ¦  «        r|                      ¦   «         ndS )zAExtract a display-only URL without assuming model argument types.ÚurlÚhrefÚ )Ú
isinstanceÚdictÚgetÚstrÚstrip)r   s    ú3/home/ragecks/.hermes/hermes-agent/agent/display.pyÚ_display_urlr       sW   € å�%�ÑÔð 6Ø—	’	˜%Ñ Ô Ð5 E§I¢I¨fÑ$5Ô$5ˆÝ& u­cÑ2Ô2Ð:ˆ5�;Š;‰=Œ=ˆ=¸Ð:ó    Ú_diff_colors_cachedc            	      ó  ‡— t           �t           S d} d}d}d}d}	 ddlm}  |¦   «         Šd	t          d
t          t
          t
          t
          f         dt          fˆfd„} |dd¦  «        }  |dd¦  «        } |dd¦  «        }‰                     dd¦  «        }‰                     dd¦  «        }|ršt          |¦  «        dk    r‡t          |dd…         d¦  «        t          |dd…         d¦  «        t          |dd…         d¦  «        }}
}	dt          |	dz  d¦  «        › dt          |
d z  d!¦  «        › dt          |d z  d!¦  «        › d"�}|ršt          |¦  «        dk    r‡t          |dd…         d¦  «        t          |dd…         d¦  «        t          |dd…         d¦  «        }}}dt          |d z  d!¦  «        › dt          |dz  d¦  «        › dt          |d z  d!¦  «        › d"�}n# t          $ r Y nw xY w| ||||d#œa t           S )$zDReturn ANSI escapes for diff display, resolved from the active skin.Nz[38;2;150;150;150mz[38;2;180;160;255mz[38;2;120;120;140mz"[38;2;255;255;255;48;2;120;20;20mz![38;2;255;255;255;48;2;20;90;20mr   ©Úget_active_skinÚkeyÚfallback_rgbr   c                 ó>  •— ‰                      | d¦  «        }|rst          |¦  «        dk    r`|d         dk    rTt          |dd…         d¦  «        t          |dd…         d¦  «        t          |dd…         d¦  «        }}}d	|› d
|› d
|› d�S |\  }}}d	|› d
|› d
|› d�S )Nr   é   r   ú#é   é   é   é   z[38;2;ú;Úm)Ú	get_colorÚlenÚint)r   r   ÚhÚrÚgÚbÚskins         €r   Ú_hex_fgz_diff_ansi.<locals>._hex_fg>   sÂ   ø€ Ø—’˜s BÑ'Ô'ˆAØð 1•S˜‘V”V˜q’[�[ Q q¤T¨S¢[ [Ý˜a  ! œf b™/œ/­3¨q°°1°¬v°r©?¬?½CÀÀ!ÀAÀ#ÄÈ¹O¼O�a�1�Ø0 AÐ0Ð0¨Ð0Ð0¨AÐ0Ð0Ð0Ð0Ø"‰GˆAˆq�!Ø, Ð,Ð, AÐ,Ð,¨Ð,Ð,Ð,Ð,r   Ú
banner_dim)é–   r3   r3   Úsession_label)é´   é    éÿ   Úsession_border)éx   r9   éŒ   Úui_errorz#ef5350Úui_okz#4caf50r!   r#   r$   r%   r&   z[38;2;255;255;255;48;2;é   é   r'   é   é
   r(   )ÚdimÚfileÚhunkÚminusÚplus)
r   Úhermes_cli.skin_enginer   r   Útupler+   r)   r*   ÚmaxÚ	Exception)rA   Úfile_crC   rD   rE   r   r1   Úerr_hÚok_hÚerÚegÚebÚor_ÚogÚobr0   s                  @r   Ú
_diff_ansirS   -   sz  ø€ õ Ð&Ý"Ð"ð #€CØ%€FØ#€DØ3€EØ1€DðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô ˆð	-�ð 	-­Eµ#µs½C°-Ô,@ð 	-ÅSð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð ˆg�l OÑ4Ô4ˆØ�˜¨/Ñ:Ô:ˆØˆwÐ'¨Ñ9Ô9ˆà—’˜z¨9Ñ5Ô5ˆØ�~Š~˜g yÑ1Ô1ˆØð 	c•S˜‘Z”Z 1’_�_Ý˜U 1 Q 3œZ¨Ñ,Ô,­c°%¸¸!¸´*¸bÑ.AÔ.AÅ3ÀuÈQÈqÈSÄzÐSUÑCVÔCV�B�ˆBàbµ#°b¸!±e¸B±-´-ÐbÐbÅ#ÀbÈ!ÁeÈBÁ-Ä-ÐbÐbÕRUÐVXÐZ[ÑV[Ð\^ÑR_ÔR_ÐbÐbÐbˆEØð 	c•C˜‘I”I ’N�NÝ˜d 1 Q 3œi¨Ñ,Ô,­c°$°q¸°s´)¸RÑ.@Ô.@Å#ÀdÈ1ÈQÈ3ÄiÐQSÑBTÔBT�R�ˆCØbµ°S¸!±V¸B±´ÐbÐbÅ#ÀbÈ!ÁeÈBÁ-Ä-ÐbÐbÕRUÐVXÐZ[ÑV[Ð\^ÑR_ÔR_ÐbÐbÐbˆDøøÝð ð ð Øˆðøøøð ˜F¨DØ ðð Ðõ Ðs   ›GG' Ç'
G4Ç3G4c                  ó*   — t          ¦   «         d         S )NrA   ©rS   © r   r   Ú	_diff_dimrW   ^   s   € �*™,œ, uÔ-Ð-r   c                  ó*   — t          ¦   «         d         S )NrB   rU   rV   r   r   Ú
_diff_filerY   _   ó   € �*™,œ, vÔ.Ð.r   c                  ó*   — t          ¦   «         d         S )NrC   rU   rV   r   r   Ú
_diff_hunkr\   `   rZ   r   c                  ó*   — t          ¦   «         d         S )NrD   rU   rV   r   r   Ú_diff_minusr^   a   s   € �*™,œ, wÔ/Ð/r   c                  ó*   — t          ¦   «         d         S )NrE   rU   rV   r   r   Ú
_diff_plusr`   b   rZ   r   é   éP   c                   óz   — e Zd ZU dZ ee¬¦  «        Zee         ed<    ee	¬¦  «        Z
e	eedz  f         ed<   dS )ÚLocalEditSnapshotzGPre-tool filesystem snapshot used to render diffs locally after writes.)Údefault_factoryÚpathsNÚbefore)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úlistrf   r   Ú__annotations__r   rg   r   rV   r   r   rd   rd   g   sc   € € € € € € àQÐQØ˜¨dÐ3Ñ3Ô3€Eˆ4�Œ:Ð3Ð3Ñ3Ø$) E¸$Ð$?Ñ$?Ô$?€FˆD��c˜D‘j�Ô!Ð?Ð?Ñ?Ð?Ð?r   rd   Ú_tool_preview_max_lenÚnc                 óH   — | rt          t          | ¦  «        d¦  «        ndadS )z?Set the global max length for tool call previews. 0 = no limit.r   N)rH   r+   rn   )ro   s    r   Úset_tool_preview_max_lenrq   t   s'   € ð /0Ð6�C¥ A¡¤¨™NœN˜N°QÐÐÐr   c                  ó   — t           S )z9Return the configured max preview length (0 = unlimited).)rn   rV   r   r   Úget_tool_preview_max_lenrs   z   ó   € å Ð r   c                  óF   — 	 ddl m}   | ¦   «         S # t          $ r Y dS w xY w)z5Get the active skin config, or None if not available.r   r   N)rF   r   rI   r   s    r   Ú	_get_skinrv   ƒ   sI   € ðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô Ð øÝð ð ð Øˆtˆtðøøøs   ‚ ’
 Ÿ c                  ó4   — t          ¦   «         } | r| j        S dS )z2Get tool output prefix character from active skin.õ   â”Š)rv   Útool_prefix)r0   s    r   Úget_skin_tool_prefixrz   Œ   s!   € å‰;Œ;€DØð  ØÔÐØˆ5r   õ   âš¡Ú	tool_nameÚdefaultc                 óÖ   — t          ¦   «         }|r%|j        r|j                             | ¦  «        }|r|S 	 ddlm} |                     | d¬¦  «        }|r|S n# t          $ r Y nw xY w|S )zÌGet the display emoji for a tool.

    Resolution order:
    1. Active skin's ``tool_emojis`` overrides (if a skin is loaded)
    2. Tool registry's per-tool ``emoji`` field
    3. *default* fallback
    r   )Úregistryr   )r}   )rv   Útool_emojisr   Útools.registryr   Ú	get_emojirI   )r|   r}   r0   Úoverrider   Úemojis         r   Úget_tool_emojir…   ”   sª   € õ ‰;Œ;€DØð �Ô ð ØÔ#×'Ò'¨	Ñ2Ô2ˆØð 	ØˆOðØ+Ð+Ð+Ð+Ð+Ð+Ø×"Ò" 9°bÐ"Ñ9Ô9ˆØð 	ØˆLð	øåð ð ð Øˆðøøøð €Ns   · A Á
A&Á%A&Útextc                 óP   — d                      |                      ¦   «         ¦  «        S )z:Collapse whitespace (including newlines) to single spaces.Ú )ÚjoinÚsplit)r†   s    r   Ú_oneliner‹   ²   s   € à�8Š8�D—J’J‘L”LÑ!Ô!Ð!r   Úmax_lenc                 ór   — |r4|dk    r.t          | ¦  «        |k    r|dk    rd|z  S | d |dz
  …         dz   S | S )Nr   r$   ú.ú...)r*   )r†   rŒ   s     r   Ú_truncate_previewr�   ·   sR   € Øð *�7˜Q’;�;¥3 t¡9¤9¨wÒ#6Ð#6Ø�aŠ<ˆ<Ø˜‘=Ð Ø�L�W˜q‘[�LÔ! EÑ)Ð)Ø€Kr   T)Úfrozenc                   ó@   — e Zd ZU dZeed<   dZeed<   dZedz  ed<   dS )ÚToolPreviewzBA compact tool preview plus presentation facts lost to truncation.r†   FÚ	truncatedNr   )	rh   ri   rj   rk   r   rm   r”   Úboolr   rV   r   r   r“   r“   ¿   sE   € € € € € € àLÐLà
€I€I�IØ€IˆtÐÐÑØ€Cˆˆt‰ÐÐÑÐÐr   r“   >   ÚcdÚsetÚpopdÚtrueÚfalseÚpushdÚunsetÚexportÚsourcerŽ   ú:>   ÚwcÚheadÚsortÚtailÚuniqr¡   c                 óB   — | r|                       dd¦  «        d         ndS )Nú/r#   éÿÿÿÿr   )Úrsplit)r¡   s    r   Ú_shell_basenamer©   Ì   s%   € Ø&*Ð2ˆ4�;Š;�s˜AÑÔ˜rÔ"Ð"°Ð2r   Úsegmentc                 óÞ  — g }g }d }t          | ¦  «        D ]¬\  }}|r3|                     |¦  «         ||k    r|dk    s| |dz
           dk    rd }Œ:|dv r|}|                     |¦  «         ŒV|                     ¦   «         r-|r*|                     d                     |¦  «        ¦  «         g }Œ—|                     |¦  «         Œ­|r(|                     d                     |¦  «        ¦  «         |S )Nr   r#   ú\¾   ú"ú'r   )Ú	enumerateÚappendÚisspacer‰   )rª   ÚwordsÚbufÚquoteÚiÚchs         r   Ú_split_shell_wordsr¸   Ð   s  € Ø€EØ€CØ€Eå˜7Ñ#Ô#ð ð ‰ˆˆ2Øð 	Ø�JŠJ�r‰NŒNˆNØ�UŠ{ˆ{  Q¢ ¨'°!°a±%¬.¸DÒ*@Ð*@Ø�Øà�ÐÐØˆEØ�JŠJ�r‰NŒNˆNØà�:Š:‰<Œ<ð 	Øð Ø—’˜RŸWšW S™\œ\Ñ*Ô*Ð*Ø�Øà�
Š
�2‰Œˆˆà
ð #Ø�Š�R—W’W˜S‘\”\Ñ"Ô"Ð"à€Lr   c                 óD  — t          | ¦  «        }g }t          |¦  «        D ]Y\  }}|dk    r9t          |dz   t          |¦  «        k     r||dz            nd¦  «        t          v r n|                     |¦  «         ŒZd                     |¦  «                             ¦   «         S )NÚ|r#   r   rˆ   )r¸   r°   r©   r*   Ú_SHELL_PIPE_TAIL_HEADSr±   r‰   r   ©rª   r³   Úoutr¶   Úwords        r   Ú_strip_shell_pipe_tailr¿   ï   s¢   € Ý˜wÑ'Ô'€EØ€Cå˜UÑ#Ô#ð ð ‰ˆˆ4Ø�3Š;ˆ;�?¸1¸q¹5Å3ÀuÁ:Ä:Ò;MÐ;M¨5°°Q±¬<¨<ÐSUÑVÔVÕZpÐpÐpØˆEØ�
Š
�4ÑÔÐÐà�8Š8�C‰=Œ=×ÒÑ Ô Ð r   Úcommandc                 ó  — g }g }d }d}|t          | ¦  «        k     �r| |         }|r8|                     |¦  «         ||k    r|dk    s| |dz
           dk    rd }|dz  }ŒV|dv r|}|                     |¦  «         |dz  }Œw|                      d|¦  «        s|                      d|¦  «        rdn|dv rdnd}|rTt          d	                     |¦  «                             ¦   «         ¦  «        }|r|                     |¦  «         g }||z  }�Œ|                     |¦  «         |dz  }|t          | ¦  «        k     �°t          d	                     |¦  «                             ¦   «         ¦  «        }|r|                     |¦  «         |S )
Nr   r#   r¬   r­   z&&z||r=   >   Ú
r'   r   )r*   r±   Ú
startswithr¿   r‰   r   )rÀ   Úsegmentsr´   rµ   r¶   r·   Úop_lenrª   s           r   Ú_split_shell_compoundrÆ   û   s±  € Ø€HØ€CØ€EØ	€Aà
�c�'‰lŒlÒ
Ñ
Ø�QŒZˆàð 	Ø�JŠJ�r‰NŒNˆNØ�UŠ{ˆ{  Q¢ ¨'°!°a±%¬.¸DÒ*@Ð*@Ø�Ø�‰FˆAØà�ÐÐØˆEØ�JŠJ�r‰NŒNˆNØ�‰FˆAØà×(Ò(¨¨qÑ1Ô1Ðs°W×5GÒ5GÈÈaÑ5PÔ5PÐs��Ð[]ÐalÐ[lÐ[lÐVWÐVWÐrsˆØð 	Ý,¨R¯WªW°S©\¬\×-?Ò-?Ñ-AÔ-AÑBÔBˆGØð )Ø—’ Ñ(Ô(Ð(ØˆCØ�‰KˆAÙà�
Š
�2‰ŒˆØ	ˆQ‰ˆð5 �c�'‰lŒlÒ
Ñ
õ8 % R§W¢W¨S¡\¤\×%7Ò%7Ñ%9Ô%9Ñ:Ô:€GØð !Ø�Š˜Ñ Ô Ð à€Or   c                 ó:  — t          | ¦  «        }d}|t          |¦  «        k     rNt          j        d||         ¦  «        r3|dz  }|t          |¦  «        k     rt          j        d||         ¦  «        °3t	          |t          |¦  «        k     r||         nd¦  «        S )Nr   z^[A-Za-z_]\w*=r#   r   )r¸   r*   ÚreÚmatchr©   )rª   r³   Úindexs      r   Ú_shell_head_wordrË   $  s“   € Ý˜wÑ'Ô'€EØ€EØ
•#�e‘*”*Ò
Ð
¥¤Ð*;¸UÀ5¼\Ñ!JÔ!JÐ
Ø�‰
ˆð •#�e‘*”*Ò
Ð
¥¤Ð*;¸UÀ5¼\Ñ!JÔ!JÐ
å¨5µ3°u±:´:Ò+=Ð+=˜5 œ<˜<À2ÑFÔFÐFr   c                 óœ  — t          | ¦  «        }g }d}|t          |¦  «        k     r€||         }t          j        d|¦  «        r|dz  }Œ6t          j        d|¦  «        st          j        d|¦  «        r|dz  }Œf|                     |¦  «         |dz  }|t          |¦  «        k     °€d                     |¦  «                             ¦   «         S )Nr   z^\d*(?:>>?|<)$r=   z^\d*(?:>&|<&)\d+$z
^\d*>&\d+$r#   rˆ   )r¸   r*   rÈ   rÉ   r±   r‰   r   r¼   s        r   Ú_clean_shell_segmentrÍ   ,  sÐ   € Ý˜wÑ'Ô'€EØ€CØ	€AØ
�c�%‰jŒjŠ.ˆ.Ø�QŒxˆÝŒ8Ð% tÑ,Ô,ð 	Ø�‰FˆAØÝŒ8Ð(¨$Ñ/Ô/ð 	µ2´8¸MÈ4Ñ3PÔ3Pð 	Ø�‰FˆAØØ�
Š
�4ÑÔÐØ	ˆQ‰ˆð �c�%‰jŒjŠ.ˆ.ð �8Š8�C‰=Œ=×ÒÑ Ô Ð r   c                 óÜ   — t          | ¦  «        }t          |r|d         nd¦  «        dk    rdS d                     |dd …         ¦  «        }t          t	          j        d|¦  «        ¦  «        S )Nr   r   ÚechoFrˆ   r#   z(-{2,}|_exit=|(?:^|\s|=)\$[?{]|PIPESTATUS)r¸   r©   r‰   r•   rÈ   Úsearch)rª   r³   Úrests      r   Ú_is_shell_boundary_echorÒ   =  sh   € Ý˜wÑ'Ô'€EÝ 5Ð0�u˜Q”x�x¨bÑ1Ô1°VÒ;Ð;ØˆuØ�8Š8�E˜!˜"˜"”IÑÔ€DÝ•”	ÐEÀtÑLÔLÑMÔMÐMr   c                 óÜ  — t          | ¦  «        }|sdS t          |¦  «        }t          |¦  «        dk    rt          |r|d         n|¦  «        p|S g }|D ]O}t          |¦  «        }t	          |¦  «        }|r-|t
          vr$t          |¦  «        s|                     |¦  «         ŒP|s|S t          |¦  «        dk    r|d         S t          |¦  «        dz
  }|d         › d|› d|dk    rdnd› �S )zRCompact shell wrapper/plumbing for display while preserving raw command elsewhere.r   r#   r   z + rˆ   rÀ   Úcommands)r‹   rÆ   r*   rÍ   rË   Ú_SHELL_SILENT_HEADSrÒ   r±   )rÀ   ÚoriginalrÄ   Úcorerª   Úcleanedr¡   Úcounts           r   Úsummarize_shell_commandrÚ   E  s  € å˜Ñ Ô €HØð Øˆrå$ XÑ.Ô.€HÝ
ˆ8�}„}˜ÒÐÝ#°8Ð$I H¨Q¤K KÀÑJÔJÐVÈhÐVà€DØð !ð !ˆÝ& wÑ/Ô/ˆÝ Ñ(Ô(ˆØð 	!�tÕ#6Ð6Ð6Õ?VÐW^Ñ?_Ô?_Ð6Ø�KŠK˜Ñ Ô Ð øàð ØˆÝ
ˆ4�y„y�A‚~€~Ø�AŒwˆå�‰IŒI˜‰M€EØ�1ŒgÐKÐK˜%ÐKÐK¨u¸ªz¨z ) )¸zÐKÐKÐKr   Úargsc                 óì   — |                       d¦  «        }|                       d¦  «        }t          |t          ¦  «        r|dk    rdS t          |t          ¦  «        r|dk    rd|› �S d|› d||z   dz
  › �S )NÚoffsetÚlimitr   r   r#   ÚLÚ-)r   r   r+   )rÛ   rÝ   rÞ   s      r   Ú_read_file_line_labelrá   _  sˆ   € Ø�XŠX�hÑÔ€FØ�HŠH�WÑÔ€EÝ�f�cÑ"Ô"ð  f°¢k kØˆrÝ�e�SÑ!Ô!ð  U¨a¢Z ZØ�6ˆ|ˆ|ÐØ,ˆvÐ,Ð,˜ ™¨Ñ*Ð,Ð,Ð,r   Ú
typed_textc                 óÖ  ‡— ‰€| S t          ‰¦  «        }|dk    r| S t          |d¬¦  «        }||k    r| S t          | t           ¦  «        r|                      ||¦  «        S t          | t          ¦  «        r ˆfd„|                      ¦   «         D ¦   «         S t          | t          ¦  «        rˆfd„| D ¦   «         S t          | t          ¦  «        rt          ˆfd„| D ¦   «         ¦  «        S | S )a$  Apply secret redaction to browser_type text in display-facing payloads.

    Backends sometimes echo the attempted input in error strings or fallback
    metadata.  When the raw typed value contains a recognizable secret (API
    key, token, JWT, etc.) the redacted form differs from the raw value, so we
    replace every occurrence of the raw value with its redacted form before a
    browser_type result reaches logs, callbacks, the model, or chat history.

    Normal typed text (search queries, addresses, form fields) matches no
    secret pattern, so it passes through unchanged and stays readable.

    Redaction is forced here regardless of the global ``security.redact_secrets``
    preference: a typed credential leaking into chat history is a security
    boundary, not mere log hygiene.
    Nr   T©Úforcec                 ó8   •— i | ]\  }}|t          |‰¦  «        “ŒS rV   ©Ú%redact_browser_typed_text_for_display)Ú.0r   Úitemrâ   s      €r   ú
<dictcomp>z9redact_browser_typed_text_for_display.<locals>.<dictcomp>…  s:   ø€ ð 
ð 
ð 
á��Tð Õ6°t¸ZÑHÔHð
ð 
ð 
r   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS rV   rç   ©ré   rê   râ   s     €r   ú
<listcomp>z9redact_browser_typed_text_for_display.<locals>.<listcomp>Š  s$   ø€ ÐZÐZÐZÈDÕ5°d¸JÑGÔGÐZÐZÐZr   c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S ©Nrç   rí   s     €r   ú	<genexpr>z8redact_browser_typed_text_for_display.<locals>.<genexpr>Œ  s/   øè è € Ð_Ð_ÐQUÕ:¸4ÀÑLÔLÐ_Ð_Ð_Ð_Ð_Ð_r   )r   r
   r   Úreplacer   Úitemsrl   rG   )r   râ   ÚneedleÚredacteds    `  r   rè   rè   i  s"  ø€ ð  ÐØˆÝ�‰_Œ_€FØ�‚|€|ØˆÝ$ V°4Ð8Ñ8Ô8€HØ�6ÒÐàˆÝ�%�ÑÔð /Ø�}Š}˜V XÑ.Ô.Ð.Ý�%�ÑÔð 
ð
ð 
ð 
ð 
à"Ÿ[š[™]œ]ð
ñ 
ô 
ð 	
õ �%�ÑÔð [ØZÐZÐZÐZÐTYÐZÑZÔZÐZÝ�%�ÑÔð `ÝÐ_Ð_Ð_Ð_ÐY^Ð_Ñ_Ô_Ñ_Ô_Ð_Ø€Lr   c                 óæ   — t          |t          ¦  «        s|S | dk    rSt          |                     d¦  «        t          ¦  «        r+t          |¦  «        }t	          |d         d¬¦  «        |d<   |S |S )aW  Return a copy of tool args safe for logs/progress UI.

    For ``browser_type`` the ``text`` argument is run through the same
    secret-pattern redactor used for logs.  Recognizable credentials (API
    keys, tokens) are masked before the value reaches tool progress
    notifications; normal typed text is left intact for debuggability.
    Úbrowser_typer†   Trä   )r   r   r   r   r
   )r|   rÛ   Ú	safe_argss      r   Úredact_tool_args_for_displayrù   �  sr   € õ �d�DÑ!Ô!ð ØˆØ�NÒ"Ð"¥z°$·(²(¸6Ñ2BÔ2BÅCÑ'HÔ'HÐ"Ý˜‘J”Jˆ	Ý1°$°v´,ÀdÐKÑKÔKˆ	�&ÑØÐØ€Kr   ÚtasksÚper_goal_lenc                óD  — t          | t          ¦  «        sdg fS g }| D ]r}t          |t          ¦  «        sŒ|                     d¦  «        }|€dnt	          t          |¦  «        ¦  «        }|                     t          |pd|¦  «        ¦  «         Œst          |¦  «        |fS )Nr   Úgoalú?)	r   rl   r   r   r‹   r   r±   r�   r*   )rú   rû   ÚgoalsÚtaskÚraw_goalrý   s         r   Ú_delegate_task_goal_partsr  ¡  sª   € Ý�e�TÑ"Ô"ð Ø�"ˆuˆØ€EØð Cð CˆÝ˜$¥Ñ%Ô%ð 	ØØ—8’8˜FÑ#Ô#ˆØÐ&ˆsˆs­HµS¸±]´]Ñ,CÔ,CˆØ�ŠÕ& t {¨s°LÑAÔAÑBÔBÐBÐBÝˆu‰:Œ:�uÐÐr   c                 óP  — |€t           }|sdS t          | |¦  «        p|}i dd“dd“dd“dd	“d
d	“dd	“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!ddd"œ¥}| d#k    rÉ|                     d$¦  «        }|rht          |t          ¦  «        rSt          |d%¬&¦  «        \  }}|r|› d'�d(                     |¦  «        z   nt          |¦  «        › d)�}t          ||¦  «        S |                     d!d*¦  «        }|€dS t          t          |¦  «        ¦  «        }|rt          ||¦  «        ndS | d+k    �r|                     dd*¦  «        }	|                     d,d*¦  «        }
|                     d-d*¦  «        }|                     d.¦  «        }|	rt          |	¦  «        nd*g}|
r*|                     t          |
¦  «        dd/…         ¦  «         |r;|                     d0t          t          |¦  «        dd1…         ¦  «        › d0�¦  «         |r|	d2k    r|                     |› d3�¦  «         d4„ |D ¦   «         }|rd5                     |¦  «        ndS | d6k    rW|                     d7¦  «        }|                     d8d9¦  «        }|€d:S |rd;t          |¦  «        › d<�S d=t          |¦  «        › d<�S | d>v rS| dk    rd nd}|                     |¦  «        }|€dS t          t          |¦  «        ¦  «        }|rt          ||¦  «        ndS | dk    rÃ|                     d	¦  «        p)|                     d?¦  «        p|                     d@¦  «        }|€dS t          t          |¦  «                             dAdB¦  «        ¦  «        j        pt          |¦  «        }t!          |¦  «        }|› d5|› �                     ¦   «         }|rt          ||¦  «        ndS | dCk    rHt          |                     dd*¦  «        ¦  «        }dD|ddE…         › t          |¦  «        dEk    rdFnd*› d0�S | dGk    rù|                     dd*¦  «        }	|                     dHd*¦  «        }|	dIk    rKt          |                     dJd*¦  «        ¦  «        }dK|› dL|ddE…         › t          |¦  «        dEk    rdFnd*› d0�S |	dMk    r7t          |                     dN¦  «        pd*¦  «        pdO}dP|› dL|dd1…         › d0�S |	dQk    r7t          |                     dN¦  «        pd*¦  «        pdO}dR|› dL|dd1…         › d0�S |	S | dSk    rb|                     dHdT¦  «        }t          |                     dUd*¦  «        ¦  «        }t          |¦  «        d1k    r|ddV…         dFz   }dW|› dL|› d0�S | dk    r†t          t          |                     d¦  «        pd*¦  «        ¦  «        }|                     dX¦  «        }|r(t          t          |¦  «        ¦  «        }|r|› dY|› �n|}n|}|rt          ||¦  «        ndS |                     | ¦  «        }|sdZD ]
}||v r|} nŒ|r||vrdS ||         }t          |t          ¦  «        r|r|d[         nd*}t          t          |¦  «        ¦  «        }|sdS |d[k    r#t          |¦  «        |k    r|d|d\z
  …         dFz   }|S )]zÛBuild a short preview of a tool call's primary argument for display.

    *max_len* controls truncation.  ``None`` (default) defers to the global
    ``_tool_preview_max_len`` set via config; ``0`` means unlimited.
    NÚterminalrÀ   Ú
web_searchÚqueryÚweb_extractÚurlsÚ	read_fileÚpathÚ
write_fileÚpatchÚsearch_filesÚpatternÚbrowser_navigater   Úbrowser_clickÚrefr÷   r†   Úimage_generateÚpromptÚtext_to_speechÚvision_analyzeÚquestionÚ
skill_viewÚnameÚskills_listÚcategoryÚcronjobÚactionÚexecute_codeÚcoderý   )Údelegate_taskÚclarifyÚskill_manager  rú   é(   ©rû   z tasks: ú | z parallel tasksr   ÚprocessÚ
session_idÚdataÚtimeoutr%   r®   r>   ÚwaitÚsc                 ó   — g | ]}|¯|‘ŒS rV   rV   )ré   Úps     r   rî   z&build_tool_preview.<locals>.<listcomp>â  s   € Ð'Ð'Ð'�q QÐ'�Ð'Ð'Ð'r   rˆ   ÚtodoÚtodosÚmergeFzreading task listz	updating z task(s)z	planning >   r  r  rB   Úfilepathr¬   r¦   Úsession_searchz	recall: "é   r�   ÚmemoryÚtargetÚaddÚcontentú+ú: "rò   Úold_textú<missing old_text>Ú~Úremoverà   Úsend_messagerþ   Úmessageé   zto Ú	file_pathõ    â†’ )r  r†   rÀ   r
  r  r  r  rý   r   r$   )rn   rù   r   r   rl   r  r‰   r*   r�   r‹   r   r±   rÚ   r   rò   r  rá   r   )r|   rÛ   rŒ   Úprimary_argsrú   Ú
task_countrÿ   Úpreviewrý   r  Úsidr'  Útimeout_valÚpartsÚ	todos_argr/  r   rÀ   r
  ÚlabelÚ
line_labelr  r4  r6  ÚoldÚmsgr  r@  Úfallback_keyr   s                                 r   Úbuild_tool_previewrN  ®  s2  € ð €Ý'ˆØð ØˆtÝ'¨	°4Ñ8Ô8Ð@¸D€DðØ�IðØ+¨WðØ6CÀVðà�Vðà)¨6ðà3:¸Fðð 	˜	ðð $6°uðð 	˜ð	ð !/°ð	ð
 	˜(ðð
 %5°fðð 	˜*ðð 	�fðð ,¨Zðð 	�8ðð 	˜ðð 28Ø¨vðð ð €Lð �OÒ#Ð#Ø—’˜Ñ!Ô!ˆØð 	7•Z ¥tÑ,Ô,ð 	7Ý 9¸%ÈbÐ QÑ QÔ QÑˆJ˜ð ð=�:Ð'Ð'Ð'¨%¯*ª*°UÑ*;Ô*;Ñ;Ð;Ý!$ U¡¤Ð<Ð<Ð<ð õ % W¨gÑ6Ô6Ð6Ø�xŠx˜ Ñ#Ô#ˆØˆ<Ø�4Ý�3˜t™9œ9Ñ%Ô%ˆØ6=ÐGÕ  ¨'Ñ2Ô2Ð2À4ÐGà�IÒÑØ—’˜( BÑ'Ô'ˆØ�hŠh�| RÑ(Ô(ˆØ�xŠx˜ Ñ#Ô#ˆØ—h’h˜yÑ)Ô)ˆØ &Ð.•�V‘”�¨BÐ/ˆØð 	(Ø�LŠL�˜S™œ # 2 #œÑ'Ô'Ð'Øð 	:Ø�LŠLÐ8�X¥c¨$¡i¤i°°°¤nÑ5Ô5Ð8Ð8Ð8Ñ9Ô9Ð9Øð 	,˜6 VÒ+Ð+Ø�LŠL˜KÐ*Ð*Ð*Ñ+Ô+Ð+Ø'Ð'˜EÐ'Ñ'Ô'ˆØ"'Ð1ˆs�xŠx˜‰Œˆ¨TÐ1à�FÒÐØ—H’H˜WÑ%Ô%ˆ	Ø—’˜ %Ñ(Ô(ˆØÐØ&Ð&Øð 	8Ø7�s 9™~œ~Ð7Ð7Ð7Ð7à7�s 9™~œ~Ð7Ð7Ð7Ð7àÐ0Ð0Ð0Ø! ^Ò3Ð3ˆfˆf¸ˆØ—(’(˜3‘-”-ˆØˆ?Ø�4Ý)­#¨g©,¬,Ñ7Ô7ˆØ6=ÐGÕ  ¨'Ñ2Ô2Ð2À4ÐGà�KÒÐØ�xŠx˜ÑÔÐK 4§8¢8¨FÑ#3Ô#3ÐK°t·x²xÀ
Ñ7KÔ7KˆØˆ<Ø�4Ý•S˜‘Y”Y×&Ò& t¨SÑ1Ô1Ñ2Ô2Ô7ÐD½3¸t¹9¼9ˆÝ*¨4Ñ0Ô0ˆ
ØÐ)Ð)˜ZÐ)Ð)×/Ò/Ñ1Ô1ˆØ6=ÐGÕ  ¨'Ñ2Ô2Ð2À4ÐGàÐ$Ò$Ð$Ý˜Ÿš '¨2Ñ.Ô.Ñ/Ô/ˆØL˜E # 2 #œJÐLµ°U±´¸b²°¨¨ÀbÐLÐLÐLÐLà�HÒÐØ—’˜( BÑ'Ô'ˆØ—’˜( BÑ'Ô'ˆØ�UŠ?ˆ?Ý˜tŸxšx¨	°2Ñ6Ô6Ñ7Ô7ˆGØW�vÐWÐW 7¨3¨B¨3¤<ÐW½#¸g¹,¼,ÈÒ:KÐ:K°°ÐQSÐWÐWÐWÐWØ�yÒ Ð Ý˜4Ÿ8š8 JÑ/Ô/Ð5°2Ñ6Ô6ÐNÐ:NˆCØ/�vÐ/Ð/ 3 s¨ s¤8Ð/Ð/Ð/Ð/Ø�xÒÐÝ˜4Ÿ8š8 JÑ/Ô/Ð5°2Ñ6Ô6ÐNÐ:NˆCØ/�vÐ/Ð/ 3 s¨ s¤8Ð/Ð/Ð/Ð/Øˆà�NÒ"Ð"Ø—’˜( CÑ(Ô(ˆÝ�t—x’x 	¨2Ñ.Ô.Ñ/Ô/ˆÝˆs‰8Œ8�bŠ=ˆ=Ø�c�r�c”(˜UÑ"ˆCØ(�VÐ(Ð( Ð(Ð(Ð(Ð(à�LÒ Ð Ý�˜DŸHšH VÑ,Ô,Ð2°Ñ3Ô3Ñ4Ô4ˆØ—H’H˜[Ñ)Ô)ˆ	Øð 	Ý ¥ Y¡¤Ñ0Ô0ˆIØ37ÐF˜Ð/Ð/ IÐ/Ð/Ð/¸YˆGˆGàˆGØ6=ÐGÕ  ¨'Ñ2Ô2Ð2À4ÐGà
×
Ò
˜9Ñ
%Ô
%€CØð Øbð 	ð 	ˆLØ˜tÐ#Ð#Ø"�Ø�ð $ð ð �#˜T�/�/Øˆtà�ŒI€EÝ�%�ÑÔð *Ø!Ð)��a”� rˆå•s˜5‘z”zÑ"Ô"€GØð ØˆtØ�‚{€{•s˜7‘|”| gÒ-Ð-Ø˜,˜7 Q™;˜,Ô'¨%Ñ/ˆØ€Nr   Úfallbackc                ó2  — t          | |d¬¦  «        p|}t          ||¦  «        }||k    }d}|rXt          |¦  «        }	 t          |¦  «        }	n# t          $ r d}	Y nw xY w|	r$|	j                             ¦   «         dv r	|	j        r|}t          |||¬¦  «        S )aL  Build one canonical compact preview before platform formatting.

    The uncapped preview is rebuilt from the tool arguments when possible so
    an upstream display cap cannot discard its link target.  Platforms then
    receive explicit truncation and URL metadata instead of inferring either
    fact from the rendered text.
    r   ©rŒ   N>   ÚhttpÚhttps)r†   r”   r   )	rN  r�   r   r   Ú
ValueErrorÚschemeÚlowerÚnetlocr“   )
r|   rÛ   rO  rŒ   Ú	full_textr†   r”   r   Ú	candidateÚparseds
             r   Úprepare_tool_previewr[  9  sÊ   € õ # 9¨d¸AÐ>Ñ>Ô>ÐJÀ(€IÝ˜Y¨Ñ0Ô0€DØ˜	Ò!€IØ
€CØð Ý  Ñ+Ô+ˆ	ð	Ý˜iÑ(Ô(ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøàð 	�f”m×)Ò)Ñ+Ô+Ð/@Ð@Ð@ÀVÄ]Ð@ØˆCÝ˜D¨I¸3Ð?Ñ?Ô?Ð?s   ¿A ÁAÁAr  zSearching the webr  ÚReadingr  ÚBrowsingr  ÚClickingr÷   ÚTypingr	  r  ÚWritingr  ÚEditingr  zSearching filesr  ÚRunningr  zRunning coder  zGenerating imageÚvideo_generatezGenerating videor  zGenerating speechr  zLooking at the imager1  zSearching past sessionsr  zReading skillzListing skillszUpdating skillÚ
DelegatingÚ
SchedulingÚAskingzUpdating memoryzUpdating tasks)r  r!  r  r  r   r3  r-  Ú_TOOL_VERBSr  Ú_TOOL_VERBS_NO_PREVIEWÚ_TOOL_VERBS_FOR_CONNECTORÚ_friendly_tool_labelsÚenabledc                 ó$   — t          | ¦  «        adS )zIToggle friendly human-phrased tool labels (display.friendly_tool_labels).N)r•   rj  )rk  s    r   Úset_friendly_tool_labelsrm  �  s   € õ ! ™MœMÐÐÐr   c                  ó   — t           S )z0Return whether friendly tool labels are enabled.)rj  rV   r   r   Úget_friendly_tool_labelsro  “  rt   r   c                 óH   — t           sdS t                               | ¦  «        S )aW  Return the friendly verb for a built-in tool, or None.

    Returns None when friendly labels are disabled or the tool has no curated
    verb (custom/plugin/MCP tools).  Callers that already hold a computed
    argument preview can compose ``f"{verb} {preview}"`` themselves; use
    :func:`tool_verb_connector` to pick the right joiner.
    N)rj  rg  r   ©r|   s    r   Úget_tool_verbrr  ˜  s#   € õ !ð ØˆtÝ�?Š?˜9Ñ%Ô%Ð%r   c                 ó   — | t           v rdndS )zEReturn the connector between a verb and its preview (" for " or " ").ú for rˆ   )ri  rq  s    r   Útool_verb_connectorru  ¥  s   € àÕ#<Ð<Ð<ˆ7ˆ7À#ÐEr   c                 ó   — | t           v S )zCWhether the verb should render alone, without the argument preview.)rh  rq  s    r   Úverb_drops_previewrw  ª  s   € àÕ.Ð.Ð.r   é1   c                 ó  — | r| dk    rdS t           sdS t                               | ¦  «        }|r(d|d                              ¦   «         › |dd…         › �}nd| › �}|}|r`|r^| t          vrUt          | |d¬¦  «        }|rA|                     ¦   «         d                              ¦   «         }|› t          | ¦  «        › |› �}t          |¦  «        |dz
  k    r#|d|dz
  …          
                    ¦   «         d	z   }n|d	z   }|S )
us  Build a short present-tense status phrase for platform status surfaces.

    Used by text-rendering "typing" indicators (Slack's
    ``assistant.threads.setStatus`` line) to show what the agent is doing
    right now: ``is running scripts/run_tests.shâ€¦`` instead of a static
    ``is thinking...``.  The phrase is phrased to follow the bot's display
    name ("Hermes is running â€¦"), so it starts lowercase with "is".

    Pass ``args=None`` for a verb-only phrase (``is runningâ€¦``) â€” used when
    ``display.live_status`` is ``verb`` to keep argument previews out of
    shared channels.

    Returns None for the ``_thinking`` pseudo-tool and when friendly labels
    are disabled (callers fall back to their static default).  ``max_len``
    caps the total phrase length; Slack truncates its status line around 50
    characters, so the default stays just under that.
    Ú	_thinkingNzis r   r#   z	is using rQ  r=   u   â€¦)rj  rg  r   rV  rh  rN  Ú
splitlinesr   ru  r*   Úrstrip)r|   rÛ   rŒ   Úverbr¡   ÚphraserD  s          r   Úbuild_status_phraser  ¯  s@  € ð$ ð ˜	 [Ò0Ð0ØˆtÝ ð Øˆtå�?Š?˜9Ñ%Ô%€DØð 'Ø0�T˜!”W—]’]‘_”_Ð0 d¨1¨2¨2¤hÐ0Ð0ˆˆð '˜9Ð&Ð&ˆà€FØð H�ð H˜Õ*@Ð@Ð@Ý$ Y°¸dÐCÑCÔCˆØð 	Hð ×(Ò(Ñ*Ô*¨1Ô-×3Ò3Ñ5Ô5ˆGØÐGÕ1°)Ñ<Ô<ÐG¸gÐGÐGˆFå
ˆ6�{„{�W˜q‘[Ò Ð Ø˜˜' A™+˜Ô&×-Ò-Ñ/Ô/°%Ñ7ˆˆà˜%‘ˆØ€Mr   c                 ó   — t           st          | ||¬¦  «        S t                               | ¦  «        }|st          | ||¬¦  «        S | t          v r|S t          | ||¬¦  «        }|s|S | t
          v r|› d|› �S |› d|› �S )a   Build a human-phrased status label for a tool call.

    For built-in tools with a known verb (``web_search`` -> "Searching the
    web for ..."), returns the verb optionally followed by the argument
    preview.  For everything else (custom/plugin/MCP tools, or when friendly
    labels are disabled) returns the raw preview, so callers can use this as a
    drop-in replacement for :func:`build_tool_preview`.
    rQ  rt  rˆ   )rj  rN  rg  r   rh  ri  )r|   rÛ   rŒ   r}  rD  s        r   Úbuild_tool_labelr�  Ý  s·   € õ !ð DÝ! )¨T¸7ÐCÑCÔCÐCå�?Š?˜9Ñ%Ô%€DØð DÝ! )¨T¸7ÐCÑCÔCÐCàÕ*Ð*Ð*Øˆå  ¨D¸'ÐBÑBÔB€GØð ØˆØÕ-Ð-Ð-ØÐ&Ð&˜WÐ&Ð&Ð&ØÐÐ�WÐÐÐr   r
  c                 ó²   — t          t          j                             | ¦  «        ¦  «        }|                     ¦   «         r|S t          j        ¦   «         |z  S )zDResolve a possibly-relative filesystem path against the current cwd.)r   Úosr
  Ú
expanduserÚis_absoluteÚcwd)r
  rY  s     r   Ú_resolved_pathr‡  ü  sJ   € å•R”W×'Ò'¨Ñ-Ô-Ñ.Ô.€IØ×ÒÑÔð ØÐÝŒ8‰:Œ:˜	Ñ!Ð!r   c                 óx   — 	 |                       d¬¦  «        S # t          t          t          t          f$ r Y dS w xY w)z@Return UTF-8 file content, or None for missing/unreadable files.zutf-8)ÚencodingN)Ú	read_textÚFileNotFoundErrorÚIsADirectoryErrorÚUnicodeDecodeErrorÚOSError©r
  s    r   Ú_snapshot_textr�    sH   € ðØ�~Š~ wˆ~Ñ/Ô/Ð/øÝÕ0Õ2DÅgÐNð ð ð Øˆtˆtðøøøs   ‚ ˜9¸9c                 óð   — 	 t          |                      ¦   «                              t          j        ¦   «                              ¦   «         ¦  «        ¦  «        S # t
          $ r t          | ¦  «        cY S w xY w)z2Prefer cwd-relative paths in diffs when available.)r   ÚresolveÚrelative_tor   r†  rI   r�  s    r   Ú_display_diff_pathr”    sj   € ðÝ�4—<’<‘>”>×-Ò-­d¬h©j¬j×.@Ò.@Ñ.BÔ.BÑCÔCÑDÔDÐDøÝð ð ð Ý�4‰yŒyÐÐÐðøøøs   ‚AA ÁA5Á4A5c                 ó  — |                       d¦  «        }|                       d¦  «        }|r|sg S ddlm}m} |dk    r% |||                       d¦  «        ¦  «        }|dz  gS  ||¦  «        }|sg S t	          |d         ¦  «        }|d	v r#|                       d
¦  «        }|r||z  gn|dz  gS |dv r|                       d
¦  «        }|r||z  gng S |dk    r.d„ t          |                     d¦  «        ¦  «        D ¦   «         }|S g S )z7Resolve skill_manage write targets to filesystem paths.r  r  r   )Ú_find_skillÚ_resolve_skill_dirÚcreater  zSKILL.mdr
  >   Úeditr  r@  >   r  Úremove_fileÚdeletec                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rV   )Úis_file)ré   r
  s     r   rî   z/_resolve_skill_manage_paths.<locals>.<listcomp>-  s%   € ÐQÐQÐQ˜$À$Ç,Â,Á.Ä.ÐQ�ÐQÐQÐQr   Ú*)r   Útools.skill_manager_toolr–  r—  r   ÚsortedÚrglob)	rÛ   r  r  r–  r—  Ú	skill_dirÚexistingr@  Úfiless	            r   Ú_resolve_skill_manage_pathsr¥    sc  € à�XŠX�hÑÔ€FØ�8Š8�FÑÔ€DØð ˜ð Øˆ	àHÐHÐHÐHÐHÐHÐHÐHà�ÒÐØ&Ð& t¨T¯XªX°jÑ-AÔ-AÑBÔBˆ	Ø˜JÑ&Ð'Ð'àˆ{˜4Ñ Ô €HØð Øˆ	å�X˜fÔ%Ñ&Ô&€IØÐ"Ð"Ð"Ø—H’H˜[Ñ)Ô)ˆ	Ø*3ÐQ�	˜IÑ%Ð&Ð&¸)ÀjÑ:PÐ9QÐQØÐ.Ð.Ð.Ø—H’H˜[Ñ)Ô)ˆ	Ø*3Ð;�	˜IÑ%Ð&Ð&¸Ð;Ø�ÒÐØQÐQ¥&¨¯ª¸Ñ)=Ô)=Ñ">Ô">ÐQÑQÔQˆØˆØ€Ir   Úfunction_argsc                 ó  — t          |t          ¦  «        sg S | dk    r)|                     d¦  «        }|rt          |¦  «        gng S | dk    r)|                     d¦  «        }|rt          |¦  «        gng S | dk    rt	          |¦  «        S g S )z9Resolve local filesystem targets for write-capable tools.r  r
  r  r!  )r   r   r   r‡  r¥  )r|   r¦  r
  s      r   Ú_resolve_local_edit_pathsr¨  2  s©   € å�m¥TÑ*Ô*ð Øˆ	à�LÒ Ð Ø× Ò  Ñ(Ô(ˆØ)-Ð5•˜tÑ$Ô$Ð%Ð%°2Ð5à�GÒÐØ× Ò  Ñ(Ô(ˆØ)-Ð5•˜tÑ$Ô$Ð%Ð%°2Ð5à�NÒ"Ð"Ý*¨=Ñ9Ô9Ð9à€Ir   c                 ó    — t          | |¦  «        }|sdS t          |¬¦  «        }|D ]&}t          |¦  «        |j        t	          |¦  «        <   Œ'|S )z.Capture before-state for local write previews.N)rf   )r¨  rd   r�  rg   r   )r|   r¦  rf   Úsnapshotr
  s        r   Úcapture_local_edit_snapshotr«  E  s_   € å% i°Ñ?Ô?€EØð Øˆtå  uÐ-Ñ-Ô-€HØð :ð :ˆÝ%3°DÑ%9Ô%9ˆŒ�˜D™	œ	Ñ"Ð"Ø€Or   Úresultc                 óÜ   — | sdS t          | ¦  «        }|€dS t          |t          ¦  «        sdS |                     d¦  «        rdS d|v r"t	          |                     d¦  «        ¦  «        S dS )z?Conservatively detect whether a tool result represents success.FNÚerrorÚsuccessT)r	   r   r   r   r•   )r¬  r'  s     r   Ú_result_succeededr°  Q  s€   € àð ØˆuÝ˜6Ñ"Ô"€DØ€|ØˆuÝ�d�DÑ!Ô!ð ØˆuØ‡x‚x�ÑÔð ØˆuØ�DÐÐÝ�D—H’H˜YÑ'Ô'Ñ(Ô(Ð(Øˆ4r   rª  c           
      óæ  — | sdS g }| j         D ]Á}| j                             t          |¦  «        ¦  «        }t	          |¦  «        }||k    rŒ?t          |¦  «        }d                     t          |€g n|                     d¬¦  «        |€g n|                     d¬¦  «        d|› �d|› �¬¦  «        ¦  «        }|r| 	                    |¦  «         ŒÂ|sdS d                     d„ |D ¦   «         ¦  «        S )	zHGenerate unified diff text from a stored before-state and current files.Nr   T)Úkeependsza/zb/)ÚfromfileÚtofilec              3   óN   K  — | ] }|                      d ¦  «        r|n|d z   V — Œ!dS )rÂ   N)Úendswith)ré   Úchunks     r   rñ   z&_diff_from_snapshot.<locals>.<genexpr>{  s;   è è € ÐWÐWÀu˜EŸNšN¨4Ñ0Ô0ÐB�5�5°e¸d±lÐWÐWÐWÐWÐWÐWr   )
rf   rg   r   r   r�  r”  r‰   r   r{  r±   )rª  Úchunksr
  rg   ÚafterÚdisplay_pathÚdiffs          r   Ú_diff_from_snapshotr¼  a  s%  € àð Øˆtà€FØ”ð  ð  ˆØ”×$Ò$¥S¨¡Y¤YÑ/Ô/ˆÝ˜tÑ$Ô$ˆØ�UŠ?ˆ?Øå)¨$Ñ/Ô/ˆØ�wŠwÝØ�n��¨&×*;Ò*;ÀTÐ*;Ñ*JÔ*JØ�m��¨×)9Ò)9À4Ð)9Ñ)HÔ)HØ,˜lÐ,Ð,Ø*˜LÐ*Ð*ð	ñ ô ñ
ô 
ˆð ð 	 Ø�MŠM˜$ÑÔÐøàð ØˆtØ�7Š7ÐWÐWÐPVÐWÑWÔWÑWÔWÐWr   ©r¦  rª  c                ó&  — | dk    rf|rdt          |¦  «        }t          |t          ¦  «        r@|                     d¦  «        }t          |t          ¦  «        r|                     ¦   «         r|S | dvrdS t          |¦  «        sdS t          |¦  «        S )z4Extract a unified diff from a file-edit tool result.r  r»  >   r  r  r!  N)r	   r   r   r   r   r   r°  r¼  )r|   r¬  r¦  rª  r'  r»  s         r   Úextract_edit_diffr¿  ~  sž   € ð �GÒÐ ÐÝ˜vÑ&Ô&ˆÝ�d�DÑ!Ô!ð 	Ø—8’8˜FÑ#Ô#ˆDÝ˜$¥Ñ$Ô$ð ¨¯ª©¬ð Ø�àÐ?Ð?Ð?ØˆtÝ˜VÑ$Ô$ð ØˆtÝ˜xÑ(Ô(Ð(r   Ú	diff_textc                 ó¶   — |�| sdS 	  |d¦  «         |                       d¦  «                             ¦   «         D ]} ||¦  «         ŒdS # t          $ r Y dS w xY w)zFEmit rendered diff text through the CLI's prompt_toolkit-safe printer.NFu     â”Š review diffrÂ   T)r|  r{  rI   )rÀ  Úprint_fnÚlines      r   Ú_emit_inline_diffrÄ  ”  s‡   € àÐ˜yÐØˆuðØˆÐ$Ñ%Ô%Ð%Ø×$Ò$ TÑ*Ô*×5Ò5Ñ7Ô7ð 	ð 	ˆDØˆH�T‰NŒNˆNˆNØˆtøÝð ð ð Øˆuˆuðøøøs   ˆA A
 Á

AÁAr»  c                 ó¾  — g }d}d}|                       ¦   «         D �]À}|                     d¦  «        r|dd…                              ¦   «         }Œ5|                     d¦  «        rT|dd…                              ¦   «         }|s|r3|                     t	          ¦   «         › |pd› d|pd› t
          › �¦  «         Œž|                     d¦  «        r-|                     t          ¦   «         › |› t
          › �¦  «         Œà|                     d	¦  «        r.|                     t          ¦   «         › |› t
          › �¦  «         �Œ#|                     d
¦  «        r.|                     t          ¦   «         › |› t
          › �¦  «         �Œf|                     d¦  «        r.|                     t          ¦   «         › |› t
          › �¦  «         �Œ©|r|                     |¦  «         �ŒÂ|S )z=Render unified diff lines in Hermes' inline transcript style.Nú--- r?   z+++ za/?rA  zb/?z@@rà   r7  rˆ   )
r{  rÃ   r   r±   rY   Ú_ANSI_RESETr\   r^   r`   rW   )r»  ÚrenderedÚ	from_fileÚto_fileÚraw_lines        r   Ú_render_inline_unified_diffrÌ  ¡  sõ  € à€HØ€IØ€Gà—O’OÑ%Ô%ð &ñ &ˆØ×Ò˜vÑ&Ô&ð 	Ø    œ×*Ò*Ñ,Ô,ˆIØØ×Ò˜vÑ&Ô&ð 	Ø˜q˜r˜r”l×(Ò(Ñ*Ô*ˆGØð k˜Gð kØ—’¥:¡<¤<Ð i°Ð1C¸eÐ iÐ iÈ'ÐJZÐUZÐ iÕ\gÐ iÐ iÑjÔjÐjØØ×Ò˜tÑ$Ô$ð 	Ø�OŠO�z™|œ|ÐD¨XÐDµ{ÐDÐDÑEÔEÐEØØ×Ò˜sÑ#Ô#ð 	Ø�OŠO�{™}œ}ÐE¨hÐE½ÐEÐEÑFÔFÐFÙØ×Ò˜sÑ#Ô#ð 	Ø�OŠO�z™|œ|ÐD¨XÐDµ{ÐDÐDÑEÔEÐEÙØ×Ò˜sÑ#Ô#ð 	Ø�OŠO�y™{œ{ÐC¨HÐCµkÐCÐCÑDÔDÐDÙØð 	&Ø�OŠO˜HÑ%Ô%Ð%ùà€Or   c                 ó  — g }g }|                       ¦   «         D ]G}|                     d¦  «        r|r|                     |¦  «         |g}Œ2|                     |¦  «         ŒH|r|                     |¦  «         d„ |D ¦   «         S )z,Split a unified diff into per-file sections.rÆ  c                 ó<   — g | ]}|¯d                       |¦  «        ‘ŒS )rÂ   )r‰   )ré   Úsections     r   rî   z0_split_unified_diff_sections.<locals>.<listcomp>Ñ  s)   € ÐBÐBÐB 7¸'ÐBˆD�IŠI�gÑÔÐBÐBÐBr   )r{  rÃ   r±   )r»  ÚsectionsÚcurrentrÃ  s       r   Ú_split_unified_diff_sectionsrÒ  Â  sŸ   € à "€HØ€Gà—’Ñ!Ô!ð ð ˆØ�?Š?˜6Ñ"Ô"ð 	 wð 	Ø�OŠO˜GÑ$Ô$Ð$Ø�fˆGØØ�Š�tÑÔÐÐàð !Ø�Š˜Ñ Ô Ð àBÐB¨hÐBÑBÔBÐBr   )Ú	max_filesÚ	max_linesrÓ  rÔ  c          	      ó  — t          | ¦  «        }g }d}d}t          |¦  «        D �]"\  }}||k    r%|dz  }|t          t          |¦  «        ¦  «        z  }Œ1t          |¦  «        }	|t          |¦  «        z
  }
|
dk    r|t          |	¦  «        z  }|dz  }Œpt          |	¦  «        |
k    r|                     |	¦  «         Œ™|                     |	d|
…         ¦  «         |t          |	¦  «        |
z
  z  }|dt          dt          |¦  «        |z
  dz
  ¦  «        z   z  }||dz   d…         D ]!}|t          t          |¦  «        ¦  «        z  }Œ" |s|r=d|› d�}|r	|d|› d�z  }|                     t          ¦   «         › |› t          › �¦  «         |S )zCRender diff sections while capping file count and total line count.r   r#   Nu   â€¦ omitted z diff line(s)z across z additional file(s)/section(s))	rÒ  r°   r*   rÌ  ÚextendrH   r±   r\   rÇ  )r»  rÓ  rÔ  rÐ  rÈ  Úomitted_filesÚomitted_linesÚidxrÏ  Úsection_linesÚremaining_budgetÚleftoverÚsummarys                r   Ú!_summarize_rendered_diff_sectionsrÞ  Ô  sç  € õ ,¨DÑ1Ô1€HØ€HØ€MØ€Må! (Ñ+Ô+ð ñ ‰ˆˆWØ�)ÒÐØ˜QÑˆMØ�SÕ!<¸WÑ!EÔ!EÑFÔFÑFˆMØå3°GÑ<Ô<ˆØ$¥s¨8¡}¤}Ñ4ÐØ˜qÒ Ð Ø�S Ñ/Ô/Ñ/ˆMØ˜QÑˆMØåˆ}ÑÔÐ!1Ò1Ð1Ø�OŠO˜MÑ*Ô*Ð*Øà�Š˜Ð&7Ð'7Ð&7Ô8Ñ9Ô9Ð9Ø�˜]Ñ+Ô+Ð.>Ñ>Ñ>ˆØ˜�S ¥C¨¡M¤M°CÑ$7¸!Ñ$;Ñ<Ô<Ñ<Ñ<ˆØ   q¡  Ô*ð 	Hð 	HˆHØ�SÕ!<¸XÑ!FÔ!FÑGÔGÑGˆMˆMØàð A˜ð AØ= Ð=Ð=Ð=ˆØð 	PØÐO -ÐOÐOÐOÑOˆGØ�Š�:™<œ<Ð?¨Ð?µ+Ð?Ð?Ñ@Ô@Ð@à€Or   )r¦  rª  rÂ  c                óþ   — t          | |||¬¦  «        }|sdS 	 t          |¦  «        }n3# t          $ r&}t                               d|¦  «         Y d}~dS d}~ww xY wt          d                     |¦  «        |¦  «        S )z?Render an edit diff inline without taking over the terminal UI.r½  Fz Could not render inline diff: %sNrÂ   )r¿  rÞ  rI   ÚloggerÚdebugrÄ  r‰   )r|   r¬  r¦  rª  rÂ  r»  Úrendered_linesÚexcs           r   Úrender_edit_diff_with_deltarä    s¦   € õ ØØØ#Øð	ñ ô €Dð ð ØˆuðÝ:¸4Ñ@Ô@ˆˆøÝð ð ð Ý�ŠÐ7¸Ñ=Ô=Ð=Øˆuˆuˆuˆuˆuøøøøðøøøõ ˜TŸYšY ~Ñ6Ô6¸ÑAÔAÐAs   ™) ©
A³AÁAc            
       óH  — e Zd ZdZg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢dœ	Zg d¢Zg d¢Zg d¢Zede	fd„¦   «         Z
ede	fd„¦   «         Zede	fd„¦   «         Zd*dedefd„Zd+dededefd„Zedefd„¦   «         Zdefd „Zd!„ Zd"„ Zd#efd$„Zdefd%„Zd,d&efd'„Zd(„ Zd)„ ZdS )-ÚKawaiiSpinnerzJAnimated spinner with kawaii faces for CLI feedback during tool execution.)
u   â ‹u   â ™u   â ¹u   â ¸u   â ¼u   â ´u   â ¦u   â §u   â ‡u   â �)u   â �u   â ‚u   â „u   â¡€u   â¢€u   â  u   â �u   â ˆ)u   â–�õ   â–‚õ   â–ƒõ   â–„õ   â–…õ   â–†õ   â–‡u   â–ˆrì  rë  rê  ré  rè  rç  )õ   â†�u   â†–õ   â†‘u   â†—õ   â†’u   â†˜õ   â†“u   â†™)u   âœ¶õ   âœ·õ   âœ¸õ   âœ¹u   âœºró  rò  rñ  )u   ðŸŒ‘u   ðŸŒ’u   ðŸŒ“u   ðŸŒ”u   ðŸŒ•u   ðŸŒ–u   ðŸŒ—u   ðŸŒ˜)u   â—œu   â— u   â—�u   â—žu   â—¡u   â—Ÿ)u   ðŸ§ õ   ðŸ’­õ   ðŸ’¡u   âœ¨u   ðŸ’«u   ðŸŒŸrõ  rô  )u   â�ºõ   Ëšrž  õ   âœ§u   âœ¦r÷  rž  rö  )	ÚdotsÚbounceÚgrowÚarrowsÚstarÚmoonÚpulseÚbrainÚsparkle)
u   (ï½¡â—•â€¿â—•ï½¡)u   (â—•â€¿â—•âœ¿)u   Ù©(â—•â€¿â—•ï½¡)Û¶u   (âœ¿â— â€¿â— )u   ( Ë˜â–½Ë˜)ã�£u   â™ª(Â´Îµ` )u   (â—•á´—â—•âœ¿)u   ãƒ¾(ï¼¾âˆ‡ï¼¾)u   (â‰§â—¡â‰¦)u
   (â˜…Ï‰â˜…))u   (ï½¡â€¢Ì�ï¸¿â€¢Ì€ï½¡)u	   (â—”_â—”)u	   (Â¬â€¿Â¬)u   ( â€¢_â€¢)>âŒ�â– -â– u   (âŒ�â– _â– )u   (Â´ï½¥_ï½¥`)u   â—‰_â—‰u	   (Â°ãƒ­Â°)u   ( Ë˜âŒ£Ë˜)â™¡u   ãƒ½(>âˆ€<â˜†)â˜†u   Ù©(à¹‘â�›á´—â�›à¹‘)Û¶u	   (âŠ™_âŠ™)u   (Â¬_Â¬)u   ( Í¡Â° ÍœÊ– Í¡Â°)u   à² _à² )Ú	ponderingÚcontemplatingÚmusingÚ
cogitatingÚ
ruminatingÚdeliberatingÚmullingÚ
reflectingÚ
processingÚ	reasoningÚ	analyzingÚ	computingÚsynthesizingÚformulatingÚbrainstormingr   c                 ó’   — 	 t          ¦   «         }|r|j                             dg ¦  «        }|r|S n# t          $ r Y nw xY w| j        S )zJReturn waiting faces from the active skin, falling back to KAWAII_WAITING.Úwaiting_faces)rv   Úspinnerr   rI   ÚKAWAII_WAITING©Úclsr0   Úfacess      r   Úget_waiting_faceszKawaiiSpinner.get_waiting_faces>  sf   € ð	Ý‘;”;ˆDØð !Øœ×(Ò(¨¸"Ñ=Ô=�Øð !Ø �LøøÝð 	ð 	ð 	ØˆDð	øøøàÔ!Ð!ó   ‚.2 ²
?¾?c                 ó’   — 	 t          ¦   «         }|r|j                             dg ¦  «        }|r|S n# t          $ r Y nw xY w| j        S )zLReturn thinking faces from the active skin, falling back to KAWAII_THINKING.Úthinking_faces)rv   r  r   rI   ÚKAWAII_THINKINGr  s      r   Úget_thinking_facesz KawaiiSpinner.get_thinking_facesK  sg   € ð	Ý‘;”;ˆDØð !Øœ×(Ò(Ð)9¸2Ñ>Ô>�Øð !Ø �LøøÝð 	ð 	ð 	ØˆDð	øøøàÔ"Ð"r  c                 ó’   — 	 t          ¦   «         }|r|j                             dg ¦  «        }|r|S n# t          $ r Y nw xY w| j        S )zKReturn thinking verbs from the active skin, falling back to THINKING_VERBS.Úthinking_verbs)rv   r  r   rI   ÚTHINKING_VERBS)r  r0   Úverbss      r   Úget_thinking_verbsz KawaiiSpinner.get_thinking_verbsX  sg   € ð	Ý‘;”;ˆDØð !Øœ×(Ò(Ð)9¸2Ñ>Ô>�Øð !Ø �LøøÝð 	ð 	ð 	ØˆDð	øøøàÔ!Ð!r  r   rø  Nr>  Úspinner_typec                 óà   — || _         | j                             || j        d         ¦  «        | _        d| _        d | _        d| _        d | _        d| _        || _	        t          j        | _        d S )Nrø  Fr   )r>  ÚSPINNERSr   Úspinner_framesÚrunningÚthreadÚ	frame_idxÚ
start_timeÚlast_line_lenÚ	_print_fnÚsysÚstdoutÚ_out)Úselfr>  r"  rÂ  s       r   Ú__init__zKawaiiSpinner.__init__e  sf   € ØˆŒØ"œm×/Ò/°¸d¼mÈFÔ>SÑTÔTˆÔØˆŒØˆŒØˆŒØˆŒØˆÔð "ˆŒõ ”JˆŒ	ˆ	ˆ	r   rÂ   Fr†   ÚendÚflushc                 ó  — | j         �)	 |                       |¦  «         n# t          $ r Y nw xY wdS 	 | j                             ||z   ¦  «         |r| j                             ¦   «          dS dS # t
          t          f$ r Y dS w xY w)uå   Write to the stdout captured at spinner creation time.

        If a print_fn was supplied at construction, all output is routed through
        it instead â€” allowing callers to silence the spinner with a no-op lambda.
        N)r+  rI   r.  Úwriter2  rT  rŽ  )r/  r†   r1  r2  s       r   Ú_writezKawaiiSpinner._writeu  s¹   € ð Œ>Ð%ðØ—’˜tÑ$Ô$Ð$Ð$øÝð ð ð Ø�ðøøøàˆFð	ØŒI�OŠO˜D 3™JÑ'Ô'Ð'Øð "Ø”	—’Ñ!Ô!Ð!Ð!Ð!ð"ð "øå�GÐ$ð 	ð 	ð 	ØˆDˆDð	øøøs   ‰ Ÿ
,«,²8A. Á.BÂBc                 ó�   — 	 t          | j        d¦  «        o| j                             ¦   «         S # t          t          f$ r Y dS w xY w)z@Check if output is a real terminal, safe against closed streams.ÚisattyF)Úhasattrr.  r7  rT  rŽ  ©r/  s    r   Ú_is_ttyzKawaiiSpinner._is_ttyˆ  sS   € ð	Ý˜4œ9 hÑ/Ô/ÐF°D´I×4DÒ4DÑ4FÔ4FÐFøÝ�GÐ$ð 	ð 	ð 	Ø�5�5ð	øøøs   ‚-0 °AÁAc                 ó\   — 	 ddl m} t          | j        |¦  «        S # t          $ r Y dS w xY w)uÈ  Return True when stdout is prompt_toolkit's StdoutProxy.

        patch_stdout wraps sys.stdout in a StdoutProxy that queues writes and
        injects newlines around each flush().  The \r overwrite never lands on
        the correct line â€” each spinner frame ends up on its own line.

        The CLI already drives a TUI widget (_spinner_text) for spinner display,
        so KawaiiSpinner's \r-based animation is redundant under StdoutProxy.
        r   )ÚStdoutProxyF)Úprompt_toolkit.patch_stdoutr<  r   r.  ÚImportError)r/  r<  s     r   Ú_is_patch_stdout_proxyz$KawaiiSpinner._is_patch_stdout_proxy�  sM   € ð	Ø?Ð?Ð?Ð?Ð?Ð?Ý˜dœi¨Ñ5Ô5Ð5øÝð 	ð 	ð 	Ø�5�5ð	øøøs   ‚ �
+ª+c                 óä  — | j         sC|                      d| j        › �d¬¦  «         | j        rt	          j        d¦  «         | j        °d S |                      ¦   «         r$| j        rt	          j        d¦  «         | j        °d S t          ¦   «         }|r|                     ¦   «         ng }| j        �r?t          j
        d¦  «        rt	          j        d¦  «         Œ1| j        | j        t          | j        ¦  «        z           }t	          j        ¦   «         | j        z
  }|r9|| j        t          |¦  «        z           \  }}d|› d|› d| j        › d|› d	|d
›d�}nd|› d| j        › d	|d
›d�}t          | j        t          |¦  «        z
  d¦  «        }|                      d|› d|z  › �dd¬¦  «         t          |¦  «        | _        | xj        dz  c_        t	          j        d¦  «         | j        �°=d S d S )Nz	  [tool] T©r2  ç      à?gš™™™™™¹?ÚHERMES_SPINNER_PAUSEú  rˆ   ú (ú.1fús)r   úr   ©r1  r2  r#   g¸…ëQ¸¾?)r:  r5  r>  r&  ÚtimeÚsleepr?  rv   Úget_spinner_wingsrƒ  Úgetenvr%  r(  r*   r)  rH   r*  )	r/  r0   ÚwingsÚframeÚelapsedÚleftÚrightrÃ  Úpads	            r   Ú_animatezKawaiiSpinner._animate   s.  € ð Œ|ð 	Ø�KŠKÐ2 D¤LÐ2Ð2¸$ˆKÑ?Ô?Ð?Ø”,ð  Ý”
˜3‘”�ð ”,ð  àˆFð ×&Ò&Ñ(Ô(ð 	Ø”,ð  Ý”
˜3‘”�ð ”,ð  àˆFõ ‰{Œ{ˆØ,0Ð8�×&Ò&Ñ(Ô(Ð(°bˆàŒlñ 	ÝŒyÐ/Ñ0Ô0ð Ý”
˜3‘”�ØØÔ'¨¬½¸TÔ=PÑ9QÔ9QÑ(QÔRˆEÝ”i‘k”k D¤OÑ3ˆGØð DØ# D¤NµS¸±Z´ZÑ$?Ô@‘��eØR˜DÐRÐR 5ÐRÐR¨4¬<ÐRÐR¸%ÐRÐRÀ7ÐRÐRÐRÐR��àC˜EÐCÐC D¤LÐCÐC°GÐCÐCÐCÐC�Ý�dÔ(­3¨t©9¬9Ñ4°aÑ8Ô8ˆCØ�KŠKÐ.˜TÐ. 3¨¡9Ð.Ð.°B¸dˆKÑCÔCÐCÝ!$ T¡¤ˆDÔØˆNŒN˜aÑˆNŒNÝŒJ�tÑÔÐð Œlñ 	ð 	ð 	ð 	ð 	r   c                 óÈ   — | j         rd S d| _         t          j        ¦   «         | _        t          j        | j        d¬¦  «        | _        | j                             ¦   «          d S )NT)r4  Údaemon)r&  rJ  r)  Ú	threadingÚThreadrT  r'  Ústartr9  s    r   rY  zKawaiiSpinner.startÉ  sX   € ØŒ<ð 	ØˆFØˆŒÝœ)™+œ+ˆŒÝÔ&¨d¬mÀDÐIÑIÔIˆŒØŒ×ÒÑÔÐÐÐr   Únew_messagec                 ó   — || _         d S rð   )r>  )r/  rZ  s     r   Úupdate_textzKawaiiSpinner.update_textÑ  s   € Ø"ˆŒˆˆr   c                 ó¼   — | j         s|                      d|› �d¬¦  «         dS dt          | j        dz   d¦  «        z  }|                      d|› d	|› �d¬¦  «         dS )
a¤  Print a line above the spinner without disrupting animation.

        Clears the current spinner line, prints the text, and lets the
        next animation tick redraw the spinner on the line below.
        Thread-safe: uses the captured stdout reference (self._out).
        Works inside redirect_stdout(devnull) because _write bypasses
        sys.stdout and writes to the stdout captured at spinner creation.
        rD  TrA  Nrˆ   r&   r"  rH  z  )r&  r5  rH   r*  )r/  r†   Úblankss      r   Úprint_abovezKawaiiSpinner.print_aboveÔ  sz   € ð Œ|ð 	Ø�KŠK˜˜T˜˜¨4ˆKÑ0Ô0Ð0ØˆFð •s˜4Ô-°Ñ1°2Ñ6Ô6Ñ6ˆØ�ŠÐ+˜Ð+Ð+ TÐ+Ð+°4ˆÑ8Ô8Ð8Ð8Ð8r   Úfinal_messagec                 ó¦  — d| _         | j        r| j                             d¬¦  «         | j        }|r7dt	          | j        dz   d¦  «        z  }|                      d|› d�dd	¬
¦  «         |re| j        r dt          j        ¦   «         | j        z
  d›d�nd}|r|                      d|› �d	¬¦  «         d S |                      d|› |› �d	¬¦  «         d S d S )NFrB  )r(  rˆ   r&   r"  rH  r   TrI  rE  rF  rG  rD  rA  z	  [done] )	r&  r'  r‰   r:  rH   r*  r5  r)  rJ  )r/  r`  Úis_ttyr^  rP  s        r   ÚstopzKawaiiSpinner.stopæ  s  € ØˆŒØŒ;ð 	*ØŒK×Ò SÐÑ)Ô)Ð)à”ˆØð 	=ð �3˜tÔ1°AÑ5°rÑ:Ô:Ñ:ˆFØ�KŠK˜˜V˜˜˜¨R°tˆKÑ<Ô<Ð<Øð 	NØDHÄOÐ[Ð@�4œ9™;œ;¨¬Ñ8Ð@Ð@Ð@Ð@Ð@ÐY[ˆGØð NØ—’Ð0 Ð0Ð0¸�Ñ=Ô=Ð=Ð=Ð=à—’Ð@¨Ð@°wÐ@Ð@È�ÑMÔMÐMÐMÐMð	Nð 	Nr   c                 ó.   — |                       ¦   «          | S rð   )rY  r9  s    r   Ú	__enter__zKawaiiSpinner.__enter__ø  s   € Ø�
Š
‰ŒˆØˆr   c                 ó.   — |                       ¦   «          dS )NF)rc  )r/  Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zKawaiiSpinner.__exit__ü  s   € Ø�	Š	‰ŒˆØˆur   )r   rø  N)rÂ   Frð   )rh   ri   rj   rk   r$  r  r  r  Úclassmethodrl   r  r  r!  r   r0  r•   r5  Úpropertyr:  r?  rT  rY  r\  r_  rc  re  rj  rV   r   r   ræ  ræ    sR  € € € € € ØTÐTð WÐVÐVØJÐJÐJØrÐrÐrØJÐJÐJØHÐHÐHØPÐPÐPØ;Ð;Ð;ØPÐPÐPØEÐEÐEð
ð 
€Hðð ð €Nð
ð ð €Oðð ð €Nð ð
" $ð 
"ð 
"ð 
"ñ „[ð
"ð ð
# 4ð 
#ð 
#ð 
#ñ „[ð
#ð ð
" 4ð 
"ð 
"ð 
"ñ „[ð
"ðð  ð ¸ð ð ð ð ð ð ˜3ð  Sð ¸ð ð ð ð ð& ð˜ð ð ð ñ „Xðð¨ð ð ð ð ð 'ð 'ð 'ðRð ð ð# sð #ð #ð #ð #ð9 ð 9ð 9ð 9ð 9ð$Nð N #ð Nð Nð Nð Nð$ð ð ðð ð ð ð r   ræ  é0   rL  c                 ó0  — |                       ¦   «         } d| v rP|                      d¦  «        \  }}}|                      ¦   «         }d|v rd|                     dd¦  «        d         › �} t          | ¦  «        t          k    r| dt          dz
  …         dz   } | S )	z½Shrink an error message for inline display in a tool status line.

    Strips overly long absolute paths down to just the filename so the
    suffix stays readable on narrow terminals.
    zFile not found:r¦   zFile not found: r#   r§   Nr$   r�   )r   Ú	partitionr¨   r*   Ú_ERROR_SUFFIX_MAX_LEN)rL  Ú_r£   s      r   Ú_trim_errorrr    sœ   € ð �)Š)‰+Œ+€Cà˜CÐÐØ—]’]Ð#4Ñ5Ô5‰
ˆˆ1ˆdØ�zŠz‰|Œ|ˆØ�$ˆ;ˆ;Ø> T§[¢[°°aÑ%8Ô%8¸Ô%<Ð>Ð>ˆCÝ
ˆ3�x„xÕ'Ò'Ð'ØÐ-Õ)¨AÑ-Ð-Ô.°Ñ6ˆØ€Jr   c                 ó~  — |€dS t          | |¦  «        rdS t          |¦  «        }| dk    rut          |t          ¦  «        r^|                     d¦  «        }|�G|dk    rA|                     d¦  «        }|r"ddt          t          |¦  «        ¦  «        › d	�fS dd
|› d	�fS dS | dk    rFt          |t          ¦  «        r1|                     d¦  «        du rd|                     dd¦  «        v rdS t          |t          ¦  «        ri|                     d¦  «        p|                     d¦  «        }|r=|                     d¦  «        du sd|v r"ddt          t          |¦  «        ¦  «        › d	�fS t          |t          ¦  «        sdS |dd…                              ¦   «         }d|v sd|v s|                     d¦  «        rdS dS )aF  Inspect a tool result string for signs of failure.

    Returns ``(is_failure, suffix)`` where *suffix* is a short informational
    tag like ``" [exit 1]"`` for terminal failures, ``" [full]"`` for memory
    overflow, or a trimmed error message (``" [File not found: foo.py]"``).
    On success returns ``(False, "")``.
    N)Fr   r  Ú	exit_coder   r®  Tz [Ú]z [exit r3  r¯  Fzexceed the limitr   )Tz [full]r>  iô  z"error"z"failed"ÚError)Tz [error])	r   r	   r   r   r   rr  r   rV  rÃ   )r|   r¬  r'  rt  Úerr_msgÚerrrV  s          r   Ú_detect_tool_failurery    s  € ð €~ØˆyÝ" 9¨fÑ5Ô5ð Øˆyå˜6Ñ"Ô"€Dð �JÒÐÝ�d�DÑ!Ô!ð 	4ØŸš Ñ-Ô-ˆIØÐ$¨°aª¨ØŸ(š( 7Ñ+Ô+�Øð CØÐ!B¥kµ#°g±,´,Ñ&?Ô&?Ð!BÐ!BÐ!BÐBÐBØÐ3 yÐ3Ð3Ð3Ð3Ð3Øˆyð �HÒÐÝ�d�DÑ!Ô!ð 	'Ø�xŠx˜	Ñ"Ô" eÐ+Ð+Ð0BÀdÇhÂhÈwÐXZÑF[ÔF[Ð0[Ð0[Ø&�õ �$�ÑÔð 7Ø�hŠh�wÑÔÐ6 4§8¢8¨IÑ#6Ô#6ˆØð 	7�D—H’H˜YÑ'Ô'¨5Ð0Ð0°G¸t°O°OØÐ6�k­#¨c©(¬(Ñ3Ô3Ð6Ð6Ð6Ð6Ð6õ
 �f�cÑ"Ô"ð ØˆyØ�4�C�4ŒL×ÒÑ Ô €EØ�EÐÐ˜Z¨5Ð0Ð0°F×4EÒ4EÀgÑ4NÔ4NÐ0ØÐàˆ9r   Údurationc                 óì  ‡'‡(‡)— t          | |¦  «        p|}|d›d�}t          | |¦  «        \  Š(Š't          ¦   «         Š)d¨d„}d©d„}dt          dt          fˆ'ˆ(ˆ)fd	„}| d
k    r/ |d ||                     dd¦  «        d¦  «        › d|› �¦  «        S | dk    �r|                     dg ¦  «        }|rÛt          t          |t          ¦  «        r|d         n|¦  «        }	|	s |d|› �¦  «        S |	                     dd¦  «                             dd¦  «         	                    d¦  «        d         }
t          |t          ¦  «        r(t          |¦  «        dk    rdt          |¦  «        dz
  › �nd} |d ||
d¦  «        › |› d|› �¦  «        S  |d|› �¦  «        S | dk    r? |d |t          | |¦  «        p|                     dd¦  «        d¦  «        › d|› �¦  «        S | dk    rz|                     dd¦  «        }|                     d d¦  «        d!d"…         }d#d$|› �d%|› �d&|› �d'|› �d(|› �d)|› �d*œ} |d+|                     ||› d,|› �¦  «        › d|› �¦  «        S | d-k    r? |d. |t          | |¦  «        p|                     d/d¦  «        d¦  «        › d|› �¦  «        S | d0k    r. |d1 ||                     d/d¦  «        ¦  «        › d|› �¦  «        S | d2k    r. |d3 ||                     d/d¦  «        ¦  «        › d|› �¦  «        S | d4k    rU ||                     d5d¦  «        d¦  «        }|                     d6d7¦  «        }|d8k    rd9nd:} |d;|d<›d,|› d|› �¦  «        S | d=k    rt|                     d>d¦  «        }	|	                     dd¦  «                             dd¦  «         	                    d¦  «        d         }
 |d? ||
d¦  «        › d|› �¦  «        S | d@k    r*|                     dA¦  «        rdAndB} |dC|› d|› �¦  «        S | dDk    r% |dE|                     dFd¦  «        › d|› �¦  «        S | dGk    r/ |dH ||                     dId¦  «        dJ¦  «        › dK|› �¦  «        S | dLk    rE|                     dMdN¦  «        }dOdPdQdRdSœ                     |dO¦  «        } |dT|› dU|› d|› �¦  «        S | dVk    r |dW|› �¦  «        S | dXk    r% |dY|                     dZd¦  «        › d|› �¦  «        S | d[k    r |d\|› �¦  «        S | d]k    r |d^|› �¦  «        S | d_k    �r>|                     d`¦  «        }|                     dadb¦  «        }d}d}|re	 t          |¦  «        }|rB|                     dci ¦  «        }|                     ddd¦  «        }|                     ded¦  «        }n# t          $ r Y nw xY w|€(|dk    r |df|› d|› dg|› �¦  «        S  |dh|› �¦  «        S |r>|dk    r|dk    r |di|› d|› dj|› �¦  «        S  |dit          |¦  «        › dg|› �¦  «        S |dk    r|dk    r |df|› d|› dg|› �¦  «        S  |dft          |¦  «        › dg|› �¦  «        S | dkk    r/ |dl ||                     dd¦  «        d¦  «        › dK|› �¦  «        S | dmk    r÷|                     dd¦  «        }|                     d6d¦  «        }|dnk    r2 |do|› dp ||                     d7d¦  «        dJ¦  «        › dK|› �¦  «        S |dqk    r;|                     dr¦  «        pd}|r|nds} |dt|› dp ||du¦  «        › dK|› �¦  «        S |dvk    r;|                     dr¦  «        pd}|r|nds} |dw|› dp ||du¦  «        › dK|› �¦  «        S  |dx|› d|› �¦  «        S | dyk    r% |dz|                     d{d|¦  «        › d|› �¦  «        S | d}k    r`|                     d~d¦  «        }|                     d¦  «        }|r|r|› d€|› �nt          |¦  «        } |d� ||d‚¦  «        › d|› �¦  «        S | dƒk    r/ |d„ ||                     d…d¦  «        d¦  «        › d|› �¦  «        S | d†k    r/ |d‡ ||                     dId¦  «        dJ¦  «        › d|› �¦  «        S | dˆk    r/ |d‰ ||                     dŠd¦  «        dJ¦  «        › d|› �¦  «        S | d‹k    rF |dŒ|                     d6d¦  «        › dp ||                     d�d¦  «        dŽ¦  «        › dK|› �¦  «        S | d�k    rì|                     dd¦  «        }|d�k    r”|                     d‘¦  «        p,|                     d’¦  «        sg n|                     d’¦  «        g}|                     d~¦  «        p!|r|d         nd!p|                     d…d“¦  «        } |d” ||d•¦  «        › d|› �¦  «        S |d–k    r |d—|› �¦  «        S  |d˜|› d,|                     d™d¦  «        › d|› �¦  «        S | dšk    rt|                     d›d¦  «        }|                     ¦   «         r-|                     ¦   «          	                    dœ¦  «        d         nd}  |d� || d¦  «        › d|› �¦  «        S | džk    r·|                     dŸ¦  «        }!|!rqt          |!t          ¦  «        r\t          |!dJ¬ ¦  «        \  }"}#|#rd¡                     |#¦  «        nd¢}$|"pt          |!¦  «        }% |d£|%› d¤ ||$d¦  «        › d|› �¦  «        S  |d£ ||                     d¥d¦  «        d¦  «        › d|› �¦  «        S t          | |¦  «        pd}& |d¦| d!d§…         d<›d, ||&d¦  «        › d|› �¦  «        S )ªa
  Generate a formatted tool completion line for CLI quiet mode.

    Format: ``| {emoji} {verb:9} {detail}  {duration}``

    When *result* is provided the line is checked for failure indicators.
    Failed tool calls get a red prefix and an informational suffix.
    rF  r*  r"  c                 ó’   — t          | ¦  «        } t          dk    r| S t          }t          | ¦  «        |k    r| d |dz
  …         dz   n| S )Nr   r$   r�   ©r   rn   r*   )r*  ro   rÞ   s      r   Ú_truncz&_get_cute_tool_message.<locals>._trunc[  sL   € Ý�‰FŒFˆÝ  AÒ%Ð%ØˆHÝ%ˆÝ(+¨A©¬°ª¨��(�5˜‘7�(”˜eÑ#Ð#¸AÐ=r   é#   c                 ó”   — t          | ¦  «        } t          dk    r| S t          }t          | ¦  «        |k    rd| |dz
   d …         z   n| S )Nr   r�   r$   r}  )r,  ro   rÞ   s      r   Ú_pathz%_get_cute_tool_message.<locals>._pathb  sN   € Ý�‰FŒFˆÝ  AÒ%Ð%ØˆHÝ%ˆÝ+.¨q©6¬6°Eª>¨>�˜˜E !™G˜*˜+˜+œÑ&Ð&¸qÐ@r   rÃ  r   c                 óR   •— ‰dk    r|                       d‰d¦  «        } ‰s| S | › ‰› �S )z*Apply skin tool prefix and failure suffix.rx   r#   )rò   )rÃ  Úfailure_suffixÚ
is_failureÚskin_prefixs    €€€r   Ú_wrapz%_get_cute_tool_message.<locals>._wrapi  sA   ø€ à˜%ÒÐØ—<’<  {°AÑ6Ô6ˆDØð 	ØˆKØÐ(˜Ð(Ð(Ð(r   r  u   â”Š ðŸ”� search    r  r   é*   rD  r  r  r   u   â”Š ðŸ“„ fetch     pages  zhttps://zhttp://r¦   r#   z +u   â”Š ðŸ“„ fetch     r  u   â”Š ðŸ’» $         rÀ   r%  r  rþ   r&  Né   zls processeszpoll zlog zwait zkill zwrite zsubmit )rl   ÚpollÚlogr)  Úkillr4  Úsubmitu   â”Š âš™ï¸�  proc      rˆ   r	  u   â”Š ðŸ“– read      r
  r  u   â”Š âœ�ï¸�  write     r  u   â”Š ðŸ”§ patch     r  r  r4  r6  r¤  ÚfindÚgrepu	   â”Š ðŸ”Ž Ú9r  r   u   â”Š ðŸŒ� navigate  Úbrowser_snapshotÚfullÚcompactu   â”Š ðŸ“¸ snapshot  r  u   â”Š ðŸ‘† click     r  r÷   u   â”Š âŒ¨ï¸�  type      "r†   é   z"  Úbrowser_scrollÚ	directionÚdownrð  rî  rï  rí  )r–  ÚuprR  rQ  u   â”Š z  scroll    Úbrowser_backu   â”Š â—€ï¸�  back      Úbrowser_pressu   â”Š âŒ¨ï¸�  press     r   Úbrowser_get_imagesu#   â”Š ðŸ–¼ï¸�  images    extracting  Úbrowser_visionu'   â”Š ðŸ‘�ï¸�  vision    analyzing page  r-  r.  r/  FrÝ  ÚtotalÚ	completedu   â”Š ðŸ“‹ plan      z
 task(s)  u"   â”Š ðŸ“‹ plan      reading tasks  u   â”Š ðŸ“‹ plan      update u    âœ“  r1  u   â”Š ðŸ”� recall    "r3  r5  u   â”Š ðŸ§  memory    +r8  rò   r9  r:  u   â”Š ðŸ§  memory    ~r>   r<  u   â”Š ðŸ§  memory    -u   â”Š ðŸ§  memory    r  u   â”Š ðŸ“š skills    list r  Úallr  r  r@  rA  u   â”Š ðŸ“š skill     é,   r  u   â”Š ðŸŽ¨ create    r  r  u   â”Š ðŸ”Š speak     r  u   â”Š ðŸ‘�ï¸�  vision    r  r=  u   â”Š ðŸ“¨ send      r>  r2  r  r˜  ÚskillsÚskillr   u   â”Š â�° cron      create é   rl   u   â”Š â�° cron      listing  u   â”Š â�° cron      Újob_idr  r  rÂ   u   â”Š ðŸ�� exec      r  rú   r#  r$  Úparallelu   â”Š ðŸ”€ delegate  zx: rý   õ   â”Š âš¡ é	   )r"  )r  )rù   ry  rz   r   r   r   r   rl   rò   rŠ   r*   rN  r	   rI   r   r  r‰   )*r|   rÛ   rz  r¬  Údurr~  r�  r†  r  r   ÚdomainÚextrar  rE  Úlabelsr  r4  r}  ÚmodeÚdÚarrowrH  r/  rœ  Údoner'  r*  rK  rI  r@  r   r  Ú
first_linerú   rC  rÿ   ÚdetailÚcount_labelrD  rƒ  r„  r…  s*                                          @@@r   Ú_get_cute_tool_messager²  L  sY  øøø€ õ (¨	°4Ñ8Ô8Ð@¸D€DØÐ
Ð
Ð
Ð
€CÝ!5°iÀÑ!HÔ!HÑ€J�Ý&Ñ(Ô(€Kð>ð >ð >ð >ðAð Að Að Að)•Cð )�Cð )ð )ð )ð )ð )ð )ð )ð )ð �LÒ Ð ØˆuÐU¨6¨6°$·(²(¸7ÀBÑ2GÔ2GÈÑ+LÔ+LÐUÐUÐPSÐUÐUÑVÔVÐVØ�MÒ!Ñ!Ø�xŠx˜ Ñ#Ô#ˆØð 	SÝ­*°T½4Ñ*@Ô*@ÐJ˜t Aœw˜wÀdÑKÔKˆCØð AØ�uÐ?¸#Ð?Ð?Ñ@Ô@Ð@Ø—[’[ ¨RÑ0Ô0×8Ò8¸ÀBÑGÔG×MÒMÈcÑRÔRÐSTÔUˆFÝ*4°T½4Ñ*@Ô*@ÐZÅSÈÁYÄYÐQRÂ]À]Ð&�˜T™œ 1™Ð&Ð&Ð&ÐXZˆEØ�5ÐQ¨v¨v°f¸bÑ/AÔ/AÐQÀ5ÐQÐQÈCÐQÐQÑRÔRÐRØˆuÐ7°#Ð7Ð7Ñ8Ô8Ð8Ø�JÒÐØˆuÐ~¨6¨6Õ2DÀYÐPTÑ2UÔ2UÐ2pÐY]×YaÒYaÐbkÐmoÑYpÔYpÐrtÑ+uÔ+uÐ~Ð~Ðy|Ð~Ð~ÑÔÐØ�IÒÐØ—’˜( CÑ(Ô(ˆØ�hŠh�| RÑ(Ô(¨¨"¨Ô-ˆØ(°-¸#°-°-ÈÈsÈÈØ' #˜-˜-°¸°°ÈÐRUÈÈÐcrÐmpÐcrÐcrðtð tˆàˆuÐ\¨f¯jªj¸ÀFÐARÐARÈSÐARÐARÑ.SÔ.SÐ\Ð\ÐWZÐ\Ð\Ñ]Ô]Ð]Ø�KÒÐØˆuÐ{¨6¨6Õ2DÀYÐPTÑ2UÔ2UÐ2mÐY]×YaÒYaÐbhÐjlÑYmÔYmÐoqÑ+rÔ+rÐ{Ð{ÐvyÐ{Ð{Ñ|Ô|Ð|Ø�LÒ Ð ØˆuÐR¨e¨e°D·H²H¸VÀRÑ4HÔ4HÑ.IÔ.IÐRÐRÈSÐRÐRÑSÔSÐSØ�GÒÐØˆuÐO¨5¨5°·²¸&À"Ñ1EÔ1EÑ+FÔ+FÐOÐOÈ#ÐOÐOÑPÔPÐPØ�NÒ"Ð"Ø�&˜Ÿš )¨RÑ0Ô0°"Ñ5Ô5ˆØ—’˜( IÑ.Ô.ˆØ 7Ò*Ð*ˆvˆv°ˆØˆuÐ: Ð:Ð:Ð:¨'Ð:Ð:°SÐ:Ð:Ñ;Ô;Ð;ØÐ&Ò&Ð&Ø�hŠh�u˜bÑ!Ô!ˆØ—’˜Z¨Ñ,Ô,×4Ò4°YÀÑCÔC×IÒIÈ#ÑNÔNÈqÔQˆØˆuÐF¨6¨6°&¸"Ñ+=Ô+=ÐFÐFÀÐFÐFÑGÔGÐGØÐ&Ò&Ð&ØŸš &Ñ)Ô)Ð8ˆvˆv¨yˆØˆuÐ8¨4Ð8Ð8°3Ð8Ð8Ñ9Ô9Ð9Ø�OÒ#Ð#ØˆuÐH¨4¯8ª8°E¸3Ñ+?Ô+?ÐHÐHÀ3ÐHÐHÑIÔIÐIØ�NÒ"Ð"ØˆuÐ[°°°t·x²xÀÈÑ7KÔ7KÈRÑ0PÔ0PÐ[Ð[ÐVYÐ[Ð[Ñ\Ô\Ð\ØÐ$Ò$Ð$Ø�HŠH�[ &Ñ)Ô)ˆØ e°eÀUÐKÐK×OÒOÐPQÐSXÑYÔYˆØˆuÐ9˜EÐ9Ð9¨qÐ9Ð9°CÐ9Ð9Ñ:Ô:Ð:Ø�NÒ"Ð"ØˆuÐ3¨cÐ3Ð3Ñ4Ô4Ð4Ø�OÒ#Ð#ØˆuÐK¨d¯hªh°u¸cÑ.BÔ.BÐKÐKÀcÐKÐKÑLÔLÐLØÐ(Ò(Ð(ØˆuÐ@¸3Ð@Ð@ÑAÔAÐAØÐ$Ò$Ð$ØˆuÐD¸sÐDÐDÑEÔEÐEØ�FÒÑØ—H’H˜WÑ%Ô%ˆ	Ø—’˜ %Ñ(Ô(ˆàˆØˆØð 	ðÝ& vÑ.Ô.�Øð 1ØŸš ¨BÑ/Ô/�AØŸEšE '¨1Ñ-Ô-�EØŸ5š5 ¨aÑ0Ô0�DøøÝð ð ð Ø�ðøøøàÐØ�qŠyˆyØ�uÐP°4ÐPÐP¸%ÐPÐPÈ3ÐPÐPÑQÔQÐQØ�5ÐC¸cÐCÐCÑDÔDÐDØð 	PØ�qŠyˆy˜T AšX˜XØ�uÐS¸$ÐSÐSÀÐSÐSÈcÐSÐSÑTÔTÐTØ�5ÐUµc¸)±n´nÐUÐUÐPSÐUÐUÑVÔVÐVà�qŠyˆy˜T AšX˜XØ�uÐP°4ÐPÐP¸%ÐPÐPÈ3ÐPÐPÑQÔQÐQØ�5ÐN­s°9©~¬~ÐNÐNÈÐNÐNÑOÔOÐOØÐ$Ò$Ð$ØˆuÐY¨V¨V°D·H²H¸WÀbÑ4IÔ4IÈ2Ñ-NÔ-NÐYÐYÐTWÐYÐYÑZÔZÐZØ�HÒÐØ—’˜( CÑ(Ô(ˆØ—’˜( BÑ'Ô'ˆØ�UŠ?ˆ?Ø�5Ðj°ÐjÐj¸F¸FÀ4Ç8Â8ÈIÐWYÑCZÔCZÐ\^Ñ<_Ô<_ÐjÐjÐehÐjÐjÑkÔkÐkØ�yÒ Ð Ø—(’(˜:Ñ&Ô&Ð,¨"ˆCØÐ6�#�#Ð"6ˆCØ�5ÐV°ÐVÐV¸F¸FÀ3È¹O¼OÐVÐVÐQTÐVÐVÑWÔWÐWØ�xÒÐØ—(’(˜:Ñ&Ô&Ð,¨"ˆCØÐ6�#�#Ð"6ˆCØ�5ÐV°ÐVÐV¸F¸FÀ3È¹O¼OÐVÐVÐQTÐVÐVÑWÔWÐWØˆuÐ:¨6Ð:Ð:°SÐ:Ð:Ñ;Ô;Ð;Ø�MÒ!Ð!ØˆuÐT°·²¸ÀUÑ0KÔ0KÐTÐTÈsÐTÐTÑUÔUÐUØ�LÒ Ð Ø—’˜ Ñ$Ô$ˆØ—H’H˜[Ñ)Ô)ˆ	Øð 	LØ27ÐK�uÐ.Ð. 9Ð.Ð.Ð.½SÀ¹^¼^ˆEØˆuÐE¨6¨6°%¸Ñ+<Ô+<ÐEÐEÀÐEÐEÑFÔFÐFØÐ$Ò$Ð$ØˆuÐV¨6¨6°$·(²(¸8ÀRÑ2HÔ2HÈ"Ñ+MÔ+MÐVÐVÐQTÐVÐVÑWÔWÐWØÐ$Ò$Ð$ØˆuÐT¨6¨6°$·(²(¸6À2Ñ2FÔ2FÈÑ+KÔ+KÐTÐTÈsÐTÐTÑUÔUÐUØÐ$Ò$Ð$ØˆuÐ\¨v¨v°d·h²h¸zÈ2Ñ6NÔ6NÐPRÑ/SÔ/SÐ\Ð\ÐWZÐ\Ð\Ñ]Ô]Ð]Ø�NÒ"Ð"ØˆuÐv¨4¯8ª8°H¸cÑ+BÔ+BÐvÐvÈÈÈtÏxÊxÐXaÐceÑOfÔOfÐhjÑHkÔHkÐvÐvÐqtÐvÐvÑwÔwÐwØ�IÒÐØ—’˜( CÑ(Ô(ˆØ�XÒÐØ—X’X˜hÑ'Ô'Ða°d·h²h¸wÑ6GÔ6GÐ,`¨B¨BÈdÏhÊhÐW^ÑN_ÔN_ÐM`ˆFØ—H’H˜VÑ$Ô$Ðe°fÐ)F¨°¬¨À$ÐeÈ4Ï8Ê8ÐT\Ð^dÑKeÔKeˆEØ�5ÐO°V°V¸EÀ2Ñ5FÔ5FÐOÐOÈ#ÐOÐOÑPÔPÐPØ�VÒÐØ�5Ð<°sÐ<Ð<Ñ=Ô=Ð=ØˆuÐR¨&ÐRÐR°4·8²8¸HÀbÑ3IÔ3IÐRÐRÈSÐRÐRÑSÔSÐSØ�NÒ"Ð"Ø�xŠx˜ Ñ#Ô#ˆØ48·J²J±L´LÐH�T—Z’Z‘\”\×'Ò'¨Ñ-Ô-¨aÔ0Ð0Àbˆ
ØˆuÐJ¨6¨6°*¸bÑ+AÔ+AÐJÐJÀSÐJÐJÑKÔKÐKØ�OÒ#Ð#Ø—’˜Ñ!Ô!ˆØð 	\•Z ¥tÑ,Ô,ð 	\Ý 9¸%ÈbÐ QÑ QÔ QÑˆJ˜Ø*/Ð?�U—Z’Z Ñ&Ô&Ð&°ZˆFØ$Ð2­¨E©
¬
ˆKØ�5ÐZ¨{ÐZÐZ¸v¸vÀfÈbÑ?QÔ?QÐZÐZÐUXÐZÐZÑ[Ô[Ð[ØˆuÐT¨6¨6°$·(²(¸6À2Ñ2FÔ2FÈÑ+KÔ+KÐTÐTÈsÐTÐTÑUÔUÐUå  ¨DÑ1Ô1Ð7°R€GØˆ5ÐJ˜I b q bœMÐJÐJÐJ¨f¨f°W¸bÑ.AÔ.AÐJÐJÀSÐJÐJÑKÔKÐKs   ÕAV. Ö.
V;Ö:V;c                 ó0  — 	 t          | |||¬¦  «        S # t          $ rv}t                               d| |¦  «         t	          | t
          ¦  «        r| r
| dd…         nd}t	          |t          t          f¦  «        r|d›d�nd}d	|d
›d|› �cY d}~S d}~ww xY w)zCRender a completion label without letting cosmetic failures escape.)r¬  z'Tool completion label failed for %s: %sNr¦  ÚtoolrF  r*  r®  r¥  r�  z completed  )r²  rI   rà  rá  r   r   r+   Úfloat)r|   rÛ   rz  r¬  rã  Ú	safe_nameÚsafe_durations          r   Úget_cute_tool_messager¸  ü  sÑ   € ðCÝ% i°°xÈÐOÑOÔOÐOøÝð Cð Cð CÝ�ŠÐ>À	È3ÑOÔOÐOÝ%/°	½3Ñ%?Ô%?ÐYÀIÐY�I˜b˜q˜b”M�MÐSYˆ	Ý.8¸ÅCÍÀ<Ñ.PÔ.PÐ\˜8Ð*Ð*Ð*Ð*Ð*ÐV\ˆØB˜)ÐBÐBÐB°=ÐBÐBÐBÐBÐBÐBÐBÐBøøøøð	Cøøøs   ‚ •
BŸA+BÂ
BÂB)r{   rð   )rx  )jrk   Úloggingrƒ  rÈ   r,  rW  rJ  Údataclassesr   r   Údifflibr   Úpathlibr   Útypingr   Úurllib.parser   Úutilsr	   Úagent.redactr
   Ú agent.tool_result_classificationr   Ú_REDÚ_RESETÚ	getLoggerrh   rà  rÇ  r   r   r   r   rm   rS   rW   rY   r\   r^   r`   Ú_MAX_INLINE_DIFF_FILESÚ_MAX_INLINE_DIFF_LINESrd   rn   r+   rq   rs   rv   rz   r…   r‹   r�   r“   rÕ   r»   r©   rl   r¸   r¿   rÆ   rË   rÍ   r•   rÒ   rÚ   rá   rè   rù   rG   r  rN  r[  rg  Ú	frozensetrh  ri  rj  rm  ro  rr  ru  rw  r  r�  r‡  r�  r”  r¥  r¨  r«  r°  r¼  r¿  rÄ  rÌ  rÒ  rÞ  rä  ræ  rp  rr  ry  rµ  r²  r¸  rV   r   r   ú<module>rÈ     s®  ððð ð ð €€€Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ø HÐ HÐ HÐ HÐ HÐ Hð €Ø	€à	ˆÔ	˜8Ñ	$Ô	$€à€ð;˜ð ; ð ;ð ;ð ;ð ;ð .2Ð �T˜#˜s˜(”^ dÑ*Ð 1Ð 1Ñ 1ð-�D˜˜c˜”Nð -ð -ð -ð -ðb .Ð -Ð -Ø .Ð .Ð .Ø .Ð .Ð .Ø /Ð /Ð /Ø .Ð .Ð .ØÐ ØÐ ð ð@ð @ð @ð @ð @ñ @ô @ñ „ð@ð Ð �sÐ Ð Ñ ð7 ð 7¨ð 7ð 7ð 7ð 7ð! #ð !ð !ð !ð !ðð ð ð˜cð ð ð ð ðð ˜cð ¨Cð ¸Cð ð ð ð ð<"�3ð "˜3ð "ð "ð "ð "ð
˜Cð ¨#°©*ð ¸ð ð ð ð ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð mÐlÐlÐ Ø?Ð?Ð?Ð ð3˜#ð 3 #ð 3ð 3ð 3ð 3ð ð ¨¨S¬	ð ð ð ð ð>	! Cð 	!¨Cð 	!ð 	!ð 	!ð 	!ð& 3ð &¨4°¬9ð &ð &ð &ð &ðRG˜cð G cð Gð Gð Gð Gð! #ð !¨#ð !ð !ð !ð !ð"N Sð N¨Tð Nð Nð Nð NðL Sð L¨Sð Lð Lð Lð Lð4- ð -¨ð -ð -ð -ð -ð$°ð $À#ð $È#ð $ð $ð $ð $ðN¨Cð °t¸d±{ð ÀtÈdÁ{ð ð ð ð ð"
 Sð 
¸3ð 
À5ÈÈdÐSVÌiÈÔCXð 
ð 
ð 
ð 
ðHð H #ð H¨Tð H¸CÀ$¹Jð HÐRUÐX\ÑR\ð Hð Hð Hð HðV@Øð@à
�‰+ð@ð ð	@ð
 ð@ð ð@ð @ð @ð @ðRØÐ%ðà�9ðð ˜
ðð �Zð	ð
 �Hðð �ðð �)ðð ˆYðð Ð%ðð �	ðð �Nðð Ð(ðð Ð(ðð Ð)ðð Ð,ðð  Ð/ð!ð" �/ð#ð$ $Ø$Ø!ØØØØð1ð ð €ˆT�#�s�(Œ^ð ð ñ ð8 *3¨ØØð4ñ *ô *Ð ˜	 #œð ð ñ ð -6¨IØØð7ñ -ô -Ð ˜9 Sœ>ð ð ñ ð
 #Ð �tÐ "Ð "Ñ "ð* dð *¨tð *ð *ð *ð *ð! $ð !ð !ð !ð !ð

&˜Sð 
& S¨4¡Zð 
&ð 
&ð 
&ð 
&ðF 3ð F¨3ð Fð Fð Fð Fð
/ #ð /¨$ð /ð /ð /ð /ð
+ð + 3ð +¨d°T©kð +ÀCð +ÐQTÐW[ÑQ[ð +ð +ð +ð +ð\ð  ð ¨4ð ¸#À¹*ð ÐPSÐVZÑPZð ð ð ð ð>"˜ð " ð "ð "ð "ð "ð˜ð  #¨¡*ð ð ð ð ð˜Tð  cð ð ð ð ð dð ¨t°D¬zð ð ð ð ð<¨ð ¸TÀD¹[ð ÈTÐRVÌZð ð ð ð ð&	¨3ð 	¸tÀd¹{ð 	ÐO`ÐcgÑOgð 	ð 	ð 	ð 	ð˜c D™jð ¨Tð ð ð ð ð XÐ"3°dÑ":ð X¸sÀT¹zð Xð Xð Xð XðB "&Ø)-ð)ð )ð )Øð)à�$‰Jð)ð ˜$‘;ð	)ð
   $Ñ&ð)ð 	ˆ4�Zð)ð )ð )ð )ð,
 ð 
°4ð 
ð 
ð 
ð 
ð cð ¨d°3¬ið ð ð ð ðBC sð C¨t°C¬yð Cð Cð Cð Cð* ,Ø+ð	*ð *ð *Ø
ð*ð ð*ð ð	*ð
 
ˆ#„Yð*ð *ð *ð *ðb "&Ø)-ØðBð Bð BØðBà�$‰JðBð ˜$‘;ð	Bð
   $Ñ&ðBð 
ðBð Bð Bð Bð:`ð `ð `ð `ð `ñ `ô `ð `ðN Ð ð�Sð ˜Sð ð ð ð ð$/ Cð /°°t±ð /ÀÀdÈCÀiÔ@Pð /ð /ð /ð /ðf GKðmLð mLØðmLØðmLØ*/ðmLØ9<¸t¹ðmLàðmLð mLð mLð mLðb GKð
Cð 
CØð
CØð
CØ*/ð
CØ9<¸t¹ð
Càð
Cð 
Cð 
Cð 
Cð 
Cð 
Cr   