mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-16 14:32:34 +00:00
76 lines
2.5 KiB
Bash
Executable file
76 lines
2.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Phase Tracker Watchdog
|
|
# Runs via cron to detect stalled upstream contribution workflows.
|
|
# If a workflow hasn't been updated in STALL_HOURS hours, alerts the user.
|
|
|
|
HERMES_AGENT_HOME="${HOME}/.hermes/hermes-agent"
|
|
TRACKER="$HERMES_AGENT_HOME/.dev-workflow/phase-tracker.json"
|
|
STALL_HOURS=4
|
|
|
|
if [ ! -f "$TRACKER" ]; then
|
|
exit 0 # No active workflow
|
|
fi
|
|
|
|
STATE=$(python3 -c "
|
|
import json
|
|
with open('$TRACKER') as f:
|
|
d = json.load(f)
|
|
print(json.dumps({
|
|
'state': d.get('state', 'unknown'),
|
|
'phase': d.get('current_phase', 0),
|
|
'issue': d.get('issue_number', 'N/A'),
|
|
'updated': d.get('last_updated', ''),
|
|
'started': d.get('started_at', ''),
|
|
}))
|
|
" 2>/dev/null || echo '{}')
|
|
|
|
STATE_VAL=$(echo "$STATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('state',''))" 2>/dev/null || echo "")
|
|
PHASE=$(echo "$STATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('phase',0))" 2>/dev/null || echo "0")
|
|
ISSUE=$(echo "$STATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('issue','N/A'))" 2>/dev/null || echo "N/A")
|
|
UPDATED=$(echo "$STATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('updated',''))" 2>/dev/null || echo "")
|
|
STARTED=$(echo "$STATE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('started',''))" 2>/dev/null || echo "")
|
|
|
|
if [ "$STATE_VAL" != "active" ]; then
|
|
exit 0 # Completed or aborted
|
|
fi
|
|
|
|
# Check if stalled
|
|
if [ -n "$UPDATED" ]; then
|
|
NOW=$(date +%s)
|
|
UPDATED_TS=$(date -d "$UPDATED" +%s 2>/dev/null || echo "0")
|
|
if [ "$UPDATED_TS" -gt 0 ]; then
|
|
ELAPSED=$(( (NOW - UPDATED_TS) / 3600 ))
|
|
if [ "$ELAPSED" -ge "$STALL_HOURS" ]; then
|
|
PHASE_NAME=$(python3 -c "
|
|
PHASE_NAMES = {
|
|
1: 'Deep Triage', 2: 'Branch Setup', 3: 'Code Understanding',
|
|
4: 'Security Baseline', 5: 'Implementation', 6: 'Test Suite',
|
|
7: 'Code Review', 8: 'PR Readiness Check', 9: 'Create Pull Request',
|
|
10: 'Self Evolution', 11: 'Insight Feature Request', 12: 'Plugin Improve',
|
|
13: 'Cleanup',
|
|
}
|
|
print(PHASE_NAMES.get($PHASE, 'unknown'))
|
|
" 2>/dev/null || echo "unknown")
|
|
|
|
cat <<WATCHDOG
|
|
⚠️ Phase Tracker STALLED
|
|
|
|
Workflow for issue #${ISSUE} has been stuck at Phase ${PHASE} (${PHASE_NAME}) for ${ELAPSED} hours.
|
|
|
|
To continue:
|
|
cd $HERMES_HOME/hermes-agent
|
|
python3 scripts/phase_tracker.py current # check current phase
|
|
python3 scripts/phase_tracker.py advance # advance to next phase
|
|
|
|
Or to abort:
|
|
python3 scripts/phase_tracker.py abort
|
|
|
|
Last updated: ${UPDATED}
|
|
WATCHDOG
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
exit 0
|