§
    ‰eîia—  ã                   óÈ  — 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mZ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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„ Z&d
efd„Z'dBdeded
efd„Z(ded
efd „Z)dCded!ed"e#dz  d
edz  fd#„Z*d$ed
efd%„Z+d$ed
edz  fd&„Z,d$ed
efd'„Z-d!ed
e.e         fd(„Z/ded)edz  d
e.e         fd*„Z0ded)edz  d
e!dz  fd+„Z1d,edz  d
e2fd-„Z3d.e!dz  d
edz  fd/„Z4ddd0œded,edz  d)edz  d.e!dz  d
edz  f
d1„Z5d2ed
e2fd3„Z6d4ed
e.e         fd5„Z7d4ed
e.e         fd6„Z8ee d7œd4ed8e#d9e#d
e.e         fd:„Z9dddd;œded,edz  d)edz  d.e!dz  d
e2f
d<„Z: G d=„ d>¦  «        Z;ded,edz  d
e<e2ef         fd?„Z=	 dCded!ed@e>d,edz  d
ef
dA„Z?dS )Dzº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)Úsafe_json_loadsz[31mz[0mÚ_diff_colors_cachedÚreturnc            	      ó  ‡— 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 )NÚ é   r   ú#é   é   é   é   z[38;2;ú;Úm)Ú	get_colorÚlenÚint)r   r   ÚhÚrÚgÚbÚskins         €ú//home/div/.hermes/hermes-agent/agent/display.pyÚ_hex_fgz_diff_ansi.<locals>._hex_fg1   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Ð,Ð,¨Ð,Ð,Ð,Ð,ó    Ú
banner_dim)é–   r%   r%   Úsession_label)é´   é    éÿ   Úsession_border)éx   r+   éŒ   Ú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   ÚstrÚtupler   r   r   ÚmaxÚ	Exception)r3   Úfile_cr5   r6   r7   r   r"   Úerr_hÚok_hÚerÚegÚebÚor_ÚogÚobr    s                  @r!   Ú
_diff_ansirF       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 )Nr3   ©rF   © r#   r!   Ú	_diff_dimrJ   Q   s   € �*™,œ, uÔ-Ð-r#   c                  ó*   — t          ¦   «         d         S )Nr4   rH   rI   r#   r!   Ú
_diff_filerL   R   ó   € �*™,œ, vÔ.Ð.r#   c                  ó*   — t          ¦   «         d         S )Nr5   rH   rI   r#   r!   Ú
_diff_hunkrO   S   rM   r#   c                  ó*   — t          ¦   «         d         S )Nr6   rH   rI   r#   r!   Ú_diff_minusrQ   T   s   € �*™,œ, wÔ/Ð/r#   c                  ó*   — t          ¦   «         d         S )Nr7   rH   rI   r#   r!   Ú
_diff_plusrS   U   rM   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   ÚlistrY   r   Ú__annotations__ÚdictrZ   r9   rI   r#   r!   rW   rW   Z   sc   € € € € € € àQÐQØ˜¨dÐ3Ñ3Ô3€Eˆ4�Œ:Ð3Ð3Ñ3Ø$) E¸$Ð$?Ñ$?Ô$?€FˆD��c˜D‘j�Ô!Ð?Ð?Ñ?Ð?Ð?r#   rW   Ú_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)r;   r   rb   )rc   s    r!   Úset_tool_preview_max_lenre   g   s'   € ð /0Ð6�C¥ A¡¤¨™NœN˜N°QÐÐÐr#   c                  ó   — t           S )z9Return the configured max preview length (0 = unlimited).)rb   rI   r#   r!   Úget_tool_preview_max_lenrg   m   s   € å Ð 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)r8   r   r<   r   s    r!   Ú	_get_skinri   v   sI   € ðØ:Ð:Ð:Ð:Ð:Ð:ØˆÑ Ô Ð øÝð ð ð Øˆtˆtðøøøs   ‚ ’
 Ÿ c                  ó4   — t          ¦   «         } | r| j        S dS )z2Get tool output prefix character from active skin.õ   â”Š)ri   Útool_prefix)r    s    r!   Úget_skin_tool_prefixrm      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   )rp   )ri   Útool_emojisÚgetÚtools.registryrr   Ú	get_emojir<   )ro   rp   r    Úoverriderr   Úemojis         r!   Úget_tool_emojiry   ‡   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)rz   s    r!   Ú_oneliner   ¥   s   € à�8Š8�D—J’J‘L”LÑ!Ô!Ð!r#   ÚargsÚmax_lenc                 ó”	  — |€t           }|sdS 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#œ¥}| d$k    râ|                     d d%¦  «        }|                     d&d%¦  «        }|                     d'd%¦  «        }|                     d(¦  «        }|g}|r|                     |dd)…         ¦  «         |r.|                     d*t          |dd+…         ¦  «        › d*�¦  «         |r|d,k    r|                     |› d-�¦  «         |rd.                     |¦  «        ndS | d/k    rW|                     d0¦  «        }	|                     d1d2¦  «        }
