Files
orca/src/preload/api/agent-usage-api.ts
T
NeilandEddie Jaoude cfe769e4bc feat(usage): add Devin tracking backend
Backend Devin tracking implementation.

Co-authored-by: Eddie Jaoude <eddie@jaoudestudios.com>
2026-09-19 00:19:51 -07:00

63 lines
2.6 KiB
TypeScript

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