
    ژjQ                    R   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 dZ
de
 ZdZdZ ed	 eD                       Z ed
 eD                       ZdZ ed eD                       Z ed eD                       Zd"dZd#dZd$dZd%d&dZe
dfd'dZd(d Ze
dfd)d!ZdS )*zHShared helpers for attaching Hermes to a local Chromium-family CDP port.    )annotationsN)get_hermes_homei$  zhttp://127.0.0.1:)z</Applications/Google Chrome.app/Contents/MacOS/Google Chromez2/Applications/Chromium.app/Contents/MacOS/Chromiumz</Applications/Brave Browser.app/Contents/MacOS/Brave Browserz>/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge)))
chrome.exechrome))GoogleChromeApplicationr   ))chromium.exechromium))Chromiumr	   r   )r   r	   r
   ))	brave.exebrave))BraveSoftwarezBrave-Browserr	   r   ))
msedge.exemsedge))	MicrosoftEdger	   r   c              #  *   K   | ]\  }}|D ]}|V  d S N .0names_names       ?/home/ubuntu/.hermes/hermes-agent/hermes_cli/browser_connect.py	<genexpr>r   "   s4      ZZHE1TYZZD4ZZZZZZZ    c              #  *   K   | ]\  }}|D ]}|V  d S r   r   )r   r   grouppartss       r   r   r   #   s5      ``EZ_``QVu```````r   )))zgoogle-chromezgoogle-chrome-stable)z/opt/google/chrome/chromez/usr/bin/google-chromez/usr/bin/google-chrome-stable))zchromium-browserr   )z/usr/bin/chromium-browserz/usr/bin/chromium))zbrave-browserzbrave-browser-stabler   )z/usr/bin/brave-browserz/usr/bin/brave-browser-stablez/usr/bin/bravez/snap/bin/bravez"/opt/brave.com/brave/brave-browserz/opt/brave.com/brave/bravez/opt/brave-bin/brave))zmicrosoft-edgezmicrosoft-edge-stabler   )z/usr/bin/microsoft-edgez/usr/bin/microsoft-edge-stablez$/opt/microsoft/msedge/microsoft-edgez/opt/microsoft/msedge/msedgec              #  *   K   | ]\  }}|D ]}|V  d S r   r   r   s       r   r   r   E   s4      VV(%PUVVVVVVVVVr   c              #  *   K   | ]\  }}|D ]}|V  d S r   r   )r   r   pathspaths       r   r   r   F   s4      ZZhaTYZZDTZZZZZZZr   systemstrreturn	list[str]c           	        g t                      dfddfd
}| dk    rt          D ]} |           S | dk    rt          j                            d          t          j                            d          t          j                            d          f}t
          D ]_\  }}|D ]} t          j        |                      t          d |          D ]'}|D ]"} t          j	        j
        |g|R             #(`S t          D ]7\  }}	|D ]} t          j        |                      |	D ]}
 |
           8 |dt
                     S )Nr%   
