+
    Ki0                    <   R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHtHt ^ RIH	t	 ^ RI
HtHt ]P                  ! ]4      t^ RIHt ^ RIHt RtR	t^xt]	! R
R7       ! R R4      4       tR 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 R llt R# ) zIGeneric managed-tool gateway helpers for Nous-hosted vendor passthroughs.)annotationsN)datetimetimezone)	dataclass)CallableOptionalget_hermes_home)managed_nous_tools_enabledznousresearch.comhttpsT)frozenc                  @    ] tR t^t$ R]R&   R]R&   R]R&   R]R&   RtR# )	ManagedToolGatewayConfigstrvendorgateway_originnous_user_tokenboolmanaged_mode N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       7/home/ubuntu/hermes-agent/tools/managed_tool_gateway.pyr   r      s    Kr   r   c                 $    \        4       R,          # )zDReturn the Hermes auth store path, respecting HERMES_HOME overrides.z	auth.jsonr   r   r   r   auth_json_pathr      s    {**r   c                   V ^8  d   QhRR/# )   returnzOptional[dict]r   )formats   "r   __annotate__r$   #   s      > r   c                 b    \        4       p V P                  4       '       g   R # \        P                  ! V P	                  4       4      pVP                  R/ 4      p\        V\        4      '       g   R # VP                  R/ 4      p\        V\        4      '       d   V#  R #   \         d     R # i ; i)N	providersnous)	r   is_filejsonloads	read_textget
isinstancedict	Exception)pathdatar&   nous_providers       r   _read_nous_provider_stater3   #   s    ||~~zz$..*+HH["-	)T**!fb1mT**   +   s    B AB 2)B B.-B.c                    V ^8  d   QhRRRR/# )r!   valueobjectr"   zOptional[datetime]r   )r#   s   "r   r$   r$   4   s     + +F +'9 +r   c                   \        V \        4      '       d   V P                  4       '       g   R # V P                  4       pVP                  R4      '       d   VR R R,           p \        P
                  ! V4      pTP                  f!   TP                  \        P                  R7      pTP                  \        P                  4      #   \         d     R # i ; i)NZz+00:00)tzinfo)r-   r   stripendswithr   fromisoformat
ValueErrorr9   replacer   utc
astimezone)r5   
normalizedparseds   &  r   _parse_timestamprD   4   s    eS!!J3_x/
''
3 }}x||4X\\**	  s   #C CCc               $    V ^8  d   QhRRRRRR/# )r!   
expires_atr6   skew_secondsintr"   r   r   )r#   s   "r   r$   r$   C   s!     2 2& 2 2 2r   c                    \        V 4      pVf   R# V\        P                  ! \        P                  4      ,
          P                  4       pV\        ^ \        V4      4      8*  # )NT)rD   r   nowr   r@   total_secondsmaxrH   )rF   rG   expires	remainings   &&  r   _access_token_is_expiringrO   C   sK    z*G8<<55DDFIAs<0111r   c                   V ^8  d   QhRR/# )r!   r"   zOptional[str]r   )r#   s   "r   r$   r$   K   s       r   c                    \         P                  ! R4      p \        V \        4      '       d'   V P	                  4       '       d   V P	                  4       # \        4       ;'       g    / pVP                  R4      p\        V\        4      '       d'   VP	                  4       '       d   VP	                  4       MRpV'       d(   \        VP                  R4      \        4      '       g   V#  ^ RI	H
p V! \        R7      p\        V\        4      '       d'   VP	                  4       '       d   VP	                  4       # V#   \         d"   p\        P                  RT4        Rp?T# Rp?ii ; i)zJRead a Nous Subscriber OAuth access token from auth store or env override.TOOL_GATEWAY_USER_TOKENaccess_tokenNrF   )resolve_nous_access_token)refresh_skew_secondsz$Nous access token refresh failed: %s)osgetenvr-   r   r;   r3   r,   rO   '_NOUS_ACCESS_TOKEN_REFRESH_SKEW_SECONDShermes_cli.authrT   r/   loggerdebug)explicitr2   rS   cached_tokenrT   refreshed_tokenexcs          r   read_nous_access_tokenr`   K   s!   yy23H(C  X^^%5%5~~-/552M $$^4L+5lC+H+H\M_M_MaMa<%%'gkL5,'/  	B=3!H
 os++0E0E0G0G"((**   B;SAABs   &>D7 %D7 7E#EE#c                   V ^8  d   QhRR/# )r!   r"   r   r   )r#   s   "r   r$   r$   i   s     	F 	F 	Fr   c                     \         P                  ! RR4      P                  4       P                  4       p V '       g   \        # V R9   d   V # \        R4      h)z,Return configured shared gateway URL scheme.TOOL_GATEWAY_SCHEME z-TOOL_GATEWAY_SCHEME must be 'http' or 'https'>   httpr   )rV   rW   r;   lower_DEFAULT_TOOL_GATEWAY_SCHEMEr>   )schemes    r   get_tool_gateway_schemeri   i   sH    YY,b1779??AF++""
D
EEr   c                    V ^8  d   QhRRRR/# )r!   r   r   r"   r   )r#   s   "r   r$   r$   u   s     P PS PS Pr   c                   V P                  4       P                  RR4       R2p\        P                  ! VR4      P	                  4       P                  R4      pV'       d   V# \        4       p\        P                  ! RR4      P	                  4       P	                  R4      pV'       d   V RV  RV 2# V RV  R\         2# )	z0Return the gateway origin for a specific vendor.-__GATEWAY_URLrd   /TOOL_GATEWAY_DOMAINz://z	-gateway.)upperr?   rV   rW   r;   rstripri   _DEFAULT_TOOL_GATEWAY_DOMAIN)r   
vendor_keyexplicit_vendor_urlshared_schemeshared_domains   &    r   build_vendor_gateway_urlrx   u   s    LLN**345\BJ))J399;BB3G""+-MII3R8>>@FFsKMF89]ODD_Cxy1M0NOOr   c               (    V ^8  d   QhRRRRRRRR/# )	r!   r   r   gateway_builderOptional[Callable[[str], str]]token_reader%Optional[Callable[[], Optional[str]]]r"   z"Optional[ManagedToolGatewayConfig]r   )r#   s   "r   r$   r$      s0      3 8 (	r   c                    \        4       '       g   R# T;'       g    \        pT;'       g    \        pV! V 4      pV! 4       pV'       d	   V'       g   R# \        V VVRR7      # )z8Resolve shared managed-tool gateway config for a vendor.NT)r   r   r   r   )r
   rx   r`   r   )r   rz   r|   resolved_gateway_builderresolved_token_readerr   r   s   &&&    r   resolve_managed_tool_gatewayr      sa     &''.JJ2J(BB,B-f5N+-O#%'	 r   c               (    V ^8  d   QhRRRRRRRR/# )	r!   r   r   rz   r{   r|   r}   r"   r   r   )r#   s   "r   r$   r$      s0     
 

3
 8
 
	
r   c                "    \        V VVR7      RJ# )zAReturn True when gateway URL and Nous access token are available.)rz   r|   N)r   )r   rz   r|   s   &&&r   is_managed_tool_gateway_readyr      s$     ('! 	 r   )NN)!__doc__
__future__r   r)   loggingrV   r   r   dataclassesr   typingr   r   	getLoggerr   rZ   hermes_constantsr	   tools.tool_backend_helpersr
   rs   rg   rX   r   r   r3   rD   rO   r`   ri   rx   r   r   r   r   r   <module>r      s    O "   	 ' ! %			8	$ , A1 & *- ' $  +
"+2<	FP2
 
r   