|	€d3S |
rd4t          |	¦  «        › d5�S d6t          |	¦  «        › d5�S | d7k    rHt          |                     dd%¦  «        ¦  «        }d8|dd9…         › t          |¦  «        d9k    rd:nd%› d*�S | d;k    rù|                     d d%¦  «        }|                     d<d%¦  «        }|d=k    rKt          |                     d>d%¦  «        ¦  «        }d?|› d@|dd9…         › t          |¦  «        d9k    rd:nd%› d*�S |dAk    r7t          |                     dB¦  «        pd%¦  «        pdC}dD|› d@|dd+…         › d*�S |dEk    r7t          |                     dB¦  «        pd%¦  «        pdC}dF|› d@|dd+…         › d*�S |S | dGk    rb|                     d<dH¦  «        }t          |                     dId%¦  «        ¦  «        }t          |¦  «        d+k    r|ddJ…         d:z   }dK|› d@|› d*�S |                      dL¦  «        rÑdM|                     dd%¦  «        dN|                     dOd%¦  «        › dP|                     dQd%¦  «        › �dR|                     dSd%¦  «        dd)…         dT|                     dSd%¦  «        dd)…         › �|                     dSd%¦  «        dd)…         dU|                     dVdW¦  «        › dX�dYœ
}|                     | ¦  «        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|dWz
  …         d:z   }|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ÚterminalÚcommandÚ
