Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -769,7 +769,7 @@ enum CostUsageScanner {
}

let maxLineBytes = 256 * 1024
let prefixBytes = 32 * 1024
let prefixBytes = maxLineBytes

if startOffset == 0,
let metadata = Self.parseCodexSessionMetadata(fileURL: fileURL)
Expand Down
43 changes: 43 additions & 0 deletions Tests/CodexBarTests/CostUsageScannerPriorityTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,49 @@ struct CostUsageScannerPriorityTests {
#expect(report.summary?.totalCostUSD == expected)
}

@Test
func `codex daily report keeps model from large turn context`() throws {
let env = try CostUsageTestEnvironment()
defer { env.cleanup() }

let day = try env.makeLocalNoon(year: 2026, month: 5, day: 15)
let iso0 = env.isoString(for: day)
let iso1 = env.isoString(for: day.addingTimeInterval(1))
let largeInstructions = String(repeating: "x", count: 33 * 1024)
let entries: [[String: Any]] = [
[
"type": "turn_context",
"timestamp": iso0,
"payload": [
"model": "gpt-5.5",
"developer_instructions": largeInstructions,
],
],
["type": "event_msg", "timestamp": iso1, "payload": ["type": "task_started", "turn_id": "subagent-turn"]],
self.tokenCount(timestamp: iso1, input: 100, cached: 20, output: 10),
]
_ = try env.writeCodexSessionFile(
day: day,
filename: "subagent-large-turn-context.jsonl",
contents: env.jsonl(entries))

var options = CostUsageScanner.Options(
codexSessionsRoot: env.codexSessionsRoot,
cacheRoot: env.cacheRoot)
options.refreshMinIntervalSeconds = 0

let report = CostUsageScanner.loadDailyReport(
provider: .codex,
since: day,
until: day,
now: day,
options: options)

#expect(report.data.count == 1)
#expect(report.data[0].modelsUsed == ["gpt-5.5"])
#expect(report.data[0].modelBreakdowns?.map(\.modelName) == ["gpt-5.5"])
}

@Test
func `codex pricing skips priority surcharge for long context rows`() throws {
let env = try CostUsageTestEnvironment()
Expand Down