minimax-status 1.2.0 → 1.2.1

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
@@ -11,9 +11,8 @@ MiniMax Token-Plan 使用状态监控工具,支持 CLI 命令和 Claude Code
11
11
 
12
12
  | 插件 | 版本 | 安装方式 |
13
13
  |------|------|----------|
14
- | **CLI** | 1.1.11 | `npm install -g minimax-status` |
15
- | **VSCode** | 1.2.7 | [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=JochenYang.minimax-status-vscode) 或 [下载 VSIX](https://github.com/JochenYang/minimax-status/releases) |
16
- | **OpenClaw** | - | 参考 `openclaw/minimax-usage/` 目录 |
14
+ | **CLI** | 1.2.0 | `npm install -g minimax-status` |
15
+ | **VSCode** | 1.3.2 | [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=JochenYang.minimax-status-vscode) 或 [下载 VSIX](https://github.com/JochenYang/minimax-status/releases) |
17
16
 
18
17
  ## 特性
19
18
 
@@ -134,14 +133,14 @@ npm run package
134
133
  集成成功后,底部状态栏将显示:
135
134
 
136
135
  ```
137
- my-app ❯ main * ❯ MiniMax-M260% (2700/4500) ❯ 1h20m ❯ 剩5
136
+ climain * ❯ MiniMax-M*205K ❯ 0% (4500/4500) · W ∞ 4h59m ❯ 剩336
138
137
  ```
139
138
 
140
- 显示格式:`目录 ❯ 分支 ❯ 模型 ❯ 百分比(剩余/总数) ❯ 倒计时 ❯ 到期天数`
139
+ 显示格式:`目录 ❯ 分支 ❯ 模型 ❯ 上下文 ❯ 百分比(已用/总量) · 周限额 ❯ 倒计时 ❯ 到期天数`
141
140
 
142
141
  **颜色说明**:
143
142
 
144
- - **上下文使用量**: ≥85%红色 | 60-85%黄色 | <60%绿色
143
+ - **使用量**: ≥85%红色 | 60-85%黄色 | <60%绿色
145
144
  - **到期时间**: ≤3天红色 | ≤7天黄色 | >7天绿色
146
145
 
147
146
  ### Git 分支显示说明
@@ -219,10 +218,10 @@ my-app │ main * │ ...
219
218
  集成成功后,底部状态栏将显示:
220
219
 
221
220
  ```
222
- minimax-status ❯ main * ❯ 10% (4047/4500) ❯ 12m ❯ 剩21
221
+ climain * ❯ MiniMax-M* ❯ 205K ❯ 0% (4500/4500) · W ∞ 4h59m ❯ 剩336
223
222
  ```
224
223
 
225
- 显示格式:`目录 ❯ 分支 ❯ 百分比(剩余/总数) ❯ 倒计时 ❯ 到期天数`
224
+ 显示格式:`目录 ❯ 分支 ❯ 模型 ❯ 上下文 ❯ 百分比(已用/总量) · 周限额 ❯ 倒计时 ❯ 到期天数`
226
225
 
227
226
  **颜色说明**:
228
227
 
@@ -234,30 +233,38 @@ minimax-status ❯ main * ❯ 10% (4047/4500) ❯ 12m ❯ 剩21天
234
233
  ### 详细模式
235
234
 
236
235
  ```
237
- ┌─────────────────────────────────────────────────────────────┐
236
+ ┌──────────────────────────────────────────────────────┐
238
237
  │ MiniMax Claude Code 使用状态 │
239
-
240
- │ 当前模型: MiniMax-M2
241
- │ 时间窗口: 20:00-00:00(UTC+8)
242
- │ 剩余时间: 1 小时 42 分钟后重置
243
-
244
- │ 已用额度: █████░░░░░░░░░░░░░░░░░░░░░░░ 6%
245
- │ 剩余: 4234/4500 次调用
246
- 套餐到期: 02/26/2026(还剩 6 天)
247
-
248
- Token 消耗统计:
249
- 昨日消耗: 4996.4万
250
- 近7天消耗: 2.8亿
251
- 套餐总消耗: 14.7亿
252
-
238
+
239
+ │ 当前模型: MiniMax-M*
240
+ │ 时间窗口: 05:00-10:00(UTC+8)
241
+ │ 剩余时间: 6 分钟后重置
242
+
243
+ │ 已用额度: █░░░░░░░░░░░░░░░░░░░░░░░░░░ 7%
244
+ │ 剩余: 4172/4500 次调用
245
+
246
+ 周限额: 不受限制
247
+ 套餐到期: 03/19/2027 (还剩 336 天)
248
+
249
+ 📊 Token 消耗统计
250
+ 昨日消耗: 5380.6万
251
+ 近7天消耗: 4.8亿
252
+ │ 当月消耗: 15亿 │
253
+ │ │
254
+ │ 📋 所有模型额度 │
255
+ │ MiniMax-M* 7% 328/4500 ✓ │
256
+ │ speech-hd 0% 0/19000 ✓ │
257
+ │ Hailuo 0% 0/3 ✓ │
258
+ │ ... │
259
+ │ │
253
260
  │ 状态: ✓ 正常使用 │
254
- └─────────────────────────────────────────────────────────────┘
261
+ └──────────────────────────────────────────────────────┘
255
262
  ```
256
263
 
257
264
  ### 紧凑模式
258
265
 
259
266
  ```
260
- ● MiniMax-M2 27% • 1 小时 26 分钟后重置 • ✓ 正常使用
267
+ ● MiniMax-M* 0% (4498/4500) 4 小时 59 分钟后重置 • ✓ 正常使用 • 剩余: 336天
261
268
  ```
262
269
 
263
270
  ### 持续状态栏模式
@@ -296,10 +303,11 @@ minimax-status ❯ main * ❯ 10% (4047/4500) ❯ 12m ❯ 剩21天
296
303
  | 元素 | 说明 |
297
304
  | ------ | ---------------------------------- |
298
305
  | 目录 | 当前工作目录 |
299
- | 分支 | Git 分支名称 |
306
+ | 分支 | Git 分支名称(含未提交状态) |
300
307
  | 模型 | MiniMax 模型名称 |
301
- | 上下文 | 上下文窗口使用率 |
302
- | Usage | 使用量百分比(剩余/总数) |
308
+ | 上下文 | 上下文窗口使用 tokens |
309
+ | Usage | 使用量百分比(已用/总量) |
310
+ | 周限额 | 周配额使用情况,∞ 表示无限制 |
303
311
  | ⏱ | 额度重置倒计时 |
304
312
  | 到期 | 订阅到期时间(颜色动态变化) |
305
313
 
@@ -407,7 +415,6 @@ MIT License - 详见 [LICENSE](LICENSE) 文件
407
415
  |--------|------|------|
408
416
  | **CLI** | [`cli/`](cli/) | 命令行工具,npm 全局包 |
409
417
  | **VSCode** | [`vscode-extension/`](vscode-extension/) | VSCode 状态栏集成 |
410
- | **OpenClaw** | [`openclaw/`](openclaw/) | OpenClaw 集成 |
411
418
 
412
419
  ---
413
420
 
package/cli/api.js CHANGED
@@ -3,6 +3,7 @@ const https = require("https");
3
3
  const fs = require("fs");
4
4
  const path = require("path");
5
5
  const chalk = require("chalk").default;
6
+ const { getContextWindowSize, getDefaultContextWindowSize } = require('./model-context-sizes');
6
7
 
7
8
  // 创建 HTTPS Agent 配置
8
9
  const httpsAgent = new https.Agent({
@@ -346,10 +347,11 @@ class MinimaxAPI {
346
347
  }
347
348
 
348
349
  // 上下文窗口信息
349
- // 默认上下文窗口大小 (200K tokens)
350
- const defaultContextSize = 200000;
350
+ // 根据模型名称获取上下文窗口大小,回退到默认值
351
+ const contextWindowSize =
352
+ getContextWindowSize(modelData.model_name) || getDefaultContextWindowSize();
351
353
  const contextWindow = {
352
- total: defaultContextSize,
354
+ total: contextWindowSize,
353
355
  used: 0,
354
356
  percentage: 0,
355
357
  totalFormatted: "200K",
package/cli/index.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  // Force color output even in non-TTY environments (e.g., Claude Code statusline)
4
4
  process.env.FORCE_COLOR = "1";
@@ -12,6 +12,7 @@ const TranscriptParser = require("./transcript-parser");
12
12
  const ConfigCounter = require("./config-counter");
13
13
  const Renderer = require("./renderer");
14
14
  const packageJson = require("../package.json");
15
+ const { getContextWindowSize, getDefaultContextWindowSize } = require('./model-context-sizes');
15
16
 
16
17
  const program = new Command();
17
18
  const api = new MinimaxAPI();
@@ -238,7 +239,7 @@ program
238
239
  let displayModel = modelName;
239
240
  let currentDir = null;
240
241
  let modelId = null;
241
- let contextSize = 204800;
242
+ let contextSize = getContextWindowSize(modelName) || getDefaultContextWindowSize();
242
243
 
243
244
  if (stdinData) {
244
245
  if (stdinData.model && stdinData.model.display_name) {
@@ -257,8 +258,8 @@ program
257
258
  }
258
259
 
259
260
  if (modelId) {
260
- // MiniMax 模型统一使用 208K context window
261
- contextSize = 204800;
261
+ // MiniMax 模型使用映射表获取 context window
262
+ contextSize = getContextWindowSize(modelId) || getContextWindowSize(modelName) || getDefaultContextWindowSize();
262
263
  }
263
264
 
264
265
  let contextUsageTokens = null;
@@ -601,7 +602,7 @@ program
601
602
  // 计算上下文使用量(从 session 实时 token)
602
603
  // 使用实时 contextTokens 计算百分比
603
604
  const contextUsageValue = contextTokens;
604
- const contextSizeValue = 204800; // MiniMax M2 context window
605
+ const contextSizeValue = getContextWindowSize(modelName) || getDefaultContextWindowSize();
605
606
 
606
607
  // 获取 Droid 全局配置统计(不是当前工作目录)
607
608
  const droidConfigDir = path.join(process.env.HOME || process.env.USERPROFILE, ".factory");
@@ -688,34 +689,34 @@ program
688
689
  blocks.push({ text: ` 剩${expiry.daysRemaining}天 `, bg: bg });
689
690
  }
690
691
 
691
- let out = '';
692
- const leftArrow = useNerdFonts ? '\uE0B0' : '>';
693
-
694
- for (let i = 0; i < blocks.length; i++) {
695
- const b = blocks[i];
696
-
697
- // 磁贴开启:顺行式起点,利用黑色箭头实现内凹镂空感
698
- if (i === 0) {
699
- out += '\u001b[0m' + chalk.bgHex(b.bg).black(leftArrow);
700
- }
701
-
702
- // 磁贴文字内容
703
- out += '\u001b[0m' + chalk.bgHex(b.bg).bold.whiteBright(b.text);
704
-
705
- if (i < blocks.length - 1) {
706
- const nextB = blocks[i + 1];
707
- if (useNerdFonts) {
708
- // 衔接尖部
709
- out += '\u001b[0m' + chalk.bgHex(nextB.bg).hex(b.bg)(arrow);
710
- } else {
711
- out += '\u001b[0m' + chalk.bgHex(b.bg).bold.whiteBright(arrow);
712
- }
713
- } else {
714
- // 最后一块磁贴:顺行式终点
715
- out += '\u001b[0m' + chalk.hex(b.bg)(arrow);
716
- }
717
- }
718
-
692
+ let out = '';
693
+ const leftArrow = useNerdFonts ? '\uE0B0' : '>';
694
+
695
+ for (let i = 0; i < blocks.length; i++) {
696
+ const b = blocks[i];
697
+
698
+ // 磁贴开启:顺行式起点,利用黑色箭头实现内凹镂空感
699
+ if (i === 0) {
700
+ out += '\u001b[0m' + chalk.bgHex(b.bg).black(leftArrow);
701
+ }
702
+
703
+ // 磁贴文字内容
704
+ out += '\u001b[0m' + chalk.bgHex(b.bg).bold.whiteBright(b.text);
705
+
706
+ if (i < blocks.length - 1) {
707
+ const nextB = blocks[i + 1];
708
+ if (useNerdFonts) {
709
+ // 衔接尖部
710
+ out += '\u001b[0m' + chalk.bgHex(nextB.bg).hex(b.bg)(arrow);
711
+ } else {
712
+ out += '\u001b[0m' + chalk.bgHex(b.bg).bold.whiteBright(arrow);
713
+ }
714
+ } else {
715
+ // 最后一块磁贴:顺行式终点
716
+ out += '\u001b[0m' + chalk.hex(b.bg)(arrow);
717
+ }
718
+ }
719
+
719
720
  console.log(out);
720
721
  });
721
722
 
@@ -0,0 +1,52 @@
1
+ /**
2
+ * MiniMax 模型 context window 大小映射表
3
+ * 单位: tokens
4
+ *
5
+ * 来源: https://platform.minimax.io/docs/api-reference/text-openai-api
6
+ */
7
+
8
+ const MODEL_CONTEXT_SIZES = {
9
+ // MiniMax M 系列 - 统一 200K context window
10
+ 'MiniMax-M2': 204800,
11
+ 'MiniMax-M2.1': 204800,
12
+ 'MiniMax-M2.1-highspeed': 204800,
13
+ 'MiniMax-M2.5': 204800,
14
+ 'MiniMax-M2.5-highspeed': 204800,
15
+ 'MiniMax-M2.7': 204800,
16
+ 'MiniMax-M2.7-highspeed': 204800,
17
+ };
18
+
19
+ /**
20
+ * 根据模型名称获取 context window 大小
21
+ * @param {string} modelName - 模型名称
22
+ * @returns {number|null} context window 大小,如果未找到返回 null
23
+ */
24
+ function getContextWindowSize(modelName) {
25
+ if (!modelName) return null;
26
+
27
+ // 精确匹配
28
+ if (MODEL_CONTEXT_SIZES[modelName] !== undefined) {
29
+ return MODEL_CONTEXT_SIZES[modelName];
30
+ }
31
+
32
+ // MiniMax M 系列模糊匹配(兼容未知的 MiniMax-M 系列新型号)
33
+ if (modelName.includes('MiniMax-M')) {
34
+ return 204800;
35
+ }
36
+
37
+ return null;
38
+ }
39
+
40
+ /**
41
+ * 获取默认 context window 大小
42
+ * @returns {number} 默认值 200000
43
+ */
44
+ function getDefaultContextWindowSize() {
45
+ return 200000;
46
+ }
47
+
48
+ module.exports = {
49
+ MODEL_CONTEXT_SIZES,
50
+ getContextWindowSize,
51
+ getDefaultContextWindowSize,
52
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minimax-status",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "MiniMax Claude Code 使用状态监控工具",
5
5
  "bin": {
6
6
  "minimax-status": "cli/index.js",