@yakumoryo/minimax-plan-usage 0.2.1 → 0.2.3

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 +75 -21
  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.3",
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,16 +1,77 @@
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
77
  const authToken = process.env.ANTHROPIC_AUTH_TOKEN;
@@ -34,9 +95,7 @@ const queryUsage = () => {
34
95
  const req = https.request(options, (res) => {
35
96
  let data = '';
36
97
 
37
- res.on('data', (chunk) => {
38
- data += chunk;
39
- });
98
+ res.on('data', (chunk) => { data += chunk; });
40
99
 
41
100
  res.on('end', () => {
42
101
  if (res.statusCode !== 200) {
@@ -64,12 +123,7 @@ const queryUsage = () => {
64
123
  const minutes = Math.floor((remainingMs % (1000 * 60 * 60)) / (1000 * 60));
65
124
 
66
125
  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',
126
+ timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit',
73
127
  });
74
128
 
75
129
  const weeklyRemaining = m.current_weekly_usage_count;
@@ -81,12 +135,7 @@ const queryUsage = () => {
81
135
  const weeklyHours = Math.floor((weeklyRemainingMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
82
136
 
83
137
  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',
138
+ timeZone: 'Asia/Shanghai', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit',
90
139
  });
91
140
 
92
141
  const bar = '█'.repeat(Math.floor(percentage / 10)) + '░'.repeat(10 - Math.floor(percentage / 10));
@@ -125,11 +174,16 @@ const queryUsage = () => {
125
174
 
126
175
  req.end();
127
176
  });
128
- };
177
+ }
178
+
179
+ // ============ CLI Routing ============
129
180
 
130
181
  const command = process.argv[2];
131
182
 
132
- if (command === 'query') {
183
+ if (command === 'setup') {
184
+ const token = process.argv[3];
185
+ setup(token);
186
+ } else if (command === 'query') {
133
187
  console.log('MiniMax API Host:', API_HOST);
134
188
  queryUsage()
135
189
  .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
- }