MCPcopy Create free account
hub / github.com/AnukarOP/claude-code-leaked / mergeCacheWithNewStats

Function mergeCacheWithNewStats

source code/utils/statsCache.ts:262–400  ·  view source on GitHub ↗
(
  existingCache: PersistedStatsCache,
  newStats: {
    dailyActivity: DailyActivity[]
    dailyModelTokens: DailyModelTokens[]
    modelUsage: { [modelName: string]: ModelUsage }
    sessionStats: SessionStats[]
    hourCounts: { [hour: number]: number }
    totalSpeculationTimeSavedMs: number
    shotDistribution?: { [shotCount: number]: number }
  },
  newLastComputedDate: string,
)

Source from the content-addressed store, hash-verified

260 * Used when incrementally adding new days to the cache.
261 */
262export function mergeCacheWithNewStats(
263 existingCache: PersistedStatsCache,
264 newStats: {
265 dailyActivity: DailyActivity[]
266 dailyModelTokens: DailyModelTokens[]
267 modelUsage: { [modelName: string]: ModelUsage }
268 sessionStats: SessionStats[]
269 hourCounts: { [hour: number]: number }
270 totalSpeculationTimeSavedMs: number
271 shotDistribution?: { [shotCount: number]: number }
272 },
273 newLastComputedDate: string,
274): PersistedStatsCache {
275 // Merge daily activity - combine by date
276 const dailyActivityMap = new Map<string, DailyActivity>()
277 for (const day of existingCache.dailyActivity) {
278 dailyActivityMap.set(day.date, { ...day })
279 }
280 for (const day of newStats.dailyActivity) {
281 const existing = dailyActivityMap.get(day.date)
282 if (existing) {
283 existing.messageCount += day.messageCount
284 existing.sessionCount += day.sessionCount
285 existing.toolCallCount += day.toolCallCount
286 } else {
287 dailyActivityMap.set(day.date, { ...day })
288 }
289 }
290
291 // Merge daily model tokens - combine by date
292 const dailyModelTokensMap = new Map<string, { [model: string]: number }>()
293 for (const day of existingCache.dailyModelTokens) {
294 dailyModelTokensMap.set(day.date, { ...day.tokensByModel })
295 }
296 for (const day of newStats.dailyModelTokens) {
297 const existing = dailyModelTokensMap.get(day.date)
298 if (existing) {
299 for (const [model, tokens] of Object.entries(day.tokensByModel)) {
300 existing[model] = (existing[model] || 0) + tokens
301 }
302 } else {
303 dailyModelTokensMap.set(day.date, { ...day.tokensByModel })
304 }
305 }
306
307 // Merge model usage
308 const modelUsage = { ...existingCache.modelUsage }
309 for (const [model, usage] of Object.entries(newStats.modelUsage)) {
310 if (modelUsage[model]) {
311 modelUsage[model] = {
312 inputTokens: modelUsage[model]!.inputTokens + usage.inputTokens,
313 outputTokens: modelUsage[model]!.outputTokens + usage.outputTokens,
314 cacheReadInputTokens:
315 modelUsage[model]!.cacheReadInputTokens + usage.cacheReadInputTokens,
316 cacheCreationInputTokens:
317 modelUsage[model]!.cacheCreationInputTokens +
318 usage.cacheCreationInputTokens,
319 webSearchRequests:

Callers 1

aggregateClaudeCodeStatsFunction · 0.85

Calls 4

setMethod · 0.80
entriesMethod · 0.80
maxMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected