minimax-status 1.0.8 → 1.0.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.
Files changed (2) hide show
  1. package/cli/index.js +88 -116
  2. package/package.json +1 -1
package/cli/index.js CHANGED
@@ -227,14 +227,11 @@ function calculateUsageTokens(usage) {
227
227
  return 0;
228
228
  }
229
229
 
230
- // Statusline command - 内置自动刷新功能
230
+ // Statusline command - 单次输出模式
231
231
  program
232
232
  .command("statusline")
233
- .description("Claude Code状态栏集成(从stdin读取数据,输出单行状态,自动刷新)")
233
+ .description("Claude Code状态栏集成(从stdin读取数据,输出单行状态)")
234
234
  .action(async () => {
235
- let isActive = true;
236
- let intervalId = null;
237
-
238
235
  // 读取stdin数据(如果可用)
239
236
  let stdinData = null;
240
237
  if (!process.stdin.isTTY) {
@@ -273,136 +270,111 @@ program
273
270
  return `${tokens}`;
274
271
  };
275
272
 
276
- // 更新状态行的函数
277
- const updateStatusLine = async () => {
278
- if (!isActive) return;
279
-
280
- try {
281
- // 获取使用状态
282
- const apiData = await api.getUsageStatus();
283
- const usageData = api.parseUsageData(apiData);
284
-
285
- // 构建状态信息
286
- const { usage, modelName, remaining } = usageData;
287
- const percentage = usage.percentage;
288
-
289
- // 从stdin数据获取Claude Code信息
290
- let displayModel = modelName;
291
- let currentDir = null;
292
- let modelId = null;
293
- let contextSize = 200000; // 默认值
294
-
295
- if (stdinData) {
296
- // Claude Code传递的模型信息
297
- if (stdinData.model && stdinData.model.display_name) {
298
- displayModel = stdinData.model.display_name;
299
- modelId = stdinData.model.id;
300
- } else if (stdinData.model && stdinData.model.id) {
301
- displayModel = stdinData.model.id;
302
- modelId = stdinData.model.id;
303
- }
273
+ try {
274
+ // 获取使用状态
275
+ const apiData = await api.getUsageStatus();
276
+ const usageData = api.parseUsageData(apiData);
304
277
 
305
- // 当前工作目录(从stdin获取)
306
- if (stdinData.workspace && stdinData.workspace.current_directory) {
307
- currentDir = stdinData.workspace.current_directory.split('/').pop();
308
- }
309
- } else {
310
- // 如果没有stdin,使用API返回的模型名作为ID
311
- modelId = modelName.toLowerCase().replace(/\s+/g, '-');
278
+ // 构建状态信息
279
+ const { usage, modelName, remaining } = usageData;
280
+ const percentage = usage.percentage;
281
+
282
+ // 从stdin数据获取Claude Code信息
283
+ let displayModel = modelName;
284
+ let currentDir = null;
285
+ let modelId = null;
286
+ let contextSize = 200000; // 默认值
287
+
288
+ if (stdinData) {
289
+ // Claude Code传递的模型信息
290
+ if (stdinData.model && stdinData.model.display_name) {
291
+ displayModel = stdinData.model.display_name;
292
+ modelId = stdinData.model.id;
293
+ } else if (stdinData.model && stdinData.model.id) {
294
+ displayModel = stdinData.model.id;
295
+ modelId = stdinData.model.id;
312
296
  }
313
297
 
314
- // 查找上下文窗口大小
315
- if (modelId) {
316
- const modelKey = modelId.toLowerCase();
317
- for (const [key, value] of Object.entries(MODEL_CONTEXT_SIZES)) {
318
- if (modelKey.includes(key.toLowerCase())) {
319
- contextSize = value;
320
- break;
321
- }
322
- }
298
+ // 当前工作目录(从stdin获取)
299
+ if (stdinData.workspace && stdinData.workspace.current_directory) {
300
+ currentDir = stdinData.workspace.current_directory.split('/').pop();
323
301
  }
302
+ } else {
303
+ // 如果没有stdin,使用API返回的模型名作为ID
304
+ modelId = modelName.toLowerCase().replace(/\s+/g, '-');
305
+ }
324
306
 
325
- // 尝试从转录文件获取真实token使用量(类似ccline)
326
- let contextUsageTokens = null;
327
- let contextUsagePercentage = null;
328
- if (stdinData && stdinData.transcript_path) {
329
- contextUsageTokens = await parseTranscriptUsage(stdinData.transcript_path);
330
- if (contextUsageTokens) {
331
- contextUsagePercentage = Math.round((contextUsageTokens / contextSize) * 100);
307
+ // 查找上下文窗口大小
308
+ if (modelId) {
309
+ const modelKey = modelId.toLowerCase();
310
+ for (const [key, value] of Object.entries(MODEL_CONTEXT_SIZES)) {
311
+ if (modelKey.includes(key.toLowerCase())) {
312
+ contextSize = value;
313
+ break;
332
314
  }
333
315
  }
316
+ }
334
317
 
335
- const contextSizeText = formatContextSize(contextSize);
336
-
337
- // 状态图标(基于真实上下文使用情况,否则基于额度)
338
- const displayPercentage = contextUsagePercentage || percentage;
339
- const statusIcon = displayPercentage >= 85 ? "⚠" : displayPercentage >= 60 ? "⚡" : "✓";
318
+ // 尝试从转录文件获取真实token使用量(类似ccline)
319
+ let contextUsageTokens = null;
320
+ let contextUsagePercentage = null;
321
+ if (stdinData && stdinData.transcript_path) {
322
+ contextUsageTokens = await parseTranscriptUsage(stdinData.transcript_path);
323
+ if (contextUsageTokens) {
324
+ contextUsagePercentage = Math.round((contextUsageTokens / contextSize) * 100);
325
+ }
326
+ }
340
327
 
341
- // 剩余时间文本
342
- const remainingText =
343
- remaining.hours > 0
344
- ? `${remaining.hours}h${remaining.minutes}m`
345
- : `${remaining.minutes}m`;
328
+ const contextSizeText = formatContextSize(contextSize);
346
329
 
347
- // 构建带图标的状态行
348
- let statusLine = '';
330
+ // 状态图标(基于真实上下文使用情况,否则基于额度)
331
+ const displayPercentage = contextUsagePercentage || percentage;
332
+ const statusIcon = displayPercentage >= 85 ? "⚠" : displayPercentage >= 60 ? "⚡" : "✓";
349
333
 
350
- // 显示目录(优先使用Claude Code的目录,否则显示CLI当前目录)
351
- const displayDir = currentDir || cliCurrentDir || '';
352
- if (displayDir) {
353
- statusLine += `${chalk.blue('📁')} ${chalk.cyan(displayDir)} | `;
354
- }
334
+ // 剩余时间文本
335
+ const remainingText =
336
+ remaining.hours > 0
337
+ ? `${remaining.hours}h${remaining.minutes}m`
338
+ : `${remaining.minutes}m`;
355
339
 
356
- // 模型信息
357
- statusLine += `${chalk.magenta('🤖')} ${chalk.magenta(displayModel)} | `;
340
+ // 构建带图标的状态行
341
+ let statusLine = '';
358
342
 
359
- // 账户使用额度百分比(根据使用率变色)
360
- const usageColor = percentage >= 85 ? chalk.red : percentage >= 60 ? chalk.yellow : chalk.green;
361
- statusLine += `${usageColor(percentage + '%')} | `;
343
+ // 显示目录(优先使用Claude Code的目录,否则显示CLI当前目录)
344
+ const displayDir = currentDir || cliCurrentDir || '';
345
+ if (displayDir) {
346
+ statusLine += `${chalk.blue('📁')} ${chalk.cyan(displayDir)} | `;
347
+ }
362
348
 
363
- // 剩余次数
364
- statusLine += `${chalk.yellow('')} ${chalk.white(usage.remaining + '/' + usage.total)} | `;
349
+ // 模型信息
350
+ statusLine += `${chalk.magenta('🤖')} ${chalk.magenta(displayModel)} | `;
365
351
 
366
- // 上下文使用情况(参考ccline:⚡ 百分比 · token数/总大小)
367
- if (contextUsageTokens) {
368
- const contextColor = displayPercentage >= 85 ? chalk.red : displayPercentage >= 60 ? chalk.yellow : chalk.green;
369
- statusLine += `${contextColor('⚡')} ${contextColor(displayPercentage + '%')} ${chalk.gray('·')} ${chalk.white(formatTokens(contextUsageTokens) + '/' + contextSizeText)} | `;
370
- } else {
371
- // 没有转录数据时,显示上下文窗口大小
372
- statusLine += `${chalk.gray(contextSizeText)} | `;
373
- }
352
+ // 账户使用额度百分比(根据使用率变色)
353
+ const usageColor = percentage >= 85 ? chalk.red : percentage >= 60 ? chalk.yellow : chalk.green;
354
+ statusLine += `${usageColor(percentage + '%')} | `;
374
355
 
375
- // 剩余时间和状态图标
376
- const statusColor = displayPercentage >= 85 ? chalk.red : displayPercentage >= 60 ? chalk.yellow : chalk.green;
377
- statusLine += `${chalk.gray('⏱')} ${chalk.white(remainingText)} ${statusColor(statusIcon)}`;
356
+ // 剩余次数
357
+ statusLine += `${chalk.yellow('↻')} ${chalk.white(usage.remaining + '/' + usage.total)} | `;
378
358
 
379
- // 输出单行状态(带颜色)
380
- console.log(statusLine);
381
- } catch (error) {
382
- // 输出错误状态(纯文本)
383
- console.log(`❌ MiniMax 错误: ${error.message}`);
359
+ // 上下文使用情况(参考ccline:⚡ 百分比 · token数/总大小)
360
+ if (contextUsageTokens) {
361
+ const contextColor = displayPercentage >= 85 ? chalk.red : displayPercentage >= 60 ? chalk.yellow : chalk.green;
362
+ statusLine += `${contextColor('⚡')} ${contextColor(displayPercentage + '%')} ${chalk.gray('·')} ${chalk.white(formatTokens(contextUsageTokens) + '/' + contextSizeText)} | `;
363
+ } else {
364
+ // 没有转录数据时,显示上下文窗口大小
365
+ statusLine += `${chalk.gray(contextSizeText)} | `;
384
366
  }
385
- };
386
367
 
387
- // 立即执行一次
388
- await updateStatusLine();
389
-
390
- // 设置自动刷新(每10秒)
391
- intervalId = setInterval(updateStatusLine, 10000);
392
-
393
- // 处理 Ctrl+C 退出
394
- process.on('SIGINT', () => {
395
- isActive = false;
396
- if (intervalId) clearInterval(intervalId);
397
- console.log(chalk.yellow('\n状态栏已停止'));
398
- process.exit(0);
399
- });
400
-
401
- // 处理进程退出
402
- process.on('exit', () => {
403
- isActive = false;
404
- if (intervalId) clearInterval(intervalId);
405
- });
368
+ // 剩余时间和状态图标
369
+ const statusColor = displayPercentage >= 85 ? chalk.red : displayPercentage >= 60 ? chalk.yellow : chalk.green;
370
+ statusLine += `${chalk.gray('⏱')} ${chalk.white(remainingText)} ${statusColor(statusIcon)}`;
371
+
372
+ // 输出单行状态(带颜色)
373
+ console.log(statusLine);
374
+ } catch (error) {
375
+ // 输出错误状态(纯文本)
376
+ console.log(`❌ MiniMax 错误: ${error.message}`);
377
+ }
406
378
  });
407
379
 
408
380
  function startWatching(api, statusBar) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minimax-status",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "MiniMax Claude Code 使用状态监控工具",
5
5
  "bin": {
6
6
  "minimax-status": "cli/index.js",