web_searchÚqueryÚweb_extractÚurlsÚ	read_fileÚpathÚ
write_fileÚpatchÚsearch_filesÚpatternÚbrowser_navigateÚurlÚbrowser_clickÚrefÚbrowser_typerz   Úimage_generateÚpromptÚtext_to_speechÚvision_analyzeÚquestionÚmixture_of_agentsÚuser_promptÚ
skill_viewÚnameÚskills_listÚcategoryÚcronjobÚactionÚcodeÚgoal)Úexecute_codeÚdelegate_taskÚclarifyÚskill_manageÚprocessr   Ú
session_idÚdataÚtimeoutr   ú"r0   ÚwaitÚsr|   ÚtodoÚtodosÚmergeFzreading task listz	updating z task(s)z	planning Úsession_searchz	recall: "é   ú...ÚmemoryÚtargetÚaddÚcontentú+ú: "ÚreplaceÚold_textú<missing old_text>Ú~ÚremoveÚ-Úsend_messageú?Úmessageé   zto Úrl_zlisting envszreading configr   Ú=ÚvalueÚstartingÚrun_idz	stopping zlisting runsÚ	num_stepsr   z steps©
Úrl_list_environmentsÚrl_select_environmentÚrl_get_current_configÚrl_edit_configÚrl_start_trainingÚrl_check_statusÚrl_stop_trainingÚrl_get_resultsÚrl_list_runsÚrl_test_inference)r†   rz   r„   rŠ   rœ   r•   r¡   r¢   r   )
rb   rt   Úappendr   r}   r   Ú
startswithÚ
isinstancer_   r9   )ro   r€   r�   Úprimary_argsr    Úsidr©   Útimeout_valÚpartsÚ	todos_argr°   r†   rµ   r·   ÚoldÚmsgÚrl_previewsr   Úfallback_keyrÆ   Úpreviews                        r!   Úbuild_tool_previewrâ   ª   s6  € ð €Ý'ˆØð ØˆtðØ�IðØ+¨WðØ6CÀVðà�Vðà)¨6ðà3:¸Fðð 	˜	ðð $6°uðð 	˜ð	ð !/°ð	ð
 	˜(ðð
 %5°fðð 	˜*ðð ':¸=ðð 	�fðð ,¨Zðð 	�8ðð °Ø¨vðð ð €Lð �IÒÐØ—’˜( BÑ'Ô'ˆØ�hŠh�| RÑ(Ô(ˆØ�xŠx˜ Ñ#Ô#ˆØ—h’h˜yÑ)Ô)ˆØ�ˆØð 	#Ø�LŠL˜˜S˜b˜SœÑ"Ô"Ð"Øð 	5Ø�LŠLÐ3�X d¨3¨B¨3¤iÑ0Ô0Ð3Ð3Ð3Ñ4Ô4Ð4Øð 	,˜6 VÒ+Ð+Ø�LŠL˜KÐ*Ð*Ð*Ñ+Ô+Ð+Ø"'Ð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àÐ$Ò$Ð$Ý˜Ÿš '¨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Ð(Ð( Ð(Ð(Ð(Ð(à×Ò˜EÑ"Ô"ð *à$2Ø%)§X¢X¨f°bÑ%9Ô%9Ø%5Ø!%§¢¨'°2Ñ!6Ô!6ÐPÐP¸¿ºÀ'È2Ñ9NÔ9NÐPÐPØ!+Ø#Ÿxšx¨°"Ñ5Ô5°c°r°cÔ:Ø I¨D¯HªH°X¸rÑ,BÔ,BÀ3ÀBÀ3Ô,GÐ IÐ IØ"Ÿhšh x°Ñ4Ô4°S°b°SÔ9Ø*Ø$(§H¢H¨[¸!Ñ$<Ô$<Ð!DÐ!DÐ!Dð
ð 
ˆð �Š˜yÑ)Ô)Ð)à
×
Ò
˜9Ñ
%Ô
%€CØð Øbð 	ð 	ˆLØ˜tÐ#Ð#Ø"�Ø�ð $ð ð �#˜T�/�/Øˆtà�ŒI€EÝ�%�ÑÔð *Ø!Ð)��a”� rˆå•s˜5‘z”zÑ"Ô"€GØð ØˆtØ�‚{€{•s˜7‘|”| gÒ-Ð-Ø˜,˜7 Q™;˜,Ô'¨%Ñ/ˆØ€Nr#   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Š   Ú	candidates     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.)r9   ÚresolveÚrelative_tor   rç   r<   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Œ   Ú	file_path>   r‹   Úremove_fileÚdeletec                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS rI   )Úis_file)Ú.0rŠ   s     r!   ú
<listcomp>z/_resolve_skill_manage_paths.<locals>.<listcomp>L  s%   € ÐQÐQÐQ˜$À$Ç,Â,Á.Ä.ÐQ�ÐQÐQÐQr#   Ú*)rt   Útools.skill_manager_toolrø   rù   r   ÚsortedÚrglob)	r€   r    rœ   rø   rù   Ú	skill_dirÚexistingrü   Úfiless	            r!   Ú_resolve_skill_manage_pathsr
  3  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×   ra   rt   ré   r
  )ro   r  rŠ   s      r!   Ú_resolve_local_edit_pathsr  Q  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)rY   )r  rW   rò   rZ   r9   )ro   r  rY   ÚsnapshotrŠ   s        r!   Úcapture_local_edit_snapshotr  d  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×   ra   rt   Úbool)r  r©   s     r!   Ú_result_succeededr  p  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 )Ú
