
    $j/                    f   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlm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 d dlm Z  erd dlm!Z!  ed          Z"d"dZ#d#dZ$d%                    d          Z&d'                                Z(dZ)dZ*d$d!Z+dS )%    )annotationsN)Path)TYPE_CHECKINGAny)ValidationError)Align)ConsoleGroup)Panel)Table)Text)
get_logger)MCPServerConfig)FileSystemSource)get_cached_typeadapter)check_for_newer_version)FastMCPz
cli.configreturnboolc                 Z    t          t          j                            d                    S )z:Check if we're already running in a FastMCP uv subprocess.FASTMCP_UV_SPAWNED)r   osenvironget     ]/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fastmcp/utilities/cli.pyis_already_in_uv_subprocessr      s    
344555r   server_spec
str | Nonetuple[MCPServerConfig, str]c                   d}d}| t          d          }|                                sAt          j                    }|r|}n)t                              d           t          d          t          |          }t                              d|            n| }|	                    d          rt          |          }|                                r	 t          |          5 }t          j        |          }ddd           n# 1 swxY w Y   d|v rn\	 t          t                    }|                    |          }|j        r|j                            |           n# t"          $ r Y nw xY wn# t          j        t          f$ r Y nw xY w| t'          |          }	t          |		          }|                                }
|                    d
          x}r||
d         d
<   |                    d          x}r+|
d                             d          pg }||z   |
d         d<   |                    d          x}rt          |          |
d         d<   |                    d          x}rt          |          |
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   |                    d          x}r||
d         d<   t          di |
}||fS )a  Load config from server_spec and apply CLI overrides.

    This consolidates the config parsing logic that was duplicated across
    run, inspect, and dev commands.

    Args:
        server_spec: Python file, config file, URL, or None to auto-detect
        cli_overrides: CLI arguments that override config values

    Returns:
        Tuple of (MCPServerConfig, resolved_server_spec)
    Nzfastmcp.jsonzNo server specification provided and no fastmcp.json found in current directory.
Please specify a server file or create a fastmcp.json configuration.z-No server specification or fastmcp.json foundzUsing configuration from z.json
mcpServers)path)sourcepythonenvironmentwith_packagesdependencieswith_requirementsrequirementsprojecteditable	transport
deploymenthostportr$   	log_levelserver_argsargsr   )r   existsr   find_configloggererrorFileNotFoundErrorstrinfoendswithopenjsonloadr   validate_pythonr/   apply_runtime_settingsr   JSONDecodeErrorr   
model_dumpr   )r   cli_overridesconfigconfig_pathfound_configresolved_specfdataadapterr%   config_dictpython_overridepackages_overrideexistingrequirements_overrideproject_overrideeditable_overridetransport_overridehost_overrideport_overridepath_overridelog_level_overrideserver_args_override
new_configs                           r   load_and_merge_configrZ   !   st     FK >**!!## 		Y*688L Y*[   ((WXXXK((===>>>># g&& =)) 	+&& (!9Q<<D( ( ( ( ( ( ( ( ( ( ( ( ( ( (  4''
"8"I"I!(!8!8!>!> ", R"-DD[QQQ*    (*;<   
 ~!}555 /// ##%%K (++H555 ?/>M"8,)--o>>> R}-11.AAGR5F5QM">2 - 1 12E F FF P589N5O5OM">2(,,Y777 F034D0E0EM"9-)--j999 C1BM":. +..{;;; D1CL!+.%))&111} :,9L!&)%))&111} :,9L!&)%))&111} :,9L!&)*..{;;; D1CL!+.,00??? A,@L!&) !//;//J}$$s[   E0 "D7E0 DE0 
