fix: use consistent date range for menubar status queries

The menubar showed stale prices because provider all used end:now while provider specific queries used end:endOfDay. Sessions with timestamps after now was captured were excluded from all providers but included in specific provider queries.

Use periodInfo.range consistently across all parseAllSessions calls in menubar json status.
This commit is contained in:
AgentSeal 2026-04-22 21:28:12 +02:00
parent 3355e3699e
commit 2e5e449ad1

View file

@ -421,8 +421,7 @@ program
let scanRange: DateRange let scanRange: DateRange
if (isAllProviders) { if (isAllProviders) {
const todayRange: DateRange = { start: todayStart, end: now } const todayProjects = fp(await parseAllSessions(periodInfo.range, 'all'))
const todayProjects = fp(await parseAllSessions(todayRange, 'all'))
const todayDays = aggregateProjectsIntoDays(todayProjects) const todayDays = aggregateProjectsIntoDays(todayProjects)
const rangeStartStr = toDateString(periodInfo.range.start) const rangeStartStr = toDateString(periodInfo.range.start)
const rangeEndStr = toDateString(periodInfo.range.end) const rangeEndStr = toDateString(periodInfo.range.end)
@ -431,7 +430,7 @@ program
const allDays = [...historicalDays, ...todayInRange].sort((a, b) => a.date.localeCompare(b.date)) const allDays = [...historicalDays, ...todayInRange].sort((a, b) => a.date.localeCompare(b.date))
currentData = buildPeriodDataFromDays(allDays, periodInfo.label) currentData = buildPeriodDataFromDays(allDays, periodInfo.label)
scanProjects = todayProjects scanProjects = todayProjects
scanRange = todayRange scanRange = periodInfo.range
} else { } else {
const projects = fp(await parseAllSessions(periodInfo.range, pf)) const projects = fp(await parseAllSessions(periodInfo.range, pf))
currentData = buildPeriodData(periodInfo.label, projects) currentData = buildPeriodData(periodInfo.label, projects)
@ -446,8 +445,7 @@ program
const displayNameByName = new Map(allProviders.map(p => [p.name, p.displayName])) const displayNameByName = new Map(allProviders.map(p => [p.name, p.displayName]))
const providers: ProviderCost[] = [] const providers: ProviderCost[] = []
if (isAllProviders) { if (isAllProviders) {
const todayRangeForProviders: DateRange = { start: todayStart, end: now } const todayDaysForProviders = aggregateProjectsIntoDays(fp(await parseAllSessions(periodInfo.range, 'all')))
const todayDaysForProviders = aggregateProjectsIntoDays(fp(await parseAllSessions(todayRangeForProviders, 'all')))
const rangeStartStr = toDateString(periodInfo.range.start) const rangeStartStr = toDateString(periodInfo.range.start)
const allDaysForProviders = [ const allDaysForProviders = [
...getDaysInRange(cache, rangeStartStr, yesterdayStr), ...getDaysInRange(cache, rangeStartStr, yesterdayStr),
@ -478,7 +476,7 @@ program
// in the cache, so the filtered view shows zero tokens (heatmap/trend still works on cost). // in the cache, so the filtered view shows zero tokens (heatmap/trend still works on cost).
const historyStartStr = toDateString(new Date(todayStart.getTime() - BACKFILL_DAYS * MS_PER_DAY)) const historyStartStr = toDateString(new Date(todayStart.getTime() - BACKFILL_DAYS * MS_PER_DAY))
const allCacheDays = getDaysInRange(cache, historyStartStr, yesterdayStr) const allCacheDays = getDaysInRange(cache, historyStartStr, yesterdayStr)
const allTodayDaysForHistory = aggregateProjectsIntoDays(fp(await parseAllSessions({ start: todayStart, end: now }, 'all'))) const allTodayDaysForHistory = aggregateProjectsIntoDays(fp(await parseAllSessions(periodInfo.range, 'all')))
const fullHistory = [...allCacheDays, ...allTodayDaysForHistory] const fullHistory = [...allCacheDays, ...allTodayDaysForHistory]
const dailyHistory = fullHistory.map(d => { const dailyHistory = fullHistory.map(d => {
if (isAllProviders) { if (isAllProviders) {