+
    jHàjZ  ã                  ó  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIHtH	t	H
t
 ^ RIt^ RIHt ^ RIHt ]P                   ! ]4      t/ tR]R&   ]P*                  ! 4       tRt^tR	tR
 R ltR R ltR R lt ! R R]4      tR# )uE  Browser Use cloud browser provider â€” the only backend with dual auth: direct
``BROWSER_USE_API_KEY`` (https://browser-use.com) or the managed Nous tool gateway (bills to a
Nous subscription). Direct first, managed second, unless ``tool_gateway.browser: gateway`` flips
it. Config: ``browser.cloud_provider: "browser-use"``.)ÚannotationsN)ÚAnyÚDictÚOptional)Ú
get_secret)ÚCloudBrowserProviderúdict[str, str]Ú_pending_create_keysz"https://api.browser-use.com/api/v3Úusc               ó    € V ^8„  d   QhRRRR/# )é   Útask_idÚstrÚreturn© )Úformats   "ÚI/home/ubuntu/.hermes/hermes-agent/plugins/browser/browser_use/provider.pyÚ__annotate__r      s   € ÷ ñ ¨sð °sñ ó    c                ó  € \         ;_uu_ 4        \        P                  V 4      pV'       d   VuuR R R 4       # R\        P                  ! 4       P
                   2pV\        V &   VuuR R R 4       #   + '       g   i     R # ; i)Nzbrowser-use-session-create:)Ú_pending_create_keys_lockr	   ÚgetÚuuidÚuuid4Úhex)r   ÚexistingÚcreateds   &  r   Ú!_get_or_create_pending_create_keyr      s^   € ß	"Ö	"Ü'×+Ñ+¨GÓ4ˆßØ÷ 
#Ò	"ð 0´·
²
³×0@Ñ0@Ð/AÐBˆØ(/Ô˜WÑ%Ø÷ 
#×	"×	"Ó	"ús   �A0¹,A0Á0B	c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   ÚNoner   )r   s   "r   r   r   (   s   € ÷ 0ñ 0 sð 0¨tñ 0r   c                óˆ   € \         ;_uu_ 4        \        P                  V R 4       R R R 4       R #   + '       g   i     R # ; i)N)r   r	   Úpop)r   s   &r   Ú_clear_pending_create_keyr"   (   s'   € ß	"Ö	"Ü× Ñ  ¨$Ô/÷ 
#×	"×	"Ò	"ús	   �0°A	c               ó    € V ^8„  d   QhRRRR/# )r   Úresponsezrequests.Responser   Úboolr   )r   s   "r   r   r   -   s   € ÷ hñ hÐ2Cð hÈñ hr   c                ó€  € V P                   R8¼  d   R# V P                   R8w  d   R#  V P                  4       p\        T\        4      '       d   TP                  R4      MRp\        T\        4      ;'       d6    R\        TP                  R4      ;'       g    R	4      P                  4       9   #   \         d     R# i ; i)
z«Keep the key when retryable: any 5xx, or a 409 saying the original request is still in
flight. Other 4xx (auth, bad request) won't succeed on retry, so the key is dropped.iô  Ti™  FÚerrorNzalready in progressÚmessageÚ )Ústatus_codeÚjsonÚ	ExceptionÚ
isinstanceÚdictr   r   Úlower)r$   Úpayloadr'   s   &  r   Ú#_should_preserve_pending_create_keyr1   -   s£   € ð ×Ñ˜sÔ"ÙØ×Ñ˜sÔ"ÙðØ—-‘-“/ˆô %/¨w¼×$=Ò$=ˆG�K‰K˜Ô À4€EÜ�eœTÓ"×gÐgÐ'<ÄÀEÇIÁIÈiÓDX×D^ÐD^Ð\^Ó@_×@eÑ@eÓ@gÑ'gÐgøô ô Úðús   ¨B. Â.B=Â<B=c                  ó~   € ] tR t^<tRtRtRtRtRtRt	R R lt
R	R
/R R lltR R ltR R ltR R ltR R ltRtR# )ÚBrowserUseBrowserProviderz<Browser Use (https://browser-use.com) cloud browser backend.úbrowser-usezBrowser UseÚpatchz/browsers/{session_id}Nc               ó   € V ^8„  d   QhRR/# )r   r   r%   r   )r   s   "r   r   Ú&BrowserUseBrowserProvider.__annotate__G   s   € ÷ Iñ I˜dñ Ir   c                	ó*   € V P                  R R7      RJ# )F)Úrefresh_tokenN)Ú_get_config_or_none)Úselfs   &r   Úis_availableÚ&BrowserUseBrowserProvider.is_availableG   s   € Ø×'Ñ'°eÐ'Ó<ÀDÐHÐHr   r9   Tc               ó    € V ^8„  d   QhRRRR/# )r   r9   r%   r   úOptional[dict[str, Any]]r   )r   s   "r   r   r7   J   s   € ÷ 8ñ 8°Dð 8ÐD\ñ 8r   c               	óØ   aaa	€ ^ RI HoHo	 ^ RIHpHp R VVV	3R llp\        R4      pV! R4      pRVR\        R	R
/pWb8X  d   V! 4       # Ve   V'       d   V# R# V'       d   V# V! 4       # )é    )Úpeek_nous_access_tokenÚresolve_managed_tool_gateway)ÚNOUS_MANAGED_PROVIDERÚread_selectionc               ó   € V ^8„  d   QhRR/# )r   r   r?   r   )r   s   "r   r   ÚCBrowserUseBrowserProvider._get_config_or_none.<locals>.__annotate__O   s   € ÷ 
	ñ 
	Ð!9ñ 
	r   c                 óŽ   <€ S! R S'       d   RMSR7      p V f   R# RV P                   RV P                  P                  R4      RR/# )r4   N)Útoken_readerÚapi_keyÚbase_urlÚ/Úmanaged_modeT)Únous_user_tokenÚgateway_originÚrstrip)ÚmanagedrB   r9   rC   s    €€€r   Ú_managed_configÚFBrowserUseBrowserProvider._get_config_or_none.<locals>._managed_configO   sP   ø€ á2Ø·M©DÐG]ô_ˆGàŠÙà˜7×2Ñ2Ø˜G×2Ñ2×9Ñ9¸#Ó>Ø ðð r   ÚBROWSER_USE_API_KEYÚbrowserrJ   rK   rM   FN)Útools.managed_tool_gatewayrB   rC   Útools.tool_backend_helpersrD   rE   r   Ú	_BASE_URL)
