
    `gjR                    ^   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Z ej.                  d	e d
      Z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d$	 	 	 	 	 	 	 	 	 	 	 d>d%Z ddd$	 	 	 	 	 	 	 	 	 	 	 d>d&Z!ddd$	 	 	 	 	 	 	 	 	 d?d'Z"dd(	 	 	 	 	 	 	 d@d)Z#dd(	 	 	 	 	 	 	 d@d*Z$	 	 	 	 	 	 	 	 	 	 dAd+Z%dd,	 	 	 	 	 dBd-Z&dCd.Z'dd(dDd/Z(dEd0Z)dFd1Z*dFd2Z+dGd3Z,dHd4Z-dId5Z.dJdKd6Z/dLd7Z0dMd8Z1dNd9Z2dOd:Z3dPd;Z4dPd<Z5y)Q    )annotationsN)	dataclassfield)Path)	AwaitableCallable)estimate_tokens_rough)
IS_WINDOWSwindows_hide_flagsz$(?:`[^`\n]+`|"[^"\n]+"|\'[^\'\n]+\')zP(?<![\w/])@(?:(?P<simple>diff|staged)\b|(?P<kind>file|folder|git|url):(?P<value>z(?::\d+(?:-\d+)?)?|\S+))z,.;!?).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<   y)ContextReferencestrrawkindtargetintstartendNz
int | None
line_startline_end)__name__
__module____qualname____annotations__r   r        K/root/.hermes/venv/lib/python3.12/site-packages/agent/context_references.pyr   r   )   s/    	H
IKJ	H!J
!Hj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<   y)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.   r0   r1   r"   r#   r$   r&   r&   4   sJ    L).t)DJ&D5Hi5OSHdGTr#   r&   c                @   g }| s|S t         j                  |       D ]  }|j                  d      }|rK|j                  t	        |j                  d      |d|j                         |j                                      a|j                  d      }t        |j                  d      xs d      }d }d }t        |      }|dk(  rt        |      \  }}}|j                  t	        |j                  d      |||j                         |j                         ||              |S )	Nsimpler    )r   r   r   r   r   r   value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matchr4   r   r6   r   r   r   s	            r$   parse_context_referencesrA   ?   s   #%D"++G4 !
X&KK A++-		 {{6"+EKK,@,FBG
*516>+Fu+M(FJKKNkkmIIK%!
	
/!
F Kr#   url_fetcherallowed_rootc                  t        | ||||      }	 t        j                         }|rh|j	                         rXdd l}|j                  j                  d      5 }|j                  t        j                  |      j                         cd d d        S t        j                  |      S # t        $ r d }Y w xY w# 1 sw Y   /xY w)N)cwdcontext_lengthrC   rD   r      )max_workers)#preprocess_context_references_asyncasyncioget_running_loopRuntimeError
is_runningconcurrent.futuresfuturesThreadPoolExecutorsubmitrunresult)	r'   rF   rG   rC   rD   coroloop
concurrentpools	            r$   preprocess_context_referencesrY   j   s     /%!D'') !!22q2A 	;T;;w{{D188:	; 	;;;t  	; 	;s   B% .B6%B32B36B?c                 K   t        |       }|st        | |       S t        |      j                         j	                         |'t        |      j                         j	                         ng }g }d}t        j                  fd|D          d {   }	|	D ]:  \  }
}|
r|j                  |
       |s|j                  |       |t        |      z  }< t        dt        |dz              }t        dt        |dz              }||kD  r*|j                  d| d| d	       t        | | |||d
d      S ||kD  r|j                  d| d| d	       t        | |      }|}|r| ddj                  d |D              z   }|r| ddj                  |      z   }t        |j                         | |||t        |xs |      d
      S 7 4w)N)r'   r(   r   c              3  <   K   | ]  }t        |         yw)rB   N)_expand_reference).0refallowed_root_pathcwd_pathrC   s     r$   	<genexpr>z6preprocess_context_references_async.<locals>.<genexpr>   s1      

  '.	 

