@tokscale/cli 1.0.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.
Files changed (211) hide show
  1. package/dist/auth.d.ts +17 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +162 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/claudecode.d.ts +39 -0
  6. package/dist/claudecode.d.ts.map +1 -0
  7. package/dist/claudecode.js +375 -0
  8. package/dist/claudecode.js.map +1 -0
  9. package/dist/cli.d.ts +9 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +761 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/credentials.d.ts +36 -0
  14. package/dist/credentials.d.ts.map +1 -0
  15. package/dist/credentials.js +109 -0
  16. package/dist/credentials.js.map +1 -0
  17. package/dist/cursor.d.ts +132 -0
  18. package/dist/cursor.d.ts.map +1 -0
  19. package/dist/cursor.js +432 -0
  20. package/dist/cursor.js.map +1 -0
  21. package/dist/gemini.d.ts +36 -0
  22. package/dist/gemini.d.ts.map +1 -0
  23. package/dist/gemini.js +125 -0
  24. package/dist/gemini.js.map +1 -0
  25. package/dist/graph-types.d.ts +152 -0
  26. package/dist/graph-types.d.ts.map +1 -0
  27. package/dist/graph-types.js +6 -0
  28. package/dist/graph-types.js.map +1 -0
  29. package/dist/graph.d.ts +29 -0
  30. package/dist/graph.d.ts.map +1 -0
  31. package/dist/graph.js +383 -0
  32. package/dist/graph.js.map +1 -0
  33. package/dist/native-runner.d.ts +12 -0
  34. package/dist/native-runner.d.ts.map +1 -0
  35. package/dist/native-runner.js +89 -0
  36. package/dist/native-runner.js.map +1 -0
  37. package/dist/native.d.ts +116 -0
  38. package/dist/native.d.ts.map +1 -0
  39. package/dist/native.js +359 -0
  40. package/dist/native.js.map +1 -0
  41. package/dist/opencode.d.ts +40 -0
  42. package/dist/opencode.d.ts.map +1 -0
  43. package/dist/opencode.js +69 -0
  44. package/dist/opencode.js.map +1 -0
  45. package/dist/pricing.d.ts +58 -0
  46. package/dist/pricing.d.ts.map +1 -0
  47. package/dist/pricing.js +232 -0
  48. package/dist/pricing.js.map +1 -0
  49. package/dist/sessions/claudecode.d.ts +8 -0
  50. package/dist/sessions/claudecode.d.ts.map +1 -0
  51. package/dist/sessions/claudecode.js +84 -0
  52. package/dist/sessions/claudecode.js.map +1 -0
  53. package/dist/sessions/codex.d.ts +8 -0
  54. package/dist/sessions/codex.d.ts.map +1 -0
  55. package/dist/sessions/codex.js +158 -0
  56. package/dist/sessions/codex.js.map +1 -0
  57. package/dist/sessions/gemini.d.ts +8 -0
  58. package/dist/sessions/gemini.d.ts.map +1 -0
  59. package/dist/sessions/gemini.js +66 -0
  60. package/dist/sessions/gemini.js.map +1 -0
  61. package/dist/sessions/index.d.ts +32 -0
  62. package/dist/sessions/index.d.ts.map +1 -0
  63. package/dist/sessions/index.js +96 -0
  64. package/dist/sessions/index.js.map +1 -0
  65. package/dist/sessions/opencode.d.ts +8 -0
  66. package/dist/sessions/opencode.d.ts.map +1 -0
  67. package/dist/sessions/opencode.js +54 -0
  68. package/dist/sessions/opencode.js.map +1 -0
  69. package/dist/sessions/reports.d.ts +58 -0
  70. package/dist/sessions/reports.d.ts.map +1 -0
  71. package/dist/sessions/reports.js +337 -0
  72. package/dist/sessions/reports.js.map +1 -0
  73. package/dist/sessions/types.d.ts +30 -0
  74. package/dist/sessions/types.d.ts.map +1 -0
  75. package/dist/sessions/types.js +29 -0
  76. package/dist/sessions/types.js.map +1 -0
  77. package/dist/spinner.d.ts +75 -0
  78. package/dist/spinner.d.ts.map +1 -0
  79. package/dist/spinner.js +203 -0
  80. package/dist/spinner.js.map +1 -0
  81. package/dist/submit.d.ts +21 -0
  82. package/dist/submit.d.ts.map +1 -0
  83. package/dist/submit.js +128 -0
  84. package/dist/submit.js.map +1 -0
  85. package/dist/table.d.ts +42 -0
  86. package/dist/table.d.ts.map +1 -0
  87. package/dist/table.js +181 -0
  88. package/dist/table.js.map +1 -0
  89. package/dist/test-selection.d.ts +2 -0
  90. package/dist/test-selection.d.ts.map +1 -0
  91. package/dist/test-selection.jsx +32 -0
  92. package/dist/test-selection.jsx.map +1 -0
  93. package/dist/tui/App.d.ts +4 -0
  94. package/dist/tui/App.d.ts.map +1 -0
  95. package/dist/tui/App.js +167 -0
  96. package/dist/tui/App.js.map +1 -0
  97. package/dist/tui/App.jsx +281 -0
  98. package/dist/tui/App.jsx.map +1 -0
  99. package/dist/tui/components/BarChart.d.ts +17 -0
  100. package/dist/tui/components/BarChart.d.ts.map +1 -0
  101. package/dist/tui/components/BarChart.js +63 -0
  102. package/dist/tui/components/BarChart.js.map +1 -0
  103. package/dist/tui/components/BarChart.jsx +163 -0
  104. package/dist/tui/components/BarChart.jsx.map +1 -0
  105. package/dist/tui/components/DailyView.d.ts +13 -0
  106. package/dist/tui/components/DailyView.d.ts.map +1 -0
  107. package/dist/tui/components/DailyView.js +32 -0
  108. package/dist/tui/components/DailyView.js.map +1 -0
  109. package/dist/tui/components/DailyView.jsx +84 -0
  110. package/dist/tui/components/DailyView.jsx.map +1 -0
  111. package/dist/tui/components/DateBreakdownPanel.d.ts +7 -0
  112. package/dist/tui/components/DateBreakdownPanel.d.ts.map +1 -0
  113. package/dist/tui/components/DateBreakdownPanel.jsx +61 -0
  114. package/dist/tui/components/DateBreakdownPanel.jsx.map +1 -0
  115. package/dist/tui/components/Footer.d.ts +26 -0
  116. package/dist/tui/components/Footer.d.ts.map +1 -0
  117. package/dist/tui/components/Footer.js +15 -0
  118. package/dist/tui/components/Footer.js.map +1 -0
  119. package/dist/tui/components/Footer.jsx +158 -0
  120. package/dist/tui/components/Footer.jsx.map +1 -0
  121. package/dist/tui/components/Header.d.ts +9 -0
  122. package/dist/tui/components/Header.d.ts.map +1 -0
  123. package/dist/tui/components/Header.js +12 -0
  124. package/dist/tui/components/Header.js.map +1 -0
  125. package/dist/tui/components/Header.jsx +38 -0
  126. package/dist/tui/components/Header.jsx.map +1 -0
  127. package/dist/tui/components/Legend.d.ts +7 -0
  128. package/dist/tui/components/Legend.d.ts.map +1 -0
  129. package/dist/tui/components/Legend.js +9 -0
  130. package/dist/tui/components/Legend.js.map +1 -0
  131. package/dist/tui/components/Legend.jsx +27 -0
  132. package/dist/tui/components/Legend.jsx.map +1 -0
  133. package/dist/tui/components/LoadingSpinner.d.ts +8 -0
  134. package/dist/tui/components/LoadingSpinner.d.ts.map +1 -0
  135. package/dist/tui/components/LoadingSpinner.jsx +62 -0
  136. package/dist/tui/components/LoadingSpinner.jsx.map +1 -0
  137. package/dist/tui/components/ModelListItem.d.ts +11 -0
  138. package/dist/tui/components/ModelListItem.d.ts.map +1 -0
  139. package/dist/tui/components/ModelListItem.js +18 -0
  140. package/dist/tui/components/ModelListItem.js.map +1 -0
  141. package/dist/tui/components/ModelListItem.jsx +17 -0
  142. package/dist/tui/components/ModelListItem.jsx.map +1 -0
  143. package/dist/tui/components/ModelRow.d.ts +13 -0
  144. package/dist/tui/components/ModelRow.d.ts.map +1 -0
  145. package/dist/tui/components/ModelRow.jsx +28 -0
  146. package/dist/tui/components/ModelRow.jsx.map +1 -0
  147. package/dist/tui/components/ModelView.d.ts +13 -0
  148. package/dist/tui/components/ModelView.d.ts.map +1 -0
  149. package/dist/tui/components/ModelView.js +34 -0
  150. package/dist/tui/components/ModelView.js.map +1 -0
  151. package/dist/tui/components/ModelView.jsx +111 -0
  152. package/dist/tui/components/ModelView.jsx.map +1 -0
  153. package/dist/tui/components/OverviewView.d.ts +14 -0
  154. package/dist/tui/components/OverviewView.d.ts.map +1 -0
  155. package/dist/tui/components/OverviewView.js +24 -0
  156. package/dist/tui/components/OverviewView.js.map +1 -0
  157. package/dist/tui/components/OverviewView.jsx +79 -0
  158. package/dist/tui/components/OverviewView.jsx.map +1 -0
  159. package/dist/tui/components/StatsView.d.ts +12 -0
  160. package/dist/tui/components/StatsView.d.ts.map +1 -0
  161. package/dist/tui/components/StatsView.js +43 -0
  162. package/dist/tui/components/StatsView.js.map +1 -0
  163. package/dist/tui/components/StatsView.jsx +180 -0
  164. package/dist/tui/components/StatsView.jsx.map +1 -0
  165. package/dist/tui/components/TokenBreakdown.d.ts +14 -0
  166. package/dist/tui/components/TokenBreakdown.d.ts.map +1 -0
  167. package/dist/tui/components/TokenBreakdown.jsx +27 -0
  168. package/dist/tui/components/TokenBreakdown.jsx.map +1 -0
  169. package/dist/tui/components/index.d.ts +16 -0
  170. package/dist/tui/components/index.d.ts.map +1 -0
  171. package/dist/tui/components/index.js +13 -0
  172. package/dist/tui/components/index.js.map +1 -0
  173. package/dist/tui/config/settings.d.ts +12 -0
  174. package/dist/tui/config/settings.d.ts.map +1 -0
  175. package/dist/tui/config/settings.js +105 -0
  176. package/dist/tui/config/settings.js.map +1 -0
  177. package/dist/tui/config/themes.d.ts +15 -0
  178. package/dist/tui/config/themes.d.ts.map +1 -0
  179. package/dist/tui/config/themes.js +82 -0
  180. package/dist/tui/config/themes.js.map +1 -0
  181. package/dist/tui/hooks/useData.d.ts +17 -0
  182. package/dist/tui/hooks/useData.d.ts.map +1 -0
  183. package/dist/tui/hooks/useData.js +430 -0
  184. package/dist/tui/hooks/useData.js.map +1 -0
  185. package/dist/tui/index.d.ts +4 -0
  186. package/dist/tui/index.d.ts.map +1 -0
  187. package/dist/tui/index.js +8 -0
  188. package/dist/tui/index.js.map +1 -0
  189. package/dist/tui/index.jsx +35 -0
  190. package/dist/tui/index.jsx.map +1 -0
  191. package/dist/tui/types/index.d.ts +133 -0
  192. package/dist/tui/types/index.d.ts.map +1 -0
  193. package/dist/tui/types/index.js +21 -0
  194. package/dist/tui/types/index.js.map +1 -0
  195. package/dist/tui/utils/cleanup.d.ts +22 -0
  196. package/dist/tui/utils/cleanup.d.ts.map +1 -0
  197. package/dist/tui/utils/cleanup.js +59 -0
  198. package/dist/tui/utils/cleanup.js.map +1 -0
  199. package/dist/tui/utils/colors.d.ts +18 -0
  200. package/dist/tui/utils/colors.d.ts.map +1 -0
  201. package/dist/tui/utils/colors.js +55 -0
  202. package/dist/tui/utils/colors.js.map +1 -0
  203. package/dist/tui/utils/format.d.ts +7 -0
  204. package/dist/tui/utils/format.d.ts.map +1 -0
  205. package/dist/tui/utils/format.js +45 -0
  206. package/dist/tui/utils/format.js.map +1 -0
  207. package/dist/tui/utils/responsive.d.ts +5 -0
  208. package/dist/tui/utils/responsive.d.ts.map +1 -0
  209. package/dist/tui/utils/responsive.js +5 -0
  210. package/dist/tui/utils/responsive.js.map +1 -0
  211. package/package.json +64 -0
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Type definitions for contribution graph data
3
+ * Note: intensity is calculated based on COST ($), not tokens
4
+ */
5
+ /**
6
+ * Valid source identifiers
7
+ */
8
+ export type SourceType = "opencode" | "claude" | "codex" | "gemini" | "cursor";
9
+ /**
10
+ * Token breakdown by category
11
+ */
12
+ export interface TokenBreakdown {
13
+ input: number;
14
+ output: number;
15
+ cacheRead: number;
16
+ cacheWrite: number;
17
+ reasoning: number;
18
+ }
19
+ /**
20
+ * Per-source contribution for a single day
21
+ */
22
+ export interface SourceContribution {
23
+ /** Source identifier */
24
+ source: SourceType;
25
+ /** Exact model ID as reported by the source */
26
+ modelId: string;
27
+ /** Provider ID if available */
28
+ providerId?: string;
29
+ /** Token counts */
30
+ tokens: TokenBreakdown;
31
+ /** Calculated cost for this source/model combination */
32
+ cost: number;
33
+ /** Number of messages/requests */
34
+ messages: number;
35
+ }
36
+ /**
37
+ * Daily contribution entry with full granularity
38
+ */
39
+ export interface DailyContribution {
40
+ /** ISO date string (YYYY-MM-DD) */
41
+ date: string;
42
+ /** Aggregated totals for the day */
43
+ totals: {
44
+ /** Total tokens (input + output + cache) */
45
+ tokens: number;
46
+ /** Total cost in USD */
47
+ cost: number;
48
+ /** Number of messages/requests */
49
+ messages: number;
50
+ };
51
+ /**
52
+ * Calculated intensity grade (0-4)
53
+ * Based on COST, not tokens
54
+ * 0 = no activity, 4 = highest cost relative to max
55
+ */
56
+ intensity: 0 | 1 | 2 | 3 | 4;
57
+ /** Token breakdown by category (aggregated across all sources) */
58
+ tokenBreakdown: TokenBreakdown;
59
+ /** Per-source breakdown with model information */
60
+ sources: SourceContribution[];
61
+ }
62
+ /**
63
+ * Year-level summary
64
+ */
65
+ export interface YearSummary {
66
+ /** Year as string (e.g., "2024") */
67
+ year: string;
68
+ /** Total tokens for the year */
69
+ totalTokens: number;
70
+ /** Total cost for the year */
71
+ totalCost: number;
72
+ /** Date range for this year's data */
73
+ range: {
74
+ start: string;
75
+ end: string;
76
+ };
77
+ }
78
+ /**
79
+ * Summary statistics
80
+ */
81
+ export interface DataSummary {
82
+ /** Total tokens across all time */
83
+ totalTokens: number;
84
+ /** Total cost across all time */
85
+ totalCost: number;
86
+ /** Total number of days in date range */
87
+ totalDays: number;
88
+ /** Number of days with activity */
89
+ activeDays: number;
90
+ /** Average cost per day (based on active days) */
91
+ averagePerDay: number;
92
+ /** Maximum cost in a single day (used for intensity calculation) */
93
+ maxCostInSingleDay: number;
94
+ /** All sources present in the data */
95
+ sources: SourceType[];
96
+ /** All unique model IDs across all sources */
97
+ models: string[];
98
+ }
99
+ /**
100
+ * Metadata about the export
101
+ */
102
+ export interface ExportMeta {
103
+ /** ISO timestamp of when the data was generated */
104
+ generatedAt: string;
105
+ /** CLI version that generated this data */
106
+ version: string;
107
+ /** Date range of the data */
108
+ dateRange: {
109
+ start: string;
110
+ end: string;
111
+ };
112
+ }
113
+ /**
114
+ * Root data structure exported by CLI
115
+ * This is the complete JSON schema for contribution graph data
116
+ */
117
+ export interface TokenContributionData {
118
+ /** Metadata about the export */
119
+ meta: ExportMeta;
120
+ /** Summary statistics */
121
+ summary: DataSummary;
122
+ /** Year-by-year breakdown for multi-year views */
123
+ years: YearSummary[];
124
+ /** Daily contribution data - the core dataset */
125
+ contributions: DailyContribution[];
126
+ }
127
+ /**
128
+ * Options for graph data generation
129
+ */
130
+ export interface GraphOptions {
131
+ /** Filter to specific sources */
132
+ sources?: SourceType[];
133
+ /** Start date filter (ISO format) */
134
+ since?: string;
135
+ /** End date filter (ISO format) */
136
+ until?: string;
137
+ /** Filter to specific year */
138
+ year?: string;
139
+ }
140
+ /**
141
+ * Unified message format for aggregation
142
+ * Used internally to normalize data from different sources
143
+ */
144
+ export interface UnifiedMessage {
145
+ source: SourceType;
146
+ modelId: string;
147
+ providerId?: string;
148
+ timestamp: number;
149
+ tokens: TokenBreakdown;
150
+ cost: number;
151
+ }
152
+ //# sourceMappingURL=graph-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-types.d.ts","sourceRoot":"","sources":["../src/graph-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type definitions for contribution graph data
3
+ * Note: intensity is calculated based on COST ($), not tokens
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=graph-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-types.js","sourceRoot":"","sources":["../src/graph-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Graph data generation module
3
+ * Aggregates token usage data by date for contribution graph visualization
4
+ *
5
+ * Key design: intensity is calculated based on COST ($), not tokens
6
+ *
7
+ * This module supports two implementations:
8
+ * - Native Rust (fast, ~10x faster) - used when available
9
+ * - Pure TypeScript (fallback) - always available
10
+ */
11
+ import type { TokenContributionData, GraphOptions } from "./graph-types.js";
12
+ /**
13
+ * Check if native implementation is available
14
+ */
15
+ export declare function isNativeAvailable(): boolean;
16
+ /**
17
+ * Generate contribution graph data from all sources
18
+ *
19
+ * Uses native Rust implementation if available, falls back to TypeScript.
20
+ * Set `options.forceTypescript = true` to skip native module.
21
+ */
22
+ export declare function generateGraphData(options?: GraphOptions & {
23
+ forceTypescript?: boolean;
24
+ }): Promise<TokenContributionData>;
25
+ /**
26
+ * Pure TypeScript implementation of graph data generation
27
+ */
28
+ export declare function generateGraphDataTS(options?: GraphOptions): Promise<TokenContributionData>;
29
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EACV,qBAAqB,EAIrB,YAAY,EAGb,MAAM,kBAAkB,CAAC;AAY1B;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,YAAY,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACzD,OAAO,CAAC,qBAAqB,CAAC,CAahC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAwChC"}
package/dist/graph.js ADDED
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Graph data generation module
3
+ * Aggregates token usage data by date for contribution graph visualization
4
+ *
5
+ * Key design: intensity is calculated based on COST ($), not tokens
6
+ *
7
+ * This module supports two implementations:
8
+ * - Native Rust (fast, ~10x faster) - used when available
9
+ * - Pure TypeScript (fallback) - always available
10
+ */
11
+ import { format } from "date-fns";
12
+ import { parseOpenCodeMessages, parseClaudeCodeMessages, parseCodexMessages, parseGeminiMessages, } from "./sessions/index.js";
13
+ import { PricingFetcher } from "./pricing.js";
14
+ const VERSION = "1.0.0";
15
+ // Try to load native module
16
+ let nativeModule = null;
17
+ try {
18
+ nativeModule = await import("./native.js");
19
+ }
20
+ catch {
21
+ // Native module not available, will use TypeScript implementation
22
+ }
23
+ /**
24
+ * Check if native implementation is available
25
+ */
26
+ export function isNativeAvailable() {
27
+ return nativeModule?.isNativeAvailable() ?? false;
28
+ }
29
+ /**
30
+ * Generate contribution graph data from all sources
31
+ *
32
+ * Uses native Rust implementation if available, falls back to TypeScript.
33
+ * Set `options.forceTypescript = true` to skip native module.
34
+ */
35
+ export async function generateGraphData(options = {}) {
36
+ // Try native implementation first (unless forced to use TypeScript)
37
+ if (!options.forceTypescript && nativeModule?.isNativeAvailable()) {
38
+ try {
39
+ return nativeModule.generateGraphNative(options);
40
+ }
41
+ catch (e) {
42
+ // Fall through to TypeScript implementation
43
+ console.warn("Native module failed, falling back to TypeScript:", e);
44
+ }
45
+ }
46
+ // TypeScript implementation
47
+ return generateGraphDataTS(options);
48
+ }
49
+ /**
50
+ * Pure TypeScript implementation of graph data generation
51
+ */
52
+ export async function generateGraphDataTS(options = {}) {
53
+ const fetcher = new PricingFetcher();
54
+ await fetcher.fetchPricing();
55
+ // Collect all messages from enabled sources
56
+ const messages = collectMessages(options, fetcher);
57
+ // Filter by date range
58
+ const filteredMessages = filterMessagesByDate(messages, options);
59
+ // Aggregate by date
60
+ const dailyMap = aggregateByDate(filteredMessages, fetcher);
61
+ // Convert to sorted array
62
+ let contributions = Array.from(dailyMap.values()).sort((a, b) => a.date.localeCompare(b.date));
63
+ // Calculate intensity based on COST
64
+ contributions = calculateAllIntensities(contributions);
65
+ // Build final structure
66
+ const summary = calculateSummary(contributions);
67
+ const years = calculateYears(contributions);
68
+ const dateRange = {
69
+ start: contributions[0]?.date ?? "",
70
+ end: contributions[contributions.length - 1]?.date ?? "",
71
+ };
72
+ return {
73
+ meta: {
74
+ generatedAt: new Date().toISOString(),
75
+ version: VERSION,
76
+ dateRange,
77
+ },
78
+ summary,
79
+ years,
80
+ contributions,
81
+ };
82
+ }
83
+ /**
84
+ * Collect messages from all enabled sources
85
+ */
86
+ function collectMessages(options, fetcher) {
87
+ const messages = [];
88
+ const enabledSources = getEnabledSources(options);
89
+ // OpenCode
90
+ if (enabledSources.includes("opencode")) {
91
+ const openCodeMessages = parseOpenCodeMessages();
92
+ for (const msg of openCodeMessages) {
93
+ const pricing = fetcher.getModelPricing(msg.modelId);
94
+ const cost = pricing
95
+ ? fetcher.calculateCost({
96
+ input: msg.tokens.input,
97
+ output: msg.tokens.output,
98
+ reasoning: msg.tokens.reasoning,
99
+ cacheRead: msg.tokens.cacheRead,
100
+ cacheWrite: msg.tokens.cacheWrite,
101
+ }, pricing)
102
+ : 0;
103
+ messages.push({
104
+ source: "opencode",
105
+ modelId: msg.modelId,
106
+ providerId: msg.providerId,
107
+ timestamp: msg.timestamp,
108
+ tokens: msg.tokens,
109
+ cost,
110
+ });
111
+ }
112
+ }
113
+ // Claude Code
114
+ if (enabledSources.includes("claude")) {
115
+ const claudeMessages = parseClaudeCodeMessages();
116
+ for (const msg of claudeMessages) {
117
+ const pricing = fetcher.getModelPricing(msg.modelId);
118
+ const cost = pricing
119
+ ? fetcher.calculateCost({
120
+ input: msg.tokens.input,
121
+ output: msg.tokens.output,
122
+ cacheRead: msg.tokens.cacheRead,
123
+ cacheWrite: msg.tokens.cacheWrite,
124
+ }, pricing)
125
+ : 0;
126
+ messages.push({
127
+ source: "claude",
128
+ modelId: msg.modelId,
129
+ providerId: msg.providerId,
130
+ timestamp: msg.timestamp,
131
+ tokens: msg.tokens,
132
+ cost,
133
+ });
134
+ }
135
+ }
136
+ // Codex
137
+ if (enabledSources.includes("codex")) {
138
+ const codexMessages = parseCodexMessages();
139
+ for (const msg of codexMessages) {
140
+ const pricing = fetcher.getModelPricing(msg.modelId);
141
+ const cost = pricing
142
+ ? fetcher.calculateCost({
143
+ input: msg.tokens.input,
144
+ output: msg.tokens.output,
145
+ cacheRead: msg.tokens.cacheRead,
146
+ cacheWrite: msg.tokens.cacheWrite,
147
+ }, pricing)
148
+ : 0;
149
+ messages.push({
150
+ source: "codex",
151
+ modelId: msg.modelId,
152
+ providerId: msg.providerId,
153
+ timestamp: msg.timestamp,
154
+ tokens: msg.tokens,
155
+ cost,
156
+ });
157
+ }
158
+ }
159
+ // Gemini
160
+ if (enabledSources.includes("gemini")) {
161
+ const geminiMessages = parseGeminiMessages();
162
+ for (const msg of geminiMessages) {
163
+ const pricing = fetcher.getModelPricing(msg.modelId);
164
+ // Gemini: thoughts/reasoning count as output for billing
165
+ const cost = pricing
166
+ ? fetcher.calculateCost({
167
+ input: msg.tokens.input,
168
+ output: msg.tokens.output + msg.tokens.reasoning,
169
+ cacheRead: 0, // Gemini cached tokens are free
170
+ cacheWrite: 0,
171
+ }, pricing)
172
+ : 0;
173
+ messages.push({
174
+ source: "gemini",
175
+ modelId: msg.modelId,
176
+ providerId: msg.providerId,
177
+ timestamp: msg.timestamp,
178
+ tokens: msg.tokens,
179
+ cost,
180
+ });
181
+ }
182
+ }
183
+ return messages;
184
+ }
185
+ /**
186
+ * Get list of enabled sources based on options
187
+ */
188
+ function getEnabledSources(options) {
189
+ if (options.sources && options.sources.length > 0) {
190
+ return options.sources;
191
+ }
192
+ return ["opencode", "claude", "codex", "gemini"];
193
+ }
194
+ /**
195
+ * Filter messages by date range
196
+ */
197
+ function filterMessagesByDate(messages, options) {
198
+ let filtered = messages;
199
+ // Filter by year
200
+ if (options.year) {
201
+ const yearStart = new Date(`${options.year}-01-01`).getTime();
202
+ const yearEnd = new Date(`${options.year}-12-31T23:59:59.999`).getTime();
203
+ filtered = filtered.filter((m) => m.timestamp >= yearStart && m.timestamp <= yearEnd);
204
+ }
205
+ // Filter by since
206
+ if (options.since) {
207
+ const sinceTime = new Date(options.since).getTime();
208
+ filtered = filtered.filter((m) => m.timestamp >= sinceTime);
209
+ }
210
+ // Filter by until
211
+ if (options.until) {
212
+ const untilTime = new Date(`${options.until}T23:59:59.999`).getTime();
213
+ filtered = filtered.filter((m) => m.timestamp <= untilTime);
214
+ }
215
+ return filtered;
216
+ }
217
+ /**
218
+ * Aggregate messages by date
219
+ */
220
+ function aggregateByDate(messages, _fetcher) {
221
+ const dailyMap = new Map();
222
+ for (const msg of messages) {
223
+ const dateKey = format(new Date(msg.timestamp), "yyyy-MM-dd");
224
+ let daily = dailyMap.get(dateKey);
225
+ if (!daily) {
226
+ daily = createEmptyDailyContribution(dateKey);
227
+ dailyMap.set(dateKey, daily);
228
+ }
229
+ // Update totals
230
+ const totalTokens = msg.tokens.input +
231
+ msg.tokens.output +
232
+ msg.tokens.cacheRead +
233
+ msg.tokens.cacheWrite +
234
+ msg.tokens.reasoning;
235
+ daily.totals.tokens += totalTokens;
236
+ daily.totals.cost += msg.cost;
237
+ daily.totals.messages += 1;
238
+ // Update token breakdown
239
+ daily.tokenBreakdown.input += msg.tokens.input;
240
+ daily.tokenBreakdown.output += msg.tokens.output;
241
+ daily.tokenBreakdown.cacheRead += msg.tokens.cacheRead;
242
+ daily.tokenBreakdown.cacheWrite += msg.tokens.cacheWrite;
243
+ daily.tokenBreakdown.reasoning += msg.tokens.reasoning;
244
+ // Update source contributions
245
+ let sourceContrib = daily.sources.find((s) => s.source === msg.source && s.modelId === msg.modelId);
246
+ if (!sourceContrib) {
247
+ sourceContrib = {
248
+ source: msg.source,
249
+ modelId: msg.modelId,
250
+ providerId: msg.providerId,
251
+ tokens: {
252
+ input: 0,
253
+ output: 0,
254
+ cacheRead: 0,
255
+ cacheWrite: 0,
256
+ reasoning: 0,
257
+ },
258
+ cost: 0,
259
+ messages: 0,
260
+ };
261
+ daily.sources.push(sourceContrib);
262
+ }
263
+ sourceContrib.tokens.input += msg.tokens.input;
264
+ sourceContrib.tokens.output += msg.tokens.output;
265
+ sourceContrib.tokens.cacheRead += msg.tokens.cacheRead;
266
+ sourceContrib.tokens.cacheWrite += msg.tokens.cacheWrite;
267
+ sourceContrib.tokens.reasoning += msg.tokens.reasoning;
268
+ sourceContrib.cost += msg.cost;
269
+ sourceContrib.messages += 1;
270
+ }
271
+ return dailyMap;
272
+ }
273
+ /**
274
+ * Create empty daily contribution
275
+ */
276
+ function createEmptyDailyContribution(date) {
277
+ return {
278
+ date,
279
+ totals: {
280
+ tokens: 0,
281
+ cost: 0,
282
+ messages: 0,
283
+ },
284
+ intensity: 0,
285
+ tokenBreakdown: {
286
+ input: 0,
287
+ output: 0,
288
+ cacheRead: 0,
289
+ cacheWrite: 0,
290
+ reasoning: 0,
291
+ },
292
+ sources: [],
293
+ };
294
+ }
295
+ /**
296
+ * Calculate intensity for all contributions based on COST
297
+ */
298
+ function calculateAllIntensities(contributions) {
299
+ if (contributions.length === 0)
300
+ return contributions;
301
+ // Find max cost for intensity calculation
302
+ const maxCost = Math.max(...contributions.map((c) => c.totals.cost));
303
+ return contributions.map((c) => ({
304
+ ...c,
305
+ intensity: calculateIntensity(c.totals.cost, maxCost),
306
+ }));
307
+ }
308
+ /**
309
+ * Calculate intensity grade based on cost ratio
310
+ * 0 = no activity, 4 = highest
311
+ */
312
+ function calculateIntensity(cost, maxCost) {
313
+ if (cost === 0 || maxCost === 0)
314
+ return 0;
315
+ const ratio = cost / maxCost;
316
+ if (ratio >= 0.75)
317
+ return 4;
318
+ if (ratio >= 0.5)
319
+ return 3;
320
+ if (ratio >= 0.25)
321
+ return 2;
322
+ return 1;
323
+ }
324
+ /**
325
+ * Calculate summary statistics
326
+ */
327
+ function calculateSummary(contributions) {
328
+ const totalTokens = contributions.reduce((sum, c) => sum + c.totals.tokens, 0);
329
+ const totalCost = contributions.reduce((sum, c) => sum + c.totals.cost, 0);
330
+ const activeDays = contributions.filter((c) => c.totals.cost > 0).length;
331
+ const maxCostInSingleDay = Math.max(...contributions.map((c) => c.totals.cost), 0);
332
+ // Collect unique sources and models
333
+ const sourcesSet = new Set();
334
+ const modelsSet = new Set();
335
+ for (const c of contributions) {
336
+ for (const s of c.sources) {
337
+ sourcesSet.add(s.source);
338
+ modelsSet.add(s.modelId);
339
+ }
340
+ }
341
+ return {
342
+ totalTokens,
343
+ totalCost,
344
+ totalDays: contributions.length,
345
+ activeDays,
346
+ averagePerDay: activeDays > 0 ? totalCost / activeDays : 0,
347
+ maxCostInSingleDay,
348
+ sources: Array.from(sourcesSet),
349
+ models: Array.from(modelsSet),
350
+ };
351
+ }
352
+ /**
353
+ * Calculate year summaries
354
+ */
355
+ function calculateYears(contributions) {
356
+ const yearsMap = new Map();
357
+ for (const c of contributions) {
358
+ const year = c.date.substring(0, 4);
359
+ let yearData = yearsMap.get(year);
360
+ if (!yearData) {
361
+ yearData = { tokens: 0, cost: 0, start: c.date, end: c.date };
362
+ yearsMap.set(year, yearData);
363
+ }
364
+ yearData.tokens += c.totals.tokens;
365
+ yearData.cost += c.totals.cost;
366
+ if (c.date < yearData.start)
367
+ yearData.start = c.date;
368
+ if (c.date > yearData.end)
369
+ yearData.end = c.date;
370
+ }
371
+ return Array.from(yearsMap.entries())
372
+ .map(([year, data]) => ({
373
+ year,
374
+ totalTokens: data.tokens,
375
+ totalCost: data.cost,
376
+ range: {
377
+ start: data.start,
378
+ end: data.end,
379
+ },
380
+ }))
381
+ .sort((a, b) => a.year.localeCompare(b.year));
382
+ }
383
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Native Runner - Subprocess for non-blocking native Rust calls
4
+ *
5
+ * This script runs in a separate process to keep the main event loop free
6
+ * for UI rendering (e.g., spinner animation).
7
+ *
8
+ * Communication: stdin (JSON input) -> stdout (JSON output)
9
+ * No temp files needed - pure Unix IPC pattern.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=native-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-runner.d.ts","sourceRoot":"","sources":["../src/native-runner.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}