Ë
    ïñþi ^  ã            
       óâ  — d dl Z d dlmZ d dl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Zd dlZd dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0  ede$e/«      Z1 ede%e0«      Z2 ede#e.«      Z3 ede$e/«      Z4 ede¬«      Z5 ede#e.«      Z6e7e8z  Z9 G d„ de«      Z: G d„ dee4e2f   «      Z; G d„ dee1e3e2e4e6f   «      Z<y)é    N)ÚCallable)ÚAsyncExitStack)Ú	timedelta)ÚTracebackType)ÚAnyÚGenericÚProtocolÚTypeVar)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)Ú	BaseModel)ÚSelf)ÚMcpError)ÚMessageMetadataÚServerMessageMetadataÚSessionMessage)ÚResponseRouter)ÚCONNECTION_CLOSEDÚINVALID_PARAMSÚCancelledNotificationÚClientNotificationÚClientRequestÚClientResultÚ	ErrorDataÚJSONRPCErrorÚJSONRPCMessageÚJSONRPCNotificationÚJSONRPCRequestÚJSONRPCResponseÚProgressNotificationÚRequestParamsÚServerNotificationÚServerRequestÚServerResultÚSendRequestTÚSendResultTÚSendNotificationTÚReceiveRequestTÚReceiveResultT)ÚboundÚReceiveNotificationTc                   ó4   — e Zd ZdZdededz  dedz  ddfd„Zy)ÚProgressFnTz-Protocol for progress notification callbacks.ÚprogressÚtotalNÚmessageÚreturnc              ƒ   ó   K  — y ­w©N© )Úselfr.   r/   r0   s       úR/root/aria/mcps/aria-brain/venv/lib/python3.12/site-packages/mcp/shared/session.pyÚ__call__zProgressFnT.__call__2   s	   è ø€ àùó   ‚)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚfloatÚstrr7   r4   ó    r6   r-   r-   /   s2   „ Ù7ðØðØ&+¨d¡lðØ=@À4¹Zðà	ôr?   r-   c                   óà   — e Zd ZdZ	 ddedej                  dz  deddded	ge	f   d
e
ddfd„Zdd„Zdee   dz  dedz  dedz  ddfd„Zdeez  ddfd„Zdd„Zedefd„«       Zedefd„«       Zy)ÚRequestResponderaª  Handles responding to MCP requests and manages request lifecycle.

    This class MUST be used as a context manager to ensure proper cleanup and
    cancellation handling:

    Example:
        with request_responder as resp:
            await resp.respond(result)

    The context manager ensures:
    1. Proper cancellation scope setup and cleanup
    2. Request completion tracking
    3. Cleanup of in-flight requests
    NÚ
request_idÚrequest_metaÚrequestÚsessionz¦BaseSession[
            SendRequestT,
            SendNotificationT,
            SendResultT,
            ReceiveRequestT,
            ReceiveNotificationT
        ]Úon_completeú.RequestResponder[ReceiveRequestT, SendResultT]Úmessage_metadatar1   c                 ó¦   — || _         || _        || _        || _        || _        d| _        t        j                  «       | _        || _	        d| _
        y )NF)rB   rC   rD   rH   Ú_sessionÚ
