
    ^sjb                         d dl Z d dlZd dlm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 ej                   dk(  rg dng dZd	eeef   fd
Z G d de      Zedefd       Zy)    N)asynccontextmanager)MemoryObjectReceiveStreamMemoryObjectSendStream)TextReceiveStream)	BaseModelFieldwin32)APPDATA	HOMEDRIVEHOMEPATHLOCALAPPDATAPATHPROCESSOR_ARCHITECTURESYSTEMDRIVE
SYSTEMROOTTEMPUSERNAMEUSERPROFILE)HOMELOGNAMEr   SHELLTERMUSERreturnc                      i } t         D ];  }t        j                  j                  |      }|%|j	                  d      r7|| |<   = | S )zo
    Returns a default environment object including only environment variables deemed
    safe to inherit.
    z())DEFAULT_INHERITED_ENV_VARSosenvironget
startswith)envkeyvalues      C/root/.hermes/venv/lib/python3.12/site-packages/mcp/client/stdio.pyget_default_environmentr%   !   sS    
 C) 	

s#=D!C	 J    c                   \    e Zd ZU eed<   	  ee      Zee   ed<   	 dZe	eef   dz  ed<   y)StdioServerParameterscommand)default_factoryargsNr!   )
__name__
__module____qualname__str__annotations__r   listr+   r!   dict r&   r$   r(   r(   6   s<    L4D1D$s)1;!%Cc3h$	%r&   r(   serverc                  K   t        j                  d      \  }t        j                  d      \  }t        j                  | j                  g| j                  | j
                  | j
                  n	t               t        j                         d{   fd}fd}t        j                         4 d{   }4 d{    |j                  |       |j                  |       ||f ddd      d{    ddd      d{    y7 7 [7 R7 # 1 d{  7  sw Y   +xY w7 "# 1 d{  7  sw Y   yxY ww)z
    Client transport for stdio: this will connect to a server by spawning a
    process and communicating with it over stdin/stdout.
    r   N)r!   stderrc                    K   j                   sJ d       	 4 d {    d} t        j                         2 3 d {   }| |z   j                  d      }|j                         } |D ];  }	 t        j
                  j                  |      }j                  |       d {    = n7 7 k# t        $ r$}j                  |       d {  7   Y d }~kd }~ww xY w7 ;6 d d d       d {  7   y # 1 d {  7  sw Y   y xY w# t        j                  $ r* t        j                  j                          d {  7   Y y w xY ww)Nz Opened process is missing stdout 
)stdoutr   splitpoptypesJSONRPCMessagemodel_validate_json	ExceptionsendanyioClosedResourceErrorlowlevel
checkpoint)bufferchunklineslinemessageexcprocessread_stream_writers         r$   stdout_readerz#stdio_client.<locals>.stdout_readerZ   s,    ~~AAA~	.) ? ?#4W^^#D ? ?%#e^2248E"YY[F % ?%&+&:&:&N&Nt&TG
 155g>>>???  ) %"4"9"9#">>>$% ? $E? ? ? ? ? (( 	...++---	.s   ED B(D C1CB*C*C1-B,C1 C
!C1(D *C,	C	5C		C
C	C1C	C1C1D *C-+D 0E1D7C:8D?D ED 4E:D=;E EEEc                    K   j                   sJ d       	 4 d {    2 3 d {   } | j                  dd      }j                   j                  |dz   j                                d {    Q7 W7 N7 	6 d d d       d {  7   y # 1 d {  7  sw Y   y xY w# t        j
                  $ r* t        j                  j                          d {  7   Y y w xY ww)NzOpened process is missing stdinT)by_aliasexclude_noner9   )stdinmodel_dump_jsonrA   encoderB   rC   rD   rE   )rJ   jsonrL   write_stream_readers     r$   stdin_writerz"stdio_client.<locals>.stdin_writero   s     }}???}	.* E E%8 E E'"22Dt2TD!--,,dTk-A-A-CDDDEED &9E E E E E (( 	...++---	.s   C$B$ A6B$ BA<A8A<AB0A:1B6B$ 8A<:B<B=B$ B	B$ C$B!BB!B$  C$!B$ $4C!CC!C$ C!!C$)rB   create_memory_object_streamopen_processr)   r+   r!   r%   sysr6   create_task_group
start_soon)	r4   read_streamwrite_streamrN   rW   tgrL   rM   rV   s	         @@@r$   stdio_clientr`   E   s)     ',&G&G&J#(-(I(I!(L%L%&&	&&++& **0FJJ6M6Ozz G.*	. 	!( (%'( ( 	m$
l#<''( ( ( ( (ML( ( ( ( ( ( ( ( ( (s   BED(E?D ED8
DD8*D!8D8DD8ED6EED8D8!D3	'D*(D3	/D86E8E
>E?E
E)r   rZ   
contextlibr   rB   anyio.lowlevelanyio.streams.memoryr   r   anyio.streams.textr   pydanticr   r   	mcp.typesr=   platformr   r2   r/   r%   r(   r`   r3   r&   r$   <module>rh      sy    	 
 *   R 0 % " ||w 
> &c3h *I  :(4 :( :(r&   