r;   r9   rD   rE   rR   rJ   ÚselectedÚdirectrB   rC   s
   &d      @@r   r:   Ú-BrowserUseBrowserProvider._get_config_or_noneJ   sp   ú€ çcßT÷
	ò 
	ô Ð2Ó3ˆÙ! )Ó,ˆØ˜W j´)¸^ÈUÐSˆð Ô,Ù"Ó$Ð$ØÒß$�6Ð.¨$Ð.ß ˆvÐ7¡oÓ&7Ð7r   c               ó   € V ^8„  d   QhRR/# )r   r   údict[str, Any]r   )r   s   "r   r   r7   g   s   € ÷ Zñ Z˜^ñ Zr   c                	óü   € ^ RI HpHpHpHp V P                  4       pVe   V# V! R4      pWa8X  d   \        V! RVR4      4      hVe   \        V! RVR4      4      hV! 4       '       d   \        R4      h\        R4      h)rA   )rD   Úmanaged_nous_tools_enabledrE   Úselection_errorrU   zDthe Nous Tool Gateway is not available (not entitled or unreachable)zBROWSER_USE_API_KEY is not setzsBrowser Use requires either a direct BROWSER_USE_API_KEY credential or a managed Browser Use gateway configuration.z=Browser Use requires a direct BROWSER_USE_API_KEY credential.)rW   rD   r_   rE   r`   r:   Ú
