opencode-token-tracker 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,37 +5,46 @@ import { homedir } from "os";
5
5
  const CONFIG_DIR = join(homedir(), ".config", "opencode");
6
6
  const CONFIG_FILE = join(CONFIG_DIR, "token-tracker.json");
7
7
  const LOG_FILE = join(CONFIG_DIR, "logs", "token-tracker", "tokens.jsonl");
8
+ // Built-in pricing (USD per 1M tokens) - Updated 2026-02-05
9
+ // Keep in sync with index.ts BUILTIN_PRICING
8
10
  const BUILTIN_PRICING = {
9
- // Anthropic Claude
10
- "claude-opus-4.5": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
11
+ // Anthropic Claude (https://www.anthropic.com/pricing#api)
12
+ "claude-opus-4.5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
11
13
  "claude-sonnet-4.5": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
12
14
  "claude-sonnet-4": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
13
- "claude-haiku-4.5": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
14
- "claude-haiku-4": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
15
- // OpenAI GPT
16
- "gpt-5.2": { input: 2.5, output: 10 },
17
- "gpt-5.2-codex": { input: 3, output: 12 },
15
+ "claude-haiku-4.5": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
16
+ "claude-haiku-4": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
17
+ "claude-opus-4.1": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
18
+ "claude-opus-4": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
19
+ "claude-haiku-3": { input: 0.25, output: 1.25, cacheRead: 0.03, cacheWrite: 0.3 },
20
+ // OpenAI GPT (https://openai.com/api/pricing/)
21
+ "gpt-5.2": { input: 1.75, output: 14, cacheRead: 0.175 },
22
+ "gpt-5.2-pro": { input: 21, output: 168 },
23
+ "gpt-5-mini": { input: 0.25, output: 2, cacheRead: 0.025 },
18
24
  "gpt-5.1": { input: 2, output: 8 },
19
25
  "gpt-5": { input: 5, output: 15 },
20
- "gpt-4.1": { input: 2, output: 8 },
21
- "gpt-4.1-mini": { input: 0.4, output: 1.6 },
22
- "gpt-4.1-nano": { input: 0.1, output: 0.4 },
26
+ "gpt-4.1": { input: 3, output: 12, cacheRead: 0.75 },
27
+ "gpt-4.1-mini": { input: 0.8, output: 3.2, cacheRead: 0.2 },
28
+ "gpt-4.1-nano": { input: 0.2, output: 0.8, cacheRead: 0.05 },
23
29
  "gpt-4o": { input: 2.5, output: 10 },
24
30
  "gpt-4o-mini": { input: 0.15, output: 0.6 },
25
31
  "o3": { input: 10, output: 40 },
26
32
  "o3-mini": { input: 1.1, output: 4.4 },
33
+ "o4-mini": { input: 4, output: 16, cacheRead: 1 },
27
34
  "o1": { input: 15, output: 60 },
28
35
  "o1-mini": { input: 1.1, output: 4.4 },
29
- // DeepSeek
30
- "deepseek-chat": { input: 0.14, output: 0.28, cacheRead: 0.014 },
31
- "deepseek-reasoner": { input: 0.55, output: 2.19, cacheRead: 0.055 },
32
- // Google Gemini
33
- "gemini-3-pro": { input: 1.25, output: 5 },
34
- "gemini-3-pro-preview": { input: 1.25, output: 5 },
35
- "gemini-3-flash": { input: 0.1, output: 0.4 },
36
- "gemini-2.5-pro": { input: 1.25, output: 5 },
37
- "gemini-2.5-flash": { input: 0.075, output: 0.3 },
38
- "gemini-2.0-flash": { input: 0.1, output: 0.4 },
36
+ // DeepSeek (https://api-docs.deepseek.com/quick_start/pricing)
37
+ "deepseek-chat": { input: 0.28, output: 0.42, cacheRead: 0.028 },
38
+ "deepseek-reasoner": { input: 0.28, output: 0.42, cacheRead: 0.028 },
39
+ // Google Gemini (https://cloud.google.com/vertex-ai/generative-ai/pricing)
40
+ "gemini-3-pro": { input: 2, output: 12, cacheRead: 0.2 },
41
+ "gemini-3-pro-preview": { input: 2, output: 12, cacheRead: 0.2 },
42
+ "gemini-3-flash": { input: 0.5, output: 2, cacheRead: 0.05 },
43
+ "gemini-3-flash-preview": { input: 0.5, output: 2, cacheRead: 0.05 },
44
+ "gemini-2.5-pro": { input: 1.25, output: 10, cacheRead: 0.125 },
45
+ "gemini-2.5-flash": { input: 0.1, output: 0.4, cacheRead: 0.01 },
46
+ "gemini-2.5-flash-lite": { input: 0.1, output: 0.4, cacheRead: 0.01 },
47
+ "gemini-2.0-flash": { input: 0.15, output: 0.6, cacheRead: 0.015 },
39
48
  // Fallback
40
49
  "_default": { input: 1, output: 4 },
41
50
  };
