
    iB                    6   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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dYd&Zddd'dZd0Zddd'dZd1Zddd'd[d6Zdd7d\d8Z dd7d\d9Z!d]d=Z"dd>d^d@Z#d_dAZ$dd7d`dCZ%dadFZ&dbdHZ'dbdIZ(dcdKZ)dddMZ*dedOZ+dfdgdRZ,dhdTZ-didVZ.djdWZ/djdXZ0dS )k    )annotationsN)	dataclassfield)Path)	AwaitableCallable)estimate_tokens_roughz$(?:`[^`\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<   dS )ContextReferencestrrawkindtargetintstartendNz
int | None
line_startline_end)__name__
__module____qualname____annotations__r   r        =/home/piyush/.hermes/hermes-agent/agent/context_references.pyr   r   (   sa         HHHIIIKKKJJJHHH!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,   r.   r/   r    r!   r"   r$   r$   3   s         LLL).t)D)D)DJDDDD%555H5555OHGr!   r$   r%   r   returnr(   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   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matchr3   r   r5   r   r   r   s	            r"   parse_context_referencesr@   >   sf   #%D "++G44 !
 !
X&& 
	KK A++--		     {{6""+EKK,@,@,FBGG
*5116>>+Fu+M+M(FJKKNNkkmmIIKK%!  
	
 
	
 
	
 
	
 Kr!   url_fetcherallowed_rootcwd
str | Pathcontext_lengthr   rB   ,Callable[[str], str | Awaitable[str]] | NonerC   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)rD   rF   rB   rC   r      )max_workers)#preprocess_context_references_asyncasyncioget_running_loopRuntimeError
is_runningconcurrent.futuresfuturesThreadPoolExecutorsubmitrunresult)	r%   rD   rF   rB   rC   coroloop
concurrentpools	            r"   preprocess_context_referencesr[   i   s%    /%!  D'))    ;!! ;!!!!22q2AA 	;T;;w{D1188::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;;ts   * 9912B00B47B4c          
     :  K   t          |           }|st          | |           S t          |                                                                          }|3t          |                                                                          n|}g }g }	d}
|D ]^}t          ||||           d {V \  }}|r|                    |           |r'|	                    |           |
t          |          z  }
_t          dt          |dz                      }t          dt          |dz                      }|
|k    r2|                    d|
 d| d	           t          | | |||
d
d          S |
|k    r|                    d|
 d| d	           t          | |          }|}|r%| dd                    d |D                       z   }|	r| dd                    |	          z   }t          |                                | |||
t          |	p|          d
          S )N)r%   r&   r   rA   rJ   g      ?g      ?z@ context injection refused: z$ tokens exceeds the 50% hard limit (z).FT)r%   r&   r)   r+   r,   r.   r/   z@ context injection warning: z$ tokens exceeds the 25% soft limit (z

--- Context Warnings ---

c              3      K   | ]	}d | V  
dS )- Nr    ).0warnings     r"   	<genexpr>z6preprocess_context_references_async.<locals>.<genexpr>   s)      DlDlX_^'^^DlDlDlDlDlDlr!   z

--- Attached Context ---

z

)r@   r$   r   
expanduserresolve_expand_referencer:   r	   maxr   _remove_reference_tokensjoinstripr-   )r%   rD   rF   rB   rC   r>   cwd_pathallowed_root_pathr+   blocksr,   refra   block
hard_limit
soft_limitstrippedfinals                     r"   rL   rL      s      $G,,D Q%gPPPPCyy##%%--//H 6B5M\%%''//111S[  HFO < <0#*	 
  
  
 
 
 
 
 
 
  	%OOG$$$ 	<MM%   4U;;;OQNT12233JQNT12233J##oOooakooo	
 	
 	
 &$+
 
 
 	
 ##oOooakooo	
 	
 	
 (66HE m888499DlDlckDlDlDl;l;ll Q:::V[[=P=PP! 'f())   r!   rm   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 )Nr6   rC   folderdiffzgit diffstagedz--stagedzgit diff --stagedgitrJ   1
   log-z-pz	git log -z -purlrB   z: no content extractedu   🌐  (	 tokens)
: z: unsupported reference type)r   _expand_file_reference_expand_folder_reference_expand_git_referencerf   minr   r   _fetch_url_contentr   r	   	Exception)rm   rD   rB   rC   countcontentexcs          r"   re   re      s     )8v)#sNNNN8x+C<PPPP8v(cF8ZHHH8x(cFJ3GI\]]]8u3s3:#455r::;;E(cE;u;;3MOe[`OeOeOefff8u.sz{SSSSSSSSSG @'9994??___,A',J,J__V]____	 
  ) ) )'""S""D((((((() g333T99s@   D) D) D) D) ;AD) 4D) 	D) )
E3E EErv   c          
        t          || j        |          }t          |           |                                s| j         dd fS |                                s| j         dd fS t          |          r| j         dd 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 )Nrv   z: file not foundz: path is not a filez : binary files are not supportedutf-8encodingrJ   r   r]   u   📄 r   z tokens)
