feat(coding-agent): show cache hit rate in footer

This commit is contained in:
Mario Zechner
2026-06-05 10:01:11 +02:00
parent 3e73204242
commit db594d3a59
4 changed files with 32 additions and 1 deletions

View File

@@ -88,6 +88,7 @@ export class FooterComponent implements Component {
let totalCacheRead = 0;
let totalCacheWrite = 0;
let totalCost = 0;
let latestCacheHitRate: number | undefined;
for (const entry of this.session.sessionManager.getEntries()) {
if (entry.type === "message" && entry.message.role === "assistant") {
@@ -96,6 +97,11 @@ export class FooterComponent implements Component {
totalCacheRead += entry.message.usage.cacheRead;
totalCacheWrite += entry.message.usage.cacheWrite;
totalCost += entry.message.usage.cost.total;
const latestPromptTokens =
entry.message.usage.input + entry.message.usage.cacheRead + entry.message.usage.cacheWrite;
latestCacheHitRate =
latestPromptTokens > 0 ? (entry.message.usage.cacheRead / latestPromptTokens) * 100 : undefined;
}
}
@@ -127,6 +133,9 @@ export class FooterComponent implements Component {
if (totalOutput) statsParts.push(`${formatTokens(totalOutput)}`);
if (totalCacheRead) statsParts.push(`R${formatTokens(totalCacheRead)}`);
if (totalCacheWrite) statsParts.push(`W${formatTokens(totalCacheWrite)}`);
if ((totalCacheRead > 0 || totalCacheWrite > 0) && latestCacheHitRate !== undefined) {
statsParts.push(`CH${latestCacheHitRate.toFixed(1)}%`);
}
// Show cost with "(sub)" indicator if using OAuth subscription
const usingSubscription = state.model ? this.session.modelRegistry.isUsingOAuth(state.model) : false;