tokentracker-cli 0.87.14 → 0.87.16

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 (109) hide show
  1. package/README.de.md +2 -2
  2. package/README.ja.md +2 -2
  3. package/README.ko.md +2 -2
  4. package/README.md +3 -3
  5. package/README.zh-CN.md +2 -2
  6. package/dashboard/dist/assets/{AchievementBadge-D06ffgXR.js → AchievementBadge-DaKHLTL2.js} +1 -1
  7. package/dashboard/dist/assets/{AchievementsPage-D6uGfLgx.js → AchievementsPage-DJdtjodG.js} +2 -2
  8. package/dashboard/dist/assets/{AchievementsSection-Chjq16ns.js → AchievementsSection-DVtxGDIP.js} +1 -1
  9. package/dashboard/dist/assets/{BadgeDetailModal-D42zXSN1.js → BadgeDetailModal-CF2dlQkT.js} +1 -1
  10. package/dashboard/dist/assets/{Card-DGOEtq_3.js → Card-DuQWS5aB.js} +1 -1
  11. package/dashboard/dist/assets/{ClawdAnimated-B6HFLXEb.js → ClawdAnimated-l8AN6_pc.js} +1 -1
  12. package/dashboard/dist/assets/{CommandPalette-1tyBT_Gf.js → CommandPalette-DWKyGhWG.js} +1 -1
  13. package/dashboard/dist/assets/{CommunityStatsModal-Cvbk67o1.js → CommunityStatsModal-CoJ9i3QH.js} +1 -1
  14. package/dashboard/dist/assets/{ConfirmModal-RHQRpQG1.js → ConfirmModal-DM6A6p4g.js} +1 -1
  15. package/dashboard/dist/assets/{Controls-WATRUYwX.js → Controls-DBUMibne.js} +1 -1
  16. package/dashboard/dist/assets/{DashboardPage-B-jHLRu6.js → DashboardPage-BgVXjT0v.js} +1 -1
  17. package/dashboard/dist/assets/{DevicePage-CgYxNWgU.js → DevicePage-Beby6BhC.js} +1 -1
  18. package/dashboard/dist/assets/{DialogClose-CIQziRo4.js → DialogClose-nwx-N3WL.js} +1 -1
  19. package/dashboard/dist/assets/DialogDescription-BFVB627n.js +1 -0
  20. package/dashboard/dist/assets/{DialogTitle-DG5OaNy0.js → DialogTitle-Cw53obf0.js} +1 -1
  21. package/dashboard/dist/assets/{FadeIn-BmtyZXeb.js → FadeIn-CTTwoVh-.js} +1 -1
  22. package/dashboard/dist/assets/{HeaderGithubStar-Cg7Ap56b.js → HeaderGithubStar-BvaEHM9B.js} +1 -1
  23. package/dashboard/dist/assets/{HoverTooltip-Dh1v-yph.js → HoverTooltip-CbJqz6cF.js} +1 -1
  24. package/dashboard/dist/assets/{IpCheckPage-CqQqdE3D.js → IpCheckPage-I0REWeew.js} +1 -1
  25. package/dashboard/dist/assets/{LandingPage-Ct4m67m9.js → LandingPage-CuMWPQBC.js} +2 -2
  26. package/dashboard/dist/assets/{LeaderboardAvatar-3ZA9tDrh.js → LeaderboardAvatar-MHfIP4_U.js} +1 -1
  27. package/dashboard/dist/assets/{LeaderboardPage-CQZf8G8t.js → LeaderboardPage-DfDM-dH9.js} +2 -2
  28. package/dashboard/dist/assets/{LeaderboardProfileModal-KaaGOK3_.js → LeaderboardProfileModal-hmpU-JV7.js} +3 -3
  29. package/dashboard/dist/assets/{LeaderboardProfilePage-DsiYvLlz.js → LeaderboardProfilePage-DtUb4dDZ.js} +1 -1
  30. package/dashboard/dist/assets/LimitsPage-CtA0c2G5.js +4 -0
  31. package/dashboard/dist/assets/{LocalOnlyNotice-DMrkrlZY.js → LocalOnlyNotice-WI3Oke4U.js} +1 -1
  32. package/dashboard/dist/assets/{LoginCard-BFQJZmKV.js → LoginCard-DMprjRI7.js} +1 -1
  33. package/dashboard/dist/assets/{LoginModal-Dx4_4UfW.js → LoginModal-DffmK0ro.js} +1 -1
  34. package/dashboard/dist/assets/{LoginPage-AmxdJOiw.js → LoginPage-B2ZgB6K7.js} +1 -1
  35. package/dashboard/dist/assets/{PetPage-DbMcLOoc.js → PetPage-D_U7yXgF.js} +1 -1
  36. package/dashboard/dist/assets/{PopoverPopup-CwOPhh6g.js → PopoverPopup-Ph-9l9jU.js} +1 -1
  37. package/dashboard/dist/assets/{ProviderIcon-C2183DbB.js → ProviderIcon-D2s_KSYC.js} +1 -1
  38. package/dashboard/dist/assets/{ResetPasswordPage-CwQt9Jh0.js → ResetPasswordPage-Cpg2C8BI.js} +1 -1
  39. package/dashboard/dist/assets/{SegmentedControl-2gfEdOHR.js → SegmentedControl-C89jlPzS.js} +1 -1
  40. package/dashboard/dist/assets/{Select-BknJIua6.js → Select-BLPgobGl.js} +1 -1
  41. package/dashboard/dist/assets/{SelectItemText-BNfM6qJ0.js → SelectItemText-CLTEQqQZ.js} +1 -1
  42. package/dashboard/dist/assets/{ServiceStatusPage-_C25Txd5.js → ServiceStatusPage-Bd1ec7bz.js} +1 -1
  43. package/dashboard/dist/assets/{SessionsPage-B_QkotAc.js → SessionsPage-HPbQDLZ5.js} +1 -1
  44. package/dashboard/dist/assets/{SettingsPage-B-vif0ea.js → SettingsPage-CwfcRYYu.js} +1 -1
  45. package/dashboard/dist/assets/{SkillsPage-BX2rApOM.js → SkillsPage-DflhF8pa.js} +1 -1
  46. package/dashboard/dist/assets/{TokenGalaxy-C9LrhOJ1.js → TokenGalaxy-CylVSV2J.js} +1 -1
  47. package/dashboard/dist/assets/{ToolbarRootContext-Bevy5CSh.js → ToolbarRootContext-BzBAJ8C5.js} +1 -1
  48. package/dashboard/dist/assets/{TrendMonitor-C6axjU1E.js → TrendMonitor-B0IzqLaN.js} +1 -1
  49. package/dashboard/dist/assets/{WidgetsPage-gmpxGRU-.js → WidgetsPage-Bvt5JCoS.js} +1 -1
  50. package/dashboard/dist/assets/{WrappedPage-Lyyj4Lfy.js → WrappedPage-BXjDpjD_.js} +1 -1
  51. package/dashboard/dist/assets/{__vite-browser-external-DsFkaOPr.js → __vite-browser-external-CDv96ZcG.js} +14 -11
  52. package/dashboard/dist/assets/{agent-logos-CmI9Jrx-.js → agent-logos-bPIt1QVl.js} +1 -1
  53. package/dashboard/dist/assets/{arrow-up-right-BDsE7MjI.js → arrow-up-right-C_6NrnRB.js} +1 -1
  54. package/dashboard/dist/assets/{check-Dv03s0Oi.js → check-ovHAYNwt.js} +1 -1
  55. package/dashboard/dist/assets/{chevron-right-Bg0LlTK2.js → chevron-right-BeHvjzPf.js} +1 -1
  56. package/dashboard/dist/assets/{copy-M7jcXrOp.js → copy-DRQHwFKm.js} +1 -1
  57. package/dashboard/dist/assets/{download-B7-6bJLc.js → download-qPfSWDyf.js} +1 -1
  58. package/dashboard/dist/assets/{external-link-C2dWQL59.js → external-link-t7Qbyp7r.js} +1 -1
  59. package/dashboard/dist/assets/{flame-fuODmpET.js → flame-DlRdMOxO.js} +1 -1
  60. package/dashboard/dist/assets/{format-tokens-BKb3uo9Y.js → format-tokens-DP1DrOxZ.js} +1 -1
  61. package/dashboard/dist/assets/{icons-CZ3rB5D9.js → icons-DBgKdjpV.js} +1 -1
  62. package/dashboard/dist/assets/{index-CMfErAEy.js → index-BFaAjCwg.js} +1 -1
  63. package/dashboard/dist/assets/{index-CyzVAu8L.js → index-C1wNjCL_.js} +1 -1
  64. package/dashboard/dist/assets/{index-DSLv7Mj8.js → index-Dtzl1NhK.js} +1 -1
  65. package/dashboard/dist/assets/{info-gtQU6mdi.js → info-D9fn_ZQQ.js} +1 -1
  66. package/dashboard/dist/assets/limits-providers-JyTKN-3e.js +1 -0
  67. package/dashboard/dist/assets/{link-2-DAoauLvL.js → link-2-CmnuQiZs.js} +1 -1
  68. package/dashboard/dist/assets/{loader-circle-C6-hnHM5.js → loader-circle-Bm3FqDLX.js} +1 -1
  69. package/dashboard/dist/assets/{maximize-2-DBWhzAmU.js → maximize-2-CutKDynW.js} +1 -1
  70. package/dashboard/dist/assets/{modifiers.esm-Cg5lp-7f.js → modifiers.esm-C94MH21S.js} +1 -1
  71. package/dashboard/dist/assets/{monitor-smartphone-BVkQLoJM.js → monitor-smartphone-wSLhNWq5.js} +1 -1
  72. package/dashboard/dist/assets/{provider-display-N7MWKGSI.js → provider-display-CR8o_M3v.js} +1 -1
  73. package/dashboard/dist/assets/{react-DDPYgpAM.js → react-Cc1Ca2uE.js} +1 -1
  74. package/dashboard/dist/assets/{search-M9zIhfTN.js → search-BXeDDAWS.js} +1 -1
  75. package/dashboard/dist/assets/{skills-api-DPJzchQg.js → skills-api-DBP8kM7W.js} +1 -1
  76. package/dashboard/dist/assets/{sortable.esm-B1tZenH5.js → sortable.esm-Cd_ODlnX.js} +1 -1
  77. package/dashboard/dist/assets/{store-DmPQtoHI.js → store-lmptvFHG.js} +1 -1
  78. package/dashboard/dist/assets/{terminal-BpvBtoDx.js → terminal-965BMhR0.js} +1 -1
  79. package/dashboard/dist/assets/{trash-2-XKMDw3cY.js → trash-2-wq5YeaAT.js} +1 -1
  80. package/dashboard/dist/assets/{use-community-stats-B1BMhURp.js → use-community-stats-BCIgHdTZ.js} +1 -1
  81. package/dashboard/dist/assets/{use-limits-display-prefs-DaZnSXop.js → use-limits-display-prefs-D0MB2ewv.js} +1 -1
  82. package/dashboard/dist/assets/{use-ordered-list-DKa6gE-O.js → use-ordered-list-DrQsh022.js} +1 -1
  83. package/dashboard/dist/assets/use-reduced-motion-DhNppA5X.js +1 -0
  84. package/dashboard/dist/assets/{use-session-efficiency-pref-B9I7_v4k.js → use-session-efficiency-pref-BeBSADa-.js} +1 -1
  85. package/dashboard/dist/assets/{use-transform-Ce5ESEGX.js → use-transform-fRpwp-G3.js} +1 -1
  86. package/dashboard/dist/assets/{use-usage-limits-Ex51qVV9.js → use-usage-limits-C0Tk-ghm.js} +1 -1
  87. package/dashboard/dist/assets/{useCurrency-8kmm6K74.js → useCurrency-BAZNRyKh.js} +1 -1
  88. package/dashboard/dist/assets/{useScrollLock-D3ximygL.js → useScrollLock-CU659jBG.js} +1 -1
  89. package/dashboard/dist/assets/{useTokenFormat-BtVvEcPK.js → useTokenFormat-l0Xd62a5.js} +1 -1
  90. package/dashboard/dist/assets/{zap-y-504T0t.js → zap-CWFkq16a.js} +1 -1
  91. package/dashboard/dist/index.html +4 -4
  92. package/dashboard/dist/ip-check.html +1 -1
  93. package/dashboard/dist/leaderboard.html +1 -1
  94. package/dashboard/dist/share.html +1 -1
  95. package/package.json +1 -1
  96. package/src/commands/serve.js +11 -3
  97. package/src/commands/status.js +34 -0
  98. package/src/commands/sync.js +95 -1
  99. package/src/lib/diagnostics.js +10 -0
  100. package/src/lib/fs.js +79 -1
  101. package/src/lib/pricing/seed-snapshot.json +1 -1
  102. package/src/lib/qoder-limits.js +89 -34
  103. package/src/lib/rollout.js +226 -43
  104. package/src/lib/session-analytics.js +45 -5
  105. package/src/lib/usage-limits.js +93 -14
  106. package/dashboard/dist/assets/DialogDescription-CMZSKLXB.js +0 -1
  107. package/dashboard/dist/assets/LimitsPage-Dv1fg4Jh.js +0 -4
  108. package/dashboard/dist/assets/limits-providers-B9o4daVn.js +0 -1
  109. package/dashboard/dist/assets/use-reduced-motion-fPvY8iYM.js +0 -1
