§
    ‰eîi0  ã                  ó.  — d Z ddlmZ ddl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mZ  ej        e¦  «        ZddlmZ ddlmZ d	Zd
ZdZ e	d¬¦  «         G d„ d¦  «        ¦   «         Zd„ Zd*d„Zd+d„Zd,d„Zd-d„Zd.d „Zd/d"„Z	 	 d0d1d(„Z	 	 d0d2d)„Z dS )3zIGeneric managed-tool gateway helpers for Nous-hosted vendor passthroughs.é    )ÚannotationsN)ÚdatetimeÚtimezone)Ú	dataclass)ÚCallableÚOptional©Úget_hermes_home)Úmanaged_nous_tools_enabledznousresearch.comÚhttpséx   T)Úfrozenc                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )ÚManagedToolGatewayConfigÚstrÚvendorÚgateway_originÚnous_user_tokenÚboolÚmanaged_modeN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú</home/div/.hermes/hermes-agent/tools/managed_tool_gateway.pyr   r      s?   € € € € € € à€K€K�KØÐÐÑØÐÐÑØÐÐÑÐÐr   r   c                 ó$   — t          ¦   «         dz  S )zDReturn the Hermes auth store path, respecting HERMES_HOME overrides.z	auth.jsonr	   r   r   r   Úauth_json_pathr      s   € åÑÔ˜{Ñ*Ð*r   ÚreturnúOptional[dict]c                 ór  — 	 t          ¦   «         } |                      ¦   «         sd S t          j        |                      ¦   «         ¦  «        }|                     di ¦  «        }t          |t          ¦  «        sd S |                     di ¦  «        }t          |t          ¦  «        r|S n# t          $ r Y nw xY wd S )NÚ	providersÚnous)	r   Úis_fileÚjsonÚloadsÚ	read_textÚgetÚ
isinstanceÚdictÚ	Exception)ÚpathÚdatar#   Únous_providers       r   Ú_read_nous_provider_stater0   #   s¿   € ðÝÑÔˆØ�|Š|‰~Œ~ð 	Ø�4ÝŒz˜$Ÿ.š.Ñ*Ô*Ñ+Ô+ˆØ—H’H˜[¨"Ñ-Ô-ˆ	Ý˜)¥TÑ*Ô*ð 	Ø�4Ø!Ÿš f¨bÑ1Ô1ˆÝ�m¥TÑ*Ô*ð 	!Ø Ð ð	!øåð ð ð Øˆðøøøàˆ4s   ‚"B' ¦AB' Á9,B' Â'
B4Â3B4ÚvalueÚobjectúOptional[datetime]c                óž  — t          | t          ¦  «        r|                      ¦   «         sd S |                      ¦   «         }|                     d¦  «        r|d d…         dz   }	 t	          j        |¦  «        }n# t          $ r Y d S w xY w|j        € |                     t          j
        ¬¦  «        }|                     t          j
        ¦  «        S )NÚZéÿÿÿÿz+00:00)Útzinfo)r*   r   ÚstripÚendswithr   ÚfromisoformatÚ
