diff --git a/gardener/gardener-agent.sh b/gardener/gardener-agent.sh index 5402df9..7591cba 100644 --- a/gardener/gardener-agent.sh +++ b/gardener/gardener-agent.sh @@ -290,15 +290,15 @@ gardener_phase_callback() { log "WARNING: tmux session died unexpectedly — attempting recovery" rm -f "$RESULT_FILE" touch "$RESULT_FILE" - if create_agent_session "$SESSION_NAME" "$PROJECT_REPO_ROOT" 2>/dev/null; then - agent_inject_into_session "$SESSION_NAME" "$PROMPT" + if create_agent_session "${_MONITOR_SESSION:-$SESSION_NAME}" "$PROJECT_REPO_ROOT" 2>/dev/null; then + agent_inject_into_session "${_MONITOR_SESSION:-$SESSION_NAME}" "$PROMPT" log "Recovery session started" else log "ERROR: could not restart session after crash" fi ;; PHASE:done|PHASE:failed|PHASE:needs_human|PHASE:merged) - agent_kill_session "$SESSION_NAME" + agent_kill_session "${_MONITOR_SESSION:-$SESSION_NAME}" ;; esac } diff --git a/lib/agent-session.sh b/lib/agent-session.sh index 5499273..11d819b 100644 --- a/lib/agent-session.sh +++ b/lib/agent-session.sh @@ -61,6 +61,8 @@ inject_formula() { # Monitor a phase file, calling a callback on changes and handling idle timeout. # Sets _MONITOR_LOOP_EXIT to the exit reason (idle_timeout, done, failed, break). +# Sets _MONITOR_SESSION to the resolved session name (arg 4 or $SESSION_NAME). +# Callbacks should reference _MONITOR_SESSION instead of $SESSION_NAME directly. # Args: phase_file idle_timeout_secs callback_fn [session_name] # session_name — tmux session to health-check; falls back to $SESSION_NAME global monitor_phase_loop() { @@ -68,6 +70,9 @@ monitor_phase_loop() { local idle_timeout="$2" local callback="$3" local _session="${4:-${SESSION_NAME:-}}" + # Export resolved session name so callbacks can reference it regardless of + # which session was passed to monitor_phase_loop (analogous to _MONITOR_LOOP_EXIT). + export _MONITOR_SESSION="$_session" local poll_interval="${PHASE_POLL_INTERVAL:-10}" local last_mtime=0 local idle_elapsed=0