§
    ÷žyjþW  ã                  ó‚  — d dl m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Zd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d	Z ej        d
e› d�¦  «        ZdZ ej        d¦  «        ZdZ ed¦  «        dz  fZ ed¦  «        dz   ed¦  «        dz   ed¦  «        dz   ed¦  «        dz   ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «        fZ e
d¬ ¦  «         G d!„ d"¦  «        ¦   «         Z e
 G d#„ d$¦  «        ¦   «         Z!d]d(„Z"d^d+„Z#ddd,œd_d5„Z$ddd,œd_d6„Z%ddd,œd`d;„Z&dd<œdad=„Z'dd<œdad>„Z(dbdB„Z)ddCœdcdE„Z*dddF„Z+dd<œdedH„Z,dfdK„Z-d]dL„Z.d]dM„Z/dgdO„Z0dhdQ„Z1didjdT„Z2dkdV„Z3dldX„Z4dmdY„Z5dndZ„Z6dmd[„Z7dmd\„Z8dS )oé    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)Ú	AwaitableÚCallable)Úestimate_tokens_rough)Ú
IS_WINDOWSÚwindows_hide_flags)Úformat_bytesz$(?:`[^`\n]+`|"[^"\n]+"|\'[^\'\n]+\')zP(?<![\w/])@(?:(?P<simple>diff|staged)\b|(?P<kind>file|folder|git|url):(?P<value>z(?::\d+(?:-\d+)?)?|\S+))z,.;!?z[\s()\[\]{}<>"'`])ú.sshz.awsz.gnupgz.kubez.dockerz.azurez
.config/ghÚskillsz.hubr   Úauthorized_keysÚid_rsaÚ
id_ed25519Úconfigz.bashrcz.zshrcz.profilez.bash_profilez	.zprofilez.netrcz.pgpassz.npmrcz.pypircT)Úfrozenc                  ó^   — e Zd ZU ded<   ded<   ded<   ded<   ded<   dZd	ed
<   dZd	ed<   dS )ÚContextReferenceÚstrÚrawÚkindÚtargetÚintÚstartÚendNz
int | NoneÚ
line_startÚline_end)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   © ó    ú>/home/ragecks/.hermes/hermes-agent/agent/context_references.pyr   r   +   sa   € € € € € € à€H€H�HØ€I€I�IØ€K€K�KØ€J€J�JØ€H€H�HØ!€JÐ!Ð!Ð!Ñ!Ø€HÐÐÐÑÐÐr$   r   c                  ó’   — e Zd ZU ded<   ded<    ee¬¦  «        Zded<    ee¬¦  «        Zded<   d	Zd
ed<   dZ	ded<   dZ
ded<   dS )ÚContextReferenceResultr   ÚmessageÚoriginal_message)Údefault_factoryúlist[ContextReference]Ú
referencesú	list[str]Úwarningsr   r   Úinjected_tokensFÚboolÚexpandedÚblockedN)r   r    r!   r"   r   Úlistr,   r.   r/   r1   r2   r#   r$   r%   r'   r'   6   s–   € € € € € € à€L€L�LØÐÐÑØ).¨¸tÐ)DÑ)DÔ)D€JÐDÐDÐDÑDØ˜%°Ð5Ñ5Ô5€HÐ5Ð5Ð5Ñ5Ø€OÐÐÐÑØ€HÐÐÐÑØ€GÐÐÐÑÐÐr$   r'   Úvaluer   Úreturnc                ód   — t                                | ¦  «        s| S dD ]}|| vr
|› | › |› �c S Œ| S )a+  Quote a reference value so ``REFERENCE_PATTERN`` reads it back whole.

    The unquoted alternative in the pattern is ``\S+``, so a path containing a
    space parses as a truncated ref with the tail left behind as loose text.
    Mirrors ``formatRefValue`` in the desktop's directive-text.tsx.
    )ú`ú"ú')Ú_NEEDS_QUOTINGÚsearch)r4   Úquotes     r%   Úformat_reference_valuer=   A   s_   € õ × Ò  Ñ'Ô'ð ØˆØ ð ,ð ,ˆØ˜ÐÐØÐ+˜UÐ+ EÐ+Ð+Ð+Ð+Ð+ð à€Lr$   r(   r+   c                óÆ  — g }| s|S t                                | ¦  «        D �]>}|                     d¦  «        }|r_|                     t	          |                     d¦  «        |d|                     ¦   «         |                     ¦   «         ¬¦  «        ¦  «         Œy|                     d¦  «        }t          |                     d¦  «        pd¦  «        }d }d }t          |¦  «        }|dk    rt          |¦  «        \  }}}|                     t	          |                     d¦  «        |||                     ¦   «         |                     ¦   «         ||¬¦  «        ¦  «         �Œ@|S )	NÚsimpler   Ú )r   r   r   r   r   r   r4   Úfile)r   r   r   r   r   r   r   )
ÚREFERENCE_PATTERNÚfinditerÚgroupÚappendr   r   r   Ú_strip_trailing_punctuationÚ_strip_reference_wrappersÚ_parse_file_reference_value)	r(   ÚrefsÚmatchr?   r   r4   r   r   r   s	            r%   Úparse_context_referencesrK   P   sf  € Ø#%€DØð Øˆå"×+Ò+¨GÑ4Ô4ð !
ñ !
ˆØ—’˜XÑ&Ô&ˆØð 
	Ø�KŠKÝ ØŸš A™œØØØŸ+š+™-œ-ØŸ	š	™œðñ ô ñô ð ð à�{Š{˜6Ñ"Ô"ˆÝ+¨E¯KªK¸Ñ,@Ô,@Ð,FÀBÑGÔGˆØˆ
ØˆÝ*¨5Ñ1Ô1ˆà�6Š>ˆ>Ý+FÀuÑ+MÔ+MÑ(ˆF�J à�ŠÝØ—K’K ‘N”NØØØ—k’k‘m”mØ—I’I‘K”KØ%Ø!ðñ ô ñ
	
ô 
	
ð 
	
ñ 
	
ð €Kr$   ©Úurl_fetcherÚallowed_rootÚcwdú
str | PathÚcontext_lengthr   rM   ú,Callable[[str], str | Awaitable[str]] | NonerN   ústr | Path | Nonec               óž  — t          | ||||¬¦  «        }	 t          j        ¦   «         }n# t          $ r d }Y nw xY w|r}|                     ¦   «         ridd l}|j                             d¬¦  «        5 }|                     t          j	        |¦  «         
                    ¦   «         cd d d ¦  «         S # 1 swxY w Y   t          j	        |¦  «        S )N)rO   rQ   rM   rN   r   é   )Úmax_workers)Ú#preprocess_context_references_asyncÚasyncioÚget_running_loopÚRuntimeErrorÚ
is_runningÚconcurrent.futuresÚfuturesÚThreadPoolExecutorÚsubmitÚrunÚresult)	r(   rO   rQ   rM   rN   ÚcoroÚloopÚ
concurrentÚpools	            r%   Úpreprocess_context_referencesrf   {   s%  € õ /ØØØ%ØØ!ðñ ô €DðÝÔ'Ñ)Ô)ˆˆøÝð ð ð Øˆˆˆðøøøàð ;�—’Ñ!Ô!ð ;Ø!Ð!Ð!Ð!ØÔ×2Ò2¸qÐ2ÑAÔAð 	;ÀTØ—;’;�wœ{¨DÑ1Ô1×8Ò8Ñ:Ô:ð	;ð 	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;åŒ;�tÑÔÐs   –* ª9¸9Á12B0Â0B4Â7B4c          
   ƒ  ó2  ‡‡‡K  — t          | ¦  «        }|st          | | ¬¦  «        S t          |¦  «                             ¦   «                              ¦   «         Š|�3t          |¦  «                             ¦   «                              ¦   «         n‰Šg }g }d}t          j        ˆˆˆfd„|D ¦   «         Ž ƒ d {V —†}	|	D ]E\  }
}|
r|                     |
¦  «         |r'|                     |¦  «         |t          |¦  «        z  }ŒFt          dt          |dz  ¦  «        ¦  «        }t          dt          |dz  ¦  «        ¦  «        }||k    r2|                     d|› d|› d	�¦  «         t          | | |||d
d¬¦  «        S ||k    r|                     d|› d|› d	�¦  «         | }|r%|› d�d                     d„ |D ¦   «         ¦  «        z   }|r|› d�d                     |¦  «        z   }t          |                     ¦   «         | |||t          |p|¦  «        d
¬¦  «        S )N)r(   r)   r   c              3  ó>   •K  — | ]}t          |‰‰‰¬ ¦  «        V — ŒdS )rL   N)Ú_expand_reference)Ú.0ÚrefÚallowed_root_pathÚcwd_pathrM   s     €€€r%   ú	<genexpr>z6preprocess_context_references_async.<locals>.<genexpr>³   sT   øè è € ð 

ð 

ð õ ØØØ'Ø.ð	ñ ô ð

ð 

ð 

ð 

ð 

ð 

r$   rU   g      à?g      Ð?z@ context injection refused: z$ tokens exceeds the 50% hard limit (z).FT)r(   r)   r,   r.   r/   r1   r2   z@ context injection warning: z$ tokens exceeds the 25% soft limit (z

--- Context Warnings ---
Ú
c              3  ó    K  — | ]	}d |› �V — Œ
dS )ú- Nr#   )rj   Úwarnings     r%   rn   z6preprocess_context_references_async.<locals>.<genexpr>à   s)   è è € ÐDlÐDlÐX_À^È'À^À^ÐDlÐDlÐDlÐDlÐDlÐDlr$   z

--- Attached Context ---

z

)rK   r'   r   Ú
expanduserÚresolverX   ÚgatherrE   r	   Úmaxr   ÚjoinÚstripr0   )r(   rO   rQ   rM   rN   rI   r.   Úblocksr/   r1   rr   ÚblockÚ
hard_limitÚ
soft_limitÚfinalrl   rm   s      `           @@r%   rW   rW   –   sÙ  øøøè è € õ $ GÑ,Ô,€DØð QÝ%¨gÈÐPÑPÔPÐPå�C‰yŒy×#Ò#Ñ%Ô%×-Ò-Ñ/Ô/€Hð 6BÐ5M�ˆ\ÑÔ×%Ò%Ñ'Ô'×/Ò/Ñ1Ô1Ð1ÐS[ð ð €HØ€FØ€Oõ ”^ð

