feat: add configurable pi statusbar extension
This commit is contained in:
98
usage.ts
Normal file
98
usage.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
export type Provider = "openai-codex" | "zai" | "anthropic";
|
||||
|
||||
export type UsageUnit = "percent" | "tokens" | "requests" | "usd" | "minutes" | "bytes" | "unknown";
|
||||
|
||||
export type UsageStatus = "ok" | "warning" | "exhausted" | "unknown";
|
||||
|
||||
export interface UsageWindow {
|
||||
id: string;
|
||||
label: string;
|
||||
durationMs?: number;
|
||||
resetsAt?: number;
|
||||
}
|
||||
|
||||
export interface UsageAmount {
|
||||
used?: number;
|
||||
limit?: number;
|
||||
remaining?: number;
|
||||
usedFraction?: number;
|
||||
remainingFraction?: number;
|
||||
unit: UsageUnit;
|
||||
}
|
||||
|
||||
export interface UsageScope {
|
||||
provider: Provider;
|
||||
accountId?: string;
|
||||
projectId?: string;
|
||||
orgId?: string;
|
||||
modelId?: string;
|
||||
tier?: string;
|
||||
windowId?: string;
|
||||
shared?: boolean;
|
||||
}
|
||||
|
||||
export interface UsageLimit {
|
||||
id: string;
|
||||
label: string;
|
||||
scope: UsageScope;
|
||||
window?: UsageWindow;
|
||||
amount: UsageAmount;
|
||||
status?: UsageStatus;
|
||||
notes?: string[];
|
||||
}
|
||||
|
||||
export interface UsageReport {
|
||||
provider: Provider;
|
||||
fetchedAt: number;
|
||||
limits: UsageLimit[];
|
||||
metadata?: Record<string, unknown>;
|
||||
raw?: unknown;
|
||||
}
|
||||
|
||||
export interface UsageLogger {
|
||||
debug(message: string, meta?: Record<string, unknown>): void;
|
||||
warn(message: string, meta?: Record<string, unknown>): void;
|
||||
}
|
||||
|
||||
export interface UsageCredential {
|
||||
type: "api_key" | "oauth";
|
||||
apiKey?: string;
|
||||
accessToken?: string;
|
||||
refreshToken?: string;
|
||||
expiresAt?: number;
|
||||
accountId?: string;
|
||||
projectId?: string;
|
||||
email?: string;
|
||||
enterpriseUrl?: string;
|
||||
metadata?: Record<string, unknown>;
|
||||
}
|
||||
|
||||
export interface UsageFetchParams {
|
||||
provider: Provider;
|
||||
credential: UsageCredential;
|
||||
baseUrl?: string;
|
||||
signal?: AbortSignal;
|
||||
}
|
||||
|
||||
export interface UsageFetchContext {
|
||||
fetch: typeof fetch;
|
||||
logger?: UsageLogger;
|
||||
}
|
||||
|
||||
export interface UsageProvider {
|
||||
id: Provider;
|
||||
fetchUsage(params: UsageFetchParams, ctx: UsageFetchContext): Promise<UsageReport | null>;
|
||||
supports?(params: UsageFetchParams): boolean;
|
||||
}
|
||||
|
||||
export interface CredentialRankingStrategy {
|
||||
findWindowLimits(report: UsageReport): {
|
||||
primary?: UsageLimit;
|
||||
secondary?: UsageLimit;
|
||||
};
|
||||
windowDefaults: {
|
||||
primaryMs: number;
|
||||
secondaryMs: number;
|
||||
};
|
||||
hasPriorityBoost?(primary: UsageLimit | undefined): boolean;
|
||||
}
|
||||
Reference in New Issue
Block a user