From 0613fd35e2242faa757ffaa2451871d46c7d8031 Mon Sep 17 00:00:00 2001 From: Eason Goodale Date: Fri, 18 Apr 2025 03:20:10 -0700 Subject: [PATCH] lint, formatting --- .../components/chat/terminal-chat-input.tsx | 2 +- .../chat/terminal-chat-new-input.tsx | 2 +- codex-cli/src/utils/agent/agent-loop.ts | 18 +++++++++++++++--- codex-cli/src/utils/estimate-cost.ts | 2 ++ codex-cli/src/utils/session-cost.ts | 4 +++- codex-cli/tests/session-cost.test.ts | 10 ++++++++-- 6 files changed, 30 insertions(+), 8 deletions(-) diff --git a/codex-cli/src/components/chat/terminal-chat-input.tsx b/codex-cli/src/components/chat/terminal-chat-input.tsx index fe84f5ff47..0a8022cf8b 100644 --- a/codex-cli/src/components/chat/terminal-chat-input.tsx +++ b/codex-cli/src/components/chat/terminal-chat-input.tsx @@ -9,13 +9,13 @@ import { TerminalChatCommandReview } from "./terminal-chat-command-review.js"; import { log, isLoggingEnabled } from "../../utils/agent/log.js"; import { loadConfig } from "../../utils/config.js"; import { createInputItem } from "../../utils/input-utils.js"; +import { printAndResetSessionSummary } from "../../utils/session-cost.js"; import { setSessionId } from "../../utils/session.js"; import { loadCommandHistory, addToHistory, } from "../../utils/storage/command-history.js"; import { clearTerminal, onExit } from "../../utils/terminal.js"; -import { printAndResetSessionSummary } from "../../utils/session-cost.js"; import Spinner from "../vendor/ink-spinner.js"; import TextInput from "../vendor/ink-text-input.js"; import { Box, Text, useApp, useInput, useStdin } from "ink"; diff --git a/codex-cli/src/components/chat/terminal-chat-new-input.tsx b/codex-cli/src/components/chat/terminal-chat-new-input.tsx index c5c6fce1b2..733580e2a8 100644 --- a/codex-cli/src/components/chat/terminal-chat-new-input.tsx +++ b/codex-cli/src/components/chat/terminal-chat-new-input.tsx @@ -11,13 +11,13 @@ import { TerminalChatCommandReview } from "./terminal-chat-command-review.js"; import { log, isLoggingEnabled } from "../../utils/agent/log.js"; import { loadConfig } from "../../utils/config.js"; import { createInputItem } from "../../utils/input-utils.js"; +import { printAndResetSessionSummary } from "../../utils/session-cost.js"; import { setSessionId } from "../../utils/session.js"; import { loadCommandHistory, addToHistory, } from "../../utils/storage/command-history.js"; import { clearTerminal, onExit } from "../../utils/terminal.js"; -import { printAndResetSessionSummary } from "../../utils/session-cost.js"; import Spinner from "../vendor/ink-spinner.js"; import { Box, Text, useApp, useInput, useStdin } from "ink"; import { fileURLToPath } from "node:url"; diff --git a/codex-cli/src/utils/agent/agent-loop.ts b/codex-cli/src/utils/agent/agent-loop.ts index df10136718..e42a57649c 100644 --- a/codex-cli/src/utils/agent/agent-loop.ts +++ b/codex-cli/src/utils/agent/agent-loop.ts @@ -57,6 +57,13 @@ type AgentLoopParams = { onLastResponseId: (lastResponseId: string) => void; }; +type Usage = { + total_tokens?: number; + input_tokens?: number; + output_tokens?: number; +}; +type MaybeUsageEvent = { response?: { usage?: Usage } }; + export class AgentLoop { private model: string; private instructions?: string; @@ -796,12 +803,17 @@ export class AgentLoop { // with {input_tokens, output_tokens, total_tokens}. We record // the total (or fallback to summing the parts if needed). try { - const usage: unknown = (event as any).response?.usage; + const usage = (event as MaybeUsageEvent).response?.usage; if (usage && typeof usage === "object") { - const u = usage as { total_tokens?: number; input_tokens?: number; output_tokens?: number }; + const u = usage as { + total_tokens?: number; + input_tokens?: number; + output_tokens?: number; + }; const tokens = u.total_tokens ?? - (typeof u.input_tokens === "number" && typeof u.output_tokens === "number" + (typeof u.input_tokens === "number" && + typeof u.output_tokens === "number" ? u.input_tokens + u.output_tokens : undefined); if (typeof tokens === "number" && tokens > 0) { diff --git a/codex-cli/src/utils/estimate-cost.ts b/codex-cli/src/utils/estimate-cost.ts index a68a079260..08cdc276df 100644 --- a/codex-cli/src/utils/estimate-cost.ts +++ b/codex-cli/src/utils/estimate-cost.ts @@ -1,3 +1,5 @@ +/* eslint-disable no-irregular-whitespace */ + import type { ResponseItem } from "openai/resources/responses/responses.mjs"; import { approximateTokensUsed } from "./approximate-tokens-used.js"; diff --git a/codex-cli/src/utils/session-cost.ts b/codex-cli/src/utils/session-cost.ts index dc1010e2e1..e79fff7359 100644 --- a/codex-cli/src/utils/session-cost.ts +++ b/codex-cli/src/utils/session-cost.ts @@ -55,7 +55,9 @@ export class SessionCostTracker { if (cost == null) { return `Session complete – approx. ${tokens} tokens used.`; } - return `Session complete – approx. ${tokens} tokens, $${cost.toFixed(4)} USD.`; + return `Session complete – approx. ${tokens} tokens, $${cost.toFixed( + 4, + )} USD.`; } } diff --git a/codex-cli/tests/session-cost.test.ts b/codex-cli/tests/session-cost.test.ts index 36c7b90e44..edf67ce4fb 100644 --- a/codex-cli/tests/session-cost.test.ts +++ b/codex-cli/tests/session-cost.test.ts @@ -8,7 +8,11 @@ import { printAndResetSessionSummary, } from "../src/utils/session-cost.js"; -function makeMessage(id: string, role: "user" | "assistant", text: string): ResponseItem { +function makeMessage( + id: string, + role: "user" | "assistant", + text: string, +): ResponseItem { return { id, type: "message", @@ -71,7 +75,9 @@ describe("printAndResetSessionSummary", () => { // Now inject an exact low token count and ensure it overrides tracker.addTokens(10); - expect(tracker.getTokensUsed()).toBe(heuristicTokens + (10 - heuristicTokens)); + expect(tracker.getTokensUsed()).toBe( + heuristicTokens + (10 - heuristicTokens), + ); const cost = tracker.getCostUSD(); expect(cost).not.toBeNull();