From e2065e8d961d191e7e3e0553e8a65f3f4c29e4a9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 24 Jan 2026 00:15:12 +0000 Subject: [PATCH] fix: reset session tokens on /new (#1542) (thanks @robbyczgw-cla) --- CHANGELOG.md | 1 + ...ver.sessions.gateway-server-sessions-a.e2e.test.ts | 10 +++++++++- src/tui/tui-command-handlers.ts | 11 ++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56e0fb6e6..fd1632992 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Docs: https://docs.clawd.bot - CLI: suppress diagnostic session/run noise during auth probes. - Linux: include env-configured user bin roots in systemd PATH and align PATH audits. (#1512) Thanks @robbyczgw-cla. - TUI: render Gateway slash-command replies as system output (for example, `/context`). +- TUI/Gateway: reset session token counters on `/new` and refresh the footer immediately. (#1542) Thanks @robbyczgw-cla. - Media: preserve PNG alpha when possible; fall back to JPEG when still over size cap. (#1491) Thanks @robbyczgw-cla. - Agents: treat plugin-only tool allowlists as opt-ins; keep core tools enabled. (#1467) - Exec approvals: persist allowlist entry ids to keep macOS allowlist rows stable. (#1521) Thanks @ngutman. diff --git a/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts b/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts index 26a46ac30..40a145b86 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts @@ -345,11 +345,19 @@ describe("gateway server sessions", () => { const reset = await rpcReq<{ ok: true; key: string; - entry: { sessionId: string }; + entry: { + sessionId: string; + inputTokens?: number; + outputTokens?: number; + totalTokens?: number; + }; }>(ws, "sessions.reset", { key: "agent:main:main" }); expect(reset.ok).toBe(true); expect(reset.payload?.key).toBe("agent:main:main"); expect(reset.payload?.entry.sessionId).not.toBe("sess-main"); + expect(reset.payload?.entry.inputTokens).toBe(0); + expect(reset.payload?.entry.outputTokens).toBe(0); + expect(reset.payload?.entry.totalTokens).toBe(0); const badThinking = await rpcReq(ws, "sessions.patch", { key: "agent:main:main", diff --git a/src/tui/tui-command-handlers.ts b/src/tui/tui-command-handlers.ts index a14172809..2d33b10a6 100644 --- a/src/tui/tui-command-handlers.ts +++ b/src/tui/tui-command-handlers.ts @@ -408,15 +408,16 @@ export function createCommandHandlers(context: CommandHandlerContext) { case "new": case "reset": try { - // Clear token counts immediately to avoid stale display (#1523) - state.sessionInfo.inputTokens = null; - state.sessionInfo.outputTokens = null; - state.sessionInfo.totalTokens = null; + await client.resetSession(state.currentSessionKey); + // Clear token counts after reset to avoid stale display while refreshing. (#1523) + state.sessionInfo.inputTokens = 0; + state.sessionInfo.outputTokens = 0; + state.sessionInfo.totalTokens = 0; tui.requestRender(); - await client.resetSession(state.currentSessionKey); chatLog.addSystem(`session ${state.currentSessionKey} reset`); await loadHistory(); + await refreshSessionInfo(); } catch (err) { chatLog.addSystem(`reset failed: ${String(err)}`); }