@tokscale/cli 1.1.2 → 1.2.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 (44) hide show
  1. package/dist/cli.js +86 -10
  2. package/dist/cli.js.map +1 -1
  3. package/dist/graph-types.d.ts +1 -1
  4. package/dist/graph-types.d.ts.map +1 -1
  5. package/dist/native.d.ts +1 -0
  6. package/dist/native.d.ts.map +1 -1
  7. package/dist/native.js.map +1 -1
  8. package/dist/sessions/types.d.ts +1 -1
  9. package/dist/sessions/types.d.ts.map +1 -1
  10. package/dist/submit.d.ts +1 -0
  11. package/dist/submit.d.ts.map +1 -1
  12. package/dist/submit.js +3 -1
  13. package/dist/submit.js.map +1 -1
  14. package/dist/tui/App.d.ts.map +1 -1
  15. package/dist/tui/App.js +8 -0
  16. package/dist/tui/App.js.map +1 -1
  17. package/dist/tui/components/Footer.d.ts.map +1 -1
  18. package/dist/tui/components/Footer.js +1 -1
  19. package/dist/tui/components/Footer.js.map +1 -1
  20. package/dist/tui/hooks/useData.d.ts.map +1 -1
  21. package/dist/tui/hooks/useData.js +2 -1
  22. package/dist/tui/hooks/useData.js.map +1 -1
  23. package/dist/tui/types/index.d.ts +1 -1
  24. package/dist/tui/types/index.d.ts.map +1 -1
  25. package/dist/tui/types/index.js +2 -1
  26. package/dist/tui/types/index.js.map +1 -1
  27. package/dist/tui/utils/colors.d.ts.map +1 -1
  28. package/dist/tui/utils/colors.js +3 -0
  29. package/dist/tui/utils/colors.js.map +1 -1
  30. package/dist/wrapped.d.ts.map +1 -1
  31. package/dist/wrapped.js +7 -2
  32. package/dist/wrapped.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/cli.ts +90 -11
  35. package/src/graph-types.ts +1 -1
  36. package/src/native.ts +2 -0
  37. package/src/sessions/types.ts +1 -1
  38. package/src/submit.ts +4 -2
  39. package/src/tui/App.tsx +2 -0
  40. package/src/tui/components/Footer.tsx +12 -0
  41. package/src/tui/hooks/useData.ts +3 -2
  42. package/src/tui/types/index.ts +3 -2
  43. package/src/tui/utils/colors.ts +2 -0
  44. package/src/wrapped.ts +8 -3
package/src/wrapped.ts CHANGED
@@ -63,6 +63,8 @@ const SOURCE_DISPLAY_NAMES: Record<string, string> = {
63
63
  gemini: "Gemini CLI",
64
64
  cursor: "Cursor IDE",
65
65
  amp: "Amp",
66
+ droid: "Droid",
67
+ openclaw: "OpenClaw",
66
68
  };
67
69
 
68
70
  const ASSETS_BASE_URL = "https://tokscale.ai/assets/logos";
@@ -93,6 +95,8 @@ const CLIENT_LOGO_URLS: Record<string, string> = {
93
95
  "Gemini CLI": `${ASSETS_BASE_URL}/gemini.png`,
94
96
  "Cursor IDE": `${ASSETS_BASE_URL}/cursor.jpg`,
95
97
  "Amp": `${ASSETS_BASE_URL}/amp.png`,
98
+ "Droid": `${ASSETS_BASE_URL}/droid.png`,
99
+ "OpenClaw": `${ASSETS_BASE_URL}/openclaw.png`,
96
100
  };
97
101
 
98
102
  const PROVIDER_LOGO_URLS: Record<string, string> = {
@@ -210,8 +214,8 @@ async function ensureFontsLoaded(): Promise<void> {
210
214
 
211
215
  async function loadWrappedData(options: WrappedOptions): Promise<WrappedData> {
212
216
  const year = options.year || new Date().getFullYear().toString();
213
- const sources = options.sources || ["opencode", "claude", "codex", "gemini", "cursor", "amp", "droid"];
214
- const localSources = sources.filter(s => s !== "cursor") as ("opencode" | "claude" | "codex" | "gemini" | "amp" | "droid")[];
217
+ const sources = options.sources || ["opencode", "claude", "codex", "gemini", "cursor", "amp", "droid", "openclaw"];
218
+ const localSources = sources.filter(s => s !== "cursor") as ("opencode" | "claude" | "codex" | "gemini" | "amp" | "droid" | "openclaw")[];
215
219
  const includeCursor = sources.includes("cursor");
216
220
 
217
221
  const since = `${year}-01-01`;
@@ -221,7 +225,7 @@ async function loadWrappedData(options: WrappedOptions): Promise<WrappedData> {
221
225
  includeCursor && isCursorLoggedIn() ? syncCursorCache() : Promise.resolve({ synced: false, rows: 0, error: undefined }),
222
226
  localSources.length > 0
223
227
  ? parseLocalSourcesAsync({ sources: localSources, since, until, year })
224
- : Promise.resolve({ messages: [], opencodeCount: 0, claudeCount: 0, codexCount: 0, geminiCount: 0, ampCount: 0, droidCount: 0, processingTimeMs: 0 } as ParsedMessages),
228
+ : Promise.resolve({ messages: [], opencodeCount: 0, claudeCount: 0, codexCount: 0, geminiCount: 0, ampCount: 0, droidCount: 0, openclawCount: 0, processingTimeMs: 0 } as ParsedMessages),
225
229
  ]);
226
230
 
227
231
  const cursorSync = phase1Results[0].status === "fulfilled"
@@ -244,6 +248,7 @@ async function loadWrappedData(options: WrappedOptions): Promise<WrappedData> {
244
248
  geminiCount: 0,
245
249
  ampCount: 0,
246
250
  droidCount: 0,
251
+ openclawCount: 0,
247
252
  processingTimeMs: 0,
248
253
  };
249
254