diff --git a/scripts/harb-evaluator/evaluate.sh b/scripts/harb-evaluator/evaluate.sh index 96d3b1e..8f60075 100755 --- a/scripts/harb-evaluator/evaluate.sh +++ b/scripts/harb-evaluator/evaluate.sh @@ -141,6 +141,19 @@ log "Creating worktree at $WORKTREE_DIR (branch: $PR_BRANCH)..." git worktree add "$WORKTREE_DIR" "remotes/$REPO_REMOTE/$PR_BRANCH" \ || infra_error "git worktree add failed for branch $PR_BRANCH" +# ── Initialize git submodules + install submodule npm deps ───────────── +log "Initializing submodules..." +(cd "$WORKTREE_DIR" && git submodule update --init --recursive 2>/dev/null) || true +# uni-v3-lib has its own node_modules (solidity deps via npm) +if [[ -f "$WORKTREE_DIR/onchain/lib/uni-v3-lib/package.json" ]]; then + (cd "$WORKTREE_DIR/onchain/lib/uni-v3-lib" && npm install --silent 2>/dev/null) || true +fi + +# ── Compile Solidity contracts (needed by kraiken-lib for ABI imports) ── +log "Compiling contracts (forge build)..." +(cd "$WORKTREE_DIR/onchain" && forge build --silent) \ + || infra_error "forge build failed" + # ── Build kraiken-lib in the worktree ───────────────────────────────── log "Building kraiken-lib..." (cd "$WORKTREE_DIR" && ./scripts/build-kraiken-lib.sh) \ diff --git a/scripts/harb-evaluator/red-team.sh b/scripts/harb-evaluator/red-team.sh index 6b5f6b8..f7e9a08 100755 --- a/scripts/harb-evaluator/red-team.sh +++ b/scripts/harb-evaluator/red-team.sh @@ -184,6 +184,7 @@ cleanup() { if [[ -n "${SNAP:-}" ]]; then "$CAST" rpc anvil_revert "$SNAP" --rpc-url "$RPC_URL" >/dev/null 2>&1 || true fi + rm -f "${PROMPT_FILE:-}" 2>/dev/null || true exit $rc } trap cleanup EXIT INT TERM @@ -652,13 +653,15 @@ log "Spawning Claude red-team agent (timeout: ${CLAUDE_TIMEOUT}s)..." log " Report will be written to: $REPORT" set +e +# Write prompt to temp file to avoid "Argument list too long" (prompt can be 50KB+) +PROMPT_FILE=$(mktemp /tmp/red-team-prompt-XXXXXX.md) +printf '%s' "$PROMPT" > "$PROMPT_FILE" # Note: --verbose is required by the claude CLI when --output-format stream-json is used; # omitting it causes the CLI to exit with an error, producing an empty stream log. -timeout "$CLAUDE_TIMEOUT" claude -p --dangerously-skip-permissions \ +# Run synchronously — timeout handles kill, no need to background +timeout "$CLAUDE_TIMEOUT" bash -c 'claude -p --dangerously-skip-permissions \ --verbose --output-format stream-json \ - "$PROMPT" >"$STREAM_LOG" 2>&1 & -CLAUDE_PID=$! -wait "$CLAUDE_PID" + <"$1" >"$2" 2>&1' _ "$PROMPT_FILE" "$STREAM_LOG" AGENT_EXIT=$? CLAUDE_PID="" set -e diff --git a/tools/push3-transpiler/inject.sh b/tools/push3-transpiler/inject.sh index 14cd262..56b3f4c 100755 --- a/tools/push3-transpiler/inject.sh +++ b/tools/push3-transpiler/inject.sh @@ -18,7 +18,8 @@ if [ ! -d "$SCRIPT_DIR/node_modules" ]; then fi # 1. Transpile Push3 → OptimizerV3Push3.sol (full contract) -(cd "$SCRIPT_DIR" && npx ts-node src/index.ts "$PUSH3_FILE" "$TRANSPILER_OUT") || exit 1 +# Use tsx (not ts-node) — ts-node ESM resolution is broken on Node ≥22. +(cd "$SCRIPT_DIR" && npx tsx src/index.ts "$PUSH3_FILE" "$TRANSPILER_OUT") || exit 1 # 2. Extract function body and inject between BEGIN/END markers in OptimizerV3.sol python3 - "$TRANSPILER_OUT" "$OPTIMIZERV3_SOL" <<'PYEOF' || exit 2