@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
package/dist/auth.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Tokscale CLI Authentication Commands
3
+ * Handles login, logout, and whoami commands
4
+ */
5
+ /**
6
+ * Login command - initiates device flow authentication
7
+ */
8
+ export declare function login(): Promise<void>;
9
+ /**
10
+ * Logout command - clears stored credentials
11
+ */
12
+ export declare function logout(): Promise<void>;
13
+ /**
14
+ * Whoami command - displays current user info
15
+ */
16
+ export declare function whoami(): Promise<void>;
17
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA4F3C;AAED;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB5C;AAED;;GAEG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAa5C"}
package/dist/auth.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Tokscale CLI Authentication Commands
3
+ * Handles login, logout, and whoami commands
4
+ */
5
+ import pc from "picocolors";
6
+ import * as os from "node:os";
7
+ import { saveCredentials, loadCredentials, clearCredentials, getApiBaseUrl, } from "./credentials.js";
8
+ const MAX_POLL_ATTEMPTS = 180; // 15 minutes max
9
+ /**
10
+ * Login command - initiates device flow authentication
11
+ */
12
+ export async function login() {
13
+ const credentials = loadCredentials();
14
+ if (credentials) {
15
+ console.log(pc.yellow(`\n Already logged in as ${pc.bold(credentials.username)}`));
16
+ console.log(pc.gray(" Run 'tokscale logout' to sign out first.\n"));
17
+ return;
18
+ }
19
+ const baseUrl = getApiBaseUrl();
20
+ console.log(pc.cyan("\n Tokscale - Login\n"));
21
+ // Step 1: Request device code
22
+ console.log(pc.gray(" Requesting authorization code..."));
23
+ let deviceCodeData;
24
+ try {
25
+ const response = await fetch(`${baseUrl}/api/auth/device`, {
26
+ method: "POST",
27
+ headers: { "Content-Type": "application/json" },
28
+ body: JSON.stringify({ deviceName: getDeviceName() }),
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`Server returned ${response.status}`);
32
+ }
33
+ deviceCodeData = await response.json();
34
+ }
35
+ catch (error) {
36
+ console.error(pc.red(`\n Error: Failed to connect to server.`));
37
+ console.error(pc.gray(` ${error.message}\n`));
38
+ process.exit(1);
39
+ }
40
+ // Step 2: Display instructions
41
+ console.log();
42
+ console.log(pc.white(" Open this URL in your browser:"));
43
+ console.log(pc.cyan(` ${deviceCodeData.verificationUrl}\n`));
44
+ console.log(pc.white(" Enter this code:"));
45
+ console.log(pc.bold(pc.green(` ${deviceCodeData.userCode}\n`)));
46
+ // Try to open browser automatically
47
+ await openBrowser(deviceCodeData.verificationUrl);
48
+ console.log(pc.gray(" Waiting for authorization..."));
49
+ // Step 3: Poll for completion
50
+ let attempts = 0;
51
+ const pollInterval = (deviceCodeData.interval || 5) * 1000;
52
+ while (attempts < MAX_POLL_ATTEMPTS) {
53
+ await sleep(pollInterval);
54
+ attempts++;
55
+ try {
56
+ const response = await fetch(`${baseUrl}/api/auth/device/poll`, {
57
+ method: "POST",
58
+ headers: { "Content-Type": "application/json" },
59
+ body: JSON.stringify({ deviceCode: deviceCodeData.deviceCode }),
60
+ });
61
+ const data = await response.json();
62
+ if (data.status === "complete" && data.token && data.user) {
63
+ // Success!
64
+ saveCredentials({
65
+ token: data.token,
66
+ username: data.user.username,
67
+ avatarUrl: data.user.avatarUrl,
68
+ createdAt: new Date().toISOString(),
69
+ });
70
+ console.log(pc.green(`\n Success! Logged in as ${pc.bold(data.user.username)}`));
71
+ console.log(pc.gray(" You can now use 'tokscale submit' to share your usage.\n"));
72
+ return;
73
+ }
74
+ if (data.status === "expired") {
75
+ console.error(pc.red("\n Authorization code expired. Please try again.\n"));
76
+ process.exit(1);
77
+ }
78
+ // Still pending - show a dot to indicate progress
79
+ process.stdout.write(pc.gray("."));
80
+ }
81
+ catch (error) {
82
+ // Network error - continue polling
83
+ process.stdout.write(pc.red("!"));
84
+ }
85
+ }
86
+ console.error(pc.red("\n\n Timeout: Authorization took too long. Please try again.\n"));
87
+ process.exit(1);
88
+ }
89
+ /**
90
+ * Logout command - clears stored credentials
91
+ */
92
+ export async function logout() {
93
+ const credentials = loadCredentials();
94
+ if (!credentials) {
95
+ console.log(pc.yellow("\n Not logged in.\n"));
96
+ return;
97
+ }
98
+ const username = credentials.username;
99
+ const cleared = clearCredentials();
100
+ if (cleared) {
101
+ console.log(pc.green(`\n Logged out from ${pc.bold(username)}\n`));
102
+ }
103
+ else {
104
+ console.error(pc.red("\n Failed to clear credentials.\n"));
105
+ process.exit(1);
106
+ }
107
+ }
108
+ /**
109
+ * Whoami command - displays current user info
110
+ */
111
+ export async function whoami() {
112
+ const credentials = loadCredentials();
113
+ if (!credentials) {
114
+ console.log(pc.yellow("\n Not logged in."));
115
+ console.log(pc.gray(" Run 'tokscale login' to authenticate.\n"));
116
+ return;
117
+ }
118
+ console.log(pc.cyan("\n Tokscale - Account Info\n"));
119
+ console.log(pc.white(` Username: ${pc.bold(credentials.username)}`));
120
+ console.log(pc.gray(` Logged in: ${new Date(credentials.createdAt).toLocaleDateString()}`));
121
+ console.log();
122
+ }
123
+ /**
124
+ * Get a device name for the token
125
+ */
126
+ function getDeviceName() {
127
+ return `CLI on ${os.hostname()}`;
128
+ }
129
+ /**
130
+ * Sleep helper
131
+ */
132
+ function sleep(ms) {
133
+ return new Promise((resolve) => setTimeout(resolve, ms));
134
+ }
135
+ /**
136
+ * Try to open browser automatically
137
+ */
138
+ async function openBrowser(url) {
139
+ try {
140
+ const { exec } = await import("node:child_process");
141
+ const platform = process.platform;
142
+ let command;
143
+ if (platform === "darwin") {
144
+ command = `open "${url}"`;
145
+ }
146
+ else if (platform === "win32") {
147
+ command = `start "" "${url}"`;
148
+ }
149
+ else {
150
+ command = `xdg-open "${url}"`;
151
+ }
152
+ exec(command, (error) => {
153
+ if (error) {
154
+ // Silent fail - user can still open manually
155
+ }
156
+ });
157
+ }
158
+ catch {
159
+ // Silent fail
160
+ }
161
+ }
162
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Claude Code (Anthropic official) and Codex CLI data readers
3
+ */
4
+ export interface ClaudeCodeUsageData {
5
+ source: "claude" | "codex";
6
+ model: string;
7
+ messageCount: number;
8
+ input: number;
9
+ output: number;
10
+ cacheRead: number;
11
+ cacheWrite: number;
12
+ }
13
+ /**
14
+ * Individual message with timestamp for graph generation
15
+ */
16
+ export interface ClaudeCodeMessageWithTimestamp {
17
+ source: "claude" | "codex";
18
+ model: string;
19
+ timestamp: number;
20
+ tokens: {
21
+ input: number;
22
+ output: number;
23
+ cacheRead: number;
24
+ cacheWrite: number;
25
+ };
26
+ }
27
+ export declare function getClaudeCodeProjectsPath(): string;
28
+ export declare function readClaudeCodeSessions(): ClaudeCodeUsageData[];
29
+ /**
30
+ * Read Claude Code messages with timestamp for graph generation
31
+ */
32
+ export declare function readClaudeCodeMessagesWithTimestamp(): ClaudeCodeMessageWithTimestamp[];
33
+ export declare function getCodexSessionsPath(): string;
34
+ export declare function readCodexSessions(): ClaudeCodeUsageData[];
35
+ /**
36
+ * Read Codex messages with timestamp for graph generation
37
+ */
38
+ export declare function readCodexMessagesWithTimestamp(): ClaudeCodeMessageWithTimestamp[];
39
+ //# sourceMappingURL=claudecode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudecode.d.ts","sourceRoot":"","sources":["../src/claudecode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAMD,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,EAAE,CA0D9D;AAED;;GAEG;AACH,wBAAgB,mCAAmC,IAAI,8BAA8B,EAAE,CAqDtF;AA2BD,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED,wBAAgB,iBAAiB,IAAI,mBAAmB,EAAE,CAsHzD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,8BAA8B,EAAE,CAwHjF"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Claude Code (Anthropic official) and Codex CLI data readers
3
+ */
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+ import * as os from "node:os";
7
+ // ============================================================================
8
+ // Claude Code (Anthropic official) - ~/.claude/projects/
9
+ // ============================================================================
10
+ export function getClaudeCodeProjectsPath() {
11
+ return path.join(os.homedir(), ".claude", "projects");
12
+ }
13
+ export function readClaudeCodeSessions() {
14
+ const projectsPath = getClaudeCodeProjectsPath();
15
+ if (!fs.existsSync(projectsPath)) {
16
+ return [];
17
+ }
18
+ const modelUsage = new Map();
19
+ const files = findJsonlFiles(projectsPath);
20
+ for (const file of files) {
21
+ try {
22
+ const content = fs.readFileSync(file, "utf-8");
23
+ const lines = content.split(/\r?\n/);
24
+ for (const line of lines) {
25
+ const trimmed = line.trim();
26
+ if (!trimmed)
27
+ continue;
28
+ try {
29
+ const entry = JSON.parse(trimmed);
30
+ // Process assistant messages with usage data
31
+ if (entry.type === "assistant" && entry.message?.usage) {
32
+ const model = entry.message.model || "unknown";
33
+ const usage = entry.message.usage;
34
+ // Get or create usage data for this model
35
+ let data = modelUsage.get(model);
36
+ if (!data) {
37
+ data = {
38
+ source: "claude",
39
+ model,
40
+ messageCount: 0,
41
+ input: 0,
42
+ output: 0,
43
+ cacheRead: 0,
44
+ cacheWrite: 0,
45
+ };
46
+ modelUsage.set(model, data);
47
+ }
48
+ data.messageCount++;
49
+ data.input += usage.input_tokens || 0;
50
+ data.output += usage.output_tokens || 0;
51
+ data.cacheRead += usage.cache_read_input_tokens || 0;
52
+ data.cacheWrite += usage.cache_creation_input_tokens || 0;
53
+ }
54
+ }
55
+ catch {
56
+ // Skip malformed lines
57
+ }
58
+ }
59
+ }
60
+ catch {
61
+ // Skip unreadable files
62
+ }
63
+ }
64
+ return Array.from(modelUsage.values());
65
+ }
66
+ /**
67
+ * Read Claude Code messages with timestamp for graph generation
68
+ */
69
+ export function readClaudeCodeMessagesWithTimestamp() {
70
+ const projectsPath = getClaudeCodeProjectsPath();
71
+ if (!fs.existsSync(projectsPath)) {
72
+ return [];
73
+ }
74
+ const messages = [];
75
+ const files = findJsonlFiles(projectsPath);
76
+ for (const file of files) {
77
+ try {
78
+ const content = fs.readFileSync(file, "utf-8");
79
+ const lines = content.split(/\r?\n/);
80
+ for (const line of lines) {
81
+ const trimmed = line.trim();
82
+ if (!trimmed)
83
+ continue;
84
+ try {
85
+ const entry = JSON.parse(trimmed);
86
+ // Process assistant messages with usage data and timestamp
87
+ if (entry.type === "assistant" && entry.message?.usage && entry.timestamp) {
88
+ const model = entry.message.model || "unknown";
89
+ const usage = entry.message.usage;
90
+ const timestamp = new Date(entry.timestamp).getTime();
91
+ // Skip invalid timestamps
92
+ if (isNaN(timestamp))
93
+ continue;
94
+ messages.push({
95
+ source: "claude",
96
+ model,
97
+ timestamp,
98
+ tokens: {
99
+ input: usage.input_tokens || 0,
100
+ output: usage.output_tokens || 0,
101
+ cacheRead: usage.cache_read_input_tokens || 0,
102
+ cacheWrite: usage.cache_creation_input_tokens || 0,
103
+ },
104
+ });
105
+ }
106
+ }
107
+ catch {
108
+ // Skip malformed lines
109
+ }
110
+ }
111
+ }
112
+ catch {
113
+ // Skip unreadable files
114
+ }
115
+ }
116
+ return messages;
117
+ }
118
+ export function getCodexSessionsPath() {
119
+ const codexHome = process.env.CODEX_HOME || path.join(os.homedir(), ".codex");
120
+ return path.join(codexHome, "sessions");
121
+ }
122
+ export function readCodexSessions() {
123
+ const sessionsPath = getCodexSessionsPath();
124
+ if (!fs.existsSync(sessionsPath)) {
125
+ return [];
126
+ }
127
+ const modelUsage = new Map();
128
+ const files = findJsonlFiles(sessionsPath);
129
+ for (const file of files) {
130
+ try {
131
+ const content = fs.readFileSync(file, "utf-8");
132
+ const lines = content.split(/\r?\n/);
133
+ let currentModel;
134
+ let previousTotals = null;
135
+ for (const line of lines) {
136
+ const trimmed = line.trim();
137
+ if (!trimmed)
138
+ continue;
139
+ try {
140
+ const entry = JSON.parse(trimmed);
141
+ // Extract model from turn_context
142
+ if (entry.type === "turn_context" && entry.payload) {
143
+ const model = extractModel(entry.payload);
144
+ if (model)
145
+ currentModel = model;
146
+ continue;
147
+ }
148
+ // Process token_count events
149
+ if (entry.type === "event_msg" && entry.payload?.type === "token_count") {
150
+ const info = entry.payload.info;
151
+ if (!info)
152
+ continue;
153
+ // Extract model from payload
154
+ const payloadModel = extractModel(entry.payload);
155
+ if (payloadModel)
156
+ currentModel = payloadModel;
157
+ const model = currentModel || "unknown";
158
+ // Get usage data
159
+ const lastUsage = info.last_token_usage;
160
+ const totalUsage = info.total_token_usage;
161
+ let delta = {
162
+ input: 0,
163
+ cached: 0,
164
+ output: 0,
165
+ };
166
+ if (lastUsage) {
167
+ delta = {
168
+ input: lastUsage.input_tokens || 0,
169
+ cached: lastUsage.cached_input_tokens || lastUsage.cache_read_input_tokens || 0,
170
+ output: lastUsage.output_tokens || 0,
171
+ };
172
+ }
173
+ else if (totalUsage && previousTotals) {
174
+ delta = {
175
+ input: Math.max((totalUsage.input_tokens || 0) - previousTotals.input, 0),
176
+ cached: Math.max((totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0) -
177
+ previousTotals.cached, 0),
178
+ output: Math.max((totalUsage.output_tokens || 0) - previousTotals.output, 0),
179
+ };
180
+ }
181
+ if (totalUsage) {
182
+ previousTotals = {
183
+ input: totalUsage.input_tokens || 0,
184
+ cached: totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0,
185
+ output: totalUsage.output_tokens || 0,
186
+ };
187
+ }
188
+ // Skip empty deltas
189
+ if (delta.input === 0 && delta.cached === 0 && delta.output === 0) {
190
+ continue;
191
+ }
192
+ // Aggregate by model
193
+ let usage = modelUsage.get(model);
194
+ if (!usage) {
195
+ usage = {
196
+ source: "codex",
197
+ model,
198
+ messageCount: 0,
199
+ input: 0,
200
+ output: 0,
201
+ cacheRead: 0,
202
+ cacheWrite: 0,
203
+ };
204
+ modelUsage.set(model, usage);
205
+ }
206
+ usage.messageCount++;
207
+ usage.input += delta.input;
208
+ usage.output += delta.output;
209
+ usage.cacheRead += delta.cached;
210
+ }
211
+ }
212
+ catch {
213
+ // Skip malformed lines
214
+ }
215
+ }
216
+ }
217
+ catch {
218
+ // Skip unreadable files
219
+ }
220
+ }
221
+ return Array.from(modelUsage.values());
222
+ }
223
+ /**
224
+ * Read Codex messages with timestamp for graph generation
225
+ */
226
+ export function readCodexMessagesWithTimestamp() {
227
+ const sessionsPath = getCodexSessionsPath();
228
+ if (!fs.existsSync(sessionsPath)) {
229
+ return [];
230
+ }
231
+ const messages = [];
232
+ const files = findJsonlFiles(sessionsPath);
233
+ for (const file of files) {
234
+ try {
235
+ const content = fs.readFileSync(file, "utf-8");
236
+ const lines = content.split(/\r?\n/);
237
+ let currentModel;
238
+ let previousTotals = null;
239
+ for (const line of lines) {
240
+ const trimmed = line.trim();
241
+ if (!trimmed)
242
+ continue;
243
+ try {
244
+ const entry = JSON.parse(trimmed);
245
+ // Extract model from turn_context
246
+ if (entry.type === "turn_context" && entry.payload) {
247
+ const model = extractModel(entry.payload);
248
+ if (model)
249
+ currentModel = model;
250
+ continue;
251
+ }
252
+ // Process token_count events with timestamp
253
+ if (entry.type === "event_msg" && entry.payload?.type === "token_count") {
254
+ const info = entry.payload.info;
255
+ if (!info)
256
+ continue;
257
+ // Extract model from payload
258
+ const payloadModel = extractModel(entry.payload);
259
+ if (payloadModel)
260
+ currentModel = payloadModel;
261
+ const model = currentModel || "unknown";
262
+ // Extract timestamp
263
+ const timestamp = entry.timestamp
264
+ ? new Date(entry.timestamp).getTime()
265
+ : entry.payload?.timestamp
266
+ ? new Date(entry.payload.timestamp).getTime()
267
+ : Date.now();
268
+ // Skip invalid timestamps
269
+ if (isNaN(timestamp))
270
+ continue;
271
+ // Get usage data
272
+ const lastUsage = info.last_token_usage;
273
+ const totalUsage = info.total_token_usage;
274
+ let delta = {
275
+ input: 0,
276
+ cached: 0,
277
+ output: 0,
278
+ };
279
+ if (lastUsage) {
280
+ delta = {
281
+ input: lastUsage.input_tokens || 0,
282
+ cached: lastUsage.cached_input_tokens || lastUsage.cache_read_input_tokens || 0,
283
+ output: lastUsage.output_tokens || 0,
284
+ };
285
+ }
286
+ else if (totalUsage && previousTotals) {
287
+ delta = {
288
+ input: Math.max((totalUsage.input_tokens || 0) - previousTotals.input, 0),
289
+ cached: Math.max((totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0) -
290
+ previousTotals.cached, 0),
291
+ output: Math.max((totalUsage.output_tokens || 0) - previousTotals.output, 0),
292
+ };
293
+ }
294
+ if (totalUsage) {
295
+ previousTotals = {
296
+ input: totalUsage.input_tokens || 0,
297
+ cached: totalUsage.cached_input_tokens || totalUsage.cache_read_input_tokens || 0,
298
+ output: totalUsage.output_tokens || 0,
299
+ };
300
+ }
301
+ // Skip empty deltas
302
+ if (delta.input === 0 && delta.cached === 0 && delta.output === 0) {
303
+ continue;
304
+ }
305
+ messages.push({
306
+ source: "codex",
307
+ model,
308
+ timestamp,
309
+ tokens: {
310
+ input: delta.input,
311
+ output: delta.output,
312
+ cacheRead: delta.cached,
313
+ cacheWrite: 0, // Codex doesn't track cache write
314
+ },
315
+ });
316
+ }
317
+ }
318
+ catch {
319
+ // Skip malformed lines
320
+ }
321
+ }
322
+ }
323
+ catch {
324
+ // Skip unreadable files
325
+ }
326
+ }
327
+ return messages;
328
+ }
329
+ // ============================================================================
330
+ // Utilities
331
+ // ============================================================================
332
+ function findJsonlFiles(dir) {
333
+ const files = [];
334
+ function walk(currentDir) {
335
+ try {
336
+ const entries = fs.readdirSync(currentDir, { withFileTypes: true });
337
+ for (const entry of entries) {
338
+ const fullPath = path.join(currentDir, entry.name);
339
+ if (entry.isDirectory()) {
340
+ walk(fullPath);
341
+ }
342
+ else if (entry.isFile() && entry.name.endsWith(".jsonl")) {
343
+ files.push(fullPath);
344
+ }
345
+ }
346
+ }
347
+ catch {
348
+ // Skip inaccessible directories
349
+ }
350
+ }
351
+ walk(dir);
352
+ return files;
353
+ }
354
+ function extractModel(payload) {
355
+ // Direct model field
356
+ if (typeof payload.model === "string" && payload.model.trim()) {
357
+ return payload.model.trim();
358
+ }
359
+ // model_name field
360
+ if (typeof payload.model_name === "string" && payload.model_name.trim()) {
361
+ return payload.model_name.trim();
362
+ }
363
+ // Nested in info
364
+ const info = payload.info;
365
+ if (info) {
366
+ if (typeof info.model === "string" && info.model.trim()) {
367
+ return info.model.trim();
368
+ }
369
+ if (typeof info.model_name === "string" && info.model_name.trim()) {
370
+ return info.model_name.trim();
371
+ }
372
+ }
373
+ return undefined;
374
+ }
375
+ //# sourceMappingURL=claudecode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudecode.js","sourceRoot":"","sources":["../src/claudecode.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tokscale CLI
4
+ * Display OpenCode, Claude Code, Codex, Gemini, and Cursor usage with dynamic width tables
5
+ *
6
+ * All heavy computation is done in the native Rust module.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}