@ipv9/tokentracker-cli 0.39.34 → 0.39.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -5
- package/dashboard/dist/assets/{ActivityHeatmap-ChFDzpdS.js → ActivityHeatmap-rUm9bSZ9.js} +1 -1
- package/dashboard/dist/assets/{Card-ijF07sCs.js → Card-YWr91b5b.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CSzPtd5f.js → DashboardPage-DdJOVJuw.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-C1k0oqsA.js → DevicePage-CQMG1bh8.js} +1 -1
- package/dashboard/dist/assets/{DialogTitle-BFFfzcmZ.js → DialogTitle-BM0Hz4Pq.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-BgK1lNmX.js → FadeIn-D8xysY3i.js} +1 -1
- package/dashboard/dist/assets/{InsforgeUserHeaderControls-2VB98X4S.js → InsforgeUserHeaderControls-CsAafXyj.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-DzbaCMvc.js → IpCheckPage-Bbg9erkT.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-BgG9N4uz.js → LandingPage-BCMsWOwJ.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardAvatar-ShOySfzi.js → LeaderboardAvatar-CkQa4EX2.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-D2IP8z5a.js → LeaderboardPage-CyDX3tDL.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfileModal-DsFdGEx3.js → LeaderboardProfileModal-CMctMA-p.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfilePage-CnZRsiia.js → LeaderboardProfilePage-DTZ_6dBt.js} +1 -1
- package/dashboard/dist/assets/LimitsPage-V7939U8b.js +2 -0
- package/dashboard/dist/assets/{LocalOnlyNotice-BLIekBBt.js → LocalOnlyNotice-dODOM3SB.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-CBGEh6Yy.js → LoginPage-CE5GBEI2.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-C09O8D7u.js → PopoverPopup-CRzMMFsC.js} +1 -1
- package/dashboard/dist/assets/{Select-CCh3LC5S.js → Select-m6edgfye.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-kCuvclJY.js → SelectItemText-DIoTPvZM.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-DoOB-uyq.js → SettingsPage-DObaSleW.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-CVGJm49x.js → SkillsPage-BSi26dZo.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-DC1wk1qB.js → WidgetsPage-CTl7OtvF.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-ajs88eqx.js → WrappedPage-BXwhD9aq.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CjOHnUd-.js → arrow-up-right-DxdoYoxg.js} +1 -1
- package/dashboard/dist/assets/{download-aF04AJYI.js → download-BZkwGDg8.js} +1 -1
- package/dashboard/dist/assets/{info-D0oZ0eak.js → info-DRaQWOpM.js} +1 -1
- package/dashboard/dist/assets/{main-fV3uYMtM.js → main-CuaPRwHu.js} +5 -2
- package/dashboard/dist/assets/use-limits-display-prefs-5cj2WfP-.js +1 -0
- package/dashboard/dist/assets/{use-native-settings-Bi7E0UR8.js → use-native-settings-BfydbPtC.js} +1 -1
- package/dashboard/dist/assets/{use-spring-BOREQ4Dn.js → use-spring-BxDSGjR_.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BGYp5WOe.js → use-usage-limits-D_5PMCyF.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-VxllGPBM.js → useCurrency-DQhzQX2k.js} +1 -1
- package/dashboard/dist/assets/{useOpenInteractionType-CzmlePCG.js → useOpenInteractionType--grUNSll.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/cli.js +3 -3
- package/src/commands/doctor.js +5 -0
- package/src/commands/serve.js +3 -1
- package/src/lib/browser-auth.js +40 -13
- package/src/lib/doctor.js +104 -1
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/usage-limits.js +133 -1
- package/dashboard/dist/assets/LimitsPage-L68WyhKt.js +0 -2
- package/dashboard/dist/assets/use-limits-display-prefs-DGaESD6L.js +0 -1
package/src/lib/usage-limits.js
CHANGED
|
@@ -494,6 +494,133 @@ async function fetchKimiLimits({ home, env, fetchImpl = fetch } = {}) {
|
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
|
|
497
|
+
function resolveZaiAuth({ env = process.env } = {}) {
|
|
498
|
+
const anthropicBaseUrl = typeof env?.ANTHROPIC_BASE_URL === "string" ? env.ANTHROPIC_BASE_URL.trim() : "";
|
|
499
|
+
const anthropicToken = typeof env?.ANTHROPIC_AUTH_TOKEN === "string" ? env.ANTHROPIC_AUTH_TOKEN.trim() : "";
|
|
500
|
+
if (anthropicBaseUrl && anthropicToken) {
|
|
501
|
+
try {
|
|
502
|
+
const host = new URL(anthropicBaseUrl).hostname.toLowerCase();
|
|
503
|
+
if (host === "api.z.ai" || host === "open.bigmodel.cn") {
|
|
504
|
+
return {
|
|
505
|
+
endpoint: `${new URL(anthropicBaseUrl).origin}/api/monitor/usage/quota/limit`,
|
|
506
|
+
authorization: anthropicToken,
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
} catch (_error) {}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
const apiKey = [
|
|
513
|
+
env?.TOKENTRACKER_ZAI_API_KEY,
|
|
514
|
+
env?.ZAI_API_KEY,
|
|
515
|
+
env?.ZHIPU_API_KEY,
|
|
516
|
+
].find((value) => typeof value === "string" && value.trim());
|
|
517
|
+
if (!apiKey) return null;
|
|
518
|
+
const trimmed = apiKey.trim();
|
|
519
|
+
return {
|
|
520
|
+
endpoint: "https://api.z.ai/api/monitor/usage/quota/limit",
|
|
521
|
+
authorization: /^Bearer\s+/i.test(trimmed) ? trimmed : `Bearer ${trimmed}`,
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
function zaiResetTime(value) {
|
|
526
|
+
if (value === null || value === undefined || value === "") return null;
|
|
527
|
+
const n = Number(value);
|
|
528
|
+
if (Number.isFinite(n) && n > 0) {
|
|
529
|
+
const ms = n > 10_000_000_000 ? n : n * 1000;
|
|
530
|
+
const date = new Date(ms);
|
|
531
|
+
return Number.isFinite(date.getTime()) ? date.toISOString() : null;
|
|
532
|
+
}
|
|
533
|
+
const ts = Date.parse(String(value));
|
|
534
|
+
return Number.isFinite(ts) ? new Date(ts).toISOString() : null;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
function zaiWindowFromLimit(limit) {
|
|
538
|
+
if (!limit || typeof limit !== "object") return null;
|
|
539
|
+
let usedPercent = clampPercent(limit.percentage);
|
|
540
|
+
if (usedPercent === null) {
|
|
541
|
+
const current = Number(limit.currentValue ?? limit.usage);
|
|
542
|
+
const remaining = Number(limit.remaining);
|
|
543
|
+
if (Number.isFinite(current) && current >= 0 && Number.isFinite(remaining) && remaining >= 0) {
|
|
544
|
+
usedPercent = clampPercent((current / (current + remaining)) * 100);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
return buildWindow({
|
|
548
|
+
usedPercent,
|
|
549
|
+
resetAt: zaiResetTime(limit.nextResetTime),
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
function normalizeZaiUsageResponse(body) {
|
|
554
|
+
const data = body?.data && typeof body.data === "object" ? body.data : {};
|
|
555
|
+
const limits = Array.isArray(data.limits) ? data.limits : [];
|
|
556
|
+
let fiveHour = null;
|
|
557
|
+
let weekly = null;
|
|
558
|
+
let monthly = null;
|
|
559
|
+
|
|
560
|
+
for (const limit of limits) {
|
|
561
|
+
const type = typeof limit?.type === "string" ? limit.type : "";
|
|
562
|
+
const unit = Number(limit?.unit);
|
|
563
|
+
const number = Number(limit?.number);
|
|
564
|
+
if (type === "TOKENS_LIMIT" && unit === 3 && number === 5 && !fiveHour) {
|
|
565
|
+
fiveHour = zaiWindowFromLimit(limit);
|
|
566
|
+
} else if (type === "TOKENS_LIMIT" && unit === 6 && !weekly) {
|
|
567
|
+
weekly = zaiWindowFromLimit(limit);
|
|
568
|
+
} else if (type === "TIME_LIMIT" && !monthly) {
|
|
569
|
+
monthly = zaiWindowFromLimit(limit);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
return {
|
|
574
|
+
account_plan: typeof data.planName === "string"
|
|
575
|
+
? data.planName
|
|
576
|
+
: typeof data.plan === "string"
|
|
577
|
+
? data.plan
|
|
578
|
+
: typeof data.level === "string"
|
|
579
|
+
? data.level
|
|
580
|
+
: data.level != null
|
|
581
|
+
? String(data.level)
|
|
582
|
+
: null,
|
|
583
|
+
primary_window: fiveHour,
|
|
584
|
+
secondary_window: weekly,
|
|
585
|
+
tertiary_window: monthly,
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
async function fetchZaiLimits({ env = process.env, fetchImpl = fetch } = {}) {
|
|
590
|
+
const auth = resolveZaiAuth({ env });
|
|
591
|
+
if (!auth) return { configured: false };
|
|
592
|
+
|
|
593
|
+
try {
|
|
594
|
+
const res = await fetchImpl(auth.endpoint, {
|
|
595
|
+
method: "GET",
|
|
596
|
+
headers: {
|
|
597
|
+
Authorization: auth.authorization,
|
|
598
|
+
Accept: "application/json",
|
|
599
|
+
},
|
|
600
|
+
});
|
|
601
|
+
if (res.status === 401 || res.status === 403) {
|
|
602
|
+
throw new Error("Z.AI token rejected. Check ZAI_API_KEY or ZHIPU_API_KEY.");
|
|
603
|
+
}
|
|
604
|
+
if (!res.ok) {
|
|
605
|
+
throw new Error(`Z.AI API returned ${res.status}`);
|
|
606
|
+
}
|
|
607
|
+
const json = await res.json();
|
|
608
|
+
if (json?.success === false) {
|
|
609
|
+
throw new Error(json?.msg || "Z.AI API returned an unsuccessful response.");
|
|
610
|
+
}
|
|
611
|
+
return {
|
|
612
|
+
configured: true,
|
|
613
|
+
error: null,
|
|
614
|
+
...normalizeZaiUsageResponse(json),
|
|
615
|
+
};
|
|
616
|
+
} catch (error) {
|
|
617
|
+
return {
|
|
618
|
+
configured: true,
|
|
619
|
+
error: error?.message || "Unknown error",
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
497
624
|
function resolveGeminiHome({ home, env } = {}) {
|
|
498
625
|
const explicit = typeof env?.GEMINI_HOME === "string" ? env.GEMINI_HOME.trim() : "";
|
|
499
626
|
return explicit ? path.resolve(explicit) : path.join(home, ".gemini");
|
|
@@ -1698,7 +1825,7 @@ async function getUsageLimits({
|
|
|
1698
1825
|
const codexPlanType = codexAuthRefreshed?.planType || null;
|
|
1699
1826
|
|
|
1700
1827
|
const providerFetch = withFetchTimeout(fetchImpl, providerTimeoutMs);
|
|
1701
|
-
const [claudeResult, codexResult, cursor, kimi, gemini, kiro, antigravity, copilot] = await Promise.all([
|
|
1828
|
+
const [claudeResult, codexResult, cursor, kimi, zai, gemini, kiro, antigravity, copilot] = await Promise.all([
|
|
1702
1829
|
claudeToken
|
|
1703
1830
|
? withProviderTimeout(fetchClaudeUsageLimits(claudeToken, { fetchImpl: providerFetch, maxAttempts: 1 }), "Claude", providerTimeoutMs).then(
|
|
1704
1831
|
(value) => ({ status: "fulfilled", value }),
|
|
@@ -1719,6 +1846,8 @@ async function getUsageLimits({
|
|
|
1719
1846
|
.catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
|
|
1720
1847
|
withProviderTimeout(fetchKimiLimits({ home, env, fetchImpl: providerFetch }), "Kimi", providerTimeoutMs)
|
|
1721
1848
|
.catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
|
|
1849
|
+
withProviderTimeout(fetchZaiLimits({ env, fetchImpl: providerFetch }), "Z.AI", providerTimeoutMs)
|
|
1850
|
+
.catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
|
|
1722
1851
|
withProviderTimeout(fetchGeminiLimits({ home, env, fetchImpl: providerFetch, commandRunner }), "Gemini", providerTimeoutMs)
|
|
1723
1852
|
.catch((reason) => ({ configured: true, error: reason?.message || "Unknown error" })),
|
|
1724
1853
|
Promise.resolve().then(() => fetchKiroLimits({ commandRunner, now })),
|
|
@@ -1772,6 +1901,7 @@ async function getUsageLimits({
|
|
|
1772
1901
|
codex: withPlanLabel(codex, codex.plan_type, "Codex"),
|
|
1773
1902
|
cursor: withPlanLabel(cursor, cursor.membership_type, "Cursor"),
|
|
1774
1903
|
kimi: withPlanLabel(kimi, kimi.subscription_type || kimi.membership_level, "Kimi"),
|
|
1904
|
+
zai: withPlanLabel(zai, zai.account_plan, "Z.AI"),
|
|
1775
1905
|
gemini: withPlanLabel(gemini, gemini.account_plan, "Gemini"),
|
|
1776
1906
|
kiro: withPlanLabel(kiro, kiro.plan_name, "Kiro"),
|
|
1777
1907
|
antigravity: withPlanLabel(antigravity, antigravity.account_plan, "Antigravity"),
|
|
@@ -1795,6 +1925,8 @@ module.exports = {
|
|
|
1795
1925
|
normalizeCursorUsageSummary,
|
|
1796
1926
|
normalizeGeminiQuotaResponse,
|
|
1797
1927
|
normalizeKimiUsageResponse,
|
|
1928
|
+
normalizeZaiUsageResponse,
|
|
1929
|
+
fetchZaiLimits,
|
|
1798
1930
|
parseKiroUsageOutput,
|
|
1799
1931
|
normalizeAntigravityResponse,
|
|
1800
1932
|
parseListeningPorts,
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as i,O as f,A as s,r as E,az as I,i as P,L as O,aA as R}from"./main-fV3uYMtM.js";import{u as C}from"./use-usage-limits-BGYp5WOe.js";import{L as u,u as M}from"./use-limits-display-prefs-DGaESD6L.js";import{C as j}from"./Card-ijF07sCs.js";import{F as T}from"./FadeIn-BgK1lNmX.js";import{L as A}from"./LocalOnlyNotice-BLIekBBt.js";import"./arrow-up-right-CjOHnUd-.js";import"./download-aF04AJYI.js";const S=[3,2,3,3,2,2,3];function x({className:n}){return i.jsx("div",{className:f("rounded bg-oai-gray-200/70 dark:bg-oai-gray-800/70 animate-pulse",n)})}function D(){return i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(x,{className:"h-3 w-12 shrink-0"}),i.jsx(x,{className:"flex-1 h-1.5 rounded-full min-w-0"}),i.jsx(x,{className:"h-3 w-[30px] shrink-0"}),i.jsx(x,{className:"h-3 w-6 shrink-0"})]})}function $({bars:n,index:e}){const r=e%3===0?"w-24":e%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(x,{className:"h-[14px] w-[14px] rounded shrink-0"}),i.jsx(x,{className:f("h-4",r)})]}),Array.from({length:n},(t,o)=>i.jsx(D,{},o))]})}function G(){return i.jsx(j,{children:i.jsxs("div",{className:"flex flex-col gap-3",children:[i.jsx(x,{className:"h-3.5 w-28"}),S.map((n,e)=>i.jsx($,{bars:n,index:e},e))]})})}function l(n){if(!n)return null;const e=typeof n=="number"?n*1e3:Date.parse(n);if(!Number.isFinite(e))return null;const r=e-Date.now();if(r<=0)return s("shared.time.now");const t=Math.floor(r/6e4);if(t<60)return`${t}m`;const o=Math.floor(t/60);return o<24?`${o}h`:`${Math.floor(o/24)}d`}function H(n,e){const r=e===u.REMAINING?100-n:n;return r>=90?"bg-red-500":r>=70?"bg-amber-500":"bg-emerald-500"}function a({label:n,pct:e,reset:r,mode:t=u.USED}){const o=Math.max(0,Math.min(100,Number(e)||0)),d=t===u.REMAINING?100-o:o,p=Math.round(d),y=d>0&&p===0?Math.max(d,.35):d,w=d>0&&p===0?"<1":String(p);return i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("span",{className:"text-[11px] text-oai-gray-500 dark:text-oai-gray-400 w-12 shrink-0",children:n}),i.jsx("div",{className:"flex-1 bg-oai-gray-100 dark:bg-oai-gray-700/50 rounded-full h-1.5 overflow-hidden",children:i.jsx("div",{className:`${H(d,t)} rounded-full h-full transition-[width] duration-500 ease-out`,style:{width:`${y}%`,minWidth:d>0?"3px":0}})}),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:[w,"%"]}),r?i.jsx("span",{className:"text-[10px] text-oai-gray-400 dark:text-oai-gray-500 w-6 text-right shrink-0",children:r}):null]})}function m({name:n,icon:e,children:r}){const o=e==="/brand-logos/cursor.svg"||e==="/brand-logos/kiro.svg"||e==="/brand-logos/copilot.svg"||e==="/brand-logos/kimi.svg"?"w-[14px] h-[14px] dark:invert":"w-[14px] h-[14px]";return i.jsxs("div",{className:"flex flex-col gap-1.5",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[e?i.jsx("img",{src:e,alt:"",className:o}):null,i.jsx("span",{className:"text-sm font-medium text-oai-black dark:text-oai-white",children:n})]}),r]})}const F=["claude","codex","cursor","gemini","kimi","kiro","copilot","antigravity"],B={claude:{name:"Claude",icon:"/brand-logos/claude-code.svg"},codex:{name:"Codex",icon:"/brand-logos/codex.svg"},cursor:{name:"Cursor",icon:"/brand-logos/cursor.svg"},gemini:{name:"Gemini",icon:"/brand-logos/gemini.svg"},kimi:{name:"Kimi",icon:"/brand-logos/kimi.svg"},kiro:{name:"Kiro",icon:"/brand-logos/kiro.svg"},copilot:{name:"GitHub Copilot",icon:"/brand-logos/copilot.svg"},antigravity:{name:"Antigravity",icon:"/brand-logos/antigravity.svg"}};function c({children:n,tone:e="neutral"}){const r=e==="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:n})}function U(n,e,r){const t=B[n];if(!t)return null;if(!e?.configured)return i.jsx(m,{name:t.name,icon:t.icon,children:i.jsx(c,{children:s("limits.status.not_connected")})},n);if(e.error)return i.jsx(m,{name:t.name,icon:t.icon,children:i.jsx(c,{tone:"error",children:s("shared.error.prefix",{error:e.error})})},n);const o=e.plan_label?`${t.name} ${e.plan_label}`:t.name;switch(n){case"claude":return i.jsxs(m,{name:o,icon:t.icon,children:[e.five_hour?i.jsx(a,{label:"5h",pct:e.five_hour.utilization,reset:l(e.five_hour.resets_at),mode:r}):null,e.seven_day?i.jsx(a,{label:"7d",pct:e.seven_day.utilization,reset:l(e.seven_day.resets_at),mode:r}):null,e.seven_day_opus?i.jsx(a,{label:"Opus",pct:e.seven_day_opus.utilization,reset:l(e.seven_day_opus.resets_at),mode:r}):null,!e.five_hour&&!e.seven_day&&!e.seven_day_opus?i.jsx(c,{children:s("limits.status.no_data")}):null]},"claude");case"codex":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:"5h",pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:"7d",pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"codex");case"cursor":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:s("limits.label.cursor_plan"),pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:s("limits.label.cursor_auto"),pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,e.tertiary_window?i.jsx(a,{label:s("limits.label.cursor_api"),pct:e.tertiary_window.used_percent,reset:l(e.tertiary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window&&!e.tertiary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"cursor");case"gemini":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:"Pro",pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:"Flash",pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,e.tertiary_window?i.jsx(a,{label:"Lite",pct:e.tertiary_window.used_percent,reset:l(e.tertiary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window&&!e.tertiary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"gemini");case"kimi":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:s("limits.label.kimi_weekly"),pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:s("limits.label.kimi_5h"),pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,e.tertiary_window?i.jsx(a,{label:s("limits.label.kimi_total"),pct:e.tertiary_window.used_percent,reset:l(e.tertiary_window.reset_at),mode:r}):null,e.parallel_limit?i.jsx(c,{children:s("limits.label.kimi_parallel",{count:e.parallel_limit})}):null,!e.primary_window&&!e.secondary_window&&!e.tertiary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"kimi");case"kiro":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:s("limits.label.kiro_month"),pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:s("limits.label.kiro_bonus"),pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"kiro");case"antigravity":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:"Claude",pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:"G Pro",pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,e.tertiary_window?i.jsx(a,{label:"Flash",pct:e.tertiary_window.used_percent,reset:l(e.tertiary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window&&!e.tertiary_window?i.jsx(c,{children:s("limits.status.no_data")}):null]},"antigravity");case"copilot":return i.jsxs(m,{name:o,icon:t.icon,children:[e.primary_window?i.jsx(a,{label:s("limits.label.copilot_premium"),pct:e.primary_window.used_percent,reset:l(e.primary_window.reset_at),mode:r}):null,e.secondary_window?i.jsx(a,{label:s("limits.label.copilot_chat"),pct:e.secondary_window.used_percent,reset:l(e.secondary_window.reset_at),mode:r}):null,!e.primary_window&&!e.secondary_window?i.jsx(c,{children:s("limits.status.no_data")}):null,e.otel_has_files||e.otel_enabled?null:i.jsx(z,{defaultDir:e.otel_default_dir})]},"copilot");default:return null}}function z({defaultDir:n}){const[e,r]=E.useState(!1),o=["export COPILOT_OTEL_ENABLED=true","export COPILOT_OTEL_EXPORTER_TYPE=file",`export COPILOT_OTEL_FILE_EXPORTER_PATH="${n||"$HOME/.copilot/otel"}/copilot-otel-$(date +%Y%m%d).jsonl"`].join(`
|
|
2
|
-
`),d=async()=>{try{await navigator.clipboard.writeText(o),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:s("limits.copilot.otelHint.title")}),i.jsx("div",{className:"mt-0.5 leading-snug",children:s("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:o}),i.jsx("button",{type:"button",onClick:d,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:e?s("limits.copilot.otelHint.copied"):s("limits.copilot.otelHint.copy")})]})}function Y({claude:n,codex:e,cursor:r,gemini:t,kimi:o,kiro:d,antigravity:p,copilot:y,order:w,visibility:h,displayMode:v}){const k={claude:n,codex:e,cursor:r,gemini:t,kimi:o,kiro:d,antigravity:p,copilot:y},N=Array.isArray(w)&&w.length>0?w:F,g=v===u.REMAINING?u.REMAINING:u.USED,L=g===u.REMAINING?s("limits.settings.display_mode_remaining"):s("limits.settings.display_mode_used"),b=N.filter(_=>!h||h[_]!==!1).map(_=>U(_,k[_],g)).filter(Boolean);return i.jsx(T,{delay:.15,children:i.jsx(j,{children:i.jsxs("div",{className:"flex flex-col gap-3",children:[i.jsxs("h3",{className:"text-sm font-medium text-oai-gray-500 dark:text-oai-gray-300 uppercase tracking-wide",children:[s("limits.panel.title"),s("limits.panel.mode_separator"),L]}),b.length>0?b:i.jsx(c,{children:s("limits.status.all_hidden")})]})})})}const K=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1");function ie(){const n=I(),{data:e,error:r,isLoading:t}=C(n?{initialRefresh:!0,initialState:n,publishToPreloadCache:!0}:{initialRefresh:!0,publishToPreloadCache:!0}),o=M();return!K&&!P()?i.jsx("div",{className:"flex flex-col flex-1 text-oai-black dark:text-oai-white font-oai antialiased",children:i.jsx(A,{})}):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:s("nav.limits")}),i.jsx("p",{className:"text-oai-gray-500 dark:text-oai-gray-400 text-sm sm:text-base",children:s("limits.page.subtitle")})]}),i.jsx(O,{to:"/settings","aria-label":s("limits.page.openSettings"),title:s("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(R,{className:"h-4 w-4","aria-hidden":!0})})]}),t?i.jsx(G,{}):i.jsxs(i.Fragment,{children:[r?i.jsx("p",{className:"mb-4 text-sm text-red-500 dark:text-red-400",children:s("shared.error.prefix",{error:r})}):null,i.jsx(Y,{claude:e?.claude,codex:e?.codex,cursor:e?.cursor,gemini:e?.gemini,kimi:e?.kimi,kiro:e?.kiro,antigravity:e?.antigravity,copilot:e?.copilot,order:o.order,visibility:o.visibility,displayMode:o.displayMode})]})]})})})}export{ie as LimitsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as o,aS as I,aT as h,aU as C,aV as V}from"./main-fV3uYMtM.js";const d=["claude","codex","cursor","gemini","kimi","kiro","copilot","antigravity"],Y={claude:"Claude",codex:"Codex",cursor:"Cursor",gemini:"Gemini",kimi:"Kimi",kiro:"Kiro",copilot:"GitHub Copilot",antigravity:"Antigravity"},P={claude:"/brand-logos/claude-code.svg",codex:"/brand-logos/codex.svg",cursor:"/brand-logos/cursor.svg",gemini:"/brand-logos/gemini.svg",kimi:"/brand-logos/kimi.svg",kiro:"/brand-logos/kiro.svg",copilot:"/brand-logos/copilot.svg",antigravity:"/brand-logos/antigravity.svg"},w="tt.limits.providerOrder",m="tt.limits.providerVisibility",S="tt.limits.displayMode",p="limitsDisplayMode",f=Object.freeze({USED:"used",REMAINING:"remaining"}),E=new Set(Object.values(f));function O(){if(typeof window>"u")return[...d];try{const n=window.localStorage.getItem(w);if(!n)return[...d];const a=JSON.parse(n);if(!Array.isArray(a))return[...d];const r=a.filter(c=>d.includes(c));for(const c of d)r.includes(c)||r.push(c);return r}catch{return[...d]}}function D(){const n=Object.fromEntries(d.map(a=>[a,!0]));if(typeof window>"u")return n;try{const a=window.localStorage.getItem(m);if(!a)return n;const r=JSON.parse(a);if(!r||typeof r!="object")return n;const c={...n};for(const u of d)typeof r[u]=="boolean"&&(c[u]=r[u]);return c}catch{return n}}function v(){if(typeof window>"u")return f.USED;try{const n=window.localStorage.getItem(S);return E.has(n)?n:f.USED}catch{return f.USED}}function T(){const[n,a]=o.useState(O),[r,c]=o.useState(D),[u,l]=o.useState(v),g=o.useCallback(t=>{E.has(t)&&(l(t),I()&&h(p,t))},[]);o.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(w,JSON.stringify(n))}catch{}},[n]),o.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(m,JSON.stringify(r))}catch{}},[r]),o.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(S,u)}catch{}},[u]),o.useEffect(()=>{if(!I())return;const t=C(e=>{const i=e?.[p];E.has(i)&&l(i)});return V(),t},[]),o.useEffect(()=>{if(typeof window>"u")return;const t=e=>{e.key===w&&a(O()),e.key===m&&c(D()),e.key===S&&l(v())};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const k=o.useCallback(t=>{c(e=>({...e,[t]:!e[t]}))},[]),x=o.useCallback(t=>{a(e=>{const i=e.indexOf(t);if(i<=0)return e;const s=[...e];return[s[i-1],s[i]]=[s[i],s[i-1]],s})},[]),M=o.useCallback(t=>{a(e=>{const i=e.indexOf(t);if(i<0||i>=e.length-1)return e;const s=[...e];return[s[i],s[i+1]]=[s[i+1],s[i]],s})},[]),_=o.useCallback((t,e)=>{t!==e&&a(i=>{const s=i.indexOf(t),b=i.indexOf(e);if(s<0||b<0)return i;const y=[...i],[A]=y.splice(s,1);return y.splice(b,0,A),y})},[]),L=o.useCallback(()=>{a([...d]),c(Object.fromEntries(d.map(t=>[t,!0]))),g(f.USED)},[g]),N=o.useMemo(()=>n.filter(t=>r[t]!==!1),[n,r]);return{order:n,visibility:r,displayMode:u,setDisplayMode:g,visibleOrdered:N,toggle:k,moveUp:x,moveDown:M,moveToward:_,reset:L}}export{f as L,P as a,Y as b,T as u};
|