verify_all_agents.sh
1 #!/bin/bash 2 3 # ECHO Agent Verification Script 4 # Comprehensive test of all 9 agents with autonomous mode 5 6 set -e 7 8 GREEN='\033[0;32m' 9 YELLOW='\033[1;33m' 10 RED='\033[0;31m' 11 BLUE='\033[0;34m' 12 NC='\033[0m' 13 14 echo -e "${BLUE}╔═══════════════════════════════════════════════════════╗${NC}" 15 echo -e "${BLUE}║ ECHO Agent Verification & Debugger Test ║${NC}" 16 echo -e "${BLUE}╚═══════════════════════════════════════════════════════╝${NC}" 17 echo "" 18 19 FAILURES=0 20 SUCCESSES=0 21 22 # Check infrastructure 23 echo -e "${BLUE}=== Infrastructure Checks ===${NC}" 24 echo "" 25 26 # PostgreSQL 27 if docker ps | grep -q echo-postgres; then 28 echo -e "${GREEN}✓ PostgreSQL (Docker) running${NC}" 29 ((SUCCESSES++)) 30 else 31 echo -e "${RED}✗ PostgreSQL NOT running${NC}" 32 ((FAILURES++)) 33 fi 34 35 # Redis 36 if redis-cli -p 6383 ping &> /dev/null; then 37 echo -e "${GREEN}✓ Redis (port 6383) running${NC}" 38 ((SUCCESSES++)) 39 else 40 echo -e "${RED}✗ Redis (port 6383) NOT running${NC}" 41 ((FAILURES++)) 42 fi 43 44 # Database user 45 if docker exec echo-postgres psql -U echo_org -d echo_org -c "SELECT 1" &> /dev/null; then 46 echo -e "${GREEN}✓ Database user 'echo_org' exists${NC}" 47 ((SUCCESSES++)) 48 else 49 echo -e "${RED}✗ Database user 'echo_org' does NOT exist${NC}" 50 ((FAILURES++)) 51 fi 52 53 # Ollama 54 if pgrep -f ollama > /dev/null; then 55 echo -e "${GREEN}✓ Ollama running${NC}" 56 ((SUCCESSES++)) 57 else 58 echo -e "${YELLOW}⚠ Ollama NOT running (LLM features disabled)${NC}" 59 fi 60 61 echo "" 62 63 # Check agent executables 64 echo -e "${BLUE}=== Agent Executable Checks ===${NC}" 65 echo "" 66 67 AGENTS=(ceo cto chro operations_head product_manager senior_architect uiux_engineer senior_developer test_lead) 68 69 for agent in "${AGENTS[@]}"; do 70 AGENT_BIN="apps/$agent/$agent" 71 if [ -f "$AGENT_BIN" ] && [ -x "$AGENT_BIN" ]; then 72 echo -e "${GREEN}✓ $agent executable exists and is executable${NC}" 73 ((SUCCESSES++)) 74 else 75 echo -e "${RED}✗ $agent executable MISSING or not executable${NC}" 76 ((FAILURES++)) 77 fi 78 done 79 80 echo "" 81 82 # Check autonomous mode support 83 echo -e "${BLUE}=== Autonomous Mode Support Checks ===${NC}" 84 echo "" 85 86 for agent in "${AGENTS[@]}"; do 87 CLI_FILE="apps/$agent/lib/$agent/cli.ex" 88 if grep -q "\\-\\-autonomous" "$CLI_FILE" 2>/dev/null; then 89 echo -e "${GREEN}✓ $agent supports --autonomous mode${NC}" 90 ((SUCCESSES++)) 91 else 92 echo -e "${RED}✗ $agent MISSING --autonomous mode${NC}" 93 ((FAILURES++)) 94 fi 95 done 96 97 echo "" 98 99 # Check message handler pattern 100 echo -e "${BLUE}=== Message Handler Pattern Checks ===${NC}" 101 echo "" 102 103 for agent in "${AGENTS[@]}"; do 104 HANDLER_FILE="apps/$agent/lib/$agent/message_handler.ex" 105 if grep -q "def handle_info({:redix_pubsub, _pid, _ref, :message" "$HANDLER_FILE" 2>/dev/null; then 106 echo -e "${GREEN}✓ $agent has correct Redix pattern${NC}" 107 ((SUCCESSES++)) 108 else 109 echo -e "${RED}✗ $agent has INCORRECT Redix pattern${NC}" 110 ((FAILURES++)) 111 fi 112 done 113 114 echo "" 115 116 # Runtime test - Start 3 agents and verify 117 echo -e "${BLUE}=== Runtime Verification Test ===${NC}" 118 echo "" 119 120 # Clear Redis 121 redis-cli -p 6383 FLUSHDB > /dev/null 2>&1 122 echo -e "${YELLOW}Redis cleared for test${NC}" 123 echo "" 124 125 # Start Senior Developer 126 echo -e "${YELLOW}Starting Senior Developer...${NC}" 127 cd apps/senior_developer 128 DB_USER=echo_org DB_PORT=5433 DB_NAME=echo_org REDIS_PORT=6383 ./senior_developer --autonomous > /tmp/verify_senior_dev.log 2>&1 & 129 SENIOR_DEV_PID=$! 130 cd ../.. 131 sleep 8 132 133 # Check if running 134 if ps -p $SENIOR_DEV_PID > /dev/null 2>&1; then 135 echo -e "${GREEN}✓ Senior Developer started (PID: $SENIOR_DEV_PID)${NC}" 136 ((SUCCESSES++)) 137 else 138 echo -e "${RED}✗ Senior Developer FAILED to start${NC}" 139 ((FAILURES++)) 140 fi 141 142 # Check Redis subscription 143 SUBS=$(redis-cli -p 6383 PUBSUB NUMSUB messages:senior_developer | awk '{print $2}') 144 if [ "$SUBS" -gt 0 ]; then 145 echo -e "${GREEN}✓ Senior Developer subscribed to Redis ($SUBS subscriber)${NC}" 146 ((SUCCESSES++)) 147 else 148 echo -e "${RED}✗ Senior Developer NOT subscribed to Redis${NC}" 149 ((FAILURES++)) 150 fi 151 152 # Check database errors 153 sleep 3 154 DB_ERRORS=$(grep -c "failed to connect" /tmp/verify_senior_dev.log 2>/dev/null || echo "0") 155 if [ "$DB_ERRORS" -eq 0 ]; then 156 echo -e "${GREEN}✓ Senior Developer has 0 database errors${NC}" 157 ((SUCCESSES++)) 158 else 159 echo -e "${RED}✗ Senior Developer has $DB_ERRORS database errors${NC}" 160 ((FAILURES++)) 161 fi 162 163 # Send test message 164 echo "" 165 echo -e "${YELLOW}Sending test message to Senior Developer...${NC}" 166 ./send_message.sh senior_developer request verify_test '{"question": "Respond if you receive this"}' > /dev/null 2>&1 167 sleep 2 168 169 # Check if message was received 170 if grep -q "SENIOR_DEVELOPER received Redis message" /tmp/verify_senior_dev.log; then 171 echo -e "${GREEN}✓ Senior Developer received test message${NC}" 172 ((SUCCESSES++)) 173 else 174 echo -e "${RED}✗ Senior Developer did NOT receive test message${NC}" 175 ((FAILURES++)) 176 fi 177 178 # Start Product Manager 179 echo "" 180 echo -e "${YELLOW}Starting Product Manager...${NC}" 181 cd apps/product_manager 182 DB_USER=echo_org DB_PORT=5433 DB_NAME=echo_org REDIS_PORT=6383 ./product_manager --autonomous > /tmp/verify_product_mgr.log 2>&1 & 183 PRODUCT_MGR_PID=$! 184 cd ../.. 185 sleep 8 186 187 # Check if running 188 if ps -p $PRODUCT_MGR_PID > /dev/null 2>&1; then 189 echo -e "${GREEN}✓ Product Manager started (PID: $PRODUCT_MGR_PID)${NC}" 190 ((SUCCESSES++)) 191 else 192 echo -e "${RED}✗ Product Manager FAILED to start${NC}" 193 ((FAILURES++)) 194 fi 195 196 # Check Redis subscription 197 SUBS=$(redis-cli -p 6383 PUBSUB NUMSUB messages:product_manager | awk '{print $2}') 198 if [ "$SUBS" -gt 0 ]; then 199 echo -e "${GREEN}✓ Product Manager subscribed to Redis ($SUBS subscriber)${NC}" 200 ((SUCCESSES++)) 201 else 202 echo -e "${RED}✗ Product Manager NOT subscribed to Redis${NC}" 203 ((FAILURES++)) 204 fi 205 206 # Test agent-to-agent communication 207 echo "" 208 echo -e "${YELLOW}Testing agent-to-agent communication...${NC}" 209 ./send_message.sh product_manager request verify_comms '{"from": "senior_developer", "question": "Confirm reception"}' > /dev/null 2>&1 210 sleep 2 211 212 if grep -q "PRODUCT_MANAGER received Redis message" /tmp/verify_product_mgr.log; then 213 echo -e "${GREEN}✓ Product Manager received message${NC}" 214 ((SUCCESSES++)) 215 else 216 echo -e "${RED}✗ Product Manager did NOT receive message${NC}" 217 ((FAILURES++)) 218 fi 219 220 # Cleanup 221 echo "" 222 echo -e "${BLUE}Cleaning up test agents...${NC}" 223 kill $SENIOR_DEV_PID $PRODUCT_MGR_PID 2>/dev/null || true 224 wait $SENIOR_DEV_PID $PRODUCT_MGR_PID 2>/dev/null || true 225 echo -e "${GREEN}✓ Test agents stopped${NC}" 226 227 echo "" 228 echo -e "${BLUE}╔═══════════════════════════════════════════════════════╗${NC}" 229 echo -e "${BLUE}║ Verification Results ║${NC}" 230 echo -e "${BLUE}╚═══════════════════════════════════════════════════════╝${NC}" 231 echo "" 232 echo -e " ${GREEN}Successes: $SUCCESSES${NC}" 233 echo -e " ${RED}Failures: $FAILURES${NC}" 234 echo "" 235 236 if [ $FAILURES -eq 0 ]; then 237 echo -e "${GREEN}╔═══════════════════════════════════════════════════════╗${NC}" 238 echo -e "${GREEN}║ ✓ ALL CHECKS PASSED - System Ready! 🎉 ║${NC}" 239 echo -e "${GREEN}╚═══════════════════════════════════════════════════════╝${NC}" 240 exit 0 241 else 242 echo -e "${YELLOW}╔═══════════════════════════════════════════════════════╗${NC}" 243 echo -e "${YELLOW}║ ⚠ Some checks failed - Review logs ║${NC}" 244 echo -e "${YELLOW}╚═══════════════════════════════════════════════════════╝${NC}" 245 echo "" 246 echo "Debug logs:" 247 echo " tail -f /tmp/verify_senior_dev.log" 248 echo " tail -f /tmp/verify_product_mgr.log" 249 exit 1 250 fi