@@ -276,15 +285,15 @@ function cmdStats(period, breakdown) {
276
285
  function cmdPricing() {
277
286
  const config = loadConfig();
278
287
  console.log(`
279
- Built-in Pricing Table (USD per 1M tokens)
288
+ Built-in Pricing Table (USD per 1M tokens) - Updated 2026-02-05
280
289
  ══════════════════════════════════════════════════════════════════
281
290
  `);
282
291
  // Group by provider
283
292
  const groups = {
284
- "Anthropic Claude": ["claude-opus-4.5", "claude-sonnet-4.5", "claude-sonnet-4", "claude-haiku-4.5", "claude-haiku-4"],
285
- "OpenAI": ["gpt-5.2", "gpt-5.2-codex", "gpt-5.1", "gpt-5", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4o", "gpt-4o-mini", "o3", "o3-mini", "o1", "o1-mini"],
293
+ "Anthropic Claude": ["claude-opus-4.5", "claude-sonnet-4.5", "claude-sonnet-4", "claude-haiku-4.5", "claude-haiku-4", "claude-opus-4.1", "claude-opus-4", "claude-haiku-3"],
294
+ "OpenAI": ["gpt-5.2", "gpt-5.2-pro", "gpt-5-mini", "gpt-5.1", "gpt-5", "gpt-4.1", "gpt-4.1-mini", "gpt-4.1-nano", "gpt-4o", "gpt-4o-mini", "o3", "o3-mini", "o4-mini", "o1", "o1-mini"],
286
295
  "DeepSeek": ["deepseek-chat", "deepseek-reasoner"],
287
- "Google Gemini": ["gemini-3-pro", "gemini-3-pro-preview", "gemini-3-flash", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.0-flash"],
296
+ "Google Gemini": ["gemini-3-pro", "gemini-3-pro-preview", "gemini-3-flash", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-2.0-flash"],
288
297
  };
289
298
  const modelWidth = 20;
290
299
  const priceWidth = 10;
package/dist/index.js CHANGED
@@ -14,38 +14,66 @@ const DEFAULT_CONFIG = {
14
14
  showOnIdle: true,
15
15
  },
16
16
  };
17
- // Built-in pricing table (USD per 1M tokens) - as of 2026-02
17
+ // Built-in pricing table (USD per 1M tokens) - Updated 2026-02-05
18
+ // Sources:
19
+ // - Anthropic: https://www.anthropic.com/pricing#api
20
+ // - OpenAI: https://openai.com/api/pricing/
21
+ // - DeepSeek: https://api-docs.deepseek.com/quick_start/pricing
22
+ // - Google: https://cloud.google.com/vertex-ai/generative-ai/pricing
18
23
  const BUILTIN_PRICING = {
19
- // Anthropic Claude
20
- "claude-opus-4.5": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
24
+ // Anthropic Claude (https://www.anthropic.com/pricing#api)
25
+ // Opus 4.5: $5 input, $25 output, cache write $6.25, cache read $0.50
26
+ "claude-opus-4.5": { input: 5, output: 25, cacheRead: 0.5, cacheWrite: 6.25 },
27
+ // Sonnet 4.5: $3 input, $15 output (≤200K), cache write $3.75, cache read $0.30
21
28
  "claude-sonnet-4.5": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
29
+ // Sonnet 4: $3 input, $15 output
22
30
  "claude-sonnet-4": { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
23
- "claude-haiku-4.5": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
24
- "claude-haiku-4": { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
25
- // OpenAI GPT
26
- "gpt-5.2": { input: 2.5, output: 10 },
27
- "gpt-5.2-codex": { input: 3, output: 12 },
31
+ // Haiku 4.5: $1 input, $5 output, cache write $1.25, cache read $0.10
32
+ "claude-haiku-4.5": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
33
+ "claude-haiku-4": { input: 1, output: 5, cacheRead: 0.1, cacheWrite: 1.25 },
34
+ // Legacy models
35
+ "claude-opus-4.1": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
36
+ "claude-opus-4": { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
37
+ "claude-haiku-3": { input: 0.25, output: 1.25, cacheRead: 0.03, cacheWrite: 0.3 },
38
+ // OpenAI GPT (https://openai.com/api/pricing/)
39
+ // GPT-5.2: $1.75 input, $14 output (flagship)
40
+ "gpt-5.2": { input: 1.75, output: 14, cacheRead: 0.175 },
41
+ "gpt-5.2-pro": { input: 21, output: 168 },
42
+ "gpt-5-mini": { input: 0.25, output: 2, cacheRead: 0.025 },
28
43
  "gpt-5.1": { input: 2, output: 8 },
29
44
  "gpt-5": { input: 5, output: 15 },
30
- "gpt-4.1": { input: 2, output: 8 },
31
- "gpt-4.1-mini": { input: 0.4, output: 1.6 },
32
- "gpt-4.1-nano": { input: 0.1, output: 0.4 },
45
+ // GPT-4.1 series (fine-tuning prices, base may differ)
46
+ "gpt-4.1": { input: 3, output: 12, cacheRead: 0.75 },
47
+ "gpt-4.1-mini": { input: 0.8, output: 3.2, cacheRead: 0.2 },
48
+ "gpt-4.1-nano": { input: 0.2, output: 0.8, cacheRead: 0.05 },
49
+ // GPT-4o series (may be deprecated)
33
50
  "gpt-4o": { input: 2.5, output: 10 },
34
51
  "gpt-4o-mini": { input: 0.15, output: 0.6 },
52
+ // Reasoning models
35
53
  "o3": { input: 10, output: 40 },
36
54
  "o3-mini": { input: 1.1, output: 4.4 },
55
+ "o4-mini": { input: 4, output: 16, cacheRead: 1 },
37
56
  "o1": { input: 15, output: 60 },
38
57
  "o1-mini": { input: 1.1, output: 4.4 },
39
- // DeepSeek
40
- "deepseek-chat": { input: 0.14, output: 0.28, cacheRead: 0.014 },
41
- "deepseek-reasoner": { input: 0.55, output: 2.19, cacheRead: 0.055 },
42
- // Google Gemini
43
- "gemini-3-pro": { input: 1.25, output: 5 },
44
- "gemini-3-pro-preview": { input: 1.25, output: 5 },
45
- "gemini-3-flash": { input: 0.1, output: 0.4 },
46
- "gemini-2.5-pro": { input: 1.25, output: 5 },
47
- "gemini-2.5-flash": { input: 0.075, output: 0.3 },
48
- "gemini-2.0-flash": { input: 0.1, output: 0.4 },
58
+ // DeepSeek (https://api-docs.deepseek.com/quick_start/pricing)
59
+ // DeepSeek-V3.2: unified pricing for both chat and reasoner
60
+ // $0.28 input (cache miss), $0.028 input (cache hit), $0.42 output
61
+ "deepseek-chat": { input: 0.28, output: 0.42, cacheRead: 0.028 },
62
+ "deepseek-reasoner": { input: 0.28, output: 0.42, cacheRead: 0.028 },
63
+ // Google Gemini (https://cloud.google.com/vertex-ai/generative-ai/pricing)
64
+ // Gemini 3 Pro Preview: $2 input, $12 output (≤200K)
65
+ "gemini-3-pro": { input: 2, output: 12, cacheRead: 0.2 },
66
+ "gemini-3-pro-preview": { input: 2, output: 12, cacheRead: 0.2 },
67
+ // Gemini 3 Flash Preview: $0.5 input
68
+ "gemini-3-flash": { input: 0.5, output: 2, cacheRead: 0.05 },
69
+ "gemini-3-flash-preview": { input: 0.5, output: 2, cacheRead: 0.05 },
70
+ // Gemini 2.5 Pro: $1.25 input, $10 output (≤200K)
71
+ "gemini-2.5-pro": { input: 1.25, output: 10, cacheRead: 0.125 },
72
+ // Gemini 2.5 Flash Lite: $0.1 input
73
+ "gemini-2.5-flash": { input: 0.1, output: 0.4, cacheRead: 0.01 },
74
+ "gemini-2.5-flash-lite": { input: 0.1, output: 0.4, cacheRead: 0.01 },
75
+ // Gemini 2.0 Flash: $0.15 input
76
+ "gemini-2.0-flash": { input: 0.15, output: 0.6, cacheRead: 0.015 },
49
77
  // Fallback for unknown models
50
78
  "_default": { input: 1, output: 4 },
51
79
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-token-tracker",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "description": "Real-time token usage and cost tracking plugin for OpenCode with Toast notifications and CLI stats",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",