+
    KÿÎin  ã                   ó<   € R t ^ RIHtHt ^ RIHt  ! R R]4      tR# )z0Abstract base class for cloud browser providers.)ÚABCÚabstractmethod)ÚDictc                   ó°   a € ] tR t^t o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t	]V 3R
 lR l4       t
RtV tR# )ÚCloudBrowserProvidera/  Interface for cloud browser backends (Browserbase, Steel, etc.).

Implementations live in sibling modules and are registered in
``browser_tool._PROVIDER_REGISTRY``.  The user selects a provider via
``hermes setup`` / ``hermes tools``; the choice is persisted as
``config["browser"]["cloud_provider"]``.
c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Ústr)ÚformatÚ__classdict__s   "€Ú9/home/ubuntu/hermes-agent/tools/browser_providers/base.pyÚ__annotate__Ú!CloudBrowserProvider.__annotate__   s   ø€ ÷ Hñ H™sñ Hó    c                ó   € R# )z9Short, human-readable name shown in logs and diagnostics.N© ©Úselfs   &r   Úprovider_nameÚ"CloudBrowserProvider.provider_name   ó   ‚ r   c                ó    <€ V ^8„  d   QhRS[ /# r   )Úbool)r   r   s   "€r   r   r      s   ø€ ÷ ñ ™tñ r   c                ó   € R# )uÀ   Return True when all required env vars / credentials are present.

Called at tool-registration time (``check_browser_requirements``) to
gate availability.  Must be cheap â€” no network calls.
Nr   r   s   &r   Úis_configuredÚ"CloudBrowserProvider.is_configured   r   r   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[3,          /# )r	   Útask_idr
   )r   r   Úobject)r   r   s   "€r   r   r      s$   ø€ ÷ ñ ¡cð ©d±3¹°;Õ.?ñ r   c                ó   € R# )u$  Create a cloud browser session and return session metadata.

Must return a dict with at least::

    {
        "session_name": str,   # unique name for agent-browser --session
        "bb_session_id": str,  # provider session ID (for close/cleanup)
        "cdp_url": str,        # CDP websocket URL
        "features": dict,      # feature flags that were enabled
    }

``bb_session_id`` is a legacy key name kept for backward compat with
the rest of browser_tool.py â€” it holds the provider's session ID
regardless of which provider is in use.
Nr   )r   r    s   &&r   Úcreate_sessionÚ#CloudBrowserProvider.create_session   r   r   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r	   Ú
session_idr
   )r   r   )r   r   s   "€r   r   r   /   s   ø€ ÷ ñ ©ð ±ñ r   c                ó   € R# )zRelease / terminate a cloud session by its provider session ID.

Returns True on success, False on failure.  Should not raise.
Nr   ©r   r&   s   &&r   Úclose_sessionÚ"CloudBrowserProvider.close_session.   r   r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r	   r&   r
   Nr   )r   r   s   "€r   r   r   6   s   ø€ ÷ ñ ©Cð °Dñ r   c                ó   € R# )u§   Best-effort session teardown during process exit.

Called from atexit / signal handlers.  Must tolerate missing
credentials, network errors, etc. â€” log and move on.
Nr   r(   s   &&r   Úemergency_cleanupÚ&CloudBrowserProvider.emergency_cleanup5   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r#   r)   r-   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      sp   ø‡ € ñð ÷Hó ðHð ÷ó ðð ÷ó ðð" ÷ó ðð ÷ó ör   r   N)r3   Úabcr   r   Útypingr   r   r   r   r   Ú<module>r8      s   ðÙ 6ç #Ý ô4˜3ö 4r   