+
    iHàj�  ã                  ó  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHtHtH	t	 ]P                  ! R4      tRtRtRtRt ! R R]4      t ! R R	]4      tR
 R ltR R ltR R ltR R ltR R ltR R ltRR R lltR R lt. ROtR# )a,  Minimal LSP JSON-RPC 2.0 framer over async streams.

Wire format: ``Content-Length: <bytes>\r\n\r\n<utf-8 JSON body>`` where the
body is a JSON-RPC 2.0 request, response, or notification.  Just the framer
plus envelope helpers, so :class:`agent.lsp.client.LSPClient` can focus on
protocol semantics.
)ÚannotationsN)ÚAnyÚOptionalÚTuplezagent.lsp.protocoli    c                  ó   € ] tR t^tRtRtR# )ÚLSPProtocolErrorzeThe framing or envelope itself is broken (vs. :class:`LSPRequestError`, a conformant error response).© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú7/home/ubuntu/.hermes/hermes-agent/agent/lsp/protocol.pyr   r      s   † Ýor   r   c                  ó6   a € ] tR t^tRtRR V 3R llltRtV ;t# )ÚLSPRequestErrorz[An LSP request returned a JSON-RPC error response; carries ``code``, ``message``, ``data``.c               ó(   € V ^8„  d   QhRRRRRRRR/# )	é   ÚcodeÚintÚmessageÚstrÚdatar   ÚreturnÚNoner   )Úformats   "r   Ú__annotate__ÚLSPRequestError.__annotate__    s.   € ÷ Añ A˜Sð A¨3ð A°cð AÀTñ Ar   c                	ó\   <€ \         SV `  R V RV 24       WVuV n        V n        V n        R# )z
LSP error z: N)ÚsuperÚ__init__r   r   r   )Úselfr   r   r   Ú	__class__s   &&&&€r   r!   ÚLSPRequestError.__init__    s1   ø€ Ü‰Ñ˜: d V¨2¨g¨YÐ7Ô8Ø-1¸DÐ*ˆŒ	�4”< ¦r   )r   r   r   ©N)r	   r
   r   r   r   r!   r   Ú__classcell__)r#   s   @r   r   r      s   ø† Ùe÷A÷ Að Ar   r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚobjÚdictr   Úbytesr   )r   s   "r   r   r   %   s   € ÷ Iñ I˜ð I ñ Ir   c                óœ   € \         P                  ! V RRR7      P                  R4      pR\        V4       R2P                  R4      V,           # )zMEncode an envelope as compact UTF-8 JSON with an exact Content-Length header.F)Ú
separatorsÚensure_asciiúutf-8zContent-Length: z

