Files
multi-agent-mux/.agents/skills/lib_py/workspace_uuid.py
T

88 lines
2.9 KiB
Python

# workspace_uuid.py — workspace UUID discovery logic
# Extracted from lib.sh find_workspace_uuid PYEOF block
import os, sys, json
from lib_py.verify_session import verify_session_uuid, mam_orchestrator_uuids, mam_row_own_uuid
OWN_KEY = {
'claude': 'claude_session_id_own',
'agy': 'agy_conversation_id_own',
'hermes': 'hermes_conversation_id_own',
'cline': 'cline_conversation_id_own',
'grok': 'grok_session_id_own'
}
from lib_py.paths import resolve_home
def find_workspace_uuid_main():
ws = os.environ['WS_ABS']
agent = os.environ['AGENT']
home = resolve_home()
claude_project_dir = os.environ.get('CLAUDE_PROJECT_DIR', f"{home}/.claude/projects")
target = os.environ.get('TARGET_SESSION', '')
try:
d = json.loads(os.environ.get('MAM_STATE_JSON', '{}'))
except Exception:
d = {}
running_ids = set()
for s_item in d.get('herdr_sessions', []):
if s_item.get('status') == 'running':
if target and s_item.get('name') == target:
continue
for k in ['claude_session_id_own', 'agy_conversation_id_own', 'hermes_conversation_id_own', 'cline_conversation_id_own', 'grok_session_id_own']:
val = s_item.get(k)
if val:
running_ids.add(val)
orchestrator_ids = set(mam_orchestrator_uuids())
if target:
for s_item in d.get('herdr_sessions', []):
if s_item.get('name') == target:
own = mam_row_own_uuid(s_item)
if own:
orchestrator_ids.discard(own)
def emit(u):
if u in running_ids or u in orchestrator_ids:
return
print(u)
sys.exit(0)
# Fetch all sessions matching this workspace
sessions = []
for s in d.get('herdr_sessions', []):
s_cwd = (s.get('pane') or {}).get('cwd', '') if isinstance(s, dict) else ''
if s_cwd and (s_cwd == ws or os.path.realpath(s_cwd) == os.path.realpath(ws)):
sessions.append(s)
if target:
for s in sessions:
if s.get('name') != target:
continue
cand = s.get(OWN_KEY.get(agent, ''), None)
if cand and verify_session_uuid(ws, agent, cand, s, mode="revalidate"):
emit(cand)
for s in sessions:
name = s.get('name', '')
if name.endswith(f"-creator-{agent}"):
cand = s.get(OWN_KEY.get(agent, ''))
if cand and verify_session_uuid(ws, agent, cand, s, mode="revalidate"):
emit(cand)
from lib_py.agents.registry import get_adapter
from lib_py.agents.base import DiscoveryContext
adapter = get_adapter(agent)
if adapter:
ctx = DiscoveryContext(workspace=ws, agent_name=agent, home_dir=home, claude_dir=claude_project_dir)
for cand in adapter.discover(ctx):
emit(cand)
print('')
if __name__ == '__main__':
find_workspace_uuid_main()