_completedÚanyioÚCancelScopeÚ_cancel_scopeÚ_on_completeÚ_entered)r5   rB   rC   rD   rE   rF   rH   s          r6   Ú__init__zRequestResponder.__init__G   sP   € ð %ˆŒØ(ˆÔØˆŒØ 0ˆÔØˆŒØˆŒÜ"×.Ñ.Ó0ˆÔØ'ˆÔØˆ�r?   c                 óz   — d| _         t        j                  «       | _        | j                  j	                  «        | S )zBEnter the context manager, enabling request cancellation tracking.T)rP   rL   rM   rN   Ú	__enter__©r5   s    r6   rS   zRequestResponder.__enter__`   s1   € àˆŒÜ"×.Ñ.Ó0ˆÔØ×Ñ×$Ñ$Ô&Øˆr?   Úexc_typeÚexc_valÚexc_tbc                 ó6  — 	 | j                   r| j                  | «       d| _        | j                  st	        d«      ‚| j                  j                  |||«       y# d| _        | j                  st	        d«      ‚| j                  j                  |||«       w xY w)zFExit the context manager, performing cleanup and notifying completion.FúNo active cancel scopeN)rK   rO   rP   rN   ÚRuntimeErrorÚ__exit__©r5   rU   rV   rW   s       r6   r[   zRequestResponder.__exit__g   s‰   € ð	CØ�ŠØ×!Ñ! $Ô'à!ˆDŒMØ×%Ò%Ü"Ð#;Ó<Ð<Ø×Ñ×'Ñ'¨°'¸6ÕBøð "ˆDŒMØ×%Ò%Ü"Ð#;Ó<Ð<Ø×Ñ×'Ñ'¨°'¸6ÕBús   ‚A Á=BÚresponsec              ƒ   óê   K  — | j                   st        d«      ‚| j                  rJ d«       ‚| j                  s7d| _        | j                  j                  | j                  |¬«      ƒ d{  –—†  yy7 Œ­w)zñSend a response for this request.

        Must be called within a context manager block.
        Raises:
            RuntimeError: If not used within a context manager
            AssertionError: If request was already responded to
        ú2RequestResponder must be used as a context managerzRequest already responded toT©rB   r]   N)rP   rZ   rK   Ú	cancelledrJ   Ú_send_responserB   )r5   r]   s     r6   ÚrespondzRequestResponder.respondw   sp   è ø€ ð �}Š}ÜÐSÓTÐTØ—?’?ÐBÐ$BÓBÐ"à�~Š~Ø"ˆDŒOà—-‘-×.Ñ.ØŸ?™?°Xð /ó ÷ ñ ð ðús   ‚A(A3Á*A1Á+A3c              ƒ   ó$  K  — | j                   st        d«      ‚| j                  st        d«      ‚| j                  j                  «        d| _        | j
                  j                  | j                  t        ddd¬«      ¬«      ƒ d{  –—†  y7 Œ­w)	z-Cancel this request and mark it as completed.r_   rY   Tr   zRequest cancelledN©Úcoder0   Údatar`   )	rP   rZ   rN   ÚcancelrK   rJ   rb   rB   r   rT   s    r6   rh   zRequestResponder.cancelŠ   s|   è ø€ à�}Š}ÜÐSÓTÐTØ×!Ò!ÜÐ7Ó8Ð8à×Ñ×!Ñ!Ô#ØˆŒà�m‰m×*Ñ*Ø—‘Ü AÐ/BÈÔNð +ó 
÷ 	
ò 	
ús   ‚BBÂBÂ	Bc                 ó:   — | j                    xr | j                   S r3   )rK   ra   rT   s    r6   Ú	in_flightzRequestResponder.in_flight™   s   € à—?‘?Ð"Ò9¨4¯>©>Ð'9Ð9r?   c                 ó.   — | j                   j                  S r3   )rN   Úcancel_calledrT   s    r6   ra   zRequestResponder.cancelled�   s   € à×!Ñ!×/Ñ/Ð/r?   r3   )r1   rG   ©r1   N)r9   r:   r;   r<   Ú	RequestIdr!   ÚMetar(   r   r   r   rQ   rS   ÚtypeÚBaseExceptionr   r[   r&   r   rc   rh   ÚpropertyÚboolrj   ra   r4   r?   r6   rA   rA   7   s  „ ñð8 -1ñàðð $×(Ñ(¨4Ñ/ðð !ð	ð
ðð ÐOÐPÐRUÐUÑVðð *ðð 
óó2ðCà�}Ñ%¨Ñ,ðCð  Ñ%ðCð  Ñ$ð	Cð
 
óCð  k°IÑ&=ð À$ó ó&
ð ð:˜4ò :ó ð:ð ð0˜4ò 0ó ñ0r?   rA   c                   ó6  — e Zd ZU dZeeeeez     f   e	d<   e
e	d<   eeeeef   f   e	d<   eeef   e	d<   ed   e	d<   	 d1d	eeez     d
ee   dee   dee   dedz  ddfd„Zdeddfd„Zdefd„Zdee   dz  dedz  dedz  dedz  fd„Z	 	 	 d2dedee    dedz  de!dedz  de fd„Z"	 d1de#dedz  ddfd„Z$d ed!ee%z  ddfd"„Z&d3d#„Z'd$edefd%„Z(d&eddfd'„Z)d(eeef   ddfd)„Z*deddfd*„Z+	 	 d4d+e,e
z  d,e-d-e-dz  d&e,dz  ddf
d.„Z.d/eeef   ez  ez  ddfd0„Z/y)5ÚBaseSessiona  
    Implements an MCP "session" on top of read/write streams, including features
    like request/response linking, notifications, and progress.

    This class is an async context manager that automatically starts processing
    messages when entered.
    Ú_response_streamsÚ_request_idÚ
_in_flightÚ_progress_callbacksr   Ú_response_routersNÚread_streamÚwrite_streamÚreceive_request_typeÚreceive_notification_typeÚread_timeout_secondsr1   c                 ó®   — || _         || _        i | _        d| _        || _        || _        || _        i | _        i | _        g | _	        t        «       | _        y )Nr   )Ú_read_streamÚ_write_streamrv   rw   Ú_receive_request_typeÚ_receive_notification_typeÚ_session_read_timeout_secondsrx   ry   rz   r   Ú_exit_stack)r5   r{   r|   r}   r~   r   s         r6   rQ   zBaseSession.__init__¹   s^   € ð (ˆÔØ)ˆÔØ!#ˆÔØˆÔØ%9ˆÔ"Ø*CˆÔ'Ø-AˆÔ*ØˆŒØ#%ˆÔ Ø!#ˆÔÜ)Ó+ˆÕr?   Úrouterc                 ó:   — | j                   j                  |«       y)aÐ  
        Register a response router to handle responses for non-standard requests.

        Response routers are checked in order before falling back to the default
        response stream mechanism. This is used by TaskResultHandler to route
        responses for queued task requests back to their resolvers.

        WARNING: This is an experimental API that may change without notice.

        Args:
            router: A ResponseRouter implementation
        N)rz   Úappend)r5   r‡   s     r6   Úadd_response_routerzBaseSession.add_response_routerÎ   s   € ð 	×Ñ×%Ñ% fÕ-r?   c              ƒ   óÒ   K  — t        j                  «       | _        | j                  j                  «       ƒ d {  –—†  | j                  j	                  | j
                  «       | S 7 Œ+­wr3   )rL   Úcreate_task_groupÚ_task_groupÚ
__aenter__Ú
start_soonÚ_receive_looprT   s    r6   rŽ   zBaseSession.__aenter__Ý   sS   è ø€ Ü ×2Ñ2Ó4ˆÔØ×Ñ×)Ñ)Ó+×+Ð+Ø×Ñ×#Ñ# D×$6Ñ$6Ô7Øˆð 	,ús   ‚7A'¹A%º,A'rU   rV   rW   c              ƒ   óè   K  — | j                   j                  «       ƒ d {  –—†  | j                  j                  j	                  «        | j                  j                  |||«      ƒ d {  –—† S 7 ŒM7 Œ­wr3   )r†   Úacloser�   Úcancel_scoperh   Ú	__aexit__r\   s       r6   r”   zBaseSession.__aexit__ã   sd   è ø€ ð ×Ñ×%Ñ%Ó'×'Ð'ð 	×Ñ×%Ñ%×,Ñ,Ô.Ø×%Ñ%×/Ñ/°¸'À6ÓJ×JÐJð 	(øð
 Kús"   ‚A2 A.¡AA2Á)A0Á*A2Á0A2rD   Úresult_typeÚrequest_read_timeout_secondsÚmetadataÚprogress_callbackc              ƒ   ó¤  K  — | j                   }|dz   | _         t        j                  t        t        z     d«      \  }}|| j
                  |<   |j                  ddd¬«      }	|�2d|	vri |	d<   d|	d   vri |	d   d<   ||	d   d   d<   || j                  |<   	 t        dd	|d
œ|	¤Ž}
| j                  j                  t        t        |
«      |¬«      «      ƒ d{  –—†  d}|�|j                  «       }n&| j                  �| j                  j                  «       }	 t        j                  |«      5  |j!                  «       ƒ d{  –—† }ddd«       t3        t        «      rt%        |j4                  «      ‚|j7                  |j8                  «      | j
                  j;                  |d«       | j                  j;                  |d«       |j=                  «       ƒ d{  –—†  |j=                  «       ƒ d{  –—†  S 7 �Œ7 Œ·# 1 sw Y   Œ¶xY w# t"        $ rJ t%        t'        t(        j*                  j,                  d|j.                  j0                  › d|› d�¬«      «      ‚w xY w7 Œ„7 Œn# | j
                  j;                  |d«       | j                  j;                  |d«       |j=                  «       ƒ d{  –—†7   |j=                  «       ƒ d{  –—†7   w xY w­w)a>  
        Sends a request and wait for a response. Raises an McpError if the
        response contains an error. If a request read timeout is provided, it
        will take precedence over the session read timeout.

        Do not use this method to emit notifications! Use send_notification()
        instead.
        é   TÚjson©Úby_aliasÚmodeÚexclude_noneNÚparamsÚ_metaÚprogressTokenú2.0)ÚjsonrpcÚid©r0   r—   z(Timed out while waiting for response to z	. Waited z	 seconds.©rf   r0   r4   )rw   rL   Úcreate_memory_object_streamr   r   rv   Ú
model_dumpry   r   r‚   Úsendr   r   Útotal_secondsr…   Ú
fail_afterÚreceiveÚTimeoutErrorr   r   ÚhttpxÚcodesÚREQUEST_TIMEOUTÚ	__class__r9   Ú
isinstanceÚerrorÚmodel_validateÚresultÚpopr’   )r5   rD   r•   r–   r—   r˜   rB   Úresponse_streamÚresponse_stream_readerÚrequest_dataÚjsonrpc_requestÚtimeoutÚresponse_or_errors                r6   Úsend_requestzBaseSession.send_requestð   sÏ  è ø€ ð  ×%Ñ%ˆ
Ø%¨™>ˆÔä27×2SÑ2SÔTcÔfrÑTrÑ2sÐtuÓ2vÑ/ˆÐ/Ø-<ˆ×Ñ˜zÑ*ð ×)Ñ)°4¸fÐSWÐ)ÓXˆØÐ(à˜|Ñ+Ø)+�˜XÑ&Ø˜l¨8Ñ4Ñ4Ø24�˜XÑ& wÑ/Ø?IˆL˜Ñ" 7Ñ+¨OÑ<à3DˆD×$Ñ$ ZÑ0ð(	2Ü,ð ØØñð ñˆOð ×$Ñ$×)Ñ)¬.ÄÐP_ÓA`ÐksÔ*tÓu×uÐuð ˆGØ+Ð7Ø6×DÑDÓF‘Ø×3Ñ3Ð?Ø×<Ñ<×JÑJÓL�ðÜ×%Ñ% gÓ.ñ OØ.D×.LÑ.LÓ.N×(NÐ%÷Oô Ð+¬\Ô:ÜÐ0×6Ñ6Ó7Ð7à"×1Ñ1Ð2C×2JÑ2JÓKð ×"Ñ"×&Ñ& z°4Ô8Ø×$Ñ$×(Ñ(¨°TÔ:Ø!×(Ñ(Ó*×*Ð*Ø(×/Ñ/Ó1×1Ñ1ðC vùð )Oø÷Oð Oûäò 
ÜÜÜ"Ÿ[™[×8Ñ8àFØ&×0Ñ0×9Ñ9Ð:¸)Ø&˜i yð2ôó	ð 	ð
úð( +øØ1ùð ×"Ñ"×&Ñ& z°4Ô8Ø×$Ñ$×(Ñ(¨°TÔ:Ø!×(Ñ(Ó*×*Ñ*Ø(×/Ñ/Ó1×1Ò1üs²   ‚BKÂA I! ÃG6Ã?I! ÄH Ä-G;ÅG9ÅG;ÅH Å?I! ÆAKÇIÇKÇ0IÇ1KÇ6I! Ç9G;Ç;HÈ H ÈAIÉI! ÉKÉKÉ!AKÊ-J0Ê.KËK	ËKËKÚnotificationÚrelated_request_idc           	   ƒ   óÜ   K  — t        d	ddi|j                  ddd¬«      ¤Ž}t        t        |«      |rt	        |¬«      nd¬«      }| j
                  j                  |«      ƒ d{  –—†  y7 Œ­w)
zk
        Emits a notification, which is a one-way message that does not expect
        a response.
        r¤   r£   Tr›   rœ   )rÀ   Nr¦   r4   )r   r©   r   r   r   r‚   rª   )r5   r¿   rÀ   Újsonrpc_notificationÚsession_messages        r6   Úsend_notificationzBaseSession.send_notification<  su   è ø€ ô  3ñ  
Øð 
à×%Ñ%¨t¸&ÈtÐ%ÓTñ 
Ðô )Ü"Ð#7Ó8ÙUgÔ*Ð>PÕQÐmqô
ˆð × Ñ ×%Ñ% oÓ6×6Ò6ús   ‚A"A,Á$A*Á%A,rB   r]   c           	   ƒ   ór  K  — t        |t        «      rGt        d||¬«      }t        t	        |«      ¬«      }| j
                  j                  |«      ƒ d {  –—†  y t        d||j                  ddd¬«      ¬«      }t        t	        |«      ¬«      }| j
                  j                  |«      ƒ d {  –—†  y 7 Œ^7 Œ­w)Nr£   ©r¤   r¥   r´   ©r0   Tr›   rœ   )r¤   r¥   r¶   )	r³   r   r   r   r   r‚   rª   r   r©   )r5   rB   r]   Újsonrpc_errorrÃ   Újsonrpc_responses         r6   rb   zBaseSession._send_responseQ  s¥   è ø€ Ü�h¤	Ô*Ü(°¸:ÈXÔVˆMÜ,´^ÀMÓ5RÔSˆOØ×$Ñ$×)Ñ)¨/Ó:×:Ñ:ä.ØØØ×*Ñ*°D¸vÐTXÐ*ÓYô Ðô
 -´^ÐDTÓ5UÔVˆOØ×$Ñ$×)Ñ)¨/Ó:×:Ñ:ð ;øð ;ús%   ‚AB7ÁB3ÁAB7Â-B5Â.B7Â5B7c              ƒ   óÌ  ‡ K  — ‰ j                   4 ƒd {  –—†  ‰ j                  4 ƒd {  –—†  	 ‰ j                   2 3 d {  –—† }t        |t        «      r‰ j	                  |«      ƒ d {  –—†  Œ3t        |j
                  j                  t        «      �r	 ‰ j                  j                  |j
                  j                  j                  ddd¬«      «      }t        |j
                  j                  j                  |j                  j                  r |j                  j                  j                  nd |‰ ˆ fd„|j                  ¬«      }|‰ j                   |j"                  <   ‰ j%                  |«      ƒ d {  –—†  |j&                  s‰ j	                  |«      ƒ d {  –—†  �Œet        |j
                  j                  t:        «      �r©	 ‰ j<                  j                  |j
                  j                  j                  ddd¬«      «      }t        |j                  t>        «      rU|j                  j                  j@                  }|‰ j                   v �r‰ j                   |   jC                  «       ƒ d {  –—†  nöt        |j                  tD        «      rª|j                  j                  jF                  }	|	‰ jH                  v r|‰ jH                  |	   }
	  |
