
    $jf                    v    U d Z ddlmZ ddlZddlmZ  ej                    Zdada	de
d<   dd
ZddZdddZdS )z9Shared CLI/TUI-safe helpers for background MCP discovery.    )annotationsN)OptionalFzOptional[threading.Thread]_mcp_discovery_threadreturnboolc                     	 ddl m}   |             pi                     d          }t          |t                    ot          |          dk    S # t          $ r Y dS w xY w)zBCheap config probe so non-MCP users avoid importing the MCP stack.r   )read_raw_configmcp_serversT)hermes_cli.configr	   get
isinstancedictlen	Exception)r	   r
   s     5/usr/local/lib/hermes-agent/hermes_cli/mcp_startup.py_has_configured_mcp_serversr      s    555555&((.B33MBB+t,,E[1A1AA1EE    tts   AA 
AAthread_namestrNonec                    t           5  t          r	 ddd           dS dat                      s	 ddd           dS d fd}t          j        ||d          }|a|                                 ddd           dS # 1 swxY w Y   dS )zBSpawn one shared background MCP discovery thread for this process.NTr   r   c                 z    	 ddl m}   |              d S # t          $ r                     dd           Y d S w xY w)Nr   )discover_mcp_toolsz$Background MCP tool discovery failedT)exc_info)tools.mcp_toolr   r   debug)r   loggers    r   	_discoverz1start_background_mcp_discovery.<locals>._discover%   so    T======""$$$$$ T T TCdSSSSSSTs    !::)targetnamedaemon)r   r   )_mcp_discovery_lock_mcp_discovery_startedr   	threadingThreadr   start)r   r   r   threads   `   r   start_background_mcp_discoveryr'      s>    
  ! 	        "&*,, 	       	T 	T 	T 	T 	T 	T !
 
 

 !'+                 s   	A=A=3A==BB      ?timeoutfloatc                p    t           }||                                sdS |                    |            dS )zIBriefly wait for background MCP discovery before the first tool snapshot.N)r)   )r   is_alivejoin)r)   r&   s     r   wait_for_mcp_discoveryr.   6   s9    "F~V__..~
KKK         )r   r   )r   r   r   r   )r(   )r)   r*   r   r   )__doc__
__future__r   r#   typingr   Lockr!   r"   r   __annotations__r   r'   r.    r/   r   <module>r6      s    ? ? ? " " " " " "          $in&&  48  8 8 8 8
 
 
 
   8! ! ! ! ! ! !r/   