
    #j,                        U d Z ddlZddlZddlZddl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mZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZmZm Z m!Z!  ej"        d
d            ej"        d
d           dej#        d<   da$edz  e%d<   d Z&d Z'de(de)de(de)de*e(e)f         f
dZ+d Z,e-dk    r e,             dS dS )z
Command-line interface for Hindsight API.

Run the server with:
    hindsight-api

Run as background daemon:
    hindsight-api --daemon

Stop with Ctrl+C.
    N   )MemoryEngine__version__)
create_app)print_banner)DEFAULT_WORKERSENV_HOSTENV_WORKERSHindsightConfig_get_raw_config)DEFAULT_DAEMON_PORTDEFAULT_IDLE_TIMEOUTENV_DAEMON_CHILDIdleTimeoutMiddleware	daemonize)DefaultExtensionContextOperationValidatorExtensionTenantExtensionload_extensionignorezwebsockets.legacy is deprecated)messagez7websockets.server.WebSocketServerProtocol is deprecatedfalseTOKENIZERS_PARALLELISM_memoryc                  X   t           t           j        	 t          j                    } |                     t           j                                                   |                                  t          d           dS # t          $ r}t          d|            Y d}~dS d}~ww xY wdS dS )z7Synchronous cleanup function to stop resources on exit.Nz
pg0 stopped.z
Error stopping pg0: )	r   _pg0asyncionew_event_looprun_until_completestopcloseprint	Exception)loopes     Z/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/hindsight_api/main.py_cleanupr'   0   s     w|7	0)++D##GL$5$5$7$7888JJLLL"##### 	0 	0 	0.1../////////	0 77s   A'A> >
B%B  B%c                 p    t          d|  d           t                       t          j        d           dS )z(Handle SIGINT/SIGTERM to ensure cleanup.z
Received signal z, shutting down...r   N)r"   r'   sysexit)signumframes     r&   _signal_handlerr-   =   s6    	
9v
9
9
9:::JJJHQKKKKK    	args_host	args_portconfig_hostconfig_portreturnc                     ||k    r|nt           }| |k    s$t          j                            t                    r| }nd}||fS )zResolve host/port for daemon mode.

    Defaults to 127.0.0.1 for security, but honors explicit user overrides
    via --host flag or HINDSIGHT_API_HOST env var. Uses DEFAULT_DAEMON_PORT
    unless the user specified a custom port.
    z	127.0.0.1)r   osenvirongetr	   )r/   r0   r1   r2   porthosts         r&   resolve_daemon_host_portr:   D   sL     "[00996IDK2:>>(#;#;:r.   c                     t                      } t          j        dd          }|                    d| j        d| j         d           |                    dt
          | j        d	| j         d
           |                    d| j        g dd| j         d           |                    ddd           |                    dt
          t          t          j	        t          t          t                                        dt           dt           d           |                    ddd           |                    dddd           |                    d !           |                    d"dd#           |                    d$d%d&           |                    d'd%d(           |                    d)d%d*           |                    d+dd,t           d-           |                    d.t
          t          d/t           d           |                                }t          j                            t&                    d0k    }|j        p|}|rBt+          |j        |j        | j        | j        1          \  |_        |_        t-                       |st/                       t1                       |j        | j        k    r't3          j        | |j        |j        |j        2          } |                                  |s|                                  t;          j        t>                     tA          j         t@          j!        tD                     tA          j         t@          j#        tD                     tI          d3tJ                    }|r&d4d%l&'                    d5|j(        j)                    tI          d6tT                    }|r&d4d%l&'                    d7|j(        j)                    tW          ||| j,        8          a-|rEt]          | j/        tZ          9          }|0                    |           '                    d:           tc          tZ          d;| j2        d<d;=          }d%|rtg          ||j4        >          }|j5        d?k    p|j6        }	d4d%l7}