N)Úendswith)r  Úchunks     r!   ú	<genexpr>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#   )
rY   rZ   rt   r9   rò   rö   r}   r   Ú
splitlinesrÕ   )r  ÚchunksrŠ   rZ   ÚafterÚdisplay_pathÚdiffs          r!   Ú_diff_from_snapshotr%  €  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×   ra   rt   r9   Ústripr  r%  )ro   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)Úrstripr   r<   )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ú--- r1   z+++ za/?u    â†’ zb/?z@@r¿   r¸   r|   )
r   rÖ   r(  rÕ   rL   Ú_ANSI_RESETrO   rQ   rS   rJ   )r$  ÚrenderedÚ	from_fileÚto_fileÚraw_lines        r!   Ú_render_inline_unified_diffr7  À  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.r1  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=  Ú	enumerater   r7  Úextendr;   rÕ   rO   r2  )r$  r>  r?  r;  r3  Úomitted_filesÚomitted_linesÚidxr:  Úsection_linesÚremaining_budgetÚleftoverÚsummarys                r!   Ú!_summarize_rendered_diff_sectionsrJ  ó  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)  rJ  r<   ÚloggerÚdebugr/  r}   )ro   r  r  r  r-  r$  Úrendered_linesÚexcs           r!   Úrender_edit_diff_with_deltarP     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   â–ˆrX  rW  rV  rU  rT  rS  )õ   â†�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   ðŸŒŸra  r`  )u   â�ºõ   Ëšr  õ   âœ§u   âœ¦rc  r  rb  )	Ú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)ri   Úspinnerrt   r<   ÚKAWAII_WAITING©Úclsr    Ú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)ri   r~  rt   r<   ÚKAWAII_THINKINGr€  s      r!   Úget_thinking_facesz KawaiiSpinner.get_thinking_facesj  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)ri   r~  rt   r<   ÚTHINKING_VERBS)r�  r    Úverbss      r!   Úget_thinking_verbsz KawaiiSpinner.get_thinking_verbsw  sg   € ð	Ý‘;”;ˆDØð !Øœ×(Ò(Ð)9¸2Ñ>Ô>�Øð !Ø �LøøÝð 	ð 	ð 	ØˆDð	øøøàÔ!Ð!r„  r   rd  NrÂ   Úspinner_typec                 óà   — || _         | j                             || j        d         ¦  «        | _        d| _        d | _        d| _        d | _        d| _        || _	        t          j        | _        d S )Nrd  Fr   )rÂ   ÚSPINNERSrt   Ú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__„  sf   € ØˆŒØ"œm×/Ò/°¸d¼mÈFÔ>SÑTÔTˆÔØˆŒØˆŒØˆŒØˆŒØˆÔð "ˆŒõ ”JˆŒ	ˆ	ˆ	r#   r  Frz   Ú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—  r<   rš  Úwriterž  Ú
ValueErrorrð   )r›  rz   r�  rž  s       r!   Ú_writezKawaiiSpinner._write”  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š  r¤  r¡  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©rž  ç      à?gš™™™™™¹?ÚHERMES_SPINNER_PAUSEú  r|   ú (ú.1fús)r   úr   ©r�  rž  r   g¸…ëQ¸¾?)r§  r¢  rÂ   r’  ÚtimeÚsleepr¬  ri   Úget_spinner_wingsrä   Úgetenvr‘  r”  r   r•  r;   r–  )	r›  r    Ú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)rµ   Údaemon)r’  r·  r•  Ú	threadingÚThreadrÁ  r“  Ústartr¦  s    r!   rÆ  zKawaiiSpinner.startè  sX   € ØŒ<ð 	ØˆFØˆŒÝœ)™+œ+ˆŒÝÔ&¨d¬mÀDÐIÑIÔIˆŒØŒ×ÒÑÔÐÐÐr#   Únew_messagec                 ó   — || _         d S ©N)rÂ   )r›  rÇ  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.
        r±  Tr®  Nr|   r   é(   rµ  z  )r’  r¢  r;   r–  )r›  rz   Ú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 )NFr¯  )rª   r|   r   rÌ  rµ  r   Tr¶  r²  r³  r´  r±  r®  z	  [done] )	r’  r“  r}   r§  r;   r–  r¢  r•  r·  )r›  rÏ  Úis_ttyrÍ  r½  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É  )rÆ  r¦  s    r!   Ú	__enter__zKawaiiSpinner.__enter__  s   € Ø�
Š
‰ŒˆØˆr#   c                 ó.   — |                       ¦   «          dS )NF)rÒ  )r›  Úexc_typeÚexc_valÚexc_tbs       r!   Ú__exit__zKawaiiSpinner.__exit__  s   € Ø�	Š	‰ŒˆØˆur#   )r   rd  N)r  FrÉ  )r[   r\   r]   r^   r�  r  r‡  r‹  Úclassmethodr_   rƒ  rˆ  r�  r9   rœ  r  r¢  Úpropertyr§  r¬  rÁ  rÆ  rÊ  rÎ  rÒ  rÔ  rÙ  rI   r#   r!   rR  rR  =  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#   rR  c                 óÜ  — |€dS | dk    rKt          |¦  «        }t          |t          ¦  «        r%|                     d¦  «        }|�|dk    rdd|› d�fS dS | d	k    rUt          |¦  «        }t          |t          ¦  «        r1|                     d
¦  «        du rd|                     dd¦  «        v rdS |dd…                              ¦   «         }d|v sd|v s|                     d¦  «        rdS dS )a  Inspect a tool result string for signs of failure.

    Returns ``(is_failure, suffix)`` where *suffix* is an informational tag
    like ``" [exit 1]"`` for terminal failures, or ``" [error]"`` for generic
    failures.  On success, returns ``(False, "")``.
    N)Fr   rƒ   Ú	exit_coder   Tz [exit Ú]r´   r  Fzexceed the limitr  r   )Tz [full]iô  z"error"z"failed"ÚError)Tz [error])r   r×   ra   rt   ÚlowerrÖ   )ro   r  r©   rÝ  rà  s        r!   Ú_detect_tool_failurerá  $  s#  € ð €~Øˆyà�JÒÐÝ˜vÑ&Ô&ˆÝ�d�DÑ!Ô!ð 	4ØŸš Ñ-Ô-ˆIØÐ$¨°aª¨ØÐ3 yÐ3Ð3Ð3Ð3Ð3Øˆyð �HÒÐÝ˜vÑ&Ô&ˆÝ�d�DÑ!Ô!ð 	'Ø�xŠx˜	Ñ"Ô" eÐ+Ð+Ð0BÀdÇhÂhÈwÐXZÑF[ÔF[Ð0[Ð0[Ø&�ð �4�C�4ŒL×ÒÑ Ô €EØ�EÐÐ˜Z¨5Ð0Ð0°F×4EÒ4EÀgÑ4NÔ4NÐ0ØÐàˆ9r#   Údurationc                 óú  ‡‡ ‡!— |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
          ¦  «        r|d         nt          |¦  «        }	|	                     dd¦  «                             dd¦  «                             d¦  «        d         }
t          |¦  «        dk    rdt          |¦  «        dz
  › �nd} |d ||
d¦  «        › |› d|› �¦  «        S  |d|› �¦  «        S | dk    rt|                     dd¦  «        }	|	                     dd¦  «                             dd¦  «                             d¦  «        d         }
 |d ||
d¦  «        › d|› �¦  «        S | dk    r/ |d ||                     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 | d0k    r. |d1 ||                     d2d¦  «        ¦  «        › d|› �¦  «        S | d3k    r. |d4 ||                     d2d¦  «        ¦  «        › d|› �¦  «        S | d5k    r. |d6 ||                     d2d¦  «        ¦  «        › d|› �¦  «        S | d7k    rU ||                     d8d¦  «        d¦  «        }|                     d9d:¦  «        }|d;k    rd<nd=} |d>|d?›d/|› d|› �¦  «        S | d@k    rt|                     dd¦  «        }	|	                     dd¦  «                             dd¦  «                             d¦  «        d         }
 |dA ||
d¦  «        › d|› �¦  «        S | dBk    r*|                     dC¦  «        rdCndD} |dE|› d|› �¦  «        S | dFk    r% |dG|                     dHd"¦  «        › d|› �¦  «        S | dIk    r/ |dJ ||                     dKd¦  «        dL¦  «        › dM|› �¦  «        S | dNk    rE|                     dOdP¦  «        }dQdRdSdTdUœ                     |dQ¦  «        } |dV|› dW|› d|› �¦  «        S | dXk    r |dY|› �¦  «        S | dZk    r% |d[|                     d\d"¦  «        › d|› �¦  «        S | d]k    r |d^|› �¦  «        S | d_k    r |d`|› �¦  «        S | dak    ry|                     db¦  «        }|                     dcdd¦  «        }|€ |de|› �¦  «        S |r |dft          |¦  «        › dg|› �¦  «        S  |dht          |¦  «        › dg|› �¦  «        S | dik    r/ |dj ||                     dd¦  «        d¦  «        › dM|› �¦  «        S | dkk    r÷|                     d!d"¦  «        }|                     d9d¦  «        }|dlk    r2 |dm|› dn ||                     d:d¦  «        dL¦  «        › dM|› �¦  «        S |dok    r;|                     dp¦  «        pd}|r|ndq} |dr|› dn ||ds¦  «        › dM|› �¦  «        S |dtk    r;|                     dp¦  «        pd}|r|ndq} |du|› dn ||ds¦  «        › dM|› �¦  «        S  |dv|› d|› �¦  «        S | dwk    r% |dx|                     dydz¦  «        › d|› �¦  «        S | d{k    r/ |d| ||                     d}d¦  «        dL¦  «        › d|› �¦  «        S | d~k    r/ |d ||                     d€d¦  «        d¦  «        › d|› �¦  «        S | d�k    r/ |d‚ ||                     dKd¦  «        dL¦  «        › d|› �¦  «        S | dƒk    r/ |d„ ||                     d…d¦  «        dL¦  «        › d|› �¦  «        S | d†k    r/ |d‡ ||                     dˆd¦  «        dL¦  «        › d|› �¦  «        S | d‰k    rF |dŠ|                     d9d"¦  «        › dn ||                     d‹d¦  «        dŒ¦  «        › dM|› �¦  «        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˜¦  «        rÑ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|› �¦  «        S | d§k    rt|                     d¨d¦  «        }| 
                    ¦   «         r-| 
                    ¦   «                              d©¦  «        d         nd} |dª ||d¦  «        › d|› �¦  «        S | d«k    ry|                     d¬¦  «        }|r3t	          |t
          ¦  «        r |d­t          |¦  «        › 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.
    r³  r­   rÌ  c                 ó„   — t          | ¦  «        } t          dk    r| S t          | ¦  «        |k    r| d |dz
  …         dz   n| S )Nr   r   r³   ©r9   rb   r   )r­   rc   s     r!   Ú_truncz%get_cute_tool_message.<locals>._truncS  sE   € Ý�‰FŒFˆÝ  AÒ%Ð%ØˆHÝ$'¨¡F¤F¨Q¢J J��$�1�Q‘3�$”˜%‘�°AÐ5r#   é#   c                 ó†   — t          | ¦  «        } t          dk    r| S t          | ¦  «        |k    rd| |dz
   d …         z   n| S )Nr   r³   r   rå  )Úprc   s     r!   Ú_pathz$get_cute_tool_message.<locals>._pathY  sI   € Ý�‰FŒFˆÝ  AÒ%Ð%ØˆHÝ'*¨1¡v¤v°¢z z�˜˜A˜a™C˜&˜'˜'œ