Úascii)Ú,Ú:)ÚjsonÚdumpsÚencodeÚlen)r(   Úbodys   & r   Úencode_messager7   %   sB   € ä�:Š:�c j¸uÔE×LÑLÈWÓU€DØœc $›i˜[¨Ð1×8Ñ8¸ÓAÀDÕHÐHr   c               ó    € V ^8„  d   QhRRRR/# ©r   Úreaderzasyncio.StreamReaderr   zOptional[dict]r   )r   s   "r   r   r   +   s   € ÷ 5ñ 5Ð 4ð 5¸ñ 5r   c              ƒ  ó†  "  € / p^ p  V P                  R4      G Rj  x€L
 pT\        T4      ,          pT\        8”  d   \	        R4      hTRR
 pT'       g   T#  TP                  R4      P                  R4      w  rVpT'       g   \	        R	T: 24      hTP                  4       YP                  4       P                  4       &   K½   L¦  \        P                   dA   pTP                  '       g   T'       g    Rp?R# \	        RTP                  : R24      ThRp?ii ; i  \         d   p\	        RT: 24      ThRp?ii ; i5i)zGRead the header block; ``None`` on clean EOF before any header started.s   
Nz2unexpected EOF while reading LSP headers (partial=Ú)z2LSP header block exceeded 8 KiB without terminatorr/   r1   znon-ASCII LSP header: zmalformed LSP header line: éþÿÿÿ)Ú	readuntilÚasyncioÚIncompleteReadErrorÚpartialr   r5   Ú_MAX_HEADER_BYTESÚdecodeÚ	partitionÚUnicodeDecodeErrorÚstripÚlower)r:   ÚheadersÚheader_bytesÚlineÚeÚkeyÚ_Úvalues   &       r   Ú_read_headersrO   +   s.  é € à€GØ€LØ
ð	oØ×)Ñ)¨'Ó2×2ˆDð 	œ˜D›	Õ!ˆØÔ+Ô+Ü"Ð#WÓXÐXØ�C�RˆyˆßØˆNð	MØ ŸK™K¨Ó0×:Ñ:¸3Ó?‰MˆC�E÷ Ü"Ð%@ÀÁÐ#IÓJÐJØ',§{¡{£}ˆ—	‘	“×!Ñ!Ó#Ó$ñ' 3øÜ×*Ñ*ô 	oà—9—9�9§WÝÜ"Ð%WÐXY×XaÑXaÑWdÐdeÐ#fÓgÐmnÐnûð		oûô "ô 	MÜ"Ð%;¸D¹8Ð#DÓEÈ1ÐLûð	Müsm   ‚E‰C �CžC ¢7EÁ#D Á=EÂ?EÃC ÃDÃDÃ5EÃ;DÄDÄEÄD>Ä)D9Ä9D>Ä>Ec               ó    € V ^8„  d   QhRRRR/# r9   r   )r   s   "r   r   r   G   s   € ÷ Bñ BÐ3ð B¸ñ Br   c           	   ƒ  óÀ  "  € \        V 4      G Rj  x€L
 pVf   R# VP                  R4      pVf   \        RV: 24      h \        V4      pT^ 8  g   T\
        8”  d   \        RT 24      h T P                  T4      G Rj  x€L
 p \        P                  ! TP                  R4      4      #  Lš  \         d   p\        RT: 24      ThRp?ii ; i LO  \        P                   d+   p\        RT R\        TP                  4       24      ThRp?ii ; i  \        P                   d   p\        R	T 24      ThRp?i\         d   p\        R
T 24      ThRp?ii ; i5i)z…Read one framed message.

