@yakumoryo/minimax-plan-usage 0.2.1 → 0.2.4

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 (3) hide show
  1. package/package.json +1 -6
  2. package/query.js +84 -22
  3. package/setup.js +0 -102
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakumoryo/minimax-plan-usage",
3
- "version": "0.2.1",
3
+ "version": "0.2.4",
4
4
  "description": "MiniMax Coding Plan setup helper and usage query tool",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -12,7 +12,6 @@
12
12
  "agents",
13
13
  "skills",
14
14
  ".claude-plugin",
15
- "setup.js",
16
15
  "query.js"
17
16
  ],
18
17
  "engines": {
@@ -20,9 +19,5 @@
20
19
  },
21
20
  "bin": {
22
21
  "minimax-plan-usage": "./query.js"
23
- },
24
- "scripts": {
25
- "setup": "node setup.js",
26
- "query": "node query.js"
27
22
  }
28
23
  }
package/query.js CHANGED
@@ -1,19 +1,88 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * MiniMax Coding Plan Usage Query
5
- * Uses ANTHROPIC_AUTH_TOKEN and ANTHROPIC_BASE_URL from environment
4
+ * MiniMax Coding Plan Helper
5
+ * CLI tool for setting up and querying MiniMax Coding Plan usage
6
6
  */
7
7
 
8
+ import { readFileSync, writeFileSync } from 'fs';
9
+ import { homedir } from 'os';
10
+ import { join } from 'path';
8
11
  import https from 'https';
9
- import { spawn } from 'child_process';
10
12
 
11
13
  const API_HOST = 'https://api.minimaxi.com';
14
+ const SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
12
15
 
