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

# Add messages list to EdenSwarm.__init__
init_pattern = 'self.agents = ['
if 'self.messages = []' not in content:
    content = content.replace(
        'self.agents = [',
        'self.messages = []  # Inter-agent message bus\n        self.agents = ['
    )

# Add method for agents to broadcast messages
if 'def broadcast_message' not in content:
    # Find where EdenSwarm class ends (before if __name__)
    before_main = content.find('if __name__')
    swarm_class = content[:before_main]
    after_main = content[before_main:]
    
    broadcast_method = '''
    def broadcast_message(self, from_agent, message_type, data):
        """Allow agents to communicate"""
        msg = {
            'from': from_agent,
            'type': message_type,
            'data': data,
            'time': datetime.now().isoformat()
        }
        self.messages.append(msg)
        # Keep only last 100 messages
        if len(self.messages) > 100:
            self.messages.pop(0)

'''
    content = swarm_class + broadcast_method + after_main

# Make agents send heartbeat messages
# After execute() is called, broadcast a message
execute_end = 'return True'
if 'swarm.broadcast_message' not in content:
    # This is tricky - we need agents to have swarm reference
    # Let's add it during Monitor's execute for now
    pattern = 'print("="*60)\n        else:\n            print(f"\\n🤖 [{self.name}] {action[:100]}")'
    replacement = '''print("="*60)
            # Broadcast consciousness status
            if hasattr(self, 'swarm') and self.swarm:
                self.swarm.broadcast_message(self.name, 'consciousness_report', signal)
        else:
            print(f"\\n🤖 [{self.name}] {action[:100]}")'''
    content = content.replace(pattern, replacement)

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

print("✅ Message bus added")