s   rH   g      ?g      ?z@ context injection refused: z$ tokens exceeds the 50% hard limit (z).FT)r'   r(   r+   r-   r.   r0   r1   z@ context injection warning: z$ tokens exceeds the 25% soft limit (z

--- Context Warnings ---

c              3  &   K   | ]	  }d |   yw)- Nr"   )r]   warnings     r$   ra   z6preprocess_context_references_async.<locals>.<genexpr>   s     DlX_r'^Dls   z

--- Attached Context ---

z

)rA   r&   r   
expanduserresolverK   gatherr;   r	   maxr   _remove_reference_tokensjoinstripr/   )r'   rF   rG   rC   rD   r?   r-   blocksr.   r0   re   block
hard_limit
soft_limitstrippedfinalr_   r`   s      `            @@r$   rJ   rJ      s     $G,D%gPPCy##%--/H 6B5M\%%'//1S[  HFO ^^

 


 
H # <OOG$MM% 4U;;O< QNT123JQNT123J#+O+<<`ak`llno	
 &$+
 	
 #+O+<<`ak`llno	
 (6HE'78499DlckDl;ll'9:V[[=PP! 'f() ]
s   BGG!G;DG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(  rEt	        d
t        t        | j                  xs d      d            }t        | |dd| dgd| d      S | j                   dk(  rRt        | j                  |       d {   }|s| j                   dd fS d d| j                   dt        |       d| fS 	 | j                   dd fS 7 I# t        $ r}| j                   d| d fcY d }~S d }~ww xY ww)Nr7   rD   folderdiffzgit diffstagedz--stagedzgit diff --stagedgitrH   1
   log-z-pz	git log -z -purlrC   z: no content extractedu   🌐  (	 tokens)
: z: unsupported reference type)r   _expand_file_reference_expand_folder_reference_expand_git_referenceri   minr   r   _fetch_url_contentr   r	   	Exception)r^   rF   rC   rD   countcontentexcs          r$   r\   r\      s    )88v)#sNN88x+C<PP88v(cF8ZHH88x(cFJ3GI\]]88u3s3::#45r:;E(cEQug;3MQZ[`ZaadOeff88u.szz{SSG''"894??5	,A',J+K:V]U^___	  ggY23T99 T  )''"SE"D(()s   E-E E-E E-E E-E :E-;AE E-)E 8E9E E-E /E-E 	E*E%E* E-%E**E-rt   c          
     p   t        || j                  |      }t        |       |j                         s| j                   dd fS |j                         s| j                   dd fS t        |      rd t        | |      fS |j                  d      }| j                  j|j                         }t        | j                  dz
  d      }t        | j                  xs | j                  t        |            }dj                  |||       }t!        |      }| j                  }	d d	|	 d
t#        |       d| d| d	fS )Nrt   z: file not foundz: path is not a fileutf-8encodingrH   r   rb   u   📄 r   z tokens)
```
```)_resolve_pathr   _ensure_reference_path_allowedexistsr   is_file_is_binary_file_binary_reference_block	read_textr   
splitlinesri   r   r   lenrk   _code_fence_languager	   )
r^   rF   rD   pathtextlines	start_idxend_idxlanglabels
             r$   r   r      s,    cjj|DD"4(;;=''*+T11<<>''./55t ,S$777>>7>+D
~~!!*A.	cll4cnnc%jAyyy12%DGGE5r"7"=!>mD6QSTXSYY^___r#   c               $   t        || j                  |      }t        |       |j                         s| j                   dd fS |j                         s| j                   dd fS t        ||      }d d| j                   dt        |       d| fS )Nrt   z: folder not foundz: path is not a folderu   📁 r   r   )r   r   r   r   r   is_dir_build_folder_listingr	   )r^   rF   rD   r   listings        r$   r   r     s     cjj|DD"4(;;='',-t33;;=''01477#D#.G5	$9'$B#C:gYWWWr#   c           	        t         rdt               ini }	 t        j                  dg|f|dddt        j                  d|}|j                  dk7  r5|j                  xs dj                         xs d	}| j                   d
| d fS |j                  j                         }|sd}d d| dt        |       d| dfS # t        j
                  $ r | j                   dd fcY S w xY w)Ncreationflagsrx   T   rF   capture_outputr   timeoutstdinz: git command timed out (30s)r   r5   zgit command failedr   z(no output)u   🧾 r   z tokens)
