Files
orca/src/preload/usage-provider-api.ts
T
Neil eb18eaf2b6 feat(usage): add Muse Code local usage provider (#22379)
* feat(usage): add Muse Code local usage provider

Scan Muse session logs (including subagent logs, which hold usage the parent
log does not) for model_completed token events and surface them as a fourth
local usage provider: shared scan worker, persisted per-file cache reused by
mtime/size, cross-log dedupe, Stats tab, and Usage Overview integration.
Muse logs carry no price, so the provider reports tokens only.

* fix(usage): name Muse in Stats & Usage copy; skip partial-cost warning when nothing is priced

* fix(usage): surface unreadable Muse sessions root; name Muse in remaining Stats & Usage copy

* fix(usage): count distinct same-content Muse records within one log
2026-09-22 22:44:10 -07:00

30 lines
1.3 KiB
TypeScript

import type { IpcRenderer } from 'electron'
import type { PreloadApi } from './api-types'
type UsageProviderApiKey = 'claudeUsage' | 'codexUsage' | 'openCodeUsage' | 'museUsage'
type UsageProviderApi = PreloadApi[UsageProviderApiKey]
type UsageRangeArgs = { scope: string; range: string }
export function createUsageProviderApi<Key extends UsageProviderApiKey>(
ipc: Pick<IpcRenderer, 'invoke'>,
prefix: Key
): PreloadApi[Key]
export function createUsageProviderApi(
ipc: Pick<IpcRenderer, 'invoke'>,
prefix: UsageProviderApiKey
): UsageProviderApi {
return {
getScanState: () => ipc.invoke(`${prefix}:getScanState`),
setEnabled: (args: { enabled: boolean }) => ipc.invoke(`${prefix}:setEnabled`, args),
refresh: (args?: { force?: boolean }) => ipc.invoke(`${prefix}:refresh`, args),
getSnapshot: (args: UsageRangeArgs & { limit?: number }) =>
ipc.invoke(`${prefix}:getSnapshot`, args),
getSummary: (args: UsageRangeArgs) => ipc.invoke(`${prefix}:getSummary`, args),
getDaily: (args: UsageRangeArgs) => ipc.invoke(`${prefix}:getDaily`, args),
getBreakdown: (args: UsageRangeArgs & { kind: string }) =>
ipc.invoke(`${prefix}:getBreakdown`, args),
getRecentSessions: (args: UsageRangeArgs & { limit?: number }) =>
ipc.invoke(`${prefix}:getRecentSessions`, args)
}
}