
    )j                        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	  ej
                    dk    Zd d d d	 d
Zddddd
ZddZddZ	 	 dddZ	 d d!dZdS )"u)  Lazy dependency bootstrapper for non-Python runtime deps.

Detection and prompting live here in Python — not in install.sh — because:
  1. shutil.which() works on every platform; install.sh needs bash.
  2. Detection is instant; spawning bash for a "is node installed?" check is waste.
  3. Python controls the UX (rich prompts, non-interactive fallback, TTY detection).

install.sh is still the *installation* backend because it has 1900 lines of
battle-tested OS detection and package-manager logic (apt/brew/pacman/dnf/
zypper/Termux/…).  Reimplementing that in Python would be huge duplication.

Deps that degrade gracefully (ripgrep → grep fallback, ffmpeg → skip conversion)
don't need ensure_dependency wired in — only hard-fail sites do (TUI needs node,
browser tool needs agent-browser).
    )annotationsN)PathWindowsc                 .    t          j        d          d uS )Nnodeshutilwhich     </home/wildlama/.hermes/hermes-agent/hermes_cli/dep_ensure.py<lambda>r      s    FL((4 r   c                 f    t          j        d          d upt                      pt                      S )Nagent-browser)r	   r
   _has_system_browser_has_hermes_agent_browserr   r   r   r   r      s5    _%%T1 	'  	'$&& r   c                 .    t          j        d          d uS )Nrgr   r   r   r   r   r   "   s    v|D))5 r   c                 .    t          j        d          d uS )Nffmpegr   r   r   r   r   r   #   s    fl8,,D8 r   )r   browserripgrepr   z,Node.js (required for browser tools and TUI)z1Browser engine (Chromium, for web browsing tools)zripgrep (fast file search)zffmpeg (TTS voice messages)returnboolc                 V    t           rd} nd} | D ]}t          j        |          r dS dS )N)chromemsedgechromium)zgoogle-chromezgoogle-chrome-stabler   zchromium-browserr   TF)_IS_WINDOWSr	   r
   )namesnames     r   r   r   .   sI     d0c  < 	44	5r   c                     ddl m}   |             }t          r|dz  dz                                  S |dz  dz  dz                                  p|dz  dz  dz                                  S )	Nr   get_hermes_homer   zagent-browser.cmdbinr   node_modulesz.bin)hermes_constantsr$   r   is_file)r$   homes     r   r   r   9   s    000000?D ?v 33<<>>> 
		099;; 	H>!F*_<EEGGr   package_dirPath | None	repo_roottuple[Path | None, str | None]c                
   | t          t                    j        } || j        }t          rd}d}nd}d}||fD ]I\  }}| dz  |z  }|                                r||fc S |dz  |z  }|                                r||fc S JdS )u   Locate the install script — bundled in wheel or in git checkout.

    On Windows, prefers install.ps1; on POSIX, prefers install.sh.
    Returns a (path, shell) tuple, or (None, None) if neither is found.
    N)zinstall.ps1
powershell)z
install.shbashscriptsNN)r   __file__parentr   r(   )r*   r,   	preferredfallbackscript_nameshellbundledrepos           r   _find_install_scriptr;   G   s     8nn+&	 11	)*	0((3  U	)K7?? 	"E>!!!9${2<<>> 	;	 :r   Tdepstrinteractivec                   t                               |           }|dS  |            rdS t                      \  }}|E|rAt                              | |           }t	          d| d           t	          d|  d           dS |rt
          j                                        rqt                              | |           }	 t          | d          	                                
                                }n# t          t          f$ r Y dS w xY w|d	vrdS |d
k    rqddlm} t          j        d
          pt          j        d          }|s|rt	          d           dS |dddt#          |          d| dt#           |                      g	}	ndt#          |          d| g}	i t$          j        ddi}
t)          j        |	|
          }|j        dk    rdS |r
 |            S dS )zGEnsure a non-Python dependency is available. Returns True if available.NFTz  z2 is not installed and no install script was found.z
  Install z manually and try again.z& is not installed. Install now? [Y/n] ) yyesr/   r   r#   pwshzG  PowerShell not found. Install PowerShell or run install.ps1 manually.z-ExecutionPolicyBypassz-Filez-Ensurez-HermesHomer0   z--ensureIS_INTERACTIVEfalse)env)_DEP_CHECKSgetr;   _DEP_DESCRIPTIONSprintsysstdinisattyinputstriplowerEOFErrorKeyboardInterruptr'   r$   r	   r
   r=   osenviron
subprocessrun
returncode)r<   r>   checkscriptr8   descreplyr$   ps_bincmdrun_envresults               r   ensure_dependencyra   g   sH   
 OOC  E}uuww t(**MFE~ 	>$((c22DOtOOOPPP<s<<<===u sy''))  $$S#..	TIIIJJPPRRXXZZEE+, 	 	 	55	(((5444444l++Cv|F/C/C 	 a_```5S[[s30011
 s6{{J477-w77G^  F Au uww4s   ?6C6 6D
D)r   r   r2   )r*   r+   r,   r+   r   r-   )T)r<   r=   r>   r   r   r   )__doc__
__future__r   rT   platformr	   rV   rL   pathlibr   systemr   rH   rJ   r   r   r;   ra   r   r   r   <module>rg      s2    # " " " " " 				       



      ho9, 54 
 6588	 	 ;B++	          $!    D 8 8 8 8 8 8 8r   