@tokscale/cli 1.4.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +128 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +19 -26
  6. package/dist/auth.d.ts +0 -17
  7. package/dist/auth.d.ts.map +0 -1
  8. package/dist/auth.js +0 -162
  9. package/dist/auth.js.map +0 -1
  10. package/dist/cli.d.ts +0 -9
  11. package/dist/cli.d.ts.map +0 -1
  12. package/dist/cli.js +0 -1550
  13. package/dist/cli.js.map +0 -1
  14. package/dist/credentials.d.ts +0 -50
  15. package/dist/credentials.d.ts.map +0 -1
  16. package/dist/credentials.js +0 -151
  17. package/dist/credentials.js.map +0 -1
  18. package/dist/cursor.d.ts +0 -167
  19. package/dist/cursor.d.ts.map +0 -1
  20. package/dist/cursor.js +0 -906
  21. package/dist/cursor.js.map +0 -1
  22. package/dist/date-utils.d.ts +0 -10
  23. package/dist/date-utils.d.ts.map +0 -1
  24. package/dist/date-utils.js +0 -47
  25. package/dist/date-utils.js.map +0 -1
  26. package/dist/graph-types.d.ts +0 -142
  27. package/dist/graph-types.d.ts.map +0 -1
  28. package/dist/graph-types.js +0 -6
  29. package/dist/graph-types.js.map +0 -1
  30. package/dist/native-runner.d.ts +0 -11
  31. package/dist/native-runner.d.ts.map +0 -1
  32. package/dist/native-runner.js +0 -77
  33. package/dist/native-runner.js.map +0 -1
  34. package/dist/native.d.ts +0 -106
  35. package/dist/native.d.ts.map +0 -1
  36. package/dist/native.js +0 -302
  37. package/dist/native.js.map +0 -1
  38. package/dist/sessions/types.d.ts +0 -28
  39. package/dist/sessions/types.d.ts.map +0 -1
  40. package/dist/sessions/types.js +0 -27
  41. package/dist/sessions/types.js.map +0 -1
  42. package/dist/spinner.d.ts +0 -75
  43. package/dist/spinner.d.ts.map +0 -1
  44. package/dist/spinner.js +0 -203
  45. package/dist/spinner.js.map +0 -1
  46. package/dist/submit.d.ts +0 -23
  47. package/dist/submit.d.ts.map +0 -1
  48. package/dist/submit.js +0 -294
  49. package/dist/submit.js.map +0 -1
  50. package/dist/table.d.ts +0 -42
  51. package/dist/table.d.ts.map +0 -1
  52. package/dist/table.js +0 -181
  53. package/dist/table.js.map +0 -1
  54. package/dist/tui/App.d.ts +0 -4
  55. package/dist/tui/App.d.ts.map +0 -1
  56. package/dist/tui/App.js +0 -333
  57. package/dist/tui/App.js.map +0 -1
  58. package/dist/tui/components/BarChart.d.ts +0 -17
  59. package/dist/tui/components/BarChart.d.ts.map +0 -1
  60. package/dist/tui/components/BarChart.js +0 -146
  61. package/dist/tui/components/BarChart.js.map +0 -1
  62. package/dist/tui/components/DailyView.d.ts +0 -13
  63. package/dist/tui/components/DailyView.d.ts.map +0 -1
  64. package/dist/tui/components/DailyView.js +0 -86
  65. package/dist/tui/components/DailyView.js.map +0 -1
  66. package/dist/tui/components/DateBreakdownPanel.d.ts +0 -7
  67. package/dist/tui/components/DateBreakdownPanel.d.ts.map +0 -1
  68. package/dist/tui/components/DateBreakdownPanel.js +0 -36
  69. package/dist/tui/components/DateBreakdownPanel.js.map +0 -1
  70. package/dist/tui/components/Footer.d.ts +0 -28
  71. package/dist/tui/components/Footer.d.ts.map +0 -1
  72. package/dist/tui/components/Footer.js +0 -130
  73. package/dist/tui/components/Footer.js.map +0 -1
  74. package/dist/tui/components/Header.d.ts +0 -9
  75. package/dist/tui/components/Header.d.ts.map +0 -1
  76. package/dist/tui/components/Header.js +0 -20
  77. package/dist/tui/components/Header.js.map +0 -1
  78. package/dist/tui/components/Legend.d.ts +0 -7
  79. package/dist/tui/components/Legend.d.ts.map +0 -1
  80. package/dist/tui/components/Legend.js +0 -16
  81. package/dist/tui/components/Legend.js.map +0 -1
  82. package/dist/tui/components/LoadingSpinner.d.ts +0 -8
  83. package/dist/tui/components/LoadingSpinner.d.ts.map +0 -1
  84. package/dist/tui/components/LoadingSpinner.js +0 -55
  85. package/dist/tui/components/LoadingSpinner.js.map +0 -1
  86. package/dist/tui/components/ModelRow.d.ts +0 -13
  87. package/dist/tui/components/ModelRow.d.ts.map +0 -1
  88. package/dist/tui/components/ModelRow.js +0 -15
  89. package/dist/tui/components/ModelRow.js.map +0 -1
  90. package/dist/tui/components/ModelView.d.ts +0 -13
  91. package/dist/tui/components/ModelView.d.ts.map +0 -1
  92. package/dist/tui/components/ModelView.js +0 -96
  93. package/dist/tui/components/ModelView.js.map +0 -1
  94. package/dist/tui/components/OverviewView.d.ts +0 -14
  95. package/dist/tui/components/OverviewView.d.ts.map +0 -1
  96. package/dist/tui/components/OverviewView.js +0 -65
  97. package/dist/tui/components/OverviewView.js.map +0 -1
  98. package/dist/tui/components/StatsView.d.ts +0 -14
  99. package/dist/tui/components/StatsView.d.ts.map +0 -1
  100. package/dist/tui/components/StatsView.js +0 -102
  101. package/dist/tui/components/StatsView.js.map +0 -1
  102. package/dist/tui/components/TokenBreakdown.d.ts +0 -14
  103. package/dist/tui/components/TokenBreakdown.d.ts.map +0 -1
  104. package/dist/tui/components/TokenBreakdown.js +0 -10
  105. package/dist/tui/components/TokenBreakdown.js.map +0 -1
  106. package/dist/tui/components/index.d.ts +0 -16
  107. package/dist/tui/components/index.d.ts.map +0 -1
  108. package/dist/tui/components/index.js +0 -13
  109. package/dist/tui/components/index.js.map +0 -1
  110. package/dist/tui/config/settings.d.ts +0 -15
  111. package/dist/tui/config/settings.d.ts.map +0 -1
  112. package/dist/tui/config/settings.js +0 -147
  113. package/dist/tui/config/settings.js.map +0 -1
  114. package/dist/tui/config/themes.d.ts +0 -15
  115. package/dist/tui/config/themes.d.ts.map +0 -1
  116. package/dist/tui/config/themes.js +0 -82
  117. package/dist/tui/config/themes.js.map +0 -1
  118. package/dist/tui/hooks/useData.d.ts +0 -19
  119. package/dist/tui/hooks/useData.d.ts.map +0 -1
  120. package/dist/tui/hooks/useData.js +0 -468
  121. package/dist/tui/hooks/useData.js.map +0 -1
  122. package/dist/tui/index.d.ts +0 -4
  123. package/dist/tui/index.d.ts.map +0 -1
  124. package/dist/tui/index.js +0 -36
  125. package/dist/tui/index.js.map +0 -1
  126. package/dist/tui/types/index.d.ts +0 -137
  127. package/dist/tui/types/index.d.ts.map +0 -1
  128. package/dist/tui/types/index.js +0 -26
  129. package/dist/tui/types/index.js.map +0 -1
  130. package/dist/tui/utils/cleanup.d.ts +0 -22
  131. package/dist/tui/utils/cleanup.d.ts.map +0 -1
  132. package/dist/tui/utils/cleanup.js +0 -59
  133. package/dist/tui/utils/cleanup.js.map +0 -1
  134. package/dist/tui/utils/colors.d.ts +0 -19
  135. package/dist/tui/utils/colors.d.ts.map +0 -1
  136. package/dist/tui/utils/colors.js +0 -71
  137. package/dist/tui/utils/colors.js.map +0 -1
  138. package/dist/tui/utils/format.d.ts +0 -7
  139. package/dist/tui/utils/format.d.ts.map +0 -1
  140. package/dist/tui/utils/format.js +0 -45
  141. package/dist/tui/utils/format.js.map +0 -1
  142. package/dist/tui/utils/responsive.d.ts +0 -5
  143. package/dist/tui/utils/responsive.d.ts.map +0 -1
  144. package/dist/tui/utils/responsive.js +0 -5
  145. package/dist/tui/utils/responsive.js.map +0 -1
  146. package/dist/wrapped.d.ts +0 -43
  147. package/dist/wrapped.d.ts.map +0 -1
  148. package/dist/wrapped.js +0 -719
  149. package/dist/wrapped.js.map +0 -1
  150. package/src/auth.ts +0 -211
  151. package/src/cli.ts +0 -1892
  152. package/src/credentials.ts +0 -176
  153. package/src/cursor.ts +0 -1044
  154. package/src/date-utils.ts +0 -51
  155. package/src/graph-types.ts +0 -175
  156. package/src/native-runner.js +0 -4
  157. package/src/native-runner.ts +0 -91
  158. package/src/native.ts +0 -633
  159. package/src/sessions/types.ts +0 -59
  160. package/src/spinner.ts +0 -283
  161. package/src/submit.ts +0 -360
  162. package/src/table.ts +0 -233
  163. package/src/tui/App.tsx +0 -453
  164. package/src/tui/components/BarChart.tsx +0 -205
  165. package/src/tui/components/DailyView.tsx +0 -132
  166. package/src/tui/components/DateBreakdownPanel.tsx +0 -79
  167. package/src/tui/components/Footer.tsx +0 -380
  168. package/src/tui/components/Header.tsx +0 -68
  169. package/src/tui/components/Legend.tsx +0 -39
  170. package/src/tui/components/LoadingSpinner.tsx +0 -81
  171. package/src/tui/components/ModelRow.tsx +0 -47
  172. package/src/tui/components/ModelView.tsx +0 -147
  173. package/src/tui/components/OverviewView.tsx +0 -121
  174. package/src/tui/components/StatsView.tsx +0 -249
  175. package/src/tui/components/TokenBreakdown.tsx +0 -46
  176. package/src/tui/components/index.ts +0 -15
  177. package/src/tui/config/settings.ts +0 -183
  178. package/src/tui/config/themes.ts +0 -115
  179. package/src/tui/hooks/useData.ts +0 -558
  180. package/src/tui/index.tsx +0 -44
  181. package/src/tui/opentui.d.ts +0 -166
  182. package/src/tui/types/index.ts +0 -173
  183. package/src/tui/utils/cleanup.ts +0 -65
  184. package/src/tui/utils/colors.ts +0 -78
  185. package/src/tui/utils/format.ts +0 -36
  186. package/src/tui/utils/responsive.ts +0 -8
  187. package/src/types.d.ts +0 -28
  188. package/src/wrapped.ts +0 -848