|j                  j                  jJ                  |j                  j                  jL                  |j                  j                  j
                  «      ƒ d {  –—†  ‰ jQ                  |«      ƒ d {  –—†  ‰ j	                  |«      ƒ d {  –—†  �Œ3‰ jS                  |«      ƒ d {  –—†  �ŒN7 �Œu7 �Œc7 �ŒP7 �Œ*7 �Œ!7 �Œÿ# t        $ rÄ}t)        j*                  d|› �«       t)        j,                  d|j
                  j                  › �«       t/        d|j
                  j                  j                  t1        t2        d	d
¬«      ¬«      }t5        t7        |«      ¬«      }‰ j                  j9                  |«      ƒ d {  –—†7   Y d }~�Œ(d }~ww xY w7 �Œû7 �Œ9# t        $ r!}t)        jN                  d|«       Y d }~�Œ\d }~ww xY w7 �ŒP7 �Œ:# t        $ r:}t)        j*                  d|› d|j
                  j                  › �«       Y d }~�Œ§d }~ww xY w7 �Œh6 nW# tT        jV                  $ r t)        j,                  d«       Y n-t        $ r"}t)        jX                  d|› �«       Y d }~nd }~ww xY wt[        ‰ j\                  j_                  «       «      D ]e  \  }}t1        t`        d¬«      }	 |j9                  t/        d||¬«      «      ƒ d {  –—†7   |jc                  «       ƒ d {  –—†7   ŒX# t        $ r Y Œcw xY w ‰ j\                  je                  «        nª# t[        ‰ j\                  j_                  «       «      D ]e  \  }}t1        t`        d¬«      }	 |j9                  t/        d||¬«      «      ƒ d {  –—†7   |jc                  «       ƒ d {  –—†7   ŒX# t        $ r Y Œcw xY w ‰ j\                  je                  «        w xY wd d d «      ƒd {  –—†7   n# 1 ƒd {  –—†7  sw Y   nxY wd d d «      ƒd {  –—†7   y # 1 ƒd {  –—†7  sw Y   y xY w­w)NTr›   rœ   c                 óP   •— ‰j                   j                  | j                  d «      S r3   )rx   r·   rB   )Úrr5   s    €r6   ú<lambda>z+BaseSession._receive_loop.<locals>.<lambda>t  s   ø€ °d·o±o×6IÑ6IÈ!Ï,É,ÐX\Ó6]€ r?   )rB   rC   rD   rE   rF   rH   zFailed to validate request: z Message that failed validation: r£   zInvalid request parametersÚ re   rÆ   rÇ   z)Progress callback raised an exception: %sz!Failed to validate notification: z. Message was: zRead stream closed by clientz%Unhandled exception in receive loop: zConnection closedr§   )3r�   r‚   r³   Ú	ExceptionÚ_handle_incomingr0   Úrootr   rƒ   rµ   r©   rA   r¥   r    Úmetar—   rx   rB   Ú_received_requestrK   ÚloggingÚwarningÚdebugr   r   r   r   r   rª   r   r„   r   Ú	requestIdrh   r    r¢   ry   r.   r/   r´   Ú_received_notificationÚ_handle_responserL   ÚClosedResourceErrorÚ	exceptionÚlistrv   Úitemsr   r’   Úclear)r5   r0   Úvalidated_requestÚ	responderÚeÚerror_responserÃ   r¿   Úcancelled_idÚprogress_tokenÚcallbackr¥   Ústreamr´   s   `             r6   r�   zBaseSession._receive_loop_  sã  øè ø€ à×Ñ÷j	/ñ j	/à×Ñ÷j	/ñ j	/ðf/Ø%)×%6Ñ%6÷ M=ð M=˜'Ü! '¬9Ô5Ø"×3Ñ3°GÓ<×<Ñ<Ü# G§O¡O×$8Ñ$8¼.ÕIð"KØ04×0JÑ0J×0YÑ0YØ '§¡× 4Ñ 4× ?Ñ ?ÈÐTZÐimÐ ?Ó nó1Ð-ô )9Ø+2¯?©?×+?Ñ+?×+BÑ+Bà#4×#9Ñ#9×#@Ò#@ð .?×-CÑ-C×-JÑ-J×-OÒ-Oà%)Ø(9Ø(,Û,]Ø18×1AÑ1Aô	)˜Ið EN˜DŸO™O¨I×,@Ñ,@ÑAØ"&×"8Ñ"8¸Ó"C×CÐCà#,×#7Ò#7Ø&*×&;Ñ&;¸IÓ&F× FÐ Fùô$ $ G§O¡O×$8Ñ$8Ô:MÕNð"Ø+/×+JÑ+J×+YÑ+YØ '§¡× 4Ñ 4× ?Ñ ?ÈÐTZÐimÐ ?Ó nó,˜Lô  *¨,×*;Ñ*;Ô=RÔSØ/;×/@Ñ/@×/GÑ/G×/QÑ/Q Ø#/°4·?±?Ò#BØ*.¯/©/¸,Ñ*G×*NÑ*NÓ*P×$PÑ$Pô $.¨l×.?Ñ.?ÔAUÔ#VØ5A×5FÑ5F×5MÑ5M×5[Ñ5[ Nð (6¸×9QÑ9QÑ'QØ37×3KÑ3KÈNÑ3[¨ð
).Ù2:Ø0<×0AÑ0A×0HÑ0H×0QÑ0QØ0<×0AÑ0A×0HÑ0H×0NÑ0NØ0<×0AÑ0A×0HÑ0H×0PÑ0Pó3.÷ -.ð -.ð '+×&AÑ&AÀ,Ó&O× OÐ OØ&*×&;Ñ&;¸LÓ&I× IÐ Iùð #×3Ñ3°GÓ<×<Ò<ðej	/ùð j	/ùð
M=ùà<ùð" Dùð !GúÜ(ò Kô $ŸO™OÐ.JÈ1È#Ð,NÔOÜ#ŸM™MÐ,LÈWÏ_É_×MaÑMaÐLbÐ*cÔdÜ-9Ø(-Ø#*§?¡?×#7Ñ#7×#:Ñ#:Ü&/Ü)7Ø,HØ)+ô'"ô.˜Nô /=Ä^ÐTbÓEcÔ.d˜OØ"&×"4Ñ"4×"9Ñ"9¸/Ó"J×J×JûðKúð4 %Qùð-.úô
 09ò ).Ü,3¯M©MØ0[Ø01÷-.ò -.ûð).úð
 !PùØ IúÜ(ò ä#ŸO™OØ"CÀAÀ3ÀoÐV]×VeÑVe×VjÑVjÐUkÐ l÷ò ûðúð =ùñ[ &7øô^ ×,Ñ,ò >ô —‘Ð<Ö=Üò Oô ×!Ñ!Ð$IÈ!ÈÐ"M×NÑNûðOúô #' t×'=Ñ'=×'CÑ'CÓ'EÓ"Fò ‘J�B˜Ü%Ô+<ÐFYÔZ�EðØ$Ÿk™k¬,¸uÈÐSXÔ*YÓZ×ZÑZØ$Ÿm™m›o×-Ò-øÜ$ò áðúðð ×&Ñ&×,Ñ,Õ.øô #' t×'=Ñ'=×'CÑ'CÓ'EÓ"Fò ‘J�B˜Ü%Ô+<ÐFYÔZ�EðØ$Ÿk™k¬,¸uÈÐSXÔ*YÓZ×ZÑZØ$Ÿm™m›o×-Ò-øÜ$ò áðúðð ×&Ñ&×,Ñ,Õ.ú÷Uj	/÷ j	/÷ j	/÷ j	/ó j	/ú÷ j	/÷ j	/÷ j	/÷ j	/ó j	/üsw  ƒ[$”N	•[$˜[©Nª[­Z(¯S/»S-¿N
Á S-Á%S/Á(N
Á)*S/ÂC NÅ4N
Å5$NÆN
ÆNÆ'S/ÇB*R$É0Q+
É1AR$ËA'Q1Ì5Q.
Ì6Q1Ì:R$ÍR
ÍR$Í'R!
Í(R$Í,S/ÎS*
ÎS/Î	[$Î[ÎS-ÎS/ÎNÎNÎ	Q(	Î$B3Q#	ÑQÑQ#	ÑS/Ñ#Q(	Ñ(S/Ñ+R$Ñ.Q1Ñ1	R	Ñ:R	ÒR$ÒR	ÒR$Ò!R$Ò$	S'	Ò-/S"	ÓS/Ó"S'	Ó'S/Ó-S/Ó.W,Ó/(UÔW,ÔUÔ!T>Ô9W,Ô>UÕW,Õ:Z(Ö WÖ!V$
Ö"WÖ:V=
Ö;W× Z(×	W	×
Z(×W	×Z(×,;ZØ( Y(
ÙYÙ	Y(
Ù!Y$Ù"Y(
Ù'ZÙ(	Y4Ù1ZÙ3Y4Ù4ZÚZ(Ú[Ú!Z$Ú"[Ú(Z:	Ú.Z1Ú/Z:	Ú6[Ú=[$Û[Û	[$Û[!Û[Û[!Û[$Úresponse_idc                 ó�   — t        |t        «      r	 t        |«      S |S # t        $ r t	        j
                  d|›d�«       Y |S w xY w)a   
        Normalize a response ID to match how request IDs are stored.

        Since the client always sends integer IDs, we normalize string IDs
        to integers when possible. This matches the TypeScript SDK approach:
        https://github.com/modelcontextprotocol/typescript-sdk/blob/a606fb17909ea454e83aab14c73f14ea45c04448/src/shared/protocol.ts#L861

        Args:
            response_id: The response ID from the incoming message.

        Returns:
            The normalized ID (int if possible, otherwise original value).
        zResponse ID z/ cannot be normalized to match pending requests)r³   r>   ÚintÚ
ValueErrorrÔ   rÕ   )r5   rç   s     r6   Ú_normalize_request_idz!BaseSession._normalize_request_idÌ  sV   € ô �k¤3Ô'ðoÜ˜;Ó'Ð'ð Ðøô ò oÜ—‘ ,¨{¨oÐ=lÐ mÕnØÐðoús   ’
 Ÿ"AÁAr0   c              ƒ   óJ  K  — |j                   j                  }t        |t        t        z  «      sy| j                  |j                  «      }t        |t        «      r0| j                  D ]   }|j                  ||j                  «      sŒ  y n5|j                  xs i }| j                  D ]  }|j                  ||«      sŒ y | j                  j                  |d«      }|r|j                  |«      ƒ d{  –—†  y| j                  t!        d|› �«      «      ƒ d{  –—†  y7 Œ+7 Œ­w)zË
        Handle an incoming response or error message.

        Checks response routers first (e.g., for task-related responses),
        then falls back to the normal response stream mechanism.
        Nz.Received response with an unknown request ID: )r0   rÑ   r³   r   r   rë   r¥   rz   Úroute_errorr´   r¶   Úroute_responserv   r·   rª   rÐ   rZ   )r5   r0   rÑ   rç   r‡   Úresponse_dataræ   s          r6   rÙ   zBaseSession._handle_responseá  s  è ø€ ð �‰×#Ñ#ˆô ˜$¤´,Ñ >Ô?Øð ×0Ñ0°·±Ó9ˆô �dœLÔ)à×0Ñ0ò �Ø×%Ñ% k°4·:±:Õ>Ùñð
 -1¯K©KÒ,=¸2ˆMØ×0Ñ0ò �Ø×(Ñ(¨°mÕDÙðð
 ×'Ñ'×+Ñ+¨K¸Ó>ˆÙØ—+‘+˜dÓ#×#Ñ#à×'Ñ'¬Ð7eÐfmÐenÐ5oÓ(pÓq×qÑqð $øàqús0   ‚BD#Â5D#Â>5D#Ã3DÃ4%D#ÄD!ÄD#Ä!D#rà   c              ƒ   ó   K  — y­w)zõ
        Can be overridden by subclasses to handle a request without needing to
        listen on the message stream.

        If the request is responded to within this method, it will not be
        forwarded on to the message stream.
        Nr4   )r5   rà   s     r6   rÓ   zBaseSession._received_request  ó   è ø� ùr8   c              ƒ   ó   K  — y­w)zƒ
        Can be overridden by subclasses to handle a notification without needing
        to listen on the message stream.
        Nr4   )r5   r¿   s     r6   rØ   z"BaseSession._received_notification  rñ   r8   rä   r.   r/   c              ƒ   ó   K  — y­w)zh
        Sends a progress notification for a request that is currently being
        processed.
        Nr4   )r5   rä   r.   r/   r0   s        r6   Úsend_progress_notificationz&BaseSession.send_progress_notification  rñ   r8   Úreqc              ƒ   ó   K  — y­w)zCA generic handler for incoming messages. Overwritten by subclasses.Nr4   )r5   rõ   s     r6   rÐ   zBaseSession._handle_incoming#  s   è ø€ ð
 	ùr8   r3   )NNNrm   )NN)0r9   r:   r;   r<   Údictrn   r   r   r   Ú__annotations__ré   rA   r(   r&   r-   rÜ   r   r   rÏ   rp   r+   r   rQ   r   rŠ   r   rŽ   rq   r   rs   r”   r%   r)   r   r¾   r'   rÄ   r   rb   r�   rë   rÙ   rÓ   rØ   r>   r=   rô   rÐ   r4   r?   r6   ru   ru   ¢   sµ  … ñð ˜IÐ'=¸oÐP\Ñ>\Ñ']Ð]Ñ^Ó^ØÓØ�YÐ 0°À+Ð1MÑ NÐNÑOÓOØ˜i¨Ð4Ñ5Ó5ØÐ,Ñ-Ó-ð 26ñ,à.¨~À	Ñ/IÑJð,ð -¨^Ñ<ð,ð # ?Ñ3ð	,ð
 $(Ð(<Ñ#=ð,ð (¨$Ñ.ð,ð 
ó,ð*.¨.ð .¸Tó .ð $ó ðKà�}Ñ%¨Ñ,ðKð  Ñ%ðKð  Ñ$ð	Kð
 
�‰óKð" :>Ø$(Ø04ñJ2àðJ2ð ˜.Ñ)ðJ2ð '0°$Ñ&6ð	J2ð
 "ðJ2ð '¨Ñ-ðJ2ð 
óJ2ð^ 04ñ7à'ð7ð &¨Ñ,ð7ð 
ó	7ð*;¨yð ;ÀKÐR[ÑD[ð ;Ð`dó ;ók/ðZ°ð ¸yó ð*%r¨nð %rÀó %rðNÐ1AÀ/ÐS^ÐB^Ñ1_ð Ðdhó ðÐ9Mð ÐRVó ð #Ø"ñ
à˜c™	ð
ð ð
ð �t‰|ð	
ð
 �t‘ð
ð 
ó
ðà˜o¨{Ð:Ñ;Ð>RÑRÐU^Ñ^ðð 
ôr?   ru   )=rÔ   Úcollections.abcr   Ú
contextlibr   Údatetimer   Útypesr   Útypingr   r   r	   r
   rL   r¯   Úanyio.streams.memoryr   r   Úpydanticr   Útyping_extensionsr   Úmcp.shared.exceptionsr   Úmcp.shared.messager   r   r   Úmcp.shared.response_routerr   Ú	mcp.typesr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   r>   ré   rn   r-   rA   ru   r4   r?   r6   ú<module>r     s  ðÛ Ý $Ý %Ý Ý ß 2Ó 2ã Û ß RÝ Ý "å *ß UÑ UÝ 5÷÷ ÷ ÷ õ ñ( �~ }°mÓD€Ù�m \°<Ó@€ÙÐ/Ð1CÐEWÓXÐ ÙÐ+¨]¸MÓJ€ÙÐ)°Ô;€ÙÐ5Ð7IÐK]Ó^Ð à�#‰I€	ô�(ô ôh0�w˜°Ð;Ñ<ô h0ôVFØØØØØØð		ñõFr?   