ccusage 15.5.1 → 15.6.0

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,8 +1,14 @@
1
- import { CostMode, PricingFetcher, SortOrder } from "./pricing-fetcher-B3SvKOod.js";
1
+ import { Bucket, CostMode, PricingFetcher$1 as PricingFetcher, SortOrder, TupleToUnion } from "./pricing-fetcher-AYfCy7g-.js";
2
2
  import { z } from "zod";
3
3
 
4
- //#region src/_session-blocks.d.ts
4
+ //#region src/_consts.d.ts
5
5
 
6
+ /**
7
+ * Days of the week for weekly aggregation
8
+ */
9
+ declare const WEEK_DAYS: readonly ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
10
+ //#endregion
11
+ //#region src/_session-blocks.d.ts
6
12
  /**
7
13
  * Represents a single usage data entry loaded from JSONL files
8
14
  */
@@ -50,8 +56,9 @@ type SessionBlock = {
50
56
  //#endregion
51
57
  //#region src/data-loader.d.ts
52
58
  /**
53
- * Get all Claude data directories to search for usage data
54
- * Supports multiple paths: environment variable (comma-separated), new default, and old default
59
+ * Get Claude data directories to search for usage data
60
+ * When CLAUDE_CONFIG_DIR is set: uses only those paths
61
+ * When not set: uses default paths (~/.config/claude and ~/.claude)
55
62
  * @returns Array of valid Claude data directory paths
56
63
  */
57
64
  declare function getClaudePaths(): string[];
@@ -418,6 +425,152 @@ declare const monthlyUsageSchema: z.ZodObject<{
418
425
  * Type definition for monthly usage aggregation
419
426
  */
420
427
  type MonthlyUsage = z.infer<typeof monthlyUsageSchema>;
428
+ /**
429
+ * Zod schema for weekly usage aggregation data
430
+ */
431
+ declare const weeklyUsageSchema: z.ZodObject<{
432
+ week: z.ZodBranded<z.ZodString, "WeeklyDate">;
433
+ inputTokens: z.ZodNumber;
434
+ outputTokens: z.ZodNumber;
435
+ cacheCreationTokens: z.ZodNumber;
436
+ cacheReadTokens: z.ZodNumber;
437
+ totalCost: z.ZodNumber;
438
+ modelsUsed: z.ZodArray<z.ZodBranded<z.ZodString, "ModelName">, "many">;
439
+ modelBreakdowns: z.ZodArray<z.ZodObject<{
440
+ modelName: z.ZodBranded<z.ZodString, "ModelName">;
441
+ inputTokens: z.ZodNumber;
442
+ outputTokens: z.ZodNumber;
443
+ cacheCreationTokens: z.ZodNumber;
444
+ cacheReadTokens: z.ZodNumber;
445
+ cost: z.ZodNumber;
446
+ }, "strip", z.ZodTypeAny, {
447
+ modelName: string & z.BRAND<"ModelName">;
448
+ inputTokens: number;
449
+ outputTokens: number;
450
+ cacheCreationTokens: number;
451
+ cacheReadTokens: number;
452
+ cost: number;
453
+ }, {
454
+ modelName: string;
455
+ inputTokens: number;
456
+ outputTokens: number;
457
+ cacheCreationTokens: number;
458
+ cacheReadTokens: number;
459
+ cost: number;
460
+ }>, "many">;
461
+ project: z.ZodOptional<z.ZodString>;
462
+ }, "strip", z.ZodTypeAny, {
463
+ week: string & z.BRAND<"WeeklyDate">;
464
+ inputTokens: number;
465
+ outputTokens: number;
466
+ cacheCreationTokens: number;
467
+ cacheReadTokens: number;
468
+ totalCost: number;
469
+ modelsUsed: (string & z.BRAND<"ModelName">)[];
470
+ modelBreakdowns: {
471
+ modelName: string & z.BRAND<"ModelName">;
472
+ inputTokens: number;
473
+ outputTokens: number;
474
+ cacheCreationTokens: number;
475
+ cacheReadTokens: number;
476
+ cost: number;
477
+ }[];
478
+ project?: string | undefined;
479
+ }, {
480
+ week: string;
481
+ inputTokens: number;
482
+ outputTokens: number;
483
+ cacheCreationTokens: number;
484
+ cacheReadTokens: number;
485
+ totalCost: number;
486
+ modelsUsed: string[];
487
+ modelBreakdowns: {
488
+ modelName: string;
489
+ inputTokens: number;
490
+ outputTokens: number;
491
+ cacheCreationTokens: number;
492
+ cacheReadTokens: number;
493
+ cost: number;
494
+ }[];
495
+ project?: string | undefined;
496
+ }>;
497
+ /**
498
+ * Type definition for weekly usage aggregation
499
+ */
500
+ type WeeklyUsage = z.infer<typeof weeklyUsageSchema>;
501
+ /**
502
+ * Zod schema for bucket usage aggregation data
503
+ */
504
+ declare const bucketUsageSchema: z.ZodObject<{
505
+ bucket: z.ZodUnion<[z.ZodBranded<z.ZodString, "WeeklyDate">, z.ZodBranded<z.ZodString, "MonthlyDate">]>;
506
+ inputTokens: z.ZodNumber;
507
+ outputTokens: z.ZodNumber;
508
+ cacheCreationTokens: z.ZodNumber;
509
+ cacheReadTokens: z.ZodNumber;
510
+ totalCost: z.ZodNumber;
511
+ modelsUsed: z.ZodArray<z.ZodBranded<z.ZodString, "ModelName">, "many">;
512
+ modelBreakdowns: z.ZodArray<z.ZodObject<{
513
+ modelName: z.ZodBranded<z.ZodString, "ModelName">;
514
+ inputTokens: z.ZodNumber;
515
+ outputTokens: z.ZodNumber;
516
+ cacheCreationTokens: z.ZodNumber;
517
+ cacheReadTokens: z.ZodNumber;
518
+ cost: z.ZodNumber;
519
+ }, "strip", z.ZodTypeAny, {
520
+ modelName: string & z.BRAND<"ModelName">;
521
+ inputTokens: number;
522
+ outputTokens: number;
523
+ cacheCreationTokens: number;
524
+ cacheReadTokens: number;
525
+ cost: number;
526
+ }, {
527
+ modelName: string;
528
+ inputTokens: number;
529
+ outputTokens: number;
530
+ cacheCreationTokens: number;
531
+ cacheReadTokens: number;
532
+ cost: number;
533
+ }>, "many">;
534
+ project: z.ZodOptional<z.ZodString>;
535
+ }, "strip", z.ZodTypeAny, {
536
+ bucket: (string & z.BRAND<"MonthlyDate">) | (string & z.BRAND<"WeeklyDate">);
537
+ inputTokens: number;
538
+ outputTokens: number;
539
+ cacheCreationTokens: number;
540
+ cacheReadTokens: number;
541
+ totalCost: number;
542
+ modelsUsed: (string & z.BRAND<"ModelName">)[];
543
+ modelBreakdowns: {
544
+ modelName: string & z.BRAND<"ModelName">;
545
+ inputTokens: number;
546
+ outputTokens: number;
547
+ cacheCreationTokens: number;
548
+ cacheReadTokens: number;
549
+ cost: number;
550
+ }[];
551
+ project?: string | undefined;
552
+ }, {
553
+ bucket: string;
554
+ inputTokens: number;
555
+ outputTokens: number;
556
+ cacheCreationTokens: number;
557
+ cacheReadTokens: number;
558
+ totalCost: number;
559
+ modelsUsed: string[];
560
+ modelBreakdowns: {
561
+ modelName: string;
562
+ inputTokens: number;
563
+ outputTokens: number;
564
+ cacheCreationTokens: number;
565
+ cacheReadTokens: number;
566
+ cost: number;
567
+ }[];
568
+ project?: string | undefined;
569
+ }>;
570
+ /**
571
+ * Type definition for bucket usage aggregation
572
+ */
573
+ type BucketUsage = z.infer<typeof bucketUsageSchema>;
421
574
  /**
422
575
  * Formats a date string to YYYY-MM-DD format
423
576
  * @param dateStr - Input date string
@@ -478,6 +631,7 @@ type DateFilter = {
478
631
  since?: string; // YYYYMMDD format
479
632
  until?: string; // YYYYMMDD format
480
633
  };
634
+ type WeekDay = TupleToUnion<typeof WEEK_DAYS>;
481
635
  /**
482
636
  * Configuration options for loading usage data
483
637
  */
@@ -489,6 +643,7 @@ type LoadOptions = {
489
643
  sessionDurationHours?: number; // Session block duration in hours
490
644
  groupByProject?: boolean; // Group data by project instead of aggregating
491
645
  project?: string; // Filter to specific project name
646
+ startOfWeek?: WeekDay; // Start of week for weekly aggregation
492
647
  } & DateFilter;
493
648
  /**
494
649
  * Loads and aggregates Claude usage data by day
@@ -511,6 +666,8 @@ declare function loadSessionData(options?: LoadOptions): Promise<SessionUsage[]>
511
666
  * @returns Array of monthly usage summaries sorted by month
512
667
  */
513
668
  declare function loadMonthlyUsageData(options?: LoadOptions): Promise<MonthlyUsage[]>;
669
+ declare function loadWeeklyUsageData(options?: LoadOptions): Promise<WeeklyUsage[]>;
670
+ declare function loadBucketUsageData(groupingFn: (data: DailyUsage) => Bucket, options?: LoadOptions): Promise<BucketUsage[]>;
514
671
  /**
515
672
  * Loads usage data and organizes it into session blocks (typically 5-hour billing periods)
516
673
  * Processes all usage data and groups it into time-based blocks for billing analysis
@@ -519,4 +676,4 @@ declare function loadMonthlyUsageData(options?: LoadOptions): Promise<MonthlyUsa
519
676
  */
520
677
  declare function loadSessionBlockData(options?: LoadOptions): Promise<SessionBlock[]>;
521
678
  //#endregion
522
- export { DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema };
679
+ export { BucketUsage, DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, WeeklyUsage, bucketUsageSchema as bucketUsageSchema$1, calculateCostForEntry as calculateCostForEntry$1, createUniqueHash as createUniqueHash$1, dailyUsageSchema as dailyUsageSchema$1, extractProjectFromPath as extractProjectFromPath$1, formatDate as formatDate$1, formatDateCompact as formatDateCompact$1, getClaudePaths as getClaudePaths$1, getEarliestTimestamp as getEarliestTimestamp$1, getUsageLimitResetTime as getUsageLimitResetTime$1, globUsageFiles as globUsageFiles$1, loadBucketUsageData as loadBucketUsageData$1, loadDailyUsageData as loadDailyUsageData$1, loadMonthlyUsageData as loadMonthlyUsageData$1, loadSessionBlockData as loadSessionBlockData$1, loadSessionData as loadSessionData$1, loadWeeklyUsageData as loadWeeklyUsageData$1, modelBreakdownSchema as modelBreakdownSchema$1, monthlyUsageSchema as monthlyUsageSchema$1, sessionUsageSchema as sessionUsageSchema$1, sortFilesByTimestamp as sortFilesByTimestamp$1, usageDataSchema as usageDataSchema$1, weeklyUsageSchema as weeklyUsageSchema$1 };
@@ -1,3 +1,3 @@
1
- import { DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema } from "./data-loader-CgvyDaQD.js";
2
- import "./pricing-fetcher-B3SvKOod.js";
3
- export { DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema };
1
+ import "./pricing-fetcher-AYfCy7g-.js";
2
+ import { BucketUsage, DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, WeeklyUsage, bucketUsageSchema$1 as bucketUsageSchema, calculateCostForEntry$1 as calculateCostForEntry, createUniqueHash$1 as createUniqueHash, dailyUsageSchema$1 as dailyUsageSchema, extractProjectFromPath$1 as extractProjectFromPath, formatDate$1 as formatDate, formatDateCompact$1 as formatDateCompact, getClaudePaths$1 as getClaudePaths, getEarliestTimestamp$1 as getEarliestTimestamp, getUsageLimitResetTime$1 as getUsageLimitResetTime, globUsageFiles$1 as globUsageFiles, loadBucketUsageData$1 as loadBucketUsageData, loadDailyUsageData$1 as loadDailyUsageData, loadMonthlyUsageData$1 as loadMonthlyUsageData, loadSessionBlockData$1 as loadSessionBlockData, loadSessionData$1 as loadSessionData, loadWeeklyUsageData$1 as loadWeeklyUsageData, modelBreakdownSchema$1 as modelBreakdownSchema, monthlyUsageSchema$1 as monthlyUsageSchema, sessionUsageSchema$1 as sessionUsageSchema, sortFilesByTimestamp$1 as sortFilesByTimestamp, usageDataSchema$1 as usageDataSchema, weeklyUsageSchema$1 as weeklyUsageSchema } from "./data-loader-DZMUuqrf.js";
3
+ export { BucketUsage, DailyUsage, DateFilter, GlobResult, LoadOptions, ModelBreakdown, MonthlyUsage, SessionUsage, UsageData, WeeklyUsage, bucketUsageSchema, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema, weeklyUsageSchema };
@@ -1,6 +1,6 @@
1
- import "./pricing-fetcher-eNV76BjF.js";
1
+ import "./pricing-fetcher-CNjC0nXU.js";
2
2
  import "./_token-utils-WjkbrjKv.js";
3
- import "./_types-BHFM59hI.js";
4
- import { calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema } from "./data-loader-BAp4u-7e.js";
5
- import "./logger-COLgmk2z.js";
6
- export { calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema };
3
+ import "./_types-ed8-0BH6.js";
4
+ import { bucketUsageSchema, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema, weeklyUsageSchema } from "./data-loader-CwryIrwx.js";
5
+ import "./logger-C35JCduT.js";
6
+ export { bucketUsageSchema, calculateCostForEntry, createUniqueHash, dailyUsageSchema, extractProjectFromPath, formatDate, formatDateCompact, getClaudePaths, getEarliestTimestamp, getUsageLimitResetTime, globUsageFiles, loadBucketUsageData, loadDailyUsageData, loadMonthlyUsageData, loadSessionBlockData, loadSessionData, loadWeeklyUsageData, modelBreakdownSchema, monthlyUsageSchema, sessionUsageSchema, sortFilesByTimestamp, usageDataSchema, weeklyUsageSchema };
@@ -1,6 +1,6 @@
1
- import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, PricingFetcher, USAGE_DATA_GLOB_PATTERN, __toESM, isFailure, require_usingCtx, try_ } from "./pricing-fetcher-eNV76BjF.js";
2
- import { getClaudePaths, glob, unwrap, usageDataSchema } from "./data-loader-BAp4u-7e.js";
3
- import { logger } from "./logger-COLgmk2z.js";
1
+ import { CLAUDE_PROJECTS_DIR_NAME, DEBUG_MATCH_THRESHOLD_PERCENT, PricingFetcher, USAGE_DATA_GLOB_PATTERN, __toESM, isFailure, require_usingCtx, try_ } from "./pricing-fetcher-CNjC0nXU.js";
2
+ import { getClaudePaths, glob, unwrap, usageDataSchema } from "./data-loader-CwryIrwx.js";
3
+ import { logger } from "./logger-C35JCduT.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);
@@ -31,8 +31,8 @@ async function detectMismatches(claudePath) {
31
31
  matches: 0,
32
32
  mismatches: 0,
33
33
  discrepancies: [],
34
- modelStats: /* @__PURE__ */ new Map(),
35
- versionStats: /* @__PURE__ */ new Map()
34
+ modelStats: new Map(),
35
+ versionStats: new Map()
36
36
  };
37
37
  for (const file of files) {
38
38
  const content = await readFile(file, "utf-8");
@@ -40,7 +40,7 @@ async function detectMismatches(claudePath) {
40
40
  for (const line of lines) {
41
41
  const parseParser = try_({
42
42
  try: () => JSON.parse(line),
43
- catch: () => /* @__PURE__ */ new Error("Invalid JSON")
43
+ catch: () => new Error("Invalid JSON")
44
44
  });
45
45
  const parseResult = parseParser();
46
46
  if (isFailure(parseResult)) continue;
package/dist/debug.js CHANGED
@@ -1,7 +1,7 @@
1
- import "./pricing-fetcher-eNV76BjF.js";
1
+ import "./pricing-fetcher-CNjC0nXU.js";
2
2
  import "./_token-utils-WjkbrjKv.js";
3
- import "./_types-BHFM59hI.js";
4
- import "./data-loader-BAp4u-7e.js";
5
- import "./logger-COLgmk2z.js";
6
- import { detectMismatches, printMismatchReport } from "./debug-IQBgd8CJ.js";
3
+ import "./_types-ed8-0BH6.js";
4
+ import "./data-loader-CwryIrwx.js";
5
+ import "./logger-C35JCduT.js";
6
+ import { detectMismatches, printMismatchReport } from "./debug-C8bVFK5q.js";
7
7
  export { detectMismatches, printMismatchReport };