tokentracker-cli 0.66.0 → 0.68.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 (49) hide show
  1. package/dashboard/dist/assets/{ActivityHeatmap-DF-kr0NR.js → ActivityHeatmap-Cd928Ptz.js} +1 -1
  2. package/dashboard/dist/assets/{Card-CSaEvN4m.js → Card--_I4rbLK.js} +1 -1
  3. package/dashboard/dist/assets/{ConfirmModal-UzNvSGGp.js → ConfirmModal-BJryA878.js} +1 -1
  4. package/dashboard/dist/assets/{DashboardPage-DNTQsA_w.js → DashboardPage-CikzR9-n.js} +1 -1
  5. package/dashboard/dist/assets/{DevicePage-DvcUHO4c.js → DevicePage-Cucg8IJm.js} +1 -1
  6. package/dashboard/dist/assets/{DialogTitle-010ZQYmP.js → DialogTitle-CBT-8O9t.js} +1 -1
  7. package/dashboard/dist/assets/{FadeIn-Cm_UaTdF.js → FadeIn-CJo3CY8P.js} +1 -1
  8. package/dashboard/dist/assets/{HeaderGithubStar-ww8SMsLF.js → HeaderGithubStar-DlIkA0ge.js} +1 -1
  9. package/dashboard/dist/assets/{IpCheckPage-CZSMcOvX.js → IpCheckPage-D11sDL_F.js} +1 -1
  10. package/dashboard/dist/assets/{LandingPage-ey67nVjv.js → LandingPage-BR1-nUHp.js} +1 -1
  11. package/dashboard/dist/assets/{LeaderboardAvatar-CXM9LWgN.js → LeaderboardAvatar-DbGYLk_s.js} +1 -1
  12. package/dashboard/dist/assets/LeaderboardPage-BFPX67-5.js +2 -0
  13. package/dashboard/dist/assets/{LeaderboardProfileModal-D_fw5Kqq.js → LeaderboardProfileModal-BFCT2cD1.js} +1 -1
  14. package/dashboard/dist/assets/{LeaderboardProfilePage-0w4_dyip.js → LeaderboardProfilePage-kYZ1Pk0J.js} +1 -1
  15. package/dashboard/dist/assets/LimitsPage-wsAp4jGy.js +4 -0
  16. package/dashboard/dist/assets/{LocalOnlyNotice-eauvwIMD.js → LocalOnlyNotice-DH4MorD1.js} +1 -1
  17. package/dashboard/dist/assets/{LoginPage-CNwagL_l.js → LoginPage-BNXijxzk.js} +1 -1
  18. package/dashboard/dist/assets/{PopoverPopup-iZ7Beq77.js → PopoverPopup-Dqz11HEi.js} +1 -1
  19. package/dashboard/dist/assets/{ResetPasswordPage-DjhH0aRj.js → ResetPasswordPage-CWvCPu5G.js} +1 -1
  20. package/dashboard/dist/assets/{Select-BllPJSRS.js → Select-B1n0PW4j.js} +1 -1
  21. package/dashboard/dist/assets/{SelectItemText-D2Fxx4K0.js → SelectItemText-BYGw7q1R.js} +1 -1
  22. package/dashboard/dist/assets/{SettingsPage-Bs0xbNi2.js → SettingsPage-CCwxdKVg.js} +1 -1
  23. package/dashboard/dist/assets/{SkillsPage-D49XABlB.js → SkillsPage-ds_IoVAo.js} +1 -1
  24. package/dashboard/dist/assets/{WidgetsPage-CWvGEtD-.js → WidgetsPage-DCI26iOU.js} +1 -1
  25. package/dashboard/dist/assets/{WrappedPage-DsJW2RUl.js → WrappedPage-CA9NmFM8.js} +1 -1
  26. package/dashboard/dist/assets/{agent-logos-D64DoSAe.js → agent-logos-BASBNeBF.js} +1 -1
  27. package/dashboard/dist/assets/{arrow-up-right-oxQ6lR4o.js → arrow-up-right-DfeFj5sx.js} +1 -1
  28. package/dashboard/dist/assets/{download-DnphRg-H.js → download-CAPdZzcq.js} +1 -1
  29. package/dashboard/dist/assets/{main-BHwig9Um.css → main-B6BudUsC.css} +1 -1
  30. package/dashboard/dist/assets/{main-CWm30bdS.js → main-QK2wZyt4.js} +5 -2
  31. package/dashboard/dist/assets/{use-limits-display-prefs-Bkv-utHR.js → use-limits-display-prefs-CC1SjRQA.js} +1 -1
  32. package/dashboard/dist/assets/{use-native-settings-PBAJG-qs.js → use-native-settings-BeV60g8D.js} +1 -1
  33. package/dashboard/dist/assets/{use-ordered-list-ewxLtUkH.js → use-ordered-list-DykwKTTq.js} +1 -1
  34. package/dashboard/dist/assets/{use-quality-per-dollar-pref-Dn770aLU.js → use-quality-per-dollar-pref-VMVZhzOm.js} +1 -1
  35. package/dashboard/dist/assets/{use-usage-limits-BmDqNK-u.js → use-usage-limits-CIwmIjBw.js} +1 -1
  36. package/dashboard/dist/assets/{useCurrency-Bpj2Olvn.js → useCurrency-Bm3doFX6.js} +1 -1
  37. package/dashboard/dist/assets/{useScrollLock-BlbfX49j.js → useScrollLock-DecJNW0u.js} +1 -1
  38. package/dashboard/dist/index.html +2 -2
  39. package/dashboard/dist/share.html +2 -2
  40. package/package.json +1 -1
  41. package/src/commands/status.js +2 -2
  42. package/src/commands/sync.js +151 -70
  43. package/src/lib/install-resolver.js +62 -0
  44. package/src/lib/multi-install-parser.js +103 -0
  45. package/src/lib/pricing/seed-snapshot.json +1 -1
  46. package/src/lib/rollout.js +104 -40
  47. package/src/lib/wsl-probe.js +21 -0
  48. package/dashboard/dist/assets/LeaderboardPage-D2YWAiNB.js +0 -2
  49. package/dashboard/dist/assets/LimitsPage-LW-WrU6Z.js +0 -3
@@ -7,6 +7,7 @@ const crypto = require("node:crypto");
7
7
  const { ensureDir } = require("./fs");
8
8
  const { readSqliteJsonRows } = require("./sqlite-reader");
9
9
  const wsl = require("./wsl-probe");
10
+ const { resolveInstallPaths } = require("./install-resolver");
10
11
 
11
12
  const DEFAULT_SOURCE = "codex";
12
13
  const DEFAULT_MODEL = "unknown";
@@ -3787,23 +3788,11 @@ function resolveHermesPath(env = process.env, deps = {}) {
3787
3788
  }
3788
3789
  const home = require("node:os").homedir();
3789
3790
  const defaultPath = path.join(home, ".hermes");
