#!/usr/bin/env bash
# Codex / OpenAI Agents SDK sandbox entrypoint. Mounts AIMem at
# $AIMEM_WORKDIR, waits for the mount, then execs the agent command
# line (cd'd into the mountpoint).
#
# Required env:
#   AIMEM_BUCKET
#   AIMEM_ENDPOINT
#   AIMEM_ACCESS_KEY, AIMEM_SECRET_KEY  — forwarded to aimem
# Optional env:
#   AIMEM_WORKDIR        (default /workspace)
#   AIMEM_LOCAL          (default /var/cache/aimem-staging)
#   AIMEM_AGENT          (default codex — warms AGENTS.md, .agents/, MEMORY.md)

set -euo pipefail

WORKDIR="${AIMEM_WORKDIR:-/workspace}"

nohup aimem-mount > /tmp/aimem.log 2>&1 &
AIMEM_PID=$!

for _ in $(seq 1 30); do
    if mountpoint -q "${WORKDIR}"; then break; fi
    if ! kill -0 "${AIMEM_PID}" 2>/dev/null; then
        echo "aimem exited before mount became ready" >&2
        cat /tmp/aimem.log >&2
        exit 1
    fi
    sleep 1
done
mountpoint -q "${WORKDIR}" || {
    echo "mount never came up" >&2
    cat /tmp/aimem.log >&2
    exit 1
}

# If a Codex API key is supplied, register it so `codex exec` runs in
# API-key mode rather than ChatGPT-subscription mode.
if [[ -n "${OPENAI_API_KEY:-}" ]] && command -v codex >/dev/null 2>&1; then
    printf '%s' "${OPENAI_API_KEY}" | codex login --with-api-key >/dev/null 2>&1 || true
fi

cleanup() {
    fusermount3 -u "${WORKDIR}" 2>/dev/null \
        || aimem-fusermount -u "${WORKDIR}" 2>/dev/null \
        || true
}
trap cleanup EXIT

cd "${WORKDIR}"
exec "$@"
