#!/bin/sh set -eu CODEX_BIN="${CODEX_BIN:-codex}" BOT_WORKSPACE_ROOT="${BOT_WORKSPACE_ROOT:-/workspaces}" CODEX_APP_SERVER_URL="${CODEX_APP_SERVER_URL:-ws://127.0.0.1:4500}" CODEX_APP_SERVER_LISTEN="${CODEX_APP_SERVER_LISTEN:-$CODEX_APP_SERVER_URL}" CODEX_APP_SERVER_ENABLED="${CODEX_APP_SERVER_ENABLED:-true}" CODEX_APP_SERVER_CWD="${CODEX_APP_SERVER_CWD:-$BOT_WORKSPACE_ROOT}" CODEX_APP_SERVER_SANDBOX="${CODEX_APP_SERVER_SANDBOX:-${CODEX_READONLY_SANDBOX:-read-only}}" CODEX_APP_SERVER_APPROVAL_POLICY="${CODEX_APP_SERVER_APPROVAL_POLICY:-never}" GITEA_GIT_AUTH_ENABLED="${GITEA_GIT_AUTH_ENABLED:-true}" APP_SERVER_PID="" cleanup() { if [ -n "$APP_SERVER_PID" ] && kill -0 "$APP_SERVER_PID" 2>/dev/null; then kill "$APP_SERVER_PID" 2>/dev/null || true wait "$APP_SERVER_PID" 2>/dev/null || true fi } trap cleanup INT TERM EXIT mkdir -p /app/data "$BOT_WORKSPACE_ROOT" "${CODEX_HOME:-/root/.codex}" if [ "$GITEA_GIT_AUTH_ENABLED" = "true" ] && [ -n "${GITEA_TOKEN:-}" ]; then export GIT_ASKPASS="/app/scripts/gitea-askpass.sh" export GIT_TERMINAL_PROMPT=0 if [ -n "${GITEA_USERNAME:-}" ]; then git config --global user.name "$GITEA_USERNAME" || true fi if [ -n "${GITEA_EMAIL:-}" ]; then git config --global user.email "$GITEA_EMAIL" || true fi fi python -m app.ensure_codex_config if [ "$CODEX_APP_SERVER_ENABLED" = "true" ]; then echo "Starting Codex app-server at $CODEX_APP_SERVER_LISTEN" "$CODEX_BIN" \ --cd "$CODEX_APP_SERVER_CWD" \ --sandbox "$CODEX_APP_SERVER_SANDBOX" \ --ask-for-approval "$CODEX_APP_SERVER_APPROVAL_POLICY" \ app-server \ --listen "$CODEX_APP_SERVER_LISTEN" \ & APP_SERVER_PID="$!" if echo "$CODEX_APP_SERVER_LISTEN" | grep -q '^ws://'; then HEALTH_URL="$(echo "$CODEX_APP_SERVER_LISTEN" | sed 's#^ws://#http://#')/readyz" for _ in $(seq 1 30); do if curl -fsS "$HEALTH_URL" >/dev/null 2>&1; then echo "Codex app-server is ready" break fi if ! kill -0 "$APP_SERVER_PID" 2>/dev/null; then echo "Codex app-server exited before becoming ready" break fi sleep 1 done fi fi python -m app.main