@kenz1117/dsh-ui-usage-billing 0.9.8 → 0.9.9

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.en.md CHANGED
@@ -38,8 +38,9 @@
38
38
 
39
39
  ![Rates: model rate table (peak/off-peak split and live rate)](screenshots/5.png)
40
40
  - **Official vs third-party buckets**: the detail cost column is split by official DeepSeek direct / third-party relay ("official x / third y" when mixed); the Stats tab has an official/third-party summary card.
41
+ - **Relay-site attribution & quota**: usage is grouped by a provider's `baseURL` origin — multiple keys on the same relay station merge into one row, named by its domain. The Providers tab adds a "Relay sites" card (relay / direct / unknown-route states — an unknown route is one deleted or renamed in the current provider config, honestly labeled "cannot read" rather than mis-attributed as direct). Routes with a `baseURL` are auto-detected as New API (`/api/status`) or Sub2API (`/v1/usage`) to read their **balance and rolling quota windows**, labeled "no quota" when unreadable; the Zhipu GLM / Z.ai (CN region) wallet balance is now supported (read alongside the subscription plan). Project attribution prefers the workspace title for naming.
41
42
  - **Monthly budget + tier alerts**: a budget bar (on/off / amount / progress, ≥80% amber, over red pulse); notifies once per tier crossing 50/80/100%; a balance below the threshold (in CNY) alerts once a day.
42
- - **Subscription quota**: detects subscription providers in `llm-pi-ai` (Kimi / Z.ai / OpenCode Go / MiniMax / OpenRouter / Xiaomi / Volcano…); those with a quota API show remaining % and reset time live, exhausted in red, no API shown as "not wired"; subscription-channel model cost is 0.
43
+ - **Subscription quota**: detects subscription providers in `llm-pi-ai` (Kimi / Z.ai / OpenCode Go / MiniMax / OpenRouter / Xiaomi / Volcano…); those with a quota API show remaining % and reset time live, exhausted in red, no API shown as "not wired"; subscription-channel model cost is 0. **MiniMax note**: use the `minimax-token-plan-cn` provider id in MiniMax API for region `https://api.minimaxi.com`; the international route keeps `minimax` / `minimax-token-plan` against `https://www.minimaxi.com`. Override `baseUrl` per provider for proxies or staging.
43
44
 
44
45
  ![Providers: provider billing & subscriptions (balance, plan quota, model usage)](screenshots/3.png)
45
46
  - **Custom provider balance**: configure any HTTP endpoint for balance (`extract` supports constant / dot-path / add-subtract / divide, header `{{ENV}}` via the credentials seam); DeepSeek / Kimi / StepFun / SiliconFlow have built-in official balances, and the balance column estimates "≈N days" from the 7-day daily burn.
@@ -90,7 +91,7 @@ Browser Server (Node)
90
91
  └─ renders the dashboard
91
92
  ```
92
93
 
93
- - **Server** (`src/index.ts`): injects `webServer`, `sessionPersistence` and `credentials`, and registers `GET /api/billing/usage-stats`, `/api/billing/pricing`, `/api/billing/balance`. The aggregator caches folded results per session: each LLM call is attributed to the model of its preceding `request/header`, tokens split into cache-hit / cache-miss buckets, dates bucketed by the local timezone; a log file with unchanged mtime+size reuses its cached fold, only written sessions are re-folded, and the whole document has a 5s TTL to coalesce heavy polling. Aggregation logic lives in `src/aggregate.ts`.
94
+ - **Server** (`src/index.ts`): injects `webServer`, `sessionPersistence` and `credentials`, and registers `GET /api/billing/usage-stats`, `/api/billing/pricing`, `/api/billing/balance`, `/api/billing/subscriptions`, `/api/billing/relay-quotas`. The aggregator caches folded results per session: each LLM call is attributed to the model of its preceding `request/header`, tokens split into cache-hit / cache-miss buckets, dates bucketed by the local timezone; a log file with unchanged mtime+size reuses its cached fold, only written sessions are re-folded, and the whole document has a 5s TTL to coalesce heavy polling. Aggregation logic lives in `src/aggregate.ts`.
94
95
  - **Browser** (`src/client/`): requests the endpoints above to render the dashboard and probes each provider connection via `llm.models`. Until real data arrives it shows an all-zero empty snapshot, never fabricated samples.
95
96
 
96
97
  ## Theme collaboration
@@ -138,7 +139,7 @@ To add a model: append an entry to `MODEL_CATALOG` and map its real id in `MODEL
138
139
 
139
140
  ## HTTP API
140
141
 
141
- The public HTTP endpoints and field definitions are documented in source: `GET /api/billing/pricing`, `/api/billing/balance`, `/api/billing/usage-stats` (see `src/index.ts`, `src/aggregate.ts`).
142
+ The public HTTP endpoints and field definitions are documented in source: `GET /api/billing/pricing`, `/api/billing/balance`, `/api/billing/usage-stats`, `/api/billing/subscriptions`, `/api/billing/relay-quotas` (see `src/index.ts`, `src/aggregate.ts`, `src/relay.ts`). The `usage-stats` payload's `bySite` field is the relay-attributed usage distribution (`site:<origin>` / `direct:<provider>` / `unknown`).
142
143
 
143
144
  ## Configuration
144
145
 
@@ -177,7 +178,8 @@ None. This plugin is a pure UI surface: it registers no tools, injects no system
177
178
 
178
179
  ## Known Limitations and Deferred Work
179
180
 
180
- - **Balance queries cover DeepSeek / Moonshot (Kimi) / StepFun**: these three use a standard Bearer API key. Other providers expose no public balance API or need non-Bearer auth (Xiaomi MiMo via console Cookie, SenseTime via AccessKey signing, MiniMax/Doubao via quota or AK/SK), so they currently show "not configured"; the extension point is `src/balance.ts` (add a querier per provider balance API).
181
+ - **Balance queries cover DeepSeek / Moonshot (Kimi) / StepFun / SiliconFlow / xAI / Zhipu GLM (Z.ai CN region)**: these use a standard Bearer API key. Other providers expose no public balance API or need non-Bearer auth (Xiaomi MiMo via console Cookie, SenseTime via AccessKey signing, MiniMax/Doubao via quota or AK/SK), so they currently show "not configured"; the extension point is `src/balance.ts` (add a querier per provider balance API).
182
+ - **Relay quota depends on upstream private schemas**: New API / Sub2API interface fields are not public, so an unreadable station is labeled "no quota" rather than fabricating an amount; if a station's response fields differ, extend the parsers in `src/relay.ts`. An "unknown route" means that route no longer exists in the current provider config (renamed / deleted); historical call data is not lost — re-adding the same-named route restores attribution automatically.
181
183
  - **Overspend notifications rely on the browser Notification API**: when permission is denied or the platform lacks support, only the in-UI red-pulse fallback remains — no host-level notification channel; notifications are capped at once per day.
182
184
  - **Session rows are not navigable**: clicking a session row does not open that session (cross-plugin navigation needs a host session-selection channel); sessions are capped at 100 rows and the panel shows the top 20.
183
185
  - **Cost is a catalog estimate**: models without published per-token pricing (iFlytek, SenseTime, Xiaomi) use estimates (feature-list footnote ¹); official billing is authoritative.
