attachSession method
Attaches the child's real session file to its handle (called by the
executor at child completion when a session factory is wired). The
handle's placeholder id becomes the real JSONL path used by
/agents open <id> and task_observe.
Implementation
Future<void> attachSession(String id, String sessionPath) async {
final handle = _handles[id];
if (handle == null) return;
handle.sessionId = sessionPath;
handle.lastActivity = clock().toIso8601String();
_events.add(SubagentEvent(handle: handle));
_persist();
}