ð 

ð 

ð 

ð 

ð 

ð ð

ñ 

ô 

ð
ð 
ð 
ð 
ð 
ð 
ð 
€Hð #ð <ð <‰ˆ�Øð 	%Ø�OŠO˜GÑ$Ô$Ð$Øð 	<Ø�MŠM˜%Ñ Ô Ð ØÕ4°UÑ;Ô;Ñ;ˆOøå�Q�˜N¨TÑ1Ñ2Ô2Ñ3Ô3€JÝ�Q�˜N¨TÑ1Ñ2Ô2Ñ3Ô3€JØ˜Ò#Ð#Ø�ŠØo¨OÐoÐoÐakÐoÐoÐoñ	
ô 	
ð 	
õ &ØØ$ØØØ+ØØð
ñ 
ô 
ð 	
ð ˜Ò#Ð#Ø�ŠØo¨OÐoÐoÐakÐoÐoÐoñ	
ô 	
ð 	
ð €EØð mØÐ8Ð8Ð8¸4¿9º9ÐDlÐDlÐckÐDlÑDlÔDlÑ;lÔ;lÑlˆØð QØÐ:Ð:Ð:¸V¿[º[ÈÑ=PÔ=PÑPˆå!Ø—’‘”Ø ØØØ'Ý�fÐ( Ñ)Ô)Øðñ ô ð r$   rk   r   úPath | Noneútuple[str | None, str | None]c             ƒ  ó´  K  — 	 | j         dk    rt          | ||¬¦  «        S | j         dk    rt          | ||¬¦  «        S | j         dk    rt          | |dgd¦  «        S | j         dk    rt          | |ddgd¦  «        S | j         d	k    rNt	          d
t          t          | j        pd¦  «        d¦  «        ¦  «        }t          | |dd|› �dgd|› d�¦  «        S | j         dk    rIt          | j        |¬¦  «        ƒ d {V —†}|s| j	        › d�d fS d d| j	        › dt          |¦  «        › d|› �fS n%# t          $ r}| j	        › d|› �d fcY d }~S d }~ww xY w| j	        › d�d fS )NrA   ©rN   ÚfolderÚdiffzgit diffÚstagedz--stagedzgit diff --stagedÚgitrU   Ú1é
   ÚlogÚ-z-pz	git log -z -pÚurl©rM   z: no content extractedu   ðŸŒ� ú (ú	 tokens)
ú: z: unsupported reference type)r   Ú_expand_file_referenceÚ_expand_folder_referenceÚ_expand_git_referencerv   Úminr   r   Ú_fetch_url_contentr   r	   Ú	Exception)rk   rO   rM   rN   ÚcountÚcontentÚexcs          r%   ri   ri   ï   sæ  è è € ð)ØŒ8�vÒÐÝ)¨#¨sÀÐNÑNÔNÐNØŒ8�xÒÐÝ+¨C°À<ÐPÑPÔPÐPØŒ8�vÒÐÝ(¨¨c°F°8¸ZÑHÔHÐHØŒ8�xÒÐÝ(¨¨c°F¸JÐ3GÐI\Ñ]Ô]Ð]ØŒ8�uÒÐÝ˜�3�s 3¤:Ð#4°Ñ5Ô5°rÑ:Ô:Ñ;Ô;ˆEÝ(¨¨c°E¸;¸u¸;¸;ÈÐ3MÐOeÐ[`ÐOeÐOeÐOeÑfÔfÐfØŒ8�uÒÐÝ.¨s¬zÀ{ÐSÑSÔSÐSÐSÐSÐSÐSÐSˆGØð @Øœ'Ð9Ð9Ð9¸4Ð?Ð?ØÐ_ ¤Ð_Ð_Õ,AÀ'Ñ,JÔ,JÐ_Ð_ÐV]Ð_Ð_Ð_Ð_ð	 øõ
 ð )ð )ð )Ø”'Ð"Ð"˜SÐ"Ð" DÐ(Ð(Ð(Ð(Ð(Ð(Ð(øøøøð)øøøð ŒgÐ3Ð3Ð3°TÐ9Ð9s@   „D) ¡D) ¾D) ÁD) Á;AD) Ã4D) Ä	D) Ä)