``None`` on clean EOF between messages (typical shutdown); :class:`LSPProtocolError` on malformed framing.
Nzcontent-lengthz$LSP message missing Content-Length: znon-integer Content-Length: zunreasonable Content-Length: ztruncated LSP body: expected z bytes, got r.   zinvalid JSON in LSP body: znon-UTF-8 LSP body: )rO   Úgetr   r   Ú
ValueErrorÚ_MAX_BODY_BYTESÚreadexactlyr?   r@   r5   rA   r2   ÚloadsrC   ÚJSONDecodeErrorrE   )r:   rH   ÚclÚnrK   r6   s   &     r   Úread_messagerZ   G   sk  é € ô
 " &Ó)×)€GØ‚Ùà	�‰Ð%Ó	&€BØ	‚zÜÐ!EÀgÁ[ÐQÓRÐRðMÜ�‹Gˆð 	ˆ1„u�”OÔ#ÜÐ!>¸q¸cÐBÓCÐCðgØ×'Ñ'¨Ó*×*ˆðBÜ�zŠz˜$Ÿ+™+ gÓ.Ó/Ð/ñ% *øô ô MÜÐ!=¸b¹VÐDÓEÈ1ÐLûðMúñ
 +øÜ×&Ñ&ô gÜÐ!>¸q¸cÀÌcÐRS×R[ÑR[ËnÐM]Ð^Ó_ÐefÐfûðgûô ×Ñô HÜÐ!;¸A¸3Ð?Ó@ÀaÐGûÜô BÜÐ!5°a°SÐ9Ó:ÀÐAûðBüs™   ‚E‘B,’.EÁB. Á EÁ-C ÂCÂC Â$D Â+EÂ.CÂ9C	Ã	CÃEÃC ÃDÃ(%DÄDÄEÄEÄ*D9Ä9EÅEÅEÅEÅEc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úmethodr   Úparamsr   r   r)   r   )r   s   "r   r   r   e   s&   € ÷ bñ b˜cð b¨3ð b°4ñ br   c                ó$   € RRRV /Vf   / C# RV/C# )z7Build a JSON-RPC 2.0 notification envelope (no ``id``).Újsonrpcú2.0r\   r]   r   )r\   r]   s   &&r   Úmake_notificationra   e   s(   € à�u˜h¨Ða¸º°2ÐaÐaÈhÐX^ÐM_ÐaÐar   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úreq_idr   r\   r   r]   r   r   r)   r   )r   s   "r   r   r   j   s.   € ÷ pñ p˜ð p cð p°3ð p¸4ñ pr   c                ó(   € RRRV RV/Vf   / C# RV/C# )z&Build a JSON-RPC 2.0 request envelope.r_   r`   Úidr\   r]   r   )rc   r\   r]   s   &&&r   Úmake_requestrf   j   s-   € à�u˜d F¨H°fÐoÀvÂ~ÀÐoÐoÐ\dÐflÐ[mÐoÐor   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rc   r   Úresultr   r)   r   )r   s   "r   r   r   o   s!   € ÷ >ñ >˜#ð > sð >¨tñ >r   c                ó   € RRRV RV/# )z/Build a JSON-RPC 2.0 success response envelope.r_   r`   re   rh   r   )rc   rh   s   &&r   Úmake_responserj   o   s   € à�u˜d F¨H°fÐ=Ð=r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR	/# )
r   rc   r   r   r   r   r   r   r   r)   r   )r   s   "r   r   r   t   s0   € ÷ :ñ : ð :¨3ð :¸ð :ÀCð :ÐSWñ :r   c                ó2   € RVRV/Vf   / MRV/CpRRRV RV/# )z-Build a JSON-RPC 2.0 error response envelope.r   r   r   r_   r`   re   Úerrorr   )rc   r   r   r   Úerrs   &&&& r   Úmake_error_responsero   t   s3   € à�4˜ GÐ
X°d²l±ÈÐQUÈÐ
X€CØ�u˜d F¨G°SÐ9Ð9r   c               ó    € V ^8„  d   QhRRRR/# )r   Úmsgr)   r   ztuple[str, Any]r   )r   s   "r   r   r   z   s   € ÷ 	Uñ 	U˜$ð 	U ?ñ 	Ur   c                óî   € \        V \        4      '       d   V P                  R4      R8w  d   R
# RV 9   d.   RV 9   d   RV R,          3# RV 9   g   RV 9   d   RV R,          3# R
# RV 9   d   R	V R,          3# R
# )uš   Return ``(kind, key)``: kind âˆˆ request/response/notification/invalid; key is the id (request/response),
the method (notification) or ``None`` (invalid).r_   r`   re   r\   Úrequestrh   rm   ÚresponseÚnotification)ÚinvalidN)Ú
isinstancer)   rR   )rq   s   &r   Úclassify_messagerx   z   s€   € ô �cœ4× Ò  C§G¡G¨IÓ$6¸%Ô$?ØÐØˆs„{Ø�sŒ?Ø˜c $�iÐ'Ð'Ø+3°s¬?¸gÈ¼n�
˜C �IÐ&ÐdÐSdÐdØ.6¸#¬oˆN˜C �MÐ*ÐTÐCTÐTr   ißÿÿi§€ÿÿi   r%   )ÚERROR_CONTENT_MODIFIEDÚERROR_METHOD_NOT_FOUNDr   r   rx   r7   ro   ra   rf   rj   rZ   )r   Ú
__future__r   r?   r2   ÚloggingÚtypingr   r   r   Ú	getLoggerÚloggerry   rz   rB   rT   Ú	Exceptionr   r   r7   rO   rZ   ra   rf   rj   ro   rx   Ú__all__r   r   r   Ú<module>r‚      s˜   ðñõ #ã Û Û ß 'Ñ 'à	×	Ò	Ð/Ó	0€ð  Ð ØÐ àÐ Ø"€ôp�yô pôA�iô AõIõ5õ8Bõ<bõ
põ
>÷
:õ	Uò‚r   