ccusage 17.1.2 → 17.1.3

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.
@@ -1,5 +1,5 @@
1
1
  import { activityDateSchema, array, boolean, createBucket, createDailyDate, createMonthlyDate, createProjectPath, createSessionId, createWeeklyDate, dailyDateSchema, getTotalTokens, isoTimestampSchema, messageIdSchema, modelNameSchema, monthlyDateSchema, number, object, optional, parse as parse$2, projectPathSchema, requestIdSchema, safeParse, sessionIdSchema, string, union, versionSchema, weeklyDateSchema } from "./_types-CV6z8-9_.js";
2
- import { logger } from "./logger-DP1q6tgm.js";
2
+ import { logger } from "./logger-Dti-igUw.js";
3
3
  import { createRequire } from "node:module";
4
4
  import a, { readFile, stat } from "node:fs/promises";
5
5
  import path, { basename, dirname, normalize, posix, relative, resolve, sep } from "node:path";
@@ -2891,40 +2891,6 @@ var LiteLLMPricingFetcher = class {
2891
2891
  }));
2892
2892
  }
2893
2893
  };
2894
- function createPricingDataset() {
2895
- return Object.create(null);
2896
- }
2897
- async function fetchLiteLLMPricingDataset() {
2898
- const response = await fetch(LITELLM_PRICING_URL);
2899
- if (!response.ok) throw new Error(`Failed to fetch pricing data: ${response.status} ${response.statusText}`);
2900
- const rawDataset = await response.json();
2901
- const dataset = createPricingDataset();
2902
- for (const [modelName, modelData] of Object.entries(rawDataset)) {
2903
- if (modelData == null || typeof modelData !== "object") continue;
2904
- const parsed = safeParse(liteLLMModelPricingSchema, modelData);
2905
- if (!parsed.success) continue;
2906
- dataset[modelName] = parsed.output;
2907
- }
2908
- return dataset;
2909
- }
2910
- function filterPricingDataset(dataset, predicate) {
2911
- const filtered = createPricingDataset();
2912
- for (const [modelName, pricing] of Object.entries(dataset)) if (predicate(modelName, pricing)) filtered[modelName] = pricing;
2913
- return filtered;
2914
- }
2915
- function isClaudeModel(modelName, _pricing) {
2916
- return modelName.startsWith("claude-");
2917
- }
2918
- async function prefetchClaudePricing() {
2919
- if (process$1.env.OFFLINE === "true") return createPricingDataset();
2920
- try {
2921
- const dataset = await fetchLiteLLMPricingDataset();
2922
- return filterPricingDataset(dataset, isClaudeModel);
2923
- } catch (error) {
2924
- console.warn("Failed to prefetch Claude pricing data, proceeding with empty cache.", error);
2925
- return createPricingDataset();
2926
- }
2927
- }
2928
2894
  const CLAUDE_PROVIDER_PREFIXES = [
2929
2895
  "anthropic/",
2930
2896
  "claude-3-5-",
@@ -2932,7 +2898,186 @@ const CLAUDE_PROVIDER_PREFIXES = [
2932
2898
  "claude-",
2933
2899
  "openrouter/openai/"
2934
2900
  ];
2935
- const PREFETCHED_CLAUDE_PRICING = prefetchClaudePricing();
2901
+ const PREFETCHED_CLAUDE_PRICING = {
2902
+ "claude-3-5-haiku-20241022": {
2903
+ "input_cost_per_token": 8e-7,
2904
+ "output_cost_per_token": 4e-6,
2905
+ "cache_creation_input_token_cost": 1e-6,
2906
+ "cache_read_input_token_cost": 8e-8,
2907
+ "max_tokens": 8192,
2908
+ "max_input_tokens": 2e5,
2909
+ "max_output_tokens": 8192
2910
+ },
2911
+ "claude-3-5-haiku-latest": {
2912
+ "input_cost_per_token": 1e-6,
2913
+ "output_cost_per_token": 5e-6,
2914
+ "cache_creation_input_token_cost": 125e-8,
2915
+ "cache_read_input_token_cost": 1e-7,
2916
+ "max_tokens": 8192,
2917
+ "max_input_tokens": 2e5,
2918
+ "max_output_tokens": 8192
2919
+ },
2920
+ "claude-3-5-sonnet-20240620": {
2921
+ "input_cost_per_token": 3e-6,
2922
+ "output_cost_per_token": 15e-6,
2923
+ "cache_creation_input_token_cost": 375e-8,
2924
+ "cache_read_input_token_cost": 3e-7,
2925
+ "max_tokens": 8192,
2926
+ "max_input_tokens": 2e5,
2927
+ "max_output_tokens": 8192
2928
+ },
2929
+ "claude-3-5-sonnet-20241022": {
2930
+ "input_cost_per_token": 3e-6,
2931
+ "output_cost_per_token": 15e-6,
2932
+ "cache_creation_input_token_cost": 375e-8,
2933
+ "cache_read_input_token_cost": 3e-7,
2934
+ "max_tokens": 8192,
2935
+ "max_input_tokens": 2e5,
2936
+ "max_output_tokens": 8192
2937
+ },
2938
+ "claude-3-5-sonnet-latest": {
2939
+ "input_cost_per_token": 3e-6,
2940
+ "output_cost_per_token": 15e-6,
2941
+ "cache_creation_input_token_cost": 375e-8,
2942
+ "cache_read_input_token_cost": 3e-7,
2943
+ "max_tokens": 8192,
2944
+ "max_input_tokens": 2e5,
2945
+ "max_output_tokens": 8192
2946
+ },
2947
+ "claude-3-7-sonnet-20250219": {
2948
+ "input_cost_per_token": 3e-6,
2949
+ "output_cost_per_token": 15e-6,
2950
+ "cache_creation_input_token_cost": 375e-8,
2951
+ "cache_read_input_token_cost": 3e-7,
2952
+ "max_tokens": 128e3,
2953
+ "max_input_tokens": 2e5,
2954
+ "max_output_tokens": 128e3
2955
+ },
2956
+ "claude-3-7-sonnet-latest": {
2957
+ "input_cost_per_token": 3e-6,
2958
+ "output_cost_per_token": 15e-6,
2959
+ "cache_creation_input_token_cost": 375e-8,
2960
+ "cache_read_input_token_cost": 3e-7,
2961
+ "max_tokens": 128e3,
2962
+ "max_input_tokens": 2e5,
2963
+ "max_output_tokens": 128e3
2964
+ },
2965
+ "claude-3-haiku-20240307": {
2966
+ "input_cost_per_token": 25e-8,
2967
+ "output_cost_per_token": 125e-8,
2968
+ "cache_creation_input_token_cost": 3e-7,
2969
+ "cache_read_input_token_cost": 3e-8,
2970
+ "max_tokens": 4096,
2971
+ "max_input_tokens": 2e5,
2972
+ "max_output_tokens": 4096
2973
+ },
2974
+ "claude-3-opus-20240229": {
2975
+ "input_cost_per_token": 15e-6,
2976
+ "output_cost_per_token": 75e-6,
2977
+ "cache_creation_input_token_cost": 1875e-8,
2978
+ "cache_read_input_token_cost": 15e-7,
2979
+ "max_tokens": 4096,
2980
+ "max_input_tokens": 2e5,
2981
+ "max_output_tokens": 4096
2982
+ },
2983
+ "claude-3-opus-latest": {
2984
+ "input_cost_per_token": 15e-6,
2985
+ "output_cost_per_token": 75e-6,
2986
+ "cache_creation_input_token_cost": 1875e-8,
2987
+ "cache_read_input_token_cost": 15e-7,
2988
+ "max_tokens": 4096,
2989
+ "max_input_tokens": 2e5,
2990
+ "max_output_tokens": 4096
2991
+ },
2992
+ "claude-4-opus-20250514": {
2993
+ "input_cost_per_token": 15e-6,
2994
+ "output_cost_per_token": 75e-6,
2995
+ "cache_creation_input_token_cost": 1875e-8,
2996
+ "cache_read_input_token_cost": 15e-7,
2997
+ "max_tokens": 32e3,
2998
+ "max_input_tokens": 2e5,
2999
+ "max_output_tokens": 32e3
3000
+ },
3001
+ "claude-4-sonnet-20250514": {
3002
+ "input_cost_per_token": 3e-6,
3003
+ "output_cost_per_token": 15e-6,
3004
+ "cache_creation_input_token_cost": 375e-8,
3005
+ "cache_read_input_token_cost": 3e-7,
3006
+ "max_tokens": 1e6,
3007
+ "max_input_tokens": 1e6,
3008
+ "max_output_tokens": 1e6,
3009
+ "input_cost_per_token_above_200k_tokens": 6e-6,
3010
+ "output_cost_per_token_above_200k_tokens": 225e-7,
3011
+ "cache_creation_input_token_cost_above_200k_tokens": 75e-7,
3012
+ "cache_read_input_token_cost_above_200k_tokens": 6e-7
3013
+ },
3014
+ "claude-sonnet-4-5": {
3015
+ "input_cost_per_token": 3e-6,
3016
+ "output_cost_per_token": 15e-6,
3017
+ "cache_creation_input_token_cost": 375e-8,
3018
+ "cache_read_input_token_cost": 3e-7,
3019
+ "max_tokens": 2e5,
3020
+ "max_input_tokens": 2e5,
3021
+ "max_output_tokens": 64e3,
3022
+ "input_cost_per_token_above_200k_tokens": 6e-6,
3023
+ "output_cost_per_token_above_200k_tokens": 225e-7,
3024
+ "cache_creation_input_token_cost_above_200k_tokens": 75e-7,
3025
+ "cache_read_input_token_cost_above_200k_tokens": 6e-7
3026
+ },
3027
+ "claude-sonnet-4-5-20250929": {
3028
+ "input_cost_per_token": 3e-6,
3029
+ "output_cost_per_token": 15e-6,
3030
+ "cache_creation_input_token_cost": 375e-8,
3031
+ "cache_read_input_token_cost": 3e-7,
3032
+ "max_tokens": 2e5,
3033
+ "max_input_tokens": 2e5,
3034
+ "max_output_tokens": 64e3,
3035
+ "input_cost_per_token_above_200k_tokens": 6e-6,
3036
+ "output_cost_per_token_above_200k_tokens": 225e-7,
3037
+ "cache_creation_input_token_cost_above_200k_tokens": 75e-7,
3038
+ "cache_read_input_token_cost_above_200k_tokens": 6e-7
3039
+ },
3040
+ "claude-opus-4-1": {
3041
+ "input_cost_per_token": 15e-6,
3042
+ "output_cost_per_token": 75e-6,
3043
+ "cache_creation_input_token_cost": 1875e-8,
3044
+ "cache_read_input_token_cost": 15e-7,
3045
+ "max_tokens": 32e3,
3046
+ "max_input_tokens": 2e5,
3047
+ "max_output_tokens": 32e3
3048
+ },
3049
+ "claude-opus-4-1-20250805": {
3050
+ "input_cost_per_token": 15e-6,
3051
+ "output_cost_per_token": 75e-6,
3052
+ "cache_creation_input_token_cost": 1875e-8,
3053
+ "cache_read_input_token_cost": 15e-7,
3054
+ "max_tokens": 32e3,
3055
+ "max_input_tokens": 2e5,
3056
+ "max_output_tokens": 32e3
3057
+ },
3058
+ "claude-opus-4-20250514": {
3059
+ "input_cost_per_token": 15e-6,
3060
+ "output_cost_per_token": 75e-6,
3061
+ "cache_creation_input_token_cost": 1875e-8,
3062
+ "cache_read_input_token_cost": 15e-7,
3063
+ "max_tokens": 32e3,
3064
+ "max_input_tokens": 2e5,
3065
+ "max_output_tokens": 32e3
3066
+ },
3067
+ "claude-sonnet-4-20250514": {
3068
+ "input_cost_per_token": 3e-6,
3069
+ "output_cost_per_token": 15e-6,
3070
+ "cache_creation_input_token_cost": 375e-8,
3071
+ "cache_read_input_token_cost": 3e-7,
3072
+ "max_tokens": 64e3,
3073
+ "max_input_tokens": 1e6,
3074
+ "max_output_tokens": 64e3,
3075
+ "input_cost_per_token_above_200k_tokens": 6e-6,
3076
+ "output_cost_per_token_above_200k_tokens": 225e-7,
3077
+ "cache_creation_input_token_cost_above_200k_tokens": 75e-7,
3078
+ "cache_read_input_token_cost_above_200k_tokens": 6e-7
3079
+ }
3080
+ };
2936
3081
  var PricingFetcher = class extends LiteLLMPricingFetcher {
2937
3082
  constructor(offline = false) {
2938
3083
  super({
@@ -1,4 +1,4 @@
1
- import { bucketUsageSchema, calculateContextTokens, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadSessionUsageById, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, transcriptMessageSchema, transcriptUsageSchema, usageDataSchema, weeklyUsageSchema } from "./data-loader-C5ZJmhZZ.js";
1
+ import { bucketUsageSchema, calculateContextTokens, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadSessionUsageById, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, transcriptMessageSchema, transcriptUsageSchema, usageDataSchema, weeklyUsageSchema } from "./data-loader-BGg_9orY.js";
2
2
  import "./_types-CV6z8-9_.js";
3
- import "./logger-DP1q6tgm.js";
3
+ import "./logger-Dti-igUw.js";
4
4
  export { bucketUsageSchema, calculateContextTokens, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadSessionUsageById, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, transcriptMessageSchema, transcriptUsageSchema, usageDataSchema, weeklyUsageSchema };
@@ -1,6 +1,6 @@
1
- import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, PricingFetcher, USAGE_DATA_GLOB_PATTERN, _usingCtx, getClaudePaths, glob, isFailure, try_, unwrap, usageDataSchema } from "./data-loader-C5ZJmhZZ.js";
1
+ import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, PricingFetcher, USAGE_DATA_GLOB_PATTERN, _usingCtx, getClaudePaths, glob, isFailure, try_, unwrap, usageDataSchema } from "./data-loader-BGg_9orY.js";
2
2
  import { safeParse } from "./_types-CV6z8-9_.js";
3
- import { logger } from "./logger-DP1q6tgm.js";
3
+ import { logger } from "./logger-Dti-igUw.js";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  async function detectMismatches(claudePath) {
package/dist/debug.js CHANGED
@@ -1,5 +1,5 @@
1
- import "./data-loader-C5ZJmhZZ.js";
1
+ import "./data-loader-BGg_9orY.js";
2
2
  import "./_types-CV6z8-9_.js";
3
- import "./logger-DP1q6tgm.js";
4
- import { detectMismatches, printMismatchReport } from "./debug-6ElxqAsf.js";
3
+ import "./logger-Dti-igUw.js";
4
+ import { detectMismatches, printMismatchReport } from "./debug-6nuaXAbb.js";
5
5
  export { detectMismatches, printMismatchReport };
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { BLOCKS_COMPACT_WIDTH_THRESHOLD, BLOCKS_DEFAULT_TERMINAL_WIDTH, BLOCKS_WARNING_THRESHOLD, BURN_RATE_THRESHOLDS, CONFIG_FILE_NAME, DEFAULT_CONTEXT_USAGE_THRESHOLDS, DEFAULT_LOCALE, DEFAULT_RECENT_DAYS, DEFAULT_REFRESH_INTERVAL_SECONDS, DEFAULT_SESSION_DURATION_HOURS, MAX_REFRESH_INTERVAL_SECONDS, MIN_REFRESH_INTERVAL_SECONDS, MIN_RENDER_INTERVAL_MS, PricingFetcher, WEEK_DAYS, __commonJSMin, __require, __toESM, _usingCtx, andThen, calculateBurnRate, calculateContextTokens, calculateCostForEntry, createUniqueHash, fail, filterRecentBlocks, formatDateCompact, getClaudePaths, getEarliestTimestamp, getFileModifiedTime, getUsageLimitResetTime, globUsageFiles, identifySessionBlocks, inspect, inspectError, isFailure, isSuccess, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadSessionUsageById, loadWeeklyUsageData, map as map$2, pipe, projectBlockUsage, sortFilesByTimestamp, succeed, toArray, try_, uniq, unreachable, unwrap, usageDataSchema } from "./data-loader-C5ZJmhZZ.js";
2
+ import { BLOCKS_COMPACT_WIDTH_THRESHOLD, BLOCKS_DEFAULT_TERMINAL_WIDTH, BLOCKS_WARNING_THRESHOLD, BURN_RATE_THRESHOLDS, CONFIG_FILE_NAME, DEFAULT_CONTEXT_USAGE_THRESHOLDS, DEFAULT_LOCALE, DEFAULT_RECENT_DAYS, DEFAULT_REFRESH_INTERVAL_SECONDS, DEFAULT_SESSION_DURATION_HOURS, MAX_REFRESH_INTERVAL_SECONDS, MIN_REFRESH_INTERVAL_SECONDS, MIN_RENDER_INTERVAL_MS, PricingFetcher, WEEK_DAYS, __commonJSMin, __require, __toESM, _usingCtx, andThen, calculateBurnRate, calculateContextTokens, calculateCostForEntry, createUniqueHash, fail, filterRecentBlocks, formatDateCompact, getClaudePaths, getEarliestTimestamp, getFileModifiedTime, getUsageLimitResetTime, globUsageFiles, identifySessionBlocks, inspect, inspectError, isFailure, isSuccess, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadSessionUsageById, loadWeeklyUsageData, map as map$2, pipe, projectBlockUsage, sortFilesByTimestamp, succeed, toArray, try_, uniq, unreachable, unwrap, usageDataSchema } from "./data-loader-BGg_9orY.js";
3
3
  import { CostModes, SortOrders, check, filterDateSchema, flatten, getTotalTokens, integer as integer$1, maxValue, minValue, number, parse as parse$1, pipe as pipe$1, safeParse, statuslineHookJsonSchema, string, transform, trim, union } from "./_types-CV6z8-9_.js";
4
4
  import { calculateTotals, createTotalsObject } from "./calculate-cost-CX9KwEZt.js";
5
- import { description, log, logger, name, version } from "./logger-DP1q6tgm.js";
6
- import { detectMismatches, printMismatchReport } from "./debug-6ElxqAsf.js";
5
+ import { description, log, logger, name, version } from "./logger-Dti-igUw.js";
6
+ import { detectMismatches, printMismatchReport } from "./debug-6nuaXAbb.js";
7
7
  import a, { readFile, stat } from "node:fs/promises";
8
8
  import path, { join } from "node:path";
9
9
  import process$1 from "node:process";
@@ -848,7 +848,7 @@ function createConsola$1(options = {}) {
848
848
  defaults: { level },
849
849
  stdout: process.stdout,
850
850
  stderr: process.stderr,
851
- prompt: (...args) => import("./prompt-BeRmYuGP.js").then((m) => m.prompt(...args)),
851
+ prompt: (...args) => import("./prompt-BCI--RF-.js").then((m) => m.prompt(...args)),
852
852
  reporters: options.reporters || [options.fancy ?? !(T || R) ? new FancyReporter() : new BasicReporter()],
853
853
  ...options
854
854
  });
@@ -869,7 +869,7 @@ function createLogger(name$1) {
869
869
  }
870
870
  const log = console.log;
871
871
  var name = "ccusage";
872
- var version = "17.1.2";
872
+ var version = "17.1.3";
873
873
  var description = "Usage analysis tool for Claude Code";
874
874
  const logger = createLogger(name);
875
875
  const log$1 = log;
package/dist/logger.js CHANGED
@@ -1,2 +1,2 @@
1
- import { log, logger } from "./logger-DP1q6tgm.js";
1
+ import { log, logger } from "./logger-Dti-igUw.js";
2
2
  export { log, logger };
@@ -399,16 +399,16 @@ function G(t, u$1, F$1) {
399
399
  `).map((e$1) => oD(e$1, u$1, F$1)).join(`
400
400
  `);
401
401
  }
402
- const aD = [
403
- "up",
404
- "down",
405
- "left",
406
- "right",
407
- "space",
408
- "enter",
409
- "cancel"
410
- ], c = {
411
- actions: new Set(aD),
402
+ const c = {
403
+ actions: new Set([
404
+ "up",
405
+ "down",
406
+ "left",
407
+ "right",
408
+ "space",
409
+ "enter",
410
+ "cancel"
411
+ ]),
412
412
  aliases: new Map([
413
413
  ["k", "up"],
414
414
  ["j", "down"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccusage",
3
- "version": "17.1.2",
3
+ "version": "17.1.3",
4
4
  "description": "Usage analysis tool for Claude Code",
5
5
  "homepage": "https://github.com/ryoppippi/ccusage#readme",
6
6
  "bugs": {