Ë
    áß²jy  ã                  ób   — d Z ddlmZ ddlZddlmZ ddlmZ  G d„ de«      Zddlm	Z	 dd	lm
Z
 y)
u0  Browser Provider ABC: pluggable cloud browser backends (Browserbase, Browser Use, Firecrawl, â€¦).

Providers register via :meth:`PluginContext.register_browser_provider`; the active one (selected by
``browser.cloud_provider``) services every cloud-mode ``browser_*`` tool call. They live in
``<repo>/plugins/browser/<name>/`` (built-in) or ``~/.hermes/plugins/browser/<name>/`` (user).

Session metadata contract (legacy ``CloudBrowserProvider`` shape; ``tools.browser_tool`` needs no
translation). ``bb_session_id`` is a legacy key name kept verbatim â€” it holds the provider's session ID
regardless of provider::

    {
        "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
        "expires_at": str,          # optional provider-authoritative ISO timestamp
        "features": dict,           # feature flags that were enabled
        "external_call_id": str,    # optional, managed-gateway billing key
    }
é    )ÚannotationsN)ÚDict)ÚProviderBasec                  ó¨   — e Zd ZdZej
                  dd„«       Zej
                  dd„«       Zej
                  d	d„«       Zej
                  d
d„«       Z	y)ÚBrowserProviderak  Abstract base class for a cloud browser backend.

    Subclasses implement :attr:`name` (the ``browser.cloud_provider`` value), :meth:`is_available`, and
    the lifecycle trio :meth:`create_session` / :meth:`close_session` / :meth:`emergency_cleanup`.
    ``get_setup_schema`` may add ``"post_setup"`` (e.g. ``"agent_browser"``) to trigger the install hook.
    c                 ó   — y)uÚ   True when this provider can service calls. Cheap check only (env var, token readable, dep
        importable) â€” must NOT make network calls; runs at tool-registration time and on every
        ``hermes tools`` paint.N© )Úselfs    ú;/home/ubuntu/.hermes/hermes-agent/agent/browser_provider.pyÚis_availablezBrowserProvider.is_available%   ó   � ó    c                 ó   — y)zíCreate a cloud browser session and return the metadata dict from the module docstring.
        May raise ``ValueError`` (missing credentials) or ``RuntimeError`` (network / API failure);
        the dispatcher surfaces these to the user.Nr	   )r
   Útask_ids     r   Úcreate_sessionzBrowserProvider.create_session+   r   r   c                 ó   — y)z¹Release a cloud session by provider session ID. Returns True on success, False on failure;
        should not raise (log and return False so the dispatcher's cleanup loop keeps moving).Nr	   ©r
   Ú
session_ids     r   Úclose_sessionzBrowserProvider.close_session1   r   r   c                 ó   — y)z�Best-effort teardown from atexit / signal handlers. Must tolerate missing credentials and
        network errors; must not raise.Nr	   r   s     r   Úemergency_cleanupz!BrowserProvider.emergency_cleanup6   r   r   N)ÚreturnÚbool)r   Ústrr   zDict[str, object])r   r   r   r   )r   r   r   ÚNone)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚabcÚabstractmethodr   r   r   r   r	   r   r   r   r      sq   „ ñð 	×Ñò#ó ð#ð
 	×Ñò6ó ð6ð
 	×Ñòbó ðbð 	×Ñò+ó ñ+r   r   )ÚAny)ÚOptional)r   Ú
__future__r   r    Útypingr   Úagent.provider_baser   r   r"   r#   r	   r   r   ú<module>r'      s-   ðñõ( #ã 
Ý å ,ô+�lô +õF Þ r   