MCPcopy Create free account
hub / github.com/tiann/hapi / handleSessionAlive

Method handleSessionAlive

hub/src/sync/sessionCache.ts:167–264  ·  view source on GitHub ↗
(payload: {
        sid: string
        time: number
        thinking?: boolean
        mode?: 'local' | 'remote'
        permissionMode?: PermissionMode
        model?: string | null
        modelReasoningEffort?: string | null
        effort?: string | null
        collaborationMode?: CodexCollaborationMode
    })

Source from the content-addressed store, hash-verified

165 }
166
167 handleSessionAlive(payload: {
168 sid: string
169 time: number
170 thinking?: boolean
171 mode?: 'local' | 'remote'
172 permissionMode?: PermissionMode
173 model?: string | null
174 modelReasoningEffort?: string | null
175 effort?: string | null
176 collaborationMode?: CodexCollaborationMode
177 }): void {
178 const t = clampAliveTime(payload.time)
179 if (!t) return
180
181 const session = this.sessions.get(payload.sid) ?? this.refreshSession(payload.sid)
182 if (!session) return
183
184 const wasActive = session.active
185 const wasThinking = session.thinking
186 const previousPermissionMode = session.permissionMode
187 const previousModel = session.model
188 const previousModelReasoningEffort = session.modelReasoningEffort
189 const previousEffort = session.effort
190 const previousCollaborationMode = session.collaborationMode
191 const pendingThinkingUntil = this.pendingThinkingUntilBySessionId.get(session.id) ?? 0
192 const requestedThinking = Boolean(payload.thinking)
193 const hubNow = Date.now()
194 const preserveQueuedThinking = !requestedThinking && pendingThinkingUntil > hubNow
195
196 session.active = true
197 session.activeAt = Math.max(session.activeAt, t)
198 session.thinking = requestedThinking || preserveQueuedThinking
199 session.thinkingAt = t
200 if (requestedThinking || pendingThinkingUntil <= hubNow) {
201 this.pendingThinkingUntilBySessionId.delete(session.id)
202 }
203 if (payload.permissionMode !== undefined && !this.isStaleRuntimeKeepAlive(session.id, 'permissionMode', t)) {
204 session.permissionMode = payload.permissionMode
205 this.persistPreferredPermissionMode(session, payload.permissionMode)
206 }
207 if (payload.model !== undefined && !this.isStaleRuntimeKeepAlive(session.id, 'model', t)) {
208 if (payload.model !== session.model) {
209 this.store.sessions.setSessionModel(payload.sid, payload.model, session.namespace, {
210 touchUpdatedAt: false
211 })
212 }
213 session.model = payload.model
214 }
215 if (payload.modelReasoningEffort !== undefined && !this.isStaleRuntimeKeepAlive(session.id, 'modelReasoningEffort', t)) {
216 if (payload.modelReasoningEffort !== session.modelReasoningEffort) {
217 this.store.sessions.setSessionModelReasoningEffort(payload.sid, payload.modelReasoningEffort, session.namespace, {
218 touchUpdatedAt: false
219 })
220 }
221 session.modelReasoningEffort = payload.modelReasoningEffort
222 }
223 if (payload.effort !== undefined && !this.isStaleRuntimeKeepAlive(session.id, 'effort', t)) {
224 if (payload.effort !== session.effort) {

Callers

nothing calls this directly

Calls 9

refreshSessionMethod · 0.95
clampAliveTimeFunction · 0.90
getMethod · 0.80
setSessionModelMethod · 0.80
setSessionEffortMethod · 0.80
emitMethod · 0.45

Tested by

no test coverage detected