§
    öŽ’jÑ%  ã                   ó  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
Z
d dl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 d	lmZ d d
lmZmZmZmZ d dlm Z   e j!        e"¦  «        Z#ej$        dk    rg d¢ng d¢Z%dZ&de'e(e(f         fd„Z) G d„ de¦  «        Z*eej+        fde*de	fd„¦   «         Z,de(de(fd„Z-dej+        dfde(de.e(         de'e(e(f         dz  de	dee(z  dz  f
d„Z/d deez  de0ddfd„Z1dS )!é    N)Úasynccontextmanager)ÚPath)ÚLiteralÚTextIO)ÚProcess)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)ÚTextReceiveStream)Ú	BaseModelÚField)Úterminate_posix_process_tree)ÚFallbackProcessÚcreate_windows_processÚget_windows_executable_commandÚterminate_windows_process_tree)ÚSessionMessageÚwin32)ÚAPPDATAÚ	HOMEDRIVEÚHOMEPATHÚLOCALAPPDATAÚPATHÚPATHEXTÚPROCESSOR_ARCHITECTUREÚSYSTEMDRIVEÚ
SYSTEMROOTÚTEMPÚUSERNAMEÚUSERPROFILE)ÚHOMEÚLOGNAMEr   ÚSHELLÚTERMÚUSERç       @Úreturnc                  ó˜   — i } t           D ]?}t          j                             |¦  «        }|€Œ$|                     d¦  «        rŒ:|| |<   Œ@| S )zo
    Returns a default environment object including only environment variables deemed
    safe to inherit.
    Nz())ÚDEFAULT_INHERITED_ENV_VARSÚosÚenvironÚgetÚ
startswith)ÚenvÚkeyÚvalues      úGC:\Projects\DSCons\.venv\Lib\site-packages\mcp\client\stdio\__init__.pyÚget_default_environmentr1   3   s\   € ð
 €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<   	 dZ
eez  dz  ed<   	 dZeed<   	 d	Zed
         ed<   dS )ÚStdioServerParametersÚcommand)Údefault_factoryÚargsNr-   Úcwdzutf-8ÚencodingÚstrict)r:   ÚignoreÚreplaceÚencoding_error_handler)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   Úlistr7   r-   Údictr8   r   r9   r=   r   © r2   r0   r4   r4   H   s¶   € € € € € € Ø€L€L�LØ4à�e¨DÐ1Ñ1Ô1€Dˆ$ˆsŒ)Ð1Ð1Ñ1Ø;à!%€Cˆˆc�3ˆhŒ˜$Ñ	Ð%Ð%Ñ%ðð "€Cˆˆt‰�dÑ	Ð!Ð!Ñ!ØAà€HˆcÐÐÑðð FNÐ˜GÐ$AÔBÐMÐMÑMðð r2   r4   ÚserverÚerrlogc           
     óþ  ‡ ‡‡	‡
