diff --git a/kde/gui/ChatPane.qml b/kde/gui/ChatPane.qml index 04b95a1..f0ba59a 100644 --- a/kde/gui/ChatPane.qml +++ b/kde/gui/ChatPane.qml @@ -95,7 +95,7 @@ Item { width: 10; height: 10; radius: 5 color: { if (!ollie.activeAgentId) return "#9e9e9e" // gray when no agent - if (ollie.activeSessionId && ollie.isSessionPaused(ollie.activeSessionId)) return "#9e9e9e" // gray when paused + if (ollie.activeSessionPaused) return "#9e9e9e" // gray when paused if (ollie.activeState === "idle") return "#4caf50" if (ollie.activeState.startsWith("calling")) return "#ff9800" return "#2196f3" @@ -105,7 +105,7 @@ Item { Label { text: { if (!ollie.activeAgentId) return "" - if (ollie.activeSessionId && ollie.isSessionPaused(ollie.activeSessionId)) return "inactive" + if (ollie.activeSessionPaused) return "inactive" return ollie.activeState } opacity: 0.7 @@ -405,10 +405,10 @@ Item { if (!ollie.daemonConnected) return "Not connected" if (!ollie.activeSessionId) return "No session" if (!ollie.activeAgentId) return "No agent" - if (ollie.isSessionPaused(ollie.activeSessionId)) return "Session paused" + if (ollie.activeSessionPaused) return "Session paused" return "B1=sel B2=exec B3=plumb B1+B2=cut B1+B3=paste" } - enabled: ollie.daemonConnected && ollie.activeSessionId !== "" && ollie.activeAgentId !== "" && !ollie.isSessionPaused(ollie.activeSessionId) + enabled: ollie.daemonConnected && ollie.activeSessionId !== "" && ollie.activeAgentId !== "" && !ollie.activeSessionPaused wrapMode: TextEdit.Wrap selectByMouse: true persistentSelection: true diff --git a/kde/gui/ollie9pclient.cpp b/kde/gui/ollie9pclient.cpp index 63e2c5b..a65df81 100644 --- a/kde/gui/ollie9pclient.cpp +++ b/kde/gui/ollie9pclient.cpp @@ -368,6 +368,13 @@ void Ollie9pClient::refreshSessions() emit sessionsChanged(); + // Update active session paused state + bool wasPaused = m_activeSessionPaused; + m_activeSessionPaused = isSessionPaused(m_activeSessionId); + if (m_activeSessionPaused != wasPaused) { + emit activeSessionPausedChanged(); + } + // Handle active session/agent removal if (!m_activeSessionId.isEmpty()) { if (!activeSessionFound) { @@ -581,9 +588,16 @@ void Ollie9pClient::switchAgent(const QString &sessionId, const QString &agentId // Use cached state from live tracking if available, otherwise default to idle m_activeState = m_agentStateValues.value(agentKey(sessionId, agentId), "idle"); + // Update paused state + bool wasPaused = m_activeSessionPaused; + m_activeSessionPaused = isSessionPaused(sessionId); + emit activeSessionIdChanged(); emit activeAgentIdChanged(); emit activeStateChanged(); + if (m_activeSessionPaused != wasPaused) { + emit activeSessionPausedChanged(); + } startActiveAgentStreams(); } diff --git a/kde/gui/ollie9pclient.h b/kde/gui/ollie9pclient.h index 824baa6..7962328 100644 --- a/kde/gui/ollie9pclient.h +++ b/kde/gui/ollie9pclient.h @@ -23,6 +23,7 @@ class Ollie9pClient : public QObject Q_PROPERTY(QString activeSessionId READ activeSessionId WRITE setActiveSessionId NOTIFY activeSessionIdChanged) Q_PROPERTY(QString activeAgentId READ activeAgentId NOTIFY activeAgentIdChanged) Q_PROPERTY(QString activeState READ activeState NOTIFY activeStateChanged) + Q_PROPERTY(bool activeSessionPaused READ activeSessionPaused NOTIFY activeSessionPausedChanged) Q_PROPERTY(bool rootBackendsLoaded READ rootBackendsLoaded NOTIFY rootBackendsLoadedChanged) Q_PROPERTY(QStringList availableBackends READ availableBackends NOTIFY availableBackendsChanged) Q_PROPERTY(bool rootAgentsLoaded READ rootAgentsLoaded NOTIFY rootAgentsLoadedChanged) @@ -42,6 +43,7 @@ public: Q_INVOKABLE void setActiveSessionId(const QString &id); QString activeAgentId() const { return m_agentId; } QString activeState() const { return m_activeState; } + bool activeSessionPaused() const { return m_activeSessionPaused; } bool rootBackendsLoaded() const { return m_rootBackendsLoaded; } QStringList availableBackends() const { return m_availableBackends; } @@ -99,6 +101,7 @@ signals: void activeSessionIdChanged(); void activeAgentIdChanged(); void activeStateChanged(); + void activeSessionPausedChanged(); void agentStateChanged(const QString &sessionId, const QString &agentId, const QString &state); void chatReceived(const QString &text); void bypassRequested(const QString &sessionId, const QString &agentId, const QString &id, const QString &cmd, const QString &cwd); @@ -133,6 +136,7 @@ private: QString m_activeSessionId; QString m_activeState = "idle"; QString m_agentId; + bool m_activeSessionPaused = false; // Root data cache bool m_rootBackendsLoaded = false;