@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Native Runner - Subprocess for non-blocking native Rust calls
|
|
4
|
+
*
|
|
5
|
+
* This script runs in a separate process to keep the main event loop free
|
|
6
|
+
* for UI rendering (e.g., spinner animation).
|
|
7
|
+
*
|
|
8
|
+
* Communication: stdin (JSON input) -> stdout (JSON output)
|
|
9
|
+
* No temp files needed - pure Unix IPC pattern.
|
|
10
|
+
*/
|
|
11
|
+
import nativeCore from "@tokscale/core";
|
|
12
|
+
const MAX_INPUT_SIZE = 50 * 1024 * 1024; // 50MB
|
|
13
|
+
const STDIN_TIMEOUT_MS = 30_000; // 30s
|
|
14
|
+
async function readStdinWithLimits() {
|
|
15
|
+
const chunks = [];
|
|
16
|
+
let totalSize = 0;
|
|
17
|
+
let timeoutId = null;
|
|
18
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
19
|
+
timeoutId = setTimeout(() => reject(new Error(`Stdin read timed out after ${STDIN_TIMEOUT_MS}ms`)), STDIN_TIMEOUT_MS);
|
|
20
|
+
});
|
|
21
|
+
const readPromise = (async () => {
|
|
22
|
+
for await (const chunk of process.stdin) {
|
|
23
|
+
const buf = Buffer.from(chunk);
|
|
24
|
+
totalSize += buf.length;
|
|
25
|
+
if (totalSize > MAX_INPUT_SIZE) {
|
|
26
|
+
throw new Error(`Input exceeds maximum size of ${MAX_INPUT_SIZE} bytes (${Math.round(MAX_INPUT_SIZE / 1024 / 1024)}MB)`);
|
|
27
|
+
}
|
|
28
|
+
chunks.push(buf);
|
|
29
|
+
}
|
|
30
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
31
|
+
})();
|
|
32
|
+
try {
|
|
33
|
+
const result = await Promise.race([readPromise, timeoutPromise]);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
if (timeoutId)
|
|
38
|
+
clearTimeout(timeoutId);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function main() {
|
|
42
|
+
const input = await readStdinWithLimits();
|
|
43
|
+
if (!input.trim()) {
|
|
44
|
+
process.stderr.write(JSON.stringify({ error: "No input received" }));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
let request;
|
|
48
|
+
try {
|
|
49
|
+
request = JSON.parse(input);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw new Error(`Malformed JSON input: ${e.message}`);
|
|
53
|
+
}
|
|
54
|
+
const { method, args } = request;
|
|
55
|
+
if (!Array.isArray(args) || args.length === 0) {
|
|
56
|
+
throw new Error(`Invalid args for method '${method}': expected at least 1 argument`);
|
|
57
|
+
}
|
|
58
|
+
let result;
|
|
59
|
+
switch (method) {
|
|
60
|
+
case "parseLocalSources":
|
|
61
|
+
result = nativeCore.parseLocalSources(args[0]);
|
|
62
|
+
break;
|
|
63
|
+
case "finalizeReport":
|
|
64
|
+
result = nativeCore.finalizeReport(args[0]);
|
|
65
|
+
break;
|
|
66
|
+
case "finalizeMonthlyReport":
|
|
67
|
+
result = nativeCore.finalizeMonthlyReport(args[0]);
|
|
68
|
+
break;
|
|
69
|
+
case "finalizeGraph":
|
|
70
|
+
result = nativeCore.finalizeGraph(args[0]);
|
|
71
|
+
break;
|
|
72
|
+
case "generateGraphWithPricing":
|
|
73
|
+
result = nativeCore.generateGraphWithPricing(args[0]);
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
throw new Error(`Unknown method: ${method}`);
|
|
77
|
+
}
|
|
78
|
+
// Write result to stdout (no newline - pure JSON)
|
|
79
|
+
process.stdout.write(JSON.stringify(result));
|
|
80
|
+
}
|
|
81
|
+
main().catch((e) => {
|
|
82
|
+
const error = e;
|
|
83
|
+
process.stderr.write(JSON.stringify({
|
|
84
|
+
error: error.message,
|
|
85
|
+
stack: error.stack,
|
|
86
|
+
}));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=native-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-runner.js","sourceRoot":"","sources":["../src/native-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/native.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native module loader for Rust core
|
|
3
|
+
*
|
|
4
|
+
* Exposes all Rust functions with proper TypeScript types.
|
|
5
|
+
* Falls back to TypeScript implementations when native module is unavailable.
|
|
6
|
+
*/
|
|
7
|
+
import type { PricingEntry } from "./pricing.js";
|
|
8
|
+
import type { TokenContributionData, GraphOptions as TSGraphOptions, SourceType } from "./graph-types.js";
|
|
9
|
+
interface NativeScanStats {
|
|
10
|
+
opencodeFiles: number;
|
|
11
|
+
claudeFiles: number;
|
|
12
|
+
codexFiles: number;
|
|
13
|
+
geminiFiles: number;
|
|
14
|
+
totalFiles: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if native module is available
|
|
18
|
+
*/
|
|
19
|
+
export declare function isNativeAvailable(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Get native module load error (if any)
|
|
22
|
+
*/
|
|
23
|
+
export declare function getNativeLoadError(): Error | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get native module version
|
|
26
|
+
*/
|
|
27
|
+
export declare function getNativeVersion(): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Scan sessions using native module
|
|
30
|
+
*/
|
|
31
|
+
export declare function scanSessionsNative(homeDir?: string, sources?: string[]): NativeScanStats | null;
|
|
32
|
+
/**
|
|
33
|
+
* Generate graph data using native module (without pricing - uses embedded costs)
|
|
34
|
+
* @deprecated Use generateGraphWithPricing instead
|
|
35
|
+
*/
|
|
36
|
+
export declare function generateGraphNative(options?: TSGraphOptions): TokenContributionData;
|
|
37
|
+
export interface ModelUsage {
|
|
38
|
+
source: string;
|
|
39
|
+
model: string;
|
|
40
|
+
provider: string;
|
|
41
|
+
input: number;
|
|
42
|
+
output: number;
|
|
43
|
+
cacheRead: number;
|
|
44
|
+
cacheWrite: number;
|
|
45
|
+
reasoning: number;
|
|
46
|
+
messageCount: number;
|
|
47
|
+
cost: number;
|
|
48
|
+
}
|
|
49
|
+
export interface ModelReport {
|
|
50
|
+
entries: ModelUsage[];
|
|
51
|
+
totalInput: number;
|
|
52
|
+
totalOutput: number;
|
|
53
|
+
totalCacheRead: number;
|
|
54
|
+
totalCacheWrite: number;
|
|
55
|
+
totalMessages: number;
|
|
56
|
+
totalCost: number;
|
|
57
|
+
processingTimeMs: number;
|
|
58
|
+
}
|
|
59
|
+
export interface MonthlyUsage {
|
|
60
|
+
month: string;
|
|
61
|
+
models: string[];
|
|
62
|
+
input: number;
|
|
63
|
+
output: number;
|
|
64
|
+
cacheRead: number;
|
|
65
|
+
cacheWrite: number;
|
|
66
|
+
messageCount: number;
|
|
67
|
+
cost: number;
|
|
68
|
+
}
|
|
69
|
+
export interface MonthlyReport {
|
|
70
|
+
entries: MonthlyUsage[];
|
|
71
|
+
totalCost: number;
|
|
72
|
+
processingTimeMs: number;
|
|
73
|
+
}
|
|
74
|
+
export interface ParsedMessages {
|
|
75
|
+
messages: Array<{
|
|
76
|
+
source: string;
|
|
77
|
+
modelId: string;
|
|
78
|
+
providerId: string;
|
|
79
|
+
timestamp: number;
|
|
80
|
+
date: string;
|
|
81
|
+
input: number;
|
|
82
|
+
output: number;
|
|
83
|
+
cacheRead: number;
|
|
84
|
+
cacheWrite: number;
|
|
85
|
+
reasoning: number;
|
|
86
|
+
sessionId: string;
|
|
87
|
+
}>;
|
|
88
|
+
opencodeCount: number;
|
|
89
|
+
claudeCount: number;
|
|
90
|
+
codexCount: number;
|
|
91
|
+
geminiCount: number;
|
|
92
|
+
processingTimeMs: number;
|
|
93
|
+
}
|
|
94
|
+
export interface LocalParseOptions {
|
|
95
|
+
sources?: SourceType[];
|
|
96
|
+
since?: string;
|
|
97
|
+
until?: string;
|
|
98
|
+
year?: string;
|
|
99
|
+
}
|
|
100
|
+
export interface FinalizeOptions {
|
|
101
|
+
localMessages: ParsedMessages;
|
|
102
|
+
pricing: PricingEntry[];
|
|
103
|
+
includeCursor: boolean;
|
|
104
|
+
since?: string;
|
|
105
|
+
until?: string;
|
|
106
|
+
year?: string;
|
|
107
|
+
}
|
|
108
|
+
export declare function parseLocalSourcesAsync(options: LocalParseOptions): Promise<ParsedMessages>;
|
|
109
|
+
export declare function finalizeReportAsync(options: FinalizeOptions): Promise<ModelReport>;
|
|
110
|
+
export declare function finalizeMonthlyReportAsync(options: FinalizeOptions): Promise<MonthlyReport>;
|
|
111
|
+
export declare function finalizeGraphAsync(options: FinalizeOptions): Promise<TokenContributionData>;
|
|
112
|
+
export declare function generateGraphWithPricingAsync(options: TSGraphOptions & {
|
|
113
|
+
pricing: PricingEntry[];
|
|
114
|
+
}): Promise<TokenContributionData>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/dist/native.js
ADDED
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native module loader for Rust core
|
|
3
|
+
*
|
|
4
|
+
* Exposes all Rust functions with proper TypeScript types.
|
|
5
|
+
* Falls back to TypeScript implementations when native module is unavailable.
|
|
6
|
+
*/
|
|
7
|
+
import { parseLocalSources as parseLocalSourcesTS, } from "./sessions/index.js";
|
|
8
|
+
import { generateModelReport as generateModelReportTS, generateMonthlyReport as generateMonthlyReportTS, generateGraphData as generateGraphDataTS, } from "./sessions/reports.js";
|
|
9
|
+
import { readCursorMessagesFromCache } from "./cursor.js";
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Module loading
|
|
12
|
+
// =============================================================================
|
|
13
|
+
let nativeCore = null;
|
|
14
|
+
let loadError = null;
|
|
15
|
+
try {
|
|
16
|
+
nativeCore = await import("@tokscale/core").then((m) => m.default || m);
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
loadError = e;
|
|
20
|
+
}
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// Public API
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Check if native module is available
|
|
26
|
+
*/
|
|
27
|
+
export function isNativeAvailable() {
|
|
28
|
+
return nativeCore !== null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get native module load error (if any)
|
|
32
|
+
*/
|
|
33
|
+
export function getNativeLoadError() {
|
|
34
|
+
return loadError;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get native module version
|
|
38
|
+
*/
|
|
39
|
+
export function getNativeVersion() {
|
|
40
|
+
return nativeCore?.version() ?? null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Scan sessions using native module
|
|
44
|
+
*/
|
|
45
|
+
export function scanSessionsNative(homeDir, sources) {
|
|
46
|
+
if (!nativeCore) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return nativeCore.scanSessions(homeDir, sources);
|
|
50
|
+
}
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// Graph generation
|
|
53
|
+
// =============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Convert TypeScript graph options to native format
|
|
56
|
+
*/
|
|
57
|
+
function toNativeOptions(options) {
|
|
58
|
+
return {
|
|
59
|
+
homeDir: undefined,
|
|
60
|
+
sources: options.sources,
|
|
61
|
+
since: options.since,
|
|
62
|
+
until: options.until,
|
|
63
|
+
year: options.year,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Convert native result to TypeScript format
|
|
68
|
+
*/
|
|
69
|
+
function fromNativeResult(result) {
|
|
70
|
+
return {
|
|
71
|
+
meta: {
|
|
72
|
+
generatedAt: result.meta.generatedAt,
|
|
73
|
+
version: result.meta.version,
|
|
74
|
+
dateRange: {
|
|
75
|
+
start: result.meta.dateRangeStart,
|
|
76
|
+
end: result.meta.dateRangeEnd,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
summary: {
|
|
80
|
+
totalTokens: result.summary.totalTokens,
|
|
81
|
+
totalCost: result.summary.totalCost,
|
|
82
|
+
totalDays: result.summary.totalDays,
|
|
83
|
+
activeDays: result.summary.activeDays,
|
|
84
|
+
averagePerDay: result.summary.averagePerDay,
|
|
85
|
+
maxCostInSingleDay: result.summary.maxCostInSingleDay,
|
|
86
|
+
sources: result.summary.sources,
|
|
87
|
+
models: result.summary.models,
|
|
88
|
+
},
|
|
89
|
+
years: result.years.map((y) => ({
|
|
90
|
+
year: y.year,
|
|
91
|
+
totalTokens: y.totalTokens,
|
|
92
|
+
totalCost: y.totalCost,
|
|
93
|
+
range: {
|
|
94
|
+
start: y.rangeStart,
|
|
95
|
+
end: y.rangeEnd,
|
|
96
|
+
},
|
|
97
|
+
})),
|
|
98
|
+
contributions: result.contributions.map((c) => ({
|
|
99
|
+
date: c.date,
|
|
100
|
+
totals: {
|
|
101
|
+
tokens: c.totals.tokens,
|
|
102
|
+
cost: c.totals.cost,
|
|
103
|
+
messages: c.totals.messages,
|
|
104
|
+
},
|
|
105
|
+
intensity: c.intensity,
|
|
106
|
+
tokenBreakdown: {
|
|
107
|
+
input: c.tokenBreakdown.input,
|
|
108
|
+
output: c.tokenBreakdown.output,
|
|
109
|
+
cacheRead: c.tokenBreakdown.cacheRead,
|
|
110
|
+
cacheWrite: c.tokenBreakdown.cacheWrite,
|
|
111
|
+
reasoning: c.tokenBreakdown.reasoning,
|
|
112
|
+
},
|
|
113
|
+
sources: c.sources.map((s) => ({
|
|
114
|
+
source: s.source,
|
|
115
|
+
modelId: s.modelId,
|
|
116
|
+
providerId: s.providerId,
|
|
117
|
+
tokens: {
|
|
118
|
+
input: s.tokens.input,
|
|
119
|
+
output: s.tokens.output,
|
|
120
|
+
cacheRead: s.tokens.cacheRead,
|
|
121
|
+
cacheWrite: s.tokens.cacheWrite,
|
|
122
|
+
reasoning: s.tokens.reasoning,
|
|
123
|
+
},
|
|
124
|
+
cost: s.cost,
|
|
125
|
+
messages: s.messages,
|
|
126
|
+
})),
|
|
127
|
+
})),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Generate graph data using native module (without pricing - uses embedded costs)
|
|
132
|
+
* @deprecated Use generateGraphWithPricing instead
|
|
133
|
+
*/
|
|
134
|
+
export function generateGraphNative(options = {}) {
|
|
135
|
+
if (!nativeCore) {
|
|
136
|
+
throw new Error("Native module not available: " + (loadError?.message || "unknown error"));
|
|
137
|
+
}
|
|
138
|
+
const nativeOptions = toNativeOptions(options);
|
|
139
|
+
const result = nativeCore.generateGraph(nativeOptions);
|
|
140
|
+
return fromNativeResult(result);
|
|
141
|
+
}
|
|
142
|
+
// =============================================================================
|
|
143
|
+
// Async Subprocess Wrappers (Non-blocking for UI)
|
|
144
|
+
// =============================================================================
|
|
145
|
+
import { spawn } from "bun";
|
|
146
|
+
import { fileURLToPath } from "node:url";
|
|
147
|
+
import { dirname, join } from "node:path";
|
|
148
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
149
|
+
const __dirname = dirname(__filename);
|
|
150
|
+
const DEFAULT_TIMEOUT_MS = 120_000; // 2 minutes default
|
|
151
|
+
const NATIVE_TIMEOUT_MS = parseInt(process.env.TOKSCALE_NATIVE_TIMEOUT_MS || String(DEFAULT_TIMEOUT_MS), 10);
|
|
152
|
+
// Timeout-related exit codes
|
|
153
|
+
const TIMEOUT_EXIT_CODES = new Set([
|
|
154
|
+
124, // GNU timeout default
|
|
155
|
+
143, // 128 + 15 (SIGTERM)
|
|
156
|
+
137, // 128 + 9 (SIGKILL - when SIGTERM fails)
|
|
157
|
+
]);
|
|
158
|
+
async function runInSubprocess(method, args) {
|
|
159
|
+
const runnerPath = join(__dirname, "native-runner.ts");
|
|
160
|
+
const input = JSON.stringify({ method, args });
|
|
161
|
+
const proc = spawn({
|
|
162
|
+
cmd: ["bun", "run", runnerPath],
|
|
163
|
+
stdin: "pipe",
|
|
164
|
+
stdout: "pipe",
|
|
165
|
+
stderr: "pipe",
|
|
166
|
+
timeout: NATIVE_TIMEOUT_MS,
|
|
167
|
+
killSignal: "SIGTERM",
|
|
168
|
+
});
|
|
169
|
+
// Helper to consume streams (prevents resource leaks)
|
|
170
|
+
const consumeStreams = async () => {
|
|
171
|
+
const [stdout, stderr] = await Promise.all([
|
|
172
|
+
new Response(proc.stdout).text(),
|
|
173
|
+
new Response(proc.stderr).text(),
|
|
174
|
+
]);
|
|
175
|
+
return { stdout, stderr };
|
|
176
|
+
};
|
|
177
|
+
try {
|
|
178
|
+
proc.stdin.write(input);
|
|
179
|
+
proc.stdin.end();
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
proc.kill("SIGTERM");
|
|
183
|
+
// Must consume streams even after kill to prevent resource leaks
|
|
184
|
+
await consumeStreams().catch(() => { }); // Ignore stream errors after kill
|
|
185
|
+
await proc.exited.catch(() => { }); // Wait for process to exit
|
|
186
|
+
throw new Error(`Failed to write to subprocess stdin: ${e.message}`);
|
|
187
|
+
}
|
|
188
|
+
const [{ stdout, stderr }, exitCode] = await Promise.all([
|
|
189
|
+
consumeStreams(),
|
|
190
|
+
proc.exited,
|
|
191
|
+
]);
|
|
192
|
+
// Check for timeout exit codes
|
|
193
|
+
if (TIMEOUT_EXIT_CODES.has(exitCode)) {
|
|
194
|
+
throw new Error(`Subprocess '${method}' timed out after ${NATIVE_TIMEOUT_MS}ms (exit code ${exitCode})`);
|
|
195
|
+
}
|
|
196
|
+
if (exitCode !== 0) {
|
|
197
|
+
let errorMsg = stderr || `Process exited with code ${exitCode}`;
|
|
198
|
+
try {
|
|
199
|
+
const parsed = JSON.parse(stderr);
|
|
200
|
+
if (parsed.error)
|
|
201
|
+
errorMsg = parsed.error;
|
|
202
|
+
}
|
|
203
|
+
catch { }
|
|
204
|
+
throw new Error(`Subprocess '${method}' failed: ${errorMsg}`);
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
return JSON.parse(stdout);
|
|
208
|
+
}
|
|
209
|
+
catch (e) {
|
|
210
|
+
throw new Error(`Failed to parse subprocess output: ${e.message}\nstdout: ${stdout.slice(0, 500)}`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
export async function parseLocalSourcesAsync(options) {
|
|
214
|
+
// Use TypeScript fallback when native module is not available
|
|
215
|
+
if (!isNativeAvailable()) {
|
|
216
|
+
const result = parseLocalSourcesTS({
|
|
217
|
+
sources: options.sources,
|
|
218
|
+
since: options.since,
|
|
219
|
+
until: options.until,
|
|
220
|
+
year: options.year,
|
|
221
|
+
});
|
|
222
|
+
// Convert TypeScript ParsedMessages to native format
|
|
223
|
+
return {
|
|
224
|
+
messages: result.messages.map((msg) => ({
|
|
225
|
+
source: msg.source,
|
|
226
|
+
modelId: msg.modelId,
|
|
227
|
+
providerId: msg.providerId,
|
|
228
|
+
timestamp: msg.timestamp,
|
|
229
|
+
date: msg.date,
|
|
230
|
+
input: msg.tokens.input,
|
|
231
|
+
output: msg.tokens.output,
|
|
232
|
+
cacheRead: msg.tokens.cacheRead,
|
|
233
|
+
cacheWrite: msg.tokens.cacheWrite,
|
|
234
|
+
reasoning: msg.tokens.reasoning,
|
|
235
|
+
sessionId: msg.sessionId,
|
|
236
|
+
})),
|
|
237
|
+
opencodeCount: result.opencodeCount,
|
|
238
|
+
claudeCount: result.claudeCount,
|
|
239
|
+
codexCount: result.codexCount,
|
|
240
|
+
geminiCount: result.geminiCount,
|
|
241
|
+
processingTimeMs: result.processingTimeMs,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
const nativeOptions = {
|
|
245
|
+
homeDir: undefined,
|
|
246
|
+
sources: options.sources,
|
|
247
|
+
since: options.since,
|
|
248
|
+
until: options.until,
|
|
249
|
+
year: options.year,
|
|
250
|
+
};
|
|
251
|
+
return runInSubprocess("parseLocalSources", [nativeOptions]);
|
|
252
|
+
}
|
|
253
|
+
function buildMessagesForFallback(options) {
|
|
254
|
+
const messages = options.localMessages.messages.map((msg) => ({
|
|
255
|
+
source: msg.source,
|
|
256
|
+
modelId: msg.modelId,
|
|
257
|
+
providerId: msg.providerId,
|
|
258
|
+
sessionId: msg.sessionId,
|
|
259
|
+
timestamp: msg.timestamp,
|
|
260
|
+
date: msg.date,
|
|
261
|
+
tokens: {
|
|
262
|
+
input: msg.input,
|
|
263
|
+
output: msg.output,
|
|
264
|
+
cacheRead: msg.cacheRead,
|
|
265
|
+
cacheWrite: msg.cacheWrite,
|
|
266
|
+
reasoning: msg.reasoning,
|
|
267
|
+
},
|
|
268
|
+
cost: 0,
|
|
269
|
+
}));
|
|
270
|
+
if (options.includeCursor) {
|
|
271
|
+
const cursorMessages = readCursorMessagesFromCache();
|
|
272
|
+
for (const cursor of cursorMessages) {
|
|
273
|
+
const inRange = (!options.year || cursor.date.startsWith(options.year)) &&
|
|
274
|
+
(!options.since || cursor.date >= options.since) &&
|
|
275
|
+
(!options.until || cursor.date <= options.until);
|
|
276
|
+
if (inRange) {
|
|
277
|
+
messages.push(cursor);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return messages;
|
|
282
|
+
}
|
|
283
|
+
export async function finalizeReportAsync(options) {
|
|
284
|
+
if (!isNativeAvailable()) {
|
|
285
|
+
const startTime = performance.now();
|
|
286
|
+
const messages = buildMessagesForFallback(options);
|
|
287
|
+
return generateModelReportTS(messages, options.pricing, startTime);
|
|
288
|
+
}
|
|
289
|
+
const nativeOptions = {
|
|
290
|
+
homeDir: undefined,
|
|
291
|
+
localMessages: options.localMessages,
|
|
292
|
+
pricing: options.pricing,
|
|
293
|
+
includeCursor: options.includeCursor,
|
|
294
|
+
since: options.since,
|
|
295
|
+
until: options.until,
|
|
296
|
+
year: options.year,
|
|
297
|
+
};
|
|
298
|
+
return runInSubprocess("finalizeReport", [nativeOptions]);
|
|
299
|
+
}
|
|
300
|
+
export async function finalizeMonthlyReportAsync(options) {
|
|
301
|
+
if (!isNativeAvailable()) {
|
|
302
|
+
const startTime = performance.now();
|
|
303
|
+
const messages = buildMessagesForFallback(options);
|
|
304
|
+
return generateMonthlyReportTS(messages, options.pricing, startTime);
|
|
305
|
+
}
|
|
306
|
+
const nativeOptions = {
|
|
307
|
+
homeDir: undefined,
|
|
308
|
+
localMessages: options.localMessages,
|
|
309
|
+
pricing: options.pricing,
|
|
310
|
+
includeCursor: options.includeCursor,
|
|
311
|
+
since: options.since,
|
|
312
|
+
until: options.until,
|
|
313
|
+
year: options.year,
|
|
314
|
+
};
|
|
315
|
+
return runInSubprocess("finalizeMonthlyReport", [nativeOptions]);
|
|
316
|
+
}
|
|
317
|
+
export async function finalizeGraphAsync(options) {
|
|
318
|
+
if (!isNativeAvailable()) {
|
|
319
|
+
const startTime = performance.now();
|
|
320
|
+
const messages = buildMessagesForFallback(options);
|
|
321
|
+
return generateGraphDataTS(messages, options.pricing, startTime);
|
|
322
|
+
}
|
|
323
|
+
const nativeOptions = {
|
|
324
|
+
homeDir: undefined,
|
|
325
|
+
localMessages: options.localMessages,
|
|
326
|
+
pricing: options.pricing,
|
|
327
|
+
includeCursor: options.includeCursor,
|
|
328
|
+
since: options.since,
|
|
329
|
+
until: options.until,
|
|
330
|
+
year: options.year,
|
|
331
|
+
};
|
|
332
|
+
const result = await runInSubprocess("finalizeGraph", [nativeOptions]);
|
|
333
|
+
return fromNativeResult(result);
|
|
334
|
+
}
|
|
335
|
+
export async function generateGraphWithPricingAsync(options) {
|
|
336
|
+
// Use TypeScript fallback when native module is not available
|
|
337
|
+
if (!isNativeAvailable()) {
|
|
338
|
+
const startTime = performance.now();
|
|
339
|
+
// Parse local sources using TS fallback
|
|
340
|
+
const parsed = parseLocalSourcesTS({
|
|
341
|
+
sources: options.sources,
|
|
342
|
+
since: options.since,
|
|
343
|
+
until: options.until,
|
|
344
|
+
year: options.year,
|
|
345
|
+
});
|
|
346
|
+
return generateGraphDataTS(parsed.messages, options.pricing, startTime);
|
|
347
|
+
}
|
|
348
|
+
const nativeOptions = {
|
|
349
|
+
homeDir: undefined,
|
|
350
|
+
sources: options.sources,
|
|
351
|
+
pricing: options.pricing,
|
|
352
|
+
since: options.since,
|
|
353
|
+
until: options.until,
|
|
354
|
+
year: options.year,
|
|
355
|
+
};
|
|
356
|
+
const result = await runInSubprocess("generateGraphWithPricing", [nativeOptions]);
|
|
357
|
+
return fromNativeResult(result);
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|