#ifndef SESSION_MANAGER_H #define SESSION_MANAGER_H #include #include #include #include #include #include // SessionManager is the D-Bus adaptee. The generated SessionManagerAdaptor // (from qt6_add_dbus_adaptor) forwards D-Bus method calls to slots here. // Signals defined here are relayed by the adaptor onto the bus. class SessionManager : public QObject { Q_OBJECT public: explicit SessionManager(QObject *parent = nullptr); ~SessionManager() override; public slots: // Session lifecycle QString CreateSession(const QString &cwd, const QString &backend, const QString &model, const QString &agent); QStringList ListSessions(); bool KillSession(const QString &session_id); bool RenameSession(const QString &session_id, const QString &new_name); // Interaction bool Submit(const QString &session_id, const QString &prompt); bool Interrupt(const QString &session_id); // State queries QString GetState(const QString &session_id); QString GetChat(const QString &session_id, qlonglong offset, qlonglong &new_offset); QString GetUsage(const QString &session_id); QString GetCost(const QString &session_id); // Config QString GetConfig(const QString &session_id); bool SetConfig(const QString &session_id, const QString &key, const QString &value); // Context QString GetContext(const QString &session_id); // Backends/models/agents QStringList ListBackends(); QStringList ListModels(const QString &session_id); QStringList ListAgents(); // Peers bool PeerAdd(const QString &session_id, const QString &peer_id); bool PeerRemove(const QString &session_id, const QString &peer_id); QStringList PeerList(const QString &session_id); bool PeerSubmit(const QString &session_id, const QString &peer_id, const QString &prompt); signals: void SessionCreated(const QString &session_id); void SessionKilled(const QString &session_id); void StateChanged(const QString &session_id, const QString &new_state); void ChatUpdated(const QString &session_id, qlonglong offset, const QString &new_text); private: void installCallbacks(); void sendNotification(const QString &title, const QString &body); QHash m_sessionStates; private slots: void handleStateChange(const QString &session_id, const QString &new_state); }; #endif // SESSION_MANAGER_H