Ñ"Ð"°qÐ8r#   r.  r	   c                 óR   •— ‰dk    r|                       d‰d¦  «        } ‰s| S | › ‰› �S )z*Apply skin tool prefix and failure suffix.rk   r   )rº   )r.  Úfailure_suffixÚ
is_failureÚskin_prefixs    €€€r!   Ú_wrapz$get_cute_tool_message.<locals>._wrap_  sA   ø€ à˜%ÒÐØ—<’<  {°AÑ6Ô6ˆDØð 	ØˆKØÐ(˜Ð(Ð(Ð(r#   r…   u   â”Š ðŸ”� search    r†   r   é*   r±  r‡   rˆ   r   zhttps://zhttp://ú/r   z +u   â”Š ðŸ“„ fetch     u   â”Š ðŸ“„ fetch     pages  Ú	web_crawlr�   u   â”Š ðŸ•¸ï¸�  crawl     rƒ   u   â”Š ðŸ’» $         r„   r§   r    rÁ   r¨   Né   zls processeszpoll zlog zwait zkill zwrite zsubmit )r_   ÚpollÚlogr¬   Úkillr   Úsubmitu   â”Š âš™ï¸�  proc      r|   r‰   u   â”Š ðŸ“– read      rŠ   r‹   u   â”Š âœ�ï¸�  write     rŒ   u   â”Š ðŸ”§ patch     r�   rŽ   rµ   r·   r	  ÚfindÚgrepu	   â”Š ðŸ”Ž Ú9r�   u   â”Š ðŸŒ� navigate  Úbrowser_snapshotÚfullÚcompactu   â”Š ðŸ“¸ snapshot  r‘   u   â”Š ðŸ‘† click     r’   r“   u   â”Š âŒ¨ï¸�  type      "rz   é   z"  Úbrowser_scrollÚ	directionÚdownr\  rZ  r[  rY  )r  Úupr¿  r¾  u   â”Š z  scroll    Úbrowser_backu   â”Š â—€ï¸�  back      Úbrowser_pressu   â”Š âŒ¨ï¸�  press     r   Úbrowser_get_imagesu#   â”Š ðŸ–¼ï¸�  images    extracting  Úbrowser_visionu'   â”Š ðŸ‘�ï¸�  vision    analyzing page  r®   r¯   r°   Fu"   â”Š ðŸ“‹ plan      reading tasks  u   â”Š ðŸ“‹ plan      update z
 task(s)  u   â”Š ðŸ“‹ plan      r±   u   â”Š ðŸ”� recall    "r´   r¶   u   â”Š ðŸ§  memory    +r¹   rº   r»   r¼   u   â”Š ðŸ§  memory    ~r0   r¾   u   â”Š ðŸ§  memory    -u   â”Š ðŸ§  memory    r�   u   â”Š ðŸ“š skills    list rž   Úallr›   u   â”Š ðŸ“š skill     rœ   r”   u   â”Š ðŸŽ¨ create    r•   r–   u   â”Š ðŸ”Š speak     r—   u   â”Š ðŸ‘�ï¸�  vision    r˜   r™   u   â”Š ðŸ§  reason    rš   rÀ   u   â”Š ðŸ“¨ send      rÂ   r²   rŸ   rú   ÚskillsÚskillÚtasku   â”Š â�° cron      create é   r_   u   â”Š â�° cron      listing  u   â”Š â�° cron      Újob_idrÄ   z	list envszselect z
get configzset r   zstart trainingzstatus rÈ   zstop zresults z	list runsztest inferencerÊ   u   â”Š ðŸ§ª rl        r£   r¡   r  u   â”Š ðŸ�� exec      r¤   Útasksu   â”Š ðŸ”€ delegate  z parallel tasks  r¢   u   â”Š âš¡ é	   )rÌ  )rç  )rá  rm   r9   rt   r×   r_   rº   r~   r   rÖ   r(  râ   )"ro   r€   râ  r  Údurræ  rê  rï  rˆ   r�   ÚdomainÚextrar    rÙ   ÚlabelsrŽ   rµ   ÚverbÚmodeÚdÚarrowrÜ   r°   rÝ   r  ÚlabelÚrlr¡   Ú
first_liner  rá   rì  rí  rî  s"                                  @@@r!   Úget_cute_tool_messager  E  s%  øøø€ ð Ð
Ð
Ð
Ð
€CÝ!5°iÀÑ!HÔ!HÑ€J�Ý&Ñ(Ô(€Kð6ð 6ð 6ð 6ð9ð 9ð 9ð 9ð)•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Ý'¨­dÑ3Ô3ÐB�$�q”'�'½¸T¹¼ˆCØ—[’[ ¨RÑ0Ô0×8Ò8¸ÀBÑGÔG×MÒMÈcÑRÔRÐSTÔUˆFÝ*-¨d©)¬)°aª-¨-Ð&�˜T™œ 1™Ð&Ð&Ð&¸Rˆ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Ø�KÒÐØ�hŠh�u˜bÑ!Ô!ˆØ—’˜Z¨Ñ,Ô,×4Ò4°YÀÑCÔC×IÒIÈ#ÑNÔNÈqÔQˆØˆuÐJ¨v¨v°f¸bÑ/AÔ/AÐJÐJÀSÐJÐJÑKÔKÐKØ�JÒÐØˆuÐW¨6¨6°$·(²(¸9ÀbÑ2IÔ2IÈ2Ñ+NÔ+NÐWÐWÐRUÐWÐWÑXÔXÐXØ�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ÐO¨5¨5°·²¸&À"Ñ1EÔ1EÑ+FÔ+FÐOÐOÈ#ÐOÐOÑPÔPÐPØ�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Ñ%Ô%ˆ	Ø—’˜ %Ñ(Ô(ˆØÐØ�5ÐC¸cÐCÐCÑDÔDÐDØð 	PØ�5ÐUµc¸)±n´nÐUÐUÐPSÐUÐUÑVÔVÐVà�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Ò Ð ØˆuÐT¨6¨6°$·(²(¸6À2Ñ2FÔ2FÈÑ+KÔ+KÐTÐTÈsÐTÐTÑUÔUÐUØÐ$Ò$Ð$Øˆ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Ð\Ð\Ñ]Ô]Ð]ØÐ'Ò'Ð'ØˆuÐ[¨6¨6°$·(²(¸=È"Ñ2MÔ2MÈrÑ+RÔ+RÐ[Ð[ÐVYÐ[Ð[Ñ\Ô\Ð\Ø�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Ø×Ò˜EÑ"Ô"ð eà$/ÐJjÐTX×T\ÒT\Ð]cÐegÑThÔThÐJjÐJjØ%1ÐEdÈDÏHÊHÐU\Ð^aÑLbÔLbÐEdÐEdØ!1ÐFnÐPT×PXÒPXÐYaÐcfÑPgÔPgÐhkÐikÐhkÔPlÐFnÐFnØ F¨¯ª°¸3Ñ(?Ô(?ÀÀÀÔ(DÐ FÐ Fð  [DÐei×emÒemÐnvÐx{Ñe|Ôe|ð  ~Að  Að  ~Aô  fBð  [Dð  [DØ'Ð>Nð
ð 
ˆð ˆuÐc¨2¯6ª6°)¸Y×=NÒ=NÈuÐVXÑ=YÔ=YÑ+ZÔ+ZÐcÐcÐ^aÐcÐcÑdÔdÐdØ�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Ò#Ð#Ø—’˜Ñ!Ô!ˆØð 	S•Z ¥tÑ,Ô,ð 	SØ�5ÐQ­s°5©z¬zÐQÐQÈCÐQÐQÑRÔRÐRØˆ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ÐKr#   )rn   rÉ  )@r^   Úloggingrä   r˜  rÄ  r·  Údataclassesr   r   Údifflibr   Úpathlibr   Úutilsr   Ú_REDÚ_RESETÚ	getLoggerr[   rL  r2  r   ra   r9   r`   rF   rJ   rL   rO   rQ   rS   Ú_MAX_INLINE_DIFF_FILESÚ_MAX_INLINE_DIFF_LINESrW   rb   r   re   rg   ri   rm   ry   r   râ   ré   rò   rö   r_   r
  r  r  r  r  r%  r)  r/  r7  r=  rJ  rP  rR  r:   rá  Úfloatr  rI   r#   r!   ú<module>r&     sE  ððð ð ð €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !ð €Ø	€à	ˆÔ	˜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ð "ð "ð "ð "ð
jð j #ð j¨Tð j¸CÀ$¹Jð jÐRUÐX\ÑR\ð jð jð jð jðb"˜ð " ð "ð "ð "ð "ð˜ð  #¨¡*ð ð ð ð ð˜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 Cð °°t±ð ÀÀdÈCÀiÔ@Pð ð ð ð ðD GKð^Lð ^LØð^LØð^LØ*/ð^LØ9<¸t¹ð^Làð^Lð ^Lð ^Lð ^Lð ^Lð ^Lr#   