@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.
- package/package.json +1 -6
- package/query.js +84 -22
- 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.
|
|
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
|
|
5
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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 === '
|
|
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
|
-
}
|