@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,133 @@
|
|
|
1
|
+
import type { ColorPaletteName } from "../config/themes.js";
|
|
2
|
+
export type TabType = "overview" | "model" | "daily" | "stats";
|
|
3
|
+
export type SortType = "cost" | "tokens";
|
|
4
|
+
export type SourceType = "opencode" | "claude" | "codex" | "cursor" | "gemini";
|
|
5
|
+
export type { ColorPaletteName };
|
|
6
|
+
export interface ModelEntry {
|
|
7
|
+
source: string;
|
|
8
|
+
model: string;
|
|
9
|
+
input: number;
|
|
10
|
+
output: number;
|
|
11
|
+
cacheWrite: number;
|
|
12
|
+
cacheRead: number;
|
|
13
|
+
reasoning: number;
|
|
14
|
+
total: number;
|
|
15
|
+
cost: number;
|
|
16
|
+
}
|
|
17
|
+
export interface DailyEntry {
|
|
18
|
+
date: string;
|
|
19
|
+
input: number;
|
|
20
|
+
output: number;
|
|
21
|
+
cache: number;
|
|
22
|
+
total: number;
|
|
23
|
+
cost: number;
|
|
24
|
+
}
|
|
25
|
+
export interface ContributionDay {
|
|
26
|
+
date: string;
|
|
27
|
+
cost: number;
|
|
28
|
+
level: number;
|
|
29
|
+
}
|
|
30
|
+
export interface GridCell {
|
|
31
|
+
date: string | null;
|
|
32
|
+
level: number;
|
|
33
|
+
}
|
|
34
|
+
export interface TotalBreakdown {
|
|
35
|
+
input: number;
|
|
36
|
+
output: number;
|
|
37
|
+
cacheWrite: number;
|
|
38
|
+
cacheRead: number;
|
|
39
|
+
reasoning: number;
|
|
40
|
+
total: number;
|
|
41
|
+
cost: number;
|
|
42
|
+
}
|
|
43
|
+
export interface Stats {
|
|
44
|
+
favoriteModel: string;
|
|
45
|
+
totalTokens: number;
|
|
46
|
+
sessions: number;
|
|
47
|
+
longestSession: string;
|
|
48
|
+
currentStreak: number;
|
|
49
|
+
longestStreak: number;
|
|
50
|
+
activeDays: number;
|
|
51
|
+
totalDays: number;
|
|
52
|
+
peakHour: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ModelWithPercentage {
|
|
55
|
+
modelId: string;
|
|
56
|
+
percentage: number;
|
|
57
|
+
inputTokens: number;
|
|
58
|
+
outputTokens: number;
|
|
59
|
+
cacheReadTokens: number;
|
|
60
|
+
cacheWriteTokens: number;
|
|
61
|
+
totalTokens: number;
|
|
62
|
+
cost: number;
|
|
63
|
+
}
|
|
64
|
+
export interface ChartModelData {
|
|
65
|
+
modelId: string;
|
|
66
|
+
tokens: number;
|
|
67
|
+
color: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ChartDataPoint {
|
|
70
|
+
date: string;
|
|
71
|
+
models: ChartModelData[];
|
|
72
|
+
total: number;
|
|
73
|
+
}
|
|
74
|
+
export interface TUIData {
|
|
75
|
+
modelEntries: ModelEntry[];
|
|
76
|
+
dailyEntries: DailyEntry[];
|
|
77
|
+
contributions: ContributionDay[];
|
|
78
|
+
contributionGrid: GridCell[][];
|
|
79
|
+
stats: Stats;
|
|
80
|
+
totalCost: number;
|
|
81
|
+
totals: TotalBreakdown;
|
|
82
|
+
modelCount: number;
|
|
83
|
+
chartData: ChartDataPoint[];
|
|
84
|
+
topModels: ModelWithPercentage[];
|
|
85
|
+
dailyBreakdowns: Map<string, DailyModelBreakdown>;
|
|
86
|
+
}
|
|
87
|
+
export interface TUISettings {
|
|
88
|
+
colorPalette: string;
|
|
89
|
+
}
|
|
90
|
+
export type LoadingPhase = "idle" | "loading-pricing" | "syncing-cursor" | "parsing-sources" | "finalizing-report" | "complete";
|
|
91
|
+
export interface DailyModelBreakdown {
|
|
92
|
+
date: string;
|
|
93
|
+
cost: number;
|
|
94
|
+
totalTokens: number;
|
|
95
|
+
models: Array<{
|
|
96
|
+
modelId: string;
|
|
97
|
+
source: string;
|
|
98
|
+
tokens: {
|
|
99
|
+
input: number;
|
|
100
|
+
output: number;
|
|
101
|
+
cacheRead: number;
|
|
102
|
+
cacheWrite: number;
|
|
103
|
+
reasoning: number;
|
|
104
|
+
};
|
|
105
|
+
cost: number;
|
|
106
|
+
messages: number;
|
|
107
|
+
}>;
|
|
108
|
+
}
|
|
109
|
+
export interface TUIOptions {
|
|
110
|
+
initialTab?: TabType;
|
|
111
|
+
enabledSources?: SourceType[];
|
|
112
|
+
sortBy?: SortType;
|
|
113
|
+
sortDesc?: boolean;
|
|
114
|
+
since?: string;
|
|
115
|
+
until?: string;
|
|
116
|
+
year?: string;
|
|
117
|
+
colorPalette?: ColorPaletteName;
|
|
118
|
+
}
|
|
119
|
+
export declare const LAYOUT: {
|
|
120
|
+
readonly HEADER_HEIGHT: 2;
|
|
121
|
+
readonly FOOTER_HEIGHT: 4;
|
|
122
|
+
readonly MIN_CONTENT_HEIGHT: 12;
|
|
123
|
+
readonly CHART_HEIGHT_RATIO: 0.35;
|
|
124
|
+
readonly MIN_CHART_HEIGHT: 5;
|
|
125
|
+
readonly MIN_LIST_HEIGHT: 4;
|
|
126
|
+
readonly CHART_AXIS_WIDTH: 8;
|
|
127
|
+
readonly MIN_CHART_WIDTH: 20;
|
|
128
|
+
readonly MAX_VISIBLE_BARS: 52;
|
|
129
|
+
};
|
|
130
|
+
export declare const SOURCE_LABELS: Record<SourceType, string>;
|
|
131
|
+
export declare const TABS: readonly TabType[];
|
|
132
|
+
export declare const ALL_SOURCES: readonly SourceType[];
|
|
133
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const LAYOUT = {
|
|
2
|
+
HEADER_HEIGHT: 2,
|
|
3
|
+
FOOTER_HEIGHT: 4,
|
|
4
|
+
MIN_CONTENT_HEIGHT: 12,
|
|
5
|
+
CHART_HEIGHT_RATIO: 0.35,
|
|
6
|
+
MIN_CHART_HEIGHT: 5,
|
|
7
|
+
MIN_LIST_HEIGHT: 4,
|
|
8
|
+
CHART_AXIS_WIDTH: 8,
|
|
9
|
+
MIN_CHART_WIDTH: 20,
|
|
10
|
+
MAX_VISIBLE_BARS: 52,
|
|
11
|
+
};
|
|
12
|
+
export const SOURCE_LABELS = {
|
|
13
|
+
opencode: "OC",
|
|
14
|
+
claude: "CC",
|
|
15
|
+
codex: "CX",
|
|
16
|
+
cursor: "CR",
|
|
17
|
+
gemini: "GM",
|
|
18
|
+
};
|
|
19
|
+
export const TABS = ["overview", "model", "daily", "stats"];
|
|
20
|
+
export const ALL_SOURCES = ["opencode", "claude", "codex", "cursor", "gemini"];
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/types/index.ts"],"names":[],"mappings":"AA+IA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,IAAI;IACxB,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,EAAE;CACZ,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,IAAI,GAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AACzF,MAAM,CAAC,MAAM,WAAW,GAA0B,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal cleanup utility for restoring terminal state when TUI exits.
|
|
3
|
+
* Provides fallback cleanup for crash scenarios where OpenTUI's destroy() may not run.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Complete terminal state restoration sequences.
|
|
7
|
+
* Based on research from xterm, kitty keyboard protocol, and popular TUI libraries.
|
|
8
|
+
*/
|
|
9
|
+
export declare const TERMINAL_CLEANUP_SEQUENCES: string;
|
|
10
|
+
/**
|
|
11
|
+
* Write terminal restoration sequences to stdout.
|
|
12
|
+
* Idempotent - safe to call multiple times.
|
|
13
|
+
*
|
|
14
|
+
* This is a FALLBACK for crash scenarios. Normal exit should use
|
|
15
|
+
* renderer.destroy() which handles cleanup properly.
|
|
16
|
+
*/
|
|
17
|
+
export declare function restoreTerminalState(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Reset cleanup state (for testing purposes).
|
|
20
|
+
*/
|
|
21
|
+
export declare function resetCleanupState(): void;
|
|
22
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QA4B7B,CAAC;AAIX;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAS3C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal cleanup utility for restoring terminal state when TUI exits.
|
|
3
|
+
* Provides fallback cleanup for crash scenarios where OpenTUI's destroy() may not run.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Complete terminal state restoration sequences.
|
|
7
|
+
* Based on research from xterm, kitty keyboard protocol, and popular TUI libraries.
|
|
8
|
+
*/
|
|
9
|
+
export const TERMINAL_CLEANUP_SEQUENCES = [
|
|
10
|
+
// Disable all mouse tracking modes
|
|
11
|
+
'\x1b[?1016l', // SGR Pixel Mode
|
|
12
|
+
'\x1b[?1015l', // URXVT Mouse
|
|
13
|
+
'\x1b[?1006l', // SGR Mouse (produces "51;77;17M" sequences)
|
|
14
|
+
'\x1b[?1005l', // UTF-8 Mouse
|
|
15
|
+
'\x1b[?1004l', // Focus Events
|
|
16
|
+
'\x1b[?1003l', // Any Event Mouse (motion tracking)
|
|
17
|
+
'\x1b[?1002l', // Button Event Mouse (drag tracking)
|
|
18
|
+
'\x1b[?1001l', // Highlight Mouse
|
|
19
|
+
'\x1b[?1000l', // VT200 Mouse
|
|
20
|
+
'\x1b[?9l', // X10 Mouse
|
|
21
|
+
// Disable kitty keyboard protocol (produces "9;5u" sequences)
|
|
22
|
+
'\x1b[<u', // Disable kitty keyboard progressive enhancement
|
|
23
|
+
'\x1b[>4;0m', // Disable modifyOtherKeys (xterm)
|
|
24
|
+
// Disable synchronized updates
|
|
25
|
+
'\x1b[?2026l',
|
|
26
|
+
// Restore cursor and attributes
|
|
27
|
+
'\x1b[?25h', // Show cursor (DECTCEM)
|
|
28
|
+
'\x1b[0m', // Reset all text attributes (SGR 0)
|
|
29
|
+
// Exit alternate screen buffer
|
|
30
|
+
'\x1b[?1049l', // Exit alt screen + restore cursor
|
|
31
|
+
'\x1b[?47l', // Legacy: exit alt screen
|
|
32
|
+
'\x1b[?1047l', // Legacy: another alt screen mode
|
|
33
|
+
].join('');
|
|
34
|
+
let hasCleanedUp = false;
|
|
35
|
+
/**
|
|
36
|
+
* Write terminal restoration sequences to stdout.
|
|
37
|
+
* Idempotent - safe to call multiple times.
|
|
38
|
+
*
|
|
39
|
+
* This is a FALLBACK for crash scenarios. Normal exit should use
|
|
40
|
+
* renderer.destroy() which handles cleanup properly.
|
|
41
|
+
*/
|
|
42
|
+
export function restoreTerminalState() {
|
|
43
|
+
if (hasCleanedUp)
|
|
44
|
+
return;
|
|
45
|
+
hasCleanedUp = true;
|
|
46
|
+
try {
|
|
47
|
+
process.stdout.write(TERMINAL_CLEANUP_SEQUENCES);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Ignore write errors (stdout may be closed)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reset cleanup state (for testing purposes).
|
|
55
|
+
*/
|
|
56
|
+
export function resetCleanupState() {
|
|
57
|
+
hasCleanedUp = false;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/tui/utils/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,mCAAmC;IACnC,aAAa,EAAG,iBAAiB;IACjC,aAAa,EAAG,cAAc;IAC9B,aAAa,EAAG,6CAA6C;IAC7D,aAAa,EAAG,cAAc;IAC9B,aAAa,EAAG,eAAe;IAC/B,aAAa,EAAG,oCAAoC;IACpD,aAAa,EAAG,qCAAqC;IACrD,aAAa,EAAG,kBAAkB;IAClC,aAAa,EAAG,cAAc;IAC9B,UAAU,EAAM,YAAY;IAE5B,8DAA8D;IAC9D,SAAS,EAAO,iDAAiD;IACjE,YAAY,EAAI,kCAAkC;IAElD,+BAA+B;IAC/B,aAAa;IAEb,gCAAgC;IAChC,WAAW,EAAK,wBAAwB;IACxC,SAAS,EAAO,oCAAoC;IAEpD,+BAA+B;IAC/B,aAAa,EAAG,mCAAmC;IACnD,WAAW,EAAK,0BAA0B;IAC1C,aAAa,EAAG,kCAAkC;CACnD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,IAAI,CAAC;IAEpB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SourceType } from "../types/index.js";
|
|
2
|
+
export declare const PROVIDER_COLORS: {
|
|
3
|
+
readonly anthropic: "#FF6B35";
|
|
4
|
+
readonly openai: "#10B981";
|
|
5
|
+
readonly google: "#3B82F6";
|
|
6
|
+
readonly cursor: "#8B5CF6";
|
|
7
|
+
readonly opencode: "#6B7280";
|
|
8
|
+
readonly deepseek: "#06B6D4";
|
|
9
|
+
readonly xai: "#EAB308";
|
|
10
|
+
readonly meta: "#6366F1";
|
|
11
|
+
readonly unknown: "#FFFFFF";
|
|
12
|
+
};
|
|
13
|
+
export type ProviderType = keyof typeof PROVIDER_COLORS;
|
|
14
|
+
export declare function getProviderFromModel(modelId: string): ProviderType;
|
|
15
|
+
export declare function getModelColor(modelId: string): string;
|
|
16
|
+
export declare const SOURCE_COLORS: Record<SourceType, string>;
|
|
17
|
+
export declare function getSourceColor(source: SourceType | string): string;
|
|
18
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/colors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,eAAe;;;;;;;;;;CAUlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,eAAe,CAAC;AAexD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAclE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAMpD,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export const PROVIDER_COLORS = {
|
|
2
|
+
anthropic: "#FF6B35",
|
|
3
|
+
openai: "#10B981",
|
|
4
|
+
google: "#3B82F6",
|
|
5
|
+
cursor: "#8B5CF6",
|
|
6
|
+
opencode: "#6B7280",
|
|
7
|
+
deepseek: "#06B6D4",
|
|
8
|
+
xai: "#EAB308",
|
|
9
|
+
meta: "#6366F1",
|
|
10
|
+
unknown: "#FFFFFF",
|
|
11
|
+
};
|
|
12
|
+
const PROVIDER_PATTERNS = [
|
|
13
|
+
[/claude|sonnet|opus|haiku/i, "anthropic"],
|
|
14
|
+
[/gpt|^o1|^o3|codex|text-embedding|dall-e|whisper|tts/i, "openai"],
|
|
15
|
+
[/gemini/i, "google"],
|
|
16
|
+
[/deepseek/i, "deepseek"],
|
|
17
|
+
[/grok/i, "xai"],
|
|
18
|
+
[/llama|mixtral/i, "meta"],
|
|
19
|
+
[/^auto$|cursor/i, "cursor"],
|
|
20
|
+
];
|
|
21
|
+
const providerCache = new Map();
|
|
22
|
+
const colorCache = new Map();
|
|
23
|
+
export function getProviderFromModel(modelId) {
|
|
24
|
+
const cached = providerCache.get(modelId);
|
|
25
|
+
if (cached)
|
|
26
|
+
return cached;
|
|
27
|
+
let provider = "unknown";
|
|
28
|
+
for (const [pattern, type] of PROVIDER_PATTERNS) {
|
|
29
|
+
if (pattern.test(modelId)) {
|
|
30
|
+
provider = type;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
providerCache.set(modelId, provider);
|
|
35
|
+
return provider;
|
|
36
|
+
}
|
|
37
|
+
export function getModelColor(modelId) {
|
|
38
|
+
const cached = colorCache.get(modelId);
|
|
39
|
+
if (cached)
|
|
40
|
+
return cached;
|
|
41
|
+
const color = PROVIDER_COLORS[getProviderFromModel(modelId)];
|
|
42
|
+
colorCache.set(modelId, color);
|
|
43
|
+
return color;
|
|
44
|
+
}
|
|
45
|
+
export const SOURCE_COLORS = {
|
|
46
|
+
opencode: "#22c55e",
|
|
47
|
+
claude: "#f97316",
|
|
48
|
+
codex: "#3b82f6",
|
|
49
|
+
cursor: "#a855f7",
|
|
50
|
+
gemini: "#06b6d4",
|
|
51
|
+
};
|
|
52
|
+
export function getSourceColor(source) {
|
|
53
|
+
return SOURCE_COLORS[source] || "#888888";
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../../src/tui/utils/colors.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,SAAS;CACV,CAAC;AAIX,MAAM,iBAAiB,GAAsC;IAC3D,CAAC,2BAA2B,EAAE,WAAW,CAAC;IAC1C,CAAC,sDAAsD,EAAE,QAAQ,CAAC;IAClE,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,gBAAgB,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEX,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;AACtD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE7C,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,QAAQ,GAAiB,SAAS,CAAC;IACvC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACR,CAAC;IACH,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,KAAK,GAAG,eAAe,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAA2B;IACxD,OAAO,aAAa,CAAC,MAAoB,CAAC,IAAI,SAAS,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function formatTokens(n: number): string;
|
|
2
|
+
export declare function formatTokensShort(n: number): string;
|
|
3
|
+
export declare function formatTokensCompact(n: number): string;
|
|
4
|
+
export declare function formatCost(cost: number): string;
|
|
5
|
+
export declare function formatCostFull(cost: number): string;
|
|
6
|
+
export declare function formatPercentage(value: number): string;
|
|
7
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGtD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function formatTokens(n) {
|
|
2
|
+
if (!Number.isFinite(n) || n < 0)
|
|
3
|
+
return "0";
|
|
4
|
+
return n.toLocaleString();
|
|
5
|
+
}
|
|
6
|
+
export function formatTokensShort(n) {
|
|
7
|
+
if (!Number.isFinite(n) || n < 0)
|
|
8
|
+
return "0";
|
|
9
|
+
if (n >= 1_000_000_000)
|
|
10
|
+
return `${(n / 1_000_000_000).toFixed(1)}B`;
|
|
11
|
+
if (n >= 1_000_000)
|
|
12
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
13
|
+
if (n >= 1_000)
|
|
14
|
+
return `${(n / 1_000).toFixed(1)}K`;
|
|
15
|
+
return n.toLocaleString();
|
|
16
|
+
}
|
|
17
|
+
export function formatTokensCompact(n) {
|
|
18
|
+
if (!Number.isFinite(n) || n < 0)
|
|
19
|
+
return "0";
|
|
20
|
+
if (n >= 1_000_000_000)
|
|
21
|
+
return `${(n / 1_000_000_000).toFixed(1)}B`;
|
|
22
|
+
if (n >= 1_000_000)
|
|
23
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
24
|
+
if (n >= 1_000)
|
|
25
|
+
return `${(n / 1_000).toFixed(0)}K`;
|
|
26
|
+
return n.toLocaleString();
|
|
27
|
+
}
|
|
28
|
+
export function formatCost(cost) {
|
|
29
|
+
if (!Number.isFinite(cost) || cost < 0)
|
|
30
|
+
return "$0.00";
|
|
31
|
+
if (cost >= 1000)
|
|
32
|
+
return `$${(cost / 1000).toFixed(1)}K`;
|
|
33
|
+
return `$${cost.toFixed(2)}`;
|
|
34
|
+
}
|
|
35
|
+
export function formatCostFull(cost) {
|
|
36
|
+
if (!Number.isFinite(cost) || cost < 0)
|
|
37
|
+
return "$0.00";
|
|
38
|
+
return `$${cost.toFixed(2)}`;
|
|
39
|
+
}
|
|
40
|
+
export function formatPercentage(value) {
|
|
41
|
+
if (!Number.isFinite(value))
|
|
42
|
+
return "0.0%";
|
|
43
|
+
return `${value.toFixed(1)}%`;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/tui/utils/format.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,CAAC,IAAI,aAAa;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,CAAC,IAAI,aAAa;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpE,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACvD,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACvD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const NARROW_TERMINAL_WIDTH = 80;
|
|
2
|
+
export declare const VERY_NARROW_TERMINAL_WIDTH = 60;
|
|
3
|
+
export declare const isNarrow: (width: number | undefined) => boolean;
|
|
4
|
+
export declare const isVeryNarrow: (width: number | undefined) => boolean;
|
|
5
|
+
//# sourceMappingURL=responsive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/responsive.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,OACb,CAAC;AAEzC,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,OACZ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const NARROW_TERMINAL_WIDTH = 80;
|
|
2
|
+
export const VERY_NARROW_TERMINAL_WIDTH = 60;
|
|
3
|
+
export const isNarrow = (width) => (width ?? 100) < NARROW_TERMINAL_WIDTH;
|
|
4
|
+
export const isVeryNarrow = (width) => (width ?? 100) < VERY_NARROW_TERMINAL_WIDTH;
|
|
5
|
+
//# sourceMappingURL=responsive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive.js","sourceRoot":"","sources":["../../../src/tui/utils/responsive.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAW,EAAE,CAC7D,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,qBAAqB,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAyB,EAAW,EAAE,CACjE,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,0BAA0B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tokscale/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Calculate token prices from OpenCode, Claude Code, Codex, Gemini, and Cursor sessions",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/cli.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"tokscale": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**/*"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"registry": "https://registry.npmjs.org/",
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/junhoyeo/tokscale.git",
|
|
21
|
+
"directory": "packages/cli"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"dev": "bun src/cli.ts",
|
|
26
|
+
"dev:node": "tsx src/cli.ts",
|
|
27
|
+
"tui": "bun src/cli.ts tui",
|
|
28
|
+
"start": "node dist/cli.js",
|
|
29
|
+
"prepublishOnly": "bun run build"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@tokscale/core": "^1.0.0",
|
|
33
|
+
"@opentui/core": "0.1.60",
|
|
34
|
+
"@opentui/react": "^0.1.60",
|
|
35
|
+
"@opentui/solid": "^0.1.60",
|
|
36
|
+
"cli-table3": "^0.6.5",
|
|
37
|
+
"clipboardy": "^5.0.2",
|
|
38
|
+
"commander": "^14.0.2",
|
|
39
|
+
"csv-parse": "^5.6.0",
|
|
40
|
+
"date-fns": "^4.1.0",
|
|
41
|
+
"picocolors": "^1.1.1",
|
|
42
|
+
"react": "^19.2.3",
|
|
43
|
+
"solid-js": "1.9.9",
|
|
44
|
+
"string-width": "^8.1.0"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^20.0.0",
|
|
48
|
+
"@types/react": "^19.2.7",
|
|
49
|
+
"tsx": "^4.0.0",
|
|
50
|
+
"typescript": "^5.0.0"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">= 18"
|
|
54
|
+
},
|
|
55
|
+
"keywords": [
|
|
56
|
+
"tokscale",
|
|
57
|
+
"opencode",
|
|
58
|
+
"claude-code",
|
|
59
|
+
"cursor",
|
|
60
|
+
"gemini",
|
|
61
|
+
"codex",
|
|
62
|
+
"cli"
|
|
63
|
+
]
|
|
64
|
+
}
|