§
    øžyj‚  ã                  óž   — 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 ddl	Z	ddl
mZ ddlmZ  ej        e¦  «        ZdZ G d„ d	e¦  «        ZdS )
u  Firecrawl 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.firecrawl`` was removed in the same PR; this file
is now the canonical implementation.

This is the cloud-browser path â€” distinct from the firecrawl WEB plugin at
``plugins/web/firecrawl/`` which handles search/extract/crawl on
``/v2/search`` / ``/v2/scrape`` / ``/v2/crawl``. The two plugins share the
``FIRECRAWL_API_KEY`` env var but talk to different endpoints (this one
hits ``/v2/browser``).

Config keys this provider responds to::

    browser:
      cloud_provider: "firecrawl"   # explicit selection only â€” not in the
                                    # legacy auto-detect walk

Auth env vars::

    FIRECRAWL_API_KEY=...           # https://firecrawl.dev
    FIRECRAWL_API_URL=...           # optional override (default https://api.firecrawl.dev)
    FIRECRAWL_BROWSER_TTL=...       # optional, default 300 seconds
é    )ÚannotationsN)ÚAnyÚDict)ÚBrowserProvider)Ú
get_secretzhttps://api.firecrawl.devc                  ó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 )ÚFirecrawlBrowserProvideru¯   Firecrawl (https://firecrawl.dev) cloud browser backend.

    Cloud-browser path only â€” search/extract/crawl live in the separate
    ``plugins/web/firecrawl/`` plugin.
    ÚreturnÚstrc                ó   — dS )NÚ	firecrawl© ©Úselfs    úH/home/ragecks/.hermes/hermes-agent/plugins/browser/firecrawl/provider.pyÚnamezFirecrawlBrowserProvider.name3   ó   € àˆ{ó    c                ó   — dS )NÚ	Firecrawlr   r   s    r   Údisplay_namez%FirecrawlBrowserProvider.display_name7   r   r   Úboolc                ó:   — t          t          d¦  «        ¦  «        S )NÚFIRECRAWL_API_KEY)r   r   r   s    r   Úis_availablez%FirecrawlBrowserProvider.is_available;   s   € Ý•JÐ2Ñ3Ô3Ñ4Ô4Ð4r   c                óL   — t           j                             dt          ¦  «        S )NÚFIRECRAWL_API_URL)ÚosÚenvironÚgetÚ	_BASE_URLr   s    r   Ú_api_urlz!FirecrawlBrowserProvider._api_urlB   s   € ÝŒz�~Š~Ð1µ9Ñ=Ô=Ð=r   úDict[str, str]c                óR   — t          d¦  «        }|st          d¦  «        ‚dd|› �dœS )Nr   zYFIRECRAWL_API_KEY environment variable is required. Get your key at https://firecrawl.devzapplication/jsonzBearer )zContent-TypeÚAuthorization)r   Ú
ValueError)r   Úapi_keys     r   Ú_headersz!FirecrawlBrowserProvider._headersE   sN   € ÝÐ0Ñ1Ô1ˆØð 	Ýð8ñô ð ð
 /Ø0 wÐ0Ð0ð
ð 
ð 	
r   Útask_idúDict[str, object]c                ó�  — 	 t          t          j                             dd¦  «        ¦  «        }n# t          t
          f$ r d}Y nw xY wd|i}	 t          j        |                      ¦   «         › 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…         › �}t&                               d|¦  «         ||d         |d         ddidœS )NÚFIRECRAWL_BROWSER_TTLÚ300i,  Úttlz/v2/browseré   )ÚheadersÚjsonÚtimeoutz!Firecrawl API connection failed: z,Failed to create Firecrawl browser session: Ú Úhermes_Ú_é   z$Created Firecrawl browser session %sÚidÚcdpUrlr   T)Úsession_nameÚbb_session_idÚcdp_urlÚfeatures)Úintr   r   r    r&   Ú	TypeErrorÚrequestsÚpostr"   r(   ÚRequestExceptionÚRuntimeErrorÚokÚstatus_codeÚtextr1   ÚuuidÚuuid4ÚhexÚloggerÚinfo)r   r)   r.   ÚbodyÚresponseÚexcÚdatar9   s           r   Úcreate_sessionz'FirecrawlBrowserProvider.create_sessionQ   s˜  € ð	Ý•b”j—n’nÐ%<¸eÑDÔDÑEÔEˆCˆCøÝ�IÐ&ð 	ð 	ð 	ØˆCˆCˆCð	øøøð $)¨# ,ˆð
	Ý”}Ø—=’=‘?”?Ð/Ð/Ð/ØŸš™œØØð	ñ ô ˆHˆHøõ Ô(ð 	ð 	ð 	ÝØ9°CÐ9Ð9ñô àðøøøøð	øøøð
 Œ{ð 	Ýð:ØÔ'ð:ð :Ø*2¬-ð:ð :ñô ð ð
 �}Š}‰ŒˆØA ÐAÐA­4¬:©<¬<Ô+;¸B¸Q¸BÔ+?ÐAÐAˆå�ŠÐ:¸LÑIÔIÐIð )Ø! $œZØ˜H”~Ø$ dÐ+ð	
