diff --git a/src/gateway/server-methods/sessions.ts b/src/gateway/server-methods/sessions.ts index c90e3439bfd..22366be8a62 100644 --- a/src/gateway/server-methods/sessions.ts +++ b/src/gateway/server-methods/sessions.ts @@ -149,6 +149,11 @@ function emitSessionsChanged( sessionId: sessionRow.sessionId, kind: sessionRow.kind, channel: sessionRow.channel, + subject: sessionRow.subject, + groupChannel: sessionRow.groupChannel, + space: sessionRow.space, + chatType: sessionRow.chatType, + origin: sessionRow.origin, spawnedBy: sessionRow.spawnedBy, label: sessionRow.label, displayName: sessionRow.displayName, @@ -156,8 +161,14 @@ function emitSessionsChanged( parentSessionKey: sessionRow.parentSessionKey, childSessions: sessionRow.childSessions, thinkingLevel: sessionRow.thinkingLevel, + fastMode: sessionRow.fastMode, + verboseLevel: sessionRow.verboseLevel, + reasoningLevel: sessionRow.reasoningLevel, + elevatedLevel: sessionRow.elevatedLevel, systemSent: sessionRow.systemSent, abortedLastRun: sessionRow.abortedLastRun, + inputTokens: sessionRow.inputTokens, + outputTokens: sessionRow.outputTokens, lastChannel: sessionRow.lastChannel, lastTo: sessionRow.lastTo, lastAccountId: sessionRow.lastAccountId, @@ -165,6 +176,7 @@ function emitSessionsChanged( totalTokensFresh: sessionRow.totalTokensFresh, contextTokens: sessionRow.contextTokens, estimatedCostUsd: sessionRow.estimatedCostUsd, + responseUsage: sessionRow.responseUsage, modelProvider: sessionRow.modelProvider, model: sessionRow.model, status: sessionRow.status, diff --git a/src/gateway/server.impl.ts b/src/gateway/server.impl.ts index 3a844059f94..77d886ed710 100644 --- a/src/gateway/server.impl.ts +++ b/src/gateway/server.impl.ts @@ -941,6 +941,11 @@ export async function startGatewayServer( sessionId: sessionRow.sessionId, kind: sessionRow.kind, channel: sessionRow.channel, + subject: sessionRow.subject, + groupChannel: sessionRow.groupChannel, + space: sessionRow.space, + chatType: sessionRow.chatType, + origin: sessionRow.origin, spawnedBy: sessionRow.spawnedBy, label: sessionRow.label, displayName: sessionRow.displayName, @@ -948,8 +953,14 @@ export async function startGatewayServer( parentSessionKey: sessionRow.parentSessionKey, childSessions: sessionRow.childSessions, thinkingLevel: sessionRow.thinkingLevel, + fastMode: sessionRow.fastMode, + verboseLevel: sessionRow.verboseLevel, + reasoningLevel: sessionRow.reasoningLevel, + elevatedLevel: sessionRow.elevatedLevel, systemSent: sessionRow.systemSent, abortedLastRun: sessionRow.abortedLastRun, + inputTokens: sessionRow.inputTokens, + outputTokens: sessionRow.outputTokens, lastChannel: sessionRow.lastChannel, lastTo: sessionRow.lastTo, lastAccountId: sessionRow.lastAccountId, @@ -957,6 +968,7 @@ export async function startGatewayServer( totalTokensFresh: sessionRow.totalTokensFresh, contextTokens: sessionRow.contextTokens, estimatedCostUsd: sessionRow.estimatedCostUsd, + responseUsage: sessionRow.responseUsage, modelProvider: sessionRow.modelProvider, model: sessionRow.model, status: sessionRow.status, @@ -1023,6 +1035,11 @@ export async function startGatewayServer( sessionId: sessionRow.sessionId, kind: sessionRow.kind, channel: sessionRow.channel, + subject: sessionRow.subject, + groupChannel: sessionRow.groupChannel, + space: sessionRow.space, + chatType: sessionRow.chatType, + origin: sessionRow.origin, spawnedBy: sessionRow.spawnedBy, label: event.label ?? sessionRow.label, displayName: event.displayName ?? sessionRow.displayName, @@ -1030,8 +1047,14 @@ export async function startGatewayServer( parentSessionKey: event.parentSessionKey ?? sessionRow.parentSessionKey, childSessions: sessionRow.childSessions, thinkingLevel: sessionRow.thinkingLevel, + fastMode: sessionRow.fastMode, + verboseLevel: sessionRow.verboseLevel, + reasoningLevel: sessionRow.reasoningLevel, + elevatedLevel: sessionRow.elevatedLevel, systemSent: sessionRow.systemSent, abortedLastRun: sessionRow.abortedLastRun, + inputTokens: sessionRow.inputTokens, + outputTokens: sessionRow.outputTokens, lastChannel: sessionRow.lastChannel, lastTo: sessionRow.lastTo, lastAccountId: sessionRow.lastAccountId, @@ -1039,6 +1062,7 @@ export async function startGatewayServer( totalTokensFresh: sessionRow.totalTokensFresh, contextTokens: sessionRow.contextTokens, estimatedCostUsd: sessionRow.estimatedCostUsd, + responseUsage: sessionRow.responseUsage, modelProvider: sessionRow.modelProvider, model: sessionRow.model, status: sessionRow.status, diff --git a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts index 75236a6e911..dae4f1b0247 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts @@ -593,6 +593,58 @@ describe("gateway server sessions", () => { ); }); + test("sessions.changed mutation events include live session setting metadata", async () => { + await createSessionStoreDir(); + await writeSessionStore({ + entries: { + main: { + sessionId: "sess-main", + updatedAt: Date.now(), + verboseLevel: "on", + responseUsage: "full", + fastMode: true, + }, + }, + }); + + const broadcastToConnIds = vi.fn(); + const respond = vi.fn(); + const sessionsHandlers = await getSessionsHandlers(); + await sessionsHandlers["sessions.patch"]({ + req: {} as never, + params: { + key: "main", + verboseLevel: "on", + }, + respond, + context: { + broadcastToConnIds, + getSessionEventSubscriberConnIds: () => new Set(["conn-1"]), + loadGatewayModelCatalog: async () => ({ providers: [] }), + } as never, + client: null, + isWebchatConnect: () => false, + }); + + expect(respond).toHaveBeenCalledWith( + true, + expect.objectContaining({ ok: true, key: "agent:main:main" }), + undefined, + ); + expect(broadcastToConnIds).toHaveBeenCalledWith( + "sessions.changed", + expect.objectContaining({ + sessionKey: "agent:main:main", + reason: "patch", + verboseLevel: "on", + responseUsage: "full", + fastMode: true, + }), + new Set(["conn-1"]), + { dropIfSlow: true }, + ); + }); + test("lists and patches session store via sessions.* RPC", async () => { const { dir, storePath } = await createSessionStoreDir(); const now = Date.now(); diff --git a/src/gateway/session-utils.ts b/src/gateway/session-utils.ts index 81dbc5cfcf1..65fd966d2ac 100644 --- a/src/gateway/session-utils.ts +++ b/src/gateway/session-utils.ts @@ -1210,6 +1210,7 @@ export function buildGatewaySessionRow(params: { systemSent: entry?.systemSent, abortedLastRun: entry?.abortedLastRun, thinkingLevel: entry?.thinkingLevel, + fastMode: entry?.fastMode, verboseLevel: entry?.verboseLevel, reasoningLevel: entry?.reasoningLevel, elevatedLevel: entry?.elevatedLevel,