MCPcopy Create free account
hub / github.com/arctic-cli/interface / fetchSessionUsage

Function fetchSessionUsage

packages/arctic/src/provider/usage.ts:164–299  ·  view source on GitHub ↗
(input: {
    provider: Provider.Info
    sessionID?: string
    timePeriod?: TimePeriod
  })

Source from the content-addressed store, hash-verified

162 }
163
164 async function fetchSessionUsage(input: {
165 provider: Provider.Info
166 sessionID?: string
167 timePeriod?: TimePeriod
168 }): Promise<Omit<Record, "providerID" | "providerName" | "fetchedAt">> {
169 const timePeriod = input.timePeriod ?? "session"
170 const now = Date.now()
171
172 // Calculate time boundaries
173 const timeFilter = getTimeFilter(timePeriod, now)
174
175 let inputTokens = 0
176 let outputTokens = 0
177 let cacheReadTokens = 0
178 let cacheCreationTokens = 0
179 let found = false
180 let inspectedMessages = 0
181 let modelID: string | undefined
182 let limitSummary:
183 | {
184 planType?: string
185 allowed?: boolean
186 limitReached?: boolean
187 limits?: { primary?: RateLimitWindowSummary }
188 }
189 | undefined
190 let limitError: string | undefined
191
192 // For session mode, require sessionID
193 if (timePeriod === "session" && !input.sessionID) {
194 // We can still fetch usage limits for z.ai even without session context.
195 if (input.provider.id !== "zai-coding-plan") {
196 return {}
197 }
198 }
199
200 // Get messages to scan (avoid scanning all sessions when sessionID is missing)
201 let messageKeys: string[][] = []
202 if (timePeriod === "session") {
203 if (input.sessionID) {
204 messageKeys = await Storage.list(["message", input.sessionID])
205 }
206 } else {
207 // For time-based queries, scan all sessions
208 const allSessions = await Storage.list(["message"])
209 messageKeys = allSessions
210 }
211
212 for (const messageKey of messageKeys) {
213 const msg = await Storage.read<MessageV2.Info>(messageKey)
214
215 // Filter by provider - match exact provider ID (including connection)
216 if (msg.role !== "assistant" || msg.providerID !== input.provider.id || !msg.tokens) {
217 continue
218 }
219
220 // Filter by time period
221 const messageTime = msg.time?.completed ?? msg.time?.created

Callers 2

fetchMinimaxUsageFunction · 0.85
fetchAntigravityUsageFunction · 0.85

Calls 3

getTimeFilterFunction · 0.85
fetchZaiUsageLimitsFunction · 0.85
listMethod · 0.45

Tested by

no test coverage detected