Files
abot/hot_reload.py
2026-01-14 11:44:13 -08:00

58 lines
1.5 KiB
Python

import threading
import logging
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from tool_loader import load_tools
from bot_loader import load_bots
class ReloadableRegistry:
def __init__(self, base_dir):
self.base_dir = Path(base_dir)
self.lock = threading.Lock()
self.tools = {}
self.bots = {}
self.reload_all()
def reload_all(self):
with self.lock:
logging.info("Reloading bots and tools...")
self.tools = load_tools(self.base_dir / "tools")
self.bots = load_bots(self.base_dir / "bots")
def get_tools(self):
with self.lock:
return self.tools.copy()
def get_bots(self):
with self.lock:
return self.bots.copy()
class ReloadHandler(FileSystemEventHandler):
def __init__(self, registry):
self.registry = registry
def on_any_event(self, event):
if event.is_directory:
return
if event.src_path.endswith(".py"):
logging.info(f"Detected change: {event.src_path}")
self.registry.reload_all()
def start_hot_reload(registry):
observer = Observer()
handler = ReloadHandler(registry)
observer.schedule(handler, str(registry.base_dir / "tools"), recursive=True)
observer.schedule(handler, str(registry.base_dir / "bots"), recursive=True)
observer.daemon = True
observer.start()
logging.info("🔥 Hot reload enabled (tools + bots)")