+
    lHàj'$  ã                  ó    € R t ^ RIHt ^RIHtHt ]! 4       t0 RmtR R ltR R lt	RR R llt
R	 R
 ltR R ltR R ltR R ltR R ltR# )z¸Browser connect/disconnect helpers for the browser.* RPCs (CDP probing, no network I/O on
status). Bodies are rebound onto server.py's globals at install time (method_ctx.bind_module).)Úannotations)ÚHandlerRegistryÚbind_modulec               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚstr© )Úformats   "Ú@/home/ubuntu/.hermes/hermes-agent/tui_gateway/methods_browser.pyÚ__annotate__r      s   € ÷ ñ  #ñ ó    c                 óè  € ^ RI Hp Hp V! 4       ;'       g    V ! 4       ;p'       d   V# \        P	                  \
        4      ;_uu_ 4        ^ RIHp V! 4       p\        V\        4      '       d   VP                  R/ 4      M/ p\        V\        4      '       d>   \        VP                  RR4      ;'       g    R4      P                  4       uuRRR4       #  RRR4       R#   + '       g   i     R# ; i)a4  Configured browser CDP override without network I/O (``/browser status`` must be fast;
``tools.browser_tool_cdp._get_cdp_override`` HTTP-probes discovery URLs). Same precedence (this
profile's live connect, env, then ``browser.cdp_url``) minus WS resolution; ``browser_navigate``
normalizes on the next call.)Úenv_cdp_urlÚlive_cdp_override)Úread_raw_configÚbrowserÚcdp_urlÚ N)Útools.browser_tool_cdpr   r   Ú
contextlibÚsuppressÚ	ExceptionÚhermes_cli.configr   Ú
isinstanceÚdictÚgetr   Ústrip)r   r   Úenv_urlr   ÚcfgÚbrowser_cfgs         r   Ú_resolve_browser_cdp_urlr!      sµ   € ÷
 FÙ#Ó%×6Ð6©«Ð6€wÖ6ØˆÜ	×	Ñ	œY×	'Õ	'Ý5ÙÓˆÜ0:¸3Ä×0EÒ0E�c—g‘g˜i¨Ô,È2ˆÜ�k¤4×(Ò(Ü�{—‘ y°"Ó5×;Ð;¸Ó<×BÑBÓD÷ 