@@ -1,183 +0,0 @@
1
- import { homedir } from "os";
2
- import { join } from "path";
3
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
4
- import type { TUIData, DailyModelBreakdown } from "../types/index.js";
5
-
6
- const CONFIG_DIR = join(homedir(), ".config", "tokscale");
7
- const CACHE_DIR = join(homedir(), ".cache", "tokscale");
8
- const CONFIG_FILE = join(CONFIG_DIR, "settings.json");
9
- const LEGACY_CONFIG_FILE = join(CONFIG_DIR, "tui-settings.json");
10
- const CACHE_FILE = join(CACHE_DIR, "tui-data-cache.json");
11
-
12
- const CACHE_STALE_THRESHOLD_MS = 60 * 1000;
13
- const MIN_AUTO_REFRESH_MS = 30000;
14
- const MAX_AUTO_REFRESH_MS = 3600000;
15
- const DEFAULT_AUTO_REFRESH_MS = 60000;
16
-
17
- const DEFAULT_NATIVE_TIMEOUT_MS = 300_000; // 5 minutes
18
- const MIN_NATIVE_TIMEOUT_MS = 5_000; // 5 seconds
19
- const MAX_NATIVE_TIMEOUT_MS = 3_600_000; // 1 hour
20
-
21
- export interface TokscaleSettings {
22
- colorPalette: string;
23
- autoRefreshEnabled?: boolean;
24
- autoRefreshMs?: number;
25
- includeUnusedModels?: boolean;
26
- nativeTimeoutMs?: number;
27
- }
28
-
29
- function validateSettings(raw: unknown): TokscaleSettings {
30
- const defaults: TokscaleSettings = {
31
- colorPalette: "blue",
32
- autoRefreshEnabled: false,
33
- autoRefreshMs: DEFAULT_AUTO_REFRESH_MS,
34
- includeUnusedModels: false,
35
- nativeTimeoutMs: DEFAULT_NATIVE_TIMEOUT_MS,
36
- };
37
-
38
- if (!raw || typeof raw !== "object") return defaults;
39
-
40
- const obj = raw as Record<string, unknown>;
41
-
42
- const colorPalette = typeof obj.colorPalette === "string" ? obj.colorPalette : defaults.colorPalette;
43
- const autoRefreshEnabled = typeof obj.autoRefreshEnabled === "boolean" ? obj.autoRefreshEnabled : defaults.autoRefreshEnabled;
44
-
45
- let autoRefreshMs = defaults.autoRefreshMs;
46
- if (typeof obj.autoRefreshMs === "number" && Number.isFinite(obj.autoRefreshMs)) {
47
- autoRefreshMs = Math.min(MAX_AUTO_REFRESH_MS, Math.max(MIN_AUTO_REFRESH_MS, obj.autoRefreshMs));
48
- }
49
-
50
- const includeUnusedModels = typeof obj.includeUnusedModels === "boolean" ? obj.includeUnusedModels : defaults.includeUnusedModels;
51
-
52
- let nativeTimeoutMs = defaults.nativeTimeoutMs;
53
- if (typeof obj.nativeTimeoutMs === "number" && Number.isFinite(obj.nativeTimeoutMs)) {
54
- nativeTimeoutMs = Math.min(MAX_NATIVE_TIMEOUT_MS, Math.max(MIN_NATIVE_TIMEOUT_MS, obj.nativeTimeoutMs));
55
- }
56
-
57
- return { colorPalette, autoRefreshEnabled, autoRefreshMs, includeUnusedModels, nativeTimeoutMs };
58
- }
59
-
60
- interface CachedTUIData {
61
- timestamp: number;
62
- enabledSources: string[];
63
- data: Omit<TUIData, 'dailyBreakdowns'> & {
64
- dailyBreakdowns: Array<[string, DailyModelBreakdown]>;
65
- };
66
- }
67
-
68
- export function loadSettings(): TokscaleSettings {
69
- try {
70
- if (existsSync(CONFIG_FILE)) {
71
- const raw = JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
72
- return validateSettings(raw);
73
- }
74
- if (existsSync(LEGACY_CONFIG_FILE)) {
75
- const raw = JSON.parse(readFileSync(LEGACY_CONFIG_FILE, "utf-8"));
76
- return validateSettings(raw);
77
- }
78
- } catch {
79
- }
80
- return { colorPalette: "blue", autoRefreshEnabled: false, autoRefreshMs: DEFAULT_AUTO_REFRESH_MS, includeUnusedModels: false, nativeTimeoutMs: DEFAULT_NATIVE_TIMEOUT_MS };
81
- }
82
-
83
- export function saveSettings(updates: Partial<TokscaleSettings>): void {
84
- try {
85
- if (!existsSync(CONFIG_DIR)) {
86
- mkdirSync(CONFIG_DIR, { recursive: true });
87
- }
88
- const current = loadSettings();
89
- const merged = { ...current, ...updates };
90
- writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2));
91
- } catch {
92
- }
93
- }
94
-
95
- function sourcesMatch(enabledSources: Set<string>, cachedSources: string[]): boolean {
96
- const cachedSet = new Set(cachedSources);
97
- if (enabledSources.size !== cachedSet.size) {
98
- return false;
99
- }
100
- for (const source of enabledSources) {
101
- if (!cachedSet.has(source)) {
102
- return false;
103
- }
104
- }
105
- return true;
106
- }
107
-
108
- export function loadCachedData(enabledSources: Set<string>): TUIData | null {
109
- try {
110
- if (!existsSync(CACHE_FILE)) {
111
- return null;
112
- }
113
-
114
- const cached: CachedTUIData = JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
115
-
116
- if (!sourcesMatch(enabledSources, cached.enabledSources)) {
117
- return null;
118
- }
119
-
120
- if (!cached.data.dailyBreakdowns || !Array.isArray(cached.data.dailyBreakdowns)) {
121
- return null;
122
- }
123
-
124
- return {
125
- ...cached.data,
126
- dailyBreakdowns: new Map(cached.data.dailyBreakdowns),
127
- };
128
- } catch {
129
- return null;
130
- }
131
- }
132
-
133
- export function saveCachedData(data: TUIData, enabledSources: Set<string>): void {
134
- try {
135
- if (!existsSync(CACHE_DIR)) {
136
- mkdirSync(CACHE_DIR, { recursive: true });
137
- }
138
-
139
- const serializableBreakdowns = Array.from(data.dailyBreakdowns.entries());
140
- const cached: CachedTUIData = {
141
- timestamp: Date.now(),
142
- enabledSources: Array.from(enabledSources),
143
- data: {
144
- ...data,
145
- dailyBreakdowns: serializableBreakdowns,
146
- },
147
- };
148
-
149
- writeFileSync(CACHE_FILE, JSON.stringify(cached));
150
- } catch {
151
- }
152
- }
153
-
154
- export function isCacheStale(enabledSources: Set<string>): boolean {
155
- try {
156
- if (!existsSync(CACHE_FILE)) {
157
- return true;
158
- }
159
-
160
- const cached: CachedTUIData = JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
161
- const cacheAge = Date.now() - cached.timestamp;
162
-
163
- if (!sourcesMatch(enabledSources, cached.enabledSources)) {
164
- return true;
165
- }
166
-
167
- return cacheAge > CACHE_STALE_THRESHOLD_MS;
168
- } catch {
169
- return true;
170
- }
171
- }
172
-
173
- export function getCacheTimestamp(): number | null {
174
- try {
175
- if (!existsSync(CACHE_FILE)) {
176
- return null;
177
- }
178
- const cached: CachedTUIData = JSON.parse(readFileSync(CACHE_FILE, "utf-8"));
179
- return cached.timestamp;
180
- } catch {
181
- return null;
182
- }
183
- }
@@ -1,115 +0,0 @@
1
- export interface GraphColorPalette {
2
- name: string;
3
- grade0: string;
4
- grade1: string;
5
- grade2: string;
6
- grade3: string;
7
- grade4: string;
8
- }
9
-
10
- export type ColorPaletteName =
11
- | "green"
12
- | "halloween"
13
- | "teal"
14
- | "blue"
15
- | "pink"
16
- | "purple"
17
- | "orange"
18
- | "monochrome"
19
- | "YlGnBu";
20
-
21
- const GRAPH_EMPTY = "#1F1F20";
22
-
23
- export const colorPalettes: Record<ColorPaletteName, GraphColorPalette> = {
24
- green: {
25
- name: "Green",
26
- grade0: GRAPH_EMPTY,
27
- grade1: "#9be9a8",
28
- grade2: "#40c463",
29
- grade3: "#30a14e",
30
- grade4: "#216e39",
31
- },
32
- halloween: {
33
- name: "Halloween",
34
- grade0: GRAPH_EMPTY,
35
- grade1: "#FFEE4A",
36
- grade2: "#FFC501",
37
- grade3: "#FE9600",
38
- grade4: "#03001C",
39
- },
40
- teal: {
41
- name: "Teal",
42
- grade0: GRAPH_EMPTY,
43
- grade1: "#7ee5e5",
44
- grade2: "#2dc5c5",
45
- grade3: "#0d9e9e",
46
- grade4: "#0e6d6d",
47
- },
48
- blue: {
49
- name: "Blue",
50
- grade0: GRAPH_EMPTY,
51
- grade1: "#79b8ff",
52
- grade2: "#388bfd",
53
- grade3: "#1f6feb",
54
- grade4: "#0d419d",
55
- },
56
- pink: {
57
- name: "Pink",
58
- grade0: GRAPH_EMPTY,
59
- grade1: "#f0b5d2",
60
- grade2: "#d961a0",
61
- grade3: "#bf4b8a",
62
- grade4: "#99286e",
63
- },
64
- purple: {
65
- name: "Purple",
66
- grade0: GRAPH_EMPTY,
67
- grade1: "#cdb4ff",
68
- grade2: "#a371f7",
69
- grade3: "#8957e5",
70
- grade4: "#6e40c9",
71
- },
72
- orange: {
73
- name: "Orange",
74
- grade0: GRAPH_EMPTY,
75
- grade1: "#ffd699",
76
- grade2: "#ffb347",
77
- grade3: "#ff8c00",
78
- grade4: "#cc5500",
79
- },
80
- monochrome: {
81
- name: "Monochrome",
82
- grade0: GRAPH_EMPTY,
83
- grade1: "#9e9e9e",
84
- grade2: "#757575",
85
- grade3: "#424242",
86
- grade4: "#212121",
87
- },
88
- YlGnBu: {
89
- name: "YlGnBu",
90
- grade0: GRAPH_EMPTY,
91
- grade1: "#a1dab4",
92
- grade2: "#41b6c4",
93
- grade3: "#2c7fb8",
94
- grade4: "#253494",
95
- },
96
- };
97
-
98
- export const DEFAULT_PALETTE: ColorPaletteName = "blue";
99
-
100
- export const getPaletteNames = (): ColorPaletteName[] =>
101
- Object.keys(colorPalettes) as ColorPaletteName[];
102
-
103
- export const getPalette = (name: ColorPaletteName): GraphColorPalette =>
104
- colorPalettes[name] || colorPalettes[DEFAULT_PALETTE];
105
-
106
- export const getGradeColor = (
107
- palette: GraphColorPalette,
108
- intensity: 0 | 1 | 2 | 3 | 4
109
- ): string => {
110
- return (
111
- [palette.grade0, palette.grade1, palette.grade2, palette.grade3, palette.grade4][
112
- intensity
113
- ] || palette.grade0
114
- );
115
- };