#!/usr/bin/env bash
# codex-headless-run.sh — Codex-(Astra-6-)Lauf im Container mit Statusdatei wie beim Claude-Wrapper (fuer den Herzschlag).
# Aufruf: setsid nohup bash /tmp/vs-858/run-codex.sh "<label>" <prompt-datei> <log> <workdir> </dev/null >/dev/null 2>&1 &
# Status: <log>.status mit START/RUNNING/DONE/FAILED; PID in <log>.pid. Modell gpt-6-astra, Effort xhigh, Sandbox danger-full-access (bwrap im Container nicht verfuegbar).
set -u
LABEL=${1:?label fehlt}; PROMPT=${2:?prompt-datei fehlt}; LOG=${3:?log fehlt}; WORKDIR=${4:?workdir fehlt}
MODEL=${MODEL:-gpt-6-astra}; EFFORT=${EFFORT:-xhigh}
export PATH="/home/dev/.local/bin:$PATH"
cd "$WORKDIR" || { echo "workdir fehlt: $WORKDIR" >&2; exit 1; }
[ -s "$PROMPT" ] || { echo "prompt fehlt: $PROMPT" >&2; exit 1; }
STATUS="$LOG.status"; PIDF="$LOG.pid"
ts(){ date -u +%FT%TZ; }
st(){ printf '%s %s\n' "$(ts)" "$*" >> "$STATUS"; }
echo "$(ts) START $LABEL model=$MODEL effort=$EFFORT prompt=$PROMPT" >> "$LOG"
st "START label=$LABEL model=$MODEL"
codex exec -m "$MODEL" -c model_reasoning_effort="$EFFORT" -s danger-full-access --skip-git-repo-check -C "$WORKDIR" - < "$PROMPT" >> "$LOG" 2>&1 &
pid=$!; echo "$pid" > "$PIDF"; st "RUNNING attempt=1 pid=$pid"
wait "$pid"; rc=$?
echo "$(ts) ENDE $LABEL rc=$rc" >> "$LOG"
if [ "$rc" -eq 0 ]; then st "DONE rc=0 attempt=1"; else st "FAILED reason=codex-exit rc=$rc"; fi
rm -f "$PIDF"; exit "$rc"
