summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-01-01 13:25:26 -0600
committerAiden Cline <[email protected]>2026-01-01 13:25:26 -0600
commit9be944a2d212b5104beeefeb8508566c4d47a1e1 (patch)
tree428d4c3737229865028c255701d9267a39b16e9f
parent5138f9250e685780e63cb3b178fc2654557655a5 (diff)
downloadopencode-9be944a2d212b5104beeefeb8508566c4d47a1e1.tar.gz
opencode-9be944a2d212b5104beeefeb8508566c4d47a1e1.zip
core: fix stats command day calculation and time filtering
-rw-r--r--packages/opencode/src/cli/cmd/stats.ts16
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)