diff --git a/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift b/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift index 580ca61bca..4940f115cf 100644 --- a/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift +++ b/Sources/CodexBarCore/Generated/CodexParserHash.generated.swift @@ -1,5 +1,5 @@ // Generated by Scripts/regenerate-codex-parser-hash.sh. Do not edit by hand. enum CodexParserHash { - static let value = "cfd84d13ad7d4cfa" + static let value = "5dc8605a458f782f" } diff --git a/Sources/CodexBarCore/Vendored/CostUsage/CostUsageScanner.swift b/Sources/CodexBarCore/Vendored/CostUsage/CostUsageScanner.swift index 68febeb25f..201564594e 100644 --- a/Sources/CodexBarCore/Vendored/CostUsage/CostUsageScanner.swift +++ b/Sources/CodexBarCore/Vendored/CostUsage/CostUsageScanner.swift @@ -362,9 +362,11 @@ enum CostUsageScanner { self.turnID = turnID self.eventIndex = eventIndex self.timestampUnixMs = timestampUnixMs - self.input = input - self.cached = cached - self.output = output + self.input = max(0, input) + // Clamp cached to not exceed input (toks scale: clamped_cached = min(cached, input)) + // prevents inflated totals when malformed JSONL reports more cached than input. + self.cached = min(max(0, cached), max(0, input)) + self.output = max(0, output) self.reasoning = reasoning.map { min(max(0, $0), max(0, output)) } self.knownCostNanos = knownCostNanos self.unpricedTokens = unpricedTokens