فهرست منبع

core: fix stats command day calculation and time filtering

Aiden Cline 1 ماه پیش
والد
کامیت
9be944a2d2
1فایلهای تغییر یافته به همراه12 افزوده شده و 4 حذف شده
  1. 12 4
      packages/opencode/src/cli/cmd/stats.ts

+ 12 - 4
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)