```diff
r   )r
   r   
subprocessrS   DEVNULLTimeoutExpiredr   
returncodestderrrl   stdoutr	   )r^   rF   argsr   _popen_kwargsrT   r   r   s           r$   r   r   +  s    @J_&8&:;rM?NTN
$$
 
 A--%2,,.F2F''"VH%t++mm!!#G5r"7"@!AATU\T]]bccc $$ ?''78$>>?s   -B< <$C#"C#r~   c                  K   |xs t         } ||       }t        j                  |      r
| d {   }t        |xs d      j	                         S 7 !w)Nr5   )_default_url_fetcherinspectisawaitabler   rl   )r}   rC   fetcherr   s       r$   r   r   G  sN     
 11GclG7#-w}"##%%  s   -AA"Ac                  K   ddl m}  || gd       d {   }t        j                  |      }|j	                  dg       }|sy|d   }t        |j	                  d      xs |j	                  d      xs d      j                         S 7 rw)	Nr   )web_extract_toolmarkdown)formatresultsr5   r   raw_content)tools.web_toolsr   jsonloadsgetr   rl   )r}   r   r   payloaddocsdocs         r$   r   r   S  s{     0 #z:
:CjjoG;;y"%D
q'Cswwy!ASWW]%;ArBHHJJ ;s   BB
A3Bc                  t        t        j                  j                  |            }|j	                         s| |z  }|j                         }|	 |j                  |       |S |S # t        $ r}t        d      |d }~ww xY w)Nz%path is outside the allowed workspace)r   osr   rf   is_absoluterg   relative_to
ValueError)rF   r   rD   r   resolvedr   s         r$   r   r   _  s    ""6*+DTz||~H	O  . O8O  	ODE3N	Os   A& &	B /A;;B c                   ddl m} t        t        j                  j                  d            j                         } |       j                         t        D ch c]  }||z  	 }}|j                  dz         t        D cg c]  }||z  	 }}|j                  fdt        D               | |v rt        d      |D ]  }	 | j                  |       t        d       	 ddlm}  |t!        |             t        d      y c c}w c c}w # t        $ r Y Zw xY w# t        $ r  t"        $ r t        d	      w xY w)
Nr   )get_hermes_home~z.envc              3  (   K   | ]	  }|z    y wNr"   )r]   relhermes_homes     r$   ra   z1_ensure_reference_path_allowed.<locals>.<genexpr>t  s     Lcc)Ls   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   rf   rg   _SENSITIVE_HOME_FILESadd_SENSITIVE_HOME_DIRSextend_SENSITIVE_HERMES_DIRSr   r   agent.file_safetyr   r   r   )	r   r   homer   blocked_exactblocked_dirsblocked_dirr   r   s	           @r$   r   r   l  sK   0""3'(002D!#++-K+@ACTCZAMAkF*+*>?3D3J?L?L5KLL}UVV# j	[) hiij"
:D	*6_  79 B?  		*   

 `
 	


s*   DDD$"D  	DD D>c                    | j                  t              }|j                  d      r:|d   }dddd|   }|j                  |      |j                  |      kD  r|d d }H	 |S |S )N))]}([{)rstripTRAILING_PUNCTUATIONendswithr   )r6   rq   closeropeners       r$   r<   r<     sm    ||01H