```
```)_resolve_pathr   _ensure_reference_path_allowedexistsr   is_file_is_binary_file	read_textr   
splitlinesrf   r   r   lenrh   _code_fence_languager	   )
rm   rD   rC   pathtextlines	start_idxend_idxlanglabels
             r"   r   r      sa    cj|DDDD"4(((;;== 2'+++T11<<>> 6'///55t B';;;TAA>>7>++D
~!!!*A..	cl4cnc%jjAAyyy0122%%DGE___"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 )Nrv   z: folder not foundz: path is not a folderu   📁 r   r   )r   r   r   r   r   is_dir_build_folder_listingr	   )rm   rD   rC   r   listings        r"   r   r     s     cj|DDDD"4(((;;== 4'---t33;;== 8'111477#D#..GWWW$9'$B$BWWgWWWWr!   argsr*   r   c                \   	 t          j        dg||dd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 )Nrz   T   rD   capture_outputr   timeoutz: git command timed out (30s)r   r4   zgit command failedr   z(no output)u   🧾 r   z tokens)
```diff
r   )	
subprocessrU   TimeoutExpiredr   
returncodestderrri   stdoutr	   )rm   rD   r   r   rV   r   r   s          r"   r   r     s   	?NTN
 
 
 $ ? ? ?'888$>>>>?A-%2,,..F2F'%%V%%t++m!!##G  ccc"7"@"@ccU\cccccs    ==r   r   c                  K   |pt           } ||           }t          j        |          r| d {V }t          |pd                                          S )Nr4   )_default_url_fetcherinspectisawaitabler   ri   )r   rB   fetcherr   s       r"   r   r   1  sb      
 11GgcllG7##  ------w}"##%%%r!   c                f  K   ddl m}  || gdd           d {V }t          j        |          }|                    di                               dg           }|sdS |d         }t          |                    d	          p|                    d
          pd                                          S )Nr   )web_extract_toolmarkdownT)formatuse_llm_processingdata	documentsr4   r   raw_content)tools.web_toolsr   jsonloadsgetr   ri   )r   r   r   payloaddocsdocs         r"   r   r   =  s      000000  #zdSSS
S
S
S
S
S
SCjooG;;vr""&&{B77D r
q'Cswwy!!ASWW]%;%;Ar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   rc   is_absoluterd   relative_to
ValueError)rD   r   rC   r   resolvedr   s         r"   r   r   I  s    ""6**++D Tz||~~H	O  .... 	O 	O 	ODEE3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 S )
Nr   )get_hermes_home~c                    h | ]}|z  S r    r    r`   relhomes     r"   	<setcomp>z1_ensure_reference_path_allowed.<locals>.<setcomp>[  s    AAACTCZAAAr!   z.envc                    g | ]}|z  S r    r    r   s     r"   
<listcomp>z2_ensure_reference_path_allowed.<locals>.<listcomp>]  s    ???3D3J???r!   c              3  "   K   | ]	}|z  V  
d S Nr    )r`   r   hermes_homes     r"   rb   z1_ensure_reference_path_allowed.<locals>.<genexpr>^  s(      LLc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)hermes_constantsr   r   r   r   rc   rd   _SENSITIVE_HOME_FILESadd_SENSITIVE_HOME_DIRSextend_SENSITIVE_HERMES_DIRSr   r   )r   r   blocked_exactblocked_dirsblocked_dirr   r   s        @@r"   r   r   V  sQ   000000""3''((0022D!/##++--KAAAA+@AAAMkF*+++????*>???LLLLL5KLLLLLL}UVVV# j j	[)))) 	 	 	H	hiiij js   C55
DDr5   c                    |                      t                    }|                    d          rL|d         }dddd|         }|                    |          |                    |          k    r|d d         }`	 |S )N))]}([{)rstripTRAILING_PUNCTUATIONendswithr   )r5   rq   closeropeners       r"   r;   r;   k  s    ||011H


O
,
, "3//7>>&!!HNN6$:$:::}HOr!   c                x    t          |           dk    r&| d         | d         k    r| d         dv r
| dd         S | S )N   r   r   z`"'rJ   )r   )r5   s    r"   r<   r<   w  sD    
5zzQ58uRy00U1X5G5GQrT{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+))?$)rer?   r9   r   r<   )r5   quoted_matchr   r   range_matchs        r"   r=   r=   }  s)   8[ L  
!''00
%%e,,v&&)5C
OOO4+5+AC&J'''t
 	
 (NPUVVK 
**73344
f%%!!%((FK,=,=g,F,FGG
 	
 %U++T477r!   r>   c                J   g }d}|D ]+}|                     | ||j                            |j        },|                     | |d                     d                    |          }t	          j        dd|          }t	          j        dd|          }|                                S )Nr   r4   z\s{2,} z\s+([,.;:!?])z\1)r:   r   r   rh   r   subri   )r%   r>   piecescursorrm   r   s         r"   rg   rg     s    FF  gfSY./000
MM'&''"###776??D6)S$''D6"E400D::<<r!   r-   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   )r`   extr   s     r"   rb   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    "49--GD! DOOG,, S 9 9 9 9+r9 9 9 6 6  tOOete$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  rJ   r   r_   r   r   z- ...r]   )
r   _iter_visible_entriesrf   r   partsr   r:   r   _file_metadatarh   )	r   rD   r  r   entriesentryr   indentmetas	            r"   r   r     sB     %%((()E#D#U;;;G = =$$C	NNS1A1A#1F1F1L-M-MMPQQSTUUU<<>> 	=LLF33ej3334444!%((DLLF;;ej;;D;;;<<<<
7||uW99U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   )r`   ps     r"   r   z(_iter_visible_entries.<locals>.<setcomp>  s%    777QAHHJJ7q777r!   c                J    |                                   t          |           fS r   )r   r   )r  s    r"   <lambda>z'_iter_visible_entries.<locals>.<lambda>  s    AHHJJX[\]X^X^G_ r!   )keyc              3  P   K   | ]!}|                     d           |dk    |V  "dS ).__pycache__Nr
  )r`   ds     r"   rb   z(_iter_visible_entries.<locals>.<genexpr>  s=      YYqS0A0AYa=FXFXFXFXFXFXYYr!   c              3  D   K   | ]}|                     d           |V  dS )r$  Nr&  )r`   fs     r"   rb   z(_iter_visible_entries.<locals>.<genexpr>  s3      AAQq||C/@/@AqAAAAAAr!   )
	_rg_filessetparentsr   r:   sortedr   walkr   r   )r   rD   r  