ð 
ð 	
s'   ‚-0 °AÁAÁ?B ÂB5ÂB0Â0B5Ú
session_idc                óš  — 	 t          j        |                      ¦   «         › 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)Nú/v2/browser/é
   ©r0   r2   >   éÈ   éÉ   éÌ   z(Successfully closed Firecrawl session %sTz2Failed to close Firecrawl session %s: HTTP %s - %srU   Fz*Exception closing Firecrawl session %s: %s)r?   Údeleter"   r(   rD   rI   ÚdebugÚwarningrE   Ú	ExceptionÚerror)r   rP   rL   Úes       r   Úclose_sessionz&FirecrawlBrowserProvider.close_sessionw   sé   € ð	Ý”Ø—=’=‘?”?Ð<Ð<°
Ð<Ð<ØŸš™œØðñ ô ˆHð
 Ô# Ð6Ð6Ý—’ÐGÈÑTÔTÐTØ�tå—’ØHØØÔ(Ø”M $ 3 $Ô'ñ	ô ð ð �uøÝð 	ð 	ð 	Ý�LŠLÐEÀzÐSTÑUÔUÐUØ�5�5�5�5�5øøøøð	øøøs   ‚A$B Á(/B Â
C
Â#CÃC
ÚNonec                óR  — |                       ¦   «         st                               d|¦  «         d S 	 t          j        |                      ¦   «         › d|› �|                      ¦   «         d¬¦  «         d S # t          $ r'}t                               d||¦  «         Y d }~d S d }~ww xY w)NuE   Cannot emergency-cleanup Firecrawl session %s â€” missing credentialsrR   é   rT   z5Emergency cleanup failed for Firecrawl session %s: %s)	r   rI   rZ   r?   rX   r"   r(   r[   rY   )r   rP   r]   s      r   Úemergency_cleanupz*FirecrawlBrowserProvider.emergency_cleanup�   så   € Ø× Ò Ñ"Ô"ð 	Ý�NŠNØWØñô ð ð ˆFð		ÝŒOØ—=’=‘?”?Ð<Ð<°
Ð<Ð<ØŸš™œØðñ ô ð ð ð øõ
 ð 	ð 	ð 	Ý�LŠLØGÈÐUVñô ð ð ð ð ð ð ð øøøøð	øøøs   ³A A5 Á5
B&Á?B!Â!B&úDict[str, Any]c                ó   — dddddddœgdd	œS )
Nr   Úpaidz#Cloud browser with remote executionr   zFirecrawl API keyzhttps://firecrawl.dev)ÚkeyÚpromptÚurlÚbrowserbase)r   ÚbadgeÚtagÚenv_varsÚ
post_setupr   r   s    r   Úget_setup_schemaz)FirecrawlBrowserProvider.get_setup_schemaŸ   s9   € àØØ8ð /Ø1Ø2ðð ðð (ð
ð 
ð 	
r   N)r
   r   )r
   r   )r
   r#   )r)   r   r
   r*   )rP   r   r
   r   )rP   r   r
   r_   )r
   rc   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r"   r(   rO   r^   rb   rn   r   r   r   r	   r	   ,   së   € € € € € ðð ð ðð ð ñ „Xðð ðð ð ñ „Xðð5ð 5ð 5ð 5ð>ð >ð >ð >ð

ð 

ð 

ð 

ð$
ð $
ð $
ð $
ðLð ð ð ð,ð ð ð ð$
ð 
ð 
ð 
ð 
ð 
r   r	   )rr   Ú
__future__r   Úloggingr   rF   Útypingr   r   r?   Úagent.browser_providerr   Úagent.secret_scoper   Ú	getLoggerro   rI   r!   r	   r   r   r   ú<module>rz      sØ   ððð ð4 #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð à €€€à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø )Ð )Ð )Ð )Ð )Ð )à	ˆÔ	˜8Ñ	$Ô	$€à'€	ðB
ð B
ð B
ð B
ð B
˜ñ B
ô B
ð B
ð B
ð B
r   