diff --git a/bin/claude-loop.sh b/bin/claude-loop.sh index 1759c3d..519b318 100755 --- a/bin/claude-loop.sh +++ b/bin/claude-loop.sh @@ -340,7 +340,7 @@ run_worker() { set +e cd "$worktree" - gtimeout "$CLAUDE_TIMEOUT" claude \ + env -u CLAUDECODE gtimeout "$CLAUDE_TIMEOUT" claude \ --print \ --dangerously-skip-permissions \ -p "$prompt" \ diff --git a/bin/ops-helpers.sh b/bin/ops-helpers.sh index 811a844..4fde358 100755 --- a/bin/ops-helpers.sh +++ b/bin/ops-helpers.sh @@ -15,6 +15,7 @@ ops-help() { echo -e " \033[1mWake Up\033[0m" echo " ops-wake-kimi Restart Kimi loop" echo " ops-wake-claude Restart Claude loop" + echo " ops-wake-gemini Restart Gemini loop" echo " ops-wake-gateway Restart gateway" echo " ops-wake-all Restart everything" echo "" @@ -26,10 +27,12 @@ ops-help() { echo " ops-prs List open PRs" echo " ops-queue Show Kimi's queue" echo " ops-claude-queue Show Claude's queue" + echo " ops-gemini-queue Show Gemini's queue" echo "" echo -e " \033[1mEmergency\033[0m" echo " ops-kill-kimi Stop Kimi loop" echo " ops-kill-claude Stop Claude loop" + echo " ops-kill-gemini Stop Gemini loop" echo " ops-kill-zombies Kill stuck git/pytest" echo "" echo -e " \033[2m Type ops-help to see this again\033[0m" @@ -55,12 +58,21 @@ ops-wake-claude() { echo " Claude loop started — $workers workers (PID $!)" } +ops-wake-gemini() { + pkill -f "gemini-loop.sh" 2>/dev/null + sleep 1 + nohup bash ~/.hermes/bin/gemini-loop.sh >> ~/.hermes/logs/gemini-loop.log 2>&1 & + echo " Gemini loop started (PID $!)" +} + ops-wake-all() { ops-wake-gateway sleep 1 ops-wake-kimi sleep 1 ops-wake-claude + sleep 1 + ops-wake-gemini echo " All services started" } @@ -121,6 +133,12 @@ ops-kill-claude() { echo " Claude stopped (all workers)" } +ops-kill-gemini() { + pkill -f "gemini-loop.sh" 2>/dev/null + pkill -f "gemini.*--print" 2>/dev/null + echo " Gemini stopped" +} + ops-assign-claude() { local issue=$1 local repo="${2:-rockachopa/Timmy-time-dashboard}" @@ -149,6 +167,25 @@ for repo in repos: " 2>/dev/null || echo " (error)" } +ops-assign-gemini() { + local issue=$1 + local repo="${2:-rockachopa/Timmy-time-dashboard}" + [ -z "$issue" ] && { echo "Usage: ops-assign-gemini ISSUE_NUMBER [owner/repo]"; return 1; } + curl -s -X PATCH -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ + "$GITEA/api/v1/repos/$repo/issues/$issue" -d '{"assignees":["gemini"]}' | python3 -c " +import json,sys; d=json.loads(sys.stdin.read()); print(f' ✓ #{$issue} assigned to gemini') +" 2>/dev/null +} + +ops-gemini-queue() { + curl -s -H "Authorization: token $TOKEN" "$REPO_API/issues?state=open&assignee=gemini&limit=20&type=issues" | python3 -c " +import json,sys +issues=json.loads(sys.stdin.read()) +for i in issues: print(f' #{i[\"number\"]:4d} {i[\"title\"][:60]}') +if not issues: print(' (empty)') +" 2>/dev/null +} + ops-kill-zombies() { local killed=0 for pid in $(ps aux | grep "pytest tests/" | grep -v grep | awk '{print $2}'); do