EÄ3EÅ EÅEr�   c          
     ó–  — t          || j        |¬¦  «        }t          |¦  «         |                     ¦   «         s| j        › d�d fS |                     ¦   «         s| j        › d�d fS t          |¦  «        rd t          | |¦  «        fS |                     d¬¦  «        }| j	        �r| 
                    ¦   «         }t          | j	        dz
  d¦  «        }t          | j        p| j	        t          |¦  «        ¦  «        }d                     |||…         ¦  «        }t!          |¦  «        }| j        }	d d	|	› d
t#          |¦  «        › d|› d|› d�	fS )Nr�   z: file not foundz: path is not a fileúutf-8©ÚencodingrU   r   ro   u   ðŸ“„ rŒ   z tokens)
```ú
```)Ú_resolve_pathr   Ú_ensure_reference_path_allowedÚexistsr   Úis_fileÚ_is_binary_fileÚ_binary_reference_blockÚ	read_textr   Ú
splitlinesrv   r’   r   Úlenrw   Ú_code_fence_languager	   )
rk   rO   rN   ÚpathÚtextÚlinesÚ	start_idxÚend_idxÚlangÚlabels
             r%   r�   r�     sb  € õ ˜˜cœj°|ÐDÑDÔD€DÝ" 4Ñ(Ô(Ð(Ø�;Š;‰=Œ=ð 2Ø”'Ð+Ð+Ð+¨TÐ1Ð1Ø�<Š<‰>Œ>ð 6Ø”'Ð/Ð/Ð/°Ð5Ð5Ý�tÑÔð 8ð Õ,¨S°$Ñ7Ô7Ð7Ð7à�>Š> 7ˆ>Ñ+Ô+€DØ
