























@@ -163,6 +163,8 @@ export function renderUsage(props: UsageProps) {
163163const isTokenMode = display.chartMode === "tokens";
164164const hasQuery = filters.query.trim().length > 0;
165165const hasDraftQuery = filters.queryDraft.trim().length > 0;
166+const selectedDaySet = new Set(filters.selectedDays);
167+const selectedSessionSet = new Set(filters.selectedSessions);
166168167169// Sort sessions by tokens or cost depending on mode
168170const sortedSessions = [...data.sessions].toSorted((a, b) => {
@@ -179,17 +181,17 @@ export function renderUsage(props: UsageProps) {
179181180182// Filter sessions by selected days
181183const dayFilteredSessions =
182-filters.selectedDays.length > 0
184+selectedDaySet.size > 0
183185 ? agentScopedSessions.filter((s) => {
184186if (s.usage?.activityDates?.length) {
185-return s.usage.activityDates.some((d) => filters.selectedDays.includes(d));
187+return s.usage.activityDates.some((d) => selectedDaySet.has(d));
186188}
187189if (!s.updatedAt) {
188190return false;
189191}
190192const d = new Date(s.updatedAt);
191193const sessionDate = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
192-return filters.selectedDays.includes(sessionDate);
194+return selectedDaySet.has(sessionDate);
193195})
194196 : agentScopedSessions;
195197@@ -261,8 +263,8 @@ export function renderUsage(props: UsageProps) {
261263};
262264263265// Compute totals from daily data for selected days (more accurate than session totals)
264-const computeDailyTotals = (days: string[]): UsageTotals => {
265-const matchingDays = data.costDaily.filter((d) => days.includes(d.date));
266+const computeDailyTotals = (days: ReadonlySet<string>): UsageTotals => {
267+const matchingDays = data.costDaily.filter((d) => days.has(d.date));
266268return matchingDays.reduce((acc, day) => addUsageTotals(acc, day), createEmptyUsageTotals());
267269};
268270@@ -273,14 +275,12 @@ export function renderUsage(props: UsageProps) {
273275274276if (filters.selectedSessions.length > 0) {
275277// Sessions selected - compute totals from selected sessions
276-const selectedSessionEntries = filteredSessions.filter((s) =>
277-filters.selectedSessions.includes(s.key),
278-);
278+const selectedSessionEntries = filteredSessions.filter((s) => selectedSessionSet.has(s.key));
279279displayTotals = computeSessionTotals(selectedSessionEntries);
280280displaySessionCount = selectedSessionEntries.length;
281281} else if (filters.selectedDays.length > 0 && filters.selectedHours.length === 0) {
282282// Days selected - use daily aggregates for accurate per-day totals
283-displayTotals = computeDailyTotals(filters.selectedDays);
283+displayTotals = computeDailyTotals(selectedDaySet);
284284displaySessionCount = filteredSessions.length;
285285} else if (filters.selectedHours.length > 0) {
286286displayTotals = computeSessionTotals(filteredSessions);
@@ -299,7 +299,7 @@ export function renderUsage(props: UsageProps) {
299299300300const aggregateSessions =
301301filters.selectedSessions.length > 0
302- ? filteredSessions.filter((s) => filters.selectedSessions.includes(s.key))
302+ ? filteredSessions.filter((s) => selectedSessionSet.has(s.key))
303303 : hasQuery || filters.selectedHours.length > 0
304304 ? filteredSessions
305305 : filters.selectedDays.length > 0
@@ -326,9 +326,7 @@ export function renderUsage(props: UsageProps) {
326326const filteredDaily =
327327filters.selectedSessions.length > 0
328328 ? (() => {
329-const selectedEntries = filteredSessions.filter((s) =>
330-filters.selectedSessions.includes(s.key),
331-);
329+const selectedEntries = filteredSessions.filter((s) => selectedSessionSet.has(s.key));
332330const allActivityDates = new Set<string>();
333331for (const entry of selectedEntries) {
334332for (const date of entry.usage?.activityDates ?? []) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。