feat(scope): implement workspace-scoped session isolation (A-1) and native Herdr session naming (A-5)

This commit is contained in:
2026-08-05 09:31:57 +09:00
parent 793a221587
commit 51dcf56c80
7 changed files with 89 additions and 57 deletions
@@ -44,8 +44,8 @@ if [ -z "$UUID" ]; then
exit 1
fi
HERDR_SERVER_NAME="$(resolve_herdr_workspace "$SESSION_NAME")"
export HERDR_SERVER_NAME
HERDR_SESSION_NAME="$(resolve_herdr_session "$SESSION_NAME")"
export HERDR_SESSION_NAME
# 2. If herdr is alive, print warning or attach.
if herdr has-session -t "$SESSION_NAME" 2>/dev/null; then
@@ -37,8 +37,8 @@ done
[ -n "$UUID" ] || { echo "ERROR: --uuid required" >&2; exit 2; }
[ -f "$AGENT_SESSIONS_YAML" ] || { echo "ERROR: $AGENT_SESSIONS_YAML not found" >&2; exit 1; }
HERDR_SERVER_NAME="$(resolve_herdr_workspace "$SESSION_NAME")"
export HERDR_SERVER_NAME
HERDR_SESSION_NAME="$(resolve_herdr_session "$SESSION_NAME")"
export HERDR_SESSION_NAME
# --agent 미지정 시 이름 suffix 로 fallback (P1-F: 가능하면 --agent 명시)
if [ -z "$AGENT" ]; then
@@ -101,19 +101,21 @@ for s in d.get('herdr_sessions', []):
break
if target is None:
server_name = os.environ.get('HERDR_SERVER_NAME', 'multi-agent-mux')
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)
target = {
'name': name,
'status': 'running',
'role': role,
'herdr_session_created_at': now,
'herdr_session_epoch': epoch,
'herdr_server': server_name,
'herdr_session': server_name,
'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_SERVER_NAME={server_name} herdr agent attach {name}',
'attach_command': f'HERDR_SERVER_NAME={server_name} herdr agent attach {name}',
'kill_command': f'HERDR_SERVER_NAME={server_name} herdr kill-session -t {name}',
'start_command': f'HERDR_SESSION_NAME={server_name} herdr agent attach {name}',
'attach_command': f'HERDR_SESSION_NAME={server_name} herdr agent attach {name}',
'kill_command': f'HERDR_SESSION_NAME={server_name} herdr kill-session -t {name}',
}
d.setdefault('herdr_sessions', []).append(target)