ccusage 12.4.0 → 13.0.1

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.
package/LICENSE CHANGED
@@ -2,6 +2,8 @@ MIT License
2
2
 
3
3
  Copyright (c) 2025 ryoppippi
4
4
 
5
+ Logo and brand assets created by nyatinte are also licensed under MIT License.
6
+
5
7
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
8
  of this software and associated documentation files (the "Software"), to deal
7
9
  in the Software without restriction, including without limitation the rights
package/README.md CHANGED
@@ -1,17 +1,20 @@
1
- # ccusage
2
-
3
- > **ccusage(claude-code-usage)**
1
+ <div align="center">
2
+ <img src="https://cdn.jsdelivr.net/gh/ryoppippi/ccusage@main/docs/logo.svg" alt="ccusage logo" width="256" height="256">
3
+ <h1>ccusage</h1>
4
+ </div>
4
5
 
5
6
  [![npm version](https://img.shields.io/npm/v/ccusage?color=yellow)](https://npmjs.com/package/ccusage)
6
7
  [![NPM Downloads](https://img.shields.io/npm/dy/ccusage)](https://tanstack.com/stats/npm?packageGroups=%5B%7B%22packages%22:%5B%7B%22name%22:%22ccusage%22%7D%5D%7D%5D&range=30-days&transform=none&binType=daily&showDataMode=all&height=400)
7
8
  [![install size](https://packagephobia.com/badge?p=ccusage)](https://packagephobia.com/result?p=ccusage)
8
- [![DeepWiki](https://img.shields.io/badge/DeepWiki-ryoppippi%2Fccusage-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/ryoppippi/ccusage)<!-- DeepWiki badge generated by https://deepwiki.ryoppippi.com/ -->
9
+ [![DeepWiki](https://img.shields.io/badge/DeepWiki-ryoppippi%2Fccusage-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==)](https://deepwiki.com/ryoppippi/ccusage) <!-- DeepWiki badge generated by https://deepwiki.ryoppippi.com/ -->
9
10
  [![Mentioned in Awesome Claude Code](https://awesome.re/mentioned-badge.svg)](https://github.com/hesreallyhim/awesome-claude-code)
10
11
 
11
12
  <div align="center">
12
- <img src="https://github.com/ryoppippi/ccusage/blob/main/docs/screenshot.png?raw=true">
13
+ <img src="https://cdn.jsdelivr.net/gh/ryoppippi/ccusage@main/docs/screenshot.png">
13
14
  </div>
14
15
 
16
+ > **ccusage(claude-code-usage)**
17
+
15
18
  A CLI tool for analyzing Claude Code usage from local JSONL files.
16
19
 
17
20
  Inspired by [this article](https://note.com/milliondev/n/n1d018da2d769) about tracking Claude Code usage costs.
@@ -19,15 +22,15 @@ Inspired by [this article](https://note.com/milliondev/n/n1d018da2d769) about tr
19
22
  ## What is `ccusage` (by NotebookLM)
20
23
 
21
24
  <details>
22
- <summary>Podcact</summary>
25
+ <summary>Podcast</summary>
23
26
 
24
27
  # English
25
28
 
26
- https://github.com/user-attachments/assets/7a00f2f3-82a7-41b6-a8da-e04b76b5e35a
29
+ <https://github.com/user-attachments/assets/7a00f2f3-82a7-41b6-a8da-e04b76b5e35a>
27
30
 
28
31
  # 日本語
29
32
 
30
- https://github.com/user-attachments/assets/db09fc06-bf57-4d37-9b06-514851bcc1d0
33
+ <https://github.com/user-attachments/assets/db09fc06-bf57-4d37-9b06-514851bcc1d0>
31
34
 
32
35
  </details>
33
36
 
@@ -276,7 +279,7 @@ The blocks report helps you understand Claude Code's 5-hour rolling session wind
276
279
  - Helps track if you're approaching token limits within a session
277
280
  - The `-t max` option automatically uses your highest previous block as the limit
278
281
 
279
- #### Blocks-specific options:
282
+ #### Blocks-specific options
280
283
 
281
284
  - `-t, --token-limit <number|max>`: Set token limit for quota warnings (use "max" for highest previous block)
282
285
  - `-a, --active`: Show only active block with detailed projections
@@ -349,7 +352,7 @@ Available MCP tools:
349
352
  #### Claude Desktop Configuration Example
350
353
 
351
354
  <div align="center">
352
- <img src="https://github.com/ryoppippi/ccusage/blob/main/docs/mcp-claude-desktop.avif?raw=true">
355
+ <img src="https://cdn.jsdelivr.net/gh/ryoppippi/ccusage@main/docs/mcp-claude-desktop.avif">
353
356
  </div>
354
357
 
355
358
  To use ccusage MCP with Claude Desktop, add this to your Claude Desktop configuration file:
@@ -477,6 +480,10 @@ With `--breakdown` flag:
477
480
 
478
481
  MIT
479
482
 
483
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
484
+
485
+ The logo and brand assets are also licensed under the MIT License. Created by [@nyatinte](https://github.com/nyatinte).
486
+
480
487
  ## Author
481
488
 
482
489
  [@ryoppippi](https://github.com/ryoppippi)
@@ -492,6 +499,7 @@ While the original approach uses DuckDB for analysis, this tool provides a more
492
499
  some projects use `ccusage` internally and provide additional features:
493
500
 
494
501
  - [claude-usage-tracker-for-mac](https://github.com/penicillin0/claude-usage-tracker-for-mac) – macOS menu bar app to visualize Claude Code usage costs by [@penicillin0](https://github.com/penicillin0).
502
+ - [ccusage Raycast Extension](https://www.raycast.com/nyatinte/ccusage) – Raycast extension to view Claude Code usage reports in Raycast by [@nyatinte](https://github.com/nyatinte).
495
503
 
496
504
  ## Acknowledgments
497
505
 
@@ -500,9 +508,9 @@ Thanks to [@milliondev](https://note.com/milliondev) for the original concept an
500
508
  ## Sponsors
501
509
 
502
510
  <p align="center">
503
- <a href="https://github.com/sponsors/ryoppippi">
504
- <img src="https://cdn.jsdelivr.net/gh/ryoppippi/sponsors/sponsors.svg">
505
- </a>
511
+ <a href="https://github.com/sponsors/ryoppippi">
512
+ <img src="https://cdn.jsdelivr.net/gh/ryoppippi/sponsors/sponsors.svg">
513
+ </a>
506
514
  </p>
507
515
 
508
516
  ## Star History
@@ -1,6 +1,6 @@
1
- import { CLAUDE_PROJECTS_DIR_NAME, DEFAULT_CLAUDE_CODE_PATH, DEFAULT_RECENT_DAYS, PricingFetcher, USAGE_DATA_GLOB_PATTERN, USER_HOME_DIR, __commonJSMin, __require, __toESM, require_usingCtx } from "./pricing-fetcher-5y05qfeL.js";
1
+ import { CLAUDE_PROJECTS_DIR_NAME, DEFAULT_CLAUDE_CODE_PATH, DEFAULT_RECENT_DAYS, PricingFetcher, USAGE_DATA_GLOB_PATTERN, USER_HOME_DIR, __commonJSMin, __require, __toESM, require_usingCtx } from "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import { activityDateSchema, arrayType, createDailyDate, createMonthlyDate, createProjectPath, createSessionId, dailyDateSchema, isoTimestampSchema, messageIdSchema, modelNameSchema, monthlyDateSchema, numberType, objectType, projectPathSchema, requestIdSchema, sessionIdSchema, versionSchema } from "./types.internal-CX7kpidj.js";
3
- import { logger } from "./logger-Cyt2-axs.js";
3
+ import { logger } from "./logger-Pv_1kl_H.js";
4
4
  import a, { readFile } from "node:fs/promises";
5
5
  import F, { homedir } from "node:os";
6
6
  import path, { posix } from "node:path";
@@ -1,5 +1,5 @@
1
- import "./pricing-fetcher-5y05qfeL.js";
1
+ import "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import "./types.internal-CX7kpidj.js";
3
- import { calculateCostForEntry, createUniqueHash, dailyUsageSchema, formatDate, formatDateCompact, getDefaultClaudePath, getEarliestTimestamp, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema } from "./data-loader-BL0D1ClF.js";
4
- import "./logger-Cyt2-axs.js";
3
+ import { calculateCostForEntry, createUniqueHash, dailyUsageSchema, formatDate, formatDateCompact, getDefaultClaudePath, getEarliestTimestamp, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema } from "./data-loader-D0kGuKxU.js";
4
+ import "./logger-Pv_1kl_H.js";
5
5
  export { calculateCostForEntry, createUniqueHash, dailyUsageSchema, formatDate, formatDateCompact, getDefaultClaudePath, getEarliestTimestamp, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema };
@@ -1,6 +1,6 @@
1
- import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, DEFAULT_CLAUDE_CODE_PATH, PricingFetcher, USAGE_DATA_GLOB_PATTERN, USER_HOME_DIR, __toESM, require_usingCtx } from "./pricing-fetcher-5y05qfeL.js";
2
- import { glob, usageDataSchema } from "./data-loader-BL0D1ClF.js";
3
- import { logger } from "./logger-Cyt2-axs.js";
1
+ import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, DEFAULT_CLAUDE_CODE_PATH, PricingFetcher, USAGE_DATA_GLOB_PATTERN, USER_HOME_DIR, __toESM, require_usingCtx } from "./pricing-fetcher-Dc_QCa7C.js";
2
+ import { glob, usageDataSchema } from "./data-loader-D0kGuKxU.js";
3
+ import { logger } from "./logger-Pv_1kl_H.js";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  var import_usingCtx = __toESM(require_usingCtx(), 1);
package/dist/debug.js CHANGED
@@ -1,6 +1,6 @@
1
- import "./pricing-fetcher-5y05qfeL.js";
1
+ import "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import "./types.internal-CX7kpidj.js";
3
- import "./data-loader-BL0D1ClF.js";
4
- import "./logger-Cyt2-axs.js";
5
- import { detectMismatches, printMismatchReport } from "./debug-DzMUvq_R.js";
3
+ import "./data-loader-D0kGuKxU.js";
4
+ import "./logger-Pv_1kl_H.js";
5
+ import { detectMismatches, printMismatchReport } from "./debug-DBezzOxe.js";
6
6
  export { detectMismatches, printMismatchReport };
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { BLOCKS_COMPACT_WIDTH_THRESHOLD, BLOCKS_DEFAULT_TERMINAL_WIDTH, BLOCKS_WARNING_THRESHOLD, DEFAULT_RECENT_DAYS, MCP_DEFAULT_PORT, __commonJSMin, __require, __toESM } from "./pricing-fetcher-5y05qfeL.js";
2
+ import { BLOCKS_COMPACT_WIDTH_THRESHOLD, BLOCKS_DEFAULT_TERMINAL_WIDTH, BLOCKS_WARNING_THRESHOLD, DEFAULT_RECENT_DAYS, MCP_DEFAULT_PORT, __commonJSMin, __require, __toESM } from "./pricing-fetcher-Dc_QCa7C.js";
3
3
  import { CostModes, SortOrders, dateSchema } from "./types.internal-CX7kpidj.js";
4
4
  import { calculateTotals, createTotalsObject, getTotalTokens } from "./calculate-cost-CoS7we68.js";
5
- import { DEFAULT_SESSION_DURATION_HOURS, calculateBurnRate, filterRecentBlocks, formatDateCompact, getDefaultClaudePath, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, projectBlockUsage, uniq } from "./data-loader-BL0D1ClF.js";
6
- import { description, log, logger, name, version } from "./logger-Cyt2-axs.js";
7
- import { detectMismatches, printMismatchReport } from "./debug-DzMUvq_R.js";
8
- import { createMcpHttpApp, createMcpServer, startMcpServerStdio } from "./mcp-Cx7Vxuva.js";
5
+ import { DEFAULT_SESSION_DURATION_HOURS, calculateBurnRate, filterRecentBlocks, formatDateCompact, getDefaultClaudePath, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, projectBlockUsage, uniq } from "./data-loader-D0kGuKxU.js";
6
+ import { description, log, logger, name, version } from "./logger-Pv_1kl_H.js";
7
+ import { detectMismatches, printMismatchReport } from "./debug-DBezzOxe.js";
8
+ import { createMcpHttpApp, createMcpServer, startMcpServerStdio } from "./mcp-lSzQickg.js";
9
9
  import process$1 from "node:process";
10
10
  import { createServer } from "node:http";
11
11
  import { Http2ServerRequest } from "node:http2";
@@ -951,7 +951,7 @@ function _getDefaultLogLevel() {
951
951
  }
952
952
  const consola = createConsola$1();
953
953
  var name = "ccusage";
954
- var version = "12.4.0";
954
+ var version = "13.0.1";
955
955
  var description = "Usage analysis tool for Claude Code";
956
956
  /**
957
957
  * Application logger instance with package name tag
package/dist/logger.js CHANGED
@@ -1,2 +1,2 @@
1
- import { log, logger } from "./logger-Cyt2-axs.js";
1
+ import { log, logger } from "./logger-Pv_1kl_H.js";
2
2
  export { log, logger };
@@ -1,7 +1,7 @@
1
- import { __commonJSMin, __toESM, require_usingCtx } from "./pricing-fetcher-5y05qfeL.js";
1
+ import { __commonJSMin, __toESM, require_usingCtx } from "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import { ZodFirstPartyTypeKind, ZodOptional, ZodType, arrayType, booleanType, dateSchema, discriminatedUnionType, enumType, literalType, numberType, objectType, optionalType, recordType, stringType, unionType, unknownType } from "./types.internal-CX7kpidj.js";
3
- import { getDefaultClaudePath, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData } from "./data-loader-BL0D1ClF.js";
4
- import { name, version } from "./logger-Cyt2-axs.js";
3
+ import { getDefaultClaudePath, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData } from "./data-loader-D0kGuKxU.js";
4
+ import { name, version } from "./logger-Pv_1kl_H.js";
5
5
  import process from "node:process";
6
6
  const LATEST_PROTOCOL_VERSION = "2025-03-26";
7
7
  const SUPPORTED_PROTOCOL_VERSIONS = [
package/dist/mcp.js CHANGED
@@ -1,6 +1,6 @@
1
- import "./pricing-fetcher-5y05qfeL.js";
1
+ import "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import "./types.internal-CX7kpidj.js";
3
- import "./data-loader-BL0D1ClF.js";
4
- import "./logger-Cyt2-axs.js";
5
- import { createMcpHttpApp, createMcpServer, startMcpServerStdio } from "./mcp-Cx7Vxuva.js";
3
+ import "./data-loader-D0kGuKxU.js";
4
+ import "./logger-Pv_1kl_H.js";
5
+ import { createMcpHttpApp, createMcpServer, startMcpServerStdio } from "./mcp-lSzQickg.js";
6
6
  export { createMcpHttpApp, createMcpServer, startMcpServerStdio };
@@ -1,5 +1,5 @@
1
1
  import { modelPricingSchema } from "./types.internal-CX7kpidj.js";
2
- import { logger } from "./logger-Cyt2-axs.js";
2
+ import { logger } from "./logger-Pv_1kl_H.js";
3
3
  import { createRequire } from "node:module";
4
4
  import { homedir } from "node:os";
5
5
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- import { PricingFetcher } from "./pricing-fetcher-5y05qfeL.js";
1
+ import { PricingFetcher } from "./pricing-fetcher-Dc_QCa7C.js";
2
2
  import "./types.internal-CX7kpidj.js";
3
- import "./logger-Cyt2-axs.js";
3
+ import "./logger-Pv_1kl_H.js";
4
4
  export { PricingFetcher };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ccusage",
3
3
  "type": "module",
4
- "version": "12.4.0",
4
+ "version": "13.0.1",
5
5
  "description": "Usage analysis tool for Claude Code",
6
6
  "author": "ryoppippi",
7
7
  "license": "MIT",