tokentracker-cli 1.4.10 → 1.4.12
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.de.md +6 -5
- package/README.ja.md +6 -5
- package/README.ko.md +6 -5
- package/README.md +6 -4
- package/README.zh-CN.md +6 -5
- package/dashboard/dist/assets/{AchievementBadge-BTqlXUP1.js → AchievementBadge-BwrL59nq.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-DbKUhaY-.js → AchievementsPage-DG0dvG3d.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-El1F-OC7.js → AchievementsSection-NrjlZjZK.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal--8PySLzP.js → BadgeDetailModal-BjgBAb-0.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-DBcOS4vh.js → BotAnimated-D7gMmkaM.js} +1 -1
- package/dashboard/dist/assets/{Card-CeGs8TaY.js → Card-CgvwIS5W.js} +1 -1
- package/dashboard/dist/assets/{CloudCheckoutPage-DCg3VVAi.js → CloudCheckoutPage-DKDpT0HI.js} +1 -1
- package/dashboard/dist/assets/{CloudPage-CmeFDrmk.js → CloudPage-BOfqPAAH.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-CrSNoZW9.js → CommandPalette-BfRKy_dn.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-ynB4j0Qb.js → CommunityStatsModal-BcVSszit.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-DDTUf-My.js → ConfirmModal-Be4EVpPT.js} +1 -1
- package/dashboard/dist/assets/{Controls-DXsJjEU1.js → Controls-vrG8LLBe.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-fr4sgbLB.js → DashboardPage-DvhF72XX.js} +1 -1
- package/dashboard/dist/assets/{DateRangePopover-gTiPISL_.js → DateRangePopover-CZVMdPEq.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-DvHVjCCH.js → DevicePage-BeNIjTqa.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-CXwouQe4.js → DialogClose-BaNPZ3Bu.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-LHQ-SC4e.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-Cd_k-Nyw.js → DialogTitle-B3IwNXro.js} +1 -1
- package/dashboard/dist/assets/{ElectricLogo-C4vUNTCI.js → ElectricLogo-DC-03HL_.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-CGM5RBFy.js → FadeIn-DhUnSf2V.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-el5-DhVb.js → HeaderGithubStar-BiWRLl7V.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-C7YaWwJx.js → HoverTooltip-DLPiBqDu.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-EKhbH9hJ.js → IpCheckPage-DKjg0V9L.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DJYOv1AM.js → LandingPage-XQuTnBMQ.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardPage-CwzJxA8p.js → LeaderboardPage-xAbo5mzo.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProBadge-DYLp9pJY.js → LeaderboardProBadge-mMiEeaYS.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfileModal-DqD2h9dD.js → LeaderboardProfileModal-B7q0Kk6B.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-CarYvpYe.js → LeaderboardProfilePage-Bru_6wgX.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-4T0BpfYS.js → LimitsPage-DQH6ziz4.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-CAR-mqy0.js → LocalOnlyNotice-B-lxih4W.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-Czq-UgAU.js → LoginCard-ChNsRYE2.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-D4uxfzZb.js → LoginModal-CRw3PgMi.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-Bg3BG0Wv.js → LoginPage-CVsbYn-h.js} +1 -1
- package/dashboard/dist/assets/{PetPage-BgwBxRyx.js → PetPage-BwEnQLLY.js} +2 -2
- package/dashboard/dist/assets/{PopoverPopup-k3o_Jp2b.js → PopoverPopup-CDOtxSL8.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-Bbw6MUSf.js → ProviderIcon-Dsu1p6gG.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DIKPVu5K.js → ResetPasswordPage-BzpaSORs.js} +1 -1
- package/dashboard/dist/assets/{Select-kA0dV5Qw.js → Select-62UH-yLs.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-D4YCIn1x.js → SelectItemText-aTexKmQ0.js} +1 -1
- package/dashboard/dist/assets/{SelfHostPage-C3Y9qF3P.js → SelfHostPage-CmhV0dms.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-o1G3SJhV.js → ServiceStatusPage-CLWO33w1.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-CA-efxhU.js → SessionsPage-BNCDKb58.js} +2 -2
- package/dashboard/dist/assets/{SettingsPage-Mr84vxQL.js → SettingsPage-DybHncPO.js} +3 -3
- package/dashboard/dist/assets/{SkillsPage-BtRhLSpz.js → SkillsPage-BV5R3VhT.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-CcFjCCuC.js → TokenGalaxy-mNNAo6Ai.js} +1 -1
- package/dashboard/dist/assets/{TooltipPopup-6aTx3jDf.js → TooltipPopup-D00SVpLP.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-DoywXr8h.js → TrendMonitor-aNIpzAO-.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-BuGSzvR0.js → WidgetsPage-COjZIMo8.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-Bm6X-SUZ.js → WrappedPage-af-bDIfB.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-ClVJNQu3.js → __vite-browser-external-KHpR2q-A.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-Sc8Sejgx.js → agent-logos-D9Uq5b6y.js} +1 -1
- package/dashboard/dist/assets/{arrow-left-Cm1LG2i_.js → arrow-left-Pt53BsA4.js} +1 -1
- package/dashboard/dist/assets/{arrow-right-WP3kIwiy.js → arrow-right-stBCZPot.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CjyprVMj.js → arrow-up-right-ltUBOD-o.js} +1 -1
- package/dashboard/dist/assets/{calendar-days-Bm88-Gcb.js → calendar-days-BMEtkPFp.js} +1 -1
- package/dashboard/dist/assets/{check-CzIxFg0I.js → check-ax5wQf5Q.js} +1 -1
- package/dashboard/dist/assets/{chevron-down-bfGK8629.js → chevron-down-gS62rNQt.js} +1 -1
- package/dashboard/dist/assets/{cloud-checkout-C9DFQ7yM.js → cloud-checkout-DDtdbz7C.js} +1 -1
- package/dashboard/dist/assets/{composite-CdExmgTx.js → composite-DVm8byy8.js} +1 -1
- package/dashboard/dist/assets/{copy-CPPdujn2.js → copy-VbASSQO1.js} +1 -1
- package/dashboard/dist/assets/{download-Cl6_dKeK.js → download-D1g6OCRI.js} +1 -1
- package/dashboard/dist/assets/{external-link-B0r6Wo4e.js → external-link-CGUQrKDL.js} +1 -1
- package/dashboard/dist/assets/{flame-wEezvzXx.js → flame-Dlvc-qIH.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-vWpBpKpM.js → format-tokens-CB1QfZsj.js} +1 -1
- package/dashboard/dist/assets/{gift-BFjblRqU.js → gift-DydflDeL.js} +1 -1
- package/dashboard/dist/assets/{icons-DX3dCNJP.js → icons-B_xYF8_-.js} +1 -1
- package/dashboard/dist/assets/{index-p8Gt3NFg.js → index-BRNltZbP.js} +1 -1
- package/dashboard/dist/assets/{index-DBF1bJlm.js → index-ByXXZlPn.js} +1 -1
- package/dashboard/dist/assets/{index-D1Zdrpom.js → index-CuLrp2D2.js} +1 -1
- package/dashboard/dist/assets/{index-D-TnqdBv.js → index-cidqWI7C.js} +1 -1
- package/dashboard/dist/assets/{info-Cqi971MA.js → info-D6-LIywq.js} +1 -1
- package/dashboard/dist/assets/{link-2-79sm__cT.js → link-2-BbuXAF5y.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-CDoVfOUb.js → loader-circle-DAeCHAyj.js} +1 -1
- package/dashboard/dist/assets/{local-usage-transfer-EcXnuwCj.js → local-usage-transfer-BejRwzi4.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-v5_BKSmY.js → modifiers.esm-CV2S03sv.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-CO67DffO.js → monitor-smartphone-Dj_u5s6h.js} +1 -1
- package/dashboard/dist/assets/{play-CbvuGtc3.js → play-DrcSicai.js} +1 -1
- package/dashboard/dist/assets/{plus-jc2gXlRM.js → plus-BwYQW7nf.js} +1 -1
- package/dashboard/dist/assets/{provider-display-BK3EbRLM.js → provider-display-Bgfy-2rn.js} +2 -2
- package/dashboard/dist/assets/{react-DMs4C4qS.js → react-BXby2gfP.js} +1 -1
- package/dashboard/dist/assets/{safePolygon-cY9H0GBN.js → safePolygon-B8DY85mD.js} +1 -1
- package/dashboard/dist/assets/{search-fqTJoYYA.js → search-SCMosATz.js} +1 -1
- package/dashboard/dist/assets/{server-jpBtvTvr.js → server-DoD96f86.js} +1 -1
- package/dashboard/dist/assets/{shield-check-DQiBlJbN.js → shield-check-CESJcEp7.js} +1 -1
- package/dashboard/dist/assets/{skills-api-CN2r_rmt.js → skills-api-DE71Ylhd.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-DrS52yOK.js → sortable.esm-EgVv2jPt.js} +1 -1
- package/dashboard/dist/assets/{store-K2Mk6aMn.js → store-mMQPBMoh.js} +1 -1
- package/dashboard/dist/assets/{terminal-Q4SruAlh.js → terminal-DxNM-IG2.js} +1 -1
- package/dashboard/dist/assets/{trash-C1Ob-g8E.js → trash-rywOpT2_.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-C-Gxpp9D.js → use-community-stats-BQw06Twe.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-DK-A4bBp.js → use-latest-request-guard-BvouGm-c.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-ZauQzxE_.js → use-limits-display-prefs-C5_9TDSy.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-BZLEIUK8.js → use-native-settings-BxuddjkP.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-De_Mcm_H.js → use-ordered-list-Cwqc5XA8.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-DU3FvZwM.js +1 -0
- package/dashboard/dist/assets/{use-transform-XCDD5IrX.js → use-transform-Dl-SvALB.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BncGDhoF.js → use-usage-limits-BqmHYYc3.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-DXPclxBT.js → useCurrency-B1XK_Z0N.js} +1 -1
- package/dashboard/dist/assets/{usePositioner-C-E1npCy.js → usePositioner-BvqDMGZo.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-B70xhy9u.js → useTokenFormat-pPWJeWRe.js} +1 -1
- package/dashboard/dist/assets/{zap-D7gRgGCj.js → zap-DKYjQi1B.js} +1 -1
- package/dashboard/dist/index.html +13 -11
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/llms.txt +3 -2
- package/dashboard/dist/share.html +1 -1
- package/package.json +2 -2
- package/src/commands/init.js +1 -0
- package/src/commands/status.js +10 -0
- package/src/commands/sync.js +24 -0
- package/src/lib/omp-session.js +480 -0
- package/src/lib/pricing/curated-overrides.json +101 -0
- package/src/lib/pricing/matcher.js +44 -15
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/src/lib/rollout.js +277 -0
- package/src/lib/session-analytics.js +54 -8
- package/src/lib/trae-cn-config.js +36 -20
- package/dashboard/dist/assets/DialogDescription-BzbzETUC.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-DatTtp2N.js +0 -1
|
@@ -252,6 +252,11 @@ function lookupContainedExactCaseInsensitive(table, model) {
|
|
|
252
252
|
// is a separate SKU from Opus 5). Dated and provider suffixes still work.
|
|
253
253
|
const suffix = lower.slice(start + key.length);
|
|
254
254
|
if (/^[.\d]/.test(suffix)) continue;
|
|
255
|
+
// Alternate SKU markers (preview/next/exp/…) must not inherit the base
|
|
256
|
+
// exact rate, including when they follow a date snapshot
|
|
257
|
+
// (`qwen3.8-max-2026-09-02-preview`, `qwen3-8-max-0902-preview`).
|
|
258
|
+
// Plain dated (-0902 / -YYYY-MM-DD) and provider-qualified suffixes still match.
|
|
259
|
+
if (/(?:^|-)(?:preview|next|exp|experimental|beta|alpha)(?:-|$)/.test(suffix)) continue;
|
|
255
260
|
return table[key];
|
|
256
261
|
}
|
|
257
262
|
return null;
|
|
@@ -280,15 +285,6 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
280
285
|
value: { input: 0, output: 0, cache_read: 0, cache_write: 0 },
|
|
281
286
|
};
|
|
282
287
|
}
|
|
283
|
-
// OpenCode Zen free models carry a `-free` suffix on the paid model id
|
|
284
|
-
// (`deepseek-v4.1-flash-free`); the base-name fuzzy match must not bill them.
|
|
285
|
-
if (sourceKey === "opencode" && lower.endsWith("-free")) {
|
|
286
|
-
return {
|
|
287
|
-
hit: true,
|
|
288
|
-
source: "curated:opencode-free-suffix",
|
|
289
|
-
value: { input: 0, output: 0, cache_read: 0, cache_write: 0 },
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
288
|
// AStudio does not disclose its routed model. Stop before generic aliases
|
|
293
289
|
// and fuzzy matching can turn an unresolved router into a priced model.
|
|
294
290
|
if (sourceKey === "acode" && (lower === "auto" || lower.endsWith("-auto"))) {
|
|
@@ -302,12 +298,8 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
302
298
|
}
|
|
303
299
|
}
|
|
304
300
|
|
|
305
|
-
// 1. CURATED exact
|
|
306
|
-
//
|
|
307
|
-
// Keep the boundary strict: Flash-Next and Max have independent prices.
|
|
308
|
-
if (/(?:^|\/)qwen3[.-]8-flash(?:-\d{4}-\d{2}-\d{2})?$/.test(lower.trim()) && curated.exact?.["qwen3.8-flash"]) {
|
|
309
|
-
return { hit: true, source: "curated:exact", value: curated.exact["qwen3.8-flash"] };
|
|
310
|
-
}
|
|
301
|
+
// 1. CURATED exact (before family regex aliases so a distinct dated exact
|
|
302
|
+
// entry cannot be overridden by the shared-SKU regex).
|
|
311
303
|
if (curated.exact && curated.exact[lookupModel]) {
|
|
312
304
|
return { hit: true, source: "curated:exact", value: curated.exact[lookupModel] };
|
|
313
305
|
}
|
|
@@ -316,6 +308,17 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
316
308
|
return { hit: true, source: "curated:exact-dot", value: curatedDotExact };
|
|
317
309
|
}
|
|
318
310
|
|
|
311
|
+
// Qwen Flash's provider-qualified and dated IDs share the reference SKU.
|
|
312
|
+
// Keep the boundary strict: Flash-Next and Max have independent prices.
|
|
313
|
+
if (/(?:^|\/)qwen3[.-]8-flash(?:-\d{4}-\d{2}-\d{2})?$/.test(lower.trim()) && curated.exact?.["qwen3.8-flash"]) {
|
|
314
|
+
return { hit: true, source: "curated:exact", value: curated.exact["qwen3.8-flash"] };
|
|
315
|
+
}
|
|
316
|
+
// Qwen Max (dated -0902 and ISO snapshot -YYYY-MM-DD) share Singapore International SKU.
|
|
317
|
+
// Keep the boundary strict vs Flash / Flash-Next / -preview (issue #744).
|
|
318
|
+
if (/(?:^|\/)qwen3[.-]8-max(?:-0902|-\d{4}-\d{2}-\d{2})?$/.test(lower.trim()) && curated.exact?.["qwen3.8-max"]) {
|
|
319
|
+
return { hit: true, source: "curated:exact", value: curated.exact["qwen3.8-max"] };
|
|
320
|
+
}
|
|
321
|
+
|
|
319
322
|
// 2. LiteLLM exact
|
|
320
323
|
if (litellm && litellm[lookupModel]) {
|
|
321
324
|
return { hit: true, source: "litellm:exact", value: litellm[lookupModel] };
|
|
@@ -324,6 +327,32 @@ function lookupPricing(model, { curated, litellm, source } = {}) {
|
|
|
324
327
|
if (litellmDotExact) {
|
|
325
328
|
return { hit: true, source: "litellm:exact-dot", value: litellmDotExact };
|
|
326
329
|
}
|
|
330
|
+
|
|
331
|
+
// Free gateway SKUs carry a `-free` suffix on the paid model id
|
|
332
|
+
// (`deepseek-v4.1-flash-free`, `minimax-m2.5-free`, Muse `*-contributor-free`).
|
|
333
|
+
// Runs AFTER curated/LiteLLM exact so an explicit paid exact entry still wins,
|
|
334
|
+
// and BEFORE alias/fuzzy/base-name matchers so `foo-free` cannot inherit `foo`
|
|
335
|
+
// list rates. OpenCode Zen established the convention; other sources reuse it
|
|
336
|
+
// when they emit the same suffix (issue #744).
|
|
337
|
+
if (lower.endsWith("-free")) {
|
|
338
|
+
return {
|
|
339
|
+
hit: true,
|
|
340
|
+
source: sourceKey === "opencode" ? "curated:opencode-free-suffix" : "curated:free-suffix",
|
|
341
|
+
value: { input: 0, output: 0, cache_read: 0, cache_write: 0 },
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Kimi Code K2.8 Preview aliases must not inherit fuzzy `kimi` → kimi-k2.5 rates (#766).
|
|
346
|
+
// Parser stores bare `k2.8`; raw `kimicoding` / `kimi-k2.8` / `kimicoding/k2.8` may still
|
|
347
|
+
// appear in lookups. `kimi-for-coding` keeps its curated exact entry (resolved above).
|
|
348
|
+
// Stay unpriced until an official per-token public rate exists.
|
|
349
|
+
if (
|
|
350
|
+
/(?:^|\/)(?:kimicoding(?:\/k2\.8)?|kimi-k2\.8|k2\.8)(?:-|\.|$)/.test(lower.trim()) ||
|
|
351
|
+
lower.trim() === "kimicoding"
|
|
352
|
+
) {
|
|
353
|
+
return { hit: false, source: "miss", value: null };
|
|
354
|
+
}
|
|
355
|
+
|
|
327
356
|
const curatedDotContainedExact = lookupContainedExactCaseInsensitive(curated.exact, dotForm);
|
|
328
357
|
if (curatedDotContainedExact) {
|
|
329
358
|
return { hit: true, source: "curated:exact-dot", value: curatedDotContainedExact };
|