„~Ð!Ø—’Ñ!Ô!ˆÝ˜œ¨Ñ*¨AÑ.Ô.ˆ	Ý�c”lÐ4 c¤nµc¸%±j´jÑAÔAˆØ�yŠy˜˜y¨Ð0Ô1Ñ2Ô2ˆå Ñ%Ô%€DØŒG€EØÐ_˜Ð_Ð_Õ"7¸Ñ"=Ô"=Ð_Ð_ÈDÐ_Ð_ÐTXÐ_Ð_Ð_Ð_Ð_r$   c               ó,  — t          || j        |¬¦  «        }t          |¦  «         |                     ¦   «         s| j        › d�d fS |                     ¦   «         s| j        › d�d fS t          ||¦  «        }d d| j        › dt          |¦  «        › d|› �fS )Nr�   z: folder not foundz: path is not a folderu   ðŸ“� rŒ   r�   )r�   r   rž   rŸ   r   Úis_dirÚ_build_folder_listingr	   )rk   rO   rN   r§   Úlistings        r%   r�   r�   /  s²   € õ ˜˜cœj°|ÐDÑDÔD€DÝ" 4Ñ(Ô(Ð(Ø�;Š;‰=Œ=ð 4Ø”'Ð-Ð-Ð-¨tÐ3Ð3Ø�;Š;‰=Œ=ð 8Ø”'Ð1Ð1Ð1°4Ð7Ð7å# D¨#Ñ.Ô.€GØÐW˜œÐWÐWÕ$9¸'Ñ$BÔ$BÐWÐWÈgÐWÐWÐWÐWr$   Úargsr-   r­   c                ó¤  — t           rdt          ¦   «         ini }	 t          j        dg|¢f|dddddt          j        dœ|¤Ž}n!# t          j        $ r | j        › d�d fcY S w xY w|j        d	k    r+|j        pd
 	                    ¦   «         pd}| j        › d|› �d fS |j
         	                    ¦   «         }|sd}d d|› dt          |¦  «        › d|› d�fS )NÚcreationflagsr…   Tr™   Úreplaceé   ©rO   Úcapture_outputr¨   r›   ÚerrorsÚtimeoutÚstdinz: git command timed out (30s)r   r@   zgit command failedrŽ   z(no output)u   ðŸ§¾ rŒ   z tokens)
```diff
rœ   )r
   r   Ú
subprocessr`   ÚDEVNULLÚTimeoutExpiredr   Ú
returncodeÚstderrrx   Ústdoutr	   )rk   rO   r²   r­   Ú_popen_kwargsra   rÀ   r–   s           r%   r‘   r‘   @  s@  € õ @JÐQ�_Õ&8Ñ&:Ô&:Ð;Ð;Èr€Mð?Ý”ØˆN�TˆNð
àØØ °	ØÝÔ$ð
ð 
ð ð
ð 
ˆˆøõ Ô$ð ?ð ?ð ?Ø”'Ð8Ð8Ð8¸$Ð>Ð>Ð>Ð>ð?øøøàÔ˜AÒÐØ”-Ð% 2×,Ò,Ñ.Ô.ÐFÐ2FˆØ”'Ð%Ð%˜VÐ%Ð% tÐ+Ð+ØŒm×!Ò!Ñ#Ô#€GØð  ØˆØÐc˜ÐcÐcÕ"7¸Ñ"@Ô"@ÐcÐcÐU\ÐcÐcÐcÐcÐcs   ›'A ÁA!Á A!r‹   rŠ   c             ƒ  ó¬   K  — |pt           } || ¦  «        }t          j        |¦  «        r|ƒ d {V —†}t          |pd¦  «                             ¦   «         S )Nr@   )Ú_default_url_fetcherÚinspectÚisawaitabler   rx   )rŠ   rM   Úfetcherr–   s       r%   r“   r“   \  sb   è è € ð
 Ð1Õ1€GØˆg�c‰lŒl€GÝÔ˜7Ñ#Ô#ð  Ø�-�-�-�-�-�-ˆÝˆwˆ}˜"ÑÔ×#Ò#Ñ%Ô%Ð%r$   c              ƒ  ó<  K  — ddl m}  || gd¬¦  «        ƒ d {V —†}t          j        |¦  «        }|                     dg ¦  «        }|sdS |d         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         S )	Nr   )Úweb_extract_toolÚmarkdown)ÚformatÚresultsr@   r–   Úraw_content)Útools.web_toolsrÉ   ÚjsonÚloadsÚgetr   rx   )rŠ   rÉ   r   ÚpayloadÚdocsÚdocs         r%   rÄ   rÄ   h  s³   è è € Ø0Ð0Ð0Ð0Ð0Ð0à Ð  # ¨zÐ:Ñ:Ô:Ð
:Ð
:Ð
:Ð
:Ð
:Ð
:€CÝŒj˜‰oŒo€GØ�;Š;�y "Ñ%Ô%€DØð ØˆrØ
ˆqŒ'€CÝˆs�wŠw�yÑ!Ô!ÐA S§W¢W¨]Ñ%;Ô%;ÐA¸rÑBÔB×HÒHÑJÔJÐJr$   r   c               ó.  — t          t          j                             |¦  «        ¦  «        }|                     ¦   «         s| |z  }|                     ¦   «         }|�9	 |                     |¦  «         n"# t          $ r}t          d¦  «        |‚d }~ww xY w|S )Nz%path is outside the allowed workspace)r   Úosr§   rs   Úis_absolutert   Úrelative_toÚ
ValueError)rO   r   rN   r§   Úresolvedr—   s         r%   r�   r�   t  s¥   € Ý•”×"Ò" 6Ñ*Ô*Ñ+Ô+€DØ×ÒÑÔð Ø�T‰zˆØ�|Š|‰~Œ~€HØÐð	OØ× Ò  Ñ.Ô.Ð.Ð.øÝð 	Oð 	Oð 	OÝÐDÑEÔEÈ3ÐNøøøøð	Oøøøà€Os   ÁA3 Á3
BÁ=BÂBr§   ÚNonec                óÖ  ‡‡— ddl m} t          t          j                             d¦  «        ¦  «                             ¦   «         Š |¦   «                              ¦   «         Šˆfd„t          D ¦   «         }|                     ‰dz  ¦  «         ˆfd„t          D ¦   «         }| 
                    ˆfd„t          D ¦   «         ¦  «         | |v rt          d¦  «        ‚|D ]7}	 |                      |¦  «         n# t          $ r Y Œ%w xY wt          d	¦  «        ‚	 dd
