MiniMax token-plan quota dock for the Web UI: a drop-shape 5h-usage % chip in the conversation input area, click for a detail panel listing every model's 5h & weekly usage and reset countdown, auto-hidden when the active default model is not a MiniMax model.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:mtty-ai/mmx-quota-tool
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
MiniMax token-plan quota dock for DeepSeek Harness (DSH) web.
Shows a drop-shape icon + 5h usage % in the conversation input area (next to the model selector). Click for a detail panel listing every model's 5h & weekly usage, reset countdown, and absolute numbers. Auto-hides when the active default model is not a MiniMax model.
Install
dsh plugin --profile web add github:mtty-ai/mmx-quota-tool
Then restart dsh web once.
Manual install (development)
git clone https://github.com/mtty-ai/mmx-quota-tool
cd mmx-quota-tool
# copy or link the package into your profile's node_modules
cp -R . ~/.dsh/profiles/web/node_modules/mmx-quota-tool/
Then add the row to ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: mmx-quota-tool
name: mmx-quota-tool
Configuration
This plugin requires a MiniMax API key. Export it before launching dsh web:
export MMX_API_KEY='sk-cp-your-key-here'
dsh web
Or put it in your shell rc (~/.zshrc, ~/.bashrc).
Optional environment variables:
| Var | Default | Purpose |
|---|---|---|
MMX_API_KEY |
(required) | MiniMax Bearer + x-api-key |
MMX_REGION |
cn |
cn (api.minimaxi.com) or global (api.minimax.io) |
MMX_REFRESH_MS |
60000 |
Host poll interval against upstream |
MMX_POLL_INTERVAL_MS |
5000 |
(client bundle) Client fetch interval |
The client bundle polls the host every 5 s so model-switch visibility is
within 5 s; the actual upstream fetch runs every MMX_REFRESH_MS.
Behavior
- The dock appears in the conversation input area (
conversation.input.left), adjacent to the model selector. - Icon is a drop/water shape, filled by 5h usage % (lower bar = better):
< 50%green< 80%yellow≥ 80%red
- Click toggles a detail panel; mouse-leave the dock or panel closes it.
- Shift+click forces an immediate upstream refresh.
- The dock is hidden entirely when the active default model is not a MiniMax
model — matched providers
minimax / minimax-cn / minimax-global / MiniMax*or model prefixesMiniMax- / minimax-. - Model name labels follow the active DSH UI locale:
- zh: 通用 / 视频 / 图像 / 音频 / 语音 / 音乐 / 视觉 / 向量 / 实时 / 长文本
- en: General / Video / Image / Audio / Speech / Music / Vision / Embedding / Realtime / Long context
- The dock label, panel header / headline / footer hint all switch language when the user changes DSH's interface language.
- The default is
zh(Chinese) — the language the upstream token-plan model names resolve to most naturally. If the locale service is unavailable the dock still renders.
Architecture
| Half | File | Responsibility |
|---|---|---|
| Host | src/index.js |
60 s upstream poll + exposes two HTTP routes |
| Client | client/client.js |
5 s poll + mounts the dock UI in conversation.input.left |
The host registers two routes on the profile's webServer:
GET /api/mmx-quota-tool/quota— current snapshotPOST /api/mmx-quota-tool/refresh— force refresh
Returns { rows, lastFetchedAt, lastError, lastStatus, model, isMmx, refreshIntervalMs }.
The client polls quota and renders null when isMmx === false, so
switching to a non-MiniMax model hides the dock within 5 s.
Files
.
├── README.md
├── LICENSE
├── package.json # dsh.bundle + dsh.client declaration + exports
├── cordis.patch.yml # dsh bundle patch (registers the row)
├── src/index.js # host: HTTP routes + 60s upstream poll
└── client/client.js # browser: 5s poll + React UI + injected <style>
License
MIT
Links
More in this category
bowenliang123/dsh-context★ 1573
DSH context insight panel: Context dashboard + /context command + Context browser — one-stop context lifecycle management with categorized composition, content details, evolution trends, compaction/injection events, and stats.
Han-1413141/dsh-cost-meter★ 349
Per-session and daily API cost, budget with usage %, official balance, history dashboard, and one-click official price sync with peak/off-peak pricing.
wssfk12138/dsh-damage-pulse★ 224
Tracks DeepSeek token usage, per-call and session costs, and account balance with cache-aware charge animations in the DSH Web UI.
zh667/TokenLedger★ 202
Sidebar usage panel that attributes tokens to the relay site that served each request, read from your existing provider config: today/month/all-time totals, per-site and per-model breakdowns, a year activity heatmap, and New API / Sub2API / DeepSeek balances.
Ychris12138/dsh-usage-stats★ 169
Multi-provider usage dashboard with provider/model token breakdowns, calendar drill-downs, account balances, and OpenCode Go / Z.ai subscription quota tracking.
PolinniZhong/dsh-personal-center★ 120
Personal center for DeepSeek Harness: cross-session usage statistics, per-model cost estimation, global custom instructions, a global font-size adjuster, a data-driven desktop pet with bitmap & vector skins, and a conversation status overview, all local and offline.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.