K  — t          j        d¦  «        \  Š	}t          j        d¦  «        \  }Š
	 t          ‰ j        ¦  «        }t	          |‰ j        ‰ j        �i t          ¦   «         ¥‰ j        ¥nt          ¦   «         |‰ j        ¬¦  «        ƒ d{V —†Šnw# t          $ rj | 
                    ¦   «         ƒ d{V —† | 
                    ¦   «         ƒ d{V —† ‰	 
                    ¦   «         ƒ d{V —† ‰
 
                    ¦   «         ƒ d{V —† ‚ w xY wˆˆ	ˆ fd„}ˆˆ ˆ
fd„}t          j        ¦   «         4 ƒd{V —†	 }‰4 ƒd{V —† |                     |¦  «         |                     |¦  «         	 ||fW V — ‰j        r1	 ‰j         
                    ¦   «         ƒ d{V —† n# t          $ r Y nw xY w	 t          j        t           ¦  «        5  ‰                     ¦   «         ƒ d{V —† ddd¦  «         n# 1 swxY w Y   n0# t$          $ r t'          ‰¦  «        ƒ d{V —† Y nt(          $ r Y nw xY w| 
                    ¦   «         ƒ d{V —† | 
                    ¦   «         ƒ d{V —† ‰	 
                    ¦   «         ƒ d{V —† ‰
 
                    ¦   «         ƒ d{V —† �n"# ‰j        r1	 ‰j         
                    ¦   «         ƒ d{V —† n# t          $ r Y nw xY w	 t          j        t           ¦  «        5  ‰                     ¦   «         ƒ d{V —† ddd¦  «         n# 1 swxY w Y   n0# t$          $ r t'          ‰¦  «        ƒ d{V —† Y nt(          $ r Y nw xY w| 
                    ¦   «         ƒ d{V —† | 
                    ¦   «         ƒ d{V —† ‰	 
                    ¦   «         ƒ d{V —† ‰
 
                    ¦   «         ƒ d{V —† w xY w	 ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )zŠ
    Client transport for stdio: this will connect to a server by spawning a
    process and communicating with it over stdin/stdout.
    r   N)r5   r7   r-   rG   r8   c               “   óè  •K  — ‰j         s
J d¦   «         ‚	 ‰4 ƒd {V —† d} t          ‰j         ‰	j        ‰	j        ¬¦  «        2 3 d {V —†}| |z                        d¦  «        }|                     ¦   «         } |D ]™}	 t          j                             |¦  «        }nL# t          $ r?}t                               d¦  «         ‰                     |¦  «        ƒ d {V —† Y d }~Œgd }~ww xY wt          |¦  «        }‰                     |¦  «        ƒ d {V —† ŒšŒÐ6 	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S # t          j        $ r( t          j                             ¦   «         ƒ d {V —† Y d S w xY w)Nz Opened process is missing stdoutÚ ©r9   Úerrorsú
z+Failed to parse JSONRPC message from server)Ústdoutr
   r9   r=   ÚsplitÚpopÚtypesÚJSONRPCMessageÚmodel_validate_jsonÚ	ExceptionÚloggerÚ	exceptionÚsendr   ÚanyioÚClosedResourceErrorÚlowlevelÚ
checkpoint)
ÚbufferÚchunkÚlinesÚlineÚmessageÚexcÚsession_messageÚprocessÚread_stream_writerrF   s
          €€€r0   Ústdout_readerz#stdio_client.<locals>.stdout_reader‹   s¯  øè è € ØŒ~ÐAÐAÐAÑAÔAˆ~ð	.Ø)ð Gð Gð Gð Gð Gð Gð Gð GØ�Ý#4Ø”NØ#œ_Ø!Ô8ð$ñ $ô $ð Gð Gð Gð Gð Gð Gð G˜%ð
 $ e™^×2Ò2°4Ñ8Ô8�EØ"ŸYšY™[œ[�Fà %ð 	Gð 	G˜ð%Ý&+Ô&:×&NÒ&NÈtÑ&TÔ&T˜G˜GøÝ(ð %ð %ð %Ý"×,Ò,Ð-ZÑ[Ô[Ð[Ø"4×"9Ò"9¸#Ñ">Ô">Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø$˜H˜H˜H˜Høøøøð%øøøõ
 +9¸Ñ*AÔ*A˜Ø0×5Ò5°oÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFð	Gð$ð $ðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gøõ( Ô(ð 	.ð 	.ð 	.Ý”.×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð	.øøøsj   –D: ž$D'ÁDÁ1D'Á:BÂD'Â
C#	Â$5C	ÃD'ÃC#	Ã#0D'ÄD: Ä'
D1Ä1D: Ä4D1Ä5D: Ä:3E1Å0E1c               “   óÒ  •K  — ‰j         s
J d¦   «         ‚	 ‰4 ƒd {V —† ‰2 3 d {V —†} | j                             dd¬¦  «        }‰j                              |dz                        ‰j        ‰j        ¬¦  «        ¦  «        ƒ d {V —† Œf6 	 d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S # t          j        $ r( t          j	         
                    ¦   «         ƒ d {V —† Y d S w xY w)NzOpened process is missing stdinT)Úby_aliasÚexclude_nonerM   rK   )Ústdinr`   Úmodel_dump_jsonrW   Úencoder9   r=   rX   rY   rZ   r[   )rb   Újsonrc   rF   Úwrite_stream_readers     €€€r0   Ústdin_writerz"stdio_client.<locals>.stdin_writer¦   sæ  øè è € ØŒ}Ð?Ð?Ð?Ñ?Ô?ˆ}ð	.Ø*ð ð ð ð ð ð ð ð Ø-@ð ð ð ð ð ð ð ˜/Ø*Ô2×BÒBÈDÐ_cÐBÑdÔd�DØ!œ-×,Ò,Ø ™×,Ò,Ø%+¤_Ø#)Ô#@ð -ñ ô ñô ð ð ð ð ð ð ð ð ð .AÐ-@ðð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð øõ Ô(ð 	.ð 	.ð 	.Ý”.×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð	.øøøs?   –B/ žB¡B§A!BÂ	B/ Â
B&Â&B/ Â)B&Â*B/ Â/3C&Ã%C&)rX   Úcreate_memory_object_streamÚ_get_executable_commandr5   Ú#_create_platform_compatible_processr7   r-   r1   r8   ÚOSErrorÚacloseÚcreate_task_groupÚ
start_soonri   rT   Ú
fail_afterÚPROCESS_TERMINATION_TIMEOUTÚwaitÚTimeoutErrorÚ_terminate_process_treeÚProcessLookupError)rF   rG   Úread_streamÚwrite_streamr5   re   rn   Útgrc   rd   rm   s   `       @@@r0   Ústdio_clientr   i   s,  øøøøè è € õ ',Ô&GÈÑ&JÔ&JÑ#Ð˜Ý(-Ô(IÈ!Ñ(LÔ(LÑ%€LÐ%ðÝ)¨&¬.Ñ9Ô9ˆõ <ØØ”Ø@FÄ
Ð@VÐ<Õ+Ñ-Ô-Ð<°´Ð<Ð<Õ\sÑ\uÔ\uØØ”
ð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆˆøõ ð ð ð à× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø ×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ø!×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Øðøøøð.ð .ð .ð .ð .ð .ð .ð6.ð .ð .ð .ð .ð .ð .õ" 	ÔÑ!Ô!ð"/ð "/ð "/ð "/ð "/ð "/ð "/ð "/Ø%'Øð"/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð 	�Š�mÑ$Ô$Ð$Ø
�Š�lÑ#Ô#Ð#ð	/Ø˜|Ð+Ð+Ð+Ð+Ð+ð Œ}ð ðØ!œ-×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝ ð ð ð à�Dðøøøð
åÔ%Õ&AÑBÔBð )ð )Ø!Ÿ,š,™.œ.Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )øøåð 7ð 7ð 7õ .¨gÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ý%ð ð ð à�ðøøøð ×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø$×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø%×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ñ.øð+ Œ}ð ðØ!œ-×.Ò.Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øÝ ð ð ð à�Dðøøøð
åÔ%Õ&AÑBÔBð )ð )Ø!Ÿ,š,™.œ.Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )øøåð 7ð 7ð 7õ .¨gÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ý%ð ð ð à�ðøøøð ×$Ò$Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø$×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø%×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.øøøÐ.ðE"/ð "/ð "/ñ "/ô "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/øøøð "/ð "/ð "/ð "/ð "/ð "/ð "/ñ "/ô "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/ð "/øøøð "/ð "/ð "/ð "/ð "/ð "/sM  ¶A"B ÂA4DÄ8	O,Å+OÅ-JÅ4OÅ<FÆOÆ
F)Æ&OÆ(F)Æ)OÆ-G9ÇG-Ç!G9Ç-G1Ç1G9Ç4G1Ç5G9Ç8OÇ9H&ÈOÈ	H&È#OÈ%H&È&A-OÊN2ÊJ<Ê;N2Ê<
K	ËN2ËK	Ë	N2ËLË&LÌLÌLÌLÌLÌLÌN2ÌMÌ8N2Ì:	MÍN2ÍMÍA,N2Î2OÎ6O,Ï
O	ÏO,ÏO	ÏO,Ï,
O6Ï9O6r5   c                 óD   — t           j        dk    rt          | ¦  «        S | S )zÇ
    Get the correct executable command normalized for the current platform.

    Args:
        command: Base command (e.g., 'uvx', 'npx')

    Returns:
        str: Platform-appropriate command
    r   )ÚsysÚplatformr   )r5   s    r0   rp   rp   Û   s$   € õ „|�wÒÐÝ-¨gÑ6Ô6Ð6àˆr2   r7   r-   r8   c              ƒ   ó¢   K  — t           j        dk    rt          | ||||¦  «        ƒ d{V —†}n"t          j        | g|¢|||d¬¦  «        ƒ d{V —†}|S )zÕ
    Creates a subprocess in a platform-compatible way.

    Unix: Creates process in a new session/process group for killpg support
    Windows: Creates process in a Job Object for reliable child termination
    r   NT)r-   Ústderrr8   Ústart_new_session)r�   r‚   r   rX   Úopen_process)r5   r7   r-   rG   r8   rc   s         r0   rq   rq   ë   s‘   è è € õ „|�wÒÐÝ.¨w¸¸cÀ6È3ÑOÔOÐOÐOÐOÐOÐOÐOˆˆåÔ*ØÐ�tÐØØØØ"ð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð €Nr2   rc   Útimeout_secondsc              ƒ   ó´   K  — t           j        dk    rt          | |¦  «        ƒ d{V —† dS t          | t          ¦  «        sJ ‚t          | |¦  «        ƒ d{V —† dS )af  
    Terminate a process and all its children using platform-specific methods.

    Unix: Uses os.killpg() for atomic process group termination
    Windows: Uses Job Objects via pywin32 for reliable child process cleanup

    Args:
        process: The process to terminate
        timeout_seconds: Timeout in seconds before force killing (default: 2.0)
    r   N)r�   r‚   r   Ú
