61 lines
1.9 KiB
Bash
Executable File
61 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
source .env
|
|
|
|
REPO_DIR="$HOME/codebase/looptest" # 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=<nr> 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 |