
    PL
j\(                        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m	Z	 ddl
Z
ddlmZ  ej        e          Z G d de          ZdS )u  Browserbase cloud browser provider — plugin form.

Subclasses :class:`agent.browser_provider.BrowserProvider` (the plugin-facing
ABC introduced in PR #25214). The legacy in-tree module
``tools.browser_providers.browserbase`` was removed in the same PR; this file
is now the canonical implementation.

Browserbase requires direct ``BROWSERBASE_API_KEY`` and ``BROWSERBASE_PROJECT_ID``
credentials. Managed Nous gateway support has been removed — the Nous
subscription now routes through Browser Use instead (see
``plugins/browser/browser_use/``).

Config keys this provider responds to::

    browser:
      cloud_provider: "browserbase"

Auth env vars::

    BROWSERBASE_API_KEY=...       # https://browserbase.com
    BROWSERBASE_PROJECT_ID=...

Optional feature knobs::

    BROWSERBASE_BASE_URL=...      # default https://api.browserbase.com
    BROWSERBASE_PROXIES=true      # default true
    BROWSERBASE_ADVANCED_STEALTH=false
    BROWSERBASE_KEEP_ALIVE=true   # default true
    BROWSERBASE_SESSION_TIMEOUT=... (ms, integer)
    )annotationsN)AnyDictOptional)BrowserProviderc                  z    e Zd ZdZedd            Zedd            ZddZdd	ZddZ	ddZ
ddZddZddZdS )BrowserbaseBrowserProvideru   Browserbase (https://browserbase.com) cloud browser backend.

    Direct credentials only — managed-Nous-gateway support lives on the
    Browser Use provider now.
    returnstrc                    dS )Nbrowserbase selfs    H/home/kuhnn/.hermes/hermes-agent/plugins/browser/browserbase/provider.pynamezBrowserbaseBrowserProvider.name5       }    c                    dS )NBrowserbaser   r   s    r   display_namez'BrowserbaseBrowserProvider.display_name9   r   r   boolc                .    |                                  d uS N)_get_config_or_noner   s    r   is_availablez'BrowserbaseBrowserProvider.is_available=   s    ''))55r   Optional[Dict[str, Any]]c                    t           j                            d          }t           j                            d          }|r9|r7||t           j                            dd                              d          dS d S )NBROWSERBASE_API_KEYBROWSERBASE_PROJECT_IDBROWSERBASE_BASE_URLzhttps://api.browserbase.com/)api_key
project_idbase_url)osenvirongetrstrip)r   r#   r$   s      r   r   z.BrowserbaseBrowserProvider._get_config_or_noneD   sy    *..!677Z^^$<==
 	z 	"(JNN*,I &++   tr   Dict[str, Any]c                P    |                                  }|t          d          |S )NzZBrowserbase requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID environment variables.)r   
ValueError)r   configs     r   _get_configz&BrowserbaseBrowserProvider._get_configQ   s6    ))++>)   r   task_idDict[str, object]c                   |                                  }t          j                            dd                                          dk    }t          j                            dd                                          dk    }t          j                            dd                                          dk    }t          j                            d          }dddddd	}d
|d         i}|rd|d<   |rG	 t          |          }	|	dk    r|	|d<   n+# t          $ r t                              d|           Y nw xY w|rd|d<   |rddi|d<   d|d         d}
	 t          j
        |d          d|
|d          }d}d}|j        dk    r|rSd}t                              d           |                    dd            t          j
        |d          d|
|d          }|j        dk    rU|rSd}t                              d           |                    dd            t          j
        |d          d|
