fix: update totalTokens after compaction using last-call usage (#15018)

Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: 9214291bf7
Co-authored-by: shtse8 <8020099+shtse8@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
Kyle Tse
2026-02-12 23:02:30 +00:00
committed by GitHub
parent 033d5b5c15
commit a10f228a5b
10 changed files with 602 additions and 19 deletions

View File

@@ -0,0 +1,46 @@
import { deriveSessionTotalTokens, type NormalizedUsage } from "../../agents/usage.js";
import { incrementCompactionCount } from "./session-updates.js";
import { persistSessionUsageUpdate } from "./session-usage.js";
type PersistRunSessionUsageParams = Parameters<typeof persistSessionUsageUpdate>[0];
type IncrementRunCompactionCountParams = Omit<
Parameters<typeof incrementCompactionCount>[0],
"tokensAfter"
> & {
lastCallUsage?: NormalizedUsage;
contextTokensUsed?: number;
};
export async function persistRunSessionUsage(params: PersistRunSessionUsageParams): Promise<void> {
await persistSessionUsageUpdate({
storePath: params.storePath,
sessionKey: params.sessionKey,
usage: params.usage,
lastCallUsage: params.lastCallUsage,
modelUsed: params.modelUsed,
providerUsed: params.providerUsed,
contextTokensUsed: params.contextTokensUsed,
systemPromptReport: params.systemPromptReport,
cliSessionId: params.cliSessionId,
logLabel: params.logLabel,
});
}
export async function incrementRunCompactionCount(
params: IncrementRunCompactionCountParams,
): Promise<number | undefined> {
const tokensAfterCompaction = params.lastCallUsage
? deriveSessionTotalTokens({
usage: params.lastCallUsage,
contextTokens: params.contextTokensUsed,
})
: undefined;
return incrementCompactionCount({
sessionEntry: params.sessionEntry,
sessionStore: params.sessionStore,
sessionKey: params.sessionKey,
storePath: params.storePath,
tokensAfter: tokensAfterCompaction,
});
}