@tokscale/cli 1.0.1 → 1.0.2
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/cli.js +0 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +192 -26
- package/dist/native.js.map +1 -1
- package/package.json +3 -3
- package/dist/claudecode.d.ts +0 -39
- package/dist/claudecode.d.ts.map +0 -1
- package/dist/claudecode.js +0 -375
- package/dist/claudecode.js.map +0 -1
- package/dist/gemini.d.ts +0 -36
- package/dist/gemini.d.ts.map +0 -1
- package/dist/gemini.js +0 -125
- package/dist/gemini.js.map +0 -1
- package/dist/opencode.d.ts +0 -40
- package/dist/opencode.d.ts.map +0 -1
- package/dist/opencode.js +0 -69
- package/dist/opencode.js.map +0 -1
- package/dist/test-selection.d.ts +0 -2
- package/dist/test-selection.d.ts.map +0 -1
- package/dist/test-selection.jsx +0 -32
- package/dist/test-selection.jsx.map +0 -1
- package/dist/tui/App.js +0 -167
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/components/BarChart.js +0 -63
- package/dist/tui/components/BarChart.js.map +0 -1
- package/dist/tui/components/DailyView.js +0 -32
- package/dist/tui/components/DailyView.js.map +0 -1
- package/dist/tui/components/Footer.js +0 -15
- package/dist/tui/components/Footer.js.map +0 -1
- package/dist/tui/components/Header.js +0 -12
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/Legend.js +0 -9
- package/dist/tui/components/Legend.js.map +0 -1
- package/dist/tui/components/ModelListItem.d.ts +0 -11
- package/dist/tui/components/ModelListItem.d.ts.map +0 -1
- package/dist/tui/components/ModelListItem.js +0 -18
- package/dist/tui/components/ModelListItem.js.map +0 -1
- package/dist/tui/components/ModelListItem.jsx +0 -17
- package/dist/tui/components/ModelListItem.jsx.map +0 -1
- package/dist/tui/components/ModelView.js +0 -34
- package/dist/tui/components/ModelView.js.map +0 -1
- package/dist/tui/components/OverviewView.js +0 -24
- package/dist/tui/components/OverviewView.js.map +0 -1
- package/dist/tui/components/StatsView.js +0 -43
- package/dist/tui/components/StatsView.js.map +0 -1
- package/dist/tui/index.js +0 -8
- package/dist/tui/index.js.map +0 -1
package/dist/claudecode.js
DELETED
|
@@ -1,375 +0,0 @@
|
|
|
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
|
package/dist/claudecode.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claudecode.js","sourceRoot":"","sources":["../src/claudecode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AA2B9B,+EAA+E;AAC/E,yDAAyD;AACzD,+EAA+E;AAE/E,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAC;IAEjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAElC,6CAA6C;oBAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;wBACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;wBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;wBAElC,0CAA0C;wBAC1C,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;4BACV,IAAI,GAAG;gCACL,MAAM,EAAE,QAAQ;gCAChB,KAAK;gCACL,YAAY,EAAE,CAAC;gCACf,KAAK,EAAE,CAAC;gCACR,MAAM,EAAE,CAAC;gCACT,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC;6BACd,CAAC;4BACF,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC9B,CAAC;wBAED,IAAI,CAAC,YAAY,EAAE,CAAC;wBACpB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;wBACtC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;wBACxC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;wBACrD,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mCAAmC;IACjD,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAC;IAEjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAElC,2DAA2D;oBAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;wBAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;wBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;wBAClC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;wBAEtD,0BAA0B;wBAC1B,IAAI,KAAK,CAAC,SAAS,CAAC;4BAAE,SAAS;wBAE/B,QAAQ,CAAC,IAAI,CAAC;4BACZ,MAAM,EAAE,QAAQ;4BAChB,KAAK;4BACL,SAAS;4BACT,MAAM,EAAE;gCACN,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;gCAC9B,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;gCAChC,SAAS,EAAE,KAAK,CAAC,uBAAuB,IAAI,CAAC;gCAC7C,UAAU,EAAE,KAAK,CAAC,2BAA2B,IAAI,CAAC;6BACnD;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AA2BD,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC1D,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,YAAgC,CAAC;YACrC,IAAI,cAAc,GAIP,IAAI,CAAC;YAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAElC,kCAAkC;oBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC1C,IAAI,KAAK;4BAAE,YAAY,GAAG,KAAK,CAAC;wBAChC,SAAS;oBACX,CAAC;oBAED,6BAA6B;oBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;wBACxE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAuC,CAAC;wBACnE,IAAI,CAAC,IAAI;4BAAE,SAAS;wBAEpB,6BAA6B;wBAC7B,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACjD,IAAI,YAAY;4BAAE,YAAY,GAAG,YAAY,CAAC;wBAE9C,MAAM,KAAK,GAAG,YAAY,IAAI,SAAS,CAAC;wBAExC,iBAAiB;wBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;wBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;wBAE1C,IAAI,KAAK,GAAG;4BACV,KAAK,EAAE,CAAC;4BACR,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;yBACV,CAAC;wBAEF,IAAI,SAAS,EAAE,CAAC;4BACd,KAAK,GAAG;gCACN,KAAK,EAAE,SAAS,CAAC,YAAY,IAAI,CAAC;gCAClC,MAAM,EAAE,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAAC,uBAAuB,IAAI,CAAC;gCAC/E,MAAM,EAAE,SAAS,CAAC,aAAa,IAAI,CAAC;6BACrC,CAAC;wBACJ,CAAC;6BAAM,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;4BACxC,KAAK,GAAG;gCACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;gCACzE,MAAM,EAAE,IAAI,CAAC,GAAG,CACd,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,uBAAuB,IAAI,CAAC,CAAC;oCACzE,cAAc,CAAC,MAAM,EACvB,CAAC,CACF;gCACD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;6BAC7E,CAAC;wBACJ,CAAC;wBAED,IAAI,UAAU,EAAE,CAAC;4BACf,cAAc,GAAG;gCACf,KAAK,EAAE,UAAU,CAAC,YAAY,IAAI,CAAC;gCACnC,MAAM,EAAE,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,uBAAuB,IAAI,CAAC;gCACjF,MAAM,EAAE,UAAU,CAAC,aAAa,IAAI,CAAC;6BACtC,CAAC;wBACJ,CAAC;wBAED,oBAAoB;wBACpB,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAClE,SAAS;wBACX,CAAC;wBAED,qBAAqB;wBACrB,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAClC,IAAI,CAAC,KAAK,EAAE,CAAC;4BACX,KAAK,GAAG;gCACN,MAAM,EAAE,OAAO;gCACf,KAAK;gCACL,YAAY,EAAE,CAAC;gCACf,KAAK,EAAE,CAAC;gCACR,MAAM,EAAE,CAAC;gCACT,SAAS,EAAE,CAAC;gCACZ,UAAU,EAAE,CAAC;6BACd,CAAC;4BACF,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC/B,CAAC;wBAED,KAAK,CAAC,YAAY,EAAE,CAAC;wBACrB,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;wBAC3B,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;wBAC7B,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,YAAgC,CAAC;YACrC,IAAI,cAAc,GAIP,IAAI,CAAC;YAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAElC,kCAAkC;oBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC1C,IAAI,KAAK;4BAAE,YAAY,GAAG,KAAK,CAAC;wBAChC,SAAS;oBACX,CAAC;oBAED,4CAA4C;oBAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;wBACxE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAuC,CAAC;wBACnE,IAAI,CAAC,IAAI;4BAAE,SAAS;wBAEpB,6BAA6B;wBAC7B,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBACjD,IAAI,YAAY;4BAAE,YAAY,GAAG,YAAY,CAAC;wBAE9C,MAAM,KAAK,GAAG,YAAY,IAAI,SAAS,CAAC;wBAExC,oBAAoB;wBACpB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;4BAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;4BACrC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS;gCAC1B,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;gCAC7C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;wBAEf,0BAA0B;wBAC1B,IAAI,KAAK,CAAC,SAAS,CAAC;4BAAE,SAAS;wBAE/B,iBAAiB;wBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;wBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;wBAE1C,IAAI,KAAK,GAAG;4BACV,KAAK,EAAE,CAAC;4BACR,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;yBACV,CAAC;wBAEF,IAAI,SAAS,EAAE,CAAC;4BACd,KAAK,GAAG;gCACN,KAAK,EAAE,SAAS,CAAC,YAAY,IAAI,CAAC;gCAClC,MAAM,EAAE,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAAC,uBAAuB,IAAI,CAAC;gCAC/E,MAAM,EAAE,SAAS,CAAC,aAAa,IAAI,CAAC;6BACrC,CAAC;wBACJ,CAAC;6BAAM,IAAI,UAAU,IAAI,cAAc,EAAE,CAAC;4BACxC,KAAK,GAAG;gCACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;gCACzE,MAAM,EAAE,IAAI,CAAC,GAAG,CACd,CAAC,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,uBAAuB,IAAI,CAAC,CAAC;oCACzE,cAAc,CAAC,MAAM,EACvB,CAAC,CACF;gCACD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;6BAC7E,CAAC;wBACJ,CAAC;wBAED,IAAI,UAAU,EAAE,CAAC;4BACf,cAAc,GAAG;gCACf,KAAK,EAAE,UAAU,CAAC,YAAY,IAAI,CAAC;gCACnC,MAAM,EAAE,UAAU,CAAC,mBAAmB,IAAI,UAAU,CAAC,uBAAuB,IAAI,CAAC;gCACjF,MAAM,EAAE,UAAU,CAAC,aAAa,IAAI,CAAC;6BACtC,CAAC;wBACJ,CAAC;wBAED,oBAAoB;wBACpB,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAClE,SAAS;wBACX,CAAC;wBAED,QAAQ,CAAC,IAAI,CAAC;4BACZ,MAAM,EAAE,OAAO;4BACf,KAAK;4BACL,SAAS;4BACT,MAAM,EAAE;gCACN,KAAK,EAAE,KAAK,CAAC,KAAK;gCAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,SAAS,EAAE,KAAK,CAAC,MAAM;gCACvB,UAAU,EAAE,CAAC,EAAE,kCAAkC;6BAClD;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS,IAAI,CAAC,UAAkB;QAC9B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC;IACpD,qBAAqB;IACrB,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,iBAAiB;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAA2C,CAAC;IACjE,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/gemini.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gemini CLI data reader
|
|
3
|
-
* Reads from ~/.gemini/tmp/{projectHash}/chats/session-*.json
|
|
4
|
-
*/
|
|
5
|
-
export interface GeminiUsageData {
|
|
6
|
-
source: "gemini";
|
|
7
|
-
model: string;
|
|
8
|
-
messageCount: number;
|
|
9
|
-
input: number;
|
|
10
|
-
output: number;
|
|
11
|
-
cached: number;
|
|
12
|
-
thoughts: number;
|
|
13
|
-
tool: number;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Individual Gemini message with timestamp for graph generation
|
|
17
|
-
*/
|
|
18
|
-
export interface GeminiMessageWithTimestamp {
|
|
19
|
-
source: "gemini";
|
|
20
|
-
model: string;
|
|
21
|
-
timestamp: number;
|
|
22
|
-
tokens: {
|
|
23
|
-
input: number;
|
|
24
|
-
output: number;
|
|
25
|
-
cached: number;
|
|
26
|
-
thoughts: number;
|
|
27
|
-
tool: number;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export declare function getGeminiBasePath(): string;
|
|
31
|
-
export declare function readGeminiSessions(): GeminiUsageData[];
|
|
32
|
-
/**
|
|
33
|
-
* Read Gemini messages with timestamp for graph generation
|
|
34
|
-
*/
|
|
35
|
-
export declare function readGeminiMessagesWithTimestamp(): GeminiMessageWithTimestamp[];
|
|
36
|
-
//# sourceMappingURL=gemini.d.ts.map
|
package/dist/gemini.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AA0BD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,EAAE,CAgEtD;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,0BAA0B,EAAE,CA2D9E"}
|
package/dist/gemini.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gemini CLI data reader
|
|
3
|
-
* Reads from ~/.gemini/tmp/{projectHash}/chats/session-*.json
|
|
4
|
-
*/
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import * as os from "node:os";
|
|
8
|
-
export function getGeminiBasePath() {
|
|
9
|
-
return path.join(os.homedir(), ".gemini");
|
|
10
|
-
}
|
|
11
|
-
export function readGeminiSessions() {
|
|
12
|
-
const basePath = getGeminiBasePath();
|
|
13
|
-
const tmpPath = path.join(basePath, "tmp");
|
|
14
|
-
if (!fs.existsSync(tmpPath)) {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
const modelUsage = new Map();
|
|
18
|
-
// Find all project directories
|
|
19
|
-
const projectDirs = fs
|
|
20
|
-
.readdirSync(tmpPath, { withFileTypes: true })
|
|
21
|
-
.filter((d) => d.isDirectory())
|
|
22
|
-
.map((d) => path.join(tmpPath, d.name));
|
|
23
|
-
for (const projectDir of projectDirs) {
|
|
24
|
-
const chatsDir = path.join(projectDir, "chats");
|
|
25
|
-
if (!fs.existsSync(chatsDir))
|
|
26
|
-
continue;
|
|
27
|
-
// Find all session JSON files
|
|
28
|
-
const sessionFiles = fs
|
|
29
|
-
.readdirSync(chatsDir)
|
|
30
|
-
.filter((f) => f.startsWith("session-") && f.endsWith(".json"));
|
|
31
|
-
for (const sessionFile of sessionFiles) {
|
|
32
|
-
try {
|
|
33
|
-
const content = fs.readFileSync(path.join(chatsDir, sessionFile), "utf-8");
|
|
34
|
-
const session = JSON.parse(content);
|
|
35
|
-
for (const msg of session.messages) {
|
|
36
|
-
// Only process gemini messages with token data
|
|
37
|
-
if (msg.type !== "gemini" || !msg.tokens || !msg.model)
|
|
38
|
-
continue;
|
|
39
|
-
const model = msg.model;
|
|
40
|
-
let usage = modelUsage.get(model);
|
|
41
|
-
if (!usage) {
|
|
42
|
-
usage = {
|
|
43
|
-
source: "gemini",
|
|
44
|
-
model,
|
|
45
|
-
messageCount: 0,
|
|
46
|
-
input: 0,
|
|
47
|
-
output: 0,
|
|
48
|
-
cached: 0,
|
|
49
|
-
thoughts: 0,
|
|
50
|
-
tool: 0,
|
|
51
|
-
};
|
|
52
|
-
modelUsage.set(model, usage);
|
|
53
|
-
}
|
|
54
|
-
usage.messageCount++;
|
|
55
|
-
usage.input += msg.tokens.input || 0;
|
|
56
|
-
usage.output += msg.tokens.output || 0;
|
|
57
|
-
usage.cached += msg.tokens.cached || 0;
|
|
58
|
-
usage.thoughts += msg.tokens.thoughts || 0;
|
|
59
|
-
usage.tool += msg.tokens.tool || 0;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
// Skip malformed files
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return Array.from(modelUsage.values());
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Read Gemini messages with timestamp for graph generation
|
|
71
|
-
*/
|
|
72
|
-
export function readGeminiMessagesWithTimestamp() {
|
|
73
|
-
const basePath = getGeminiBasePath();
|
|
74
|
-
const tmpPath = path.join(basePath, "tmp");
|
|
75
|
-
if (!fs.existsSync(tmpPath)) {
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
const messages = [];
|
|
79
|
-
// Find all project directories
|
|
80
|
-
const projectDirs = fs
|
|
81
|
-
.readdirSync(tmpPath, { withFileTypes: true })
|
|
82
|
-
.filter((d) => d.isDirectory())
|
|
83
|
-
.map((d) => path.join(tmpPath, d.name));
|
|
84
|
-
for (const projectDir of projectDirs) {
|
|
85
|
-
const chatsDir = path.join(projectDir, "chats");
|
|
86
|
-
if (!fs.existsSync(chatsDir))
|
|
87
|
-
continue;
|
|
88
|
-
// Find all session JSON files
|
|
89
|
-
const sessionFiles = fs
|
|
90
|
-
.readdirSync(chatsDir)
|
|
91
|
-
.filter((f) => f.startsWith("session-") && f.endsWith(".json"));
|
|
92
|
-
for (const sessionFile of sessionFiles) {
|
|
93
|
-
try {
|
|
94
|
-
const content = fs.readFileSync(path.join(chatsDir, sessionFile), "utf-8");
|
|
95
|
-
const session = JSON.parse(content);
|
|
96
|
-
for (const msg of session.messages) {
|
|
97
|
-
// Only process gemini messages with token data and timestamp
|
|
98
|
-
if (msg.type !== "gemini" || !msg.tokens || !msg.model || !msg.timestamp)
|
|
99
|
-
continue;
|
|
100
|
-
const timestamp = new Date(msg.timestamp).getTime();
|
|
101
|
-
// Skip invalid timestamps
|
|
102
|
-
if (isNaN(timestamp))
|
|
103
|
-
continue;
|
|
104
|
-
messages.push({
|
|
105
|
-
source: "gemini",
|
|
106
|
-
model: msg.model,
|
|
107
|
-
timestamp,
|
|
108
|
-
tokens: {
|
|
109
|
-
input: msg.tokens.input || 0,
|
|
110
|
-
output: msg.tokens.output || 0,
|
|
111
|
-
cached: msg.tokens.cached || 0,
|
|
112
|
-
thoughts: msg.tokens.thoughts || 0,
|
|
113
|
-
tool: msg.tokens.tool || 0,
|
|
114
|
-
},
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
// Skip malformed files
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return messages;
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=gemini.js.map
|
package/dist/gemini.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../src/gemini.ts"],"names":[],"mappings":"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"}
|
package/dist/opencode.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenCode session data reader
|
|
3
|
-
*/
|
|
4
|
-
export interface TokenUsage {
|
|
5
|
-
input: number;
|
|
6
|
-
output: number;
|
|
7
|
-
reasoning: number;
|
|
8
|
-
cache: {
|
|
9
|
-
read: number;
|
|
10
|
-
write: number;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
export interface OpenCodeMessage {
|
|
14
|
-
id: string;
|
|
15
|
-
sessionID: string;
|
|
16
|
-
role: "assistant" | "user";
|
|
17
|
-
modelID?: string;
|
|
18
|
-
providerID?: string;
|
|
19
|
-
cost: number;
|
|
20
|
-
tokens?: TokenUsage;
|
|
21
|
-
time: {
|
|
22
|
-
created: number;
|
|
23
|
-
completed?: number;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export interface OpenCodeUsageData {
|
|
27
|
-
source: "opencode";
|
|
28
|
-
modelID: string;
|
|
29
|
-
providerID: string;
|
|
30
|
-
messageCount: number;
|
|
31
|
-
input: number;
|
|
32
|
-
output: number;
|
|
33
|
-
reasoning: number;
|
|
34
|
-
cacheRead: number;
|
|
35
|
-
cacheWrite: number;
|
|
36
|
-
}
|
|
37
|
-
export declare function getOpenCodeStoragePath(): string;
|
|
38
|
-
export declare function readOpenCodeMessages(): OpenCodeMessage[];
|
|
39
|
-
export declare function aggregateOpenCodeByModel(messages: OpenCodeMessage[]): Map<string, OpenCodeUsageData>;
|
|
40
|
-
//# sourceMappingURL=opencode.d.ts.map
|
package/dist/opencode.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAG/C;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAgCxD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAiCpG"}
|