#!/usr/bin/env bash set -euo pipefail source .env REPO_DIR="$HOME/codebase/chart-app" # Haupt-Klon BASE_BRANCH="main" TEST_CMD="./mvnw test" # z.B. ./gradlew test MAX_ISSUES=5 # pro Durchlauf, damit du nicht davonläufst POLL_INTERVAL=120 # Sekunden zwischen Polls (0 = einmal laufen) cd "$REPO_DIR" process_next() { git -C "$REPO_DIR" fetch origin "$BASE_BRANCH" --quiet git -C "$REPO_DIR" checkout "$BASE_BRANCH" --quiet git -C "$REPO_DIR" pull --quiet # 1) Nächstes Issue holen (Sub-Agent, minimaler Output) local out out=$(claude -p "Nutze den Sub-Agent 'next-issue'. Gib NUR dessen Rueckgabezeile aus (ISSUE= oder ISSUE=NONE), keinen weiteren Text." \ --allowedTools "Agent,mcp__gitea__list_issues,mcp__gitea__issue_read" \ --output-format text) local nr nr=$(echo "$out" | grep -oE 'ISSUE=[0-9NONE]+' | cut -d= -f2) if [[ "$nr" == "NONE" || -z "$nr" ]]; then echo "Keine offenen ai-ready Issues." return 1 fi echo ">>> Bearbeite Issue #$nr" local wt="../wt-issue-$nr" local branch="ai/issue-$nr" # 2) Isolierter Worktree + Branch git worktree add -b "$branch" "$wt" "$BASE_BRANCH" --quiet # 3) Worker im Worktree ausführen (autonom) ( cd "$wt" claude -p "/fix-issue $nr" \ --allowedTools "Bash($TEST_CMD),Bash(git *),Edit,Read,Write,Grep,Glob,mcp__gitea__issue_read,mcp__gitea__issue_write,mcp__gitea__label_read,mcp__gitea__pull_request_write" \ --output-format text ) || echo "!!! Worker für #$nr mit Fehler beendet" # 4) Aufräumen git worktree remove "$wt" --force || true return 0 } # --- Hauptschleife --- while true; do count=0 while (( count < MAX_ISSUES )); do if process_next; then ((count++)); else break; fi done echo "Durchlauf fertig ($count Issues)." (( POLL_INTERVAL == 0 )) && break sleep "$POLL_INTERVAL" done