ValueError)r;   rD   r_   rE   r`   ÚconfigrY   s   &      r   Ú_get_configÚ%BrowserUseBrowserProvider._get_configg   s¢   € ÷	`ó 	`ð ×)Ñ)Ó+ˆØÒØˆMÙ! )Ó,ˆØÔ,Ü™_ØÐ0ØVóXó Yð Yð ÒÜ™_¨Y¸ÐBbÓcÓdÐdÙ%×'Ò'ÜðMóNð Nô ÐXÓYÐYr   c               ó    € V ^8„  d   QhRRRR/# )r   rb   r]   r   r   r   )r   s   "r   r   r7   {   s   € ÷ `ñ `˜~ð `°.ñ `r   c                	ó   € R RRVR,          /# )zContent-Typezapplication/jsonzX-Browser-Use-API-KeyrJ   r   ©r;   rb   s   &&r   Ú_headersÚ"BrowserUseBrowserProvider._headers{   s   € ØÐ 2Ð4KÈVÐT]ÕM^Ð_Ð_r   c               ó    € V ^8„  d   QhRRRR/# )r   rb   r]   r   údict[str, object]r   )r   s   "r   r   r7   ~   s   € ÷ "ñ " Nð "Ð7Hñ "r   c                	ó
   € R R/# )ÚactionÚstopr   rg   s   &&r   Ú_release_bodyÚ'BrowserUseBrowserProvider._release_body~   s   € Ø˜&Ð!Ð!r   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   rk   r   )r   s   "r   r   r7   �   s   € ÷ 
ñ 
 cð 
Ð.?ñ 
r   c                	ó4  € V P                  4       p\        VP                  R 4      4      pV P                  V4      pV'       d   \	        V4      VR&   V'       d   R\
        R\        /M/ pV P                  VR,           R2WEV'       * R7      pVP                  '       g%   V'       d   \        V4      '       g   \        V4       V P                  V4       VP                  4       pV'       d   \        V4       V P                  V4      p\        P                  RV4       RTR	VR
,          RVP                  R4      ;'       g    VP                  R4      ;'       g    RRVP                  R4      RRR/RV'       d   VP                   P                  R4      /# R/# )rM   zX-Idempotency-KeyÚtimeoutÚproxyCountryCoderK   z	/browsers)Úwrap_errorszCreated Browser Use session %sÚsession_nameÚbb_session_idÚidÚcdp_urlÚcdpUrlÚ
connectUrlr)   Ú
expires_atÚ	timeoutAtÚfeaturesÚbrowser_useTÚexternal_call_idzx-external-call-idN)rc   r%   r   rh   r   Ú _DEFAULT_MANAGED_TIMEOUT_MINUTESÚ#_DEFAULT_MANAGED_PROXY_COUNTRY_CODEÚ_post_createÚokr1   r"   Ú_check_createdr+   Ú_session_nameÚloggerÚinfoÚheaders)	r;   r   rb   rM   r‰   r0   r$   Úsession_datarv   s	   &&       r   Úcreate_sessionÚ(BrowserUseBrowserProvider.create_session�   s}  € Ø×!Ñ!Ó#ˆÜ˜FŸJ™J ~Ó6Ó7ˆà—-‘- Ó'ˆßÜ+LÈWÓ+UˆGÐ'Ñ(÷ ð Ô8Ð:LÔNqÑrØ!#ð 	ð ×$Ñ$Ø�jÕ!Ð" )Ð,¨gÐP\ÔL\ð %ó ^ˆà�{�{ˆ{Ÿ|Ô4WÐX`×4aÒ4aÜ% gÔ.Ø×Ñ˜HÔ%à—}‘}“ˆßÜ% gÔ.Ø×)Ñ)¨'Ó2ˆÜ�‰Ð4°lÔCà˜LØ˜\¨$Õ/Ø�|×'Ñ'¨Ó1×YÐY°\×5EÑ5EÀlÓ5S×YÐYÐWYà˜,×*Ñ*¨;Ó7Ø˜¨Ð-ØÏl × 0Ñ 0× 4Ñ 4Ð5IÓ Jð
ð 	
ð aeð
ð 	
r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úprovider_idÚlabelÚrelease_methodÚrelease_pathÚ	setup_tagr<   r:   rc   rh   ro   r‹   Ú__static_attributes__r   r   r   r3   r3   <   sM   † ÙFà€KØ€EØ€NØ+€Lð €IõIð8¸4÷ 8õ:Zõ(`õ"÷
ñ 
r   r3   )Ú__conditional_annotations__r‘   Ú
__future__r   ÚloggingÚ	threadingr   Útypingr   r   r   ÚrequestsÚagent.secret_scoper   Úplugins.browser._commonr   Ú	getLoggerr�   r‡   r	   Ú__annotations__ÚLockr   rX   r�   r‚   r   r"   r1   r3   )r˜   s   @r   Ú<module>r£      s‚   øðô:õ
 #ã Û Û ß &Ñ &ã å )Ý 8à	×	Ò	˜8Ó	$€ð (*Ð �nÓ )Ø%ŸNšNÓ,Ð à0€	Ø#$Ð  Ø&*Ð #õõ0õ
hôd
Ð 4ö d
r   