@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.
- package/dist/auth.d.ts +17 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +162 -0
- package/dist/auth.js.map +1 -0
- package/dist/claudecode.d.ts +39 -0
- package/dist/claudecode.d.ts.map +1 -0
- package/dist/claudecode.js +375 -0
- package/dist/claudecode.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +761 -0
- package/dist/cli.js.map +1 -0
- package/dist/credentials.d.ts +36 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +109 -0
- package/dist/credentials.js.map +1 -0
- package/dist/cursor.d.ts +132 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +432 -0
- package/dist/cursor.js.map +1 -0
- package/dist/gemini.d.ts +36 -0
- package/dist/gemini.d.ts.map +1 -0
- package/dist/gemini.js +125 -0
- package/dist/gemini.js.map +1 -0
- package/dist/graph-types.d.ts +152 -0
- package/dist/graph-types.d.ts.map +1 -0
- package/dist/graph-types.js +6 -0
- package/dist/graph-types.js.map +1 -0
- package/dist/graph.d.ts +29 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +383 -0
- package/dist/graph.js.map +1 -0
- package/dist/native-runner.d.ts +12 -0
- package/dist/native-runner.d.ts.map +1 -0
- package/dist/native-runner.js +89 -0
- package/dist/native-runner.js.map +1 -0
- package/dist/native.d.ts +116 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +359 -0
- package/dist/native.js.map +1 -0
- package/dist/opencode.d.ts +40 -0
- package/dist/opencode.d.ts.map +1 -0
- package/dist/opencode.js +69 -0
- package/dist/opencode.js.map +1 -0
- package/dist/pricing.d.ts +58 -0
- package/dist/pricing.d.ts.map +1 -0
- package/dist/pricing.js +232 -0
- package/dist/pricing.js.map +1 -0
- package/dist/sessions/claudecode.d.ts +8 -0
- package/dist/sessions/claudecode.d.ts.map +1 -0
- package/dist/sessions/claudecode.js +84 -0
- package/dist/sessions/claudecode.js.map +1 -0
- package/dist/sessions/codex.d.ts +8 -0
- package/dist/sessions/codex.d.ts.map +1 -0
- package/dist/sessions/codex.js +158 -0
- package/dist/sessions/codex.js.map +1 -0
- package/dist/sessions/gemini.d.ts +8 -0
- package/dist/sessions/gemini.d.ts.map +1 -0
- package/dist/sessions/gemini.js +66 -0
- package/dist/sessions/gemini.js.map +1 -0
- package/dist/sessions/index.d.ts +32 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +96 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/opencode.d.ts +8 -0
- package/dist/sessions/opencode.d.ts.map +1 -0
- package/dist/sessions/opencode.js +54 -0
- package/dist/sessions/opencode.js.map +1 -0
- package/dist/sessions/reports.d.ts +58 -0
- package/dist/sessions/reports.d.ts.map +1 -0
- package/dist/sessions/reports.js +337 -0
- package/dist/sessions/reports.js.map +1 -0
- package/dist/sessions/types.d.ts +30 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +29 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/spinner.d.ts +75 -0
- package/dist/spinner.d.ts.map +1 -0
- package/dist/spinner.js +203 -0
- package/dist/spinner.js.map +1 -0
- package/dist/submit.d.ts +21 -0
- package/dist/submit.d.ts.map +1 -0
- package/dist/submit.js +128 -0
- package/dist/submit.js.map +1 -0
- package/dist/table.d.ts +42 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +181 -0
- package/dist/table.js.map +1 -0
- package/dist/test-selection.d.ts +2 -0
- package/dist/test-selection.d.ts.map +1 -0
- package/dist/test-selection.jsx +32 -0
- package/dist/test-selection.jsx.map +1 -0
- package/dist/tui/App.d.ts +4 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +167 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/App.jsx +281 -0
- package/dist/tui/App.jsx.map +1 -0
- package/dist/tui/components/BarChart.d.ts +17 -0
- package/dist/tui/components/BarChart.d.ts.map +1 -0
- package/dist/tui/components/BarChart.js +63 -0
- package/dist/tui/components/BarChart.js.map +1 -0
- package/dist/tui/components/BarChart.jsx +163 -0
- package/dist/tui/components/BarChart.jsx.map +1 -0
- package/dist/tui/components/DailyView.d.ts +13 -0
- package/dist/tui/components/DailyView.d.ts.map +1 -0
- package/dist/tui/components/DailyView.js +32 -0
- package/dist/tui/components/DailyView.js.map +1 -0
- package/dist/tui/components/DailyView.jsx +84 -0
- package/dist/tui/components/DailyView.jsx.map +1 -0
- package/dist/tui/components/DateBreakdownPanel.d.ts +7 -0
- package/dist/tui/components/DateBreakdownPanel.d.ts.map +1 -0
- package/dist/tui/components/DateBreakdownPanel.jsx +61 -0
- package/dist/tui/components/DateBreakdownPanel.jsx.map +1 -0
- package/dist/tui/components/Footer.d.ts +26 -0
- package/dist/tui/components/Footer.d.ts.map +1 -0
- package/dist/tui/components/Footer.js +15 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/Footer.jsx +158 -0
- package/dist/tui/components/Footer.jsx.map +1 -0
- package/dist/tui/components/Header.d.ts +9 -0
- package/dist/tui/components/Header.d.ts.map +1 -0
- package/dist/tui/components/Header.js +12 -0
- package/dist/tui/components/Header.js.map +1 -0
- package/dist/tui/components/Header.jsx +38 -0
- package/dist/tui/components/Header.jsx.map +1 -0
- package/dist/tui/components/Legend.d.ts +7 -0
- package/dist/tui/components/Legend.d.ts.map +1 -0
- package/dist/tui/components/Legend.js +9 -0
- package/dist/tui/components/Legend.js.map +1 -0
- package/dist/tui/components/Legend.jsx +27 -0
- package/dist/tui/components/Legend.jsx.map +1 -0
- package/dist/tui/components/LoadingSpinner.d.ts +8 -0
- package/dist/tui/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/tui/components/LoadingSpinner.jsx +62 -0
- package/dist/tui/components/LoadingSpinner.jsx.map +1 -0
- package/dist/tui/components/ModelListItem.d.ts +11 -0
- package/dist/tui/components/ModelListItem.d.ts.map +1 -0
- package/dist/tui/components/ModelListItem.js +18 -0
- package/dist/tui/components/ModelListItem.js.map +1 -0
- package/dist/tui/components/ModelListItem.jsx +17 -0
- package/dist/tui/components/ModelListItem.jsx.map +1 -0
- package/dist/tui/components/ModelRow.d.ts +13 -0
- package/dist/tui/components/ModelRow.d.ts.map +1 -0
- package/dist/tui/components/ModelRow.jsx +28 -0
- package/dist/tui/components/ModelRow.jsx.map +1 -0
- package/dist/tui/components/ModelView.d.ts +13 -0
- package/dist/tui/components/ModelView.d.ts.map +1 -0
- package/dist/tui/components/ModelView.js +34 -0
- package/dist/tui/components/ModelView.js.map +1 -0
- package/dist/tui/components/ModelView.jsx +111 -0
- package/dist/tui/components/ModelView.jsx.map +1 -0
- package/dist/tui/components/OverviewView.d.ts +14 -0
- package/dist/tui/components/OverviewView.d.ts.map +1 -0
- package/dist/tui/components/OverviewView.js +24 -0
- package/dist/tui/components/OverviewView.js.map +1 -0
- package/dist/tui/components/OverviewView.jsx +79 -0
- package/dist/tui/components/OverviewView.jsx.map +1 -0
- package/dist/tui/components/StatsView.d.ts +12 -0
- package/dist/tui/components/StatsView.d.ts.map +1 -0
- package/dist/tui/components/StatsView.js +43 -0
- package/dist/tui/components/StatsView.js.map +1 -0
- package/dist/tui/components/StatsView.jsx +180 -0
- package/dist/tui/components/StatsView.jsx.map +1 -0
- package/dist/tui/components/TokenBreakdown.d.ts +14 -0
- package/dist/tui/components/TokenBreakdown.d.ts.map +1 -0
- package/dist/tui/components/TokenBreakdown.jsx +27 -0
- package/dist/tui/components/TokenBreakdown.jsx.map +1 -0
- package/dist/tui/components/index.d.ts +16 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +13 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/config/settings.d.ts +12 -0
- package/dist/tui/config/settings.d.ts.map +1 -0
- package/dist/tui/config/settings.js +105 -0
- package/dist/tui/config/settings.js.map +1 -0
- package/dist/tui/config/themes.d.ts +15 -0
- package/dist/tui/config/themes.d.ts.map +1 -0
- package/dist/tui/config/themes.js +82 -0
- package/dist/tui/config/themes.js.map +1 -0
- package/dist/tui/hooks/useData.d.ts +17 -0
- package/dist/tui/hooks/useData.d.ts.map +1 -0
- package/dist/tui/hooks/useData.js +430 -0
- package/dist/tui/hooks/useData.js.map +1 -0
- package/dist/tui/index.d.ts +4 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/index.jsx +35 -0
- package/dist/tui/index.jsx.map +1 -0
- package/dist/tui/types/index.d.ts +133 -0
- package/dist/tui/types/index.d.ts.map +1 -0
- package/dist/tui/types/index.js +21 -0
- package/dist/tui/types/index.js.map +1 -0
- package/dist/tui/utils/cleanup.d.ts +22 -0
- package/dist/tui/utils/cleanup.d.ts.map +1 -0
- package/dist/tui/utils/cleanup.js +59 -0
- package/dist/tui/utils/cleanup.js.map +1 -0
- package/dist/tui/utils/colors.d.ts +18 -0
- package/dist/tui/utils/colors.d.ts.map +1 -0
- package/dist/tui/utils/colors.js +55 -0
- package/dist/tui/utils/colors.js.map +1 -0
- package/dist/tui/utils/format.d.ts +7 -0
- package/dist/tui/utils/format.d.ts.map +1 -0
- package/dist/tui/utils/format.js +45 -0
- package/dist/tui/utils/format.js.map +1 -0
- package/dist/tui/utils/responsive.d.ts +5 -0
- package/dist/tui/utils/responsive.d.ts.map +1 -0
- package/dist/tui/utils/responsive.js +5 -0
- package/dist/tui/utils/responsive.js.map +1 -0
- 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
|
package/dist/auth.js.map
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|