fix(resume): pass workspace, role, and epoch to update_yaml_resumed.sh to fix fallback silent bugs

This commit is contained in:
2026-07-24 23:39:39 +09:00
parent d6b523c943
commit d2a82478e9
2 changed files with 27 additions and 12 deletions
@@ -17,13 +17,16 @@ EOF
SESSION_NAME=""
UUID=""
AGENT=""
WORKSPACE=""
ROLE=""
while [ $# -gt 0 ]; do
case "$1" in
--session) SESSION_NAME="$2"; shift 2 ;;
--uuid) UUID="$2"; shift 2 ;;
--agent) AGENT="$2"; shift 2 ;;
--session) SESSION_NAME="$2"; shift 2 ;;
--uuid) UUID="$2"; shift 2 ;;
--agent) AGENT="$2"; shift 2 ;;
--workspace) WORKSPACE="$2"; shift 2 ;;
--role) ROLE="$2"; shift 2 ;;
-h|--help) usage; exit 0 ;;
*) echo "ERROR: unknown arg: $1" >&2; exit 2 ;;
esac
@@ -39,15 +42,24 @@ export HERDR_SERVER_NAME
# --agent 미지정 시 이름 suffix 로 fallback (P1-F: 가능하면 --agent 명시)
if [ -z "$AGENT" ]; then
case "$SESSION_NAME" in
*-creator-claude) AGENT=claude ;;
*-creator-agy) AGENT=agy ;;
*-creator-hermes) AGENT=hermes ;;
*-creator-cline) AGENT=cline ;;
*-creator-claude|*-planner-claude|*-reviewer-claude) AGENT=claude ;;
*-creator-agy|*-planner-agy|*-reviewer-agy) AGENT=agy ;;
*-creator-hermes|*-planner-hermes|*-reviewer-hermes) AGENT=hermes ;;
*-creator-cline|*-planner-cline|*-reviewer-cline) AGENT=cline ;;
*) echo "ERROR: cannot infer agent from '$SESSION_NAME'; pass --agent" >&2; exit 2 ;;
esac
fi
if [ -z "$ROLE" ]; then
case "$SESSION_NAME" in
*-planner-*) ROLE="planner" ;;
*-reviewer-*) ROLE="reviewer" ;;
*) ROLE="creator" ;;
esac
fi
NOW_ISO=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
NOW_EPOCH=$(date +%s)
# 새 herdr pane pid / 자식 pid 를 bash 에서 캡처 (env 로 전달, P1-B)
PANE_PID=$(_herdr list-panes -t "$SESSION_NAME" -F '#{pane_pid}' 2>/dev/null | head -1 || true)
@@ -70,11 +82,15 @@ for s in d.get('herdr_sessions', []):
atomic_dump_yaml "$AGENT_SESSIONS_YAML" \
SESSION_NAME="$SESSION_NAME" UUID="$UUID" AGENT="$AGENT" NOW_ISO="$NOW_ISO" \
NOW_EPOCH="$NOW_EPOCH" TARGET_WORKSPACE="${WORKSPACE:-$WORKSPACE_ROOT}" ROLE="$ROLE" \
PANE_PID="$PANE_PID" CHILD_PID="$CHILD_PID" <<'PYEOF'
name = os.environ['SESSION_NAME']
uuid = os.environ['UUID']
agent = os.environ['AGENT']
now = os.environ['NOW_ISO']
epoch = int(os.environ.get('NOW_EPOCH', '0') or '0')
ws_root = os.environ.get('TARGET_WORKSPACE', '') or os.environ.get('WORKSPACE_ROOT', '')
role = os.environ.get('ROLE', 'creator')
pane_pid = os.environ.get('PANE_PID', '')
target = None
@@ -84,14 +100,13 @@ for s in d.get('herdr_sessions', []):
break
if target is None:
ws_root = os.environ.get('WORKSPACE_ROOT', '')
server_name = os.environ.get('HERDR_SERVER_NAME', 'multi-agent-mux')
target = {
'name': name,
'status': 'running',
'role': 'creator',
'role': role,
'herdr_session_created_at': now,
'herdr_session_epoch': int(os.environ.get('NOW_EPOCH', '0') or '0'),
'herdr_session_epoch': epoch,
'herdr_server': server_name,
'delegate_job_id': None,
'pane': {'index': 0, 'pid': int(pane_pid) if pane_pid.isdigit() else 0, 'cmd': agent, 'cwd': ws_root},