Spaces:
Runtime error
Runtime error
Ashira Pitchayapakayakul
feat: migrate $HOME/.claude/* to $HOME/.surrogate/* (clean separation from Claude Code)
e36381e | # Qwen-coder daemon β always-on worker that BLPOPs from work queue. | |
| # Run via launchd (never exits; launchd respawns if crash). | |
| # Pulls priority β invokes qwen-coder-worker.sh with pre-selected priority (env var). | |
| set -u | |
| LOG="$HOME/.surrogate/logs/qwen-coder-daemon.log" | |
| mkdir -p "$(dirname "$LOG")" | |
| # Resolve Redis: Unix socket β TCP fallback. Build a redis-cli arg array reused below. | |
| REDIS_SOCK=$(find /var/folders /tmp -name 'redis.socket' -type s 2>/dev/null | head -1) | |
| if [[ -n "$REDIS_SOCK" ]] && [[ -S "$REDIS_SOCK" ]]; then | |
| RCLI=(redis-cli -s "$REDIS_SOCK") | |
| elif redis-cli -h 127.0.0.1 -p 6379 PING 2>/dev/null | grep -q PONG; then | |
| RCLI=(redis-cli -h 127.0.0.1 -p 6379) | |
| else | |
| echo "[$(date '+%H:%M:%S')] no redis (sock or TCP) β sleeping 60s before retry" >> "$LOG" | |
| sleep 60 | |
| exit 0 # launchd will relaunch | |
| fi | |
| echo "[$(date '+%H:%M:%S')] daemon start (PID $$, mode=${RCLI[1]})" >> "$LOG" | |
| # Main loop β pulls + processes until BLPOP times out (30s empty = exit, launchd relaunches) | |
| while true; do | |
| RESULT=$("${RCLI[@]}" BLPOP 'hermes:work:coding:qwen-local' 30 2>/dev/null) | |
| [[ -z "$RESULT" ]] && continue | |
| PAYLOAD=$(echo "$RESULT" | tail -1) | |
| [[ -z "$PAYLOAD" ]] && continue | |
| PRIO_ID=$(echo "$PAYLOAD" | python3 -c "import json,sys; print(json.loads(sys.stdin.read())['id'])" 2>/dev/null) | |
| [[ -z "$PRIO_ID" ]] && continue | |
| echo "[$(date '+%H:%M:%S')] pulled $PRIO_ID β processing" >> "$LOG" | |
| LOCK_KEY="hermes:worker-lock:$PRIO_ID:qwen-local" | |
| LOCK_ACQUIRED=$("${RCLI[@]}" SET "$LOCK_KEY" "qwen-local" NX EX 900 2>/dev/null) | |
| if [[ "$LOCK_ACQUIRED" != "OK" ]]; then | |
| echo "[$(date '+%H:%M:%S')] $PRIO_ID locked by another β skip" >> "$LOG" | |
| continue | |
| fi | |
| # Execute qwen-coder-worker with this priority pinned via env var so it | |
| # can't race with other workers / stale file locks. | |
| START=$(date +%s) | |
| HERMES_PRIO_ID="$PRIO_ID" \ | |
| "$HOME/.surrogate/bin/qwen-coder-worker.sh" 2>&1 | tail -3 >> "$LOG" | |
| DUR=$(( $(date +%s) - START )) | |
| echo "[$(date '+%H:%M:%S')] $PRIO_ID done in ${DUR}s" >> "$LOG" | |
| # Release lock (TTL will also expire naturally) | |
| # Note: keep lock until done so crashes don't re-process | |
| done | |
| echo "[$(date '+%H:%M:%S')] daemon exit β launchd will relaunch" >> "$LOG" | |