O
,"3/7>>&!HNN6$::}HO8Or#   c                P    t        |       dk\  r| d   | d   k(  r| d   dv r| dd S | S )N   r   r   z`"'rH   )r   )r6   s    r$   r=   r=     s8    
5zQ58uRy0U1X5GQr{Lr#   c                   t        j                  d|       }|rU|j                  d      }|j                  d      }|j                  d      |t        |      nd |t        |xs |      fS d fS t        j                  d|       }|rYt        |j                  d            }|j                  d      |t        |j                  d      xs |j                  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+))?$)rer@   r:   r   r=   )r6   quoted_matchr   r   range_matchs        r$   r>   r>     s   88[L !''0
%%e,v&)5C
O4+5+AC&J'
 	
 HL
 	
 ((NPUVK**734
f%!!%(FK,=,=g,FG
 	
 %U+T477r#   c                2   g }d}|D ],  }|j                  | ||j                          |j                  }. |j                  | |d         dj                  |      }t	        j
                  dd|      }t	        j
                  dd|      }|j                         S )Nr   r5   z\s{2,} z\s+([,.;:!?])z\1)r;   r   r   rk   r   subrl   )r'   r?   piecescursorr^   r   s         r$   rj   rj     s    FF gfSYY/0 MM'&'"#776?D66)S$'D66"E40D::<r#   c                     t        j                   j                        \  }}|r&|j                  d      st	         fddD              sy j                         d d }d|v S )Nztext/c              3  T   K   | ]  }j                   j                  |       ! y wr   )namer   )r]   extr   s     r$   ra   z"_is_binary_file.<locals>.<genexpr>  s%      9$'		39s   %()	.py.mdz.txt.json.yaml.yml.toml.js.tsTi       )	mimetypes
guess_typer   
startswithany
read_bytes)r   mime_chunks   `   r$   r   r     s`    ""499-GD!DOOG,S 9+r9 6 OOet$Eer#   c           
     .   | j                  |       dg}t        | ||      }|D ]  }|j                  |      }dt        t        |j                        t        | j                  |      j                        z
  dz
  d      z  }|j                         r"|j                  | d|j                   d       t        |      }|j                  | d|j                   d| d        t        |      |k\  r|j                  d	       d
j                  |      S )N/limitz  rH   r   rd   r   r   z- ...rb   )
r   _iter_visible_entriesri   r   partsr   r;   r   _file_metadatark   )	r   rF   r  r   entriesentryr   indentmetas	            r$   r   r     s     %&a()E#D#U;G =$C		NS1A1A#1F1L1L-MMPQQSTUU<<>LLF82ejj\34!%(DLLF82ejj\D6;<= 7|uW99Ur#   c                   t        | ||      }|g }t               }|D ]f  }||z  }|j                  D ]?  }||k(  s||v s| |h|j                  vr|j                  |       |j	                  |       A |j	                  |       h t        |D 	ch c]  }	|	j                         s|	 c}	d       S g }t        j                  |       D ]  \  }
}}t        d |D              |d d  t        d |D              }t        |
      }|D ]*  }|j	                  ||z         t        |      |k\  s&|c c S  |D ]*  }|j	                  ||z         t        |      |k\  s&|c c S   |S c c}	w )Nr  c                :    | j                          t        |       fS r   )r   r   )ps    r$   <lambda>z'_iter_visible_entries.<locals>.<lambda>   s    AHHJX[\]X^G_ r#   )keyc              3  P   K   | ]  }|j                  d       r|dk7  s|   yw).__pycache__Nr  )r]   ds     r$   ra   z(_iter_visible_entries.<locals>.<genexpr>  s"     YqS0Aa=FXYs   &&&c              3  D   K   | ]  }|j                  d       r|  yw)r  Nr  )r]   fs     r$   ra   z(_iter_visible_entries.<locals>.<genexpr>  s     AQq||C/@qAs     )	_rg_filessetparentsr   r;   sortedr   r   walkr   r   )r   rF   r  
