#!/bin/sh set -eu if [ "$#" -ne 3 ]; then echo "usage: $0 GEM FAKE_SERVER FAKE_HAX" >&2 exit 1 fi gem=$1 server=$2 hax=$3 port=$((20000 + $$ % 20000)) pid_file=$(mktemp /private/tmp/gem-agent-server-pid.XXXXXX) occupied_pid= cleanup() { if [ -n "$occupied_pid" ]; then kill "$occupied_pid" 2>/dev/null || true wait "$occupied_pid" 2>/dev/null || true fi rm -f "$pid_file" } trap cleanup EXIT GEM_TEST_PORT=$port GEM_FAKE_SERVER_PID_FILE=$pid_file \ "$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server "$server" \ --hax "$hax" --port "$port" --startup-timeout 5 [ -s "$pid_file" ] server_pid=$(sed -n '1p' "$pid_file") if kill -0 "$server_pid" 2>/dev/null; then echo "gem: managed server remained alive after hax exited: $server_pid" >&2 exit 1 fi set +e GEM_TEST_PORT=$port GEM_TEST_HAX_EXIT=7 GEM_FAKE_SERVER_PID_FILE=$pid_file \ "$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server "$server" \ --hax "$hax" --port "$port" --startup-timeout 5 hax_status=$? set -e [ "$hax_status" -eq 7 ] server_pid=$(sed -n '1p' "$pid_file") if kill -0 "$server_pid" 2>/dev/null; then echo "gem: managed server remained alive after failing hax: $server_pid" >&2 exit 1 fi "$server" --port "$port" & occupied_pid=$! ready=false for _attempt in 1 2 3 4 5 6 7 8 9 10; do if curl --fail --silent "http://127.0.0.1:$port/health" >/dev/null; then ready=true break fi sleep 0.1 done [ "$ready" = true ] if GEM_TEST_PORT=$port "$gem" agent --model /tmp/gemma-4-31b.gguf \ --llama-server "$server" --hax "$hax" --port "$port" --startup-timeout 1; then echo "gem: agent accepted a port owned by another server" >&2 exit 1 fi kill "$occupied_pid" wait "$occupied_pid" 2>/dev/null || true occupied_pid= if "$gem" agent --model /tmp/gemma-4-31b.gguf --llama-server /usr/bin/false \ --hax "$hax" --port "$port" --startup-timeout 1; then echo "gem: agent accepted a server that exited before readiness" >&2 exit 1 fi