MCPcopy Index your code
hub / github.com/codeaashu/claude-code / cacheToStats

Function cacheToStats

src/utils/stats.ts:440–634  ·  view source on GitHub ↗

* Convert a PersistedStatsCache to ClaudeCodeStats by computing derived fields.

(
  cache: PersistedStatsCache,
  todayStats: ProcessedStats | null,
)

Source from the content-addressed store, hash-verified

438 * Convert a PersistedStatsCache to ClaudeCodeStats by computing derived fields.
439 */
440function cacheToStats(
441 cache: PersistedStatsCache,
442 todayStats: ProcessedStats | null,
443): ClaudeCodeStats {
444 // Merge cache with today's stats
445 const dailyActivityMap = new Map<string, DailyActivity>()
446 for (const day of cache.dailyActivity) {
447 dailyActivityMap.set(day.date, { ...day })
448 }
449 if (todayStats) {
450 for (const day of todayStats.dailyActivity) {
451 const existing = dailyActivityMap.get(day.date)
452 if (existing) {
453 existing.messageCount += day.messageCount
454 existing.sessionCount += day.sessionCount
455 existing.toolCallCount += day.toolCallCount
456 } else {
457 dailyActivityMap.set(day.date, { ...day })
458 }
459 }
460 }
461
462 const dailyModelTokensMap = new Map<string, { [model: string]: number }>()
463 for (const day of cache.dailyModelTokens) {
464 dailyModelTokensMap.set(day.date, { ...day.tokensByModel })
465 }
466 if (todayStats) {
467 for (const day of todayStats.dailyModelTokens) {
468 const existing = dailyModelTokensMap.get(day.date)
469 if (existing) {
470 for (const [model, tokens] of Object.entries(day.tokensByModel)) {
471 existing[model] = (existing[model] || 0) + tokens
472 }
473 } else {
474 dailyModelTokensMap.set(day.date, { ...day.tokensByModel })
475 }
476 }
477 }
478
479 // Merge model usage
480 const modelUsage = { ...cache.modelUsage }
481 if (todayStats) {
482 for (const [model, usage] of Object.entries(todayStats.modelUsage)) {
483 if (modelUsage[model]) {
484 modelUsage[model] = {
485 inputTokens: modelUsage[model]!.inputTokens + usage.inputTokens,
486 outputTokens: modelUsage[model]!.outputTokens + usage.outputTokens,
487 cacheReadInputTokens:
488 modelUsage[model]!.cacheReadInputTokens +
489 usage.cacheReadInputTokens,
490 cacheCreationInputTokens:
491 modelUsage[model]!.cacheCreationInputTokens +
492 usage.cacheCreationInputTokens,
493 webSearchRequests:
494 modelUsage[model]!.webSearchRequests + usage.webSearchRequests,
495 costUSD: modelUsage[model]!.costUSD + usage.costUSD,
496 contextWindow: Math.max(
497 modelUsage[model]!.contextWindow,

Callers 1

aggregateClaudeCodeStatsFunction · 0.85

Calls 7

calculateStreaksFunction · 0.85
featureFunction · 0.85
entriesMethod · 0.80
maxMethod · 0.80
valuesMethod · 0.80
getMethod · 0.65
setMethod · 0.45

Tested by

no test coverage detected