d@}|
j8        dAk    rJ	 d4d%l9}|:                                 d@}t/          dB           nU# tv          $ r t/          dC           Y n:w xY w	 d4d%l<}dD}t/          dE           n# tv          $ r t/          dF           Y nw xY w|	rdGn||j        |j        |j        |j=        |j>        dH|dIdJdK
}|j6        rd;|dL<   |j5        d?k    r
|j5        |dM<   |j?        r
|j?        |dN<   |j@        r
|j@        |dO<   |jA        r
|jA        |dP<   |sSd?dQlBmC}  ||j        |j        | j/        | jD        | jE        | jF        | jG        | j2        t          | jI        | jJ        R           7d4d%l&d4d%lK}fdS}|L                    |d;T          M                                 t          jO        dUi | d%S )VzMain entry point for the CLI.zhindsight-apizHindsight API Server)progdescriptionz--hostzHost to bind to (default: z, env: HINDSIGHT_API_HOST))defaulthelpz--portzPort to bind to (default: z, env: HINDSIGHT_API_PORT))typer>   r?   z--log-level)criticalerrorwarninginfodebugtracezLog level (default: z, env: HINDSIGHT_API_LOG_LEVEL))r>   choicesr?   z--reload
store_truez5Enable auto-reload on code changes (development only))actionr?   z	--workersz!Number of worker processes (env: z, default: )z--access-logzEnable access logz--no-access-log
access_logstore_falsezDisable access log (default))destrI   r?   F)rK   z--proxy-headersz1Enable X-Forwarded-Proto, X-Forwarded-For headersz--forwarded-allow-ipsNz7Comma separated list of IPs to trust with proxy headersz--ssl-keyfilezSSL key filez--ssl-certfilezSSL certificate filez--daemonz$Run as background daemon (uses port z, auto-exits after idle)z--idle-timeoutzBIdle timeout in seconds before auto-exit in daemon mode (default: 1)r/   r0   r1   r2   )r9   r8   	log_levelOPERATION_VALIDATORr   zLoaded operation validator: TENANTzLoaded tenant extension: )operation_validatortenant_extensionrun_migrations)database_urlmemory_enginez)Extension context set on tenant extensionTz/mcp)memoryhttp_api_enabledmcp_api_enabledmcp_mount_pathinitialize_memory)idle_timeoutr   r   win32zDwinloop installed as asyncio event loop policy (Windows uvloop port)z7winloop not installed, using default asyncio event loopuvloopz)uvloop available, will use for event loopz6uvloop not installed, using default asyncio event loopzhindsight_api.server:appwsproto      )
appr9   r8   rO   rK   proxy_headerswsr$   timeout_keep_alivetimeout_graceful_shutdownreloadworkersforwarded_allow_ipsssl_keyfilessl_certfile)print_startup_info)r9   r8   rU   llm_provider	llm_modelembeddings_providerreranker_providermcp_enabledversionvector_extensiontext_search_extensionc                  <   dd l } |                     d           	 t          j                    }t          j        |           |                                                               d S # t          $ r%}                    d| d           Y d }~d S d }~ww xY w)Nr      zIdle checker error: T)exc_info)	timesleepr   r   set_event_loopr   _check_idler#   rB   )rx   r$   r%   idle_middlewareloggings      r&   run_idle_checkerzmain.<locals>.run_idle_checker8  s    KKKJJqMMMI-//&t,,,''(C(C(E(EFFFFF I I I8Q884HHHHHHHHHIs   AA, ,
B6BB)targetdaemon )Pr   argparseArgumentParseradd_argumentr9   intr8   rO   r5   getenvr
   strr   set_defaultsr   r   
parse_argsr6   r7   r   r   r:   r   r"   r   dataclassesreplaceconfigure_logging
log_configatexitregisterr'   signalSIGINTr-   SIGTERMr   r   r}   rD   	__class____name__r   r   run_migrations_on_startupr   r   rU   set_contextr   rq   r   r\   rh   rg   r)   platformwinloopinstallImportErrorr^   rK   rc   ri   rj   rk   bannerrl   rm   rn   ro   rp   r   rs   rt   	threadingThreadstartuvicornrun)configparserargsis_daemon_child	is_daemonrR   rS   extension_contextrb   use_import_stringr)   	loop_implr   r^   uvicorn_configrl   r   r~   r|   r}   s                     @@r&   mainr   T   s   
 F$*  F &+,p,p,p,p     Q&+QQQ	      JJJUF$4UUU	     
<>uvvv
BIk3+?+?@@AA[[[[[[	     |BUVVV
)]Ywxxx
5))) ,5h     4m    
 NKKK
($=STTT a4Gaaa    
 $iRfiii	     D jnn%566#=O.I 7ii	 
  
  
	49 	   ~)))$V$)$)W[Wefff
  OH
M&-111
M&./222 ))>@[\\ ^\4G4Q4Z\\]]] &h@@ XV1A1K1TVVWWW /)7  G  B3,!
 
 
 	$$%6777@AAA *  C O /$BSTTT q(7DKJJJI
|w	MNNNOO!IXYYYY 	M 	M 	MKLLLLL	M	LMMM I=>>>> 	L 	L 	LJKKKKK	L .?G))C		^o+ %& N { (#'x |a$(Ly! I040H,- 9(,(8}% ;)-):~&  
......,,& & :$6*#4"(">	
 	
 	
 	
 "		I 		I 		I 		I 		I 		I 	 0>>DDFFFK!!.!!!!!s$   3)S S98S9=T T/.T/__main__).__doc__r   r   r   r   r5   r   r)   warningsr    r   r   apir   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   
extensionsr   r   r   r   filterwarningsr6   r   __annotations__r'   r-   r   r   tupler:   r   r   r   r.   r&   <module>r      s1  
 
 
        				  



   ' ' ' ' ' ' ' '                   \ \ \ \ \ \ \ \ \ \ \ \ \ \              n m m m m m m m m m m m  *K L L L L  *c d d d d (/
# $  $	 # # #
0 
0 
0  3 3 S _b glmprumugv     q" q" q"h zDFFFFF r.   