@duke-dsh-plugins/dsh-token-stats 1.5.2 → 1.5.3

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 CHANGED
@@ -65,7 +65,7 @@ dsh plugin --profile web add https://github.com/MoonlitDropOfBlood/dsh-token-sta
65
65
  - 切换模型时自动切换 provider;每 60s 自动刷新,**点击读数立即强制刷新**;
66
66
  - 未配置对应 API Key 或拉取失败时显示 `⚠`(悬停查看原因);当前 provider 不在支持列表时不占位。
67
67
 
68
- > **MiMo(小米)配置**:MiMo 的用量走 dashboard admin API(非公开 endpoint),纯 API Key(Bearer)实测会被 401 拒绝,可靠凭证是浏览器登录 Cookie。打开 platform.xiaomimimo.com → 订阅管理,F12 → Network 任一 `/api/v1/tokenPlan/*` 请求 → 复制完整 `Cookie` 请求头值,粘到 DSH 凭据的 `XIAOMI_MIMO_COOKIE`(或把 API Key 配到 `XIAOMI_MIMO_API_KEY`,插件会先 Bearer 后 Cookie 自动重试)。
68
+ > **MiMo(小米)配置**:MiMo 的用量走 dashboard admin API(非公开 endpoint),纯 API Key(Bearer)实测会被 401 拒绝,可靠凭证是浏览器登录 Cookie。打开 platform.xiaomimimo.com → 订阅管理,F12 → Network 任一 `/api/v1/tokenPlan/*` 请求 → 复制完整 `Cookie` 请求头值,粘到 DSH 凭据的 `XIAOMI_MIMO_COOKIE`(或把 API Key 配到 `XIAOMI_MIMO_API_KEY`,插件会先 Bearer 后 Cookie 自动重试)。按 route 派生命名的凭据(设置页自动生成,如 `XIAOMI_TOKEN_PLAN_CN_API_KEY`)同样识别;composer 读数按 route id 匹配(`xiaomi-mimo` / `xiaomimimo` / `xiaomi-token-plan-cn` / 名字含 xiaomi 或 mimo 均可)。
69
69
 
70
70
  ## 工作原理
71
71
 
package/client.js CHANGED
@@ -646,8 +646,18 @@ window.__ModuleLoader__.load({
646
646
  // Xiaomi MiMo:route id 由用户添加 provider 时命名,覆盖常见拼法。
647
647
  "xiaomi-mimo": "mimo",
648
648
  "xiaomimimo": "mimo",
649
+ "xiaomi-token-plan-cn": "mimo",
649
650
  "mimo": "mimo",
650
651
  };
652
+ /** route id → 内部 key:精确查表未命中时对 mimo 做包含回退(route id 用户自由命名,如 xiaomi-token-plan-cn)。 */
653
+ function providerKeyForRoute(route) {
654
+ if (!route) return null;
655
+ const exact = PROVIDER_ALIASES[route];
656
+ if (exact !== undefined) return exact;
657
+ const lower = String(route).toLowerCase();
658
+ if (lower.includes("mimo") || lower.includes("xiaomi")) return "mimo";
659
+ return null;
660
+ }
651
661
  const QUOTA_PROVIDER_ORDER = ["minimax", "deepseek", "kimi", "openrouter", "zhipu", "mimo"];
652
662
 
653
663
  function quotaProviderLabel(p) {
@@ -785,7 +795,7 @@ window.__ModuleLoader__.load({
785
795
  try {
786
796
  const snap = directory.store.getSnapshot();
787
797
  const route = snap && snap.current && snap.current.provider;
788
- setProvider(route ? PROVIDER_ALIASES[route] || null : null);
798
+ setProvider(providerKeyForRoute(route));
789
799
  } catch (e) {
790
800
  setProvider(null);
791
801
  }
package/index.js CHANGED
@@ -146,10 +146,14 @@ const QUOTA_PROVIDERS = {
146
146
  // Bearer 实测 401(session 守护),可靠路径是登录 Cookie;单个凭证值先
147
147
  // Bearer 后 Cookie 自动重试(对齐 Musage xiaomi.rs 的 BearerThenCookie)。
148
148
  // 在 DSH 凭据里把浏览器 DevTools 复制的完整 Cookie 或 API Key 配到
149
- // XIAOMI_MIMO_API_KEY / XIAOMI_MIMO_COOKIE(或 MIMO_*)任一 ref。
149
+ // XIAOMI_MIMO_API_KEY / XIAOMI_MIMO_COOKIE(或 MIMO_*)任一 ref;route 派生
150
+ // 名(设置页按 route 生成的 XIAOMI_TOKEN_PLAN_CN_API_KEY/_COOKIE,与
151
+ // 其他 provider 的 MINIMAX_CN_* 同规则)同样识别。
150
152
  mimo: {
151
- refs: ["XIAOMI_MIMO_API_KEY", "XIAOMI_MIMO_COOKIE", "MIMO_API_KEY", "MIMO_COOKIE"],
153
+ refs: ["XIAOMI_TOKEN_PLAN_CN_API_KEY", "XIAOMI_TOKEN_PLAN_CN_COOKIE", "XIAOMI_MIMO_API_KEY", "XIAOMI_MIMO_COOKIE", "MIMO_API_KEY", "MIMO_COOKIE"],
152
154
  urls: {
155
+ XIAOMI_TOKEN_PLAN_CN_API_KEY: "https://platform.xiaomimimo.com/api/v1/tokenPlan/usage",
156
+ XIAOMI_TOKEN_PLAN_CN_COOKIE: "https://platform.xiaomimimo.com/api/v1/tokenPlan/usage",
153
157
  XIAOMI_MIMO_API_KEY: "https://platform.xiaomimimo.com/api/v1/tokenPlan/usage",
154
158
  XIAOMI_MIMO_COOKIE: "https://platform.xiaomimimo.com/api/v1/tokenPlan/usage",
155
159
  MIMO_API_KEY: "https://platform.xiaomimimo.com/api/v1/tokenPlan/usage",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duke-dsh-plugins/dsh-token-stats",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "Token usage statistics for DeepSeek Harness (7/30-day per-model charts + yearly heatmap) plus an inline coding-plan balance/quota readout in the composer (minimax/deepseek/kimi/openrouter/zhipu).",
5
5
  "repository": {
6
6
  "type": "git",