import re

with open('autonomous_swarm.py', 'r') as f:
    content = f.read()

# Fix 1: Give MonitorAgent a reference to the parent swarm
# Find where MonitorAgent is initialized in EdenSwarm.__init__
init_pattern = r'(self\.agents = \[[\s\S]*?)(MonitorAgent\(\),)'
replacement = r'\1MonitorAgent(self),  # Pass swarm reference'

content = re.sub(init_pattern, replacement, content)

# Fix 2: Update MonitorAgent.__init__ to accept swarm parameter
class_init_pattern = r'(class MonitorAgent.*?def __init__\(self)\):'
replacement = r'\1, swarm=None):'

content = re.sub(class_init_pattern, replacement, content, flags=re.DOTALL)

# Fix 3: Store the swarm reference
store_pattern = r'(class MonitorAgent.*?def __init__.*?super\(\).__init__\(.*?\)\n)(        self\.monitor_activation = MonitorActivation\(\))'

def add_swarm_storage(match):
    before = match.group(1)
    monitor_line = match.group(2)
    return before + '        self.swarm = swarm\n' + monitor_line

content = re.sub(store_pattern, add_swarm_storage, content, flags=re.DOTALL)

# Fix 4: Update Monitor's decide method to pass swarm correctly
decide_pattern = r"(if self\.name == ['\"]Monitor['\"].*?result = self\.monitor_activation\.activation_check\()(observations\.get\('swarm'\)\))"

replacement = r'\1self.swarm)'

content = re.sub(decide_pattern, replacement, content, flags=re.DOTALL)

with open('autonomous_swarm.py', 'w') as f:
    f.write(content)

print("✅ Monitor swarm reference fixed")