package/README.md CHANGED
@@ -40,7 +40,7 @@
40
40
  - **官方 vs 三方分桶**:明细费用列按官方 DeepSeek 直连 / 第三方中转分解(混合时「官 x / 三 y」),统计 Tab 有「官方/三方」汇总卡。
41
41
  - **中转站归组与额度**:按 provider 的 `baseURL` 归一化 origin 归组——同一中转站的多把 key 合并成一行,站名即域名;明细 Tab 新增「中转站分布」卡(中转站 / 直连 / 未知路由三态,未知路由 = 配置里已删 / 改名的路由,诚实标注「读不到」而非误归直连)。对配了 `baseURL` 的路由自动识别 New API 系(`/api/status`)与 Sub2API(`/v1/usage`)的**余额与滚动额度窗口**,读不出标「未读出额度」;智谱 GLM / Z.ai 国内域钱包余额已接入(与订阅套餐双读)。项目归属优先用工作区标题命名。
42
42
  - **月度预算 + 分档提醒**:预算条(开关 / 金额 / 进度,≥80% 琥珀、超支红脉);跨 50 / 80 / 100% 各提醒一次;余额折算 CNY 低于阈值每天提醒一次。
43
- - **订阅套餐额度**:识别 `llm-pi-ai` 里的订阅类 provider(Kimi / Z.ai / OpenCode Go / MiniMax / OpenRouter / 小米 / 火山…),有额度 API 的实时显示剩余%与重置时间、用尽标红,无 API 标「未接入」;订阅通道模型费用记 0。档位月费与周期额度口径由内置知识库自动识别(如 OpenCode Go $10/月 + 周 $30 额度),有档位知识的标「自动识别」。
43
+ - **订阅套餐额度**:识别 `llm-pi-ai` 里的订阅类 provider(Kimi / Z.ai / OpenCode Go / MiniMax / OpenRouter / 小米 / 火山…),有额度 API 的实时显示剩余%与重置时间、用尽标红,无 API 标「未接入」;订阅通道模型费用记 0。档位月费与周期额度口径由内置知识库自动识别(如 OpenCode Go $10/月 + 周 $30 额度),有档位知识的标「自动识别」。**MiniMax 用户注意**:在国内开发者环境请使用 `minimax-token-plan-cn` provider id,自动对接 `https://api.minimaxi.com`;国际保留 `minimax` / `minimax-token-plan`,默认 `https://www.minimaxi.com`。需要自配中转或 staging 时可在该 provider 设置里覆盖 `baseUrl`。
44
44
 
45
45
  ![明细:厂商计费与订阅(余额、套餐额度、模型用量)](screenshots/3.png)
46
46
  - **自定义 Provider 余额**:配置任意 HTTP 端点查余额(`extract` 支持常量 / 点路径 / add-subtract / divide,请求头 `{{ENV}}` 经凭据 seam);DeepSeek / Kimi / 阶跃星辰 / 硅基流动内置官方余额,余额列按近 7 天日均折算「约可撑 N 天」。