(Ò	'ð )÷	 
(ñ ÷ 
(Ö	'ñ ús   Á
A+C Â6C Ã C1	c               ó   € V ^8„  d   QhRR/# )r   r   Úboolr	   )r
   s   "r   r   r      s   € ÷ ñ  Tñ r   c                ó>  € \         P                  \        4      ;_uu_ 4        V P                  R9   ;'       dH    V P                  R9   ;'       d1    V P
                  ;'       g    ^PR8H  ;'       d    V P                  R9   uuRRR4       #   + '       g   i     R# ; i)uÓ   Match the discovery-style local default; never the concrete WS form â€” a
``ws://127.0.0.1:9222/devtools/browser/<id>`` is connectable as-is and collapsing it to bare
``http://...:9222`` would break the connect.é$  NF>   ÚwsÚhttp>   Ú	localhostú	127.0.0.1>   r   Ú/ú/jsonú/json/version)r   r   Ú
ValueErrorÚschemeÚhostnameÚportÚpath)Úparseds   &r   Ú_is_default_local_cdpr3      s†   € ô 
×	Ñ	œZ×	(Õ	(Ø—‘ Ñ/÷ gð g°F·O±OÐGaÑ4a÷ gð gØ—[‘[×&Ð& B¨4Ñ/÷gð gØ4:·K±KÐCfÑ4f÷ 
)×	(×	(Ñ	(ñ ús   ¢-BÁBÁ$BÁ1BÂB	c               ó    € V ^8„  d   QhRRRR/# )r   ÚtimeoutÚfloatr   r#   r	   )r
   s   "r   r   r   (   s   € ÷ 	ñ 	¨ð 	¸ñ 	r   c                ó"  € ^ RI pRRRR/P                  V P                  V P                  4      pV RV P                   2P	                  R4      pV R2V R	23 F‹  p\
        P                  \        4      ;_uu_ 4        VP                  P                  WQR
7      ;_uu_ 4       p^È\        VR^È4      u;8:  d   R8  d   M M RRR4       RRR4        R# RRR4       RRR4       K�  	  R#   + '       g   i     L; i  + '       g   i     Kµ  ; i)zETrue when ``/json/version`` or ``/json`` on the CDP host answers 2xx.Nr&   r'   ÚwssÚhttpsú://r*   r,   r+   ©r5   Ústatusi,  TF)Úurllib.requestr   r.   ÚnetlocÚrstripr   r   r   ÚrequestÚurlopenÚgetattr)r2   r5   Úurllibr.   ÚrootÚurlÚresps   &&     r   Ú_cdp_http_reachablerG   (   sÕ   € ãØ�F˜E 7Ð+×/Ñ/°·±¸v¿}¹}ÓM€FØˆX�S˜Ÿ™˜Ð(×/Ñ/°Ó4€DØ�&˜Ð&¨4¨&°¨Ó7ˆÜ× Ñ ¤×+Õ+¨V¯^©^×-CÑ-CÀCÐ-C×-YÔ-YÐ]aØ”g˜d H¨cÓ2Ö8°S×8Ø÷ .Z×+Ò+×-Y×+Ñ+ñ 8ñ ÷ .Z×-Yú×+×+Ð+ús*   Á=%C=Â"C*ÃC=ÃC=Ã*C:Ã5C=Ã=Dc               ó$   € V ^8„  d   QhRRRRRR/# )r   r0   ÚintÚsystemr   r   z
str | Noner	   )r
   s   "r   r   r   4   s!   € ÷ +ñ + ð +¨cð +À
ñ +r   c                óž  € ^ RI HpHpHpHpHp V! V RR7      pVe   V! RV 24       V# T p	V! V 4      '       d   V! V 4      p	V! RV  RV	 R24       MV! R	4       V! W‘4      p
V
P                  '       d_   \        P                  4       R
,           p\        P                  4       V8  d+   V! V	RR7      ;p'       d   M\        P                  R4       KC  V'       d   V! RV	 24       V# V
P                  '       d   V! V
P                  RR7       V! W‘4      pV'       d   RV.MRRV	 R2.pVP                  R4       V F  pV! VRR7       K  	  R# )u[   Discover (or launch) the default local debug browser â†’ CDP URL, or None after announcing.)Údiscover_local_cdp_urlÚfind_free_debug_portÚlaunch_chrome_debugÚlocal_port_in_useÚmanual_chrome_debug_commandç       @r;   Nz0Chromium-family browser is already listening at zPort u“    is occupied by another application that isn't a CDP browser (an IDE debugger or dev server may be using it) â€” launching a debug browser on port z instead...uW   Chromium-family browser isn't running with remote debugging â€” attempting to launch...g      $@g      ð?g      à?z7Chromium-family browser launched and listening on port Úerror)ÚlevelzSStart a Chromium-family browser with remote debugging, then retry /browser connect:zNNo supported Chromium-family browser executable was found in this environment.zLInstall one or start a Chromium-family browser with --remote-debugging-port=z, then retry /browser connect.uj   Browser not connected â€” start a Chromium-family browser with remote debugging and retry /browser connect)Úhermes_cli.browser_connectrL   rM   rN   rO   rP   ÚlaunchedÚtimeÚ	monotonicÚsleepÚhintÚappend)r0   rJ   ÚannouncerL   rM   rN   rO   rP   Ú
discoveredÚlaunch_portÚlaunchÚdeadlineÚcommandÚhintsÚlines   &&&            r   Ú_connect_local_defaultrc   4   sb  € ÷%õ %ñ (¨°cÔ:€JØÒÙÐCÀJÀ<ÐPÔQØÐØ€KÙ˜×ÒÙ*¨4Ó0ˆÙ�5˜˜ð à'˜=¨ð5õ 	6ñ 	ÐjÔkÙ  Ó5€FØ‡‡€ä—>‘>Ó# dÕ*ˆÜ�n‰nÓ Ô)Ù3°KÈÔMÐMˆzÖMØÜ�J‰J�sŽOßÙÐJÈ;È-ÐXÔYØÐØ‡{‡{€{Ù�—‘ GÕ,Ù)¨+Ó>€G÷ ð 
_Ð`gÑhà\ØZÐ[fÐZgð  hFð  GðHð 
ð
 
‡L�LÐ}Ô~ÛˆÙ�˜W×%ñ ár   c               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner	   )r
   s   "r   r   r   b   s   € ÷ 0ñ 0 ñ 0r   c                 ó8   € ^ RI Hp  ^ RIHp V! V ! 4       4       R# )z�Close the current profile's browsers only: the live connection is per profile, so other
profiles' sessions on a multiplexed gateway keep theirs.)Úhermes_home_key)Úcleanup_profile_browsersN)Úhermes_constantsrh   Útools.browser_tool_lifecycleri   )rh   ri   s     r   Ú_reap_profile_browsersrl   b   s   € õ 1ÝEÙ™_Ó.Ö/r   c               ó    € V ^8„  d   QhRRRR/# )r   Úparamsr   r   r	   )r
   s   "r   r   r   j   s   € ÷ =Fñ =F $ð =F¨4ñ =Fr   c           	     óÌ  aa€ ^ RI p^ RIHp ^ RIHp ^ RIHp VP                  R4      pVe:   \        V\        4      '       g$   \        V RR\        V4      P                   24      # T;'       g    RP                  4       ;'       g    TpVP                  R	4      ;'       g    RVP                  4       . uopoR
R/R VV3R lllp	T! RV9   d   TMRV 24      p
V
P                  \         9  d   \        V RRV 24      # V
P"                  '       g   \        V RRV 24      #  V
P$                  ;'       g    V
P                  R 9   d   RM^Pp\)        T
4      '       d!   TpT! T4      p
T
P$                  ;'       g    Rp T
P                  R!9   dY   T
P*                  P-                  R4      '       d8   ^ RIp TP1                  T
P"                  T3RR7      ;_uu_ 4         RRR4       M_\)        T
4      '       d.   \5        Y¸T	4      pTf   \7        T RRRTRS/4      # TpT! T4      p
M!\9        T
4      '       g   \        T RRT 24      # T
P*                  P-                  R4      '       d   T
P;                  4       M"T
P=                  RRRRR7      P;                  4       p\?        4        T! T4       \?        4        \7        T RRRT/S'       d
   RS/C4      # / C4      #   \&         d    \        T RRT 24      u # i ; i  + '       g   i     LÄ; i  \2         d   p\        T RRT RT 24      u Rp?# Rp?ii ; i  \@         d!   p\        T R\        T4      4      u Rp?# Rp?ii ; i)"é    N)ÚDEFAULT_BROWSER_CDP_URL©Úset_live_cdp_override)ÚurlparserE   i¯  z"browser url must be a string, got r   Ú
session_idrS   Úinfoc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úmessager   rS   r   rf   r	   )r
   s   "r   r   Ú&_browser_connect.<locals>.__annotate__u   s&   € ÷ Qñ Q˜#ð Q¨ð Q¸$ñ Qr   c               ó`   <€ SP                  V 4       S'       d   \        R SRV RV/4       R# R# )zbrowser.progressrx   rS   N)rZ   Ú_emit)rx   rS   ÚmessagesÚsids   &$€€r   r[   Ú"_browser_connect.<locals>.announceu   s-   ø€ Ø�‰˜Ô çÜÐ$ c¨I°wÀÈÐ+OÖPñ r   r:   zhttp://zunsupported browser url: zmissing host in browser url: i»  zinvalid port in browser url: r%   z/devtools/browser/rQ   r;   i§  zcould not reach browser CDP at z: Ú	connectedFr|   )r1   rn   ÚqueryÚfragmentT>   r8   r9   >   r&   r8   )!ÚplatformrT   rq   r   rs   Úurllib.parsert   r   r   r   Ú_errÚtypeÚ__name__r   rJ   r.   Ú_CDP_SCHEMESr/   r0   r-   r3   r1   Ú
startswithÚsocketÚcreate_connectionÚOSErrorrc   Ú_okrG   ÚgeturlÚ_replacerl   r   )Úridrn   r‚   rq   rs   rt   Úraw_urlrE   rJ   r[   r2   r0   r‰   Úer\   Ú
normalizedr|   r}   s   &&              @@r   Ú_browser_connectr“   j   sD  ù€ ÛÝBÝ<Ý%Ø�j‰j˜Ó€GØÒ¤:¨g´s×#;Ò#;Ü�C˜Ð!CÄDÈÃM×DZÑDZÐC[Ð\Ó]Ð]Ø�=ˆ=�b×
Ñ
Ó
!×
<Ð
<Ð%<€CØ"ŸJ™J |Ó4×:Ð:¸¸H¿O¹OÓ<MÈrÐ€Cˆ�ðQ¨v÷ Qó Qñ
 ˜U cœ\‘c°¸¸¨Ó?€FØ‡}�}œLÔ(Ü�C˜Ð!:¸3¸%Ð@ÓAÐAØ�?�?ˆ?Ü�C˜Ð!>¸s¸eÐDÓEÐEðFØ�{‰{×PÐP f§m¡mÐ7GÔ&G™sÈRˆô ˜V×$Ò$Ø%ˆÙ˜#“ˆØ�{‰{×"Ð"˜dˆð'ð �=‰=˜MÔ)¨f¯k©k×.DÑ.DÐEY×.ZÒ.ZÛðUØ×-Ñ-¨v¯©ÀÐ.EÈsÐ-×SÕSØ÷ TÐSô # 6×*Ò*Ü/°¸hÓGˆJØÒ!Ü˜3 ¨e°U¸CÀÈXÐ VÓWÐWàˆCÙ˜c“]‰FÜ$ V×,Ò,Ü˜˜TÐ%DÀSÀEÐ#JÓKÐKð *0¯©×)?Ñ)?Ð@T×)UÒ)U�f—m‘m”oØ!Ÿ?™?°¸2ÀRÐRT˜?ÓU×\Ñ\Ó^ð 	ô 	Ô Ù˜jÔ)ÜÔ ô ˆs�[ $¨¨zð Eß2:˜ XÐ.ðEó Fð FØ@BðEó Fð FøôK ô FÜ�C˜Ð!>¸s¸eÐDÓEÒEðFú÷ T×Sûäô UÜ˜C Ð)HÈÈÈRÐPQÈsÐ'SÓTÕTûðUûô( ô 'Ü�C˜œs 1›vÓ&Õ&ûð'ús£   Ä#K Ä6K Å>1L8 Æ0L8 Æ5'L ÇK:ÇL Ç&3L8 È+L8 É L8 É'AL8 ËK7Ë6K7Ë:L
	ÌL Ì	L8 Ì
L ÌL5ÌL0Ì*L5Ì+L8 Ì0L5Ì5L8 Ì8M#ÍMÍM#ÍM#c               ó   € V ^8„  d   QhRR/# )r   r   r   r	   )r
   s   "r   r   r   ª   s   € ÷ *ñ * ñ *r   c                ób   € ^ RI Hp R R lpV! 4        V! R4       V! 4        \        V RR/4      # )rp   rr   c               ó   € V ^8„  d   QhRR/# re   r	   )r
   s   "r   r   Ú)_browser_disconnect.<locals>.__annotate__®   s   € ÷ %ñ %�$ñ %r   c                 ó–   € \         P                  \        4      ;_uu_ 4        \        4        R R R 4       R #   + '       g   i     R # ; i)N)r   r   r   rl   r	   r   r   ÚreapÚ!_browser_disconnect.<locals>.reap®   s(   € Ü× Ñ ¤×+Õ+Ü"Ô$÷ ,×+×+Ò+ús	   ¢7·A	Nr   F)r   rs   rŒ   )r�   rs   r™   s   &  r   Ú_browser_disconnectr›   ª   s0   € å<õ%ñ 	„FÙ˜$ÔÙ„FÜˆs�[ %Ð(Ó)Ð)r   c               ó   € V ^8„  d   QhRR/# re   r	   )r
   s   "r   r   r   ¸   s   € ÷ 0ñ 0˜ñ 0r   c                ó2   € \        \        4       V RR7       R# )zQPublish this module's helpers + handlers onto ``server``, rebound to its globals.)ÚskipN)Ú_)r   Úglobals)Úservers   &r   Úregisterr¢   ¸   s   € ä”“	˜6¨×/r   N>   r&   r8   r'   r9   )rQ   )Ú__doc__Ú
__future__r   Ú
method_ctxr   r   Ú	_registryr‡   r!   r3   rG   rc   rl   r“   r›   r¢   r	   r   r   Ú<module>r§      sK   ðñbõ #ç 4áÓ€	â-€õõ"÷	õ+õ\0õ=Fõ@*÷0r   