lm}  |t!          | ¦  «        ¦  «        �t          d	¦  «        ‚d S # t          $ r ‚ t"          $ r t          d¦  «        ‚w xY w)Nr   )Úget_hermes_homeÚ~c                ó   •— h | ]}‰|z  ’ŒS r#   r#   ©rj   ÚrelÚhomes     €r%   ú	<setcomp>z1_ensure_reference_path_allowed.<locals>.<setcomp>†  s   ø€ ÐAÐAÐA C�T˜C‘ZÐAÐAÐAr$   z.envc                ó   •— g | ]}‰|z  ‘ŒS r#   r#   rà   s     €r%   ú
<listcomp>z2_ensure_reference_path_allowed.<locals>.<listcomp>ˆ  s   ø€ Ð?Ð?Ð? 3�D˜3‘JÐ?Ð?Ð?r$   c              3  ó"   •K  — | ]	}‰|z  V — Œ
d S ©Nr#   )rj   rá   Úhermes_homes     €r%   rn   z1_ensure_reference_path_allowed.<locals>.<genexpr>‰  s(   øè è € ÐLÐL¨c˜ cÑ)ÐLÐLÐLÐLÐLÐLr$   z:path is a sensitive credential file and cannot be attachedzMpath is a sensitive credential or internal Hermes path and cannot be attached)Úget_read_block_errorzRpath could not be verified against the credential deny-list and cannot be attached)Úhermes_constantsrÝ   r   rÖ   r§   rs   rt   Ú_SENSITIVE_HOME_FILESÚaddÚ_SENSITIVE_HOME_DIRSÚextendÚ_SENSITIVE_HERMES_DIRSrÙ   rØ   Úagent.file_safetyré   r   r”   )r§   rÝ   Úblocked_exactÚblocked_dirsÚblocked_dirré   rè   râ   s         @@r%   rž   rž   �  sÙ  øø€ Ø0Ð0Ð0Ð0Ð0Ð0Ý•”×"Ò" 3Ñ'Ô'Ñ(Ô(×0Ò0Ñ2Ô2€DØ!�/Ñ#Ô#×+Ò+Ñ-Ô-€KàAÐAÐAÐAÕ+@ÐAÑAÔA€MØ×Ò�k FÑ*Ñ+Ô+Ð+Ø?Ð?Ð?Ð?Õ*>Ð?Ñ?Ô?€LØ×ÒÐLÐLÐLÐLÕ5KÐLÑLÔLÑLÔLÐLàˆ}ÐÐÝÐUÑVÔVÐVà#ð jð jˆð	Ø×Ò˜[Ñ)Ô)Ð)Ð)øÝð 	ð 	ð 	ØˆHð	øøøåÐhÑiÔiÐið
Ø:Ð:Ð:Ð:Ð:Ð:àÐ¥ D¡	¤	Ñ*Ô*Ð6ÝØ_ñô ð ð 7Ð6øõ ð ð ð ØÝð 

ð 

ð 

