This repository has been archived on 2026-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
ollie-kde/gui/ollie9pclient.h

71 lines
2.0 KiB
C++

#ifndef OLLIE9PCLIENT_H
#define OLLIE9PCLIENT_H
#include <QObject>
#include <QProcess>
#include <QVariantList>
#if QT_VERSION_MAJOR >= 6
#include <QQmlEngine>
#endif
// 9P-based client for ollie. Uses ollie-9p subprocess for transport.
// Streaming files (chat, statewait) use persistent QProcess instances.
class Ollie9pClient : public QObject
{
Q_OBJECT
#if QT_VERSION_MAJOR >= 6
QML_ELEMENT
QML_SINGLETON
#endif
Q_PROPERTY(QVariantList sessions READ sessions NOTIFY sessionsChanged)
Q_PROPERTY(QString activeSessionId READ activeSessionId WRITE setActiveSessionId NOTIFY activeSessionIdChanged)
Q_PROPERTY(QString activeState READ activeState NOTIFY activeStateChanged)
public:
explicit Ollie9pClient(QObject *parent = nullptr);
~Ollie9pClient();
QVariantList sessions() const { return m_sessions; }
QString activeSessionId() const { return m_activeSessionId; }
void setActiveSessionId(const QString &id);
QString activeState() const { return m_activeState; }
Q_INVOKABLE void refreshSessions();
Q_INVOKABLE QString readLog();
Q_INVOKABLE bool submit(const QString &prompt);
Q_INVOKABLE bool interrupt();
Q_INVOKABLE bool kill();
Q_INVOKABLE QString getConfig();
signals:
void sessionsChanged();
void activeSessionIdChanged();
void activeStateChanged();
void chatReceived(const QString &text);
void streamingDone(); // chat process exited (session killed)
private slots:
void onChatReadyRead();
void onStateReadyRead();
void onChatFinished(int exitCode, QProcess::ExitStatus status);
void onStateFinished(int exitCode, QProcess::ExitStatus status);
private:
void startChatStream();
void startStateStream();
void stopStreams();
QString agentPath() const;
QByteArray run9p(const QStringList &args);
QVariantList m_sessions;
QString m_activeSessionId;
QString m_activeState = "idle";
QString m_agentId;
QProcess *m_chatProc = nullptr;
QProcess *m_stateProc = nullptr;
};
#endif // OLLIE9PCLIENT_H