|
|
@@ -118,6 +118,12 @@ export async function aggregateSessionStats(days?: number, projectFilter?: strin
|
|
|
return Date.now() - days * MS_IN_DAY
|
|
|
})()
|
|
|
|
|
|
+ const windowDays = (() => {
|
|
|
+ if (days === undefined) return
|
|
|
+ if (days === 0) return 1
|
|
|
+ return days
|
|
|
+ })()
|
|
|
+
|
|
|
let filteredSessions = cutoffTime > 0 ? sessions.filter((session) => session.time.updated >= cutoffTime) : sessions
|
|
|
|
|
|
if (projectFilter !== undefined) {
|
|
|
@@ -159,6 +165,7 @@ export async function aggregateSessionStats(days?: number, projectFilter?: strin
|
|
|
}
|
|
|
|
|
|
if (filteredSessions.length === 0) {
|
|
|
+ stats.days = windowDays ?? 0
|
|
|
return stats
|
|
|
}
|
|
|
|
|
|
@@ -231,7 +238,7 @@ export async function aggregateSessionStats(days?: number, projectFilter?: strin
|
|
|
sessionTotalTokens: sessionTokens.input + sessionTokens.output + sessionTokens.reasoning,
|
|
|
sessionToolUsage,
|
|
|
sessionModelUsage,
|
|
|
- earliestTime: session.time.created,
|
|
|
+ earliestTime: cutoffTime > 0 ? session.time.updated : session.time.created,
|
|
|
latestTime: session.time.updated,
|
|
|
}
|
|
|
})
|
|
|
@@ -271,13 +278,14 @@ export async function aggregateSessionStats(days?: number, projectFilter?: strin
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const actualDays = Math.max(1, Math.ceil((latestTime - earliestTime) / MS_IN_DAY))
|
|
|
+ const rangeDays = Math.max(1, Math.ceil((latestTime - earliestTime) / MS_IN_DAY))
|
|
|
+ const effectiveDays = windowDays ?? rangeDays
|
|
|
stats.dateRange = {
|
|
|
earliest: earliestTime,
|
|
|
latest: latestTime,
|
|
|
}
|
|
|
- stats.days = actualDays
|
|
|
- stats.costPerDay = stats.totalCost / actualDays
|
|
|
+ stats.days = effectiveDays
|
|
|
+ stats.costPerDay = stats.totalCost / effectiveDays
|
|
|
const totalTokens = stats.totalTokens.input + stats.totalTokens.output + stats.totalTokens.reasoning
|
|
|
stats.tokensPerSession = filteredSessions.length > 0 ? totalTokens / filteredSessions.length : 0
|
|
|
sessionTotalTokens.sort((a, b) => a - b)
|