õ Ø`ñ
ô 
ð 	
ð

øøøs   ÃC5Ã5
DÄDÄ-E Å$E(c                óü   — |                       t          ¦  «        }|                     d¦  «        rL|d         }ddddœ|         }|                     |¦  «        |                     |¦  «        k    r|d d…         }Œ`	 |S )N)ú)Ú]Ú}éÿÿÿÿú(Ú[Ú{)ÚrstripÚTRAILING_PUNCTUATIONÚendswithr•   )r4   ÚstrippedÚcloserÚopeners       r%   rF   rF   µ  s‚   € Ø�|Š|Õ0Ñ1Ô1€HØ
×
Ò
˜OÑ
,Ô
,ð Ø˜"”ˆØ ¨3Ð/Ð/°Ô7ˆØ�>Š>˜&Ñ!Ô! H§N¢N°6Ñ$:Ô$:Ò:Ð:Ø   ”}ˆHØØØ€Or$   c                óx   — t          | ¦  «        dk    r&| d         | d         k    r| d         dv r
| dd…         S | S )Né   r   rø   z`"'rU   )r¥   )r4   s    r%   rG   rG   Á  sD   € Ý
ˆ5�z„z�Q‚€˜5 œ8 u¨R¤yÒ0Ð0°U¸1´XÀÐ5GÐ5GØ�Q�r�TŒ{ÐØ€Lr$   ú"tuple[str, int | None, int | None]c                ó,  — t          j        d| ¦  «        }|rf|                     d¦  «        }|                     d¦  «        }|                     d¦  «        |�t          |¦  «        nd |�t          |p|¦  «        nd fS t          j        d| ¦  «        }|rot          |                     d¦  «        ¦  «        }|                     d¦  «        |t          |                     d¦  «        p|                     d¦  «        ¦  «        fS t	          | ¦  «        d d fS )NzP^(?P<quote>`|"|\')(?P<path>.+?)(?P=quote)(?::(?P<start>\d+)(?:-(?P<end>\d+))?)?$r   r   r§   z0^(?P<path>.+?):(?P<start>\d+)(?:-(?P<end>\d+))?$)ÚrerJ   rD   r   rG   )r4   Úquoted_matchr   r   Úrange_matchs        r%   rH   rH   Ç  s)  € Ý”8Ø[Øñô €Lð ð 
Ø!×'Ò'¨Ñ0Ô0ˆ
Ø×%Ò% eÑ,Ô,ˆà×Ò˜vÑ&Ô&Ø)Ð5�C�
‰OŒOˆO¸4Ø+5Ð+A�C�Ð&˜JÑ'Ô'Ð'Àtð
ð 	
õ ”(ÐNÐPUÑVÔV€KØð 
Ý˜×*Ò*¨7Ñ3Ô3Ñ4Ô4ˆ
à×Ò˜fÑ%Ô%ØÝ�×!Ò! %Ñ(Ô(ÐF¨K×,=Ò,=¸gÑ,FÔ,FÑGÔGð
ð 	
õ % UÑ+Ô+¨T°4Ð7Ð7r$   r0   c                óä   ‡ — t          j        ‰ j        ¦  «        \  }}|r2|                     d¦  «        st	          ˆ fd„dD ¦   «         ¦  «        sdS ‰                      ¦   «         d d…         }d|v S )Nztext/c              3  óL   •K  — | ]}‰j                              |¦  «        V — Œd S rç   )Únamerþ   )rj   Úextr§   s     €r%   rn   z"_is_binary_file.<locals>.<genexpr>ã  sD   øè è € ð 9ð 9Ø$'ˆŒ	×Ò˜3ÑÔð9ð 9ð 9ð 9ð 9ð 9r$   )	ú.pyú.mdz.txtú.jsonú.yamlú.ymlú.tomlú.jsú.tsTi   ó    )Ú	mimetypesÚ
guess_typer  Ú
startswithÚanyÚ
read_bytes)r§   ÚmimeÚ_Úchunks   `   r%   r¡   r¡   á  s•   ø€ ÝÔ" 4¤9Ñ-Ô-�G€Dˆ!Øð �D—O’O GÑ,Ô,ð µSð 9ð 9ð 9ð 9Ø+rð9ñ 9ô 9ñ 6ô 6ð ð ˆtØ�OŠOÑÔ˜e˜t˜eÔ$€EØ�eÐÐr$   éÈ   Úlimitc           
     ót  — |                       |¦  «        › d�g}t          | ||¬¦  «        }|D ]Î}|                      |¦  «        }dt          t          |j        ¦  «        t          |                       |¦  «        j        ¦  «        z
  dz
  d¦  «        z  }|                     ¦   «         r!|                     |› d|j        › d�¦  «         Œœt          |¦  «        }|                     |› d|j        › d|› d�¦  «         ŒÏt          |¦  «        |k    r|                     d	¦  «         d
 	                    |¦  «        S )Nú/©r  z  rU   r   rq   rŒ   rõ   z- ...ro   )
rØ   Ú_iter_visible_entriesrv   r¥   Úpartsr¯   rE   r  Ú_file_metadatarw   )	r§   rO   r  r©   ÚentriesÚentryrá   ÚindentÚmetas	            r%   r°   r°   ë  sB  € Ø× Ò  Ñ%Ô%Ð(Ð(Ð(Ð)€EÝ# D¨#°UÐ;Ñ;Ô;€GØð =ð =ˆØ×Ò Ñ$Ô$ˆØ��C ¤	™NœN­S°×1AÒ1AÀ#Ñ1FÔ1FÔ1LÑ-MÔ-MÑMÐPQÑQÐSTÑUÔUÑUˆØ�<Š<‰>Œ>ð 	=Ø�LŠL˜FÐ3Ð3 e¤jÐ3Ð3Ð3Ñ4Ô4Ð4Ð4å! %Ñ(Ô(ˆDØ�LŠL˜FÐ;Ð; e¤jÐ;Ð;°DÐ;Ð;Ð;Ñ<Ô<Ð<Ð<Ý
ˆ7�|„|�uÒÐØ�Š�WÑÔÐØ�9Š9�UÑÔÐr$   ú
list[Path]c                óø  — t          | ||¬¦  «        }|�–g }t          ¦   «         }|D ]g}||z  }|j        D ]C}||k    s||v s| |h|j        £vrŒ|                     |¦  «         |                     |¦  «         ŒD|                     |¦  «         Œht          d„ |D ¦   «         d„ ¬¦  «        S g }t          j        | ¦  «        D ]¸\  }	}
}t          d„ |
D ¦   «         ¦  «        |
d d …<   t          d„ |D ¦   «         ¦  «        }t          |	¦  «        }|
D ]3}|                     ||z  ¦  «         t          |¦  «        |k    r|c c S Œ4|D ]3}|                     ||z  ¦  «         t          |¦  «        |k    r|c c S Œ4Œ¹|S )Nr"  c                ó:   — h | ]}|                      ¦   «         ¯|’ŒS r#   )rŸ   )rj   Úps     r%   rã   z(_iter_visible_entries.<locals>.<setcomp>  s%   € Ð7Ð7Ð7˜Q¨A¯HªH©J¬JÐ7�qÐ7Ð7Ð7r$   c                óJ   — |                       ¦   «          t          | ¦  «        fS rç   )r¯   r   )r-  s    r%   ú<lambda>z'_iter_visible_entries.<locals>.<lambda>  s   € ÈAÏHÊHÉJÌJÈÕX[Ð\]ÑX^ÔX^ÐG_€ r$   )Úkeyc              3  óP   K  — | ]!}|                      d ¦  «        °|dk    ¯|V — Œ"dS )ú.Ú__pycache__N©r  )rj   Úds     r%   rn   z(_iter_visible_entries.<locals>.<genexpr>  s=   è è € ÐYÐY˜q°·²¸SÑ0AÔ0AÐYÀaÈ=ÒFXÐFX˜ÐFXÐFXÐFXÐFXÐYÐYr$   c              3  óD   K  — | ]}|                      d ¦  «        °|V — ŒdS )r2  Nr4  )rj   Úfs     r%   rn   z(_iter_visible_entries.<locals>.<genexpr>  s3   è è € ÐAÐA˜Q¨q¯|ª|¸CÑ/@Ô/@ÐA�qÐAÐAÐAÐAÐAÐAr$   )
Ú	_rg_filesÚsetÚparentsrì   rE   ÚsortedrÖ   Úwalkr   r¥   )r§   rO   r  Ú
rg_entriesÚoutputÚ	seen_dirsrá   ÚfullÚparentÚrootÚdirsÚfilesÚ	root_pathr5  r7  s                  r%   r#  r#  û  së  € Ý˜4 ¨EÐ2Ñ2Ô2€JØÐØˆÝ"™uœuˆ	Øð 	 ð 	 ˆCØ˜‘9ˆDØœ,ð &ð &�Ø˜S’=�= F¨iÐ$7Ð$7¸4ÈÐG`ÐQWÔQ_ÐG`Ð;`Ð;`ØØ—’˜fÑ%Ô%Ð%Ø—’˜fÑ%Ô%Ð%Ð%Ø�MŠM˜$ÑÔÐÐÝÐ7Ð7 &Ð7Ñ7Ô7Ð=_Ð=_Ð`Ñ`Ô`Ð`à€FÝœW T™]œ]ð ð Ñˆˆd�EÝÐYÐY DÐYÑYÔYÑYÔYˆˆQˆQˆQ‰ÝÐAÐA %ÐAÑAÔAÑAÔAˆÝ˜‘J”Jˆ	Øð 	ð 	ˆAØ�MŠM˜) a™-Ñ(Ô(Ð(Ý�6‰{Œ{˜eÒ#Ð#Ø�����ð $àð 	ð 	ˆAØ�MŠM˜) a™-Ñ(Ô(Ð(Ý�6‰{Œ{˜eÒ#Ð#Ø�����ð $ð	ð €Mr$   úlist[Path] | Nonec                ó€  — t           rdt          ¦   «         ini }	 t          j        ddt	          |                      |¦  «        ¦  «        gf|dddddt          j        dœ|¤Ž}n## t          t          t          j	        f$ r Y d S w xY w|j
        d	k    rd S d
„ |j                             ¦   «         D ¦   «         }|d |…         S )Nr´   Úrgz--filesTr™   rµ   r‡   r·   r   c                óx   — g | ]7}|                      ¦   «         ¯t          |                      ¦   «         ¦  «        ‘Œ8S r#   )rx   r   )rj   Úlines     r%   rå   z_rg_files.<locals>.<listcomp>*  s5   € ÐWÐWÐW DÈ$Ï*Ê*É,Ì,ÐW�T�$—*’*‘,”,ÑÔÐWÐWÐWr$   )r
   r   r¼   r`   r   rØ   r½   ÚFileNotFoundErrorÚOSErrorr¾   r¿   rÁ   r¤   )r§   rO   r  rÂ   ra   rD  s         r%   r8  r8    sï   € Ý?IÐQ�_Õ&8Ñ&:Ô&:Ð;Ð;Èr€MðÝ”Ø�9�c $×"2Ò"2°3Ñ"7Ô"7Ñ8Ô8Ð9ð
àØØ °	ØÝÔ$ð
ð 
ð ð
ð 
ˆˆøõ �w­
Ô(AÐBð ð ð ØˆtˆtðøøøàÔ˜AÒÐØˆtØWÐW¨F¬M×,DÒ,DÑ,FÔ,FÐWÑWÔW€EØ��%�Œ=Ðs   ›AA# Á#BÂBc                óž   — 	 ddl m}  |¦   «          ddlm}  |t	          | ¦  «        ¦  «        S # t
          $ r t	          | ¦  «        cY S w xY w)u  Map a host path to the path the agent's tools can read in the active backend.

    Under a container backend (docker) the gateway host path dangles inside the
    sandbox â€” the container has its own filesystem and the host path is not
    mounted. Files staged into an auto-mounted cache dir (``images/``,
    ``attachments/``, ...) are translated to their in-container path via the
    existing ``tools.credential_files`` machinery (#76577). Falls back to the
    host path when the backend is local or translation is unavailable.
    r   )Ú_ensure_terminal_env_bridged)Úto_agent_visible_cache_path)Útools.terminal_toolrN  Útools.credential_filesrO  r   r”   )r§   rN  rO  s      r%   Ú_agent_visible_pathrR  .  s�   € ðð 	EÐDÐDÐDÐDÐDà$Ð$Ñ&Ô&Ð&ØFÐFÐFÐFÐFÐFà*Ð*­3¨t©9¬9Ñ5Ô5Ð5øÝð ð ð Ý�4‰yŒyÐÐÐðøøøs   ‚-0 °AÁAc           
     óø   — t          j        |j        ¦  «        \  }}|pd}	 t          |                     ¦   «         j        ¦  «        }n# t          $ r d}Y nw xY wd| j        › d|› d|› dt          |¦  «        › d�	S )Nzapplication/octet-streamzunknown sizeu   ðŸ“Ž rŒ   z, uD   ) â€” binary file, not inlined as text. It is available on disk at `z™`. Use your tools to work with it (read or convert it, extract its text, or view/render it as needed); do not tell the user the file type is unsupported.)	r  r  r  r   ÚstatÚst_sizerL  r   rR  )rk   r§   r  r  Úsizes        r%   r¢   r¢   F  s°   € ÝÔ" 4¤9Ñ-Ô-�G€Dˆ!ØÐ-Ð-€DðÝ˜DŸIšI™KœKÔ/Ñ0Ô0ˆˆøÝð ð ð Øˆˆˆðøøøð	>�”ð 	>ð 	>˜4ð 	>ð 	> 4ð 	>ð 	>Ý':¸4Ñ'@Ô'@ð	>ð 	>ð 	>ðs   ¢&A	 Á	AÁAc                ó  — t          | ¦  «        r|                      ¦   «         j        › d�S 	 |                      d¬¦  «                             d¦  «        dz   }n,# t
          $ r |                      ¦   «         j        › d�cY S w xY w|› d�S )Nz bytesr™   rš   ro   rU   z lines)r¡   rT  rU  r£   r•   r”   )r§   Ú