@@ -27,7 +27,7 @@ const {
27
27
  const { fetchGrokLimits } = require("./grok-limits");
28
28
  const { fetchZcodeLimits } = require("./zcode-limits");
29
29
  const { fetchOpencodeGoLimits } = require("./opencode-go-limits");
30
- const { fetchQoderLimits } = require("./qoder-limits");
30
+ const { fetchQoderLimits, fetchQoderCnLimits } = require("./qoder-limits");
31
31
  const { fetchProviderServiceStatus } = require("./provider-status");
32
32
  const { readSqliteJsonRows, readSqliteJsonRowsAsync } = require("./sqlite-reader");
33
33
 
@@ -2153,16 +2153,48 @@ function extractCommandFlag(command, flag) {
2153
2153
  return match?.[1] || null;
2154
2154
  }
2155
2155
 
2156
- async function detectAntigravityProcess({ commandRunner } = {}) {
2157
- const result = await runCommand(commandRunner, "/bin/ps", ["-ax", "-o", "pid=,command="], {
2158
- timeout: 4000,
2159
- });
2160
- const lines = String(result?.stdout || "").split("\n");
2156
+ function parseWindowsProcesses(output) {
2157
+ let parsed;
2158
+ try {
2159
+ parsed = JSON.parse(String(output || "").trim());
2160
+ } catch (_error) {
2161
+ return [];
2162
+ }
2163
+ return (Array.isArray(parsed) ? parsed : [parsed])
2164
+ .map((entry) => ({
2165
+ pid: Number(entry?.ProcessId),
2166
+ command: typeof entry?.CommandLine === "string" ? entry.CommandLine : "",
2167
+ }))
2168
+ .filter((entry) => Number.isFinite(entry.pid) && entry.command);
2169
+ }
2170
+
2171
+ async function detectAntigravityProcess({ commandRunner, platform = process.platform } = {}) {
2172
+ let processes;
2173
+ if (platform === "win32") {
2174
+ const script = [
2175
+ "$ErrorActionPreference = 'Stop'",
2176
+ "$processes = Get-CimInstance Win32_Process | Select-Object ProcessId, CommandLine",
2177
+ "ConvertTo-Json -Compress -InputObject @($processes)",
2178
+ ].join("; ");
2179
+ const result = await runCommand(
2180
+ commandRunner,
2181
+ "powershell.exe",
2182
+ ["-NoProfile", "-NonInteractive", "-Command", script],
2183
+ { timeout: 4000 },
2184
+ );
2185
+ processes = parseWindowsProcesses(result?.stdout);
2186
+ } else {
2187
+ const result = await runCommand(commandRunner, "/bin/ps", ["-ax", "-o", "pid=,command="], {
2188
+ timeout: 4000,
2189
+ });
2190
+ processes = String(result?.stdout || "")
2191
+ .split("\n")
2192
+ .map(parseProcessLine)
2193
+ .filter(Boolean);
2194
+ }
2161
2195
 
2162
2196
  let sawProcess = false;
2163
- for (const line of lines) {
2164
- const parsed = parseProcessLine(line);
2165
- if (!parsed) continue;
2197
+ for (const parsed of processes) {
2166
2198
  if (!isAntigravityCommandLine(parsed.command)) continue;
2167
2199
  sawProcess = true;
2168
2200
  const csrfToken = extractCommandFlag(parsed.command, "--csrf_token") || null;
@@ -2521,7 +2553,40 @@ function parseListeningPorts(output) {
2521
2553
  return Array.from(ports).sort((a, b) => a - b);
2522
2554
  }
2523
2555
 
2524
- async function listAntigravityPorts(pid, { commandRunner } = {}) {
2556
+ function windowsEndpointPort(endpoint) {
2557
+ const match = String(endpoint || "").match(/:(\d+)$/);
2558
+ return match ? Number(match[1]) : null;
2559
+ }
2560
+
2561
+ function parseWindowsListeningPorts(output, pid) {
2562
+ const ports = new Set();
2563
+ for (const line of String(output || "").split("\n")) {
2564
+ const fields = line.trim().split(/\s+/);
2565
+ if (fields.length < 5 || fields[0]?.toUpperCase() !== "TCP") continue;
2566
+ if (Number(fields.at(-1)) !== Number(pid)) continue;
2567
+ // netstat localizes its state label. A TCP listener's foreign endpoint is
2568
+ // always the wildcard address with port 0, which stays language-neutral.
2569
+ if (windowsEndpointPort(fields[2]) !== 0) continue;
2570
+ const port = windowsEndpointPort(fields[1]);
2571
+ if (Number.isInteger(port) && port > 0 && port <= 65535) ports.add(port);
2572
+ }
2573
+ return Array.from(ports).sort((a, b) => a - b);
2574
+ }
2575
+
2576
+ async function listAntigravityPorts(pid, { commandRunner, platform = process.platform } = {}) {
2577
+ if (platform === "win32") {
2578
+ const result = await runCommand(
2579
+ commandRunner,
2580
+ "netstat.exe",
2581
+ ["-ano", "-p", "tcp"],
2582
+ { timeout: 4000 },
2583
+ );
2584
+ const ports = parseWindowsListeningPorts(result?.stdout, pid);
2585
+ if (!ports.length) {
2586
+ throw new Error("Antigravity is running but not exposing ports yet. Try again in a few seconds.");
2587
+ }
2588
+ return ports;
2589
+ }
2525
2590
  const lsof = await resolveLsofBinary({ commandRunner });
2526
2591
  if (!lsof) {
2527
2592
  throw new Error("Antigravity port detection needs lsof. Install it, then retry.");
@@ -2827,7 +2892,7 @@ function hasAntigravityInstallEvidence({ home } = {}) {
2827
2892
  });
2828
2893
  }
2829
2894
 
2830
- async function fetchAntigravityLimits({ home, commandRunner, requestFn, fetchImpl = fetch, timeoutMs = 8000, nowMs = Date.now() } = {}) {
2895
+ async function fetchAntigravityLimits({ home, commandRunner, requestFn, fetchImpl = fetch, timeoutMs = 8000, nowMs = Date.now(), platform = process.platform } = {}) {
2831
2896
  const finalize = (payload, normalizeOptions) => {
2832
2897
  const result = {
2833
2898
  configured: true,
@@ -2849,7 +2914,7 @@ async function fetchAntigravityLimits({ home, commandRunner, requestFn, fetchImp
2849
2914
  };
2850
2915
 
2851
2916
  try {
2852
- const processInfo = await detectAntigravityProcess({ commandRunner });
2917
+ const processInfo = await detectAntigravityProcess({ commandRunner, platform });
2853
2918
  if (!processInfo.configured) {
2854
2919
  const cached = readAntigravityLimitsCache({ home, nowMs });
2855
2920
  if (cached) return cached;
@@ -2863,7 +2928,7 @@ async function fetchAntigravityLimits({ home, commandRunner, requestFn, fetchImp
2863
2928
  if (processInfo.error) {
2864
2929
  return { configured: true, error: processInfo.error };
2865
2930
  }
2866
- const ports = await listAntigravityPorts(processInfo.pid, { commandRunner });
2931
+ const ports = await listAntigravityPorts(processInfo.pid, { commandRunner, platform });
2867
2932
  let workingPort = null;
2868
2933
  let workingScheme = "https";
2869
2934
  for (const port of ports) {
@@ -3100,7 +3165,7 @@ async function fetchUsageLimitsUncached({
3100
3165
  : null;
3101
3166
 
3102
3167
  const providerFetch = withFetchTimeout(fetchImpl, providerTimeoutMs);
3103
- const [claudeResult, codexResult, cursor, kimi, gemini, kiro, antigravity, copilot, grok, zcode, opencodeGo, qoder, claudeServiceStatus] = await Promise.all([
3168
+ const [claudeResult, codexResult, cursor, kimi, gemini, kiro, antigravity, copilot, grok, zcode, opencodeGo, qoder, qoderCn, claudeServiceStatus] = await Promise.all([
3104
3169
  claudeToken && !freshClaudeCache && !claudeRetryAtMs
3105
3170
  ? withProviderTimeout(fetchClaudeUsageLimits(claudeToken, { fetchImpl: providerFetch, maxAttempts: 1 }), "Claude", providerTimeoutMs).then(
3106
3171
  (value) => ({ status: "fulfilled", value }),
@@ -3146,6 +3211,16 @@ async function fetchUsageLimitsUncached({
3146
3211
  "Qoder",
3147
3212
  providerTimeoutMs,
3148
3213
  ).catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
3214
+ withProviderTimeout(
3215
+ fetchQoderCnLimits({
3216
+ home,
3217
+ env,
3218
+ platform,
3219
+ fetchImpl: providerFetch,
3220
+ }),
3221
+ "Qoder CN",
3222
+ providerTimeoutMs,
3223
+ ).catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
3149
3224
  // Public status-page probe (fail-soft, own 5-min cache in provider-status.js).
3150
3225
  // Only probed for configured accounts — without a token the Claude section
3151
3226
  // never renders, so the reading would have nowhere to go.
@@ -3295,6 +3370,7 @@ async function fetchUsageLimitsUncached({
3295
3370
  zcode: withPlanLabel(zcode, zcode.plan_label, "ZCode"),
3296
3371
  opencodeGo: withPlanLabel(opencodeGo, opencodeGo?.plan_label, "OpenCode Go"),
3297
3372
  qoder: withPlanLabel(qoder, qoder?.plan_label, "Qoder"),
3373
+ qoderCn: withPlanLabel(qoderCn, qoderCn?.plan_label, "Qoder CN"),
3298
3374
  };
3299
3375
 
3300
3376
  for (const [providerName, provider] of Object.entries(data)) {
@@ -3342,6 +3418,8 @@ module.exports = {
3342
3418
  fetchKiroLimits,
3343
3419
  normalizeAntigravityResponse,
3344
3420
  parseListeningPorts,
3421
+ parseWindowsListeningPorts,
3422
+ listAntigravityPorts,
3345
3423
  detectAntigravityProcess,
3346
3424
  fetchAntigravityLimits,
3347
3425
  fetchCopilotLimits,
@@ -3355,4 +3433,5 @@ module.exports = {
3355
3433
  fetchZcodeLimits,
3356
3434
  fetchOpencodeGoLimits,
3357
3435
  fetchQoderLimits,
3436
+ fetchQoderCnLimits,
3358
3437
  };
@@ -1 +0,0 @@
1
- import{r as n,z as a}from"./__vite-browser-external-DsFkaOPr.js";import{u as p}from"./DialogTitle-DG5OaNy0.js";import{u as c}from"./useScrollLock-D3ximygL.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,{store:i}=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
@@ -1,4 +0,0 @@
1
- import{m as $,j as t,e as B,c as r,k as W,r as b,ae,d as ie,J as re,L as ne,af as oe,q as se,ag as le}from"./__vite-browser-external-DsFkaOPr.js";import{m as D}from"./react-DDPYgpAM.js";import{P,c as ce,r as M,a as de,u as ue,b as me,s as xe}from"./use-usage-limits-Ex51qVV9.js";import{L as m,u as pe}from"./use-limits-display-prefs-DaZnSXop.js";import{C as U}from"./Card-DGOEtq_3.js";import{F as ge}from"./FadeIn-BmtyZXeb.js";import{L as fe,l as v,a as he}from"./limits-providers-B9o4daVn.js";import{P as be}from"./ProviderIcon-C2183DbB.js";import{H as ye}from"./HoverTooltip-Dh1v-yph.js";import{L as ke}from"./LocalOnlyNotice-DMrkrlZY.js";import{u as ve}from"./use-reduced-motion-fPvY8iYM.js";import"./arrow-up-right-BDsE7MjI.js";import"./download-B7-6bJLc.js";const je=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742",key:"178tsu"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05",key:"1hqiys"}]],_e=$("bell-off",je);const Ne=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],we=$("bell",Ne),Me=[3,2,3,3,2,2,3];function f({className:e}){return t.jsx("div",{className:B("rounded bg-oai-gray-200/70 dark:bg-oai-gray-800/70 animate-pulse",e)})}function Ee(){return t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(f,{className:"h-3 w-12 shrink-0"}),t.jsx(f,{className:"flex-1 h-1.5 rounded-full min-w-0"}),t.jsx(f,{className:"h-3 w-[30px] shrink-0"}),t.jsx(f,{className:"h-3 w-6 shrink-0"})]})}function Ie({bars:e,index:a}){const i=a%3===0?"w-24":a%3===1?"w-20":"w-[4.5rem]";return t.jsxs("div",{className:"flex flex-col gap-1.5",children:[t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx(f,{className:"h-[14px] w-[14px] rounded shrink-0"}),t.jsx(f,{className:B("h-4",i)})]}),Array.from({length:e},(o,n)=>t.jsx(Ee,{},n))]})}function Le(){return t.jsx(U,{children:t.jsxs("div",{className:"flex flex-col gap-3",children:[t.jsx(f,{className:"h-3.5 w-28"}),Me.map((e,a)=>t.jsx(Ie,{bars:e,index:a},a))]})})}const O=100;function F(e){const a=Date.parse(e);return Number.isFinite(a)?a:null}function Pe(e){return Math.max(0,Math.min(O,Math.round(e)))}function Oe(e){return new Intl.DateTimeFormat(W(),{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(e))}function Se(e,a,i){if(e==null||e>=a)return O;const o=a-e,n=a-i;return Pe(n/o*O)}function Re(e){const a=e.available_count;return a===null?null:Number.isInteger(a)&&a>=0?a:void 0}function Ce(e,{now:a}={}){if(!e||typeof e!="object")return null;const i=Re(e);if(i===void 0)return null;const o=Array.isArray(e.credits)?e.credits:[],n=a instanceof Date?a.getTime():Number(a??Date.now()),s=[];for(const d of o){const c=F(d?.expires_at);if(c==null)continue;const l=s.length+1;s.push({key:`reset-${l}`,label:r("limits.codex_reset_bank.row_label",{index:l}),expiresAt:Oe(c),expiresMs:c,percent:Se(F(d?.granted_at),c,n)})}return i===0?null:s.length>0?{kind:"rows",availableCount:i??s.length,rows:s}:i>0?{kind:"count_only",availableCount:i,rows:[]}:null}const Te="shrink-0 text-oai-black dark:text-oai-white";function Ae(e){const a=M(e);if(!Number.isFinite(a))return null;const i=a-Date.now();if(i<=0)return r("shared.time.now");const o=Math.floor(i/6e4);if(o<60)return`${o}m`;const n=Math.floor(o/60);return n<24?`${n}h`:`${Math.floor(n/24)}d`}function De(e,a){const i=a===m.REMAINING?100-e:e;return i>=90?"bg-red-500":i>=70?"bg-amber-500":"bg-emerald-500"}function w(e,a="used_percent"){return e?a==="utilization"?e.utilization:e.used_percent:null}function E(e,a="reset_at"){return e?a==="resets_at"?e.resets_at:e.reset_at:null}function I(e){const a=Math.max(0,Math.min(100,Number(e)||0)),i=Math.round(a);return a>0&&i===0?r("limits.bar.sub_one_percent"):String(i)}function _(e,{useGrouping:a=!0,maximumFractionDigits:i}={}){const o=Number(e);return Number.isFinite(o)?new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:i??(o>=100?0:2),useGrouping:a}).format(o):null}function Fe(e){if(!e||typeof e!="object"||!(Number(e.limit_credits)>0))return null;const a={useGrouping:e.unit!=="calls"},i=_(e.used_credits,a),o=_(e.limit_credits,a),n=_(e.remaining_credits,a);if(!i||!o||!n)return null;const s=e.unit==="calls"?"limits.qoder_calls.detail":"limits.codex_credits.detail";return r(s,{used:i,limit:o,remaining:n})}function Ge(e,a){return ce({usedPercent:w(e.window,e.pctField),windowSeconds:de(e,e.window),resetMs:M(E(e.window,e.resetField)),mode:a})}function q(e){return Number.isFinite(e)?new Intl.DateTimeFormat(W(),{month:"numeric",day:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(new Date(e)):null}function He(e,a,i){const o=[z(e,a,i)],n=M(E(e.window,e.resetField)),s=q(n);s&&o.push(r(e.timeKind==="expiry"?"limits.hover.expires_at":"limits.hover.resets_at",{time:s}));const d=Fe(e.window);return d&&o.push(d),o.join(`
2
- `)}const K=ye;function $e({label:e,pct:a,reset:i,mode:o=m.USED,pacePercent:n=null,paceOver:s=!1,title:d=null}){const c=Math.max(0,Math.min(100,Number(a)||0)),l=o===m.REMAINING?100-c:c,u=Math.round(l),x=l>0&&u===0?Math.max(l,.35):l;let k=String(u);l>0&&u===0&&(k=r("limits.bar.sub_one_percent"));const p=n==null?null:Math.max(0,Math.min(100,n));return t.jsxs("div",{className:"group relative flex items-center gap-2",children:[t.jsx(K,{text:d}),t.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}),t.jsxs("div",{className:"relative flex-1 bg-oai-gray-100 dark:bg-oai-gray-700/50 rounded-full h-1.5 overflow-hidden",children:[t.jsx("div",{className:`${De(l,o)} rounded-full h-full transition-[width] duration-500 ease-out`,style:{width:`${x}%`,minWidth:l>0?"3px":0}}),p!=null&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"absolute top-0 h-full bg-oai-gray-100 dark:bg-oai-gray-700/50",style:{left:`calc(${p}% - 3px)`,width:"6px"}}),t.jsx("div",{className:`absolute top-0 h-full ${s?"bg-red-500":"bg-emerald-500"}`,style:{left:`calc(${p}% - 1px)`,width:"2px"}})]})]}),t.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:[k,"%"]}),i&&t.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-500 w-6 text-right shrink-0",children:i})]})}function z(e,a,i){const o=e.label??r(e.labelKey),n=i===m.REMAINING,s=l=>n?100-l:l;if(a.expectedPercent==null){const l=Math.max(0,Math.min(100,Number(w(e.window,e.pctField))||0)),u=I(s(l));return n?r("limits.explain.remaining",{label:o,used:u}):r("limits.explain.used",{label:o,used:u})}if(a.paceOver){if(a.runsOutEta)return r("limits.explain.ahead_eta",{label:o,eta:a.runsOutEta});const l=I(s(a.projectedEnd??100));return r(n?"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=I(s(a.projectedEnd??d));return r(n?"limits.explain.on_track_remaining":"limits.explain.on_track",{label:o,pct:c})}function Be({rows:e,mode:a}){if(e.length===0)return null;const i=a===m.REMAINING;return t.jsxs("div",{className:"mt-1 flex flex-col gap-1",children:[e.map(({spec:o,pace:n})=>{const s=q(M(E(o.window,o.resetField)));return t.jsxs("div",{className:"text-[11px] leading-snug text-oai-gray-600 dark:text-oai-gray-300",children:[z(o,n,a),s?t.jsxs("span",{className:"text-oai-gray-400 dark:text-oai-gray-500",children:[" · ",r(o.timeKind==="expiry"?"limits.hover.expires_at":"limits.hover.resets_at",{time:s})]}):null]},o.key)}),t.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:r(i?"limits.explain.body_remaining":"limits.explain.body")})]})}function j(e){if(!e)return null;const a=Date.now()-new Date(e).getTime();if(a<0)return null;const i=Math.floor(a/6e4);if(i<1)return r("shared.time.now");if(i<60)return r("shared.time.m_ago",{n:i});const o=Math.floor(i/60);if(o<24)return r("shared.time.h_ago",{n:o});const n=Math.floor(o/24);return r("shared.time.d_ago",{n})}const G={live:{surface:"bg-oai-gray-50 dark:bg-oai-gray-800 border-oai-gray-200/60 dark:border-oai-gray-700/60 text-oai-gray-500 dark:text-oai-gray-400",dot:"bg-emerald-500",pulse:"bg-emerald-400"},stale:{surface:"bg-oai-gray-50 dark:bg-oai-gray-800 border-oai-gray-200/60 dark:border-oai-gray-700/60 text-oai-gray-500 dark:text-oai-gray-400",dot:"bg-amber-500",pulse:"bg-amber-400"},cached:{surface:"bg-oai-gray-50 dark:bg-oai-gray-800 border-oai-gray-200/60 dark:border-oai-gray-700/60 text-oai-gray-500 dark:text-oai-gray-400",dot:"bg-amber-500",pulse:"bg-amber-400"}},We={claude:"claude",codex:"codex"};function y({label:e,age:a=null,tone:i="live",tooltip:o=null}){const n=G[i]||G.live,s=i==="live";return t.jsxs("div",{className:"relative inline-flex items-center group cursor-help ml-1",onClick:d=>d.stopPropagation(),children:[t.jsxs("span",{className:`inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[9px] font-semibold uppercase tracking-wider border leading-normal ${n.surface}`,children:[s?t.jsxs("span",{className:"relative flex h-1.5 w-1.5",children:[t.jsx("span",{className:`animate-ping absolute inline-flex h-full w-full rounded-full ${n.pulse} opacity-75`}),t.jsx("span",{className:`relative inline-flex rounded-full h-1.5 w-1.5 ${n.dot}`})]}):t.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${n.dot}`}),e,a?t.jsxs(t.Fragment,{children:[" · ",a]}):null]}),o?t.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:[o,t.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"})]}):null]})}function N({name:e,providerId:a,children:i,expandable:o=!1,expanded:n=!1,onToggle:s,badge:d=null}){const c=he(a),l=t.jsxs("div",{className:"flex items-center gap-1.5",children:[c?t.jsx(be,{provider:c,size:14,className:Te}):null,t.jsx("span",{className:"text-sm font-medium text-oai-black dark:text-oai-white",children:e}),d]});return o?t.jsxs("div",{role:"button",tabIndex:0,"aria-expanded":n,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,i]}):t.jsxs("div",{className:"flex flex-col gap-1.5",children:[l,i]})}const Ue=fe;function h({children:e,tone:a="neutral"}){const i=a==="error"?"text-red-600 dark:text-red-400":"text-oai-gray-500 dark:text-oai-gray-400";return t.jsx("div",{className:`text-[11px] leading-snug ${i}`,children:e})}function qe({rows:e,mode:a,extra:i=null}){const o=e.length===0&&!i;return t.jsxs(t.Fragment,{children:[e.map(({spec:n,pace:s})=>t.jsx($e,{label:n.label??r(n.labelKey),pct:w(n.window,n.pctField),reset:Ae(E(n.window,n.resetField)),mode:a,pacePercent:s.pacePercent,paceOver:s.paceOver,title:He(n,s,a)},n.key)),o?t.jsx(h,{children:r("limits.status.no_data")}):null,i]})}function Ke(e){if(!Number.isFinite(e.expiresMs))return null;const a=Math.floor((e.expiresMs-Date.now())/864e5);return a<0?null:a===0?r("limits.reset_bank.hover_detail_today",{date:e.expiresAt}):r("limits.reset_bank.hover_detail",{date:e.expiresAt,days:a})}function ze({row:e}){const a=Math.max(0,Math.min(100,Number(e.percent)||0));return t.jsxs("div",{className:"group relative flex items-center gap-2","data-reset-bank-row":"",children:[t.jsx(K,{text:Ke(e)}),t.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}),t.jsx("div",{className:"relative flex-1 bg-oai-gray-100 dark:bg-oai-gray-700/50 rounded-full h-1.5 overflow-hidden",children:t.jsx("div",{className:"bg-oai-gray-400 dark:bg-oai-gray-500 rounded-full h-full transition-[width] duration-500 ease-out",style:{width:`${a}%`,minWidth:a>0?"3px":0}})}),t.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 Ve({model:e}){const a=e.kind==="count_only"?r("limits.codex_reset_bank.count_only",{count:e.availableCount}):null;return t.jsxs("div",{className:"mt-1 flex flex-col gap-1","data-reset-bank-section":e.kind,children:[t.jsx("div",{className:"text-[10.5px] font-medium uppercase tracking-wide text-oai-gray-400 dark:text-oai-gray-500",children:r("limits.codex_reset_bank.title")}),a?t.jsx("div",{className:"text-[11px] leading-snug text-oai-gray-500 dark:text-oai-gray-400",children:a}):e.rows.map(i=>t.jsx(ze,{row:i},i.key))]})}function V(e,a){if(e==="codex_meta"){const i=Ce(a.reset_credits);return i?t.jsx(Ve,{model:i}):null}if(e==="kimi_parallel"&&a.parallel_limit)return t.jsx(h,{children:r("limits.label.kimi_parallel",{count:a.parallel_limit})});if(e==="kiro_credits"&&Number.isFinite(Number(a.tracked_credits))&&Number(a.tracked_credit_records)>0){const i=_(a.tracked_credits,{maximumFractionDigits:2});return t.jsx(h,{children:r("limits.label.kiro_tracked_credits",{credits:i,count:Number(a.tracked_credit_records)})})}return e==="copilot_otel"&&!a.otel_has_files&&!a.otel_enabled?t.jsx(Je,{defaultDir:a.otel_default_dir}):null}function Xe(e,a,i,o,n,s,d=null){const c=P[e];if(!c)return null;const l=c.windows(a).filter(x=>x.window).map(x=>({spec:x,pace:Ge(x,o)})),u=V(c.extra,a);return t.jsxs(N,{name:i,providerId:e,expandable:l.length>0,expanded:n,onToggle:s,badge:d,children:[t.jsx(qe,{mode:o,rows:l,extra:u}),n?t.jsx(Be,{rows:l,mode:o}):null]},e)}function Ye(e,a,i,o,n){if(!P[e])return null;if(!a?.configured)return t.jsxs(N,{name:v(e),providerId:e,children:[t.jsx(h,{children:r("limits.status.not_connected")}),e==="opencodeGo"?t.jsx(H,{}):null]},e);if(e==="opencodeGo"&&a.subscription_status==="inactive")return t.jsx(N,{name:v(e),providerId:e,children:t.jsx(h,{children:r("limits.opencodeGo.status.inactive")})},e);if(a.error)return t.jsxs(N,{name:v(e),providerId:e,children:[t.jsx(h,{tone:"error",children:r("shared.error.prefix",{error:a.error})}),e==="kiro"?V(P.kiro.extra,a):null,e==="opencodeGo"?t.jsx(H,{}):null]},e);const s=v(e),d=a.plan_label?`${s} ${a.plan_label}`:s;let c=null;if(e==="antigravity")if(a.cached){const u=j(a.cached_at);c=t.jsx(y,{label:r("limits.label.antigravity_cached"),age:u,tone:"cached",tooltip:r("limits.tooltip.antigravity_cached")})}else c=t.jsx(y,{label:r("limits.label.antigravity_live"),tone:"live",tooltip:r("limits.tooltip.antigravity_live")});if(e==="qoder"&&a.cached&&(c=t.jsx(y,{label:r("limits.label.antigravity_cached"),age:j(a.cached_at),tone:"cached",tooltip:r("limits.tooltip.qoder_cached")})),!c&&a.auth_action_required==="reauth"){const u=We[e];c=t.jsx(y,{label:r("limits.reauth.badge"),age:j(a.cached_at),tone:"stale",tooltip:u?r("limits.reauth.tooltip",{command:u}):null})}const l=a.provenance;return l?.stale&&!c&&(c=t.jsx(y,{label:r("limits.provenance.stale"),age:j(l.captured_at),tone:"stale",tooltip:r("limits.provenance.tooltip",{source:l.source,confidence:l.confidence})})),Xe(e,a,d,i,o,n,c)}function Je({defaultDir:e}){const[a,i]=b.useState(!1),n=["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(`
3
- `),s=async d=>{d.stopPropagation();try{await navigator.clipboard.writeText(n),i(!0),setTimeout(()=>i(!1),1600)}catch{}};return t.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:[t.jsx("div",{className:"font-medium text-oai-gray-700 dark:text-oai-gray-200",children:r("limits.copilot.otelHint.title")}),t.jsx("div",{className:"mt-0.5 leading-snug",children:r("limits.copilot.otelHint.body")}),t.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:n}),t.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:a?r("limits.copilot.otelHint.copied"):r("limits.copilot.otelHint.copy")})]})}function L({n:e,children:a}){return t.jsxs("li",{className:"flex gap-2.5",children:[t.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}),t.jsx("div",{className:"min-w-0 flex-1 leading-snug",children:a})]})}function Qe(){return t.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:t.jsx("path",{d:"M4.5 2.75h4.75V7.5M9.25 2.75 3 9"})})}function H(){const[e,a]=b.useState(!1),i=['export OPENCODE_GO_AUTH_COOKIE="..."','# Optional: export OPENCODE_GO_WORKSPACE_ID="wrk_..." (Only if auto-discovery fails)'].join(`
4
- `),o=async n=>{n.stopPropagation();try{await navigator.clipboard.writeText(i),a(!0),setTimeout(()=>a(!1),1600)}catch{}};return t.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:[t.jsx("div",{className:"text-[12px] font-semibold text-oai-gray-800 dark:text-oai-gray-100",children:r("limits.opencodeGo.setupHint.title")}),t.jsx("div",{className:"mt-0.5 leading-snug text-oai-gray-500 dark:text-oai-gray-400",children:r("limits.opencodeGo.setupHint.subtitle")}),t.jsxs("ol",{className:"mt-2.5 space-y-2.5",children:[t.jsxs(L,{n:"1",children:[t.jsx("div",{children:r("limits.opencodeGo.setupHint.step1")}),t.jsxs("a",{href:"https://opencode.ai",target:"_blank",rel:"noreferrer",onClick:n=>n.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:[r("limits.opencodeGo.setupHint.cta"),t.jsx(Qe,{})]})]}),t.jsxs(L,{n:"2",children:[t.jsx("div",{children:r("limits.opencodeGo.setupHint.step2")}),t.jsxs("ul",{className:"mt-1 space-y-0.5 text-oai-gray-500 dark:text-oai-gray-400",children:[t.jsx("li",{children:r("limits.opencodeGo.setupHint.step2_workspace")}),t.jsx("li",{children:r("limits.opencodeGo.setupHint.step2_cookie")})]})]}),t.jsxs(L,{n:"3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{children:r("limits.opencodeGo.setupHint.step3")}),t.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?r("limits.opencodeGo.setupHint.copied"):r("limits.opencodeGo.setupHint.copy")})]}),t.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:i}),t.jsx("div",{className:"mt-1 text-[10px] text-oai-gray-400 dark:text-oai-gray-500",children:r("limits.opencodeGo.setupHint.note_app")})]})]})]})}function Ze(e){const[a,i]=b.useState(0);return b.useLayoutEffect(()=>{const o=e.current;if(!o)return;const n=o.querySelectorAll("[data-limit-label]");let s=0,d=null;if(n.length>0)try{d=document.createElement("canvas").getContext("2d")}catch{d=null}if(d){const l=window.getComputedStyle(n[0]);d.font=`${l.fontStyle} ${l.fontWeight} ${l.fontSize} ${l.fontFamily}`;for(const u of n)s=Math.max(s,d.measureText(u.textContent).width)}const c=Math.ceil(s);i(l=>l===c?l:c)}),a}function et({claude:e,codex:a,cursor:i,gemini:o,kimi:n,kiro:s,grok:d,antigravity:c,copilot:l,zcode:u,opencodeGo:x,qoder:k,order:p,visibility:S,displayMode:X}){const Y={claude:e,codex:a,cursor:i,gemini:o,kimi:n,kiro:s,grok:d,antigravity:c,copilot:l,zcode:u,opencodeGo:x,qoder:k},R=b.useRef(null),C=Ze(R),[J,Q]=b.useState(null),Z=Array.isArray(p)&&p.length>0?p:Ue,T=X===m.REMAINING?m.REMAINING:m.USED,ee=T===m.REMAINING?r("limits.settings.display_mode_remaining"):r("limits.settings.display_mode_used"),A=Z.filter(g=>!S||S[g]!==!1).map(g=>Ye(g,Y[g],T,J===g,()=>Q(te=>te===g?null:g))).filter(Boolean);return t.jsx(ge,{delay:.15,children:t.jsx(U,{children:t.jsxs("div",{ref:R,className:"flex flex-col gap-3",style:C>0?{"--tt-limits-label-w":`${C}px`}:void 0,children:[t.jsxs("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:[r("limits.panel.title"),r("limits.panel.mode_separator"),ee]}),A.length>0?A:t.jsx(h,{children:r("limits.status.all_hidden")})]})})})}const tt=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),at="x-apple.systempreferences:com.apple.preference.notifications";function it(){const e=ve(),a=se(),i=r("limits.alert.blocked"),o=a?D.button:D.div;return t.jsxs(o,{type:a?"button":void 0,onClick:a?()=>le({type:"action",name:"openURL",value:at}):void 0,initial:e?!1:{opacity:0,x:14,scale:.9},animate:{opacity:1,x:0,scale:1},transition:{type:"spring",stiffness:320,damping:18},title:i,className:`relative hidden sm:inline-flex min-w-0 max-w-[360px] items-center gap-1.5 rounded-full border border-amber-300/70 bg-amber-50 px-3 py-1.5 text-xs text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-300 ${a?"cursor-pointer transition-colors hover:bg-amber-100 dark:hover:bg-amber-500/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-amber-500/60":""}`,children:[t.jsxs("span",{className:"relative flex h-1.5 w-1.5 shrink-0",children:[t.jsx("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-amber-400 opacity-75"}),t.jsx("span",{className:"relative inline-flex h-1.5 w-1.5 rounded-full bg-amber-500"})]}),t.jsx("span",{className:"truncate",children:i}),t.jsx("span",{"aria-hidden":!0,className:"absolute left-full top-1/2 -translate-y-1/2 border-[5px] border-transparent border-l-amber-300/80 dark:border-l-amber-500/40"})]})}function ht(){const e=ae(),{data:a,error:i,isLoading:o}=ue(e?{initialRefresh:!0,initialState:e,publishToPreloadCache:!0}:{initialRefresh:!0,publishToPreloadCache:!0}),n=pe(),s=me();return ie.useEffect(()=>{s.enabled&&a&&xe(a)},[s.enabled,a]),!tt&&!re()?t.jsx("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:t.jsx(ke,{})}):t.jsx("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:t.jsx("main",{className:"flex-1 pt-8 sm:pt-10 pb-12 sm:pb-16",children:t.jsxs("div",{className:"mx-auto max-w-6xl px-4 sm:px-6",children:[t.jsxs("div",{className:"flex flex-row items-start justify-between gap-4 mb-8",children:[t.jsxs("div",{className:"min-w-0",children:[t.jsx("h1",{className:"text-3xl sm:text-4xl font-semibold tracking-tight text-oai-black dark:text-white mb-3",children:r("nav.limits")}),t.jsx("p",{className:"text-oai-gray-500 dark:text-oai-gray-400 text-sm sm:text-base",children:r("limits.page.subtitle")})]}),t.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[s.enabled&&s.permissionBlocked?t.jsx(it,{}):null,t.jsx("button",{type:"button",onClick:()=>{s.setEnabled(!s.enabled)},"aria-label":s.enabled?r("limits.alert.disable"):r("limits.alert.enable"),title:s.enabled?r("limits.alert.disable"):r("limits.alert.enable"),className:`inline-flex h-9 w-9 items-center justify-center rounded-lg border border-oai-gray-200 dark:border-oai-gray-800 hover:bg-oai-gray-100 dark:hover:bg-oai-gray-800 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-oai-brand-500 ${s.enabled&&s.permissionBlocked?"text-amber-600 dark:text-amber-400":"text-oai-gray-600 dark:text-oai-gray-400 hover:text-oai-black dark:hover:text-white"}`,children:s.enabled?t.jsx(we,{className:"h-4 w-4","aria-hidden":!0}):t.jsx(_e,{className:"h-4 w-4","aria-hidden":!0})}),t.jsx(ne,{to:"/settings?section=limits","aria-label":r("limits.page.openSettings"),title:r("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:t.jsx(oe,{className:"h-4 w-4","aria-hidden":!0})})]})]}),o?t.jsx(Le,{}):t.jsxs(t.Fragment,{children:[i?t.jsx("p",{className:"mb-4 text-sm text-red-500 dark:text-red-400",children:r("shared.error.prefix",{error:i})}):null,t.jsx(et,{claude:a?.claude,codex:a?.codex,cursor:a?.cursor,gemini:a?.gemini,kimi:a?.kimi,kiro:a?.kiro,grok:a?.grok,antigravity:a?.antigravity,copilot:a?.copilot,zcode:a?.zcode,opencodeGo:a?.opencodeGo,qoder:a?.qoder,order:n.order,visibility:n.visibility,displayMode:n.displayMode})]})]})})})}export{ht as LimitsPage};
@@ -1 +0,0 @@
1
- import{c as r}from"./__vite-browser-external-DsFkaOPr.js";const t=["claude","codex","cursor","gemini","kimi","kiro","grok","copilot","antigravity","zcode","opencodeGo","qoder"],e={claude:"CLAUDE",codex:"CODEX",cursor:"CURSOR",gemini:"GEMINI",kimi:"KIMI",kiro:"KIRO",grok:"GROK",copilot:"COPILOT",antigravity:"ANTIGRAVITY",zcode:"ZCODE",opencodeGo:"OPENCODE",qoder:"QODER"};function c(i){return e[i]||null}function n(i){switch(i){case"claude":return r("limits.provider.claude");case"codex":return r("limits.provider.codex");case"cursor":return r("limits.provider.cursor");case"gemini":return r("limits.provider.gemini");case"kimi":return r("limits.provider.kimi");case"kiro":return r("limits.provider.kiro");case"grok":return r("limits.provider.grok");case"copilot":return r("limits.provider.copilot");case"antigravity":return r("limits.provider.antigravity");case"zcode":return r("limits.provider.zcode");case"opencodeGo":return r("limits.provider.opencode_go");case"qoder":return r("limits.provider.qoder");default:return String(i||"")}}export{t as L,c as a,n as l};
@@ -1 +0,0 @@
1
- import{r as o}from"./__vite-browser-external-DsFkaOPr.js";import{h as r,i as t,p as s}from"./react-DDPYgpAM.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};