desktop/src-tauri/crates/core/src/adapters/usage_map.rs
Comment 1, line 1
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:1
//! V01 shared token mappings based on native source field meanings.Comment 2, line 2
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:2
//!Comment 3, line 3
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:3
//! Directory layout follows architecture.md#adapter-layout. Product-specific mappings live inComment 4, line 4
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:4
//! adapters/codex/common.rs, adapters/claude/,Comment 5, line 5
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:5
//! adapters/zcode/common.rs (M4, map_zcode_ai_sdk and map_zcode_anthropic),Comment 6, line 6
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:6
//! adapters/kilo/common.rs (M3, map_kilo and KiloUsage),Comment 7, line 7
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:7
//! and adapters/kimi_wire.rs (M4, map_kimi_wire and KimiWireUsage),Comment 8, line 8
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:8
//! shared by Kimi Code and Kimi Work. This module retains cross-Agent types and helpers:Comment 9, line 9
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:9
//!Comment 10, line 10
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:10
//! - pi/omp share map_pi_family, with rules checked in fixed source versions;Comment 11, line 11
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:11
//! - gemini/qwen share map_genai_usage for the matching usageMetadata field shape.Comment 12, line 12
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:12
//!Comment 13, line 13
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:13
//! Source checks recorded in m0-agent-fixtures.md establish:Comment 14, line 14
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:14
//! - Kimi wire has independent inputOther/inputCacheRead/inputCacheCreation/output, without totalComment 15, line 15
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:15
//! (mapping in adapters/kimi_wire.rs).Comment 16, line 16
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:16
//! - ZCode AI SDK inputTokens includes cache reads; Anthropic input_tokens excludes cacheComment 17, line 17
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:17
//! (separate mappings in adapters/zcode/common.rs).Comment 18, line 18
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:18
//! - Copilot input includes uncached input, cache read and cache write (adapters/copilot/common.rs).Comment 19, line 19
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:19
//! - Kilo total sums independent input/output/reasoning/cache.read/cache.writeComment 20, line 20
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:20
//! (mapping in adapters/kilo/common.rs).Comment 21, line 21
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:21
//!Comment 22, line 22
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:22
//! Map only verified fields; missing values stay None (unknown), without replacement zeros.Comment 23, line 23
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:23
//! Diagnose contradictions such as cache read above total input; do not hide them with max(0, ...).Comment 24, line 28
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:28
/// Normalized usage, per-field quality and consistency diagnostics.Comment 25, line 44
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:44
/// Map independently reported fields when inclusion relationships are unverified, as in Zed.Comment 26, line 45
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:45
/// Subset checks such as cache <= input_total require known inclusion relationships and can falselyComment 27, line 46
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:46
/// reject independent reports. Domain validation still checks nonnegative values and upper limits.Comment 28, line 103
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:103
// M4 moved the four independent Kimi wire fields to adapters/kimi_wire.rs, shared byComment 29, line 104
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:104
// Kimi Code/Kimi Work, and the two ZCode mappings to adapters/zcode/common.rs.Comment 30, line 105
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:105
// Each source file documents its own calculation references.Comment 31, line 107
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:107
/// Shared pi/oh-my-pi Usage meanings, within the limits documented in adapters.md.Comment 32, line 108
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:108
/// Fixed source references:Comment 33, line 109
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:109
/// - pi-mono b4559750 packages/ai/src/types.ts: Usage has input/output/cacheRead/cacheWrite,Comment 34, line 110
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:110
/// optional cacheWrite1h (subset of cacheWrite), reasoning (subset of output), totalTokens and cost.Comment 35, line 111
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:111
/// anthropic-messages.ts/openai-completions.ts normalize input as the uncached bucket:Comment 36, line 112
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:112
/// input = max(0, prompt_tokens - cached - cache_write);Comment 37, line 113
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:113
/// totalTokens = input + output + cacheRead + cacheWrite.Comment 38, line 114
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:114
/// - oh-my-pi 62bc57b packages/catalog/src/types.ts defines input as uncachedComment 39, line 115
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:115
/// conversation input. totalTokens sums the four buckets plus provider orchestration,Comment 40, line 116
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:116
/// when present; reasoningTokens is within output, and cttl subdivides cacheWrite.Comment 41, line 117
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:117
///Comment 42, line 118
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:118
/// input/cacheRead/cacheWrite are independent; do not add reasoning again. Diagnose a mismatchComment 43, line 119
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:119
/// between totalTokens and derived totals, such as OMP orchestration, without truncating values.Comment 44, line 127
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:127
/// Optional pi reasoning/OMP reasoningTokens: absence is Unknown;Comment 45, line 128
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:128
/// preserve zero when supplied as a verified reported value.Comment 46, line 195
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:195
/// genai usageMetadata has six categories in Gemini CLI session tokens and Qwen CodeComment 47, line 196
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:196
/// ChatRecord.usageMetadata at the checked source versions:Comment 48, line 197
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:197
/// optional prompt(input), candidates(output), cached, thoughts, tool and total.Comment 49, line 198
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:198
/// The references verify fields/categories, but inclusion of cached/thoughts/tool in input/outputComment 50, line 199
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:199
/// has not been checked for each provider. Preserve unknowns without inferred relationships:Comment 51, line 200
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:200
/// - keep input_uncached/output_reasoning None without verified independence/subset rules;Comment 52, line 201
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:201
/// - take total_tokens only from reported total, without summing incomplete components;Comment 53, line 202
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:202
/// thoughts/tool may sit outside input+output;Comment 54, line 203
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:203
/// - tool has no normalized field; do not force it into input_total to match total.Comment 55, line 204
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:204
///Comment 56, line 205
desktop/src-tauri/crates/core/src/adapters/usage_map.rs:205
/// finish() still diagnoses contradictions such as cached above prompt.