#!/bin/bash
# usage: EXP=<name> MODEL=sonnet EFFORT= RULES=0|1 HOOK=0|1 NOISY=0|1 run2.sh <n>
set +u
S=$(cd "$(dirname "$0")" && pwd); n=$1; EXP=${EXP:-x}; MODEL=${MODEL:-sonnet}; EFFORT=${EFFORT:-}; RULES=${RULES:-0}; HOOK=${HOOK:-0}; NOISY=${NOISY:-0}
W=$(mktemp -d /tmp/claude-501/bench-XXXX); cp -R "$S/repo/." "$W/"; cd "$W" && git checkout -q -- . && git clean -qfd
[ "$RULES" = 1 ] && cp "$S/CLAUDE-long.md" "$W/CLAUDE.md"
[ "$NOISY" = 1 ] && cp "$S/noisy.test.js" "$W/test/noisy.test.js"
PROMPT='One test in test/ledger.test.js fails. Fix the code in src/ so that `node --test test/ledger.test.js test/noisy.test.js` passes (run that exact command to check; the noisy test prints a lot). Change only src/. Do not change the tests. When done, stop.'
[ "$NOISY" = 1 ] || PROMPT='One test in test/ledger.test.js fails. Fix the code in src/ so that `node --test test/ledger.test.js` passes. Change only src/. Do not change the tests. When done, stop.'
extra=(); [ -n "$EFFORT" ] && extra+=(--effort "$EFFORT"); [ "$HOOK" = 1 ] && extra+=(--settings "$S/hook-settings.json")
tag="$EXP-$MODEL-${EFFORT:-def}-r$RULES-h$HOOK-n$NOISY-$n"
start=$(date +%s)
claude -p "$PROMPT" < /dev/null --model "$MODEL" --permission-mode acceptEdits --max-turns 25 --max-budget-usd 3 --output-format json \
  --allowed-tools "Read" "Edit" "Write" "Glob" "Grep" "Bash(node:*)" "Bash(ls:*)" "Bash(cat:*)" "${extra[@]}" > "$S/runs/$tag.json" 2> "$S/runs/$tag.err"
end=$(date +%s)
node --test test/ledger.test.js >/dev/null 2>&1 && pass=1 || pass=0
node -e '
const [f,tag,pass,wall,out]=process.argv.slice(1);const r=JSON.parse(require("fs").readFileSync(f));const u=r.usage||{};
const o={tag,exp:process.env.EXP,model:process.env.MODEL,effort:process.env.EFFORT||"default",rules:+process.env.RULES,hook:+process.env.HOOK,noisy:+process.env.NOISY,pass:+pass,wall_s:+wall,turns:r.num_turns,cost:r.total_cost_usd,input:u.input_tokens,output:u.output_tokens,cache_read:u.cache_read_input_tokens,cache_write:u.cache_creation_input_tokens,subtype:r.subtype,models:Object.keys(r.modelUsage||{})};
require("fs").appendFileSync(out,JSON.stringify(o)+"\n");console.log(JSON.stringify(o))' "$S/runs/$tag.json" "$tag" "$pass" "$((end-start))" "$S/runs/results2.jsonl"
rm -rf "$W"