DE0 A
E E0 
E,)E0 +E,,E0 0F	F	a[  
    _ __ ___  _____           __  __  _____________    ____    ____ 
   _ __ ___ .'____/___ ______/ /_/  |/  / ____/ __ \  |___ \  / __ \
  _ __ ___ / /_  / __ `/ ___/ __/ /|_/ / /   / /_/ /  ___/ / / / / /
 _ __ ___ / __/ / /_/ (__  ) /_/ /  / / /___/ ____/  /  __/_/ /_/ / 
_ __ ___ /_/    \____/____/\__/_/  /_/\____/_/      /_____(*)____/  


u  [38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m▀[38;2;0;186;255m [38;2;0;184;255m▄[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m█[38;2;0;169;255m▀[38;2;0;166;255m▀[38;2;0;163;255m [38;2;0;160;255m▀[38;2;0;157;255m█[38;2;0;155;255m▀[38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m▀[38;2;0;143;255m▄[38;2;0;140;255m▀[38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▀[38;2;0;126;255m▀[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m█[39m
[38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m [38;2;0;186;255m [38;2;0;184;255m█[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m▄[38;2;0;169;255m▄[38;2;0;166;255m█[38;2;0;163;255m [38;2;0;160;255m [38;2;0;157;255m█[38;2;0;155;255m [38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m [38;2;0;143;255m▀[38;2;0;140;255m [38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▄[38;2;0;126;255m▄[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m▀[39mu    [38;2;0;170;255m▄[38;2;0;142;255m▀[38;2;0;114;255m▀[38;2;0;86;255m▀[39m
 [38;2;0;170;255m█[38;2;0;142;255m▀[38;2;0;114;255m▀[39m
[38;2;0;170;255m▀[39m
[0mu  [38;2;0;198;255m [38;2;0;195;255m▄[38;2;0;192;255m▀[38;2;0;189;255m▀[38;2;0;186;255m [38;2;0;184;255m▄[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m█[38;2;0;169;255m▀[38;2;0;166;255m▀[38;2;0;163;255m [38;2;0;160;255m▀[38;2;0;157;255m█[38;2;0;155;255m▀[38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m▀[38;2;0;143;255m▄[38;2;0;140;255m▀[38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▀[38;2;0;126;255m▀[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m█[39m
[38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m [38;2;0;186;255m [38;2;0;184;255m█[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m▄[38;2;0;169;255m▄[38;2;0;166;255m█[38;2;0;163;255m [38;2;0;160;255m [38;2;0;157;255m█[38;2;0;155;255m [38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m [38;2;0;143;255m▀[38;2;0;140;255m [38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▄[38;2;0;126;255m▄[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m▀[39m
serverFastMCP[Any]Nonec                   t                      }t          j        t          d          }t          dt          j         d          }t          j        d          }|                    dd	
           |                    dd
           |                    dd
           | j	        }| j
        r|d| j
         z  }|                    ddt          |d                     |                    ddd           t          dd          }t          dt          j        |          ddt          j        |          t          j        |          dt          j        |                    }t          |ddd          }t!          d          }	dt          j        |          g}
|rt          j        d|df          }t          dd          }t          t          t          j        |          t          j        |                    ddd          }|
                    t          j        |                     |
                    d           |	                    t          |
            d S )!zECreates and logs a formatted banner with server information and logo.T)no_wrapzFastMCP z	bold blue)style)r      )paddingboldcenter)ra   justifycyanleftdimz, u   🖥zServer:u   🚀zDeploy free:zhttps://horizon.prefect.iozhttps://gofastmcp.com )rb      P   )border_stylerc   width)stderrr[   )u   🎉 Update available: rd   z
bold greenz"Run: pip install --upgrade fastmcpblue)r      N)r   r   	from_ansiLOGO_ASCII_4fastmcp__version__r   grid
add_columnnameversionadd_rowr
   r   re   r   r	   assembleappendprint)r\   newer_version	logo_text
title_text
info_tableserver_infodocs_urlpanel_contentpanelconsoleoutput_elementsupdate_line1update_line2update_notices                 r   log_server_bannerr      s    ,--M |T:::I 6!466kJJJJ F+++J999777v666+K~ -,FN,,,vy${%*H*H*HIIIv~/KLLL +5999H
Y

Z  X
Z  	 	M 	  E T"""G 37U8K8K1LO  <}/L)
 
 @NNN%,|,,el<.H.HII	
 
 
 	u|M::;;;4   MM%)*****r   )r   r   )r   r    r   r!   )r\   r]   r   r^   ),
__future__r   r>   r   pathlibr   typingr   r   pydanticr   
rich.alignr   rich.consoler	   r
   
rich.panelr   
rich.tabler   	rich.textr   rt   fastmcp.utilities.loggingr   #fastmcp.utilities.mcp_server_configr   9fastmcp.utilities.mcp_server_config.v1.sources.filesystemr   fastmcp.utilities.typesr   fastmcp.utilities.version_checkr   r   r7   r   rZ   lstripLOGO_ASCII_1stripLOGO_ASCII_2LOGO_ASCII_3rs   r   r   r   r   <module>r      s   " " " " " "  				       % % % % % % % % $ $ $ $ $ $       ' ' ' ' ' ' ' '                    0 0 0 0 0 0 ? ? ? ? ? ? V V V V V V : : : : : : C C C C C C  	L	!	!6 6 6 6
i% i% i% i%X F4LL T %'' , V  C+ C+ C+ C+ C+ C+r   