
    epj)                        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 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=... (seconds, integer, max 21600 = 6h)
    )annotationsN)AnyDictOptional)BrowserProvider)
get_secretc                  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    J/home/thesage/.hermes/hermes-agent/plugins/browser/browserbase/provider.pynamezBrowserbaseBrowserProvider.name6       }    c                    dS )NBrowserbaser   r   s    r   display_namez'BrowserbaseBrowserProvider.display_name:   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          d          }t          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)r   osenvirongetrstrip)r   r$   r%   s      r   r   z.BrowserbaseBrowserProvider._get_config_or_noneE   sm    233 899
 	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_configR   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: %sr:   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textrI   uuiduuid4hexjoinitemsinfo)r   r0   r.   enable_proxiesenable_advanced_stealthenable_keep_alivecustom_timeout_msfeatures_enabledsession_configtimeout_valrH   responseproxies_fallbackkeepalive_fallbackexcsession_datarU   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$   rC   rE   rD   r%   REQUEST_RELEASEr>   status
   rG   >            z*Successfully closed Browserbase session %sTz(Failed to close session %s: HTTP %s - %sr   z,Exception closing Browserbase session %s: %s)r/   r-   r[   r\   r]   r^   r_   debugrd   	Exceptionerror)r   ry   r.   rr   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&   r{   r$   rC   r|   r%   r}   r~      rG   z7Emergency cleanup failed for Browserbase session %s: %s)r   r[   r\   r]   r^   r   r   )r   ry   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   r   )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+   )r0   r   r   r1   )ry   r   r   r   )ry   r   r   r   )__name__
__module____qualname____doc__propertyr   r   r   r   r/   rx   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'   re   typingr   r   r   r]   agent.browser_providerr   agent.secret_scoper   	getLoggerr   r[   r
   r   r   r   <module>r      s    > # " " " " "  				  & & & & & & & & & &  2 2 2 2 2 2 ) ) ) ) ) )		8	$	$}
 }
 }
 }
 }
 }
 }
 }
 }
 }
r   