diff --git a/src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts b/src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts index 6748ae41dc0..6bebdc6a390 100644 --- a/src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts +++ b/src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts @@ -1266,6 +1266,7 @@ describe("runReplyAgent typing (heartbeat)", () => { sessionFile: transcriptPath, modelProvider: "qwencode", model: "qwen3.5-plus-2026-02-15", + contextTokens: 123456, systemPromptReport: { source: "run", generatedAt: Date.now(), @@ -1316,11 +1317,13 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(sessionStore.main.modelProvider).toBeUndefined(); expect(sessionStore.main.model).toBeUndefined(); + expect(sessionStore.main.contextTokens).toBeUndefined(); expect(sessionStore.main.systemPromptReport).toBeUndefined(); const persisted = JSON.parse(await fs.readFile(storePath, "utf-8")); expect(persisted.main.modelProvider).toBeUndefined(); expect(persisted.main.model).toBeUndefined(); + expect(persisted.main.contextTokens).toBeUndefined(); expect(persisted.main.systemPromptReport).toBeUndefined(); }); }); diff --git a/src/auto-reply/reply/agent-runner.ts b/src/auto-reply/reply/agent-runner.ts index 4595addbc6b..edc441a2552 100644 --- a/src/auto-reply/reply/agent-runner.ts +++ b/src/auto-reply/reply/agent-runner.ts @@ -280,6 +280,7 @@ export async function runReplyAgent(params: { abortedLastRun: false, modelProvider: undefined, model: undefined, + contextTokens: undefined, systemPromptReport: undefined, fallbackNoticeSelectedModel: undefined, fallbackNoticeActiveModel: undefined, diff --git a/src/gateway/server-methods/sessions.ts b/src/gateway/server-methods/sessions.ts index 6a385f3a661..83bf3057278 100644 --- a/src/gateway/server-methods/sessions.ts +++ b/src/gateway/server-methods/sessions.ts @@ -136,6 +136,7 @@ function stripRuntimeModelState(entry?: SessionEntry): SessionEntry | undefined ...entry, model: undefined, modelProvider: undefined, + contextTokens: undefined, systemPromptReport: undefined, }; } @@ -519,13 +520,10 @@ export const sessionsHandlers: GatewayRequestHandlers = { const next = await updateSessionStore(storePath, (store) => { const { primaryKey } = migrateAndPruneSessionStoreKey({ cfg, key, store }); const entry = store[primaryKey]; + const resetEntry = stripRuntimeModelState(entry); const parsed = parseAgentSessionKey(primaryKey); const sessionAgentId = normalizeAgentId(parsed?.agentId ?? resolveDefaultAgentId(cfg)); - const resolvedModel = resolveSessionModelRef( - cfg, - stripRuntimeModelState(entry), - sessionAgentId, - ); + const resolvedModel = resolveSessionModelRef(cfg, resetEntry, sessionAgentId); oldSessionId = entry?.sessionId; oldSessionFile = entry?.sessionFile; const now = Date.now(); @@ -540,7 +538,7 @@ export const sessionsHandlers: GatewayRequestHandlers = { responseUsage: entry?.responseUsage, model: resolvedModel.model, modelProvider: resolvedModel.provider, - contextTokens: entry?.contextTokens, + contextTokens: resetEntry?.contextTokens, sendPolicy: entry?.sendPolicy, label: entry?.label, origin: snapshotSessionOrigin(entry), 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 0e87d32a762..1decc4b9178 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.test.ts @@ -606,6 +606,7 @@ describe("gateway server sessions", () => { updatedAt: Date.now(), modelProvider: "qwencode", model: "qwen3.5-plus-2026-02-15", + contextTokens: 123456, }, }, }); @@ -614,7 +615,7 @@ describe("gateway server sessions", () => { const reset = await rpcReq<{ ok: true; key: string; - entry: { sessionId: string; modelProvider?: string; model?: string }; + entry: { sessionId: string; modelProvider?: string; model?: string; contextTokens?: number }; }>(ws, "sessions.reset", { key: "main" }); expect(reset.ok).toBe(true); @@ -622,6 +623,7 @@ describe("gateway server sessions", () => { expect(reset.payload?.entry.sessionId).not.toBe("sess-stale-model"); expect(reset.payload?.entry.modelProvider).toBe("openai"); expect(reset.payload?.entry.model).toBe("gpt-test-a"); + expect(reset.payload?.entry.contextTokens).toBeUndefined(); ws.close(); });