diff --git a/gui/ollie9pclient.cpp b/gui/ollie9pclient.cpp index f12b22a..da27392 100644 --- a/gui/ollie9pclient.cpp +++ b/gui/ollie9pclient.cpp @@ -523,42 +523,25 @@ void Ollie9pClient::startEventStream() connect(m_eventProc, &QProcess::readyReadStandardOutput, this, &Ollie9pClient::onEventReadyRead); connect(m_eventProc, QOverload::of(&QProcess::finished), this, &Ollie9pClient::onEventFinished); - m_eventProc->start(ninepBin(), {"-a", serverAddr(), "read", "session/eventwait"}); + m_eventProc->start(ollie9pBin(), {"-a", serverAddr(), "read", "eventwait"}); } void Ollie9pClient::onEventReadyRead() { - // eventwait returned the full session index — use it directly - QByteArray data = m_eventProc->readAllStandardOutput(); - // Don't trim — trailing tabs are significant fields - QString raw = QString::fromUtf8(data); + QByteArray data = m_eventProc->readAllStandardOutput(); + QString raw = QString::fromUtf8(data); + if (raw.isEmpty()) return; - m_sessions.clear(); - QSet seen; - if (!raw.isEmpty()) { - for (const QString &line : raw.split('\n', Qt::SkipEmptyParts)) { - QStringList parts = line.split('\t'); - // Skip lines where the first field (session name) is empty - if (parts.isEmpty() || parts[0].isEmpty()) continue; - QString sid = parts[0]; - if (seen.contains(sid)) continue; // already added (multi-agent) - seen.insert(sid); - QVariantMap session; - session["id"] = sid; - session["state"] = parts.size() > 1 ? parts[1] : ""; - session["cwd"] = parts.size() > 2 ? parts[2] : ""; - session["backend"] = parts.size() > 3 ? parts[3] : ""; - session["model"] = parts.size() > 4 ? parts[4] : ""; - session["agent"] = parts.size() > 5 ? parts[5] : ""; - m_sessions.append(session); - } - } - emit sessionsChanged(); - - // Auto-select first session if none active - if (m_activeSessionId.isEmpty() && !m_sessions.isEmpty()) { - setActiveSessionId(m_sessions.first().toMap()["id"].toString()); - } + // Events come as lines: " " + // S new session/{name} + // A new session/{name}/agent/{aid} + // S kill session/{name} + // A kill session/{name}/agent/{aid} + // S rename session/{old} session/{new} + // A rename session/{name}/agent/{old} session/{name}/agent/{new} + // + // For simplicity, refresh the full session index on any event. + refreshSessions(); } void Ollie9pClient::onEventFinished(int, QProcess::ExitStatus)