71 lines
2.0 KiB
C++
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
|