
    kKj                        d Z ddlZddlZddlZddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ dd	lmZmZ  ee      Zd
edz  fdZd
efdZddddddddededz  dedee   dz  dee   dz  deeef   dz  dedz  dedz  dedz  d
efdZddddddddddedeedz   ej6                  ddgd      f   deee   dz   ej6                  dd !      f   deee   dz   ej6                  d"d#!      f   deee   dz   ej6                  d$d%!      f   d&eedz   ej6                  d'd(!      f   d)eedz   ej6                  d*d+!      f   deedz   ej6                  d,d-!      f   deedz   ej6                  d.d/!      f   d
dfd0Zy)1z:Gemini CLI integration for FastMCP install using Cyclopts.    N)Path)	Annotated)print)
get_logger)UVEnvironment   )process_common_argsvalidate_server_namereturnc                     t        j                  d      } | r	 t        j                  | dgdd       | S t        j                         dz  dz  dz  t        d      t        j                         dz  d	z  dz  t        d
      g}|D ]C  }|j                         s	 t        j                  t        |      dgdd       t        |      c S  y# t        j                  t
        f$ r Y w xY w# t        j                  t
        f$ r Y w xY w)zFind the Gemini CLI command.geminiz	--versionT)checkcapture_outputz.geminilocalz/usr/local/bin/geminiz.npm-globalbinz/opt/homebrew/bin/geminiN)
shutilwhich
subprocessrunCalledProcessErrorFileNotFoundErrorr   homeexistsstr)gemini_in_pathpotential_pathspaths      o/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/cli/install/gemini_cli.pyfind_gemini_commandr      s    \\(+N		NN-#
 "! 			i')H4$%		m#e+h6'(	O  ;;=Y,#'
 4y    9 --/@A 		2 113DE s#   C -C+C('C(+DDc                      t               duS )z!Check if Gemini CLI is available.N)r        r   check_gemini_cli_availabler#   @   s     ,,r"   )with_editablewith_packagesenv_varspython_versionwith_requirementsprojectfileserver_objectnamer$   r%   r&   r'   r(   r)   c          	         t               }	|	st        d       yt        ||xs g dgz   |||      }
|r| j                          d| }nt	        | j                               }|
j                  dd|g      }|	ddg}|r0|j                         D ]  \  }}|j                  d	| d
| g        t        |       |j                  ||d   dg       |j                  |dd        	 t        j                  |ddd       y# t        j                  $ rK}t        d| d|j                  r|j                  j                         n
t	        |       d       Y d}~yd}~wt        $ r}t        d| d| d       Y d}~yd}~ww xY w)a  Install FastMCP server in Gemini CLI.

    Args:
        file: Path to the server file
        server_object: Optional server object name (for :object suffix)
        name: Name for the server in Gemini CLI
        with_editable: Optional list of directories to install in editable mode
        with_packages: Optional list of additional packages to install
        env_vars: Optional dictionary of environment variables
        python_version: Optional Python version to use
        with_requirements: Optional requirements file to install from
        project: Optional project directory to run within

    Returns:
        True if installation was successful, False otherwise
    z[red]Gemini CLI not found.[/red]
[blue]Please ensure Gemini CLI is installed. Try running 'gemini --version' to verify.[/blue]
[blue]You can install it using 'npm install -g @google/gemini-cli'.[/blue]
Ffastmcp)pythondependenciesrequirementsr)   editable:r   mcpaddz-e=r   z--r   NT)r   r   textz[red]Failed to install '[bold]z[/bold]' in Gemini CLI: z[/red])r   r   r   resolver   build_commanditemsextendr
   r   r   r   stderrstrip	Exception)r*   r+   r,   r$   r%   r&   r'   r(   r)   
gemini_cmd
env_configserver_specfull_command	cmd_partskeyvaluees                    r   install_gemini_clirG   E   s   : %&J[	

 #)ri[8&J (-9$,,.) ++Y{,KLL UE*I "..*JCdse1UG$456 +  dLOT23\!"%&yTM(( ,TF2J_`_g_g188>>K[mpqrmsJttz{	
  .tf4LQCvVWs%   $C> >E?AEE?#E::E?)server_namer$   r%   r&   env_filer/   r(   r)   rA   rH   z--namez-nz(Custom name for the server in Gemini CLI)r,   helpz--with-editablezVDirectory with pyproject.toml to install in editable mode (can be used multiple times))rJ   z--withz;Additional packages to install (can be used multiple times)z--envzFEnvironment variables in KEY=VALUE format (can be used multiple times)rI   z
--env-filez)Load environment variables from .env filer/   z--pythonz(Python version to use (e.g., 3.10, 3.11)z--with-requirementsz.Requirements file to install dependencies fromz	--projectz2Run the command within the given project directoryc                   K   |xs g }|xs g }|xs g }t        | ||||       d{   \  }	}
}}}t        |	|
|||||||	      }|rt        d| d       yt        j                  d       y7 Fw)zInstall an MCP server in Gemini CLI.

    Args:
        server_spec: Python file to install, optionally with :object suffix
    N)	r*   r+   r,   r$   r%   r&   r'   r(   r)   z[green]Successfully installed 'z' in Gemini CLIr   )r	   rG   r   sysexit)rA   rH   r$   r%   r&   rI   r/   r(   r)   r*   r+   r,   packagesenv_dictsuccesss                  r   gemini_cli_commandrQ      s     B "'RM!'RM~2H:M[-8; 51D-x !##+
G /v_EF'5s   %A0A.AA0)__doc__r   r   rL   pathlibr   typingr   cycloptsrichr   fastmcp.utilities.loggingr   6fastmcp.utilities.mcp_server_config.v1.environments.uvr   sharedr	   r
   __name__loggerr   r   boolr#   listdictrG   	ParameterrQ   r!   r"   r   <module>r`      s   @   
     0 P =	H	)S4Z )X-D - (,&*&*!%%)P
P:P P
 :$P 9t#P 38nt#P $JP d{P D[P 
Px 	 	 	 	 	 	 	 	sWW d
D!;	
	W T
Ti	
	W" S	DX	
	#W. S	DY	
	/W< t<	
	=WJ d
;	
	KWX !t!A	
	YWf tE	
	gWt 
uWr"   