| import time | |
| import threading | |
| from ...logger import logger | |
| from ..kernel_interface.procfs_bridge import send_to_kernel, read_from_kernel | |
| from ..senses.sigint_processor import SIGINTProcessor | |
| class HeartbeatLoop(threading.Thread): | |
| def __init__(self, brain, interval: float = 1.0): | |
| super().__init__(daemon=True) | |
| self.brain = brain | |
| self.interval = interval | |
| self._stop_event = threading.Event() | |
| def run(self): | |
| senses = SIGINTProcessor() | |
| logger.info(f"Heartbeat loop started (interval={self.interval}s)") | |
| while not self._stop_event.is_set(): | |
| status = read_from_kernel() | |
| raw_signal = senses.listen_to_traffic() | |
| action = "ACTION: MONITORING" if "SIGNAL_DETECTED" in raw_signal else "ACTION: IDLE" | |
| state_report = f"SYS: {status} | SENSE: {raw_signal} | {action}" | |
| send_to_kernel(state_report) | |
| time.sleep(self.interval) | |
| def stop(self): | |
| self._stop_event.set() | |