fix(herdr): support Herdr 0.8.0 pane allocation, agent prompt, and length limits

This commit is contained in:
2026-08-14 10:49:29 +09:00
parent 720f8ad224
commit a7f3fc3242
9 changed files with 185 additions and 50 deletions
@@ -458,6 +458,11 @@ def _pin_and_verify_resume(s, agent, cwd, uuid, degraded=False):
actions.append(f"updated {id_name} id: {uuid}")
def _sanitize(n):
if len(n) <= 32:
return n
return f"{n[:16]}-{n[-15:]}"[:32]
yaml_sessions = d.get('herdr_sessions', [])
yaml_session_names = {s['name'] for s in yaml_sessions if s.get('name')}
alive_set = {(t['name'], t.get('server', 'default')) for t in herdr_sessions}
@@ -474,7 +479,7 @@ if herdr_confirmed:
if s.get('status') in ('terminated', 'archived', 'stopped'):
continue
srv = s.get('herdr_session') or s.get('herdr_server') or s.get('herdr_workspace') or 'default'
if (name, srv) not in alive_set:
if (name, srv) not in alive_set and (_sanitize(name), srv) not in alive_set:
s['status'] = 'terminated'
s['terminated_at'] = now_iso
s['terminated_at_epoch'] = int(datetime.now(timezone.utc).timestamp())
@@ -488,7 +493,7 @@ if herdr_confirmed:
if herdr_confirmed:
for t in herdr_sessions:
name = t['name']
if name in yaml_session_names:
if name in yaml_session_names or any(_sanitize(y) == name for y in yaml_session_names):
continue
workspace_root = os.environ.get('WORKSPACE_ROOT')
if not workspace_root: