fix(chat): fetch context usage immediately on session change/connect (#746)

Clears stale context token states on session switch/creation and fetches

fresh context usage info immediately instead of waiting for the 5s poll.

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-07-30 11:37:36 +03:00
1 parent 1b596746af
commit 698d2f6c3f
2 files changed
+16

No files matched your search

@@ -134,6 +134,10 @@ fun ChatScreen(
// Periodic session sync while connected.
LaunchedEffect(state.currentSessionId, state.connectionStatus) {
if (state.currentSessionId != null && state.connectionStatus == ConnectionStatus.CONNECTED) {
viewModel.syncCurrentSession()
viewModel.fetchContextUsage()
}
while (state.currentSessionId != null && state.connectionStatus == ConnectionStatus.CONNECTED) {
delay(SESSION_SYNC_INTERVAL_MS)
viewModel.syncCurrentSession()
@@ -595,6 +595,9 @@ class ChatViewModel(
isLoading = false,
messages = emptyList(),
chatTitle = "Hermes",
usedContextTokens = null,
fullContextTokens = null,
contextBreakdown = null,
)
}
// Mirror the active session id app-wide so session-scoped
@@ -604,6 +607,7 @@ class ChatViewModel(
_streamingState.update { StreamingState() }
addSystemMessage("Session created", persist = true)
loadSessions()
fetchContextUsage()
}
WsMethods.SESSION_BRANCH -> {
@@ -616,6 +620,9 @@ class ChatViewModel(
isLoading = false,
messages = emptyList(),
chatTitle = (resultMap["title"] as? String)?.takeIf { t -> t.isNotBlank() } ?: "Hermes",
usedContextTokens = null,
fullContextTokens = null,
contextBreakdown = null,
)
}
ActiveSessionHolder.set(newId)
@@ -623,6 +630,7 @@ class ChatViewModel(
addSystemMessage("Session branched", persist = true)
loadSessionMessages(newId)
loadSessions()
fetchContextUsage()
}
WsMethods.SESSION_LIST -> {
@@ -684,6 +692,7 @@ class ChatViewModel(
// Mirror the active runtime session id app-wide (issue #532).
ActiveSessionHolder.set(runtimeSessionId ?: sessionId)
addSystemMessage("Session resumed")
fetchContextUsage()
}
WsMethods.SESSION_INTERRUPT -> {
@@ -1447,6 +1456,9 @@ class ChatViewModel(
chatTitle = title,
showSessionPicker = false,
isAgentTyping = false,
usedContextTokens = null,
fullContextTokens = null,
contextBreakdown = null,
)
}
// Mirror the active session id app-wide (issue #532).