@mdrv/opencode-quota 262.0.0

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 (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +189 -0
  3. package/bin/copilot-quota.ts +374 -0
  4. package/bin/glm-quota.ts +467 -0
  5. package/bin/install.js +439 -0
  6. package/bin/kimi-quota.ts +314 -0
  7. package/dist/bin/copilot-quota.d.ts +8 -0
  8. package/dist/bin/copilot-quota.d.ts.map +1 -0
  9. package/dist/bin/copilot-quota.js +298 -0
  10. package/dist/bin/copilot-quota.js.map +1 -0
  11. package/dist/bin/glm-quota.d.ts +8 -0
  12. package/dist/bin/glm-quota.d.ts.map +1 -0
  13. package/dist/bin/glm-quota.js +367 -0
  14. package/dist/bin/glm-quota.js.map +1 -0
  15. package/dist/bin/kimi-quota.d.ts +3 -0
  16. package/dist/bin/kimi-quota.d.ts.map +1 -0
  17. package/dist/bin/kimi-quota.js +241 -0
  18. package/dist/bin/kimi-quota.js.map +1 -0
  19. package/dist/src/api/client.d.ts +76 -0
  20. package/dist/src/api/client.d.ts.map +1 -0
  21. package/dist/src/api/client.js +203 -0
  22. package/dist/src/api/client.js.map +1 -0
  23. package/dist/src/api/endpoints.d.ts +22 -0
  24. package/dist/src/api/endpoints.d.ts.map +1 -0
  25. package/dist/src/api/endpoints.js +41 -0
  26. package/dist/src/api/endpoints.js.map +1 -0
  27. package/dist/src/api/platforms.d.ts +20 -0
  28. package/dist/src/api/platforms.d.ts.map +1 -0
  29. package/dist/src/api/platforms.js +38 -0
  30. package/dist/src/api/platforms.js.map +1 -0
  31. package/dist/src/index.d.ts +10 -0
  32. package/dist/src/index.d.ts.map +1 -0
  33. package/dist/src/index.js +723 -0
  34. package/dist/src/index.js.map +1 -0
  35. package/dist/src/shared/logging.d.ts +7 -0
  36. package/dist/src/shared/logging.d.ts.map +1 -0
  37. package/dist/src/shared/logging.js +29 -0
  38. package/dist/src/shared/logging.js.map +1 -0
  39. package/dist/src/utils/box-constants.d.ts +43 -0
  40. package/dist/src/utils/box-constants.d.ts.map +1 -0
  41. package/dist/src/utils/box-constants.js +43 -0
  42. package/dist/src/utils/box-constants.js.map +1 -0
  43. package/dist/src/utils/date-formatter.d.ts +17 -0
  44. package/dist/src/utils/date-formatter.d.ts.map +1 -0
  45. package/dist/src/utils/date-formatter.js +33 -0
  46. package/dist/src/utils/date-formatter.js.map +1 -0
  47. package/dist/src/utils/error-formatter.d.ts +17 -0
  48. package/dist/src/utils/error-formatter.d.ts.map +1 -0
  49. package/dist/src/utils/error-formatter.js +60 -0
  50. package/dist/src/utils/error-formatter.js.map +1 -0
  51. package/dist/src/utils/progress-bar.d.ts +35 -0
  52. package/dist/src/utils/progress-bar.d.ts.map +1 -0
  53. package/dist/src/utils/progress-bar.js +43 -0
  54. package/dist/src/utils/progress-bar.js.map +1 -0
  55. package/dist/src/utils/reset-timer.d.ts +11 -0
  56. package/dist/src/utils/reset-timer.d.ts.map +1 -0
  57. package/dist/src/utils/reset-timer.js +32 -0
  58. package/dist/src/utils/reset-timer.js.map +1 -0
  59. package/dist/src/utils/time-window.d.ts +30 -0
  60. package/dist/src/utils/time-window.d.ts.map +1 -0
  61. package/dist/src/utils/time-window.js +34 -0
  62. package/dist/src/utils/time-window.js.map +1 -0
  63. package/dist/tests/error-handling/api-errors.test.d.ts +7 -0
  64. package/dist/tests/error-handling/api-errors.test.d.ts.map +1 -0
  65. package/dist/tests/error-handling/api-errors.test.js +110 -0
  66. package/dist/tests/error-handling/api-errors.test.js.map +1 -0
  67. package/dist/tests/error-handling/auth-errors.test.d.ts +7 -0
  68. package/dist/tests/error-handling/auth-errors.test.d.ts.map +1 -0
  69. package/dist/tests/error-handling/auth-errors.test.js +110 -0
  70. package/dist/tests/error-handling/auth-errors.test.js.map +1 -0
  71. package/dist/tests/error-handling/network-errors.test.d.ts +7 -0
  72. package/dist/tests/error-handling/network-errors.test.d.ts.map +1 -0
  73. package/dist/tests/error-handling/network-errors.test.js +94 -0
  74. package/dist/tests/error-handling/network-errors.test.js.map +1 -0
  75. package/dist/tests/error-handling/parse-errors.test.d.ts +7 -0
  76. package/dist/tests/error-handling/parse-errors.test.d.ts.map +1 -0
  77. package/dist/tests/error-handling/parse-errors.test.js +87 -0
  78. package/dist/tests/error-handling/parse-errors.test.js.map +1 -0
  79. package/dist/tests/error-handling/token-sanitization.test.d.ts +2 -0
  80. package/dist/tests/error-handling/token-sanitization.test.d.ts.map +1 -0
  81. package/dist/tests/error-handling/token-sanitization.test.js +59 -0
  82. package/dist/tests/error-handling/token-sanitization.test.js.map +1 -0
  83. package/dist/tests/functional/date-formatter.test.d.ts +5 -0
  84. package/dist/tests/functional/date-formatter.test.d.ts.map +1 -0
  85. package/dist/tests/functional/date-formatter.test.js +46 -0
  86. package/dist/tests/functional/date-formatter.test.js.map +1 -0
  87. package/dist/tests/functional/progress-bar.test.d.ts +5 -0
  88. package/dist/tests/functional/progress-bar.test.d.ts.map +1 -0
  89. package/dist/tests/functional/progress-bar.test.js +82 -0
  90. package/dist/tests/functional/progress-bar.test.js.map +1 -0
  91. package/dist/tests/functional/reset-timer.test.d.ts +6 -0
  92. package/dist/tests/functional/reset-timer.test.d.ts.map +1 -0
  93. package/dist/tests/functional/reset-timer.test.js +67 -0
  94. package/dist/tests/functional/reset-timer.test.js.map +1 -0
  95. package/dist/tests/functional/time-window.test.d.ts +5 -0
  96. package/dist/tests/functional/time-window.test.d.ts.map +1 -0
  97. package/dist/tests/functional/time-window.test.js +46 -0
  98. package/dist/tests/functional/time-window.test.js.map +1 -0
  99. package/dist/tests/integration/box-alignment.test.d.ts +8 -0
  100. package/dist/tests/integration/box-alignment.test.d.ts.map +1 -0
  101. package/dist/tests/integration/box-alignment.test.js +238 -0
  102. package/dist/tests/integration/box-alignment.test.js.map +1 -0
  103. package/dist/tests/integration/error-handling.test.d.ts +2 -0
  104. package/dist/tests/integration/error-handling.test.d.ts.map +1 -0
  105. package/dist/tests/integration/error-handling.test.js +36 -0
  106. package/dist/tests/integration/error-handling.test.js.map +1 -0
  107. package/dist/tests/integration/installer-config.test.d.ts +2 -0
  108. package/dist/tests/integration/installer-config.test.d.ts.map +1 -0
  109. package/dist/tests/integration/installer-config.test.js +65 -0
  110. package/dist/tests/integration/installer-config.test.js.map +1 -0
  111. package/dist/tests/integration/plugin-catch-block.test.d.ts +2 -0
  112. package/dist/tests/integration/plugin-catch-block.test.d.ts.map +1 -0
  113. package/dist/tests/integration/plugin-catch-block.test.js +134 -0
  114. package/dist/tests/integration/plugin-catch-block.test.js.map +1 -0
  115. package/dist/tests/integration/reset-time-display.test.d.ts +6 -0
  116. package/dist/tests/integration/reset-time-display.test.d.ts.map +1 -0
  117. package/dist/tests/integration/reset-time-display.test.js +138 -0
  118. package/dist/tests/integration/reset-time-display.test.js.map +1 -0
  119. package/dist/tests/module/http-client.test.d.ts +2 -0
  120. package/dist/tests/module/http-client.test.d.ts.map +1 -0
  121. package/dist/tests/module/http-client.test.js +49 -0
  122. package/dist/tests/module/http-client.test.js.map +1 -0
  123. package/dist/tests/module/platform-detection.test.d.ts +5 -0
  124. package/dist/tests/module/platform-detection.test.d.ts.map +1 -0
  125. package/dist/tests/module/platform-detection.test.js +48 -0
  126. package/dist/tests/module/platform-detection.test.js.map +1 -0
  127. package/integration/agents/copilot-quota-exec.md +20 -0
  128. package/integration/agents/glm-quota-exec.md +20 -0
  129. package/integration/command/copilot_quota.md +6 -0
  130. package/integration/command/glm_quota.md +6 -0
  131. package/integration/skills/copilot-quota/SKILL.md +11 -0
  132. package/integration/skills/glm-quota/SKILL.md +11 -0
  133. package/package.json +69 -0
@@ -0,0 +1,367 @@
1
+ #!/usr/bin/env -S bun
2
+ /**
3
+ * GLM quota CLI tool
4
+ * Fetches and displays Z.AI GLM Coding Plan usage statistics from command line
5
+ * Credentials are fetched from OpenCode's auth.json
6
+ */
7
+ import * as https from 'https';
8
+ import * as os from 'os';
9
+ import * as path from 'path';
10
+ import { configureLogging, getLogger } from '../src/shared/logging.js';
11
+ const COMMAND_NAME = 'opencode-glm-quota';
12
+ const AUTH_JSON_PATH = path.join(os.homedir(), '.local', 'share', 'opencode', 'auth.json');
13
+ // Global logger, assigned after configureLogging()
14
+ let logger;
15
+ /**
16
+ * Format Unix timestamp to readable date
17
+ */
18
+ function formatTimestamp(timestamp) {
19
+ const date = new Date(timestamp);
20
+ return date.toLocaleString('en-US', {
21
+ month: 'short',
22
+ day: 'numeric',
23
+ hour: '2-digit',
24
+ minute: '2-digit',
25
+ hour12: true,
26
+ });
27
+ }
28
+ /**
29
+ * Calculate duration from now to a timestamp
30
+ * @param timestamp - Unix timestamp in milliseconds
31
+ * @returns Human-readable duration (e.g., "7d 4h 32m 15s", "2h 57m 31s", "5m")
32
+ */
33
+ function calculateDuration(timestamp) {
34
+ const now = new Date().getTime();
35
+ const diffMs = timestamp - now;
36
+ // If timestamp is in the past, show "0d 0h 0m 0s"
37
+ if (diffMs <= 0) {
38
+ return '0d 0h 0m 0s';
39
+ }
40
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
41
+ const diffHours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
42
+ const diffMinutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));
43
+ const diffSeconds = Math.floor((diffMs % (1000 * 60)) / 1000);
44
+ // Build duration string, hiding zero values
45
+ const parts = [];
46
+ if (diffDays > 0)
47
+ parts.push(`${diffDays}d`);
48
+ if (diffHours > 0)
49
+ parts.push(`${diffHours}h`);
50
+ if (diffMinutes > 0)
51
+ parts.push(`${diffMinutes}m`);
52
+ if (diffSeconds > 0)
53
+ parts.push(`${diffSeconds}s`);
54
+ return parts.length > 0 ? parts.join(' ') : '0s';
55
+ }
56
+ /**
57
+ * Parse and format quota limit data
58
+ */
59
+ function parseQuotaLimit(response) {
60
+ logger.debug('Parsing quota limit response');
61
+ const parsed = JSON.parse(response);
62
+ logger.debug(`API response code: ${parsed.code}, msg: ${parsed.msg}`);
63
+ if (!parsed.success || parsed.code !== 200) {
64
+ throw new Error(`API error: ${parsed.msg}`);
65
+ }
66
+ const { limits, level } = parsed.data;
67
+ logger.debug(`Plan level: ${level}, limits: ${limits.length}`);
68
+ let output = `Plan Level: ${level}\n`;
69
+ for (const limit of limits) {
70
+ logger.debug(`Processing limit type: ${limit.type}`);
71
+ const timeWindow = limit.type === 'TIME_LIMIT' ? '1-month window' : '5-hour rolling';
72
+ output += `\n${limit.type} (${timeWindow}):\n`;
73
+ output += ` Used: ${limit.percentage}%\n`;
74
+ if (limit.type === 'TIME_LIMIT' && limit.usageDetails) {
75
+ output += ` Tool Usage:\n`;
76
+ for (const detail of limit.usageDetails) {
77
+ logger.debug(`Tool ${detail.modelCode}: ${detail.usage}`);
78
+ output += ` ${detail.modelCode}: ${detail.usage}\n`;
79
+ }
80
+ }
81
+ if (limit.type === 'TOKENS_LIMIT' && limit.usage !== undefined && limit.remaining !== undefined) {
82
+ output += ` Tokens: ${limit.usage} / ${limit.usage + limit.remaining}\n`;
83
+ }
84
+ const resetTime = formatTimestamp(limit.nextResetTime);
85
+ const duration = calculateDuration(limit.nextResetTime);
86
+ logger.debug(`Next reset: ${resetTime} (${duration})`);
87
+ output += ` Next Reset: ${resetTime} (${duration})\n`;
88
+ }
89
+ logger.info('Quota limit data parsed successfully');
90
+ return { parsed, formatted: output };
91
+ }
92
+ /**
93
+ * Parse generic API response
94
+ */
95
+ function parseResponse(response, endpointName) {
96
+ logger.debug(`Parsing ${endpointName} response`);
97
+ const parsed = JSON.parse(response);
98
+ if (!parsed.success || parsed.code !== 200) {
99
+ throw new Error(`API error from ${endpointName}: ${parsed.msg}`);
100
+ }
101
+ logger.debug(`${endpointName} parsed successfully`);
102
+ return parsed.data;
103
+ }
104
+ /**
105
+ * Make HTTPS request with timeout
106
+ */
107
+ function makeRequest(url, token) {
108
+ logger.debug(`Making request to ${url}`);
109
+ logger.debug(`Using token: ${token.slice(0, 8)}...${token.slice(-4)}`);
110
+ return new Promise((resolve, reject) => {
111
+ const timeout = 10000; // 10 seconds
112
+ const timer = setTimeout(() => {
113
+ req.destroy();
114
+ logger.error(`Request timeout for ${url}`);
115
+ reject(new Error('Request timeout'));
116
+ }, timeout);
117
+ const urlObj = new URL(url);
118
+ const options = {
119
+ hostname: urlObj.hostname,
120
+ port: urlObj.port || 443,
121
+ path: urlObj.pathname + urlObj.search,
122
+ method: 'GET',
123
+ headers: {
124
+ 'Authorization': token,
125
+ 'Accept-Language': 'en-US,en',
126
+ 'Content-Type': 'application/json',
127
+ },
128
+ };
129
+ logger.debug(`Request options: ${JSON.stringify({
130
+ hostname: options.hostname,
131
+ path: options.path,
132
+ method: options.method,
133
+ })}`);
134
+ const req = https.request(options, (res) => {
135
+ let data = '';
136
+ logger.debug(`Response status: ${res.statusCode} ${res.statusMessage}`);
137
+ res.on('data', chunk => {
138
+ data += chunk;
139
+ });
140
+ res.on('end', () => {
141
+ clearTimeout(timer);
142
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
143
+ logger.debug(`Response received: ${data.slice(0, 100)}... (${data.length} bytes)`);
144
+ resolve(data);
145
+ }
146
+ else {
147
+ logger.error(`HTTP error: ${res.statusCode} ${res.statusMessage}`);
148
+ logger.debug(`Error response: ${data}`);
149
+ reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
150
+ }
151
+ });
152
+ });
153
+ req.on('error', (err) => {
154
+ clearTimeout(timer);
155
+ logger.error(`Request error: ${err.message}`);
156
+ reject(err);
157
+ });
158
+ req.end();
159
+ });
160
+ }
161
+ /**
162
+ * Get credentials from OpenCode auth.json
163
+ */
164
+ function getCredentials() {
165
+ logger.debug(`Looking for credentials at ${AUTH_JSON_PATH}`);
166
+ try {
167
+ const fs = require('fs');
168
+ if (!fs.existsSync(AUTH_JSON_PATH)) {
169
+ logger.debug('auth.json does not exist');
170
+ return null;
171
+ }
172
+ const content = fs.readFileSync(AUTH_JSON_PATH, 'utf-8');
173
+ const auth = JSON.parse(content);
174
+ logger.debug(`auth.json loaded with ${Object.keys(auth).length} providers`);
175
+ const providers = {
176
+ 'zai-coding-plan': 'zai',
177
+ 'zai': 'zai',
178
+ 'zhipu': 'zhipu',
179
+ };
180
+ for (const [providerId, platform] of Object.entries(providers)) {
181
+ const provider = auth[providerId];
182
+ const token = provider?.key ?? provider?.token;
183
+ if (token) {
184
+ const credentials = {
185
+ token,
186
+ platform: platform === 'zhipu' ? 'ZHIPU' : 'ZAI',
187
+ };
188
+ logger.info(`Found credentials for provider: ${providerId}`);
189
+ logger.debug(`Platform: ${credentials.platform}`);
190
+ return credentials;
191
+ }
192
+ }
193
+ logger.debug('No credentials found for any provider');
194
+ return null;
195
+ }
196
+ catch (error) {
197
+ logger.error(`Error reading auth.json: ${error}`);
198
+ return null;
199
+ }
200
+ }
201
+ /**
202
+ * Display help message
203
+ */
204
+ function showHelp() {
205
+ console.log(`
206
+ ${COMMAND_NAME} - Check Z.AI GLM Coding Plan quota from terminal
207
+
208
+ USAGE:
209
+ bun run bin/glm-quota.ts [--raw|--pretty] [--debug]
210
+
211
+ OPTIONS:
212
+ --raw Output raw JSON (default: pretty output)
213
+ --pretty Explicit pretty output (same as default)
214
+ --debug, -d Enable debug logging (logs hidden by default)
215
+ --help, -h Display this help message
216
+
217
+ AUTHENTICATION:
218
+ Reads credentials from ~/.local/share/opencode/auth.json
219
+ Provider: zai-coding-plan, zai, or zhipu
220
+
221
+ EXAMPLES:
222
+ bun run bin/glm-quota.ts
223
+ bun run bin/glm-quota.ts --debug
224
+ bun run bin/glm-quota.ts --raw
225
+ `);
226
+ }
227
+ /**
228
+ * Main CLI entry point
229
+ */
230
+ async function main() {
231
+ const args = process.argv.slice(2);
232
+ // Check for help flag first (before logging config)
233
+ if (args.includes('--help') || args.includes('-h')) {
234
+ showHelp();
235
+ process.exit(0);
236
+ }
237
+ // Check for debug flag before configuring logging
238
+ const debugMode = args.includes('--debug') || args.includes('-d');
239
+ // Only configure logging when --debug is present
240
+ if (debugMode) {
241
+ await configureLogging('debug');
242
+ }
243
+ // Create logger after configureLogging (or with no-op if not configured)
244
+ if (debugMode) {
245
+ logger = getLogger(['opencode-quota', 'cli', 'glm']);
246
+ }
247
+ else {
248
+ // No-op logger when debug mode is off
249
+ logger = {
250
+ debug: () => { },
251
+ info: () => { },
252
+ warn: () => { },
253
+ error: () => { },
254
+ };
255
+ }
256
+ logger.info(`${COMMAND_NAME} starting...`);
257
+ const rawOutput = args.includes('--raw');
258
+ // --pretty is accepted but same as default (explicitly allow it for completeness)
259
+ logger.debug(`Arguments: ${args.join(' ')}`);
260
+ logger.debug(`Raw output: ${rawOutput}`);
261
+ try {
262
+ // Get credentials from OpenCode auth.json
263
+ const credentials = getCredentials();
264
+ if (!credentials) {
265
+ logger.error('No credentials found');
266
+ console.error(`\n${COMMAND_NAME}: Not configured.\nPlease connect to Z.AI in OpenCode first.\n`);
267
+ process.exit(1);
268
+ }
269
+ // Query API
270
+ const endpoints = {
271
+ ZAI: {
272
+ modelUsage: 'https://api.z.ai/api/monitor/usage/model-usage',
273
+ toolUsage: 'https://api.z.ai/api/monitor/usage/tool-usage',
274
+ quotaLimit: 'https://api.z.ai/api/monitor/usage/quota/limit',
275
+ },
276
+ ZHIPU: {
277
+ modelUsage: 'https://open.bigmodel.cn/api/monitor/usage/model-usage',
278
+ toolUsage: 'https://open.bigmodel.cn/api/monitor/usage/tool-usage',
279
+ quotaLimit: 'https://open.bigmodel.cn/api/monitor/usage/quota/limit',
280
+ },
281
+ };
282
+ const urls = endpoints[credentials.platform];
283
+ logger.info(`Querying ${credentials.platform} endpoints...`);
284
+ // Make requests
285
+ const responses = await Promise.all([
286
+ makeRequest(urls.quotaLimit, credentials.token),
287
+ makeRequest(urls.modelUsage, credentials.token),
288
+ makeRequest(urls.toolUsage, credentials.token),
289
+ ]);
290
+ logger.info(`Received ${responses.length} responses`);
291
+ if (!rawOutput) {
292
+ // Parse and display formatted output
293
+ const [quotaLimitRaw, modelUsageRaw, toolUsageRaw] = responses;
294
+ if (quotaLimitRaw.length === 0) {
295
+ logger.error('Quota limit endpoint returned empty response');
296
+ console.error(`\n${COMMAND_NAME}: No quota data received.\n`);
297
+ process.exit(1);
298
+ }
299
+ // Parse and display quota limit
300
+ try {
301
+ const { formatted } = parseQuotaLimit(quotaLimitRaw);
302
+ console.log(formatted);
303
+ }
304
+ catch (error) {
305
+ logger.error(`Failed to parse quota limit: ${error}`);
306
+ throw error;
307
+ }
308
+ // Parse model usage if available
309
+ if (modelUsageRaw.length > 0) {
310
+ try {
311
+ const modelUsage = parseResponse(modelUsageRaw, 'model-usage');
312
+ logger.info('Model usage data received');
313
+ console.log('\nModel Usage:');
314
+ console.log(JSON.stringify(modelUsage, null, 2));
315
+ }
316
+ catch (error) {
317
+ logger.warn(`Failed to parse model usage: ${error}`);
318
+ }
319
+ }
320
+ // Parse tool usage if available
321
+ if (toolUsageRaw.length > 0) {
322
+ try {
323
+ const toolUsage = parseResponse(toolUsageRaw, 'tool-usage');
324
+ logger.info('Tool usage data received');
325
+ console.log('\nTool Usage:');
326
+ console.log(JSON.stringify(toolUsage, null, 2));
327
+ }
328
+ catch (error) {
329
+ logger.warn(`Failed to parse tool usage: ${error}`);
330
+ }
331
+ }
332
+ }
333
+ else {
334
+ // Print raw responses (one per line), skip empty ones
335
+ const endpointNames = ['quota/limit', 'model-usage', 'tool-usage'];
336
+ let hasOutput = false;
337
+ responses.forEach((response, index) => {
338
+ if (response.length > 0) {
339
+ console.log(response);
340
+ hasOutput = true;
341
+ }
342
+ else {
343
+ logger.warn(`Endpoint ${endpointNames[index]} returned empty response (0 bytes)`);
344
+ }
345
+ });
346
+ if (!hasOutput) {
347
+ console.error(`\n${COMMAND_NAME}: No data received from any endpoint.\n`);
348
+ process.exit(1);
349
+ }
350
+ }
351
+ logger.info('Completed successfully');
352
+ }
353
+ catch (error) {
354
+ if (error instanceof Error) {
355
+ logger.error(`${error.name}: ${error.message}`);
356
+ console.error(`\n${COMMAND_NAME}: ${error.message}\n`);
357
+ }
358
+ else {
359
+ logger.error(`Unknown error: ${String(error)}`);
360
+ console.error(`\n${COMMAND_NAME}: Unknown error occurred\n`);
361
+ }
362
+ process.exit(1);
363
+ }
364
+ }
365
+ // Run CLI
366
+ main();
367
+ //# sourceMappingURL=glm-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glm-quota.js","sourceRoot":"","sources":["../../bin/glm-quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=kimi-quota.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-quota.d.ts","sourceRoot":"","sources":["../../bin/kimi-quota.ts"],"names":[],"mappings":""}
@@ -0,0 +1,241 @@
1
+ #!/usr/bin/env bun
2
+ import { configureLogging, getLogger } from '../src/shared/logging.js';
3
+ const logger = getLogger('opencode-quota.cli.kimi');
4
+ const AUTH_JSON_PATH = `${process.env.HOME}/.local/share/opencode/auth.json`;
5
+ async function getCredentials() {
6
+ try {
7
+ const authResp = await fetch(`file://${AUTH_JSON_PATH}`);
8
+ if (!authResp.ok) {
9
+ throw new Error('Failed to read auth.json');
10
+ }
11
+ const auth = await authResp.text();
12
+ const authJson = JSON.parse(auth);
13
+ const kimiData = authJson['kimi-for-coding'] || authJson.kimi || authJson.moonshot;
14
+ if (!kimiData) {
15
+ logger.error('opencode-kimi-quota: Not configured. Run: opencode connect kimi-for-coding');
16
+ return null;
17
+ }
18
+ const kimiKey = typeof kimiData === 'string' ? kimiData : kimiData.key || kimiData.token;
19
+ if (!kimiKey) {
20
+ logger.error('opencode-kimi-quota: Not configured. Run: opencode connect kimi-for-coding');
21
+ return null;
22
+ }
23
+ return kimiKey;
24
+ }
25
+ catch {
26
+ logger.error('opencode-kimi-quota: Not configured. Run: opencode connect kimi');
27
+ return null;
28
+ }
29
+ }
30
+ async function queryBalance(apiKey) {
31
+ const url = 'https://api.kimi.com/coding/v1/usages';
32
+ logger.debug(`Making request to: ${url}`);
33
+ logger.debug(`Method: GET`);
34
+ logger.debug(`Authorization: ${apiKey.substring(0, 20)}***`);
35
+ const response = await fetch(url, {
36
+ method: 'GET',
37
+ headers: {
38
+ 'Authorization': `Bearer ${apiKey}`,
39
+ 'Accept': 'application/json',
40
+ },
41
+ });
42
+ const statusCode = response.status;
43
+ const body = await response.text();
44
+ logger.debug(`← Response: ${statusCode}, body: ${body.length} bytes`);
45
+ if (statusCode === 200) {
46
+ try {
47
+ const result = JSON.parse(body);
48
+ return {
49
+ usage: result.usage || null,
50
+ limits: result.limits || [],
51
+ };
52
+ }
53
+ catch (error) {
54
+ logger.debug(`Failed to parse response: ${error}`);
55
+ }
56
+ }
57
+ if (statusCode !== 200 && statusCode !== 401 && statusCode !== 403 && statusCode !== 404) {
58
+ throw new Error(`HTTP ${statusCode}: ${body.substring(0, 200)}`);
59
+ }
60
+ return {
61
+ usage: null,
62
+ limits: [],
63
+ };
64
+ }
65
+ function formatDurationCompact(ms) {
66
+ if (!ms)
67
+ return '';
68
+ let timestamp;
69
+ if (typeof ms === 'string') {
70
+ timestamp = new Date(ms).getTime();
71
+ }
72
+ else {
73
+ timestamp = ms;
74
+ }
75
+ const now = Date.now();
76
+ const diffMs = timestamp - now;
77
+ if (diffMs < 0) {
78
+ return 'now';
79
+ }
80
+ const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));
81
+ const hours = Math.floor((diffMs % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
82
+ const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));
83
+ const seconds = Math.floor((diffMs % (1000 * 60)) / 1000);
84
+ const parts = [];
85
+ if (days > 0)
86
+ parts.push(`${days}d`);
87
+ if (hours > 0)
88
+ parts.push(`${hours}h`);
89
+ if (minutes > 0)
90
+ parts.push(`${minutes}m`);
91
+ if (seconds > 0 || parts.length === 0)
92
+ parts.push(`${seconds}s`);
93
+ return parts.join(' ');
94
+ }
95
+ function formatLimitLabel(item) {
96
+ const window = item.window || {};
97
+ const duration = window.duration;
98
+ let timeUnit = window.timeUnit;
99
+ // Handle "TIME_UNIT_" prefix
100
+ if (timeUnit && timeUnit.startsWith('TIME_UNIT_')) {
101
+ timeUnit = timeUnit.replace('TIME_UNIT_', '');
102
+ }
103
+ if (duration == null) {
104
+ return item.name || item.title || item.scope || 'Unknown';
105
+ }
106
+ if (timeUnit === 'MINUTE') {
107
+ if (duration >= 60 && duration % 60 === 0) {
108
+ return `${duration / 60}h limit`;
109
+ }
110
+ return `${duration}m limit`;
111
+ }
112
+ if (timeUnit === 'HOUR') {
113
+ return `${duration}h limit`;
114
+ }
115
+ if (timeUnit === 'DAY') {
116
+ return `${duration}d limit`;
117
+ }
118
+ return `${duration} ${timeUnit} limit`;
119
+ }
120
+ function formatUsage(balance) {
121
+ console.log('');
122
+ console.log('Kimi Coding Plan Usage Statistics');
123
+ console.log('');
124
+ if (!balance.usage && (!balance.limits || balance.limits.length === 0)) {
125
+ console.log('No usage data available.');
126
+ console.log('');
127
+ console.log('Possible reasons:');
128
+ console.log(' - Not configured: Run `opencode connect kimi-for-coding`');
129
+ console.log(' - API key format mismatch');
130
+ console.log(' - No quota usage data available yet');
131
+ console.log('');
132
+ console.log('Please check your usage at:');
133
+ console.log(' https://platform.moonshot.ai/console');
134
+ console.log(' https://kimi-ai.chat/code/console');
135
+ return;
136
+ }
137
+ // Display main usage summary
138
+ if (balance.usage) {
139
+ const { limit, used, remaining, reset_at, resetTime } = balance.usage;
140
+ if (limit != null && used != null) {
141
+ const percentage = (used / limit) * 100;
142
+ console.log(`Total Usage: ${used} / ${limit} (${percentage.toFixed(1)}% used)`);
143
+ console.log(`Remaining: ${remaining ?? (limit - used).toFixed(0)}`);
144
+ const resetTimeField = reset_at || resetTime;
145
+ if (resetTimeField) {
146
+ const resetDate = new Date(resetTimeField);
147
+ console.log(`Next Reset: ${resetDate.toLocaleString()} (${formatDurationCompact(resetTimeField)})`);
148
+ }
149
+ }
150
+ console.log('');
151
+ }
152
+ // Display detailed limits
153
+ if (balance.limits && balance.limits.length > 0) {
154
+ console.log('Usage Details:');
155
+ console.log('');
156
+ for (const item of balance.limits) {
157
+ const detail = (item.detail || item);
158
+ const limit = detail.limit;
159
+ const used = detail.used;
160
+ const remaining = detail.remaining;
161
+ const resetAt = detail.reset_at || detail.resetTime;
162
+ if (limit != null) {
163
+ const label = formatLimitLabel(item);
164
+ console.log(` ${label}:`);
165
+ // Calculate used if not provided
166
+ const usedValue = used != null ? used : (remaining != null && limit != null ? limit - remaining : null);
167
+ if (usedValue != null) {
168
+ const percentage = (usedValue / limit) * 100;
169
+ console.log(` Used: ${usedValue} / ${limit} (${percentage.toFixed(1)}% used)`);
170
+ }
171
+ if (remaining != null) {
172
+ console.log(` Remaining: ${remaining}`);
173
+ }
174
+ if (resetAt) {
175
+ const resetDate = new Date(resetAt);
176
+ console.log(` Next Reset: ${resetDate.toLocaleString()} (${formatDurationCompact(resetAt)})`);
177
+ }
178
+ console.log('');
179
+ }
180
+ }
181
+ }
182
+ }
183
+ function showHelp() {
184
+ console.log('opencode-kimi-quota: Check Kimi Coding Plan quota from terminal');
185
+ console.log('');
186
+ console.log('Usage:');
187
+ console.log(' bun run bin/kimi-quota.ts [--debug|--raw]');
188
+ console.log('');
189
+ console.log('Options:');
190
+ console.log(' --debug, -d Enable debug logging');
191
+ console.log(' --raw Output raw JSON (default: formatted text)');
192
+ console.log('');
193
+ console.log('Environment:');
194
+ console.log(' LOG_LEVEL=debug Enable debug logging');
195
+ console.log('');
196
+ console.log('Authentication:');
197
+ console.log(' Reads from ~/.local/share/opencode/auth.json (kimi-for-coding, kimi, or moonshot provider)');
198
+ }
199
+ async function main() {
200
+ const args = process.argv.slice(2);
201
+ const debugIndex = args.findIndex(a => a === '--debug' || a === '-d');
202
+ const rawIndex = args.findIndex(a => a === '--raw');
203
+ const helpIndex = args.findIndex(a => a === '--help' || a === '-h');
204
+ if (helpIndex !== -1) {
205
+ showHelp();
206
+ process.exit(0);
207
+ }
208
+ const rawOutput = rawIndex !== -1;
209
+ if (debugIndex !== -1) {
210
+ configureLogging('debug');
211
+ }
212
+ logger.info('Starting opencode-kimi-quota CLI');
213
+ logger.debug(`Arguments: ${JSON.stringify({ debug: debugIndex !== -1, rawOutput, _: args })}`);
214
+ const apiKey = await getCredentials();
215
+ if (!apiKey) {
216
+ process.exit(1);
217
+ }
218
+ try {
219
+ const balance = await queryBalance(apiKey);
220
+ if (rawOutput) {
221
+ console.log(JSON.stringify(balance, null, 2));
222
+ process.exit(0);
223
+ }
224
+ formatUsage(balance);
225
+ }
226
+ catch (error) {
227
+ const errorMessage = error instanceof Error ? error.message : String(error);
228
+ logger.error(`Error: ${errorMessage}`);
229
+ if (error instanceof Error && error.stack) {
230
+ logger.debug(`Stack: ${error.stack}`);
231
+ }
232
+ if (!rawOutput) {
233
+ console.log('');
234
+ console.log('Kimi Usage Check Failed');
235
+ console.log(`Error: ${errorMessage}`);
236
+ }
237
+ process.exit(1);
238
+ }
239
+ }
240
+ main();
241
+ //# sourceMappingURL=kimi-quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-quota.js","sourceRoot":"","sources":["../../bin/kimi-quota.ts"],"names":[],"mappings":"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"}