|d          }n*# t          j        $ r}t          d|           |d }~ww xY w|j        st          d|j         d|j                   |                                }d | d!t%          j                    j        d d"          }|r|sd|d<   |rd|d#<   |r|sd|d$<   |r	d|v rd|d%<   d&                    d' |                                D                       }t                              d(||           ||d)         |d*         |d+S ),NBROWSERBASE_PROXIEStruefalseBROWSERBASE_ADVANCED_STEALTHBROWSERBASE_KEEP_ALIVEBROWSERBASE_SESSION_TIMEOUTTF)basic_stealthproxiesadvanced_stealth
keep_alivecustom_timeout	projectIdr$   	keepAliver   timeoutz-Invalid BROWSERBASE_SESSION_TIMEOUT value: %sr9   advancedStealthbrowserSettingsapplication/jsonr#   )Content-TypeX-BB-API-Keyr%   z/v1/sessions   headersjsonr?   i  zhkeepAlive may require paid plan (402), retrying without it. Sessions may timeout during long operations.zYProxies unavailable (402), retrying without proxies. Bot detection may be less effective.z#Browserbase API connection failed: z&Failed to create Browserbase session:  hermes__   r:   r;   r<   z, c              3  $   K   | ]\  }}||V  d S r   r   ).0kvs      r   	<genexpr>z<BrowserbaseBrowserProvider.create_session.<locals>.<genexpr>   s+      LLda!LLLLLLLr   z0Created Browserbase session %s with features: %sid
connectUrl)session_namebb_session_idcdp_urlfeatures)r.   r&   r'   r(   lowerintr,   loggerwarningrequestspoststatus_codepopRequestExceptionRuntimeErroroktextrH   uuiduuid4hexjoinitemsinfo)r   r/   r-   enable_proxiesenable_advanced_stealthenable_keep_alivecustom_timeout_msfeatures_enabledsession_configtimeout_valrG   responseproxies_fallbackkeepalive_fallbackexcsession_datarT   feature_strs                     r   create_sessionz)BrowserbaseBrowserProvider.create_session^   sz   !!## (=vFFLLNNRYYJNN97CCIIKKvU 	  JNN3V<<BBDDO 	 JNN+HII " %#
 
 .9&:N,O 	/*.N;' 	!"344??0;N9-   CEV    
  	-(,N9%" 	J1BD0IN,- /"9-
 

+	}*%333#	  H  %!& #s**$ )-&NNG   #&&{D999'}!*-;;; '+ "	     H '3..>.'+$NN?   #&&y$777'}!*-;;; '+ "	     H ( 	 	 	;c;; 	
 { 	:': :*2-: :  
  }}AAA4:<<+;BQB+?AA 	/"2 	/*.Y'" 	837/0 	2%7 	2-1\* 	6n!<!<15-.iiLL.>.D.D.F.FLLLLL>k	
 	
 	

 ))$/#L1(	
 
 	
s+   2D %D54D5C%H: :I!	II!
session_idc                   	 |                                  }n,# t          $ r t                              d|           Y dS w xY w	 t	          j        |d          d| |d         dd|d         d	d
d          }|j        dv rt                              d|           dS t                              d||j        |j        d d                    dS # t          $ r'}t          
                    d||           Y d }~dS d }~ww xY w)Nu;   Cannot close Browserbase session %s — missing credentialsFr%   /v1/sessions/r#   rB   rD   rC   r$   REQUEST_RELEASEr=   status
   rF   >            z*Successfully closed Browserbase session %sTz(Failed to close session %s: HTTP %s - %sr   z,Exception closing Browserbase session %s: %s)r.   r,   rZ   r[   r\   r]   r^   debugrc   	Exceptionerror)r   rx   r-   rq   es        r   close_sessionz(BrowserbaseBrowserProvider.close_session   s`   	%%''FF 	 	 	NNMz   55			}*%@@J@@$*9$5$6 
 "(!5/    H #66I:VVVt>(M$3$'	   u 	 	 	LLGUVWWW55555	s-    %A A AC /C 
DC<<DNonec                @   |                                  }|t                              d|           d S 	 t          j        |d          d| |d         dd|d         dd	d
           d S # t
          $ r'}t                              d||           Y d }~d S d }~ww xY w)NuG   Cannot emergency-cleanup Browserbase session %s — missing credentialsr%   rz   r#   rB   r{   r$   r|   r}      rF   z7Emergency cleanup failed for Browserbase session %s: %s)r   rZ   r[   r\   r]   r   r   )r   rx   r-   r   s       r   emergency_cleanupz,BrowserbaseBrowserProvider.emergency_cleanup   s   ))++>NNY   F	M*%@@J@@$*9$5$6 
 "(!5/         	 	 	LLI:WX        	s   5A, ,
B6BBc                $    ddddddddd	d
gddS )Nr   paidz&Cloud browser with stealth and proxiesr   zBrowserbase API keyzhttps://browserbase.com)keyprompturlr    zBrowserbase project ID)r   r   agent_browser)r   badgetagenv_vars
post_setupr   r   s    r   get_setup_schemaz+BrowserbaseBrowserProvider.get_setup_schema  sK    !; 134  46 
 *
 
 	
r   N)r
   r   )r
   r   )r
   r   )r
   r*   )r/   r   r
   r0   )rx   r   r
   r   )rx   r   r
   r   )__name__
__module____qualname____doc__propertyr   r   r   r   r.   rw   r   r   r   r   r   r   r	   r	   .   s             X    X6 6 6 6      y
 y
 y
 y
v# # # #J   4
 
 
 
 
 
r   r	   )r   
__future__r   loggingr&   rd   typingr   r   r   r\   agent.browser_providerr   	getLoggerr   rZ   r	   r   r   r   <module>r      s    > # " " " " "  				  & & & & & & & & & &  2 2 2 2 2 2		8	$	${
 {
 {
 {
 {
 {
 {
 {
 {
 {
r   