/ scripts / testing / verify_all_agents.sh
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