tokentracker-cli 0.74.1 → 0.74.2
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/dashboard/dist/assets/{ActivityHeatmap-D5DFI_JT.js → ActivityHeatmap-DGqoFvkZ.js} +1 -1
- package/dashboard/dist/assets/{Card-C0dBE40G.js → Card-CKxmfosU.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-EoqdsEND.js → CommunityStatsModal-C6h6BKVI.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-Dmmph0Fh.js → ConfirmModal-wqW-7Vs_.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-CCj2poZF.js → DashboardPage-10hyXbuM.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-DeAi9xZM.js → DevicePage-DosHEknI.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-D3RkFfxL.js → DialogClose-CRzzOKwV.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-DuiVFMP6.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-B_MCherE.js → DialogTitle-CgVdc49w.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-DNN2K13r.js → FadeIn-CVkirQtu.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-lFcC5cJF.js → HeaderGithubStar-DHW75YEC.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-CeLaiU7v.js → IpCheckPage-CMOjeIuH.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DAoPUMvI.js → LandingPage-Cca1heHL.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardAvatar-FQi0zZEF.js → LeaderboardAvatar-CVMcytB1.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardPage-D5b5VXQC.js → LeaderboardPage-BEfsEAZY.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProfileModal-B4zRhrdW.js → LeaderboardProfileModal-5LuPOMoM.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfilePage-Bq8rq1En.js → LeaderboardProfilePage-DUQOF16T.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-DWM80BaS.js → LimitsPage-C6cPHrnU.js} +4 -4
- package/dashboard/dist/assets/{LocalOnlyNotice-B8m8CUt0.js → LocalOnlyNotice-B2SjP1L6.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-BUW1YAd4.js → LoginPage-D0vP9cX4.js} +1 -1
- package/dashboard/dist/assets/{PopoverPopup-Bpt95eH1.js → PopoverPopup-AtVz9OM2.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-BbIfq0Oo.js → ResetPasswordPage-6eUhDnAl.js} +1 -1
- package/dashboard/dist/assets/{Select-gTXpf9KQ.js → Select-Dt-nyHat.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-DEkgwu_p.js → SelectItemText-CFxs6Ipf.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-DI9CabCH.js → SettingsPage-Ccv_PRTi.js} +1 -1
- package/dashboard/dist/assets/{SkillsPage-BfCZDHaD.js → SkillsPage-Ckmq2qWZ.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-rU0VeGYf.js → WidgetsPage-CuMpK7JS.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-CZa-5-KZ.js → WrappedPage-C3sjJiS5.js} +1 -1
- package/dashboard/dist/assets/{agent-logos-EmiprqVo.js → agent-logos-CORiXh7-.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-k-vRvS_D.js → arrow-up-right-D-CX3rHC.js} +1 -1
- package/dashboard/dist/assets/check-frbadzCO.js +1 -0
- package/dashboard/dist/assets/{copy-syqMmWHW.js → copy-BbbIDe0D.js} +1 -1
- package/dashboard/dist/assets/{download-DZcuOKDP.js → download-CnLKP9Xi.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-D7k8OXQS.js → format-tokens-Q8buFewN.js} +1 -1
- package/dashboard/dist/assets/{info-CEBgCIZx.js → info-Bg3JHknV.js} +1 -1
- package/dashboard/dist/assets/{main-BALrkVr_.js → main-BZBZhXIl.js} +20 -17
- package/dashboard/dist/assets/{use-community-stats-DUttYzRH.js → use-community-stats-BBUKlTpE.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-BhIvYvqB.js → use-limits-display-prefs-Dnl2W8Rt.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-BhOpUBnt.js → use-native-settings-DlQEd871.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-Cd6yagUF.js → use-ordered-list-4WtaZhJf.js} +1 -1
- package/dashboard/dist/assets/{use-quality-per-dollar-pref-DBeuBvln.js → use-quality-per-dollar-pref-CS0EFKxa.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-DBhYqpBW.js → use-usage-limits-CJ25xM-V.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-Cy2Q8nWt.js → useCurrency-CaevR9XR.js} +1 -1
- package/dashboard/dist/assets/{useScrollLock-C6Eqqoge.js → useScrollLock-BLGPKPXr.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +2 -2
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/zcode-limits.js +58 -21
- package/dashboard/dist/assets/DialogDescription-SXe3669h.js +0 -1
- package/dashboard/dist/assets/check-BBoXV3Xq.js +0 -1
package/src/lib/zcode-limits.js
CHANGED
|
@@ -378,11 +378,13 @@ function normalizeZcodeBalanceResponse(body) {
|
|
|
378
378
|
if (!balances.length) {
|
|
379
379
|
return {
|
|
380
380
|
server_time: zcodeValNumber(data.server_time),
|
|
381
|
+
plan_kind: "start-plan",
|
|
381
382
|
plan_id: null,
|
|
382
383
|
plan_label: null,
|
|
383
384
|
buckets: [],
|
|
384
385
|
primary_window: null,
|
|
385
386
|
secondary_window: null,
|
|
387
|
+
tertiary_window: null,
|
|
386
388
|
};
|
|
387
389
|
}
|
|
388
390
|
|
|
@@ -417,11 +419,13 @@ function normalizeZcodeBalanceResponse(body) {
|
|
|
417
419
|
const planId = typeof balances[0]?.plan_id === "string" ? balances[0].plan_id : null;
|
|
418
420
|
return {
|
|
419
421
|
server_time: serverTime,
|
|
422
|
+
plan_kind: "start-plan",
|
|
420
423
|
plan_id: planId,
|
|
421
424
|
plan_label: deriveZcodePlanLabel(planId),
|
|
422
425
|
buckets: sorted,
|
|
423
426
|
primary_window: sorted[0]?.window || null,
|
|
424
427
|
secondary_window: sorted[1]?.window || null,
|
|
428
|
+
tertiary_window: sorted[2]?.window || null,
|
|
425
429
|
};
|
|
426
430
|
}
|
|
427
431
|
|
|
@@ -496,34 +500,52 @@ function quotaTimestampToIso(value) {
|
|
|
496
500
|
return new Date(n > 10_000_000_000 ? n : n * 1000).toISOString();
|
|
497
501
|
}
|
|
498
502
|
|
|
499
|
-
function
|
|
503
|
+
function findZcodeQuotaLimit(limits, type, unit, number = null) {
|
|
504
|
+
if (!Array.isArray(limits)) return null;
|
|
505
|
+
return (
|
|
506
|
+
limits.find((limit) => {
|
|
507
|
+
if (!limit || typeof limit !== "object") return false;
|
|
508
|
+
if (limit.type !== type) return false;
|
|
509
|
+
if (zcodeValNumber(limit.unit) !== unit) return false;
|
|
510
|
+
if (number == null) return true;
|
|
511
|
+
return zcodeValNumber(limit.number) === number;
|
|
512
|
+
}) || null
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// ZCode 3.3.x coding-plan quota rows expose `percentage` as already-used %
|
|
517
|
+
// (0–100). `unit`/`number` identify the window (5h / weekly / tools), not a
|
|
518
|
+
// token total — deriving used% from usage/number turns an unused TIME_LIMIT
|
|
519
|
+
// (usage=100, number=1, percentage=0) into a false 100% bar.
|
|
520
|
+
function normalizeZcodeQuotaLimit(limit, { showName } = {}) {
|
|
500
521
|
if (!limit || typeof limit !== "object") return null;
|
|
501
|
-
const total = zcodeValNumber(limit.number)
|
|
522
|
+
const total = zcodeValNumber(limit.number);
|
|
502
523
|
const used = zcodeValNumber(limit.usage) ?? zcodeValNumber(limit.currentValue);
|
|
503
524
|
const remaining = zcodeValNumber(limit.remaining);
|
|
504
525
|
const rawPercentage = zcodeValNumber(limit.percentage);
|
|
505
526
|
let usedPercent = null;
|
|
506
|
-
if (
|
|
527
|
+
if (rawPercentage != null) {
|
|
528
|
+
usedPercent = rawPercentage;
|
|
529
|
+
} else if (total != null && total > 0 && used != null) {
|
|
507
530
|
usedPercent = (used / total) * 100;
|
|
508
|
-
} else if (total != null && total > 0 && remaining != null) {
|
|
531
|
+
} else if (total != null && total > 0 && remaining != null && remaining <= total) {
|
|
509
532
|
usedPercent = ((total - remaining) / total) * 100;
|
|
510
|
-
} else if (rawPercentage != null) {
|
|
511
|
-
usedPercent = rawPercentage <= 1 ? rawPercentage * 100 : rawPercentage;
|
|
512
533
|
}
|
|
513
534
|
|
|
514
535
|
const detail = Array.isArray(limit.usageDetails) ? limit.usageDetails.find((item) => item && typeof item === "object") : null;
|
|
515
|
-
const
|
|
516
|
-
(typeof
|
|
536
|
+
const resolvedShowName =
|
|
537
|
+
(typeof showName === "string" && showName.trim())
|
|
538
|
+
|| (typeof detail?.displayName === "string" && detail.displayName.trim())
|
|
517
539
|
|| (typeof detail?.modelCode === "string" && detail.modelCode.trim())
|
|
518
540
|
|| (typeof limit.type === "string" && limit.type.trim())
|
|
519
541
|
|| "Coding plan";
|
|
520
542
|
|
|
521
543
|
return {
|
|
522
|
-
show_name:
|
|
544
|
+
show_name: resolvedShowName,
|
|
523
545
|
entitlement_id: typeof limit.type === "string" ? limit.type : "",
|
|
524
|
-
total_units: total,
|
|
525
|
-
used_units: used,
|
|
526
|
-
remaining_units: remaining,
|
|
546
|
+
total_units: rawPercentage != null ? null : total,
|
|
547
|
+
used_units: rawPercentage != null ? null : used,
|
|
548
|
+
remaining_units: rawPercentage != null ? null : remaining,
|
|
527
549
|
window: buildWindow({ usedPercent, resetAt: quotaTimestampToIso(limit.nextResetTime) }),
|
|
528
550
|
};
|
|
529
551
|
}
|
|
@@ -541,20 +563,35 @@ function normalizeZcodeCodingPlanQuotaResponse(body) {
|
|
|
541
563
|
throw new Error("Could not parse ZCode coding plan quota: missing data");
|
|
542
564
|
}
|
|
543
565
|
const limits = Array.isArray(data.limits) ? data.limits : [];
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
566
|
+
// Match ZCode's own sidebar: TOKENS_LIMIT(unit=3,number=5)=5h,
|
|
567
|
+
// TOKENS_LIMIT(unit=6)=weekly, TIME_LIMIT(unit=5,number=1)=tool calls.
|
|
568
|
+
const fiveHourLimit = findZcodeQuotaLimit(limits, "TOKENS_LIMIT", 3, 5);
|
|
569
|
+
const weeklyLimit = findZcodeQuotaLimit(limits, "TOKENS_LIMIT", 6);
|
|
570
|
+
const toolsLimit = findZcodeQuotaLimit(limits, "TIME_LIMIT", 5, 1);
|
|
571
|
+
const hasNamedWindows = Boolean(fiveHourLimit || weeklyLimit || toolsLimit);
|
|
572
|
+
|
|
573
|
+
let buckets;
|
|
574
|
+
if (hasNamedWindows) {
|
|
575
|
+
buckets = [
|
|
576
|
+
fiveHourLimit ? normalizeZcodeQuotaLimit(fiveHourLimit, { showName: "5h" }) : null,
|
|
577
|
+
weeklyLimit ? normalizeZcodeQuotaLimit(weeklyLimit, { showName: "Weekly" }) : null,
|
|
578
|
+
toolsLimit ? normalizeZcodeQuotaLimit(toolsLimit, { showName: "Tools" }) : null,
|
|
579
|
+
].filter((bucket) => bucket?.window);
|
|
580
|
+
} else {
|
|
581
|
+
buckets = limits.map((limit) => normalizeZcodeQuotaLimit(limit)).filter((bucket) => bucket?.window);
|
|
582
|
+
buckets.sort((a, b) => (b.total_units || 0) - (a.total_units || 0));
|
|
583
|
+
}
|
|
584
|
+
|
|
550
585
|
const level = typeof data.level === "string" && data.level.trim() ? data.level.trim() : null;
|
|
551
586
|
return {
|
|
552
587
|
server_time: null,
|
|
588
|
+
plan_kind: "coding-plan",
|
|
553
589
|
plan_id: level,
|
|
554
590
|
plan_label: level ? deriveZcodePlanLabel(level) || level : "Coding",
|
|
555
|
-
buckets
|
|
556
|
-
primary_window:
|
|
557
|
-
secondary_window:
|
|
591
|
+
buckets,
|
|
592
|
+
primary_window: buckets[0]?.window || null,
|
|
593
|
+
secondary_window: buckets[1]?.window || null,
|
|
594
|
+
tertiary_window: buckets[2]?.window || null,
|
|
558
595
|
};
|
|
559
596
|
}
|
|
560
597
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as n,b9 as a}from"./main-BALrkVr_.js";import{u as p}from"./DialogTitle-B_MCherE.js";import{u as c}from"./useScrollLock-C6Eqqoge.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 +0,0 @@
|
|
|
1
|
-
import{c}from"./main-BALrkVr_.js";const e=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],t=c("check",e);export{t as C};
|