Files
codex-limit-monitor/src/types.ts
2026-05-17 03:53:15 +03:30

97 lines
1.9 KiB
TypeScript

export type RateLimitBucket = {
limitId: string;
limitName: string | null;
usedPercent: number;
windowDurationMins: number | null;
resetsAt: number | null;
secondaryUsedPercent: number | null;
secondaryResetsAt: number | null;
reachedType: string | null;
};
export type LiveStatus = {
state: "online" | "fallback" | "offline" | string;
detail: string | null;
};
export type TokenBreakdown = {
input: number;
output: number;
cached: number;
reasoning: number;
tool: number;
responses: number;
};
export type ThreadUsage = {
id: string;
title: string;
tokensUsed: number;
model: string | null;
reasoningEffort: string | null;
updatedAt: number;
cwd: string | null;
};
export type ModelUsage = {
model: string;
tokens: number;
threads: number;
};
export type UsageSummary = {
totalTokens: number;
todayTokens: number;
weekTokens: number;
threadCount: number;
todayThreadCount: number;
weekThreadCount: number;
currentThread: ThreadUsage | null;
recentThreads: ThreadUsage[];
modelBreakdown: ModelUsage[];
tokenBreakdown: TokenBreakdown;
sourcePath: string | null;
error: string | null;
};
export type MonitorSnapshot = {
source: string;
fetchedAt: number;
liveStatus: LiveStatus;
buckets: RateLimitBucket[];
usageSummary: UsageSummary;
currentThread: ThreadUsage | null;
message: string | null;
};
export type UsagePoint = {
label: string;
tokens: number;
threads: number;
};
export type UsageHistory = {
range: string;
points: UsagePoint[];
};
export type BadgePosition = {
x: number;
y: number;
};
export type AppSettings = {
codexExecutable: string | null;
codexHome: string;
refreshIntervalSecs: number;
badgeVisible: boolean;
badgePosition: BadgePosition;
privacyMode: boolean;
thresholds: {
warning: number;
critical: number;
exhausted: number;
};
notificationsMutedUntil: number | null;
};