13
- const queryUsage = () => {
16
+ // ============ Setup Functions ============
17
+
18
+ function getSettings() {
19
+ try {
20
+ return JSON.parse(readFileSync(SETTINGS_PATH, 'utf-8'));
21
+ } catch {
22
+ return { env: {}, permissions: { allow: [], deny: [] }, enabledPlugins: {} };
23
+ }
24
+ }
25
+
26
+ function saveSettings(settings) {
27
+ writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2));
28
+ }
29
+
30
+ function setup(token) {
31
+ if (!token || !token.startsWith('sk-cp-')) {
32
+ console.error('Error: Invalid token format. Token should start with "sk-cp-"');
33
+ console.error('');
34
+ console.error('Usage: npx @yakumoryo/minimax-plan-usage setup <your-token>');
35
+ console.error('');
36
+ console.error('Example:');
37
+ console.error(' npx @yakumoryo/minimax-plan-usage setup sk-cp-YOUR_TOKEN_HERE');
38
+ process.exit(1);
39
+ }
40
+
41
+ const settings = getSettings();
42
+
43
+ if (!settings.env) settings.env = {};
44
+
45
+ settings.env.ANTHROPIC_AUTH_TOKEN = token;
46
+ settings.env.ANTHROPIC_BASE_URL = `${API_HOST}/anthropic`;
47
+
48
+ if (!settings.env.ANTHROPIC_MODEL) settings.env.ANTHROPIC_MODEL = 'MiniMax-M2.7';
49
+ if (!settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL) settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = 'MiniMax-M2.7';
50
+ if (!settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL) settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = 'MiniMax-M2.7';
51
+ if (!settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL) settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = 'MiniMax-M2.7';
52
+
53
+ if (!settings.permissions) {
54
+ settings.permissions = { allow: ['Bash(*)', 'Read(*)', 'Write(*)', 'Edit(*)'], deny: [] };
55
+ }
56
+
57
+ if (!settings.enabledPlugins) settings.enabledPlugins = {};
58
+
59
+ saveSettings(settings);
60
+
61
+ console.log('');
62
+ console.log('✅ MiniMax Coding Plan configured successfully!');
63
+ console.log('');
64
+ console.log('Settings updated:');
65
+ console.log(` ANTHROPIC_AUTH_TOKEN: ${token.slice(0, 20)}...`);
66
+ console.log(` ANTHROPIC_BASE_URL: ${API_HOST}/anthropic`);
67
+ console.log('');
68
+ console.log('Restart Claude Code to apply changes, then run:');
69
+ console.log(' npx @yakumoryo/minimax-plan-usage query');
70
+ }
71
+
72
+ // ============ Query Functions ============
73
+
74
+ function queryUsage() {
14
75
  return new Promise((resolve, reject) => {
15
76
  const apiUrl = `${API_HOST}/v1/api/openplatform/coding_plan/remains`;
16
- const authToken = process.env.ANTHROPIC_AUTH_TOKEN;
77
+ let authToken = process.env.ANTHROPIC_AUTH_TOKEN;
78
+
79
+ // Fallback to settings.json if env var not set
80
+ if (!authToken) {
81
+ try {
82
+ const settings = JSON.parse(readFileSync(SETTINGS_PATH, 'utf-8'));
83
+ authToken = settings.env?.ANTHROPIC_AUTH_TOKEN;
84
+ } catch {}
85
+ }
17
86
 
18
87
  if (!authToken) {
19
88
  return reject(new Error('ANTHROPIC_AUTH_TOKEN not set. Run: npx @yakumoryo/minimax-plan-usage setup <token>'));
@@ -34,9 +103,7 @@ const queryUsage = () => {
34
103
  const req = https.request(options, (res) => {
35
104
  let data = '';
36
105
 
37
- res.on('data', (chunk) => {
38
- data += chunk;
39
- });
106
+ res.on('data', (chunk) => { data += chunk; });
40
107
 
41
108
  res.on('end', () => {
42
109
  if (res.statusCode !== 200) {
@@ -64,12 +131,7 @@ const queryUsage = () => {
64
131
  const minutes = Math.floor((remainingMs % (1000 * 60 * 60)) / (1000 * 60));
65
132
 
66
133
  const resetTime = new Date(m.end_time).toLocaleString('zh-CN', {
67
- timeZone: 'Asia/Shanghai',
68
- year: 'numeric',
69
- month: '2-digit',
70
- day: '2-digit',
71
- hour: '2-digit',
72
- minute: '2-digit',
134
+ timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit',
73
135
  });
74
136
 
75
137
  const weeklyRemaining = m.current_weekly_usage_count;
@@ -81,12 +143,7 @@ const queryUsage = () => {
81
143
  const weeklyHours = Math.floor((weeklyRemainingMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
82
144
 
83
145
  const weeklyResetTime = new Date(m.weekly_end_time).toLocaleString('zh-CN', {
84
- timeZone: 'Asia/Shanghai',
85
- year: 'numeric',
86
- month: '2-digit',
87
- day: '2-digit',
88
- hour: '2-digit',
89
- minute: '2-digit',
146
+ timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit',
90
147
  });
91
148
 
92
149
  const bar = '█'.repeat(Math.floor(percentage / 10)) + '░'.repeat(10 - Math.floor(percentage / 10));
@@ -125,11 +182,16 @@ const queryUsage = () => {
125
182
 
126
183
  req.end();
127
184
  });
128
- };
185
+ }
186
+
187
+ // ============ CLI Routing ============
129
188
 
130
189
  const command = process.argv[2];
131
190
 
132
- if (command === 'query') {
191
+ if (command === 'setup') {
192
+ const token = process.argv[3];
193
+ setup(token);
194
+ } else if (command === 'query') {
133
195
  console.log('MiniMax API Host:', API_HOST);
134
196
  queryUsage()
135
197
  .then(() => process.exit(0))
package/setup.js DELETED
@@ -1,102 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * MiniMax Coding Plan Setup Helper
5
- * Configures Claude Code to use MiniMax API
6
- */
7
-
8
- import { readFileSync, writeFileSync } from 'fs';
9
- import { homedir } from 'os';
10
- import { join } from 'path';
11
-
12
- const SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
13
-
14
- const API_URL = 'https://api.minimaxi.com';
15
-
16
- function getSettings() {
17
- try {
18
- return JSON.parse(readFileSync(SETTINGS_PATH, 'utf-8'));
19
- } catch {
20
- return { env: {}, permissions: { allow: [], deny: [] }, enabledPlugins: {} };
21
- }
22
- }
23
-
24
- function saveSettings(settings) {
25
- writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2));
26
- }
27
-
28
- function setup(token) {
29
- if (!token || !token.startsWith('sk-cp-')) {
30
- console.error('Error: Invalid token format. Token should start with "sk-cp-"');
31
- console.error('');
32
- console.error('Usage: npx @yakumoryo/minimax-plan-usage setup <your-token>');
33
- console.error('');
34
- console.error('Example:');
35
- console.error(' npx @yakumoryo/minimax-plan-usage setup sk-cp-YOUR_TOKEN_HERE');
36
- process.exit(1);
37
- }
38
-
39
- const settings = getSettings();
40
-
41
- // Ensure env object exists
42
- if (!settings.env) {
43
- settings.env = {};
44
- }
45
-
46
- // Set MiniMax environment variables
47
- settings.env.ANTHROPIC_AUTH_TOKEN = token;
48
- settings.env.ANTHROPIC_BASE_URL = `${API_URL}/anthropic`;
49
-
50
- // Add default model settings if not present
51
- if (!settings.env.ANTHROPIC_MODEL) {
52
- settings.env.ANTHROPIC_MODEL = 'MiniMax-M2.7';
53
- }
54
- if (!settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL) {
55
- settings.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = 'MiniMax-M2.7';
56
- }
57
- if (!settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL) {
58
- settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL = 'MiniMax-M2.7';
59
- }
60
- if (!settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL) {
61
- settings.env.ANTHROPIC_DEFAULT_OPUS_MODEL = 'MiniMax-M2.7';
62
- }
63
-
64
- // Ensure permissions exist
65
- if (!settings.permissions) {
66
- settings.permissions = { allow: ['Bash(*)', 'Read(*)', 'Write(*)', 'Edit(*)'], deny: [] };
67
- }
68
-
69
- // Add plugin if not present
70
- if (!settings.enabledPlugins) {
71
- settings.enabledPlugins = {};
72
- }
73
-
74
- saveSettings(settings);
75
-
76
- console.log('');
77
- console.log('✅ MiniMax Coding Plan configured successfully!');
78
- console.log('');
79
- console.log('Settings updated:');
80
- console.log(` ANTHROPIC_AUTH_TOKEN: ${token.slice(0, 20)}...`);
81
- console.log(` ANTHROPIC_BASE_URL: ${API_URL}/anthropic`);
82
- console.log('');
83
- console.log('Restart Claude Code to apply changes, then run:');
84
- console.log(' /minimax-plan-usage:usage-query');
85
- }
86
-
87
- const command = process.argv[2];
88
- if (command === 'setup') {
89
- const token = process.argv[3];
90
- setup(token);
91
- } else {
92
- console.log('MiniMax Coding Plan Helper');
93
- console.log('');
94
- console.log('Usage:');
95
- console.log(' npx @yakumoryo/minimax-plan-usage setup <your-token>');
96
- console.log('');
97
- console.log('Example:');
98
- console.log(' npx @yakumoryo/minimax-plan-usage setup sk-cp-YOUR_TOKEN_HERE');
99
- console.log('');
100
- console.log('To query usage after setup:');
101
- console.log(' npx @yakumoryo/minimax-plan-usage query');
102
- }