import type { ClaudeUsageBreakdownKind, ClaudeUsageSnapshot } from '../../shared/claude-usage-types' import type { CodexUsageBreakdownKind, CodexUsageSnapshot } from '../../shared/codex-usage-types' import type { OpenCodeUsageBreakdownKind, OpenCodeUsageSnapshot } from '../../shared/opencode-usage-types' import type { MuseUsageBreakdownKind, MuseUsageSnapshot } from '../../shared/muse-usage-types' import type { CodexRateLimitResetResult, RateLimitRuntimeTarget, RateLimitState } from '../../shared/rate-limit-types' export type UsageProviderSnapshot = { scanState: unknown summary: { scope: string; range: string } daily: unknown[] modelBreakdown: unknown[] recentSessions: unknown[] } export type UsageQueryArgs = Pick< Snapshot['summary'], 'scope' | 'range' > export type UsageProviderApi = { getScanState: () => Promise setEnabled: (args: { enabled: boolean }) => Promise refresh: (args?: { force?: boolean }) => Promise getSnapshot: (args: UsageQueryArgs & { limit?: number }) => Promise getSummary: (args: UsageQueryArgs) => Promise getDaily: (args: UsageQueryArgs) => Promise getBreakdown: ( args: UsageQueryArgs & { kind: BreakdownKind } ) => Promise getRecentSessions: ( args: UsageQueryArgs & { limit?: number } ) => Promise } export type ClaudeUsageApi = UsageProviderApi export type CodexUsageApi = UsageProviderApi export type OpenCodeUsageApi = UsageProviderApi export type MuseUsageApi = UsageProviderApi export type RateLimitsApi = { get: () => Promise refresh: () => Promise refreshCodexForTarget: (target: RateLimitRuntimeTarget) => Promise consumeCodexResetCredit: () => Promise refreshClaudeForTarget: (target: RateLimitRuntimeTarget) => Promise setPollingInterval: (ms: number) => Promise fetchInactiveClaudeAccounts: () => Promise fetchInactiveCodexAccounts: () => Promise refreshMiniMax: () => Promise refreshGrok: () => Promise onUpdate: (callback: (state: RateLimitState) => void) => () => void }