openclaw/src/auto-reply/reply/session-run-accounting.ts
青雲 fd076eb43a
fix: /status shows incorrect context percentage — totalTokens clamped to contextTokens (#15114) (#15133)
Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: a489669fc7e86db03484ef5a0ae222d9360e72f7
Co-authored-by: echoVic <16428813+echoVic@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-02-12 23:52:19 -05:00

48 lines
1.6 KiB
TypeScript

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,
promptTokens: params.promptTokens,
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,
});
}