#!/usr/bin/env bash set -euo pipefail APP_ROOT="/app" RUNTIME_ROOT="${HF_RUNTIME_ROOT:-/tmp/codex-console}" PERSIST_ROOT="" effective_host="${APP_HOST:-${WEBUI_HOST:-0.0.0.0}}" effective_port="${PORT:-${APP_PORT:-${WEBUI_PORT:-7860}}}" effective_password="${APP_ACCESS_PASSWORD:-${WEBUI_ACCESS_PASSWORD:-${SPACE_PASSWORD:-}}}" configured_database_url="${APP_DATABASE_URL:-${DATABASE_URL:-}}" if [[ -z "${configured_database_url}" && -d "/data" ]]; then PERSIST_ROOT="/data" fi if [[ -n "${APP_DATA_DIR:-}" ]]; then data_dir="${APP_DATA_DIR}" elif [[ -n "${PERSIST_ROOT}" ]]; then data_dir="${RUNTIME_ROOT}/data" else data_dir="${APP_ROOT}/data" fi if [[ -n "${APP_LOGS_DIR:-}" ]]; then logs_dir="${APP_LOGS_DIR}" elif [[ -n "${PERSIST_ROOT}" ]]; then logs_dir="${RUNTIME_ROOT}/logs" else logs_dir="${data_dir}/logs" fi export APP_HOST="${effective_host}" export APP_PORT="${effective_port}" export APP_DATA_DIR="${data_dir}" export APP_LOGS_DIR="${logs_dir}" mkdir -p "${APP_DATA_DIR}" "${APP_LOGS_DIR}" local_db_path="${APP_DATA_DIR}/database.db" backup_pid="" if [[ -z "${configured_database_url}" ]]; then export APP_DATABASE_URL="sqlite:///${local_db_path}" fi if [[ -n "${effective_password}" ]]; then export APP_ACCESS_PASSWORD="${effective_password}" fi if [[ -n "${PERSIST_ROOT}" ]]; then persist_db_path="${PERSIST_ROOT}/database.db" backup_interval="${HF_BACKUP_INTERVAL_SECONDS:-60}" python /app/deploy/huggingface/sqlite_backup.py restore \ --source "${persist_db_path}" \ --destination "${local_db_path}" || true backup_loop() { while true; do sleep "${backup_interval}" python /app/deploy/huggingface/sqlite_backup.py backup \ --source "${local_db_path}" \ --destination "${persist_db_path}" || true done } backup_loop & backup_pid="$!" fi echo "[hf-space] starting codex-console" echo "[hf-space] listen: ${APP_HOST}:${APP_PORT}" echo "[hf-space] data dir: ${APP_DATA_DIR}" echo "[hf-space] logs dir: ${APP_LOGS_DIR}" if [[ -n "${PERSIST_ROOT}" ]]; then echo "[hf-space] persistence: sqlite runtime at ${local_db_path}, bucket snapshot at ${persist_db_path}" else echo "[hf-space] persistence: direct filesystem" fi if [[ -n "${APP_ACCESS_PASSWORD:-}" ]]; then echo "[hf-space] access password: configured" else echo "[hf-space] access password: not set" fi cmd=(python webui.py --host "${APP_HOST}" --port "${APP_PORT}") if [[ -n "${APP_ACCESS_PASSWORD:-}" ]]; then cmd+=(--access-password "${APP_ACCESS_PASSWORD}") fi "${cmd[@]}" & app_pid="$!" set +e wait "${app_pid}" app_status="$?" set -e if [[ -n "${backup_pid}" ]]; then python /app/deploy/huggingface/sqlite_backup.py backup \ --source "${local_db_path}" \ --destination "${persist_db_path}" || true kill "${backup_pid}" 2>/dev/null || true wait "${backup_pid}" 2>/dev/null || true fi exit "${app_status}"