
    i}                        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d	Zd
ZddZddZddZe
dfddZddZe
dfddZdS ) z?Shared helpers for attaching Hermes to a local Chrome 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))GoogleChromeApplication
chrome.exe)Chromiumr   r   )r	   r   chromium.exe)BraveSoftwarezBrave-Browserr   	brave.exe)	MicrosoftEdger   
msedge.exe)zgoogle-chromezgoogle-chrome-stablezchromium-browserchromiumzbrave-browserzmicrosoft-edge)r   r   r   r
   chromemsedgebraver   systemstrreturn	list[str]c                   g t                      dfddfd}| d	k    rt          D ]} |           S | d
k    rt          D ]} t          j        |                       |t
          j                            d          t
          j                            d          t
          j                            d          f           S t          D ]} t          j        |                       |d           S )Npath
str | Noner   Nonec                &   | sd S t           j                            t           j                            |                     }|v st           j                            |           sd S                     |                                |           d S N)osr   normcasenormpathisfileappendadd)r   
normalized
candidatesseens     ?/home/ubuntu/.hermes/hermes-agent/hermes_cli/browser_connect.pyr#   z(get_chrome_debug_candidates.<locals>.add/   s     	FW%%bg&6&6t&<&<==
RW^^D%9%9F$    basestuple[str | None, ...]c                    t          d |           D ],}t          D ]"} t          j        j        |g|R             #-d S r   )filter_WINDOWS_INSTALL_PARTSr   r   join)r)   basepartsr#   s      r'   add_install_pathsz6get_chrome_debug_candidates.<locals>.add_install_paths8   sa    4'' 	0 	0D/ 0 0BGL....////0	0 	0r(   DarwinWindowsProgramFileszProgramFiles(x86)LOCALAPPDATA)z/mnt/c/Program Filesz/mnt/c/Program Files (x86))r   r   r   r   )r)   r*   r   r   )	set_DARWIN_APPS_WINDOWS_BIN_NAMESshutilwhichr   environget_LINUX_BIN_NAMES)r   r1   appnamer#   r%   r&   s       @@@r'   get_chrome_debug_candidatesr@   +   sV   JUUD      0 0 0 0 0 0
  	 	CCHHHH& 	$ 	$DCT""####JNN>**JNN.//JNN>**
 	 	 	
      FLLMMMr(   c                 >    t          t                      dz            S )Nzchrome-debug)r   r    r(   r'   chrome_debug_data_dirrC   R   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)rC   )rD   s    r'   _chrome_debug_argsrG   V   s/    )4))402244$	 r(   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   r3   r2   z7open -a "Google Chrome" --args --remote-debugging-port=z --user-data-dir="z+" --no-first-run --no-default-browser-check)	platformr   r@   rG   
subprocesslist2cmdlineshlexr.   rC   )rD   r   r%   argvdata_dirs        r'   manual_chrome_debug_commandrO   _   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 )Nr3   start_new_sessionTDETACHED_PROCESSr   CREATE_NEW_PROCESS_GROUPcreationflags)getattrrJ   )r   flagss     r'   _detach_kwargsrX   q   sZ    #T**J 2A66.: : E (-4OU##"4r(   boolc                V   |pt          j                    }t          |          }|sdS t          j        t                      d           	 t          j        |d         gt          |           ft          j	        t          j	        dt          |           dS # t          $ r Y dS w xY w)NFT)exist_okr   )stdoutstderr)rI   r   r@   r   makedirsrC   rJ   PopenrG   DEVNULLrX   	Exception)rD   r   r%   s      r'   try_launch_chrome_debugrb   z   s    (x((F,V44J uK%''$7777	]6/556	
%%	
 	
 V$$		
 	
 	
 t   uus   AB 
B('B()r   r   r   r   )r   r   )rD   rE   r   r   )rD   rE   r   r   r   r   )r   r   r   rP   )rD   rE   r   r   r   rY   )__doc__
__future__r   r   rI   rL   r9   rJ   hermes_constantsr   DEFAULT_BROWSER_CDP_PORTDEFAULT_BROWSER_CDP_URLr7   r-   r=   r8   r@   rC   rG   rO   rX   rb   rB   r(   r'   <module>rh      s4   E E " " " " " " 				        , , , , , ,   H.FHH   
 $ $ $ $N3 3 3 3    -E[_     $5 5 5 5 )AW[       r(   