export type HudSurface = "statusline" | "footer"; export type LineLayout = "expanded" | "compact"; export type ModelFamily = "openai" | "claude" | "other"; export type HudElement = "project" | "identity" | "usage" | "tools" | "agents" | "session"; export type HudConfig = { enabled: boolean; surface: HudSurface; lineLayout: LineLayout; showSeparators: boolean; pathLevels: 1 | 2 | 3; elementOrder: HudElement[]; display: { showProject: boolean; showContextBar: boolean; showUsage: boolean; showLimits: boolean; showTools: boolean; showAgents: boolean; showSession: boolean; showSessionTokens: boolean; showSpeed: boolean; showCost: boolean; }; }; export type ToolRun = { id: string; name: string; target?: string; startedAt: number; isAgent: boolean; }; export type FinishedTool = { name: string; ok: boolean; elapsedMs: number; }; export type HudState = { sessionStartedAt: number; agentStartedAt?: number; turnStartedAt?: number; assistantTurnActive: boolean; turns: number; activeTools: Map; toolCounts: Map; failedToolCounts: Map; lastTool?: FinishedTool; agentCompleted: number; agentFailed: number; lastOutputSpeed?: number; }; export type SessionStats = { inputTokens: number; outputTokens: number; cacheReadTokens: number; cacheWriteTokens: number; totalTokens: number; cost: number; }; export type ModelInfo = { family: ModelFamily; provider: string; label: string; contextWindow: number; maxOutputTokens: number; reasoning: boolean; }; export type ContextInfo = { tokens: number; window: number; percent: number | null; remainingTokens: number | null; }; export type UsageLimitWindow = { label: string; usedPercent: number; resetAt?: number; limitReached?: boolean; allowed?: boolean; }; export type ProviderLimitInfo = { source: "codex-rollout" | "codex-log" | "unavailable"; windows: UsageLimitWindow[]; note?: string; }; export type GitInfo = { branch: string | null; dirty: boolean; ahead: number; behind: number; fileStats?: { modified: number; added: number; deleted: number; untracked: number; }; };