Optimize session status updates

Reduce per-token store churn by updating status on transitions, caching instance-level indicators, and avoiding O(n) session-map cloning.
This commit is contained in:
Shantur Rathore
2026-01-06 09:58:55 +00:00
parent 1a6f1fdbae
commit f24e360d78
4 changed files with 261 additions and 88 deletions

View File

@@ -1,7 +1,7 @@
import type { Session, SessionStatus } from "../types/session"
import type { MessageInfo } from "../types/message"
import type { MessageRecord } from "./message-v2/types"
import { sessions } from "./sessions"
import { getInstanceSessionIndicatorStatusCached, sessions } from "./session-state"
import { isSessionCompactionActive } from "./session-compaction"
import { messageStoreBus } from "./message-v2/bus"
@@ -173,42 +173,7 @@ export function getSessionStatus(instanceId: string, sessionId: string): Session
export type InstanceSessionIndicatorStatus = "permission" | SessionStatus
export function getInstanceSessionIndicatorStatus(instanceId: string): InstanceSessionIndicatorStatus {
const instanceSessions = sessions().get(instanceId)
if (!instanceSessions || instanceSessions.size === 0) {
return "idle"
}
let bestRank = 0
let best: InstanceSessionIndicatorStatus = "idle"
for (const session of instanceSessions.values()) {
let rank = 0
let status: InstanceSessionIndicatorStatus = "idle"
if (session.pendingPermission) {
status = "permission"
rank = 3
} else {
const sessionStatus = getSessionStatus(instanceId, session.id)
if (sessionStatus === "compacting") {
status = "compacting"
rank = 2
} else if (sessionStatus === "working") {
status = "working"
rank = 1
}
}
if (rank > bestRank) {
bestRank = rank
best = status
if (bestRank === 3) {
break
}
}
}
return best
return getInstanceSessionIndicatorStatusCached(instanceId)
}
export function isSessionBusy(instanceId: string, sessionId: string): boolean {