line_counts     r%   r%  r%  U  s£   € Ý�tÑÔð .Ø—)’)‘+”+Ô%Ð-Ð-Ð-Ð-ð.Ø—^’^¨W�^Ñ5Ô5×;Ò;¸DÑAÔAÀAÑEˆ
ˆ
øÝð .ð .ð .Ø—)’)‘+”+Ô%Ð-Ð-Ð-Ð-Ð-Ð-ð.øøøàÐ Ð Ð Ð s   ­,A Á&BÂBc                óx   — ddddddddd	d	d
dœ}|                      | j                             ¦   «         d¦  «        S )NÚpythonÚ
javascriptÚ
typescriptÚtsxÚjsxrÏ   rÊ   ÚbashÚyamlÚtoml)r  r  r  z.tsxz.jsxr  r  z.shr  r  r  r@   )rÑ   ÚsuffixÚlower)r§   Úmappings     r%   r¦   r¦   _  sS   € àØØØØØØØØØØðð €Gð �;Š;�t”{×(Ò(Ñ*Ô*¨BÑ/Ô/Ð/r$   )r4   r   r5   r   )r(   r   r5   r+   )r(   r   rO   rP   rQ   r   rM   rR   rN   rS   r5   r'   )
rk   r   rO   r   rM   rR   rN   r~   r5   r   )rk   r   rO   r   rN   r~   r5   r   )
rk   r   rO   r   r²   r-   r­   r   r5   r   )rŠ   r   rM   rR   r5   r   )rŠ   r   r5   r   )rO   r   r   r   rN   r~   r5   r   )r§   r   r5   rÛ   )r4   r   r5   r  )r§   r   r5   r0   )r  )r§   r   rO   r   r  r   r5   r   )r§   r   rO   r   r  r   r5   r*  )r§   r   rO   r   r  r   r5   rF  )r§   r   r5   r   )rk   r   r§   r   r5   r   )9Ú
__future__r   rX   rÅ   rÏ   r  rÖ   r  r¼   Údataclassesr   r   Úpathlibr   Útypingr   r   Úagent.model_metadatar	   Úhermes_cli._subprocess_compatr
   r   Úhermes_cli.sizefmtr   Ú_QUOTED_REFERENCE_VALUEÚcompilerB   rý   r:   rí   rï   rë   r   r'   r=   rK   rf   rW   ri   r�   r�   r‘   r“   rÄ   r�   rž   rF   rG   rH   r¡   r°   r#  r8  rR  r¢   r%  r¦   r#   r$   r%   ú<module>rn     sä  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ +Ð +Ð +Ð +Ð +Ð +àAÐ Ø�B”Jð JÐXoð  Jð  Jð  Jñô Ð ð Ð Ø�”Ð4Ñ5Ô5€Ø]Ð Ø˜$˜x™.œ.¨6Ñ1Ð3Ð à€Dˆ�L„LÐ$Ñ$Ø€Dˆ�L„L�8ÑØ€Dˆ�L„L�<ÑØ€Dˆ�L„L�8ÑØ€Dˆ�O„OØ€Dˆ�N„NØ€DˆÑÔØ€DˆÑÔØ€DˆÑÔØ€Dˆ�N„NØ€Dˆ�O„OØ€Dˆ�N„NØ€Dˆ�O„OðÐ ð" €�$ÐÑÔð ð  ð  ð  ð  ñ  ô  ñ Ôð ð ðð ð ð ð ñ ô ñ „ððð ð ð ð(ð (ð (ð (ð` AEØ&*ðð ð ð ð ð ð@ AEØ&*ðVð Vð Vð Vð Vð Vðz AEØ $ð:ð :ð :ð :ð :ð :ðD !%ð	`ð `ð `ð `ð `ð `ðL !%ð	Xð Xð Xð Xð Xð Xð"dð dð dð dð> AEð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð	Kð 	Kð 	Kð 	Kð JNð 
ð 
ð 
ð 
ð 
ð 
ð1
ð 1
ð 1
ð 1
ðh	ð 	ð 	ð 	ðð ð ð ð8ð 8ð 8ð 8ð4ð ð ð ðð ð ð ð ð ð ð ð ð>ð ð ð ð(ð ð ð ð0ð ð ð ð!ð !ð !ð !ð0ð 0ð 0ð 0ð 0ð 0r$   