package/lib/client.js CHANGED
@@ -34,314 +34,314 @@ window.__ModuleLoader__.load({
34
34
  document.head.appendChild(tag);
35
35
  }
36
36
  var UsageBilling_module_css_default = {
37
- "triggerPopFoot": "VWh0dG_triggerPopFoot",
38
- "kpiGreen": "VWh0dG_kpiGreen",
39
- "trendPanel": "VWh0dG_trendPanel",
40
- "triggerSub": "VWh0dG_triggerSub",
41
- "tabNav": "VWh0dG_tabNav",
42
- "rateBadge": "VWh0dG_rateBadge",
43
- "subscriptionFill": "VWh0dG_subscriptionFill",
44
- "shareTrack": "VWh0dG_shareTrack",
45
- "siteRowTitle": "VWh0dG_siteRowTitle",
46
- "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
47
- "triggerPopUpdated": "VWh0dG_triggerPopUpdated",
48
- "rateBadgeBuiltin": "VWh0dG_rateBadgeBuiltin",
49
- "subscriptionGrid": "VWh0dG_subscriptionGrid",
50
- "siteRowMeta": "VWh0dG_siteRowMeta",
51
- "subscriptionName": "VWh0dG_subscriptionName",
52
- "roundsBars": "VWh0dG_roundsBars",
53
- "triggerPopFootStatus": "VWh0dG_triggerPopFootStatus",
54
- "chartLegend": "VWh0dG_chartLegend",
55
- "triggerPopFootStatusLow": "VWh0dG_triggerPopFootStatusLow",
56
- "roundsBarWrap": "VWh0dG_roundsBarWrap",
57
- "liveCostItem": "VWh0dG_liveCostItem",
58
- "triggerAmount": "VWh0dG_triggerAmount",
59
- "triggerIcon": "VWh0dG_triggerIcon",
60
- "triggerPopLabel": "VWh0dG_triggerPopLabel",
61
- "triggerPopValueStack": "VWh0dG_triggerPopValueStack",
62
- "pricingToggleText": "VWh0dG_pricingToggleText",
63
- "triggerPopOpenBtn": "VWh0dG_triggerPopOpenBtn",
64
- "healthOk": "VWh0dG_healthOk",
65
- "bucketStatValue": "VWh0dG_bucketStatValue",
66
- "settingsHint": "VWh0dG_settingsHint",
67
- "exportButton": "VWh0dG_exportButton",
68
- "balanceCell": "VWh0dG_balanceCell",
69
- "peakAlertCenter": "VWh0dG_peakAlertCenter",
70
37
  "rateBadgeLive": "VWh0dG_rateBadgeLive",
71
- "triggerPopValue": "VWh0dG_triggerPopValue",
72
- "rangeButtonActive": "VWh0dG_rangeButtonActive",
38
+ "bucketStatValue": "VWh0dG_bucketStatValue",
73
39
  "subscriptionExhausted": "VWh0dG_subscriptionExhausted",
74
- "triggerBody": "VWh0dG_triggerBody",
75
- "tableScroll": "VWh0dG_tableScroll",
76
- "switchOn": "VWh0dG_switchOn",
77
- "siteRowCost": "VWh0dG_siteRowCost",
78
- "pricingTable": "VWh0dG_pricingTable",
79
- "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
80
- "heroSide": "VWh0dG_heroSide",
81
- "chartSvg": "VWh0dG_chartSvg",
82
- "triggerPopFootName": "VWh0dG_triggerPopFootName",
83
- "heatmapYearScroll": "VWh0dG_heatmapYearScroll",
84
- "triggerPopTitleMonth": "VWh0dG_triggerPopTitleMonth",
85
- "triggerSpark": "VWh0dG_triggerSpark",
86
- "budgetControls": "VWh0dG_budgetControls",
87
- "triggerPopRow": "VWh0dG_triggerPopRow",
88
- "budgetOverPulse": "VWh0dG_budgetOverPulse",
40
+ "shareSegUser": "VWh0dG_shareSegUser",
41
+ "triggerPopLabel": "VWh0dG_triggerPopLabel",
42
+ "closeButton": "VWh0dG_closeButton",
43
+ "heroSideValue": "VWh0dG_heroSideValue",
44
+ "panelTitle": "VWh0dG_panelTitle",
45
+ "chartCrosshair": "VWh0dG_chartCrosshair",
46
+ "chartLegendLine": "VWh0dG_chartLegendLine",
47
+ "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
48
+ "triggerSub": "VWh0dG_triggerSub",
49
+ "kpiLabel": "VWh0dG_kpiLabel",
50
+ "roundsAxis": "VWh0dG_roundsAxis",
51
+ "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
52
+ "peakAlertPanel": "VWh0dG_peakAlertPanel",
53
+ "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
89
54
  "tabButton": "VWh0dG_tabButton",
55
+ "roundsEmpty": "VWh0dG_roundsEmpty",
56
+ "subscriptionTier": "VWh0dG_subscriptionTier",
90
57
  "pluginInfoValue": "VWh0dG_pluginInfoValue",
91
- "peakAlert": "VWh0dG_peakAlert",
92
- "triggerPopFootStrong": "VWh0dG_triggerPopFootStrong",
93
- "peakAlertHint": "VWh0dG_peakAlertHint",
94
- "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
95
- "providerGroupList": "VWh0dG_providerGroupList",
96
- "chartGrid": "VWh0dG_chartGrid",
97
- "roundsFlagMark": "VWh0dG_roundsFlagMark",
58
+ "heatmapLegend": "VWh0dG_heatmapLegend",
59
+ "shareSeg": "VWh0dG_shareSeg",
60
+ "pricingTable": "VWh0dG_pricingTable",
61
+ "planTag": "VWh0dG_planTag",
62
+ "subscriptionGoldFlow": "VWh0dG_subscriptionGoldFlow",
63
+ "heatmapGrid": "VWh0dG_heatmapGrid",
64
+ "bucketStatSub": "VWh0dG_bucketStatSub",
65
+ "subscriptionCard": "VWh0dG_subscriptionCard",
66
+ "providerGroupMeta": "VWh0dG_providerGroupMeta",
67
+ "modelProvider": "VWh0dG_modelProvider",
68
+ "bandTagOff": "VWh0dG_bandTagOff",
69
+ "heatmapYearCell": "VWh0dG_heatmapYearCell",
98
70
  "bandTag": "VWh0dG_bandTag",
99
- "subscriptionPct": "VWh0dG_subscriptionPct",
100
- "budgetInputWrap": "VWh0dG_budgetInputWrap",
101
- "heatmapYearGrid": "VWh0dG_heatmapYearGrid",
102
- "pluginInfoLink": "VWh0dG_pluginInfoLink",
103
- "budgetValue": "VWh0dG_budgetValue",
104
- "roundsEmpty": "VWh0dG_roundsEmpty",
105
- "bucketThird": "VWh0dG_bucketThird",
106
- "costCol": "VWh0dG_costCol",
107
- "rounds": "VWh0dG_rounds",
108
- "budgetHint": "VWh0dG_budgetHint",
109
- "heatmapCellEmpty": "VWh0dG_heatmapCellEmpty",
110
- "heroMeta": "VWh0dG_heroMeta",
111
- "triggerPopFootTitle": "VWh0dG_triggerPopFootTitle",
112
- "heroGaugeArc": "VWh0dG_heroGaugeArc",
113
- "chartDot": "VWh0dG_chartDot",
114
- "kpiGrid": "VWh0dG_kpiGrid",
115
- "dashboardBody": "VWh0dG_dashboardBody",
116
- "providerGroupBalanceLabel": "VWh0dG_providerGroupBalanceLabel",
117
- "providerGroup": "VWh0dG_providerGroup",
118
71
  "pluginInfoLabel": "VWh0dG_pluginInfoLabel",
119
- "triggerPopMuted": "VWh0dG_triggerPopMuted",
120
- "pricingToggle": "VWh0dG_pricingToggle",
121
- "estimatedTag": "VWh0dG_estimatedTag",
122
- "providerGroupHead": "VWh0dG_providerGroupHead",
123
- "peakAlertPreview": "VWh0dG_peakAlertPreview",
124
- "triggerPopHead": "VWh0dG_triggerPopHead",
125
- "triggerMeta": "VWh0dG_triggerMeta",
126
- "triggerPopAlert": "VWh0dG_triggerPopAlert",
127
- "chartTooltipDate": "VWh0dG_chartTooltipDate",
128
- "triggerPopBadgeDirect": "VWh0dG_triggerPopBadgeDirect",
129
- "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
130
- "providerGroupName": "VWh0dG_providerGroupName",
131
- "heroValue": "VWh0dG_heroValue",
132
- "siteRowCalls": "VWh0dG_siteRowCalls",
133
- "subscriptionPlan": "VWh0dG_subscriptionPlan",
134
- "deltaUp": "VWh0dG_deltaUp",
135
- "triggerPopStrong": "VWh0dG_triggerPopStrong",
136
- "budgetLabel": "VWh0dG_budgetLabel",
137
- "chartTooltip": "VWh0dG_chartTooltip",
138
- "peakAlertIn": "VWh0dG_peakAlertIn",
139
- "bandPrice": "VWh0dG_bandPrice",
140
- "siteKindDirect": "VWh0dG_siteKindDirect",
141
- "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
142
72
  "currencyButtonActive": "VWh0dG_currencyButtonActive",
73
+ "heroLabel": "VWh0dG_heroLabel",
74
+ "heroSideSpacer": "VWh0dG_heroSideSpacer",
75
+ "providerGroupBalance": "VWh0dG_providerGroupBalance",
143
76
  "dashboardHead": "VWh0dG_dashboardHead",
144
- "healthDot": "VWh0dG_healthDot",
145
- "panelHead": "VWh0dG_panelHead",
146
- "budgetTrack": "VWh0dG_budgetTrack",
147
- "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
148
- "bucketOfficial": "VWh0dG_bucketOfficial",
149
- "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
150
- "peakAlertPanel": "VWh0dG_peakAlertPanel",
151
- "modelTable": "VWh0dG_modelTable",
152
- "providerGroupBadge": "VWh0dG_providerGroupBadge",
153
- "chartAxisLabel": "VWh0dG_chartAxisLabel",
154
- "uncataloguedTag": "VWh0dG_uncataloguedTag",
155
- "heroSideItem": "VWh0dG_heroSideItem",
156
- "shareValue": "VWh0dG_shareValue",
157
- "panelHint": "VWh0dG_panelHint",
158
- "heroGaugePct": "VWh0dG_heroGaugePct",
159
- "switch": "VWh0dG_switch",
160
- "exportLabel": "VWh0dG_exportLabel",
161
- "balanceDetailValue": "VWh0dG_balanceDetailValue",
162
- "headTitleRow": "VWh0dG_headTitleRow",
163
- "balanceDetailHead": "VWh0dG_balanceDetailHead",
164
- "subscriptionCard": "VWh0dG_subscriptionCard",
165
- "balanceDetailRow": "VWh0dG_balanceDetailRow",
166
- "tokenModelShareRow": "VWh0dG_tokenModelShareRow",
167
- "budgetFillWarn": "VWh0dG_budgetFillWarn",
168
- "shareSegOff": "VWh0dG_shareSegOff",
169
- "balanceDays": "VWh0dG_balanceDays",
77
+ "bucketCost": "VWh0dG_bucketCost",
78
+ "triggerSparkBar": "VWh0dG_triggerSparkBar",
79
+ "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
80
+ "triggerPop": "VWh0dG_triggerPop",
81
+ "hero": "VWh0dG_hero",
82
+ "liveQuotaCrit": "VWh0dG_liveQuotaCrit",
83
+ "peakAlertPeak": "VWh0dG_peakAlertPeak",
84
+ "providerGroupHead": "VWh0dG_providerGroupHead",
170
85
  "subscriptionHead": "VWh0dG_subscriptionHead",
171
- "currencyButton": "VWh0dG_currencyButton",
86
+ "subscriptionPlan": "VWh0dG_subscriptionPlan",
87
+ "triggerPopMetrics": "VWh0dG_triggerPopMetrics",
88
+ "subscriptionName": "VWh0dG_subscriptionName",
89
+ "peakAlertClose": "VWh0dG_peakAlertClose",
90
+ "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
91
+ "heroGaugePct": "VWh0dG_heroGaugePct",
92
+ "triggerPopBadge": "VWh0dG_triggerPopBadge",
172
93
  "shareSegPeak": "VWh0dG_shareSegPeak",
173
- "siteRowName": "VWh0dG_siteRowName",
174
- "tabPanelIn": "VWh0dG_tabPanelIn",
175
- "rangeToggle": "VWh0dG_rangeToggle",
176
- "subscriptionGoldFlow": "VWh0dG_subscriptionGoldFlow",
177
- "triggerPopMetricLabel": "VWh0dG_triggerPopMetricLabel",
178
- "triggerPopMetricHighlight": "VWh0dG_triggerPopMetricHighlight",
179
- "heroTop": "VWh0dG_heroTop",
180
- "heroGaugeLabel": "VWh0dG_heroGaugeLabel",
181
- "triggerPopFootNote": "VWh0dG_triggerPopFootNote",
182
- "rangeButton": "VWh0dG_rangeButton",
183
- "dashboardRight": "VWh0dG_dashboardRight",
184
- "subscriptionStatus": "VWh0dG_subscriptionStatus",
185
- "bucketSep": "VWh0dG_bucketSep",
186
- "balanceDetailPop": "VWh0dG_balanceDetailPop",
187
- "triggerPopBadgeSub": "VWh0dG_triggerPopBadgeSub",
188
- "exportBar": "VWh0dG_exportBar",
189
- "subscriptionTrack": "VWh0dG_subscriptionTrack",
190
- "peakAlertCountdown": "VWh0dG_peakAlertCountdown",
191
- "heatmapFooter": "VWh0dG_heatmapFooter",
192
- "balanceDetailClose": "VWh0dG_balanceDetailClose",
193
- "heroGauge": "VWh0dG_heroGauge",
194
- "pluginInfo": "VWh0dG_pluginInfo",
195
- "flatTag": "VWh0dG_flatTag",
196
- "providerGroupMeta": "VWh0dG_providerGroupMeta",
197
- "triggerPopBars": "VWh0dG_triggerPopBars",
198
- "balanceDetailLabel": "VWh0dG_balanceDetailLabel",
199
- "subscriptionFillWarn": "VWh0dG_subscriptionFillWarn",
200
- "emptyRow": "VWh0dG_emptyRow",
201
- "shareItem": "VWh0dG_shareItem",
202
- "subscriptionAuto": "VWh0dG_subscriptionAuto",
94
+ "subscriptionWindow": "VWh0dG_subscriptionWindow",
95
+ "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
203
96
  "modelCell": "VWh0dG_modelCell",
204
- "dashboard": "VWh0dG_dashboard",
205
- "kpiTile": "VWh0dG_kpiTile",
206
- "bandTagOff": "VWh0dG_bandTagOff",
207
- "peakAlertCorner": "VWh0dG_peakAlertCorner",
208
- "peakAlertField": "VWh0dG_peakAlertField",
209
- "shareSegUser": "VWh0dG_shareSegUser",
210
97
  "modelDot": "VWh0dG_modelDot",
211
- "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
212
- "chartTooltipRow": "VWh0dG_chartTooltipRow",
213
- "tabButtonActive": "VWh0dG_tabButtonActive",
214
- "triggerSparkBar": "VWh0dG_triggerSparkBar",
215
- "bucketStatSub": "VWh0dG_bucketStatSub",
216
- "liveQuotaWarn": "VWh0dG_liveQuotaWarn",
217
- "tabPanel": "VWh0dG_tabPanel",
218
- "kpiDetail": "VWh0dG_kpiDetail",
219
- "triggerPopTitle": "VWh0dG_triggerPopTitle",
98
+ "triggerPopMuted": "VWh0dG_triggerPopMuted",
99
+ "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
100
+ "flatTag": "VWh0dG_flatTag",
101
+ "triggerPopFootNote": "VWh0dG_triggerPopFootNote",
102
+ "chartStack": "VWh0dG_chartStack",
220
103
  "chartWrap": "VWh0dG_chartWrap",
221
- "dashboardIn": "VWh0dG_dashboardIn",
222
- "pluginInfoRow": "VWh0dG_pluginInfoRow",
223
- "bucketCost": "VWh0dG_bucketCost",
224
- "healthBad": "VWh0dG_healthBad",
225
- "heatmapCell": "VWh0dG_heatmapCell",
226
- "chartLegendLine": "VWh0dG_chartLegendLine",
227
- "closeButton": "VWh0dG_closeButton",
104
+ "triggerPopFootName": "VWh0dG_triggerPopFootName",
105
+ "kpiValue": "VWh0dG_kpiValue",
106
+ "modelTable": "VWh0dG_modelTable",
107
+ "siteRow": "VWh0dG_siteRow",
108
+ "peakAlertOff": "VWh0dG_peakAlertOff",
109
+ "balanceCell": "VWh0dG_balanceCell",
228
110
  "healthIdle": "VWh0dG_healthIdle",
229
- "chartStack": "VWh0dG_chartStack",
230
- "tokenModelPartIn": "VWh0dG_tokenModelPartIn",
231
- "chartLegendBar": "VWh0dG_chartLegendBar",
111
+ "subscriptionAuto": "VWh0dG_subscriptionAuto",
112
+ "liveTierOff": "VWh0dG_liveTierOff",
113
+ "headTitleRow": "VWh0dG_headTitleRow",
114
+ "subscriptionWindowLabel": "VWh0dG_subscriptionWindowLabel",
232
115
  "roundsBarLabel": "VWh0dG_roundsBarLabel",
233
- "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
234
- "budgetFill": "VWh0dG_budgetFill",
235
- "balanceDaysLow": "VWh0dG_balanceDaysLow",
236
- "subscriptionReset": "VWh0dG_subscriptionReset",
237
- "budgetUnit": "VWh0dG_budgetUnit",
238
- "triggerPopFootNotes": "VWh0dG_triggerPopFootNotes",
239
- "chartEmpty": "VWh0dG_chartEmpty",
240
- "roundsBarColPeak": "VWh0dG_roundsBarColPeak",
241
- "triggerRow": "VWh0dG_triggerRow",
242
- "roundsBarColOff": "VWh0dG_roundsBarColOff",
243
- "peakAlertClose": "VWh0dG_peakAlertClose",
244
- "dashboardModal": "VWh0dG_dashboardModal",
116
+ "bucketSummary": "VWh0dG_bucketSummary",
117
+ "shareTrack": "VWh0dG_shareTrack",
118
+ "triggerPopBar": "VWh0dG_triggerPopBar",
119
+ "numCol": "VWh0dG_numCol",
120
+ "tabButtonActive": "VWh0dG_tabButtonActive",
121
+ "siteKindDirect": "VWh0dG_siteKindDirect",
122
+ "heatmapFooter": "VWh0dG_heatmapFooter",
123
+ "pricingToggle": "VWh0dG_pricingToggle",
124
+ "rangeToggle": "VWh0dG_rangeToggle",
245
125
  "triggerWrap": "VWh0dG_triggerWrap",
246
- "heatmapHover": "VWh0dG_heatmapHover",
247
- "providerGroupTitle": "VWh0dG_providerGroupTitle",
248
- "na": "VWh0dG_na",
249
- "roundsBarFlagged": "VWh0dG_roundsBarFlagged",
250
- "roundsAxis": "VWh0dG_roundsAxis",
251
- "dashboardTitle": "VWh0dG_dashboardTitle",
252
- "chartLine": "VWh0dG_chartLine",
253
- "triggerPop": "VWh0dG_triggerPop",
254
- "chartBar": "VWh0dG_chartBar",
255
- "liveTierPeak": "VWh0dG_liveTierPeak",
126
+ "siteKindUnknown": "VWh0dG_siteKindUnknown",
127
+ "chartAxisLabel": "VWh0dG_chartAxisLabel",
256
128
  "tokenModelBar": "VWh0dG_tokenModelBar",
129
+ "heatmapYearScroll": "VWh0dG_heatmapYearScroll",
257
130
  "bandPriceOff": "VWh0dG_bandPriceOff",
258
- "healthBadge": "VWh0dG_healthBadge",
259
- "triggerPopBar": "VWh0dG_triggerPopBar",
131
+ "tokenPanel": "VWh0dG_tokenPanel",
132
+ "exportButton": "VWh0dG_exportButton",
133
+ "dashboardIn": "VWh0dG_dashboardIn",
134
+ "chartEmpty": "VWh0dG_chartEmpty",
135
+ "balanceDaysLow": "VWh0dG_balanceDaysLow",
136
+ "balanceDetailPop": "VWh0dG_balanceDetailPop",
137
+ "peakAlertField": "VWh0dG_peakAlertField",
138
+ "peakAlertHint": "VWh0dG_peakAlertHint",
139
+ "peakAlert": "VWh0dG_peakAlert",
140
+ "peakAlertCheck": "VWh0dG_peakAlertCheck",
141
+ "roundsBar": "VWh0dG_roundsBar",
142
+ "roundsBarColOff": "VWh0dG_roundsBarColOff",
143
+ "providerGroupName": "VWh0dG_providerGroupName",
144
+ "heroValue": "VWh0dG_heroValue",
145
+ "shareValue": "VWh0dG_shareValue",
146
+ "chartLegend": "VWh0dG_chartLegend",
147
+ "subscriptionTrack": "VWh0dG_subscriptionTrack",
148
+ "budgetFillOver": "VWh0dG_budgetFillOver",
260
149
  "settingsHead": "VWh0dG_settingsHead",
261
- "heroReadout": "VWh0dG_heroReadout",
262
- "budgetInput": "VWh0dG_budgetInput",
263
- "pricingTip": "VWh0dG_pricingTip",
264
- "triggerPopMetricValue": "VWh0dG_triggerPopMetricValue",
265
- "peakAlertSelect": "VWh0dG_peakAlertSelect",
266
- "peakAlertTag": "VWh0dG_peakAlertTag",
150
+ "panel": "VWh0dG_panel",
151
+ "heroSideItem": "VWh0dG_heroSideItem",
152
+ "triggerPopTitleMonth": "VWh0dG_triggerPopTitleMonth",
153
+ "deltaDown": "VWh0dG_deltaDown",
154
+ "rateBadge": "VWh0dG_rateBadge",
155
+ "subscriptionFill": "VWh0dG_subscriptionFill",
156
+ "heroGauge": "VWh0dG_heroGauge",
267
157
  "railButton": "VWh0dG_railButton",
268
- "numCol": "VWh0dG_numCol",
269
- "siteKindTag": "VWh0dG_siteKindTag",
158
+ "triggerRow": "VWh0dG_triggerRow",
159
+ "triggerPopStrong": "VWh0dG_triggerPopStrong",
160
+ "budgetHead": "VWh0dG_budgetHead",
161
+ "triggerPopBadgeDirect": "VWh0dG_triggerPopBadgeDirect",
270
162
  "peakAlertText": "VWh0dG_peakAlertText",
271
- "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
272
- "bucketStat": "VWh0dG_bucketStat",
273
163
  "heroSideLabel": "VWh0dG_heroSideLabel",
274
- "settingsTitle": "VWh0dG_settingsTitle",
275
- "trigger": "VWh0dG_trigger",
276
- "switchKnob": "VWh0dG_switchKnob",
277
- "healthBadgeBad": "VWh0dG_healthBadgeBad",
278
- "modelProvider": "VWh0dG_modelProvider",
279
- "heroGaugeCenter": "VWh0dG_heroGaugeCenter",
280
- "liveQuotaCrit": "VWh0dG_liveQuotaCrit",
281
- "siteKindUnknown": "VWh0dG_siteKindUnknown",
282
- "providerGroupBalance": "VWh0dG_providerGroupBalance",
164
+ "balanceDaysBadge": "VWh0dG_balanceDaysBadge",
165
+ "roundsFlagBadge": "VWh0dG_roundsFlagBadge",
283
166
  "heroMain": "VWh0dG_heroMain",
284
- "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
285
- "balanceDetailGrid": "VWh0dG_balanceDetailGrid",
286
- "shareLegend": "VWh0dG_shareLegend",
287
- "bucketStatLabel": "VWh0dG_bucketStatLabel",
288
- "tokenModelParts": "VWh0dG_tokenModelParts",
289
- "kpiValue": "VWh0dG_kpiValue",
167
+ "liveTierPeak": "VWh0dG_liveTierPeak",
168
+ "providerGroupBalanceLabel": "VWh0dG_providerGroupBalanceLabel",
169
+ "balanceDetailTitle": "VWh0dG_balanceDetailTitle",
170
+ "switch": "VWh0dG_switch",
290
171
  "siteKindSite": "VWh0dG_siteKindSite",
291
- "kpiLabel": "VWh0dG_kpiLabel",
292
- "panel": "VWh0dG_panel",
293
172
  "balanceDaysBadgeLow": "VWh0dG_balanceDaysBadgeLow",
294
- "heatmap": "VWh0dG_heatmap",
295
- "shareSegAssistant": "VWh0dG_shareSegAssistant",
173
+ "siteRowMeta": "VWh0dG_siteRowMeta",
174
+ "triggerPopMetricValue": "VWh0dG_triggerPopMetricValue",
175
+ "trigger": "VWh0dG_trigger",
176
+ "siteRowCost": "VWh0dG_siteRowCost",
177
+ "healthBad": "VWh0dG_healthBad",
178
+ "siteRowName": "VWh0dG_siteRowName",
179
+ "healthBadge": "VWh0dG_healthBadge",
180
+ "chartLine": "VWh0dG_chartLine",
181
+ "triggerPopRow": "VWh0dG_triggerPopRow",
182
+ "balanceDetailHead": "VWh0dG_balanceDetailHead",
183
+ "triggerSpark": "VWh0dG_triggerSpark",
184
+ "budget": "VWh0dG_budget",
185
+ "emptyRow": "VWh0dG_emptyRow",
186
+ "roundsBarCol": "VWh0dG_roundsBarCol",
187
+ "triggerAmount": "VWh0dG_triggerAmount",
188
+ "panelHint": "VWh0dG_panelHint",
189
+ "triggerPopName": "VWh0dG_triggerPopName",
190
+ "dashboard": "VWh0dG_dashboard",
191
+ "bucketStat": "VWh0dG_bucketStat",
192
+ "costCol": "VWh0dG_costCol",
193
+ "triggerPopTitle": "VWh0dG_triggerPopTitle",
194
+ "tabPanelIn": "VWh0dG_tabPanelIn",
195
+ "healthBadgeBad": "VWh0dG_healthBadgeBad",
296
196
  "currencyToggle": "VWh0dG_currencyToggle",
297
- "peakAlertPeak": "VWh0dG_peakAlertPeak",
298
- "bucketSummary": "VWh0dG_bucketSummary",
197
+ "bucketSep": "VWh0dG_bucketSep",
198
+ "providerGroupTitle": "VWh0dG_providerGroupTitle",
199
+ "subscriptionPct": "VWh0dG_subscriptionPct",
299
200
  "liveCostBar": "VWh0dG_liveCostBar",
300
- "heatmapGrid": "VWh0dG_heatmapGrid",
301
- "heatmapLegend": "VWh0dG_heatmapLegend",
302
- "triggerPopMetrics": "VWh0dG_triggerPopMetrics",
303
- "heroLabel": "VWh0dG_heroLabel",
201
+ "triggerPopBars": "VWh0dG_triggerPopBars",
202
+ "shareItem": "VWh0dG_shareItem",
203
+ "triggerPopValueStack": "VWh0dG_triggerPopValueStack",
204
+ "tokenModelParts": "VWh0dG_tokenModelParts",
205
+ "heroGaugeArcOver": "VWh0dG_heroGaugeArcOver",
206
+ "triggerSparkHot": "VWh0dG_triggerSparkHot",
207
+ "chartTooltipDate": "VWh0dG_chartTooltipDate",
208
+ "pricingToggleText": "VWh0dG_pricingToggleText",
209
+ "switchOn": "VWh0dG_switchOn",
210
+ "pricingChevronOpen": "VWh0dG_pricingChevronOpen",
211
+ "exportBar": "VWh0dG_exportBar",
212
+ "triggerPopMetricLabel": "VWh0dG_triggerPopMetricLabel",
213
+ "bucketThird": "VWh0dG_bucketThird",
214
+ "chartBar": "VWh0dG_chartBar",
215
+ "triggerPopFootNotes": "VWh0dG_triggerPopFootNotes",
216
+ "chartGrid": "VWh0dG_chartGrid",
217
+ "dashboardTitle": "VWh0dG_dashboardTitle",
218
+ "kpiGreen": "VWh0dG_kpiGreen",
219
+ "modelTableScroll": "VWh0dG_modelTableScroll",
220
+ "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
221
+ "shareLegend": "VWh0dG_shareLegend",
222
+ "triggerPopHead": "VWh0dG_triggerPopHead",
223
+ "triggerPopFootTitle": "VWh0dG_triggerPopFootTitle",
224
+ "heroReadout": "VWh0dG_heroReadout",
225
+ "budgetInputWrap": "VWh0dG_budgetInputWrap",
226
+ "triggerPopFootStrong": "VWh0dG_triggerPopFootStrong",
227
+ "subscriptionStatus": "VWh0dG_subscriptionStatus",
228
+ "balanceDetailGrid": "VWh0dG_balanceDetailGrid",
229
+ "chartSvg": "VWh0dG_chartSvg",
230
+ "heroMeta": "VWh0dG_heroMeta",
231
+ "heroGaugeLabel": "VWh0dG_heroGaugeLabel",
232
+ "siteRowTitle": "VWh0dG_siteRowTitle",
233
+ "balanceDetailLabel": "VWh0dG_balanceDetailLabel",
304
234
  "subscriptionMeta": "VWh0dG_subscriptionMeta",
305
- "heroSideValue": "VWh0dG_heroSideValue",
306
- "planTag": "VWh0dG_planTag",
307
- "balanceDaysBadge": "VWh0dG_balanceDaysBadge",
308
- "triggerPopName": "VWh0dG_triggerPopName",
235
+ "budgetValue": "VWh0dG_budgetValue",
236
+ "triggerPopAlert": "VWh0dG_triggerPopAlert",
237
+ "shareSegAssistant": "VWh0dG_shareSegAssistant",
238
+ "triggerPopFoot": "VWh0dG_triggerPopFoot",
239
+ "modelName": "VWh0dG_modelName",
240
+ "siteRowCalls": "VWh0dG_siteRowCalls",
241
+ "triggerPopBadgeSub": "VWh0dG_triggerPopBadgeSub",
242
+ "budgetFill": "VWh0dG_budgetFill",
243
+ "heroSide": "VWh0dG_heroSide",
244
+ "liveQuotaWarn": "VWh0dG_liveQuotaWarn",
245
+ "settingsHint": "VWh0dG_settingsHint",
246
+ "settingsTitle": "VWh0dG_settingsTitle",
247
+ "subscriptionGrid": "VWh0dG_subscriptionGrid",
248
+ "dashboardSubtitle": "VWh0dG_dashboardSubtitle",
249
+ "liveCostItem": "VWh0dG_liveCostItem",
250
+ "triggerPopValue": "VWh0dG_triggerPopValue",
251
+ "pluginInfoRow": "VWh0dG_pluginInfoRow",
252
+ "exportLabel": "VWh0dG_exportLabel",
253
+ "dashboardBody": "VWh0dG_dashboardBody",
254
+ "pricingChevron": "VWh0dG_pricingChevron",
255
+ "deltaUp": "VWh0dG_deltaUp",
256
+ "peakAlertCountdown": "VWh0dG_peakAlertCountdown",
257
+ "triggerBody": "VWh0dG_triggerBody",
258
+ "roundsBarColPeak": "VWh0dG_roundsBarColPeak",
259
+ "roundsBars": "VWh0dG_roundsBars",
260
+ "heroCurrency": "VWh0dG_heroCurrency",
261
+ "roundsBarWrap": "VWh0dG_roundsBarWrap",
262
+ "dashboardRight": "VWh0dG_dashboardRight",
263
+ "tabNav": "VWh0dG_tabNav",
264
+ "budgetLabel": "VWh0dG_budgetLabel",
265
+ "shareSegOff": "VWh0dG_shareSegOff",
266
+ "estimatedTag": "VWh0dG_estimatedTag",
267
+ "heroGaugeSvg": "VWh0dG_heroGaugeSvg",
268
+ "subscriptionFillOver": "VWh0dG_subscriptionFillOver",
269
+ "heatmap": "VWh0dG_heatmap",
270
+ "panelHead": "VWh0dG_panelHead",
271
+ "providerGroup": "VWh0dG_providerGroup",
272
+ "budgetFillWarn": "VWh0dG_budgetFillWarn",
273
+ "peakAlertPanelHead": "VWh0dG_peakAlertPanelHead",
274
+ "budgetTrack": "VWh0dG_budgetTrack",
275
+ "peakAlertIn": "VWh0dG_peakAlertIn",
276
+ "budgetUnit": "VWh0dG_budgetUnit",
277
+ "roundsFlagMark": "VWh0dG_roundsFlagMark",
278
+ "shareSegTool": "VWh0dG_shareSegTool",
279
+ "balanceDays": "VWh0dG_balanceDays",
280
+ "budgetOverPulse": "VWh0dG_budgetOverPulse",
281
+ "triggerPopFootStatus": "VWh0dG_triggerPopFootStatus",
282
+ "kpiTile": "VWh0dG_kpiTile",
283
+ "balanceDetailClose": "VWh0dG_balanceDetailClose",
284
+ "heatmapHover": "VWh0dG_heatmapHover",
285
+ "budgetControls": "VWh0dG_budgetControls",
286
+ "peakAlertCenter": "VWh0dG_peakAlertCenter",
287
+ "peakAlertPreview": "VWh0dG_peakAlertPreview",
288
+ "triggerIcon": "VWh0dG_triggerIcon",
289
+ "rangeButton": "VWh0dG_rangeButton",
290
+ "chartTooltipRow": "VWh0dG_chartTooltipRow",
291
+ "triggerMeta": "VWh0dG_triggerMeta",
292
+ "triggerPopFootStatusLow": "VWh0dG_triggerPopFootStatusLow",
293
+ "budgetInput": "VWh0dG_budgetInput",
294
+ "providerGroupBadge": "VWh0dG_providerGroupBadge",
295
+ "triggerPopOpenBtn": "VWh0dG_triggerPopOpenBtn",
296
+ "subscriptionReset": "VWh0dG_subscriptionReset",
297
+ "peakAlertCorner": "VWh0dG_peakAlertCorner",
298
+ "siteKindTag": "VWh0dG_siteKindTag",
299
+ "pricingTip": "VWh0dG_pricingTip",
300
+ "chartTooltip": "VWh0dG_chartTooltip",
301
+ "triggerPopMetricHighlight": "VWh0dG_triggerPopMetricHighlight",
309
302
  "peakAlertNum": "VWh0dG_peakAlertNum",
310
- "budget": "VWh0dG_budget",
311
- "heatmapYearCell": "VWh0dG_heatmapYearCell",
312
- "panelTitle": "VWh0dG_panelTitle",
313
- "budgetHead": "VWh0dG_budgetHead",
314
- "hero": "VWh0dG_hero",
315
- "deltaDown": "VWh0dG_deltaDown",
316
- "balanceDetailTitle": "VWh0dG_balanceDetailTitle",
317
- "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
318
- "liveCostSep": "VWh0dG_liveCostSep",
319
- "peakAlertOff": "VWh0dG_peakAlertOff",
320
- "liveTierOff": "VWh0dG_liveTierOff",
321
- "peakAlertCheck": "VWh0dG_peakAlertCheck",
322
- "shareSeg": "VWh0dG_shareSeg",
323
- "tokenPanel": "VWh0dG_tokenPanel",
324
- "chartCrosshair": "VWh0dG_chartCrosshair",
325
- "triggerSparkHot": "VWh0dG_triggerSparkHot",
303
+ "dashboardModal": "VWh0dG_dashboardModal",
304
+ "uncataloguedTag": "VWh0dG_uncataloguedTag",
326
305
  "shareDot": "VWh0dG_shareDot",
327
- "delta": "VWh0dG_delta",
306
+ "bandPrice": "VWh0dG_bandPrice",
328
307
  "healthBadgeOk": "VWh0dG_healthBadgeOk",
329
- "heroCurrency": "VWh0dG_heroCurrency",
330
- "modelName": "VWh0dG_modelName",
331
- "heroGaugePctOver": "VWh0dG_heroGaugePctOver",
332
- "siteRow": "VWh0dG_siteRow",
333
- "roundsBar": "VWh0dG_roundsBar",
334
- "roundsBarCol": "VWh0dG_roundsBarCol",
335
- "heroSideSpacer": "VWh0dG_heroSideSpacer",
336
- "shareSegTool": "VWh0dG_shareSegTool",
337
- "heroGaugeTrack": "VWh0dG_heroGaugeTrack",
338
- "triggerPopBadge": "VWh0dG_triggerPopBadge",
339
- "subscriptionTier": "VWh0dG_subscriptionTier",
340
- "subscriptionWindow": "VWh0dG_subscriptionWindow",
341
- "modelTableScroll": "VWh0dG_modelTableScroll",
342
- "budgetFillOver": "VWh0dG_budgetFillOver",
343
- "pricingChevron": "VWh0dG_pricingChevron",
344
- "triggerPopMetric": "VWh0dG_triggerPopMetric"
308
+ "heatmapCell": "VWh0dG_heatmapCell",
309
+ "bucketStatLabel": "VWh0dG_bucketStatLabel",
310
+ "delta": "VWh0dG_delta",
311
+ "switchKnob": "VWh0dG_switchKnob",
312
+ "providerGroupList": "VWh0dG_providerGroupList",
313
+ "peakAlertSelect": "VWh0dG_peakAlertSelect",
314
+ "heatmapCellEmpty": "VWh0dG_heatmapCellEmpty",
315
+ "healthOk": "VWh0dG_healthOk",
316
+ "kpiGrid": "VWh0dG_kpiGrid",
317
+ "heroTop": "VWh0dG_heroTop",
318
+ "rateBadgeBuiltin": "VWh0dG_rateBadgeBuiltin",
319
+ "rounds": "VWh0dG_rounds",
320
+ "peakAlertPanelLabel": "VWh0dG_peakAlertPanelLabel",
321
+ "liveCostSep": "VWh0dG_liveCostSep",
322
+ "tableScroll": "VWh0dG_tableScroll",
323
+ "tabPanel": "VWh0dG_tabPanel",
324
+ "chartDot": "VWh0dG_chartDot",
325
+ "healthDot": "VWh0dG_healthDot",
326
+ "pluginInfoLink": "VWh0dG_pluginInfoLink",
327
+ "triggerPopUpdated": "VWh0dG_triggerPopUpdated",
328
+ "rangeButtonActive": "VWh0dG_rangeButtonActive",
329
+ "chartLegendBar": "VWh0dG_chartLegendBar",
330
+ "currencyButton": "VWh0dG_currencyButton",
331
+ "balanceDetailRow": "VWh0dG_balanceDetailRow",
332
+ "budgetHint": "VWh0dG_budgetHint",
333
+ "triggerPopMetric": "VWh0dG_triggerPopMetric",
334
+ "peakAlertTag": "VWh0dG_peakAlertTag",
335
+ "heroGaugeArc": "VWh0dG_heroGaugeArc",
336
+ "chartTooltipSwatch": "VWh0dG_chartTooltipSwatch",
337
+ "bucketOfficial": "VWh0dG_bucketOfficial",
338
+ "na": "VWh0dG_na",
339
+ "kpiDetail": "VWh0dG_kpiDetail",
340
+ "tokenModelPartOut": "VWh0dG_tokenModelPartOut",
341
+ "peakAlertPanelBody": "VWh0dG_peakAlertPanelBody",
342
+ "balanceDetailValue": "VWh0dG_balanceDetailValue",
343
+ "trendPanel": "VWh0dG_trendPanel",
344
+ "pluginInfo": "VWh0dG_pluginInfo"
345
345
  };
346
346
  //#endregion
347
347
  //#region src/client/plan-knowledge.ts
@@ -390,7 +390,8 @@ window.__ModuleLoader__.load({
390
390
  "ark-token-plan": { type: "code" },
391
391
  "doubao-token-plan": { type: "code" },
392
392
  "minimax": { type: "code" },
393
- "minimax-token-plan": { type: "code" }
393
+ "minimax-token-plan": { type: "code" },
394
+ "minimax-token-plan-cn": { type: "code" }
394
395
  };
395
396
  /**
396
397
  * 订阅/plan provider id 变体 → PLAN_KNOWLEDGE 规范键(引用 dsh-spend 的别名归一化)。
@@ -3452,7 +3453,8 @@ window.__ModuleLoader__.load({
3452
3453
  "火山引擎 Token Plan": "Volcengine Token Plan",
3453
3454
  "火山方舟 Token Plan": "Volcengine Ark Token Plan",
3454
3455
  "豆包 Token Plan": "Doubao Token Plan",
3455
- "百度文心 Plan": "Baidu ERNIE Plan"
3456
+ "百度文心 Plan": "Baidu ERNIE Plan",
3457
+ "MiniMax Token Plan(国内)": "MiniMax Token Plan (CN)"
3456
3458
  };
3457
3459
  /**
3458
3460
  * 把厂商显示名按界面语言本地化:中文名映射成英文,其余(已是英文 / 未收录 /
@@ -3765,6 +3767,8 @@ window.__ModuleLoader__.load({
3765
3767
  "baidu": "百度文心",
3766
3768
  "wenxin": "百度文心",
3767
3769
  "minimax": "MiniMax",
3770
+ "minimax-token-plan": "MiniMax",
3771
+ "minimax-token-plan-cn": "MiniMax",
3768
3772
  "opencode": "OpenCode",
3769
3773
  "opencode-go": "OpenCode"
3770
3774
  };
package/lib/index.js CHANGED
@@ -68,7 +68,8 @@ const PLAN_KNOWLEDGE = {
68
68
  "ark-token-plan": { type: "code" },
69
69
  "doubao-token-plan": { type: "code" },
70
70
  "minimax": { type: "code" },
71
- "minimax-token-plan": { type: "code" }
71
+ "minimax-token-plan": { type: "code" },
72
+ "minimax-token-plan-cn": { type: "code" }
72
73
  };
73
74
  /**
74
75
  * 订阅/plan provider id 变体 → PLAN_KNOWLEDGE 规范键(引用 dsh-spend 的别名归一化)。
@@ -2370,10 +2371,11 @@ const SUBSCRIPTION_DISPLAY_NAMES = {
2370
2371
  "wenxin": "百度文心 Plan",
2371
2372
  "minimax": "MiniMax Coding Plan",
2372
2373
  "minimax-token-plan": "MiniMax Token Plan",
2374
+ "minimax-token-plan-cn": "MiniMax Token Plan(国内)",
2373
2375
  "openrouter": "OpenRouter"
2374
2376
  };
2375
2377
  /** 订阅类 provider id 判定:带 coding / agent-plan / token-plan 后缀,或已知订阅通道。 */
2376
- const SUBSCRIPTION_ID_RE = /* @__PURE__ */ new RegExp("(?:^|-)(?:coding|agent[-_]?plan|token[-_]?plan)(?:$|-|_)|^(?:opencode|opencode-go|kimi-coding|zai-coding|minimax|minimax-token-plan|openrouter)", "i");
2378
+ const SUBSCRIPTION_ID_RE = /* @__PURE__ */ new RegExp("(?:^|-)(?:coding|agent[-_]?plan|token[-_]?plan)(?:$|-|_)|^(?:opencode|opencode-go|kimi-coding|zai-coding|minimax|minimax-token-plan|minimax-token-plan-cn|openrouter)", "i");
2377
2379
  /** 是否是订阅类 provider id(如 kimi-coding、xiaomi-token-plan-cn)。 */
2378
2380
  function isSubscriptionProviderId(providerId) {
2379
2381
  if (SUBSCRIPTION_ID_RE.test(providerId)) return true;
@@ -2387,6 +2389,7 @@ const SUBSCRIPTION_ADAPTERS = {
2387
2389
  "opencode-go": { collect: collectOpenCodeGo },
2388
2390
  "minimax": { collect: collectMiniMax },
2389
2391
  "minimax-token-plan": { collect: collectMiniMax },
2392
+ "minimax-token-plan-cn": { collect: collectMiniMax },
2390
2393
  "openrouter": { collect: collectOpenRouter }
2391
2394
  };
2392
2395
  /** 有额度适配器的 provider id 集合(识别用)。 */
@@ -2759,13 +2762,29 @@ function parseMiniMaxRemains(body) {
2759
2762
  }) ?? rows[0] ?? void 0;
2760
2763
  return [minmaxWindow(record, "session", "current_interval_remaining_percent", "current_interval_status", "end_time"), minmaxWindow(record, "weekly", "current_weekly_remaining_percent", "current_weekly_status", "weekly_end_time")].filter((hit) => hit !== null);
2761
2764
  }
2762
- /** Collect the MiniMax Token Plan quota. */
2765
+ /**
2766
+ * Resolve the MiniMax API host based on the configured provider id.
2767
+ *
2768
+ * 国内开发者走 MiniMax(`api.minimaxi.com`),海外走 MiniMax(`minimaxi.com`)。
2769
+ * User-explicit `config.baseUrl` wins when set, so deployments in either
2770
+ * region can still override the auto-pick (e.g. proxies / staging).
2771
+ */
2772
+ function resolveMiniMaxBaseUrl(config) {
2773
+ if (typeof config.baseUrl === "string" && config.baseUrl.trim() !== "") return config.baseUrl;
2774
+ return config.provider === "minimax-token-plan-cn" ? "https://api.minimaxi.com" : "https://www.minimaxi.com";
2775
+ }
2776
+ /** Display name for a MiniMax quota row, aligned with the display-name map. */
2777
+ function minmaxDisplayName(provider) {
2778
+ return SUBSCRIPTION_DISPLAY_NAMES[provider] ?? "MiniMax Coding Plan";
2779
+ }
2780
+ /** Collect the MiniMax Token Plan quota (CN + INTL). */
2763
2781
  async function collectMiniMax(keys, config, timeoutMs) {
2764
2782
  const apiKey = keys.minmaxApiKey.trim();
2765
- const base = config.baseUrl ?? "https://www.minimaxi.com";
2783
+ const base = resolveMiniMaxBaseUrl(config);
2784
+ const displayName = minmaxDisplayName(config.provider);
2766
2785
  if (apiKey === "") return {
2767
2786
  provider: config.provider,
2768
- displayName: "MiniMax Coding Plan",
2787
+ displayName,
2769
2788
  status: "not-configured",
2770
2789
  windows: []
2771
2790
  };
@@ -2776,14 +2795,14 @@ async function collectMiniMax(keys, config, timeoutMs) {
2776
2795
  } }, timeoutMs));
2777
2796
  return {
2778
2797
  provider: config.provider,
2779
- displayName: "MiniMax Coding Plan",
2798
+ displayName,
2780
2799
  status: windows.length > 0 ? "ok" : "invalid-response",
2781
2800
  windows
2782
2801
  };
2783
2802
  } catch (error) {
2784
2803
  return {
2785
2804
  provider: config.provider,
2786
- displayName: "MiniMax Coding Plan",
2805
+ displayName,
2787
2806
  status: statusOf$1(error),
2788
2807
  windows: []
2789
2808
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kenz1117/dsh-ui-usage-billing",
3
3
  "description": "Usage billing dashboard for DeepSeek Harness: sidebar cost metrics plus a full dashboard modal, priced from a current multi-provider catalog with real usage aggregated from session logs.",
4
- "version": "0.9.8",
4
+ "version": "0.9.9",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },