File size: 4,459 Bytes
9d7a35f
 
483f682
94e6ed4
9d7a35f
 
 
94e6ed4
 
b73eed5
 
 
5eedbdc
 
b73eed5
483f682
8ab8ff3
483f682
 
 
 
 
 
b73eed5
 
 
 
 
c5085aa
 
 
 
 
 
 
b73eed5
 
c5085aa
 
 
 
 
 
 
b73eed5
 
c5085aa
 
 
 
 
 
 
b73eed5
 
c5085aa
 
 
 
 
 
 
b73eed5
483f682
c5085aa
 
 
 
 
 
 
483f682
 
c5085aa
 
 
 
 
 
 
483f682
 
c5085aa
 
 
 
 
 
 
483f682
 
c5085aa
 
 
 
 
 
 
483f682
b73eed5
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import sys
import os
import threading

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from agents.init import ensure_db_initialized
from tools.storage import Storage

# Проверка инициализации (вернёт config, если всё ОК)
config = ensure_db_initialized()

storage = Storage()

# ⚙️ Включение/отключение компонентов
ENABLE_REPL      = False  # 🧠 repl.py
ENABLE_UI        = True  # 📓 web_ui.py (FastAPI)
ENABLE_MESH      = False  # 🌐 agent_mesh_listener.py
ENABLE_SYNC      = False  # 🔄 peer_sync.py
ENABLE_TRANSPORT = False  # 📡 transporter.py
ENABLE_CONTROL   = False  # 🧭 agent_controller.py
ENABLE_CONTAINER = False  # 🧱 container_agent.py
ENABLE_ETHICS    = False  # 🧠 ethics_guard.py

def start_all():
    threads = []

    if ENABLE_REPL:
        if not storage.is_process_alive("REPL", max_delay=180):
            def repl():
                from agents.repl import start_repl
                start_repl()
            threads.append(threading.Thread(target=repl, name="REPL"))
        else:
           print("REPL уже работает по данным heartbeat.")

    if ENABLE_UI:
        if not storage.is_process_alive("NotebookUI", max_delay=180):
            def ui():
                from agents.web_ui import start_notebook
                start_notebook()
            threads.append(threading.Thread(target=ui, name="NotebookUI"))
        else:
           print("NotebookUI уже работает по данным heartbeat.")

    if ENABLE_MESH:
        if not storage.is_process_alive("MeshListener", max_delay=180):
            def mesh():
                from agents.agent_mesh_listener import start_listener
                start_listener()
            threads.append(threading.Thread(target=mesh, name="MeshListener"))
        else:
           print("MeshListener уже работает по данным heartbeat.")

    if ENABLE_SYNC:
        if not storage.is_process_alive("PeerSync", max_delay=180):
            def sync():
                from agents.peer_sync import start_sync
                start_sync()
            threads.append(threading.Thread(target=sync, name="PeerSync"))
        else:
           print("PeerSync уже работает по данным heartbeat.")

    if ENABLE_TRANSPORT:
        if not storage.is_process_alive("Transporter", max_delay=180):
            def transport():
                from agents.transporter import start_transporter
                start_transporter()
            threads.append(threading.Thread(target=transport, name="Transporter"))
        else:
           print("Transporter уже работает по данным heartbeat.")

    if ENABLE_CONTROL:
        if not storage.is_process_alive("Controller", max_delay=180):
            def control():
                from agents.agent_controller import start_controller
                start_controller()
            threads.append(threading.Thread(target=control, name="Controller"))
        else:
           print("Controller уже работает по данным heartbeat.")

    if ENABLE_CONTAINER:
        if not storage.is_process_alive("ContainerAgent", max_delay=180):
            def container():
                from agents.container_agent import start_container
                start_container()
            threads.append(threading.Thread(target=container, name="ContainerAgent"))
        else:
           print("ContainerAgent уже работает по данным heartbeat.")

    if ENABLE_ETHICS:
        if not storage.is_process_alive("EthicsGuard", max_delay=180):
            def ethics():
                from agents.ethics_guard import start_ethics_guard
                start_ethics_guard()
            threads.append(threading.Thread(target=ethics, name="EthicsGuard"))
        else:
           print("EthicsGuard уже работает по данным heartbeat.")

    # Запуск потоков
    for thread in threads:
        try:
            thread.start()
            print(f"[✔] Поток {thread.name} запущен.")
        except Exception as e:
            print(f"[⚠️] Ошибка запуска потока {thread.name}: {e}")

    for thread in threads:
        thread.join()

if __name__ == "__main__":
    print("[*] Инициализация завершена. Запуск потоков...")
    start_all()