str | Noner(   Nonec                &   | sd S t           j                            t           j                            |                     }|v st           j                            |           sd S                     |                                |           d S r   )osr%   normcasenormpathisfileappendadd)r%   
normalized
candidatesseens     r   r3   z(get_chrome_debug_candidates.<locals>.addM   s     	FW%%bg&6&6t&<&<==
RW^^D%9%9F$r   basestuple[str | None, ...]install_groups?tuple[tuple[tuple[str, ...], tuple[tuple[str, ...], ...]], ...]c           	         |D ]=\  }}t          d |           D ]'}|D ]"} t          j        j        |g|R             #(>d S r   )filterr.   r%   join)r7   r9   r   r    baser!   r3   s         r   add_windows_install_pathsz>get_chrome_debug_candidates.<locals>.add_windows_install_pathsV   s{     ' 	4 	4HAutU++ 4 4" 4 4ECT2E222333344	4 	4r   DarwinWindowsProgramFileszProgramFiles(x86)LOCALAPPDATA)z/mnt/c/Program Filesz/mnt/c/Program Files (x86))r%   r+   r(   r,   )r7   r8   r9   r:   r(   r,   )set_DARWIN_APPSr.   environget_WINDOWS_BROWSER_GROUPSshutilwhichr<   r%   r=   _LINUX_BROWSER_GROUPS)r&   r?   appinstall_basesr   install_partsr   r>   r!   r$   r%   r3   r5   r6   s              @@@r   get_chrome_debug_candidatesrO   I   s   JUUD      4 4 4 4 4 4  	 	CCHHHHJNN>**JNN.//JNN>**

 %< 	4 	4 E= ( (FL&&''''t]33 4 4* 4 4ECT2E222333344 -  u 	$ 	$DCT""#### 	 	DCIIII	TVmnnnr   c                 >    t          t                      dz            S )Nzchrome-debug)r'   r   r   r   r   chrome_debug_data_dirrQ   {   s      >1222r   portintc                2    d|  dt                       ddgS )Nz--remote-debugging-port=z--user-data-dir=z--no-first-runz--no-default-browser-check)rQ   )rR   s    r   _chrome_debug_argsrU      s/    )4))402244$	 r         ?urltimeoutfloatboolc                $   ddl }ddl}ddlm}  |d| v r| nd|            }	 |j        p|j        dv rdnd}n# t          $ r Y d	S w xY w|j        d
v rn|j                            d          rT|j	        sd	S 	 |
                    |j	        |f|          5  	 ddd           dS # 1 swxY w Y   n# t          $ r Y d	S w xY wddd                    |j        |j                  }|dvs|j        sd	S | d|j                             d          }| d| dfD ]u}		 |j                            |	|          5 }
dt#          |
dd          cxk    rdk     rn n	 ddd            dS ddd           n# 1 swxY w Y   f# t$          $ r Y rw xY wd	S )zFReturn True when ``url`` exposes a reachable Chrome DevTools endpoint.r   N)urlparsez://zhttp://>   wsshttpsi  P   F>   wsr]   z/devtools/browser/)rX   Thttpr^   )r`   r]   >   ra   r^   /z/json/versionz/json   statusi,  )socketurllib.requesturllib.parser\   rR   scheme
ValueErrorr%   
startswithhostnamecreate_connectionOSErrorrG   netlocrstriprequesturlopengetattr	Exception)rW   rX   re   urllibr\   parsedrR   rh   rootproberesps              r   is_browser_debug_readyry      s   MMM%%%%%%XUc\\cc??F{Pfm7G&G&GssR   uu }%%&+*@*@AU*V*V% 	5	))6?D*A7)SS                   	 	 	55	 7++//v}MMF&&&fm&u((((//44D(((T...9  	''w'??  4'$#66<<<<<<<<<                                                 	 	 	H	5s   9 
AA7B0 B$B0 $B((B0 +B(,B0 0
B>=B>F 9!E4F (F 4E8	8F ;E8	<F  
FFr+   c                   |pt          j                    }t          |          }|rF|d         gt          |           }|dk    rt	          j        |          nt          j        |          S |dk    rt                      }d|  d| dS d S )Nr   rA   r@   z7open -a "Google Chrome" --args --remote-debugging-port=z --user-data-dir="z+" --no-first-run --no-default-browser-check)	platformr&   rO   rU   
subprocesslist2cmdlineshlexr=   rQ   )rR   r&   r5   argvdata_dirs        r   manual_chrome_debug_commandr      s    (x((F,V44J Z19 24 8 8906)0C0Cz&t,,,TXIYIYY(**Vd V V (V V V	

 4r   dictc                    | dk    rddiS t          t          dd          t          t          dd          z  }|rd|ini S )NrA   start_new_sessionTDETACHED_PROCESSr   CREATE_NEW_PROCESS_GROUPcreationflags)rr   r|   )r&   flagss     r   _detach_kwargsr      sZ    #T**J 2A66.: : E (-4OU##"4r   c                V   |pt          j                    }t          |          }|sdS t          j        t                      d           |D ][}	 t          j        |gt          |           ft          j	        t          j	        dt          |            dS # t          $ r Y Xw xY wdS )NFT)exist_ok)stdoutstderr)r{   r&   rO   r.   makedirsrQ   r|   PopenrU   DEVNULLr   rs   )rR   r&   r5   	candidates       r   try_launch_chrome_debugr      s    (x((F,V44J uK%''$7777 
 
			6/556!)!)  !((	   44 	 	 	H	5s   AB
B&%B&)r&   r'   r(   r)   )r(   r'   )rR   rS   r(   r)   )rV   )rW   r'   rX   rY   r(   rZ   )rR   rS   r&   r+   r(   r+   )r&   r'   r(   r   )rR   rS   r&   r+   r(   rZ   )__doc__
__future__r   r.   r{   r~   rI   r|   hermes_constantsr   DEFAULT_BROWSER_CDP_PORTDEFAULT_BROWSER_CDP_URLrE   rH   tuple_WINDOWS_BIN_NAMES_WINDOWS_INSTALL_PARTSrK   _LINUX_BIN_NAMES_LINUX_INSTALL_PATHSrO   rQ   rU   ry   r   r   r   r   r   r   <module>r      s   N N " " " " " " 				        , , , , , ,   H.FHH   UZZ0GZZZZZ ``5L`````  @ 5VV.CVVVVV uZZ2GZZZZZ / / / /d3 3 3 3   ! ! ! ! !H -E[_     $5 5 5 5 )AW[       r   