isinstancer   r   )rc   r‡   s     r0   rz   rz     s}   è è € õ „|�wÒÐÝ,¨W°oÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFõ ˜'¥7Ñ+Ô+Ð+Ð+Ð+Ý*¨7°OÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDr2   )r%   )2Úloggingr)   r�   Ú
contextlibr   Úpathlibr   Útypingr   r   rX   Úanyio.lowlevelÚ	anyio.abcr   Úanyio.streams.memoryr   r	   Úanyio.streams.textr
   Úpydanticr   r   Ú	mcp.typesrQ   Úmcp.os.posix.utilitiesr   Úmcp.os.win32.utilitiesr   r   r   r   Úmcp.shared.messager   Ú	getLoggerr>   rU   r‚   r(   rw   rD   rA   r1   r4   r„   r   rp   rC   rq   Úfloatrz   rE   r2   r0   ú<module>r™      sï  ðØ €€€Ø 	€	€	€	Ø 
€
€
€
Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð .Ð -Ð -Ð -Ð -Ð -à	ˆÔ	˜8Ñ	$Ô	$€ð$ „|�wÒÐðð ð ð ð 
>Ð	=Ð	=ð! ð( "Ð ð  c¨3 h¤ð ð ð ð ð*ð ð ð ð ˜Iñ ô ð ðB ØGJÄzð n/ð n/Ð4ð n/¸fð n/ð n/ð n/ñ Ôðn/ðb Sð ¨Sð ð ð ð ð& "&Ø”ZØ!ðð Øðà
ˆsŒ)ðð 
ˆc�3ˆhŒ˜$Ñ	ðð ð	ð
 
�‰�dÑ	ðð ð ð ð6Eð E¨7°_Ñ+Dð EÐW\ð EÐgkð Eð Eð Eð Eð Eð Er2   