ValueErrorr7   Úreplacer   ÚutcÚ
astimezone)r1   Ú
normalizedÚparseds      r   Ú_parse_timestamprA   4   sÉ   € Ý�e�SÑ!Ô!ð ¨¯ª©¬ð ØˆtØ—’‘”€JØ×Ò˜3ÑÔð 0Ø   ”_ xÑ/ˆ
ðÝÔ'¨
Ñ3Ô3ˆˆøÝð ð ð Øˆtˆtðøøøà„}ÐØ—’¥x¤|�Ñ4Ô4ˆØ×Ò�Xœ\Ñ*Ô*Ð*s   Á#A8 Á8
BÂBÚ
expires_atÚskew_secondsÚintr   c                óÐ   — t          | ¦  «        }|€dS |t          j        t          j        ¦  «        z
                       ¦   «         }|t          dt          |¦  «        ¦  «        k    S )NTr   )rA   r   Únowr   r=   Útotal_secondsÚmaxrD   )rB   rC   ÚexpiresÚ	remainings       r   Ú_access_token_is_expiringrK   C   sX   € Ý˜zÑ*Ô*€GØ€ØˆtØ�8œ<­¬Ñ5Ô5Ñ5×DÒDÑFÔF€IØ�˜A�s <Ñ0Ô0Ñ1Ô1Ò1Ð1r   úOptional[str]c                 óØ  — t          j        d¦  «        } t          | t          ¦  «        r(|                      ¦   «         r|                      ¦   «         S t          ¦   «         pi }|                     d¦  «        }t          |t          ¦  «        r(|                     ¦   «         r|                     ¦   «         nd}|r*t          |                     d¦  «        t          ¦  «        s|S 	 ddl	m
}  |t          ¬¦  «        }t          |t          ¦  «        r(|                     ¦   «         r|                     ¦   «         S n2# t          $ r%}t                               d|¦  «         Y d}~nd}~ww xY w|S )	zJRead a Nous Subscriber OAuth access token from auth store or env override.ÚTOOL_GATEWAY_USER_TOKENÚaccess_tokenNrB   r   )Úresolve_nous_access_token)Úrefresh_skew_secondsz$Nous access token refresh failed: %s)ÚosÚgetenvr*   r   r8   r0   r)   rK   Ú'_NOUS_ACCESS_TOKEN_REFRESH_SKEW_SECONDSÚhermes_cli.authrP   r,   ÚloggerÚdebug)Úexplicitr/   rO   Úcached_tokenrP   Úrefreshed_tokenÚexcs          r   Úread_nous_access_tokenr\   K   s�  € åŒyÐ2Ñ3Ô3€HÝ�(�CÑ Ô ð   X§^¢^Ñ%5Ô%5ð  Ø�~Š~ÑÔÐå-Ñ/Ô/Ð5°2€MØ ×$Ò$ ^Ñ4Ô4€LÝ+5°lÅCÑ+HÔ+HÐkÈ\×M_ÒM_ÑMaÔMaÐk�<×%Ò%Ñ'Ô'Ð'Ðgk€Làð Õ5Ø×Ò˜,Ñ'Ô'Ý/ñô ð ð Ðð	BØ=Ð=Ð=Ð=Ð=Ð=à3Ð3Ý!Hð
ñ 
ô 
ˆõ �o¥sÑ+Ô+ð 	+°×0EÒ0EÑ0GÔ0Gð 	+Ø"×(Ò(Ñ*Ô*Ð*øøÝð Bð Bð BÝ�ŠÐ;¸SÑAÔAÐAÐAÐAÐAÐAÐAøøøøðBøøøð Ðs   Ã#AD8 Ä8
E'ÅE"Å"E'r   c                 ó°   — t          j        dd¦  «                             ¦   «                              ¦   «         } | st          S | dv r| S t          d¦  «        ‚)z,Return configured shared gateway URL scheme.ÚTOOL_GATEWAY_SCHEMEÚ >   Úhttpr   z-TOOL_GATEWAY_SCHEME must be 'http' or 'https')rR   rS   r8   ÚlowerÚ_DEFAULT_TOOL_GATEWAY_SCHEMEr;   )Úschemes    r   Úget_tool_gateway_schemerd   i   sZ   € åŒYÐ,¨bÑ1Ô1×7Ò7Ñ9Ô9×?Ò?ÑAÔA€FØð ,Ý+Ð+àÐ"Ð"Ð"Øˆå
ÐDÑ
EÔ
EÐEr   r   c                óš  — |                       ¦   «                              dd¦  «        › d�}t          j        |d¦  «                             ¦   «                              d¦  «        }|r|S t          ¦   «         }t          j        dd¦  «                             ¦   «                              d¦  «        }|r
|› d| › d|› �S |› d| › dt          › �S )	z0Return the gateway origin for a specific vendor.ú-Ú_Ú_GATEWAY_URLr_   ú/ÚTOOL_GATEWAY_DOMAINz://z	-gateway.)Úupperr<   rR   rS   r8   Úrstriprd   Ú_DEFAULT_TOOL_GATEWAY_DOMAIN)r   Ú
vendor_keyÚexplicit_vendor_urlÚshared_schemeÚshared_domains        r   Úbuild_vendor_gateway_urlrr   u   sÛ   € à—L’L‘N”N×*Ò*¨3°Ñ4Ô4ÐBÐBÐB€JÝœ) J°Ñ3Ô3×9Ò9Ñ;Ô;×BÒBÀ3ÑGÔGÐØð #Ø"Ð"å+Ñ-Ô-€MÝ”IÐ3°RÑ8Ô8×>Ò>Ñ@Ô@×FÒFÀsÑKÔK€MØð EØÐDÐD FÐDÐD°]ÐDÐDÐDàÐOÐO ÐOÐOÕ1MÐOÐOÐOr   Úgateway_builderúOptional[Callable[[str], str]]Útoken_readerú%Optional[Callable[[], Optional[str]]]ú"Optional[ManagedToolGatewayConfig]c                ó¢   — t          ¦   «         sdS |pt          }|pt          } || ¦  «        } |¦   «         }|r|sdS t          | ||d¬¦  «        S )z8Resolve shared managed-tool gateway config for a vendor.NT)r   r   r   r   )r   rr   r\   r   )r   rs   ru   Úresolved_gateway_builderÚresolved_token_readerr   r   s          r   Úresolve_managed_tool_gatewayr{   „   s„   € õ &Ñ'Ô'ð Øˆtà.ÐJÕ2JÐØ(ÐBÕ,BÐà-Ð-¨fÑ5Ô5€NØ+Ð+Ñ-Ô-€OØð  ð Øˆtå#ØØ%Ø'Øð	ñ ô ð r   c                ó*   — t          | ||¬¦  «        duS )zAReturn True when gateway URL and Nous access token are available.)rs   ru   N)r{   )r   rs   ru   s      r   Úis_managed_tool_gateway_readyr}   �   s.   € õ (ØØ'Ø!ðñ ô ð ð	ð r   )r    r!   )r1   r2   r    r3   )rB   r2   rC   rD   r    r   )r    rL   )r    r   )r   r   r    r   )NN)r   r   rs   rt   ru   rv   r    rw   )r   r   rs   rt   ru   rv   r    r   )!Ú__doc__Ú
__future__r   r&   ÚloggingrR   r   r   Údataclassesr   Útypingr   r   Ú	getLoggerr   rV   Úhermes_constantsr
   Útools.tool_backend_helpersr   rm   rb   rT   r   r   r0   rA   rK   r\   rd   rr   r{   r}   r   r   r   ú<module>r†      sß  ðØ OÐ Oà "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à	ˆÔ	˜8Ñ	$Ô	$€à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø AÐ AÐ AÐ AÐ AÐ Aà1Ð Ø&Ð Ø*-Ð 'ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð+ð +ð +ð
ð ð ð ð"+ð +ð +ð +ð2ð 2ð 2ð 2ðð ð ð ð<	Fð 	Fð 	Fð 	FðPð Pð Pð Pð" 7;Ø:>ðð ð ð ð ð6 7;Ø:>ð
ð 
ð 
ð 
ð 
ð 
ð 
r   