Files
CST-agent/scripts/e2e_mini_calc.sh
T
WHCandCursor 1f1fcba7ad Initial CST-Agent: portable Linux/Termux/Windows coding agent.
Vendored sashidown, OpenAI-compatible env (OPENAI_*), and bootstrap scripts.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 22:42:32 +08:00

115 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# E2E: copy mini_calc → temp workspace → optional cst-agent headless → make test.
# Usage:
# ./scripts/e2e_mini_calc.sh # run agent if credentials exist
# ./scripts/e2e_mini_calc.sh --baseline-only # only prove fixture starts RED then skip agent
# SKIP_AGENT=1 ./scripts/e2e_mini_calc.sh
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
FIX="$ROOT/fixtures/mini_calc"
OUT="$FIX/out"
BASELINE_ONLY=0
for a in "$@"; do
case "$a" in
--baseline-only) BASELINE_ONLY=1 ;;
esac
done
mkdir -p "$OUT"
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
WORKDIR="$(mktemp -d /tmp/cst-mini-calc.XXXXXX)"
RESULT="$OUT/result-$STAMP.txt"
SESSION_COPY="$OUT/session-$STAMP.jsonl"
cleanup() { rm -rf "$WORKDIR"; }
trap cleanup EXIT
echo "== mini_calc e2e ==" | tee "$RESULT"
echo "workdir=$WORKDIR" | tee -a "$RESULT"
echo "stamp=$STAMP" | tee -a "$RESULT"
# Fresh copy (no .agent from previous runs)
cp -a "$FIX/." "$WORKDIR/"
rm -rf "$WORKDIR/out" "$WORKDIR/.agent"
chmod +x "$WORKDIR/tests/smoke.sh"
cd "$WORKDIR"
make clean >/dev/null 2>&1 || true
make
echo "-- baseline make test (expect FAIL before agent) --" | tee -a "$RESULT"
set +e
make test >"$OUT/baseline-$STAMP.log" 2>&1
base_rc=$?
set -e
echo "baseline_rc=$base_rc" | tee -a "$RESULT"
if [[ "$base_rc" -eq 0 ]]; then
echo "UNEXPECTED: fixture already passes; bugs may have been fixed in source." | tee -a "$RESULT"
echo "outcome=unexpected_green_fixture" | tee -a "$RESULT"
exit 2
fi
echo "baseline: RED (as expected)" | tee -a "$RESULT"
if [[ "$BASELINE_ONLY" -eq 1 || "${SKIP_AGENT:-0}" == "1" ]]; then
echo "outcome=baseline_ok_agent_skipped" | tee -a "$RESULT"
echo "SKIP agent step (--baseline-only or SKIP_AGENT=1)"
exit 0
fi
# Need API key for agent step
has_key=0
if [[ -n "${CST_API_KEY:-}" || -n "${MINIMAX_API_KEY:-}" ]]; then
has_key=1
elif [[ -f "$HOME/.config/cst-agent/credentials" ]]; then
has_key=1
fi
if [[ "$has_key" -eq 0 ]]; then
echo "outcome=baseline_ok_no_api_key" | tee -a "$RESULT"
echo "No API key; agent step skipped. Set CST_API_KEY or save credentials."
exit 0
fi
cd "$ROOT"
make -s
mkdir -p "$WORKDIR/.agent"
PROMPT="$(cat "$FIX/TASK.md")"
export CST_AUTO_APPROVE=1
echo "-- cst-agent headless --" | tee -a "$RESULT"
set +e
"$ROOT/cst-agent" --headless --workspace "$WORKDIR" --session "$WORKDIR/.agent/e2e.jsonl" \
--prompt "$PROMPT" >"$OUT/agent-$STAMP.log" 2>&1
agent_rc=$?
set -e
echo "agent_rc=$agent_rc" | tee -a "$RESULT"
if [[ -f "$WORKDIR/.agent/e2e.jsonl" ]]; then
cp -f "$WORKDIR/.agent/e2e.jsonl" "$SESSION_COPY"
echo "session_copy=$SESSION_COPY" | tee -a "$RESULT"
fi
cd "$WORKDIR"
set +e
make test >"$OUT/after-$STAMP.log" 2>&1
test_rc=$?
set -e
echo "after_test_rc=$test_rc" | tee -a "$RESULT"
# Classify
changed=0
if ! diff -q "$FIX/calc.c" "$WORKDIR/calc.c" >/dev/null 2>&1; then
changed=1
fi
echo "calc_c_changed=$changed" | tee -a "$RESULT"
if [[ "$test_rc" -eq 0 ]]; then
echo "outcome=pass" | tee -a "$RESULT"
exit 0
fi
if [[ "$changed" -eq 1 ]]; then
echo "outcome=partial" | tee -a "$RESULT"
exit 1
fi
echo "outcome=fail" | tee -a "$RESULT"
exit 1