diff options
| author | Aiden Cline <[email protected]> | 2026-01-01 13:25:26 -0600 |
|---|---|---|
| committer | Aiden Cline <[email protected]> | 2026-01-01 13:25:26 -0600 |
| commit | 9be944a2d212b5104beeefeb8508566c4d47a1e1 (patch) | |
| tree | 428d4c3737229865028c255701d9267a39b16e9f | |
| parent | 5138f9250e685780e63cb3b178fc2654557655a5 (diff) | |
| download | opencode-9be944a2d212b5104beeefeb8508566c4d47a1e1.tar.gz opencode-9be944a2d212b5104beeefeb8508566c4d47a1e1.zip | |
core: fix stats command day calculation and time filtering
| -rw-r--r-- | packages/opencode/src/cli/cmd/stats.ts | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/packages/opencode/src/cli/cmd/stats.ts b/packages/opencode/src/cli/cmd/stats.ts index 81e250d20..d78c4f0ab 100644 --- a/packages/opencode/src/cli/cmd/stats.ts +++ b/packages/opencode/src/cli/cmd/stats.ts @@ -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) |