3790
- // On Windows, scan BOTH the native install (%LOCALAPPDATA%\hermes) and
3791
- // any WSL distros running Hermes Agent. Each install has its own independent
3792
- // state.db with different sessions, so there is no double-counting risk.
3793
- // TOKENTRACKER_WSL_MODE controls which source takes priority.
3794
3791
  if (process.platform === "win32") {
3795
- let nativePath = null;
3796
- if (wsl.shouldProbeNative(env)) {
3797
- const localAppData = typeof env.LOCALAPPDATA === "string" ? env.LOCALAPPDATA.trim() : "";
3798
- if (localAppData.length > 0) {
3799
- const candidate = path.join(localAppData, "hermes");
3800
- try {
3801
- if (fssync.existsSync(candidate)) nativePath = candidate;
3802
- } catch (_e) { }
3803
- }
3804
- }
3805
- const wslPath = wsl.shouldProbeWsl(env) ? discoverWslHermesHome(deps) : null;
3806
- const picked = wsl.pickWin32Path({ wslValue: wslPath, nativeValue: nativePath, env, platform: "win32" });
3792
+ const localAppData = typeof env.LOCALAPPDATA === "string" ? env.LOCALAPPDATA.trim() : "";
3793
+ const nativeValue = localAppData.length > 0 ? path.join(localAppData, "hermes") : null;
3794
+ const paths = resolveInstallPaths({ nativeValue, wslDir: ".hermes" }, env, deps);
3795
+ const picked = paths.native || paths.wsl;
3807
3796
  if (picked) return picked;
3808
3797
  const mode = wsl.getWslMode(env);
3809
3798
  if (mode === "wsl-only" || mode === "native-only") return null;
@@ -3838,17 +3827,13 @@ function discoverWslHermesHome(deps = {}) {
3838
3827
  return wsl.discoverWslHome(".hermes", deps);
3839
3828
  }
3840
3829
 
3841
- function pickWin32ProviderPath({ env = process.env, nativeValue, wslProviderDir, wslValue }) {
3842
- const nativeCandidate = wsl.shouldProbeNative(env) ? nativeValue : null;
3843
- const wslCandidate = wslValue !== undefined
3844
- ? wslValue
3845
- : (wsl.shouldProbeWsl(env) ? wsl.discoverWslHome(wslProviderDir) : null);
3846
- return wsl.pickWin32Path({
3847
- wslValue: wslCandidate,
3848
- nativeValue: nativeCandidate,
3849
- env,
3850
- platform: "win32",
3851
- });
3830
+ function pickWin32ProviderPath({ env = process.env, nativeValue, wslProviderDir, wslValue, deps = {} }) {
3831
+ const paths = resolveInstallPaths({ nativeValue, wslDir: wslProviderDir, wslValue }, env, deps);
3832
+ return paths.native || paths.wsl;
3833
+ }
3834
+
3835
+ function resolveAllWin32ProviderPaths({ env = process.env, nativeValue, wslProviderDir, wslValue, deps = {} }) {
3836
+ return resolveInstallPaths({ nativeValue, wslDir: wslProviderDir, wslValue }, env, deps);
3852
3837
  }
3853
3838
 
3854
3839
  function resolveHermesDbPath(env = process.env) {
@@ -3936,6 +3921,86 @@ function readHermesSessions(dbPath, lastCompletedEpoch, unfinishedSessionIds = [
3936
3921
  }
3937
3922
  }
3938
3923
 
3924
+ // ── Dual-install cursor ownership probes ────────────────────────────────────
3925
+ // When a flat (pre-namespaced) cursor migrates to per-install namespaces
3926
+ // (multiInstallParse "both" mode), the migration must know which install the
3927
+ // flat cursor was tracking: only then may the OTHER install's namespace start
3928
+ // empty so its full history backfills. Guessing wrong wipes dedup state
3929
+ // (snapshots / sessionTotals / threadTotals) for an already-counted install,
3930
+ // and every re-read session lands in the hourly buckets a second time.
3931
+ // These probes answer "does this install's DB contain the flat cursor's own
3932
+ // ids?" — sampled from the cursor's per-session dedup maps. Any failure or
3933
+ // missing evidence returns false so the caller falls back to seeding every
3934
+ // namespace (bounded backfill loss, never a double count).
3935
+
3936
+ function sqliteDbContainsIds(dbPath, table, ids, sqliteOptions = {}) {
3937
+ if (!dbPath || !Array.isArray(ids) || ids.length === 0) return false;
3938
+ if (!fssync.existsSync(dbPath)) return false;
3939
+ const inList = ids.map(sqliteStringLiteral).join(",");
3940
+ const sql = `SELECT id FROM ${table} WHERE id IN (${inList}) LIMIT 1`;
3941
+
3942
+ let snapshot = null;
3943
+ let effectiveDbPath = dbPath;
3944
+ if (isUncPath(dbPath)) {
3945
+ try {
3946
+ snapshot = snapshotSqliteDb(dbPath);
3947
+ effectiveDbPath = snapshot.path;
3948
+ } catch (_e) { }
3949
+ }
3950
+ try {
3951
+ const rows = readSqliteJsonRows(effectiveDbPath, sql, {
3952
+ label: "InstallProbe",
3953
+ maxBuffer: 1024 * 1024,
3954
+ timeout: 10_000,
3955
+ ...sqliteOptions,
3956
+ });
3957
+ return Array.isArray(rows) && rows.length > 0;
3958
+ } catch (_e) {
3959
+ return false;
3960
+ } finally {
3961
+ if (snapshot) snapshot.cleanup();
3962
+ }
3963
+ }
3964
+
3965
+ // Sample the most recently inserted keys — most likely to still exist in the
3966
+ // DB (providers may delete old sessions, which would blind the probe).
3967
+ function sampleRecentKeys(obj, limit = 16) {
3968
+ if (!obj || typeof obj !== "object") return [];
3969
+ const keys = Object.keys(obj).filter((k) => typeof k === "string" && k.length > 0);
3970
+ return keys.slice(-limit);
3971
+ }
3972
+
3973
+ function gooseInstallOwnsCursor(dbPath, flatState, sqliteOptions) {
3974
+ return sqliteDbContainsIds(dbPath, "sessions", sampleRecentKeys(flatState?.sessionTotals), sqliteOptions);
3975
+ }
3976
+
3977
+ function zedInstallOwnsCursor(dbPath, flatState, sqliteOptions) {
3978
+ return sqliteDbContainsIds(dbPath, "threads", sampleRecentKeys(flatState?.threadTotals), sqliteOptions);
3979
+ }
3980
+
3981
+ function hermesInstallOwnsCursor(hermesPath, flatState, sqliteOptions) {
3982
+ const ids = new Set();
3983
+ const collect = (state) => {
3984
+ if (!state || typeof state !== "object") return;
3985
+ for (const key of sampleRecentKeys(state.snapshots)) ids.add(key);
3986
+ if (Array.isArray(state.unfinishedSessionIds)) {
3987
+ for (const id of state.unfinishedSessionIds) {
3988
+ if (typeof id === "string" && id.length > 0) ids.add(id);
3989
+ }
3990
+ }
3991
+ };
3992
+ collect(flatState);
3993
+ if (flatState?.profiles && typeof flatState.profiles === "object") {
3994
+ for (const profileState of Object.values(flatState.profiles)) collect(profileState);
3995
+ }
3996
+ const sample = [...ids].slice(-16);
3997
+ if (sample.length === 0) return false;
3998
+
3999
+ const dbPaths = resolveAllHermesDBPaths({ hermesPath });
4000
+ const allDbs = [dbPaths.default, ...Object.values(dbPaths.profiles)].filter(Boolean);
4001
+ return allDbs.some((db) => sqliteDbContainsIds(db, "sessions", sample, sqliteOptions));
4002
+ }
4003
+
3939
4004
  function hasLegacyHermesDefaultState(hermesState) {
3940
4005
  return (
3941
4006
  typeof hermesState.lastStartedAt === "number" ||
@@ -6526,13 +6591,11 @@ function resolveZedDbPath(env = process.env) {
6526
6591
  if (process.platform === "win32") {
6527
6592
  const local = env.LOCALAPPDATA || path.join(home, "AppData", "Local");
6528
6593
  const native = path.join(local, "Zed", "threads", "threads.db");
6529
- let nativeExists = null;
6530
- if (wsl.shouldProbeNative(env)) {
6531
- try { if (fssync.existsSync(native)) nativeExists = native; } catch (_e) { }
6532
- }
6533
- const wslDir = wsl.shouldProbeWsl(env) ? wsl.discoverWslHome(".local/share/zed/threads", { env }) : null;
6534
- const wslValue = wslDir ? path.join(wslDir, "threads.db") : null;
6535
- const picked = wsl.pickWin32Path({ wslValue, nativeValue: nativeExists, env, platform: "win32" });
6594
+ const wslThreadsDir = wsl.shouldProbeWsl(env) ? wsl.discoverWslHome(".local/share/zed/threads", { env }) : null;
6595
+ const wslDbPath = wslThreadsDir && fssync.existsSync(path.join(wslThreadsDir, "threads.db"))
6596
+ ? path.join(wslThreadsDir, "threads.db") : null;
6597
+ const paths = resolveInstallPaths({ nativeValue: native, wslValue: wslDbPath }, env);
6598
+ const picked = paths.native || paths.wsl;
6536
6599
  if (picked) return picked;
6537
6600
  const mode = wsl.getWslMode(env);
6538
6601
  return mode === "wsl-only" || mode === "native-only" ? null : native;
@@ -6909,13 +6972,11 @@ function resolveGooseDbPath(env = process.env) {
6909
6972
  } else if (process.platform === "win32") {
6910
6973
  const appData = env.APPDATA || path.join(home, "AppData", "Roaming");
6911
6974
  const native = path.join(appData, "goose", "sessions", "sessions.db");
6912
- let nativeExists = null;
6913
- if (wsl.shouldProbeNative(env)) {
6914
- try { if (fssync.existsSync(native)) nativeExists = native; } catch (_e) { }
6915
- }
6916
6975
  const wslDir = wsl.shouldProbeWsl(env) ? wsl.discoverWslHome(".local/share/goose/sessions", { env }) : null;
6917
- const wslValue = wslDir ? path.join(wslDir, "sessions.db") : null;
6918
- const picked = wsl.pickWin32Path({ wslValue, nativeValue: nativeExists, env, platform: "win32" });
6976
+ const wslValue = wslDir && fssync.existsSync(path.join(wslDir, "sessions.db"))
6977
+ ? path.join(wslDir, "sessions.db") : null;
6978
+ const paths = resolveInstallPaths({ nativeValue: native, wslValue }, env);
6979
+ const picked = paths.native || paths.wsl;
6919
6980
  if (picked) candidates.push(picked);
6920
6981
  for (const c of candidates) {
6921
6982
  if (fssync.existsSync(c)) return c;
@@ -9919,6 +9980,9 @@ module.exports = {
9919
9980
  parseCursorApiIncremental,
9920
9981
  parseKiroIncremental,
9921
9982
  parseHermesIncremental,
9983
+ gooseInstallOwnsCursor,
9984
+ zedInstallOwnsCursor,
9985
+ hermesInstallOwnsCursor,
9922
9986
  parseCopilotIncremental,
9923
9987
  resolveKimiWireFiles,
9924
9988
  resolveKimiDefaultModel,
@@ -16,6 +16,7 @@ const WSL_MODES = new Set([
16
16
  "native-first",
17
17
  "wsl-only",
18
18
  "native-only",
19
+ "both",
19
20
  ]);
20
21
 
21
22
  function defaultRunWsl(args, { utf16 = false } = {}) {
@@ -98,6 +99,7 @@ function pickWin32Path({
98
99
 
99
100
  const mode = getWslMode(env);
100
101
 
102
+ if (mode === "both") return wslValue ?? nativeValue ?? null;
101
103
  if (mode === "wsl-only") return wslValue ?? null;
102
104
  if (mode === "native-only") return nativeValue ?? null;
103
105
  if (mode === "native-first") return nativeValue ?? wslValue ?? null;
@@ -105,6 +107,24 @@ function pickWin32Path({
105
107
  return wslValue ?? nativeValue ?? null;
106
108
  }
107
109
 
110
+ function resolveAllWin32Paths({
111
+ nativeValue,
112
+ wslValue,
113
+ env = process.env,
114
+ platform = process.platform,
115
+ }) {
116
+ if (platform !== "win32") return { native: null, wsl: null };
117
+
118
+ const mode = getWslMode(env);
119
+
120
+ if (mode === "both") {
121
+ return { native: nativeValue ?? null, wsl: wslValue ?? null };
122
+ }
123
+
124
+ const single = pickWin32Path({ wslValue, nativeValue, env, platform });
125
+ return { native: single, wsl: null };
126
+ }
127
+
108
128
  function lookupWslUser(distroName, runWsl, useCache) {
109
129
  if (useCache && _cachedWslUsers.has(distroName)) {
110
130
  return _cachedWslUsers.get(distroName);
@@ -177,5 +197,6 @@ module.exports = {
177
197
  shouldProbeWsl,
178
198
  shouldProbeNative,
179
199
  pickWin32Path,
200
+ resolveAllWin32Paths,
180
201
  normalizeWslMode,
181
202
  };
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LeaderboardProfileModal-D_fw5Kqq.js","assets/main-CWm30bdS.js","assets/main-BHwig9Um.css","assets/useCurrency-Bpj2Olvn.js","assets/LeaderboardAvatar-CXM9LWgN.js","assets/ActivityHeatmap-DF-kr0NR.js","assets/DialogTitle-010ZQYmP.js","assets/useScrollLock-BlbfX49j.js","assets/arrow-up-right-oxQ6lR4o.js"])))=>i.map(i=>d[i]);
2
- import{c as oa,j as e,V as d,r as i,G as s,av as na,aw as sa,W as ia,Y as la,ax as da,i as ca,f as ua,ay as ma,az as ga,aA as re,a4 as xa,aB as ba,m as pa,U as ha,L as ya,J as fa,ag as ze,H as ka,aC as wa,aD as va,aE as Se,aF as ja,a2 as Na,K as _a}from"./main-CWm30bdS.js";import{S as Sa}from"./Select-BllPJSRS.js";import{a as Ca,C as La,u as Pa,b as Ka,c as Ce,D as Aa,d as Ma,S as Ea,h as Ta,s as za,K as Ra,P as Ia}from"./use-ordered-list-ewxLtUkH.js";import{u as Ba}from"./useCurrency-Bpj2Olvn.js";import{L as te}from"./LeaderboardAvatar-CXM9LWgN.js";import"./SelectItemText-D2Fxx4K0.js";import"./useScrollLock-BlbfX49j.js";const Ua=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],$a=oa("arrow-right",Ua),Da=a=>{let{transform:t}=a;return{...t,y:0}};function O(a,{min:t,max:o,fallback:n}){const c=Number(a);if(!Number.isFinite(c))return n;const l=Math.floor(c);return l<t?t:l>o?o:l}function Oa(a,t){const o=O(t,{min:0,max:1e6,fallback:0}),n=O(a,{min:1,max:Math.max(1,o||1),fallback:1});if(o<=1)return[1];const c=new Set([1,o,n-2,n-1,n,n+1,n+2]),l=Array.from(c).filter(m=>Number.isInteger(m)&&m>=1&&m<=o).sort((m,f)=>m-f),b=[];let p=null;for(const m of l)p!=null&&m-p>1&&b.push(null),b.push(m),p=m;return b}function Fa({page:a,totalPages:t}){const o=typeof t=="number"&&Number.isFinite(t)&&t>=0,n=o?O(t,{min:0,max:1e6,fallback:0}):null,c=O(a,{min:1,max:o?Math.max(1,n||1):1e6,fallback:1}),l=c>1,b=o?c<n:!0;return{canPrev:l,canNext:b,safePage:c,safeTotal:n}}function Ga({entries:a,me:t,meLabel:o}){const n=Array.isArray(a)?a:[],c=t&&typeof t.rank=="number"?t.rank:null;return!c||n.some(b=>!!b?.is_me)?n:[{rank:c,is_me:!0,is_pinned:!0,user_id:t?.user_id??null,display_name:o,avatar_url:t?.avatar_url??null,github_url:null,is_public:!1,gpt_tokens:t?.gpt_tokens??"0",claude_tokens:t?.claude_tokens??"0",gemini_tokens:t?.gemini_tokens??"0",cursor_tokens:t?.cursor_tokens??"0",opencode_tokens:t?.opencode_tokens??"0",openclaw_tokens:t?.openclaw_tokens??"0",hermes_tokens:t?.hermes_tokens??"0",kiro_tokens:t?.kiro_tokens??"0",copilot_tokens:t?.copilot_tokens??"0",kimi_tokens:t?.kimi_tokens??"0",other_tokens:t?.other_tokens??"0",total_tokens:t?.total_tokens??"0",estimated_cost_usd:t?.estimated_cost_usd??null},...n]}function Ya(a,t){const o=Number(a),n=Number(t);return!Number.isFinite(o)||o<1||!Number.isFinite(n)||n<1?null:Math.ceil(o/n)}const Ha=new Set(["/brand-logos/cursor.svg","/brand-logos/kimi.svg","/brand-logos/kiro.svg","/brand-logos/copilot.svg","/brand-logos/hermes.svg"]);function Wa({iconSrc:a,label:t}){return e.jsxs("span",{className:"inline-flex items-center gap-3",children:[a?e.jsx("img",{src:a,alt:"",width:16,height:16,className:`h-4 w-4 shrink-0 object-contain opacity-90 ${Ha.has(a)?"dark:invert":""}`}):null,e.jsx("span",{className:"whitespace-nowrap",children:t})]})}const J=[{key:"gpt_tokens",copyKey:"leaderboard.column.codex",icon:"/brand-logos/codex.svg"},{key:"claude_tokens",copyKey:"leaderboard.column.claude",icon:"/brand-logos/claude-code.svg"},{key:"gemini_tokens",copyKey:"leaderboard.column.gemini",icon:"/brand-logos/gemini.svg"},{key:"cursor_tokens",copyKey:"leaderboard.column.cursor",icon:"/brand-logos/cursor.svg"},{key:"kiro_tokens",copyKey:"leaderboard.column.kiro",icon:"/brand-logos/kiro.svg"},{key:"copilot_tokens",copyKey:"leaderboard.column.copilot",icon:"/brand-logos/copilot.svg"},{key:"kimi_tokens",copyKey:"leaderboard.column.kimi",icon:"/brand-logos/kimi.svg"},{key:"opencode_tokens",copyKey:"leaderboard.column.opencode",icon:"/brand-logos/opencode.svg"},{key:"openclaw_tokens",copyKey:"leaderboard.column.openclaw",icon:"/brand-logos/openclaw.svg"},{key:"hermes_tokens",copyKey:"leaderboard.column.hermes",icon:"/brand-logos/hermes.svg"},{key:"other_tokens",copyKey:"leaderboard.column.supplemental",icon:null}],Re="sticky left-0 z-40 w-14 min-w-14 max-w-14 sm:w-[72px] sm:min-w-[72px] sm:max-w-[72px] bg-white dark:bg-oai-gray-950 px-2.5 sm:px-4 py-4 align-middle",Ie="sticky left-[55px] sm:left-[71px] z-40 min-w-[96px] sm:min-w-[200px] max-w-[170px] sm:max-w-[min(260px,45vw)] border-l border-r border-oai-gray-200 dark:border-oai-gray-800 bg-white dark:bg-oai-gray-950 px-3 sm:px-4 py-4 align-middle";function oe(a){return d("sticky left-0 z-30 w-14 min-w-14 max-w-14 sm:w-[72px] sm:min-w-[72px] sm:max-w-[72px] px-2.5 sm:px-4 py-4 whitespace-nowrap",a?"bg-oai-brand-50 dark:bg-emerald-950":"bg-white dark:bg-oai-gray-950 group-hover:bg-oai-gray-50 dark:group-hover:bg-oai-gray-900/60")}function ne(a){return d("sticky left-[55px] sm:left-[71px] z-30 hover:z-50 min-w-[96px] sm:min-w-[200px] max-w-[170px] sm:max-w-[min(260px,45vw)] border-l border-r border-oai-gray-200 dark:border-oai-gray-800 px-3 sm:px-4 py-4 min-w-0",a?"bg-oai-brand-50 dark:bg-emerald-950":"bg-white dark:bg-oai-gray-950 group-hover:bg-oai-gray-50 dark:group-hover:bg-oai-gray-900/60")}function j({className:a}){return e.jsx("div",{className:d("rounded bg-oai-gray-200/70 dark:bg-oai-gray-800/70 animate-pulse",a)})}function Ja({index:a}){const t=a<3?"w-24":a<8?"w-20":"w-16",o=a<3?"w-16":"w-12",n=a<5?"w-14":"w-10";return e.jsxs("tr",{className:"group",children:[e.jsx("td",{className:d(oe(!1),"!group-hover:bg-transparent"),children:e.jsx(j,{className:"h-4 w-6"})}),e.jsx("td",{className:d(ne(!1),"!group-hover:bg-transparent"),children:e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(j,{className:"h-8 w-8 min-w-8 rounded-full"}),e.jsx(j,{className:d("h-4",t)})]})}),e.jsx("td",{className:"px-4 py-4 bg-white dark:bg-oai-gray-950",children:e.jsx(j,{className:d("h-4",o)})}),e.jsx("td",{className:"px-4 py-4 bg-white dark:bg-oai-gray-950",children:e.jsx(j,{className:"h-4 w-12"})}),J.map(c=>e.jsx("td",{className:"px-4 py-4 bg-white dark:bg-oai-gray-950",children:e.jsx(j,{className:d("h-4",n)})},c.key))]})}function Va({rows:a=10}){return e.jsx("div",{className:"w-full overflow-x-auto",children:e.jsxs("table",{className:"min-w-max w-full text-left text-sm",children:[e.jsx("thead",{className:"border-b border-oai-gray-200 dark:border-oai-gray-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:d(Re,"font-medium text-oai-gray-500 dark:text-oai-gray-400"),children:e.jsx(j,{className:"h-3.5 w-6"})}),e.jsx("th",{className:d(Ie,"font-medium text-oai-gray-500 dark:text-oai-gray-400"),children:e.jsx(j,{className:"h-3.5 w-12"})}),e.jsx("th",{className:"px-4 py-4",children:e.jsx(j,{className:"h-3.5 w-10"})}),e.jsx("th",{className:"px-4 py-4",children:e.jsx(j,{className:"h-3.5 w-14"})}),J.map(t=>e.jsx("th",{className:"px-4 py-4",children:e.jsx(j,{className:"h-3.5 w-12"})},t.key))]})}),e.jsx("tbody",{className:"divide-y divide-oai-gray-100 dark:divide-oai-gray-800/50",children:Array.from({length:a},(t,o)=>e.jsx(Ja,{index:o},o))})]})})}function Za({id:a,thClassName:t,children:o}){const{attributes:n,listeners:c,setNodeRef:l,transform:b,transition:p,isDragging:m}=Ca({id:a}),f=La.Transform.toString(b)||"";i.useLayoutEffect(()=>{const h=document.querySelectorAll(`td[data-column-key="${a}"]`),y="0 2px 10px rgba(15, 23, 42, 0.10), 0 1px 3px rgba(15, 23, 42, 0.06)";return h.forEach(g=>{g.style.transform=f,g.style.transition=p||"",g.style.zIndex=m?"20":"",g.style.position=f?"relative":"",g.style.boxShadow=m?y:""}),()=>{h.forEach(g=>{g.style.transform="",g.style.transition="",g.style.zIndex="",g.style.position="",g.style.boxShadow=""})}},[a,f,p,m]);const L={transform:f,transition:p,position:f?"relative":void 0,zIndex:m?20:void 0,boxShadow:m?"0 2px 10px rgba(15, 23, 42, 0.10), 0 1px 3px rgba(15, 23, 42, 0.06)":void 0};return e.jsx("th",{ref:l,style:L,className:d(t,"group/col select-none cursor-grab active:cursor-grabbing touch-none"),...n,...c,children:e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx("span",{"aria-hidden":"true",className:d("-mr-1 inline-flex h-4 w-3 shrink-0 items-center justify-center text-oai-gray-400 dark:text-oai-gray-600","opacity-0 transition-opacity duration-150 group-hover/col:opacity-100",m&&"opacity-100"),children:e.jsxs("svg",{viewBox:"0 0 8 14",width:"8",height:"14",fill:"currentColor","aria-hidden":"true",children:[e.jsx("circle",{cx:"2",cy:"2",r:"1"}),e.jsx("circle",{cx:"6",cy:"2",r:"1"}),e.jsx("circle",{cx:"2",cy:"7",r:"1"}),e.jsx("circle",{cx:"6",cy:"7",r:"1"}),e.jsx("circle",{cx:"2",cy:"12",r:"1"}),e.jsx("circle",{cx:"6",cy:"12",r:"1"})]})}),o]})})}const qa="tokentracker.leaderboard.columnOrder.v1";function Qa(a){return Pa(qa,a)}function Xa(a,t){const o=Number(a),n=Number(t);return!Number.isFinite(o)||o<1||!Number.isFinite(n)||n<1?null:Math.min(100,Math.max(1,Math.ceil(o/n*100)))}function Be(a){return typeof a=="string"?a.trim():""}function er(a){const t=Be(a);return t?t.toLowerCase()==="anonymous":!0}function ar({me:a,totalEntries:t,meLabel:o,onOpenProfile:n,onJumpToMe:c,canJump:l,className:b}){const p=a&&typeof a.rank=="number"?a.rank:null;if(!p)return null;const m=Number(t)||0,f=Xa(p,m),L=Be(a?.display_name),h=!L||er(L)?o||"You":L,y=a?.user_id||h,g=n||(l?c:null),A=typeof g=="function",M=A?"button":"div",V=A?{type:"button",onClick:g,"aria-label":s(n?"leaderboard.summary.view_profile":"leaderboard.summary.jump_to_me")}:{};return e.jsxs(M,{...V,className:d("group inline-flex h-9 items-center gap-2.5 rounded-full border pl-1 pr-3.5 transition-all duration-300 select-none shadow-[0_1px_2px_rgba(0,0,0,0.03)]",A?"border-oai-gray-200 hover:border-oai-brand-400 dark:border-oai-gray-800 dark:hover:border-oai-brand-500/80 bg-oai-gray-50/50 dark:bg-white/[0.02] backdrop-blur-md hover:bg-oai-brand-50/40 dark:hover:bg-oai-brand-950/20 active:scale-[0.97] hover:shadow-[0_4px_12px_rgba(0,0,0,0.05)] dark:hover:shadow-[0_4px_20px_rgba(0,0,0,0.25)] dark:ring-1 dark:ring-white/[0.04] dark:hover:ring-white/[0.08]":"border-oai-gray-100 dark:border-oai-gray-800/60 bg-oai-gray-50/20 dark:bg-white/[0.01] backdrop-blur-sm dark:ring-1 dark:ring-white/[0.02]",b),children:[e.jsx(te,{size:"sm",avatarUrl:a?.avatar_url,displayName:h,seed:y}),e.jsx("span",{className:"hidden sm:inline max-w-[120px] truncate text-xs font-semibold text-oai-black dark:text-oai-gray-200 group-hover:text-oai-brand-600 dark:group-hover:text-oai-brand-400 transition-colors",children:h}),e.jsxs("span",{className:"text-xs font-bold tabular-nums text-oai-gray-800 dark:text-white",children:["#",p.toLocaleString()]}),f!=null&&e.jsx("span",{className:d("hidden sm:inline-flex items-center rounded-full px-2 py-0.5 text-[9px] font-extrabold tracking-wider tabular-nums uppercase transition-colors duration-300 ring-1",f<=10?"bg-amber-500/10 text-amber-600 dark:bg-amber-500/15 dark:text-amber-400 ring-amber-500/20":"bg-oai-brand-100/50 text-oai-brand-700 dark:bg-oai-brand-500/10 dark:text-oai-brand-400 ring-oai-brand-500/10"),children:s("leaderboard.summary.percentile",{p:String(f)})}),A?e.jsx($a,{"aria-hidden":!0,className:"size-3 text-oai-gray-400 transition-all duration-300 group-hover:text-oai-brand-500 dark:text-oai-gray-500 group-hover:translate-x-0.5 group-hover:scale-110"}):e.jsxs("span",{className:"relative flex h-1.5 w-1.5 shrink-0 items-center justify-center ml-1",title:"You are here",children:[e.jsx("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-75 duration-1000"}),e.jsx("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-emerald-500"})]})]})}const rr=i.lazy(()=>Na(()=>import("./LeaderboardProfileModal-D_fw5Kqq.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8])).then(a=>({default:a.LeaderboardProfileModal}))),se=[10,20,50,100],ie=20,Ue="tokentracker:leaderboard:pageSize";function tr(){if(typeof window>"u")return ie;try{const a=window.localStorage.getItem(Ue),t=Number(a);if(se.includes(t))return t}catch{}return ie}function Le(a,t,o){const n=Number(a);if(!Number.isFinite(n)||n<=0)return"-";const c=ka(t),l=t===_a?n:n*o;return l>=1e3?`${c}${Math.round(l).toLocaleString()}`:l>=10?`${c}${Math.round(l)}`:`${c}${l.toFixed(2)}`}function Pe({value:a}){return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"sm:hidden",children:fa(a)}),e.jsx("span",{className:"hidden sm:inline",children:ze(a)})]})}function Ke(a,t,o){const n=t?"text-oai-gray-700 dark:text-oai-gray-300":"text-oai-gray-500 dark:text-oai-gray-400",c=t?"bg-oai-brand-50 dark:bg-oai-brand-900/10":"bg-white dark:bg-oai-gray-950 group-hover:bg-oai-gray-50 dark:group-hover:bg-oai-gray-900/60";return o.map(l=>e.jsx("td",{"data-column-key":l.key,className:d("hidden sm:table-cell px-3 sm:px-4 py-4 whitespace-nowrap text-right tabular-nums",n,c),children:ze(a?.[l.key])},l.key))}const or={1:{text:"text-amber-600 dark:text-amber-400",badge:"bg-amber-50 dark:bg-amber-900/20"},2:{text:"text-gray-500 dark:text-gray-300",badge:"bg-gray-50 dark:bg-gray-800/40"},3:{text:"text-orange-700 dark:text-orange-400",badge:"bg-orange-50 dark:bg-orange-900/20"}};function Ae({rank:a,placeholder:t}){const o=or[a];return o?e.jsx("span",{className:d("inline-flex items-center justify-center h-7 w-7 rounded-full text-xs font-bold",o.text,o.badge),children:a}):e.jsx("span",{className:"inline-flex items-center justify-center h-7 w-7 text-sm",children:a??t})}function Me(a){if(typeof a!="string")return null;const t=a.trim().toLowerCase();return t==="week"||t==="month"||t==="total"?t:null}function nr(a){if(!a)return s("shared.error.prefix",{error:s("leaderboard.error.unknown")});const t=a?.message||String(a),o=String(t||"").trim()||s("leaderboard.error.unknown");return s("shared.error.prefix",{error:o})}function $e(a){return typeof a!="string"?"":a.trim()}function sr(a){const t=$e(a);return t?t.toLowerCase()==="anonymous":!0}function Ee(a,t){const o=typeof a?.user_id=="string"?a.user_id.trim():"";return o||`${a?.rank??""}:${t}`}function Te({githubUrl:a}){return e.jsxs("span",{className:"relative inline-flex items-center group/gh shrink-0",children:[e.jsx("a",{href:a,target:"_blank",rel:"noopener noreferrer",onClick:t=>t.stopPropagation(),"aria-label":s("leaderboard.github.aria"),className:"text-oai-black hover:text-oai-gray-500 dark:text-white dark:hover:text-oai-gray-400 transition-colors",children:e.jsx(ha,{provider:"GITHUB",size:16})}),e.jsxs("span",{role:"tooltip",className:"invisible opacity-0 group-hover/gh:visible group-hover/gh:opacity-100 absolute right-0 bottom-full mb-2 whitespace-nowrap rounded-md bg-oai-black dark:bg-oai-gray-700 px-2.5 py-1.5 text-[11px] leading-relaxed text-white shadow-lg transition-opacity duration-150 z-50 before:content-[''] before:absolute before:inset-x-0 before:top-full before:h-2.5",children:[e.jsx("span",{className:"block",children:s("leaderboard.github.tooltipAction")}),e.jsxs("span",{className:"block text-oai-gray-300 dark:text-oai-gray-400",children:[s("leaderboard.github.tooltipPrefix")," ",e.jsx(ya,{to:"/settings",onClick:t=>t.stopPropagation(),className:"text-white underline underline-offset-2 decoration-oai-gray-400 hover:text-oai-brand-300 hover:decoration-oai-brand-300",children:s("leaderboard.github.tooltipSettingsLink")}),s("leaderboard.github.tooltipSuffix")]})]})]})}function pr({auth:a,signedIn:t,sessionSoftExpired:o}){const n=na(),c=sa(),{openLoginModal:l}=ia(),{signedIn:b,loading:p,user:m}=la(),{currency:f,rate:L}=Ba(),h=i.useMemo(()=>da(),[]),y=ca(),g=t&&!o,A=i.useMemo(()=>g&&(typeof a=="function"||typeof a=="string"||a&&typeof a=="object")?a:null,[a,g]),M=g?A:null,V=g&&ua(M),le=s("shared.placeholder.short"),De=i.useMemo(()=>J.map(r=>r.key),[]),{order:Z,reorder:de}=Qa(De),ce=i.useMemo(()=>{const r=new Map;for(const u of J)r.set(u.key,u);return r},[]),F=i.useMemo(()=>Z.map(r=>ce.get(r)).filter(Boolean),[Z,ce]),Oe=Ka(Ce(Ia,{activationConstraint:{distance:6}}),Ce(Ra,{coordinateGetter:za})),Fe=i.useCallback(r=>{const{active:u,over:w}=r;!w||u.id===w.id||de(String(u.id),String(w.id))},[de]),[q,P]=i.useState(1),[N,Ge]=i.useState(tr),[ue,me]=i.useState(null),Q=i.useCallback(r=>{typeof r=="string"&&r.trim()&&me(r.trim())},[]),Ye=i.useCallback(()=>me(null),[]),He=i.useCallback(r=>{const u=se.includes(r)?r:ie;Ge(u),P(1);try{window.localStorage.setItem(Ue,String(u))}catch{}},[]),[ge,We]=i.useState(0),[Je,Ve]=i.useState(()=>ma()),[xe,be]=i.useState(!1),v=i.useMemo(()=>{const r=new URLSearchParams(n?.search||"");return Me(r.get("period"))||"total"},[n?.search]),Ze=r=>{const u=Me(r);if(!u||u===v)return;const w=new URLSearchParams(n?.search||"");w.set("period",u),P(1),c(`${n?.pathname||"/leaderboard"}?${w.toString()}`,{replace:!0})};i.useEffect(()=>{p||y||b||l()},[b,p,y,l]),i.useEffect(()=>{P(1)},[v]);const G=i.useMemo(()=>(O(q,{min:1,max:1e6,fallback:1})-1)*N,[q,N]),E=i.useMemo(()=>y?"mock":p?"unavailable":b?"cloud":t?"local":h?"public":"unavailable",[p,b,h,y,t]),x=i.useMemo(()=>ga({accessMode:E,baseUrl:h,mockEnabled:y,userId:m?.id||null,period:v,pageSize:N,offset:G}),[m?.id,E,h,G,y,N,v]),[I,B]=i.useState(()=>{const r=re(x);return r?{loading:!1,error:null,data:r.data,contextKey:x}:{loading:!1,error:null,data:null,contextKey:null}});i.useEffect(()=>{if(!h&&!y||!y&&E==="unavailable"){B({loading:!1,error:null,data:null,contextKey:null});return}const r=re(x);let u=!0;return B(r?{loading:!1,error:null,data:r.data,contextKey:x}:{loading:!0,error:null,data:null,contextKey:null}),(async()=>{const w=await xa({userId:m?.id||null,period:v,limit:N,offset:G});u&&(ba(w,{activeContextKey:x,contextKey:x,source:ge>0?"manual-refresh":"page-load"}),B({loading:!1,error:null,data:w,contextKey:x}))})().catch(w=>{if(!u)return;const R=nr(w);B($=>$.contextKey===x?{...$,loading:!1,error:R}:{loading:!1,error:R,data:null,contextKey:x})}),()=>{u=!1}},[h,E,m?.id,x,G,ge,y,v,N]);const X=i.useMemo(()=>I.contextKey===x?null:re(x),[x,I.contextKey]),k=i.useMemo(()=>I.contextKey===x?I:X?{loading:!1,error:null,data:X.data,contextKey:x}:{loading:!!(h||y)&&E!=="unavailable",error:null,data:null,contextKey:x},[E,h,x,I,y,X]),_=k.data,Y=_?.total_pages??null,qe=_?.total_entries??0,T=_?.page??q,Qe=i.useMemo(()=>Oa(T,Y),[T,Y]),pe=_?.from||null,he=_?.to||null,ye=_?.generated_at||null,K=_?.me||null,H=s("leaderboard.me_label"),Xe=s("leaderboard.anon_label"),fe=s("leaderboard.period.week"),ke=s("leaderboard.period.month"),we=s("leaderboard.period.total"),ve=v==="month"?ke:v==="total"?we:fe,ee=i.useMemo(()=>{const r=Array.isArray(_?.entries)?_.entries:[];return Ga({entries:r,me:K,meLabel:H})},[_?.entries,K,H]),z=i.useMemo(()=>Ya(K?.rank,N),[K?.rank,N]),ea=z!=null&&z===T,aa=i.useCallback(()=>{z!=null&&P(z)},[z]),ra=async()=>{be(!0);try{wa(!0),Ve(!0),await va(()=>Se(M));const r=await Se(M);r&&await ja({accessToken:r,period:v,source:"leaderboard-enable-sync"}),We(u=>u+1)}catch(r){console.warn("[tokentracker] sync:",r)}finally{be(!1)}},{canPrev:je,canNext:Ne}=Fa({page:T,totalPages:Y}),W=Array.isArray(ee)&&ee.length!==0;let U=null;k.loading&&!W?U=e.jsx(Va,{rows:N}):k.error&&!W?U=e.jsx("div",{className:"px-6 py-12 text-center",children:e.jsx("p",{className:"text-sm text-red-500 dark:text-red-400",children:k.error})}):W?U=e.jsx(Aa,{sensors:Oe,collisionDetection:Ma,modifiers:[Da],onDragEnd:Fe,children:e.jsx("div",{className:"w-full overflow-x-auto",children:e.jsxs("table",{className:"min-w-full sm:min-w-max w-full text-left text-sm",children:[e.jsx("thead",{className:"border-b border-oai-gray-200 dark:border-oai-gray-800",children:e.jsxs("tr",{children:[e.jsx("th",{className:d(Re,"text-[11px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500"),children:s("leaderboard.column.rank")}),e.jsx("th",{className:d(Ie,"text-[11px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500"),children:s("leaderboard.column.user")}),e.jsx("th",{className:"px-3 sm:px-4 py-4 text-[11px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500 whitespace-nowrap text-right align-middle",children:s("leaderboard.column.total")}),e.jsx("th",{className:"hidden sm:table-cell px-3 sm:px-4 py-4 text-[11px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500 whitespace-nowrap text-right align-middle",title:"Based on estimated API pricing, not actual billing",children:s("leaderboard.column.est_cost")}),e.jsx(Ea,{items:Z,strategy:Ta,children:F.map(r=>e.jsx(Za,{id:r.key,thClassName:"hidden sm:table-cell px-3 sm:px-4 py-4 text-[11px] font-semibold uppercase tracking-wider text-oai-gray-400 dark:text-oai-gray-500 whitespace-nowrap align-middle",children:e.jsx(Wa,{iconSrc:r.icon,label:s(r.copyKey)})},r.key))})]})}),e.jsx("tbody",{className:"divide-y divide-oai-gray-100 dark:divide-oai-gray-800/50",children:ee.map((r,u)=>{if(r?.is_ellipsis){const C=4+F.length;return e.jsx("tr",{"aria-hidden":"true",children:e.jsx("td",{colSpan:C,className:"px-4 py-2 text-center text-oai-gray-400 dark:text-oai-gray-600 bg-white dark:bg-oai-gray-950 select-none tracking-[0.4em] text-xs",children:"···"})},`ellipsis-${u}`)}const w=!!r?.is_me,R=typeof r?.user_id=="string"?r.user_id:null,$=$e(r?.display_name),ta=sr($)?Xe:$,S=w?H:ta,D=!!R,_e=D?{role:"button",tabIndex:0,onClick:D?()=>Q(R):void 0,onKeyDown:D?C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),Q(R))}:void 0,"aria-label":s("leaderboard.profile_modal.row_aria",{name:S})}:{};if(w){const C=!!r?.is_pinned;return e.jsxs("tr",{..._e,className:d("bg-oai-brand-50 dark:bg-oai-brand-900/10 transition-colors",C?"border-t border-b border-oai-brand-300/40 dark:border-oai-brand-500/20":"border-y border-oai-brand-300/40 dark:border-oai-brand-500/30",D&&"cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500/60"),children:[e.jsx("td",{className:d(oe(!0),"relative font-semibold text-oai-brand-600 dark:text-oai-brand-400",C&&"before:absolute before:left-0 before:top-[15%] before:h-[70%] before:w-[3px] before:rounded-r before:bg-oai-brand-500 dark:before:bg-oai-brand-400"),children:e.jsx(Ae,{rank:r?.rank,placeholder:le})}),e.jsx("td",{className:ne(!0),children:e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(te,{avatarUrl:r?.avatar_url,displayName:S,seed:Ee(r,S)}),e.jsx("span",{className:"truncate font-semibold text-oai-black dark:text-oai-white",children:S}),r?.github_url&&e.jsx(Te,{githubUrl:r.github_url})]})}),e.jsx("td",{className:"px-3 sm:px-4 py-4 font-medium text-oai-black dark:text-oai-white whitespace-nowrap text-right tabular-nums bg-oai-brand-50 dark:bg-oai-brand-900/10",children:e.jsx(Pe,{value:r?.total_tokens})}),e.jsx("td",{className:"hidden sm:table-cell px-3 sm:px-4 py-4 font-medium text-oai-brand-600 dark:text-oai-brand-400 whitespace-nowrap text-right tabular-nums bg-oai-brand-50 dark:bg-oai-brand-900/10",title:"Based on estimated API pricing, not actual billing",children:Le(r?.estimated_cost_usd,f,L)}),Ke(r,!0,F)]},`row-${r?.rank}-${S}${C?"-pin":""}`)}return e.jsxs("tr",{..._e,className:d("group transition-colors",D&&"cursor-pointer hover:bg-oai-gray-50 dark:hover:bg-oai-gray-900/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500/60"),children:[e.jsx("td",{className:d(oe(!1),"font-medium text-oai-gray-500 dark:text-oai-gray-400"),children:e.jsx(Ae,{rank:r?.rank,placeholder:le})}),e.jsx("td",{className:ne(!1),children:e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx(te,{avatarUrl:r?.avatar_url,displayName:S,seed:Ee(r,S)}),e.jsx("span",{className:"truncate font-medium text-oai-gray-800 dark:text-oai-gray-200",children:S}),r?.github_url&&e.jsx(Te,{githubUrl:r.github_url})]})}),e.jsx("td",{className:"px-3 sm:px-4 py-4 font-semibold text-oai-gray-800 dark:text-oai-gray-200 whitespace-nowrap text-right tabular-nums bg-white dark:bg-oai-gray-950 group-hover:bg-oai-gray-50 dark:group-hover:bg-oai-gray-900/60",children:e.jsx(Pe,{value:r?.total_tokens})}),e.jsx("td",{className:"hidden sm:table-cell px-3 sm:px-4 py-4 text-oai-gray-500 dark:text-oai-gray-400 whitespace-nowrap text-right tabular-nums bg-white dark:bg-oai-gray-950 group-hover:bg-oai-gray-50 dark:group-hover:bg-oai-gray-900/60",title:"Based on estimated API pricing, not actual billing",children:Le(r?.estimated_cost_usd,f,L)}),Ke(r,!1,F)]},`row-${r?.rank}-${S}`)})})]})})}):U=e.jsx("div",{className:"px-6 py-12 text-center",children:e.jsx("p",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-400",children:s("leaderboard.empty")})});let ae=null;return typeof Y=="number"?ae=Qe.map((r,u)=>r==null?e.jsx("span",{className:"px-2 text-oai-gray-400 dark:text-oai-gray-500",children:s("leaderboard.pagination.ellipsis")},`ellipsis-${u}`):e.jsx("button",{className:d("flex h-8 w-8 items-center justify-center rounded-md text-sm font-medium transition-colors",r===T?"bg-oai-gray-200 dark:bg-oai-gray-800 text-oai-black dark:text-white":"text-oai-gray-500 dark:text-oai-gray-400 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 hover:text-oai-black dark:hover:text-white"),onClick:()=>P(r),disabled:k.loading,children:String(r)},`page-${r}`)):ae=e.jsx("span",{className:"text-sm text-oai-gray-500 dark:text-oai-gray-400",children:s("leaderboard.pagination.page_unknown",{page:String(T)})}),e.jsxs("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:[e.jsx("main",{className:"flex-1 pt-8 sm:pt-10 pb-12 sm:pb-16",children:e.jsxs("div",{className:"mx-auto max-w-6xl px-4 sm:px-6",children:[e.jsxs("div",{className:"mb-5 sm:mb-6",children:[e.jsx("h1",{className:"text-3xl sm:text-4xl font-semibold tracking-tight text-oai-black dark:text-white mb-2 sm:mb-3",children:s("leaderboard.title")}),e.jsxs("p",{className:"text-oai-gray-500 dark:text-oai-gray-400 text-sm sm:text-base",children:[v==="total"?s("leaderboard.range.total"):pe&&he?s("leaderboard.range",{period:ve,from:pe,to:he}):s("leaderboard.range_loading",{period:ve}),ye&&e.jsx("span",{className:"ml-2 pl-2 border-l border-oai-gray-200 dark:border-oai-gray-800 hidden sm:inline-block text-oai-gray-400 dark:text-oai-gray-500 text-xs",children:s("leaderboard.generated_at",{ts:ye})})]})]}),e.jsxs("div",{className:"mb-6 sm:mb-8 flex flex-row items-center justify-between gap-3",children:[e.jsx("div",{className:"inline-flex h-9 p-1 border border-oai-gray-200 dark:border-oai-gray-800 rounded-full items-center relative",children:["week","month","total"].map(r=>{const u=v===r;return e.jsxs("button",{onClick:()=>Ze(r),disabled:k.loading,className:d("px-3 sm:px-4 h-7 text-sm font-medium rounded-full flex items-center justify-center transition-colors relative",u?"text-oai-black dark:text-white":"text-oai-gray-500 dark:text-oai-gray-400 hover:text-oai-gray-800 dark:hover:text-oai-gray-200"),children:[e.jsx("span",{className:"relative z-10",children:r==="week"?fe:r==="month"?ke:we}),u&&e.jsx(pa.div,{layoutId:"leaderboard-period-active-bg",className:"absolute inset-0 bg-oai-gray-200 dark:bg-oai-gray-800 rounded-full z-0",transition:{type:"spring",stiffness:380,damping:30}})]},r)})}),e.jsx(ar,{me:K,totalEntries:qe,meLabel:H,onOpenProfile:K?.user_id?()=>Q(K.user_id):void 0,onJumpToMe:aa,canJump:z!=null&&!ea&&!k.loading,className:"shrink-0"})]}),!t&&e.jsxs("div",{className:"mb-6 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between text-sm",children:[e.jsx("p",{className:"text-oai-gray-500 dark:text-oai-gray-400",children:s("leaderboard.signin_prompt")}),e.jsx("button",{onClick:l,className:"shrink-0 whitespace-nowrap self-start sm:self-auto px-3 py-1.5 text-sm font-medium text-oai-gray-600 dark:text-oai-gray-300 border border-oai-gray-300 dark:border-oai-gray-700 rounded-md hover:text-oai-black dark:hover:text-white hover:border-oai-gray-400 dark:hover:border-oai-gray-600 transition-colors",children:s("leaderboard.signin_button")})]}),g&&V&&!Je&&e.jsxs("div",{className:"mb-6 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between text-sm",children:[e.jsx("p",{className:"text-oai-gray-500 dark:text-oai-gray-400",children:s("leaderboard.sync_prompt")}),e.jsx("button",{onClick:ra,disabled:xe,className:"shrink-0 whitespace-nowrap self-start sm:self-auto px-3 py-1.5 text-sm font-medium text-oai-gray-600 dark:text-oai-gray-300 border border-oai-gray-300 dark:border-oai-gray-700 rounded-md hover:text-oai-black dark:hover:text-white hover:border-oai-gray-400 dark:hover:border-oai-gray-600 disabled:opacity-50 transition-colors",children:xe?s("leaderboard.sync_button.busy"):s("leaderboard.sync_button.idle")})]}),e.jsxs("div",{className:"rounded-xl border border-oai-gray-200 dark:border-oai-gray-800 overflow-hidden",children:[k.error&&W?e.jsx("div",{className:"border-b border-oai-gray-200 dark:border-oai-gray-800 px-6 py-3",children:e.jsx("p",{className:"text-sm text-red-500 dark:text-red-400",children:k.error})}):null,U,e.jsxs("div",{className:"px-6 py-3 border-t border-oai-gray-200 dark:border-oai-gray-800 flex flex-wrap items-center justify-end gap-x-4 gap-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm text-oai-gray-500 dark:text-oai-gray-400",children:[e.jsx("label",{htmlFor:"leaderboard-page-size",className:"whitespace-nowrap",children:s("leaderboard.pagination.page_size_label")}),e.jsx(Sa,{id:"leaderboard-page-size",value:N,onValueChange:r=>He(Number(r)),disabled:k.loading,ariaLabel:s("leaderboard.pagination.page_size_label"),options:se.map(r=>({value:r,label:String(r)})),align:"end",className:"px-3 py-1 text-oai-gray-700 dark:text-oai-gray-300"})]}),e.jsx("div",{className:"h-5 w-px bg-oai-gray-200 dark:bg-oai-gray-800","aria-hidden":"true"}),e.jsx("button",{className:d("px-3 py-1.5 text-sm font-medium text-oai-gray-500 dark:text-oai-gray-400 rounded-md transition-colors",je&&!k.loading?"hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 hover:text-oai-black dark:hover:text-white":"opacity-50 cursor-not-allowed"),onClick:()=>P(r=>Math.max(1,r-1)),disabled:!je||k.loading,children:s("leaderboard.pagination.prev")}),e.jsx("div",{className:"flex flex-wrap items-center gap-1",children:ae}),e.jsx("button",{className:d("px-3 py-1.5 text-sm font-medium text-oai-gray-500 dark:text-oai-gray-400 rounded-md transition-colors",Ne&&!k.loading?"hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 hover:text-oai-black dark:hover:text-white":"opacity-50 cursor-not-allowed"),onClick:()=>P(r=>r+1),disabled:!Ne||k.loading,children:s("leaderboard.pagination.next")})]})]})]})}),e.jsx("footer",{className:"border-t border-oai-gray-200 dark:border-oai-gray-900 py-8 transition-colors duration-200",children:e.jsxs("div",{className:"mx-auto flex max-w-6xl items-center justify-between px-4 sm:px-6 text-sm text-oai-gray-400 dark:text-oai-gray-500",children:[e.jsx("p",{children:s("landing.v2.footer.line")}),e.jsx("a",{href:"https://github.com/mm7894215/TokenTracker",className:"text-oai-gray-400 dark:text-oai-gray-500 hover:text-oai-black dark:hover:text-white transition-colors",target:"_blank",rel:"noopener noreferrer",children:s("landing.v2.nav.github")})]})}),e.jsx(i.Suspense,{fallback:null,children:e.jsx(rr,{isOpen:!!ue,userId:ue,period:v,accessToken:M,onClose:Ye})})]})}export{pr as LeaderboardPage};
@@ -1,3 +0,0 @@
1
- import{j as i,V as F,G as n,N as B,r as h,U,aK as V,i as X,L as Y,aL as q}from"./main-CWm30bdS.js";import{u as J}from"./use-usage-limits-BmDqNK-u.js";import{L as p,a as Q,l as _,b as Z,u as ee}from"./use-limits-display-prefs-Bkv-utHR.js";import{C as R}from"./Card-CSaEvN4m.js";import{F as te}from"./FadeIn-Cm_UaTdF.js";import{L as ie}from"./LocalOnlyNotice-eauvwIMD.js";import"./arrow-up-right-oxQ6lR4o.js";import"./download-DnphRg-H.js";const re=[3,2,3,3,2,2,3];function y({className:e}){return i.jsx("div",{className:F("rounded bg-oai-gray-200/70 dark:bg-oai-gray-800/70 animate-pulse",e)})}function ae(){return i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(y,{className:"h-3 w-12 shrink-0"}),i.jsx(y,{className:"flex-1 h-1.5 rounded-full min-w-0"}),i.jsx(y,{className:"h-3 w-[30px] shrink-0"}),i.jsx(y,{className:"h-3 w-6 shrink-0"})]})}function ne({bars:e,index:t}){const r=t%3===0?"w-24":t%3===1?"w-20":"w-[4.5rem]";return i.jsxs("div",{className:"flex flex-col gap-1.5",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(y,{className:"h-[14px] w-[14px] rounded shrink-0"}),i.jsx(y,{className:F("h-4",r)})]}),Array.from({length:e},(o,a)=>i.jsx(ae,{},a))]})}function oe(){return i.jsx(R,{children:i.jsxs("div",{className:"flex flex-col gap-3",children:[i.jsx(y,{className:"h-3.5 w-28"}),re.map((e,t)=>i.jsx(ne,{bars:e,index:t},t))]})})}function le(e,t){if(!(e>0))return null;const r=(e-t)/e;return Number.isFinite(r)?Math.min(Math.max(r,0),1):null}function se(e,t,r=.03){return e>t+r}function de(e){const t=Math.max(0,Math.floor(e)),r=Math.floor(t/3600);return r>24?`${Math.floor(r/24)}d`:r>0?`${r}h`:`${Math.floor(t/60)}m`}function ce(e,t){if(typeof e.windowSeconds=="number")return e.windowSeconds;if(e.windowSecondsField&&t){const r=t[e.windowSecondsField];return typeof r=="number"&&r>0?r:null}return null}function K(e){return e==null?NaN:typeof e=="number"?e*1e3:Date.parse(e)}function ue({usedPercent:e,windowSeconds:t,resetMs:r,mode:o,now:a=Date.now()}){const s=Math.min(Math.max(Number(e)||0,0),100)/100,d={pacePercent:null,paceOver:!1,expectedPercent:null,runsOutEta:null,projectedEnd:null};if(!(t>0)||!Number.isFinite(r))return d;const c=Math.max(0,(r-a)/1e3),l=le(t,c);if(l==null)return d;if(d.expectedPercent=Math.round(l*100),d.paceOver=se(s,l),s>=.05){const u=o==="remaining"?1-l:l;d.pacePercent=u*100}if(l>.02&&s>0){const u=t*l,m=s/u,x=s/l;x>=1&&m>0?d.runsOutEta=de((1-s)/m):d.projectedEnd=Math.round(Math.min(x,1)*100)}return d}const N=100;function L(e){const t=Date.parse(e);return Number.isFinite(t)?t:null}function me(e){return Math.max(0,Math.min(N,Math.round(e)))}function xe(e){return new Intl.DateTimeFormat(B(),{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(e))}function pe(e,t,r){if(e==null||e>=t)return N;const o=t-e,a=t-r;return me(a/o*N)}function ge(e){const t=e.available_count;return t===null?null:Number.isInteger(t)&&t>=0?t:void 0}function ye(e,{now:t}={}){if(!e||typeof e!="object")return null;const r=ge(e);if(r===void 0)return null;const o=Array.isArray(e.credits)?e.credits:[],a=t instanceof Date?t.getTime():Number(t??Date.now()),s=[];for(const d of o){const c=L(d?.expires_at);if(c==null)continue;const l=s.length+1;s.push({key:`reset-${l}`,label:n("limits.codex_reset_bank.row_label",{index:l}),expiresAt:xe(c),percent:pe(L(d?.granted_at),c,a)})}return r===0?null:s.length>0?{kind:"rows",availableCount:r??s.length,rows:s}:r>0?{kind:"count_only",availableCount:r,rows:[]}:null}const C={claude:{windows(e){const t=Array.isArray(e.weekly_scoped)?e.weekly_scoped.map(r=>({key:`scoped-${r.label}`,label:r.label,window:r,pctField:"utilization",resetField:"resets_at",windowSeconds:604800})):[];return[{key:"5h",labelKey:"limits.label.claude_5h",window:e.five_hour,pctField:"utilization",resetField:"resets_at",windowSeconds:5*3600},{key:"7d",labelKey:"limits.label.claude_7d",window:e.seven_day,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},{key:"opus",labelKey:"limits.label.claude_opus",window:e.seven_day_opus,pctField:"utilization",resetField:"resets_at",windowSeconds:7*86400},...t]}},codex:{extra:"codex_meta",windows(e){return[{key:"5h",labelKey:"limits.label.codex_5h",window:e.primary_window,windowSecondsField:"limit_window_seconds"},{key:"7d",labelKey:"limits.label.codex_7d",window:e.secondary_window,windowSecondsField:"limit_window_seconds"},{key:"credits",labelKey:"limits.label.codex_credits",window:e.credit_window},{key:"spark-5h",labelKey:"limits.label.codex_spark_5h",window:e.spark_primary_window,windowSecondsField:"limit_window_seconds"},{key:"spark-7d",labelKey:"limits.label.codex_spark_7d",window:e.spark_secondary_window,windowSecondsField:"limit_window_seconds"}]}},cursor:{windows(e){return[{key:"plan",labelKey:"limits.label.cursor_plan",window:e.primary_window},{key:"auto",labelKey:"limits.label.cursor_auto",window:e.secondary_window},{key:"api",labelKey:"limits.label.cursor_api",window:e.tertiary_window}]}},gemini:{windows(e){return[{key:"pro",labelKey:"limits.label.gemini_pro",window:e.primary_window},{key:"flash",labelKey:"limits.label.gemini_flash",window:e.secondary_window},{key:"lite",labelKey:"limits.label.gemini_lite",window:e.tertiary_window}]}},kimi:{extra:"kimi_parallel",windows(e){return[{key:"weekly",labelKey:"limits.label.kimi_weekly",window:e.primary_window,windowSeconds:7*86400},{key:"5h",labelKey:"limits.label.kimi_5h",window:e.secondary_window,windowSeconds:5*3600},{key:"total",labelKey:"limits.label.kimi_total",window:e.tertiary_window}]}},kiro:{windows(e){return[{key:"month",labelKey:"limits.label.kiro_month",window:e.primary_window},{key:"bonus",labelKey:"limits.label.kiro_bonus",window:e.secondary_window}]}},grok:{windows(e){return[{key:"month",labelKey:"limits.label.grok_month",window:e.primary_window},{key:"ondemand",labelKey:"limits.label.grok_ondemand",window:e.secondary_window}]}},antigravity:{windows(e){return[{key:"claude-weekly",labelKey:"limits.label.antigravity_claude_weekly",window:e.primary_window},{key:"claude-5h",labelKey:"limits.label.antigravity_claude_5h",window:e.secondary_window},{key:"gemini-weekly",labelKey:"limits.label.antigravity_gemini_weekly",window:e.tertiary_window},{key:"gemini-5h",labelKey:"limits.label.antigravity_gemini_5h",window:e.quaternary_window}]}},copilot:{extra:"copilot_otel",windows(e){return[{key:"premium",labelKey:"limits.label.copilot_premium",window:e.primary_window},{key:"chat",labelKey:"limits.label.copilot_chat",window:e.secondary_window}]}},zcode:{windows(e){return[{key:"glm52",labelKey:"limits.label.zcode_glm52",window:e.primary_window},{key:"glm5t",labelKey:"limits.label.zcode_glm5t",window:e.secondary_window}]}},opencodeGo:{windows(e){return[{key:"5h",labelKey:"limits.label.opencode_go_5h",window:e.primary_window},{key:"weekly",labelKey:"limits.label.opencode_go_weekly",window:e.secondary_window},{key:"monthly",labelKey:"limits.label.opencode_go_monthly",window:e.tertiary_window}]}}},be="shrink-0 text-oai-black dark:text-oai-white";function he(e){const t=K(e);if(!Number.isFinite(t))return null;const r=t-Date.now();if(r<=0)return n("shared.time.now");const o=Math.floor(r/6e4);if(o<60)return`${o}m`;const a=Math.floor(o/60);return a<24?`${a}h`:`${Math.floor(a/24)}d`}function fe(e,t){const r=t===p.REMAINING?100-e:e;return r>=90?"bg-red-500":r>=70?"bg-amber-500":"bg-emerald-500"}function w(e,t="used_percent"){return e?t==="utilization"?e.utilization:e.used_percent:null}function D(e,t="reset_at"){return e?t==="resets_at"?e.resets_at:e.reset_at:null}function k(e){const t=Math.max(0,Math.min(100,Number(e)||0)),r=Math.round(t);return t>0&&r===0?n("limits.bar.sub_one_percent"):String(r)}function j(e){const t=Number(e);return Number.isFinite(t)?new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:t>=100?0:2}).format(t):null}function we(e){if(!e||typeof e!="object")return null;const t=j(e.used_credits),r=j(e.limit_credits),o=j(e.remaining_credits);return!t||!r||!o?null:n("limits.codex_credits.detail",{used:t,limit:r,remaining:o})}function _e(e,t){return ue({usedPercent:w(e.window,e.pctField),windowSeconds:ce(e,e.window),resetMs:K(D(e.window,e.resetField)),mode:t})}function ke({text:e}){return e?i.jsx("div",{role:"tooltip",className:"pointer-events-none absolute bottom-full left-1/2 z-10 mb-2 w-max max-w-[220px] -translate-x-1/2 rounded-xl border border-oai-gray-200/50 dark:border-oai-gray-800/50 bg-white/90 dark:bg-oai-gray-900/90 backdrop-blur-md px-2.5 py-1.5 text-[10.5px] leading-snug text-oai-gray-700 dark:text-oai-gray-200 shadow-xl opacity-0 transition-opacity duration-150 group-hover:opacity-100",children:e}):null}function je({label:e,pct:t,reset:r,mode:o=p.USED,pacePercent:a=null,paceOver:s=!1,title:d=null}){const c=Math.max(0,Math.min(100,Number(t)||0)),l=o===p.REMAINING?100-c:c,u=Math.round(l),m=l>0&&u===0?Math.max(l,.35):l;let x=String(u);l>0&&u===0&&(x=n("limits.bar.sub_one_percent"));const b=a==null?null:Math.max(0,Math.min(100,a));return i.jsxs("div",{className:"group relative flex items-center gap-2",children:[i.jsx(ke,{text:d}),i.jsx("span",{"data-limit-label":"",className:"text-[11px] text-oai-gray-500 dark:text-oai-gray-400 shrink-0 whitespace-nowrap",style:{width:"var(--tt-limits-label-w)"},children:e}),i.jsxs("div",{className:"relative flex-1 bg-oai-gray-100 dark:bg-oai-gray-700/50 rounded-full h-1.5 overflow-hidden",children:[i.jsx("div",{className:`${fe(l,o)} rounded-full h-full transition-[width] duration-500 ease-out`,style:{width:`${m}%`,minWidth:l>0?"3px":0}}),b!=null&&i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"absolute top-0 h-full bg-oai-gray-100 dark:bg-oai-gray-700/50",style:{left:`calc(${b}% - 3px)`,width:"6px"}}),i.jsx("div",{className:`absolute top-0 h-full ${s?"bg-red-500":"bg-emerald-500"}`,style:{left:`calc(${b}% - 1px)`,width:"2px"}})]})]}),i.jsxs("span",{className:"text-[11px] tabular-nums text-oai-gray-500 dark:text-oai-gray-400 w-9 text-right shrink-0 whitespace-nowrap",children:[x,"%"]}),r&&i.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-500 w-6 text-right shrink-0",children:r})]})}function ve(e,t,r){const o=e.label??n(e.labelKey),a=r===p.REMAINING,s=l=>a?100-l:l;if(t.expectedPercent==null){const l=Math.max(0,Math.min(100,Number(w(e.window,e.pctField))||0)),u=k(s(l));return a?n("limits.explain.remaining",{label:o,used:u}):n("limits.explain.used",{label:o,used:u})}if(t.paceOver){if(t.runsOutEta)return n("limits.explain.ahead_eta",{label:o,eta:t.runsOutEta});const l=k(s(t.projectedEnd??100));return n(a?"limits.explain.ahead_pct_remaining":"limits.explain.ahead_pct",{label:o,pct:l})}const d=Math.max(0,Math.min(100,Number(w(e.window,e.pctField))||0)),c=k(s(t.projectedEnd??d));return n(a?"limits.explain.on_track_remaining":"limits.explain.on_track",{label:o,pct:c})}function Ne({rows:e,mode:t}){if(e.length===0)return null;const r=t===p.REMAINING;return i.jsxs("div",{className:"mt-1 flex flex-col gap-1",children:[e.map(({spec:o,pace:a})=>i.jsx("div",{className:"text-[11px] leading-snug text-oai-gray-600 dark:text-oai-gray-300",children:ve(o,a,t)},o.key)),i.jsx("div",{className:"mt-1 pt-1.5 border-t border-oai-gray-200/70 dark:border-oai-gray-700/50 text-[10.5px] leading-snug text-oai-gray-400 dark:text-oai-gray-500",children:n(r?"limits.explain.body_remaining":"limits.explain.body")})]})}function Me(e){if(!e)return null;const t=Date.now()-new Date(e).getTime();if(t<0)return null;const r=Math.floor(t/6e4);if(r<1)return n("shared.time.now");if(r<60)return n("shared.time.m_ago",{n:r});const o=Math.floor(r/60);if(o<24)return n("shared.time.h_ago",{n:o});const a=Math.floor(o/24);return n("shared.time.d_ago",{n:a})}function M({name:e,providerId:t,children:r,expandable:o=!1,expanded:a=!1,onToggle:s,badge:d=null}){const c=Z(t),l=i.jsxs("div",{className:"flex items-center gap-1.5",children:[c?i.jsx(U,{provider:c,size:14,className:be}):null,i.jsx("span",{className:"text-sm font-medium text-oai-black dark:text-oai-white",children:e}),d]});return o?i.jsxs("div",{role:"button",tabIndex:0,"aria-expanded":a,onClick:s,onKeyDown:u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),s?.())},className:"flex flex-col gap-1.5 -mx-1.5 px-1.5 py-1 rounded-lg cursor-pointer transition-colors hover:bg-oai-gray-50 dark:hover:bg-oai-gray-800/40 aria-expanded:bg-oai-gray-50 dark:aria-expanded:bg-oai-gray-800/40",children:[l,r]}):i.jsxs("div",{className:"flex flex-col gap-1.5",children:[l,r]})}const Ee=Q;function f({children:e,tone:t="neutral"}){const r=t==="error"?"text-red-600 dark:text-red-400":"text-oai-gray-500 dark:text-oai-gray-400";return i.jsx("div",{className:`text-[11px] leading-snug ${r}`,children:e})}function Se({rows:e,mode:t,extra:r=null}){const o=e.length===0&&!r;return i.jsxs(i.Fragment,{children:[e.map(({spec:a,pace:s})=>i.jsx(je,{label:a.label??n(a.labelKey),pct:w(a.window,a.pctField),reset:he(D(a.window,a.resetField)),mode:t,pacePercent:s.pacePercent,paceOver:s.paceOver,title:a.key==="credits"?we(a.window):null},a.key)),o?i.jsx(f,{children:n("limits.status.no_data")}):null,r]})}function Pe({row:e}){const t=Math.max(0,Math.min(100,Number(e.percent)||0));return i.jsxs("div",{className:"flex items-center gap-2","data-reset-bank-row":"",children:[i.jsx("span",{"data-limit-label":"",className:"text-[11px] text-oai-gray-500 dark:text-oai-gray-400 shrink-0 whitespace-nowrap",style:{width:"var(--tt-limits-label-w)"},children:e.label}),i.jsx("div",{className:"relative flex-1 bg-oai-gray-100 dark:bg-oai-gray-700/50 rounded-full h-1.5 overflow-hidden",children:i.jsx("div",{className:"bg-oai-gray-400 dark:bg-oai-gray-500 rounded-full h-full transition-[width] duration-500 ease-out",style:{width:`${t}%`,minWidth:t>0?"3px":0}})}),i.jsx("span",{className:"text-[10px] tabular-nums text-oai-gray-400 dark:text-oai-gray-500 w-[4.25rem] text-right shrink-0 whitespace-nowrap",children:e.expiresAt})]})}function Ie({model:e}){const t=e.kind==="count_only"?n("limits.codex_reset_bank.count_only",{count:e.availableCount}):null;return i.jsxs("div",{className:"mt-1 flex flex-col gap-1","data-reset-bank-section":e.kind,children:[i.jsx("div",{className:"text-[10.5px] font-medium uppercase tracking-wide text-oai-gray-400 dark:text-oai-gray-500",children:n("limits.codex_reset_bank.title")}),t?i.jsx("div",{className:"text-[11px] leading-snug text-oai-gray-500 dark:text-oai-gray-400",children:t}):e.rows.map(r=>i.jsx(Pe,{row:r},r.key))]})}function Le(e,t){if(e==="codex_meta"){const r=ye(t.reset_credits);return r?i.jsx(Ie,{model:r}):null}return e==="kimi_parallel"&&t.parallel_limit?i.jsx(f,{children:n("limits.label.kimi_parallel",{count:t.parallel_limit})}):e==="copilot_otel"&&!t.otel_has_files&&!t.otel_enabled?i.jsx(Re,{defaultDir:t.otel_default_dir}):null}function Oe(e,t,r,o,a,s,d=null){const c=C[e];if(!c)return null;const l=c.windows(t).filter(m=>m.window).map(m=>({spec:m,pace:_e(m,o)})),u=Le(c.extra,t);return i.jsxs(M,{name:r,providerId:e,expandable:l.length>0,expanded:a,onToggle:s,badge:d,children:[i.jsx(Se,{mode:o,rows:l,extra:u}),a?i.jsx(Ne,{rows:l,mode:o}):null]},e)}function Fe(e,t,r,o,a){if(!C[e])return null;if(!t?.configured)return i.jsxs(M,{name:_(e),providerId:e,children:[i.jsx(f,{children:n("limits.status.not_connected")}),e==="opencodeGo"?i.jsx(O,{}):null]},e);if(t.error)return i.jsxs(M,{name:_(e),providerId:e,children:[i.jsx(f,{tone:"error",children:n("shared.error.prefix",{error:t.error})}),e==="opencodeGo"?i.jsx(O,{}):null]},e);const s=_(e),d=t.plan_label?`${s} ${t.plan_label}`:s;let c=null;if(e==="antigravity")if(t.cached){const l=Me(t.cached_at);c=i.jsxs("div",{className:"relative inline-flex items-center group cursor-help ml-1",onClick:u=>u.stopPropagation(),children:[i.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[9px] font-semibold uppercase tracking-wider bg-oai-gray-100 dark:bg-oai-gray-800 border border-oai-gray-200/50 dark:border-oai-gray-700/50 text-oai-gray-500 dark:text-oai-gray-400 leading-normal",children:[i.jsx("span",{className:"h-1 w-1 rounded-full bg-oai-gray-400 dark:bg-oai-gray-500"}),n("limits.label.antigravity_cached"),l?i.jsxs(i.Fragment,{children:[" · ",l]}):null]}),i.jsxs("span",{className:"pointer-events-none absolute left-1/2 bottom-full z-20 mb-2 -translate-x-1/2 w-48 rounded-md bg-oai-gray-900 dark:bg-oai-gray-800 px-2.5 py-1.5 text-[10px] font-normal text-white text-center opacity-0 scale-95 translate-y-1 group-hover:opacity-100 group-hover:scale-100 group-hover:translate-y-0 transition-all duration-200 cubic-bezier(0.16, 1, 0.3, 1) leading-normal shadow-lg origin-bottom border border-oai-gray-800 dark:border-oai-gray-700",children:[n("limits.tooltip.antigravity_cached"),i.jsx("span",{className:"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent border-t-oai-gray-900 dark:border-t-oai-gray-800"})]})]})}else c=i.jsxs("div",{className:"relative inline-flex items-center group cursor-help ml-1",onClick:l=>l.stopPropagation(),children:[i.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[9px] font-semibold uppercase tracking-wider bg-emerald-500/10 dark:bg-emerald-500/15 border border-emerald-500/20 text-emerald-600 dark:text-emerald-400 leading-normal",children:[i.jsxs("span",{className:"relative flex h-1 w-1",children:[i.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75"}),i.jsx("span",{className:"relative inline-flex rounded-full h-1 w-1 bg-emerald-500"})]}),n("limits.label.antigravity_live")]}),i.jsxs("span",{className:"pointer-events-none absolute left-1/2 bottom-full z-20 mb-2 -translate-x-1/2 w-48 rounded-md bg-oai-gray-900 dark:bg-oai-gray-800 px-2.5 py-1.5 text-[10px] font-normal text-white text-center opacity-0 scale-95 translate-y-1 group-hover:opacity-100 group-hover:scale-100 group-hover:translate-y-0 transition-all duration-200 cubic-bezier(0.16, 1, 0.3, 1) leading-normal shadow-lg origin-bottom border border-oai-gray-800 dark:border-oai-gray-700",children:[n("limits.tooltip.antigravity_live"),i.jsx("span",{className:"absolute left-1/2 top-full -translate-x-1/2 border-4 border-transparent border-t-oai-gray-900 dark:border-t-oai-gray-800"})]})]});return Oe(e,t,d,r,o,a,c)}function Re({defaultDir:e}){const[t,r]=h.useState(!1),a=["export COPILOT_OTEL_ENABLED=true","export COPILOT_OTEL_EXPORTER_TYPE=file",`export COPILOT_OTEL_FILE_EXPORTER_PATH="${e||"$HOME/.copilot/otel"}/copilot-otel-$(date +%Y%m%d).jsonl"`].join(`
2
- `),s=async d=>{d.stopPropagation();try{await navigator.clipboard.writeText(a),r(!0),setTimeout(()=>r(!1),1600)}catch{}};return i.jsxs("div",{className:"mt-1 rounded-md border border-amber-300/60 dark:border-amber-700/40 bg-amber-50/50 dark:bg-amber-900/10 px-2.5 py-2 text-[11px] text-oai-gray-600 dark:text-oai-gray-300",children:[i.jsx("div",{className:"font-medium text-oai-gray-700 dark:text-oai-gray-200",children:n("limits.copilot.otelHint.title")}),i.jsx("div",{className:"mt-0.5 leading-snug",children:n("limits.copilot.otelHint.body")}),i.jsx("pre",{className:"mt-1.5 overflow-x-auto rounded bg-oai-gray-100 dark:bg-oai-gray-900/60 px-2 py-1.5 font-mono text-[10.5px] leading-tight whitespace-pre",children:a}),i.jsx("button",{type:"button",onClick:s,className:"mt-1 inline-flex items-center gap-1 rounded border border-oai-gray-300 dark:border-oai-gray-700 px-1.5 py-0.5 text-[10.5px] text-oai-gray-700 dark:text-oai-gray-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors",children:t?n("limits.copilot.otelHint.copied"):n("limits.copilot.otelHint.copy")})]})}function v({n:e,children:t}){return i.jsxs("li",{className:"flex gap-2.5",children:[i.jsx("span",{className:"mt-[1px] flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-oai-brand/15 text-[9px] font-semibold text-oai-brand",children:e}),i.jsx("div",{className:"min-w-0 flex-1 leading-snug",children:t})]})}function Ke(){return i.jsx("svg",{viewBox:"0 0 12 12","aria-hidden":"true",className:"h-2.5 w-2.5",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:i.jsx("path",{d:"M4.5 2.75h4.75V7.5M9.25 2.75 3 9"})})}function O(){const[e,t]=h.useState(!1),r=['export OPENCODE_GO_AUTH_COOKIE="..."','# Optional: export OPENCODE_GO_WORKSPACE_ID="wrk_..." (Only if auto-discovery fails)'].join(`
3
- `),o=async a=>{a.stopPropagation();try{await navigator.clipboard.writeText(r),t(!0),setTimeout(()=>t(!1),1600)}catch{}};return i.jsxs("div",{className:"mt-1.5 rounded-lg border border-oai-gray-200 dark:border-oai-gray-700/60 bg-oai-gray-50/50 dark:bg-oai-gray-900/20 p-3 text-[11px] text-oai-gray-600 dark:text-oai-gray-300",children:[i.jsx("div",{className:"text-[12px] font-semibold text-oai-gray-800 dark:text-oai-gray-100",children:n("limits.opencodeGo.setupHint.title")}),i.jsx("div",{className:"mt-0.5 leading-snug text-oai-gray-500 dark:text-oai-gray-400",children:n("limits.opencodeGo.setupHint.subtitle")}),i.jsxs("ol",{className:"mt-2.5 space-y-2.5",children:[i.jsxs(v,{n:"1",children:[i.jsx("div",{children:n("limits.opencodeGo.setupHint.step1")}),i.jsxs("a",{href:"https://opencode.ai",target:"_blank",rel:"noreferrer",onClick:a=>a.stopPropagation(),className:"mt-1 inline-flex items-center gap-1 rounded-md bg-oai-brand/10 px-2 py-1 font-medium text-oai-brand hover:bg-oai-brand/15 transition-colors",children:[n("limits.opencodeGo.setupHint.cta"),i.jsx(Ke,{})]})]}),i.jsxs(v,{n:"2",children:[i.jsx("div",{children:n("limits.opencodeGo.setupHint.step2")}),i.jsxs("ul",{className:"mt-1 space-y-0.5 text-oai-gray-500 dark:text-oai-gray-400",children:[i.jsx("li",{children:n("limits.opencodeGo.setupHint.step2_workspace")}),i.jsx("li",{children:n("limits.opencodeGo.setupHint.step2_cookie")})]})]}),i.jsxs(v,{n:"3",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{children:n("limits.opencodeGo.setupHint.step3")}),i.jsx("button",{type:"button",onClick:o,className:"shrink-0 rounded-md border border-oai-gray-300 dark:border-oai-gray-700 px-2 py-0.5 text-[10.5px] text-oai-gray-700 dark:text-oai-gray-200 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors",children:e?n("limits.opencodeGo.setupHint.copied"):n("limits.opencodeGo.setupHint.copy")})]}),i.jsx("pre",{className:"mt-1.5 overflow-x-auto rounded-md bg-oai-gray-100 dark:bg-oai-gray-900/60 px-2 py-1.5 font-mono text-[10.5px] leading-relaxed whitespace-pre",children:r}),i.jsx("div",{className:"mt-1 text-[10px] text-oai-gray-400 dark:text-oai-gray-500",children:n("limits.opencodeGo.setupHint.note_app")})]})]})]})}function Ce(e){const[t,r]=h.useState(0);return h.useLayoutEffect(()=>{const o=e.current;if(!o)return;const a=o.querySelectorAll("[data-limit-label]");let s=0,d=null;if(a.length>0)try{d=document.createElement("canvas").getContext("2d")}catch{d=null}if(d){const l=window.getComputedStyle(a[0]);d.font=`${l.fontStyle} ${l.fontWeight} ${l.fontSize} ${l.fontFamily}`;for(const u of a)s=Math.max(s,d.measureText(u.textContent).width)}const c=Math.ceil(s);r(l=>l===c?l:c)}),t}function De({claude:e,codex:t,cursor:r,gemini:o,kimi:a,kiro:s,grok:d,antigravity:c,copilot:l,zcode:u,opencodeGo:m,order:x,visibility:b,displayMode:T}){const A={claude:e,codex:t,cursor:r,gemini:o,kimi:a,kiro:s,grok:d,antigravity:c,copilot:l,zcode:u,opencodeGo:m},E=h.useRef(null),S=Ce(E),[G,$]=h.useState(null),H=Array.isArray(x)&&x.length>0?x:Ee,P=T===p.REMAINING?p.REMAINING:p.USED,z=P===p.REMAINING?n("limits.settings.display_mode_remaining"):n("limits.settings.display_mode_used"),I=H.filter(g=>!b||b[g]!==!1).map(g=>Fe(g,A[g],P,G===g,()=>$(W=>W===g?null:g))).filter(Boolean);return i.jsx(te,{delay:.15,children:i.jsx(R,{children:i.jsxs("div",{ref:E,className:"flex flex-col gap-3",style:S>0?{"--tt-limits-label-w":`${S}px`}:void 0,children:[i.jsxs("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:[n("limits.panel.title"),n("limits.panel.mode_separator"),z]}),I.length>0?I:i.jsx(f,{children:n("limits.status.all_hidden")})]})})})}const Te=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");function Ve(){const e=V(),{data:t,error:r,isLoading:o}=J(e?{initialRefresh:!0,initialState:e,publishToPreloadCache:!0}:{initialRefresh:!0,publishToPreloadCache:!0}),a=ee();return!Te&&!X()?i.jsx("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:i.jsx(ie,{})}):i.jsx("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:i.jsx("main",{className:"flex-1 pt-8 sm:pt-10 pb-12 sm:pb-16",children:i.jsxs("div",{className:"mx-auto max-w-6xl px-4 sm:px-6",children:[i.jsxs("div",{className:"flex flex-row items-start justify-between gap-4 mb-8",children:[i.jsxs("div",{className:"min-w-0",children:[i.jsx("h1",{className:"text-3xl sm:text-4xl font-semibold tracking-tight text-oai-black dark:text-white mb-3",children:n("nav.limits")}),i.jsx("p",{className:"text-oai-gray-500 dark:text-oai-gray-400 text-sm sm:text-base",children:n("limits.page.subtitle")})]}),i.jsx(Y,{to:"/settings","aria-label":n("limits.page.openSettings"),title:n("limits.page.openSettings"),className:"shrink-0 inline-flex h-9 w-9 items-center justify-center rounded-lg border border-oai-gray-200 dark:border-oai-gray-800 text-oai-gray-600 dark:text-oai-gray-400 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 hover:text-oai-black dark:hover:text-white transition-colors no-underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500",children:i.jsx(q,{className:"h-4 w-4","aria-hidden":!0})})]}),o?i.jsx(oe,{}):i.jsxs(i.Fragment,{children:[r?i.jsx("p",{className:"mb-4 text-sm text-red-500 dark:text-red-400",children:n("shared.error.prefix",{error:r})}):null,i.jsx(De,{claude:t?.claude,codex:t?.codex,cursor:t?.cursor,gemini:t?.gemini,kimi:t?.kimi,kiro:t?.kiro,grok:t?.grok,antigravity:t?.antigravity,copilot:t?.copilot,zcode:t?.zcode,opencodeGo:t?.opencodeGo,order:a.order,visibility:a.visibility,displayMode:a.displayMode})]})]})})})}export{Ve as LimitsPage};