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>
This commit is contained in:
Executable
+114
@@ -0,0 +1,114 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user