feat(cli,registry): introduce --herdr-workspace option and decouple socket fallback chains
This commit is contained in:
@@ -22,6 +22,7 @@ WORKSPACE=""
|
||||
AGENT=""
|
||||
SESSION_NAME=""
|
||||
HERDR_SERVER_OPT=""
|
||||
HERDR_WORKSPACE_OPT=""
|
||||
|
||||
DRY_RUN=0
|
||||
|
||||
@@ -31,6 +32,7 @@ while [ $# -gt 0 ]; do
|
||||
--agent) AGENT="$2"; shift 2 ;;
|
||||
--session) SESSION_NAME="$2"; shift 2 ;;
|
||||
--herdr-session|--herdr-server) HERDR_SERVER_OPT="$2"; shift 2 ;;
|
||||
--herdr-workspace) HERDR_WORKSPACE_OPT="$2"; shift 2 ;;
|
||||
--dry-run) DRY_RUN=1; shift ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "ERROR: unknown arg: $1" >&2; exit 2 ;;
|
||||
@@ -71,7 +73,8 @@ if herdr has-session -t "$SESSION_NAME" 2>/dev/null; then
|
||||
# Just update YAML to make sure it's set to running
|
||||
bash "$(dirname "${BASH_SOURCE[0]}")/update_yaml_resumed.sh" \
|
||||
--session "$SESSION_NAME" --uuid "$UUID" --agent "$AGENT" --workspace "$WORKSPACE" \
|
||||
--herdr-session "$HERDR_SESSION_NAME"
|
||||
--herdr-session "$HERDR_SESSION_NAME" \
|
||||
${HERDR_WORKSPACE_OPT:+--herdr-workspace "$HERDR_WORKSPACE_OPT"}
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -135,6 +138,7 @@ sleep 2
|
||||
# 5. Update agent-sessions.yaml: status running, last_visible_status
|
||||
bash "$(dirname "${BASH_SOURCE[0]}")/update_yaml_resumed.sh" \
|
||||
--session "$SESSION_NAME" --uuid "$UUID" --agent "$AGENT" --workspace "$WORKSPACE" \
|
||||
--herdr-session "$HERDR_SESSION_NAME"
|
||||
--herdr-session "$HERDR_SESSION_NAME" \
|
||||
${HERDR_WORKSPACE_OPT:+--herdr-workspace "$HERDR_WORKSPACE_OPT"}
|
||||
|
||||
echo "Successfully resumed $SESSION_NAME ($AGENT)"
|
||||
|
||||
@@ -21,6 +21,7 @@ AGENT=""
|
||||
WORKSPACE=""
|
||||
ROLE=""
|
||||
HERDR_SERVER_OPT=""
|
||||
HERDR_WORKSPACE_OPT=""
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
@@ -30,6 +31,7 @@ while [ $# -gt 0 ]; do
|
||||
--workspace) WORKSPACE="$2"; shift 2 ;;
|
||||
--role) ROLE="$2"; shift 2 ;;
|
||||
--herdr-session|--herdr-server) HERDR_SERVER_OPT="$2"; shift 2 ;;
|
||||
--herdr-workspace) HERDR_WORKSPACE_OPT="$2"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "ERROR: unknown arg: $1" >&2; exit 2 ;;
|
||||
esac
|
||||
@@ -48,6 +50,15 @@ else
|
||||
export HERDR_SERVER_OPT_EXPLICIT="0"
|
||||
fi
|
||||
|
||||
if [ -n "$HERDR_WORKSPACE_OPT" ]; then
|
||||
MAM_WS_LABEL="$HERDR_WORKSPACE_OPT"
|
||||
export MAM_WS_LABEL_EXPLICIT="1"
|
||||
else
|
||||
MAM_WS_LABEL="$(resolve_herdr_workspace "$SESSION_NAME" "${WORKSPACE:-}")"
|
||||
export MAM_WS_LABEL_EXPLICIT="0"
|
||||
fi
|
||||
export MAM_WS_LABEL
|
||||
|
||||
# --agent 미지정 시 레지스트리 기록으로 해석 (B-21).
|
||||
# ① row['agent'] → ② 세션명 접미사 → ③ pane.cmd 순. 셋 다 실패하면
|
||||
# 종전과 동일하게 exit 2 (헤더 :27-30 의 종료 코드 계약 유지).
|
||||
@@ -92,7 +103,8 @@ 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" HERDR_SERVER_OPT_EXPLICIT="${HERDR_SERVER_OPT_EXPLICIT:-0}" <<'PYEOF'
|
||||
PANE_PID="$PANE_PID" CHILD_PID="$CHILD_PID" HERDR_SERVER_OPT_EXPLICIT="${HERDR_SERVER_OPT_EXPLICIT:-0}" \
|
||||
MAM_WS_LABEL="$MAM_WS_LABEL" MAM_WS_LABEL_EXPLICIT="${MAM_WS_LABEL_EXPLICIT:-0}" <<'PYEOF'
|
||||
name = os.environ['SESSION_NAME']
|
||||
uuid = os.environ['UUID']
|
||||
agent = os.environ['AGENT']
|
||||
@@ -112,6 +124,7 @@ if target is None:
|
||||
pwd = os.path.abspath(ws_root)
|
||||
default_server = 'mam-' + os.path.basename(pwd).lower().replace('_', '-')
|
||||
server_name = os.environ.get('HERDR_SESSION_NAME', default_server)
|
||||
wsl = os.environ.get('MAM_WS_LABEL', '')
|
||||
target = {
|
||||
'name': name,
|
||||
'status': 'running',
|
||||
@@ -120,6 +133,7 @@ if target is None:
|
||||
'herdr_session_epoch': epoch,
|
||||
'herdr_session': server_name,
|
||||
'herdr_server': server_name,
|
||||
'herdr_workspace': wsl,
|
||||
'delegate_job_id': None,
|
||||
'pane': {'index': 0, 'pid': int(pane_pid) if pane_pid.isdigit() else 0, 'cmd': agent, 'cwd': ws_root},
|
||||
'start_command': f'HERDR_SESSION_NAME={server_name} herdr agent attach {name}',
|
||||
@@ -137,6 +151,10 @@ else:
|
||||
target['start_command'] = f'HERDR_SESSION_NAME={sn} herdr agent attach {name}'
|
||||
target['attach_command'] = f'HERDR_SESSION_NAME={sn} herdr agent attach {name}'
|
||||
target['kill_command'] = f'HERDR_SESSION_NAME={sn} herdr kill-session -t {name}'
|
||||
wsl = os.environ.get('MAM_WS_LABEL', '')
|
||||
ws_explicit = os.environ.get('MAM_WS_LABEL_EXPLICIT') == '1'
|
||||
if wsl and (ws_explicit or not target.get('herdr_workspace')):
|
||||
target['herdr_workspace'] = wsl
|
||||
|
||||
target['status'] = 'running'
|
||||
target.pop('terminated_at', None)
|
||||
|
||||
Reference in New Issue
Block a user