Ë
    ãß²j#  ã                  óð   — d Z ddlmZ ddlmZmZmZ ddlmZm	Z	m
Z
 g d¢Z G d„ de«      Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Zddd„ZdZdZdddde	dœ	 	 	 	 	 	 	 	 	 	 	 dd„Zy)z¯Gateway HTTP errors and envelope parsing.

Per-tool execute failures are result entries, not exceptions; connection links are intentionally unredacted for the model to relay.
é    )Úannotations)ÚAnyÚMappingÚOptional)ÚCARDÚLINKÚSIDE)ÚGatewayAuthErrorÚGatewayUnavailableÚIdempotencyConflictÚSIDE_AGENT_HINTÚToolGatewayErrorÚparse_gateway_errorÚrender_connection_requiredc                  óF   ‡ — e Zd ZdZdddddœ	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )r   zLHTTP-level gateway failure; ``retryable`` is decided by the envelope parser.ÚGATEWAY_ERRORNF)ÚcodeÚstatusÚ
request_idÚ	retryablec               ó\   •— t         ‰| �  |«       || _        || _        || _        || _        y ©N)ÚsuperÚ__init__r   r   r   r   )ÚselfÚmessager   r   r   r   Ú	__class__s         €úD/home/ubuntu/.hermes/hermes-agent/tools/connectors/gateway/errors.pyr   zToolGatewayError.__init__   s.   ø€ ô 	‰Ñ˜Ô!ØˆŒ	ØˆŒØ$ˆŒØ"ˆ�ó    )r   Ústrr   r    r   zOptional[int]r   úOptional[str]r   ÚboolÚreturnÚNone©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__©r   s   @r   r   r      sX   ø„ ÙVð $Ø $Ø$(Øñ#àð#ð ð	#ð
 ð#ð "ð#ð ð#ð 
÷#ñ #r   r   c                  ó   — e Zd ZdZy)r
   z&Authentication or entitlement failure.N©r&   r'   r(   r)   © r   r   r
   r
   *   s   „ Ú0r   r
   c                  ó   — e Zd ZdZy)r   z?404 signals callers to degrade silently to local-only behavior.Nr-   r.   r   r   r   r   .   s   „ ÚIr   r   c                  ó   — e Zd ZdZy)r   z;Never retry a reused idempotency key with a different body.Nr-   r.   r   r   r   r   2   s   „ ÚEr   r   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚRateLimitedzQ429 with the gateway's retry hint in seconds; the caller decides whether to wait.c               ó4   •— t        ‰| �  |fi |¤Ž || _        y r   )r   r   Úretry_after)r   r   r4   Úkwargsr   s       €r   r   zRateLimited.__init__9   s   ø€ Ü‰Ñ˜Ñ+ FÒ+Ø&ˆÕr   )r   r    r4   Úfloatr5   r   r#   r$   r%   r+   s   @r   r2   r2   6   s   ø„ Ù[÷'ñ 'r   r2   Nc                ó†  — d| › �}d}d}d}t        |t        «      �r|j                  d«      }t        |t        «      r=t        |j                  d«      xs |«      }t        |j                  d«      xs d«      }nRt        |t        «      r|r|}n=|j                  d«      r,t        |d   «      }t        |j                  d«      xs d«      }|j                  d«      }|�t        |«      }t        |j                  d«      t        t
        f«      rt        |d   «      }n|rt        |«      dd	 }|sd
| › �}|| |dœ}	| dv rt        |fi |	¤ŽS | dk(  rt        |fi |	¤ŽS | dk(  rt        |fi |	¤ŽS | dk(  r?|r|xs i j                  d«      nd}
|
dvrt        |
«      n|xs ddz  }t        |fd|i|	¤ŽS t        |fd| d	k\  i|	¤ŽS )a	  Parse every gateway error envelope without raising on a malformed body.

    Three envelope shapes exist: ``{error: {code, message}}`` on most routes, ``{error: "<code>"}``
    on the account routes, and a flat ``{code, message, requestId, retryAfterMs}`` on a 429.ÚHTTP_Ú NÚerrorr   r   Ú	requestIdÚretryAfterMsiô  z(tool gateway request failed with status )r   r   r   )i‘  i“  i”  i™  i­  zRetry-After)Nr9   g     @�@r4   r   )Ú