rg_entriesoutput	seen_dirsr   fullparentrootdirsfiles	root_pathr'  r)  s                  r"   r  r    s   4E222J"uu	 	  	 C9D, & &S==Fi$7$74G`QWQ_G`;`;`f%%%f%%%%MM$77&777=_=_````FWT]]  dEYYDYYYYYQQQAA%AAAAAJJ	 	 	AMM)a-(((6{{e## $ 	 	AMM)a-(((6{{e## $	 Mr!   list[Path] | Nonec           	     8   	 t          j        ddt          |                     |                    g|dd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 )Nrgz--filesTr|   r   r   c                x    g | ]7}|                                 t          |                                           8S r    )ri   r   )r`   lines     r"   r   z_rg_files.<locals>.<listcomp>  s5    WWWD$**,,WT$**,,WWWr!   )
r   rU   r   r   FileNotFoundErrorOSErrorr   r   r   r   )r   rD   r  rV   r6  s        r"   r*  r*    s    	9c$"2"23"7"7889
 
 
 w
(AB   ttAtWWFM,D,D,F,FWWWE%=s   <? 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   r]   rJ   z lines)r   statst_sizer   r   r   )r   
line_counts     r"   r  r    s    t .))++%----.^^W^55;;DAAA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  r4   )r   suffixlower)r   mappings     r"   r   r     sS     G ;;t{((**B///r!   )r%   r   r1   r(   )r%   r   rD   rE   rF   r   rB   rG   rC   rH   r1   r$   )
rm   r   rD   r   rB   rG   rC   rs   r1   rt   )rm   r   rD   r   rC   rs   r1   rt   )
rm   r   rD   r   r   r*   r   r   r1   rt   )r   r   rB   rG   r1   r   )r   r   r1   r   )rD   r   r   r   rC   rs   r1   r   )r   r   r1   r   )r5   r   r1   r   )r5   r   r1   r   )r%   r   r>   r(   r1   r   )r   r   r1   r-   )r  )r   r   rD   r   r  r   r1   r   )r   r   rD   r   r  r   r1   r  )r   r   rD   r   r  r   r1   r8  )r   r   r1   r   )1
__future__r   rM   r   r   r  r   r   r   dataclassesr   r   pathlibr   typingr   r   agent.model_metadatar	   _QUOTED_REFERENCE_VALUEcompiler7   r   r   r   r   r   r$   r@   r[   rL   re   r   r   r   r   r   r   r   r;   r<   r=   rg   r   r   r  r*  r  r   r    r!   r"   <module>rV     s   " " " " " "        				 				     ( ( ( ( ( ( ( (       & & & & & & & & 6 6 6 6 6 6A BJ JXo  J  J  J    ] $x..613 DLL$$DLL8DLL<DLL8DOODNNDDDDNNDOODNNDOO " $                       ( ( ( (` AE&*     @ AE&*G G G G G G\ AE $: : : : : :D !%	` ` ` ` ` `> !%	X X X X X X"d d d d8 AE	& 	& 	& 	& 	& 	&	K 	K 	K 	K JN 
 
 
 
 
 
j j j j*	 	 	 	   8 8 8 84
 
 
 
           >   "! ! ! !0 0 0 0 0 0r!   