rg_entriesoutput	seen_dirsr   fullparentr  rootdirsfiles	root_pathr   r"  s                   r$   r  r    s{   4E2J"u	 	 C9D,, &S=Fi$74G`QWQ_Q_G`;`f%f%	&
 MM$	  &7QAHHJq7=_``FWWT] dEYDYYQA%AAJ	 	AMM)a-(6{e#	  	AMM)a-(6{e#	 M 8s   E''E'c           	        t         rdt               ini }	 t        j                  ddt	        | j                  |            gf|dddt        j                  d|}|j                  dk7  ry |j                  j                         D cg c],  }|j                         st        |j                               . }}|d | S # t        t        t        j                  f$ r Y y w xY wc c}w )Nr   rgz--filesTrz   r   r   )r
   r   r   rS   r   r   r   FileNotFoundErrorOSErrorr   r   r   r   rl   r   )r   rF   r  r   rT   liner/  s          r$   r#  r#    s    ?I_&8&:;rM9c$"2"23"789
$$
 
 A,2MM,D,D,FWD$**,T$**,WEW%= w
(A(AB  Xs   AB? C#C#?C C c                    t        |       }dD ]2  }|dk  s|dk(  r!|dk(  rt        |       d| c S |dd| c S |dz  }4 |ddS )N)BKBMBGBi   r:  r7  r   z.1fz GB)floatr   )nsizeunits      r$   _human_bytesr?  &  sn    8D' $;$$,,0CKc$i[$(QSz4&=QQ 3Zsr#   c           	         t        j                  |j                        \  }}|xs d}	 t        |j	                         j
                        }d| j                   d| d| d| d	S # t        $ r d}Y &w xY w)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_sizer4  r   )r^   r   r	  r
  r=  s        r$   r   r   /  s    ""499-GD!--DDIIK//0 y4&4& )''+f -=	>  s   #A& &A43A4c                    t        |       r| j                         j                   dS 	 | j                  d      j	                  d      dz   }| dS # t
        $ r  | j                         j                   dcY S w xY w)Nz bytesr   r   rb   rH   z lines)r   rA  rB  r   r   r   )r   
line_counts     r$   r  r  >  s    t))+%%&f--.^^W^5;;DAAE
 \    .))+%%&f--.s   $A &A<;A<c                r    ddddddddd	d	d
d}|j                  | j                  j                         d      S )Npython
javascript
typescripttsxjsxr   r   bashyamltoml)r   r  r  z.tsxz.jsxr   r   z.shr   r   r   r5   )r   suffixlower)r   mappings     r$   r   r   H  sJ    G ;;t{{((*B//r#   )r'   r   returnr*   )r'   r   rF   z
str | PathrG   r   rC   ,Callable[[str], str | Awaitable[str]] | NonerD   zstr | Path | NonerQ  r&   )
r^   r   rF   r   rC   rR  rD   Path | NonerQ  tuple[str | None, str | None])r^   r   rF   r   rD   rS  rQ  rT  )
r^   r   rF   r   r   r,   r   r   rQ  rT  )r}   r   rC   rR  rQ  r   )r}   r   rQ  r   )rF   r   r   r   rD   rS  rQ  r   )r   r   rQ  None)r6   r   rQ  r   )r6   r   rQ  z"tuple[str, int | None, int | None])r'   r   r?   r*   rQ  r   )r   r   rQ  r/   )   )r   r   rF   r   r  r   rQ  r   )r   r   rF   r   r  r   rQ  z
list[Path])r   r   rF   r   r  r   rQ  zlist[Path] | None)r<  r   rQ  r   )r^   r   r   r   rQ  r   )r   r   rQ  r   )6
__future__r   rK   r   r   r  r   r   r   dataclassesr   r   pathlibr   typingr   r   agent.model_metadatar	   hermes_cli._subprocess_compatr
   r   _QUOTED_REFERENCE_VALUEcompiler8   r   r   r   r   r   r&   rA   rY   rJ   r\   r   r   r   r   r   r   r   r<   r=   r>   rj   r   r   r  r#  r?  r   r  r   r"   r#   r$   <module>r_     s&   "     	 	  (  & 6 HA BJJWXoWp  qI  J   ] x.613 L$$L8L<L8ONNONO " $        (` AE&* 
 	
 > $ @ AE&*RR 
R 	R
 >R $R Rr AE $:	:	: >	:
 : #:D !%	`	`	` 	`
 #`L !%	X	X	X 	X
 #X"d	d	d d 	d
 #d> AE	&		& >	& 			&	K JN 
1
h	84
 >(!0r#   