isinstancer   Úgetr    Úintr6   r
   r   r   r2   r   )r   ÚbodyÚheadersr   r   r   Úretry_after_msÚenvelopeÚraw_request_idr5   Úheaderr4   s               r   r   r   >   sÞ  € ð
 �6�(Ð€DØ€GØ€JØ&*€NÜ�$œÕ Ø—8‘8˜GÓ$ˆÜ�h¤Ô(Ü�x—|‘| FÓ+Ò3¨tÓ4ˆDÜ˜(Ÿ,™, yÓ1Ò7°RÓ8‰GÜ˜¤#Ô&©8Ø‰DØ�X‰X�fÔÜ�t˜F‘|Ó$ˆDÜ˜$Ÿ(™( 9Ó-Ò3°Ó4ˆGØŸ™ +Ó.ˆØÐ%Ü˜^Ó,ˆJÜ�d—h‘h˜~Ó.´´e°Ô=Ü" 4¨Ñ#7Ó8‰NÙ	Ü�d“)˜D˜S�/ˆÙØ<¸V¸HÐEˆð ØØ ñ€Fð
 �ÑÜ Ñ2¨6Ñ2Ð2Ø�‚}Ü! 'Ñ4¨VÑ4Ð4Ø�‚}Ü" 7Ñ5¨fÑ5Ð5Ø�‚}Ù7>�'’-˜R×$Ñ$ ]Ô3ÀDˆØ'-°ZÑ'?”e˜F”mÀnÒF^ÐX^ÐbhÑEhˆÜ˜7ÑF°ÐF¸vÑFÐFÜ˜GÑG¨v¸©}ÐGÀÑGÐGr   zxThis app is not connected. Only the main agent can connect it, so report that back instead of trying to connect it here.zwThis app is not connected. Call manage_connections to open a connection card for it; there is no link to show the user.)Ú	connectorr   Úconnect_urlÚhintÚsurfacec                ó¬   — d|xs
 | rd| › d�nddœ}| r| |d<   |t         k(  rt        |d<   |S |t        k(  rd|d	<   t        |d<   |S |r||d
<   |r||d<   |S )NÚCONNECTION_REQUIREDzThe z- connector is not connected for this account.z1This connector is not connected for this account.)r   r   rF   rH   TÚconnect_card_availablerG   )r	   r   r   Ú	CARD_HINT)rF   r   rG   rH   rI   Úpayloads         r   r   r   x   s�   € ð &Øò 
ñ ð �9�+ÐJÑKàDñ€Gñ Ø(ˆ�ÑØ”$‚Ü)ˆ�‰ØˆØ”$‚Ø,0ˆÐ(Ñ)Ü#ˆ�‰ØˆÙØ!,ˆ�ÑÙØˆ�‰Ø€Nr   r   )r   r?   r@   r   rA   zOptional[Mapping[str, Any]]r#   r   )rF   r!   r   r!   rG   r!   rH   r!   rI   r    r#   zdict[str, Any])r)   Ú
__future__r   Útypingr   r   r   Útools.connectors.turnr   r   r	   Ú__all__ÚRuntimeErrorr   r
   r   r   r2   r   r   rM   r   r.   r   r   ú<module>rT      sÑ   ðñõ
 #ç )Ñ )ç 2Ñ 2ò€ô#�|ô #ô&1Ð'ô 1ôJÐ)ô JôFÐ*ô Fô'Ð"ô 'ô,Hð`,ð ð)ð 
ð  $Ø!Ø!%ØØñàðð ðð ð	ð
 ðð ðð ôr   