rh8ddlZddlZddlZddlZGddZy)NcdeZdZdZddZdefdZdZdZdZ d Z dd Z d Z d Z d ZdZddZy) JarvisKernelz Il cuore di Jarvis. Gestisce la configurazione, il caricamento e il ciclo di vita dei servizi modulari di backend. Ncg|_tjjtjjtjj t |_|j||_tj|_ i|_ |r||_ y|jjdd|_ y)Nprofiledefault)servicesospathdirnameabspath__file__base_dir _load_configconfigsys executablepython_executable_event_subscribersactive_profileget)self config_path profile_names 8/mnt/ssd/data/python-lab/Jarvis-Cognitive/core/kernel.py__init__zJarvisKernel.__init__ s 8Q(RS '' 4 !$"$ ".D "&++//)Y"GD  relative_pathctjj|jd|}tjj |}tj |d|S)u Costruisce un percorso assoluto all'interno della cartella /data del progetto e assicura che la directory genitore esista. È il metodo standard per tutti i servizi che devono leggere/scrivere dati. Args: relative_path: Il percorso relativo a partire dalla cartella /data (es. "logs/jarvis.log" o "memory/chat.sqlite"). Returns: Il percorso assoluto e validato. dataT)exist_ok)r r joinrr makedirs)rr full_pathparent_directorys r get_data_pathzJarvisKernel.get_data_pathsJGGLL F 77??95 $t4rcR|jd|j|jD]} |j|jd|jdy#t$r6}|jd|j j d|dYd}~sd}~wwxYw)z@ Avvia il Kernel e tutti i servizi configurati. z[KERNEL] Avvio del Kernel...zERRORE CRITICO avvio : errorNz.[KERNEL] Kernel e tutti i servizi sono attivi.zkernel:started)log_load_servicesrstart Exception __class____name__ publish_eventrservicees rr+zJarvisKernel.start3s /0 }} ]G ]  ] AB +, ]01B1B1K1K0LBqcRT[\\ ]sA'' B&0,B!!B&cB|jd|jdt|jD]}|j |jdy#t $r6}|jd|j jd|dYd}~ad}~wwxYw)z/Ferma tutti i servizi attivi in ordine inverso.z([KERNEL] Arresto del Kernel di Jarvis...zkernel:stoppingzErrore arresto r'warningNz[KERNEL] Kernel fermato.)r)r/reversedrstopr,r-r.r0s rr6zJarvisKernel.stopAs ;< ,- . lG l +, k488og>O>O>X>X=YY[\][^,_aj#k#k ksA B(,BBc t|dd5}tj|cdddS#1swYyxYw#t$r0}t d|d|t j dYd}~yd}~wwxYw)z1Carica il file di configurazione principale YAML.rzutf-8)encodingNz5[KERNEL] ERRORE CRITICO: Impossibile caricare config r')openyaml safe_loadr,printrexit)rr fr2s rrzJarvisKernel._load_configJsa dC'2 Qaq@Q Q Q Q  I$rRSQTU V HHQKK s);/ ;8;; A4&A//A4c6|jd|jd|jjdij|jg}|D]}|jd} |jd}t j |}t ||}|jdi}|||}|jj||jd|dy #t$r"} |jd |d | d Yd } ~ d } ~ wwxYw) z6Carica le istanze di tutti i servizi, ma non li avvia.z[KERNEL] Profilo attivo: ''profiles service_namemodulerz[KERNEL] Servizio 'z ' caricato.z&[KERNEL] ERRORE caricamento servizio '': r(N) r)rrr importlib import_modulegetattrrappendr,) rservices_to_loadservice_configrD module_pathrE service_class config_dataservice_instancer2s rr*zJarvisKernel._load_servicesRs -d.A.A-B!DE;;??:r:>>t?R?RTVW. aN)--n=L a,00: "00= ' = ,002> #0{#C  $$%56.|nKHI a aA,sSTRUVX_`` as-A=C-- D6DDc.|jd||dy)z` API pubblica per loggare. Pubblica un evento 'log:new_message' sull'Event Bus. zlog:new_message)messagelevelN)r/)rrRrSs rr)zJarvisKernel.logfs ,'E.RSrc|jS)z6Restituisce il percorso dell'interprete Python in uso.)r)rs rget_python_executablez"JarvisKernel.get_python_executablels%%%rctjjd}|jj dij |j |}tjj|S)zFRestituisce il percorso di default per gli script, basato sul profilo.~ base_paths)r r expanduserrrr)r default_pathr s rget_scripts_base_pathz"JarvisKernel.get_scripts_base_pathpsRww))#. {{|R044T5H5H,Www!!$''rc`|jD]}|jj|k(s|cSy)z?Restituisce un'istanza di un servizio attivo, dato il suo nome.N)rr-r.)rrDr1s r get_servicezJarvisKernel.get_servicevs2}} JG  ))\9'> Jrcz||jvrg|j|<|j|j|yN)rrJ)r event_namecallbacks rsubscribe_to_eventzJarvisKernel.subscribe_to_event}s9 T44 4\^d6M6Mj6Y  +228)rr`rrar2s rr/zJarvisKernel.publish_eventsh 00 0 33J? [d^ [ 1![FzlRUVWUXYZZ[s- AA  Ar_)info)r. __module__ __qualname____doc__rstrr%r+r6rr*r)rUr[r]rbr/rrrrsN H32 --a(T &( =[rr)rr<rGr rrirrrjs!  ~[~[r