opencode-kimi-rotator 1.0.1 → 1.2.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.
package/bin/cli.js CHANGED
@@ -1,10 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { KimiAccountManager } from '../dist/accounts.js';
4
+ import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'crypto';
5
+ import { promises as fs } from 'fs';
6
+ import { Buffer } from 'buffer';
4
7
 
5
8
  const args = process.argv.slice(2);
6
9
  const command = args[0];
7
10
 
11
+ const ENCRYPTION_ALGORITHM = 'aes-256-gcm';
12
+ const SALT_LENGTH = 32;
13
+ const IV_LENGTH = 16;
14
+ const AUTH_TAG_LENGTH = 16;
15
+ const KEY_LENGTH = 32;
16
+
8
17
  async function main() {
9
18
  const manager = new KimiAccountManager();
10
19
  await manager.init();
@@ -29,6 +38,24 @@ async function main() {
29
38
  case 'set-strategy':
30
39
  await setStrategy(manager, args.slice(1));
31
40
  break;
41
+ case 'stats':
42
+ await showStats(manager);
43
+ break;
44
+ case 'refresh-health':
45
+ await refreshHealth(manager);
46
+ break;
47
+ case 'set-auto-refresh':
48
+ await setAutoRefresh(manager, args.slice(1));
49
+ break;
50
+ case 'set-cooldown':
51
+ await setCooldown(manager, args.slice(1));
52
+ break;
53
+ case 'export-keys':
54
+ await exportKeys(manager, args.slice(1));
55
+ break;
56
+ case 'import-keys':
57
+ await importKeys(manager, args.slice(1));
58
+ break;
32
59
  case 'help':
33
60
  default:
34
61
  showHelp();
@@ -132,7 +159,9 @@ async function listKeys(manager) {
132
159
  const fullConfig = await storage.loadConfig();
133
160
  const activeIndex = fullConfig.activeIndex;
134
161
 
135
- console.log(`\nKimi API Keys (${accounts.length} total, strategy: ${fullConfig.rotationStrategy}):\n`);
162
+ console.log(
163
+ `\nKimi API Keys (${accounts.length} total, strategy: ${fullConfig.rotationStrategy}):\n`
164
+ );
136
165
 
137
166
  accounts.forEach((account, index) => {
138
167
  const isActive = index === activeIndex;
@@ -223,19 +252,318 @@ async function setStrategy(manager, args) {
223
252
  console.log(`āœ“ Rotation strategy set to: ${strategy}`);
224
253
  }
225
254
 
255
+ async function showStats(manager) {
256
+ const accounts = await manager.listKeys();
257
+
258
+ if (accounts.length === 0) {
259
+ console.log('No Kimi API keys configured.');
260
+ console.log('Run: opencode-kimi add-key <your-api-key>');
261
+ return;
262
+ }
263
+
264
+ console.log('\nšŸ“Š Usage Statistics\n');
265
+
266
+ let totalRequests = 0;
267
+ let totalSuccessful = 0;
268
+ let totalResponseTimes = [];
269
+ const today = new Date().toISOString().split('T')[0];
270
+ const last7Days = getLast7Days();
271
+
272
+ accounts.forEach((account, index) => {
273
+ console.log(`[${index}] ${account.name}`);
274
+ console.log(` Total Requests: ${account.totalRequests}`);
275
+ console.log(` Successful: ${account.successfulRequests}`);
276
+ console.log(` Failed: ${account.totalRequests - account.successfulRequests}`);
277
+
278
+ if (account.totalRequests > 0) {
279
+ const successRate = ((account.successfulRequests / account.totalRequests) * 100).toFixed(1);
280
+ console.log(` Success Rate: ${successRate}%`);
281
+ }
282
+
283
+ if (account.responseTimes && account.responseTimes.length > 0) {
284
+ const avg = average(account.responseTimes);
285
+ const min = Math.min(...account.responseTimes);
286
+ const max = Math.max(...account.responseTimes);
287
+ console.log(` Avg Response Time: ${avg}ms`);
288
+ console.log(` Response Time Range: ${min}ms - ${max}ms`);
289
+ totalResponseTimes.push(...account.responseTimes);
290
+ } else {
291
+ console.log(` Avg Response Time: N/A`);
292
+ }
293
+
294
+ const todayCount = account.dailyRequests?.[today] || 0;
295
+ console.log(` Requests Today: ${todayCount}`);
296
+
297
+ const weeklyTotal = last7Days.reduce(
298
+ (sum, day) => sum + (account.dailyRequests?.[day] || 0),
299
+ 0
300
+ );
301
+ console.log(` Requests Last 7 Days: ${weeklyTotal}`);
302
+
303
+ console.log();
304
+
305
+ totalRequests += account.totalRequests;
306
+ totalSuccessful += account.successfulRequests;
307
+ });
308
+
309
+ console.log('─'.repeat(50));
310
+ console.log('šŸ“ˆ Aggregate Statistics');
311
+ console.log(` Total Requests (All Keys): ${totalRequests}`);
312
+ console.log(` Total Successful: ${totalSuccessful}`);
313
+ if (totalRequests > 0) {
314
+ const overallRate = ((totalSuccessful / totalRequests) * 100).toFixed(1);
315
+ console.log(` Overall Success Rate: ${overallRate}%`);
316
+ }
317
+ if (totalResponseTimes.length > 0) {
318
+ const overallAvg = average(totalResponseTimes);
319
+ console.log(` Overall Avg Response Time: ${overallAvg}ms`);
320
+ }
321
+ console.log();
322
+ }
323
+
324
+ function getLast7Days() {
325
+ const days = [];
326
+ for (let i = 0; i < 7; i++) {
327
+ const d = new Date();
328
+ d.setDate(d.getDate() - i);
329
+ days.push(d.toISOString().split('T')[0]);
330
+ }
331
+ return days;
332
+ }
333
+
334
+ function average(arr) {
335
+ if (arr.length === 0) return 0;
336
+ return Math.round(arr.reduce((a, b) => a + b, 0) / arr.length);
337
+ }
338
+
339
+ async function refreshHealth(manager) {
340
+ const result = await manager.refreshHealthScores();
341
+
342
+ if (result.refreshed === 0) {
343
+ console.log('No keys needed health refresh.');
344
+ console.log('Keys must be below 100% health and past the cooldown period.');
345
+ return;
346
+ }
347
+
348
+ console.log(`āœ“ Refreshed health for ${result.refreshed} key(s):`);
349
+ result.details.forEach((detail) => {
350
+ console.log(` ${detail}`);
351
+ });
352
+ }
353
+
354
+ async function setAutoRefresh(manager, args) {
355
+ const enabled = args[0];
356
+
357
+ if (enabled !== 'true' && enabled !== 'false') {
358
+ console.error('Usage: opencode-kimi set-auto-refresh <true|false>');
359
+ console.error('');
360
+ console.error('When enabled, health scores will automatically refresh');
361
+ console.error('after the cooldown period when keys are rate limited.');
362
+ process.exit(1);
363
+ }
364
+
365
+ await manager.setAutoRefreshHealth(enabled === 'true');
366
+ console.log(`āœ“ Auto-refresh health: ${enabled}`);
367
+ }
368
+
369
+ async function setCooldown(manager, args) {
370
+ const minutes = parseInt(args[0], 10);
371
+
372
+ if (isNaN(minutes) || minutes < 1 || minutes > 1440) {
373
+ console.error('Usage: opencode-kimi set-cooldown <minutes>');
374
+ console.error('');
375
+ console.error('Set the cooldown period (in minutes) before health scores');
376
+ console.error('can be refreshed after a rate limit. Range: 1-1440');
377
+ console.error('');
378
+ console.error('Examples:');
379
+ console.error(' opencode-kimi set-cooldown 30 # 30 minutes (default)');
380
+ console.error(' opencode-kimi set-cooldown 60 # 1 hour');
381
+ console.error(' opencode-kimi set-cooldown 180 # 3 hours');
382
+ process.exit(1);
383
+ }
384
+
385
+ await manager.setHealthRefreshCooldown(minutes);
386
+ console.log(`āœ“ Health refresh cooldown: ${minutes} minutes`);
387
+ }
388
+
389
+ async function exportKeys(manager, args) {
390
+ const filePath = args[0] || 'kimi-keys-backup.json.enc';
391
+
392
+ const accounts = await manager.listKeys();
393
+ if (accounts.length === 0) {
394
+ console.log('No keys to export.');
395
+ return;
396
+ }
397
+
398
+ const { KimiStorage } = await import('../dist/storage.js');
399
+ const storage = new KimiStorage();
400
+ const config = await storage.loadConfig();
401
+
402
+ const exportData = {
403
+ version: 1,
404
+ exportedAt: new Date().toISOString(),
405
+ accounts: config.accounts,
406
+ rotationStrategy: config.rotationStrategy,
407
+ autoRefreshHealth: config.autoRefreshHealth,
408
+ healthRefreshCooldownMinutes: config.healthRefreshCooldownMinutes,
409
+ };
410
+
411
+ const password = await promptPassword('Enter encryption password: ');
412
+ const confirmPassword = await promptPassword('Confirm encryption password: ');
413
+
414
+ if (password !== confirmPassword) {
415
+ console.error('Error: Passwords do not match');
416
+ process.exit(1);
417
+ }
418
+
419
+ if (password.length < 8) {
420
+ console.error('Error: Password must be at least 8 characters');
421
+ process.exit(1);
422
+ }
423
+
424
+ const encrypted = encryptData(JSON.stringify(exportData), password);
425
+ await fs.writeFile(filePath, encrypted, 'utf-8');
426
+
427
+ console.log(`āœ“ Exported ${accounts.length} key(s) to: ${filePath}`);
428
+ console.log(' Keep this file and your password safe!');
429
+ }
430
+
431
+ async function importKeys(manager, args) {
432
+ const filePath = args[0];
433
+
434
+ if (!filePath) {
435
+ console.error('Usage: opencode-kimi import-keys <file>');
436
+ console.error('');
437
+ console.error('Import keys from an encrypted backup file.');
438
+ console.error('Keys will be merged with existing keys (duplicates skipped).');
439
+ process.exit(1);
440
+ }
441
+
442
+ let encryptedData;
443
+ try {
444
+ encryptedData = await fs.readFile(filePath, 'utf-8');
445
+ } catch {
446
+ console.error(`Error: Cannot read file: ${filePath}`);
447
+ process.exit(1);
448
+ }
449
+
450
+ const password = await promptPassword('Enter decryption password: ');
451
+
452
+ let decrypted;
453
+ try {
454
+ decrypted = decryptData(encryptedData, password);
455
+ } catch {
456
+ console.error('Error: Failed to decrypt file. Wrong password?');
457
+ process.exit(1);
458
+ }
459
+
460
+ let importData;
461
+ try {
462
+ importData = JSON.parse(decrypted);
463
+ } catch {
464
+ console.error('Error: Invalid backup file format');
465
+ process.exit(1);
466
+ }
467
+
468
+ if (!importData.accounts || !Array.isArray(importData.accounts)) {
469
+ console.error('Error: Invalid backup file format');
470
+ process.exit(1);
471
+ }
472
+
473
+ const existingKeys = await manager.listKeys();
474
+ const existingKeySet = new Set(existingKeys.map((a) => a.key));
475
+
476
+ let imported = 0;
477
+ let skipped = 0;
478
+
479
+ for (const account of importData.accounts) {
480
+ if (existingKeySet.has(account.key)) {
481
+ skipped++;
482
+ continue;
483
+ }
484
+
485
+ try {
486
+ await manager.addKey(account.key, account.name);
487
+ imported++;
488
+ } catch (error) {
489
+ console.error(`Error importing key "${account.name}": ${error.message}`);
490
+ }
491
+ }
492
+
493
+ console.log(`āœ“ Import complete:`);
494
+ console.log(` Imported: ${imported} key(s)`);
495
+ console.log(` Skipped (duplicates): ${skipped} key(s)`);
496
+
497
+ if (imported > 0 && importData.rotationStrategy) {
498
+ await manager.setRotationStrategy(importData.rotationStrategy);
499
+ console.log(` Restored rotation strategy: ${importData.rotationStrategy}`);
500
+ }
501
+ }
502
+
503
+ function encryptData(data, password) {
504
+ const salt = randomBytes(SALT_LENGTH);
505
+ const iv = randomBytes(IV_LENGTH);
506
+ const key = scryptSync(password, salt, KEY_LENGTH);
507
+
508
+ const cipher = createCipheriv(ENCRYPTION_ALGORITHM, key, iv);
509
+ const encrypted = Buffer.concat([cipher.update(data, 'utf-8'), cipher.final()]);
510
+ const authTag = cipher.getAuthTag();
511
+
512
+ const result = Buffer.concat([salt, iv, authTag, encrypted]);
513
+ return result.toString('base64');
514
+ }
515
+
516
+ function decryptData(encryptedData, password) {
517
+ const data = Buffer.from(encryptedData, 'base64');
518
+
519
+ const salt = data.subarray(0, SALT_LENGTH);
520
+ const iv = data.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);
521
+ const authTag = data.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
522
+ const encrypted = data.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
523
+
524
+ const key = scryptSync(password, salt, KEY_LENGTH);
525
+
526
+ const decipher = createDecipheriv(ENCRYPTION_ALGORITHM, key, iv);
527
+ decipher.setAuthTag(authTag);
528
+
529
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
530
+ return decrypted.toString('utf-8');
531
+ }
532
+
533
+ async function promptPassword(prompt) {
534
+ const { createInterface } = await import('readline');
535
+ const rl = createInterface({
536
+ input: process.stdin,
537
+ output: process.stdout,
538
+ });
539
+
540
+ return new Promise((resolve) => {
541
+ rl.question(prompt, (answer) => {
542
+ rl.close();
543
+ resolve(answer);
544
+ });
545
+ });
546
+ }
547
+
226
548
  function showHelp() {
227
549
  console.log('Kimi API Key Rotator for OpenCode');
228
550
  console.log('');
229
551
  console.log('Usage: opencode-kimi <command> [options]');
230
552
  console.log('');
231
553
  console.log('Commands:');
232
- console.log(' add-key <key> [name] Add a new Kimi API key');
233
- console.log(' list-keys List all configured keys');
234
- console.log(' remove-key <index> Remove a key by index');
235
- console.log(' rotate Manually rotate to next key');
236
- console.log(' use-key <index> Switch to a specific key');
237
- console.log(' set-strategy <strategy> Set rotation strategy');
238
- console.log(' help Show this help message');
554
+ console.log(' add-key <key> [name] Add a new Kimi API key');
555
+ console.log(' list-keys List all configured keys');
556
+ console.log(' remove-key <index> Remove a key by index');
557
+ console.log(' rotate Manually rotate to next key');
558
+ console.log(' use-key <index> Switch to a specific key');
559
+ console.log(' set-strategy <strategy> Set rotation strategy');
560
+ console.log(' stats Show usage statistics');
561
+ console.log(' refresh-health Manually refresh health scores');
562
+ console.log(' set-auto-refresh <true|false> Enable/disable auto-refresh');
563
+ console.log(' set-cooldown <minutes> Set health refresh cooldown');
564
+ console.log(' export-keys [file] Export keys to encrypted file');
565
+ console.log(' import-keys <file> Import keys from encrypted file');
566
+ console.log(' help Show this help message');
239
567
  console.log('');
240
568
  console.log('Strategies:');
241
569
  console.log(' round-robin - Cycle through keys sequentially');
@@ -247,6 +575,10 @@ function showHelp() {
247
575
  console.log(' opencode-kimi list-keys');
248
576
  console.log(' opencode-kimi rotate');
249
577
  console.log(' opencode-kimi use-key 1');
578
+ console.log(' opencode-kimi stats');
579
+ console.log(' opencode-kimi refresh-health');
580
+ console.log(' opencode-kimi export-keys backup.json.enc');
581
+ console.log(' opencode-kimi import-keys backup.json.enc');
250
582
  }
251
583
 
252
584
  function maskKey(key) {
@@ -13,8 +13,9 @@ export declare class KimiAccountManager {
13
13
  init(): Promise<void>;
14
14
  getNextAccount(forceRotation?: boolean): Promise<RotationResult | null>;
15
15
  markAccountUsed(index: number): Promise<void>;
16
- markAccountSuccess(index: number): Promise<void>;
16
+ markAccountSuccess(index: number, responseTime?: number, date?: string): Promise<void>;
17
17
  markAccountRateLimited(index: number, retryAfterMs: number): Promise<void>;
18
+ markAccountBillingLimited(index: number): Promise<void>;
18
19
  markAccountFailure(index: number): Promise<void>;
19
20
  getActiveKey(): Promise<string | null>;
20
21
  setRotationStrategy(strategy: RotationStrategy): Promise<void>;
@@ -23,6 +24,12 @@ export declare class KimiAccountManager {
23
24
  listKeys(): Promise<KimiAccount[]>;
24
25
  rotateToNext(): Promise<RotationResult | null>;
25
26
  setActiveIndex(index: number): Promise<void>;
27
+ setAutoRefreshHealth(enabled: boolean): Promise<void>;
28
+ setHealthRefreshCooldown(minutes: number): Promise<void>;
29
+ refreshHealthScores(): Promise<{
30
+ refreshed: number;
31
+ details: string[];
32
+ }>;
26
33
  private roundRobinRotation;
27
34
  private stickyRotation;
28
35
  private healthBasedRotation;
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAC;AAE7D,KAAK,gBAAgB,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;AAElE,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,WAAW,CAAM;;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,cAAc,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwBrE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIlC,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI9C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIpC,kBAAkB;YAsBlB,cAAc;YAoCd,mBAAmB;IAgDjC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;YAIP,UAAU;CAOzB"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,YAAY,CAAC;AAE7D,KAAK,gBAAgB,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;AAElE,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,WAAW,CAAM;;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,cAAc,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwBrE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtF,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIlC,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI9C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,mBAAmB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;YAgChE,kBAAkB;YAsBlB,cAAc;YAoCd,mBAAmB;IAuDjC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,aAAa;YAKP,UAAU;CAOzB"}
package/dist/accounts.js CHANGED
@@ -35,14 +35,27 @@ export class KimiAccountManager {
35
35
  totalRequests: (await this.getAccount(index)).totalRequests + 1,
36
36
  });
37
37
  }
38
- async markAccountSuccess(index) {
38
+ async markAccountSuccess(index, responseTime, date) {
39
39
  const account = await this.getAccount(index);
40
40
  const newHealthScore = Math.min(100, account.healthScore + 2);
41
- await this.storage.updateAccount(index, {
41
+ const updates = {
42
42
  healthScore: newHealthScore,
43
43
  successfulRequests: account.successfulRequests + 1,
44
44
  consecutiveFailures: 0,
45
- });
45
+ };
46
+ if (responseTime !== undefined) {
47
+ const responseTimes = [...account.responseTimes, responseTime];
48
+ if (responseTimes.length > 100) {
49
+ responseTimes.shift();
50
+ }
51
+ updates.responseTimes = responseTimes;
52
+ }
53
+ if (date) {
54
+ const dailyRequests = { ...account.dailyRequests };
55
+ dailyRequests[date] = (dailyRequests[date] || 0) + 1;
56
+ updates.dailyRequests = dailyRequests;
57
+ }
58
+ await this.storage.updateAccount(index, updates);
46
59
  }
47
60
  async markAccountRateLimited(index, retryAfterMs) {
48
61
  const account = await this.getAccount(index);
@@ -53,6 +66,20 @@ export class KimiAccountManager {
53
66
  consecutiveFailures: account.consecutiveFailures + 1,
54
67
  });
55
68
  }
69
+ async markAccountBillingLimited(index) {
70
+ const account = await this.getAccount(index);
71
+ const newHealthScore = Math.max(0, account.healthScore - 30);
72
+ // Set cooldown until end of current day (midnight) + 24 hours
73
+ // This ensures the key won't be tried again for at least 24 hours
74
+ const now = new Date();
75
+ const endOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 0, 0);
76
+ const cooldownUntil = endOfDay.getTime();
77
+ await this.storage.updateAccount(index, {
78
+ healthScore: newHealthScore,
79
+ billingLimitResetTime: cooldownUntil,
80
+ consecutiveFailures: account.consecutiveFailures + 1,
81
+ });
82
+ }
56
83
  async markAccountFailure(index) {
57
84
  const account = await this.getAccount(index);
58
85
  const newHealthScore = Math.max(0, account.healthScore - 20);
@@ -85,6 +112,45 @@ export class KimiAccountManager {
85
112
  async setActiveIndex(index) {
86
113
  return this.storage.setActiveIndex(index);
87
114
  }
115
+ async setAutoRefreshHealth(enabled) {
116
+ const config = await this.storage.loadConfig();
117
+ config.autoRefreshHealth = enabled;
118
+ await this.storage.saveConfig(config);
119
+ }
120
+ async setHealthRefreshCooldown(minutes) {
121
+ if (minutes < 1 || minutes > 1440) {
122
+ throw new Error('Cooldown must be between 1 and 1440 minutes (24 hours)');
123
+ }
124
+ const config = await this.storage.loadConfig();
125
+ config.healthRefreshCooldownMinutes = minutes;
126
+ await this.storage.saveConfig(config);
127
+ }
128
+ async refreshHealthScores() {
129
+ const config = await this.storage.loadConfig();
130
+ const now = Date.now();
131
+ const cooldownMs = config.healthRefreshCooldownMinutes * 60 * 1000;
132
+ let refreshed = 0;
133
+ const details = [];
134
+ for (let i = 0; i < config.accounts.length; i++) {
135
+ const account = config.accounts[i];
136
+ const timeSinceRateLimit = now - account.rateLimitResetTime;
137
+ const shouldRefresh = config.autoRefreshHealth &&
138
+ account.healthScore < 100 &&
139
+ timeSinceRateLimit >= cooldownMs &&
140
+ account.rateLimitResetTime <= now;
141
+ if (shouldRefresh) {
142
+ const oldScore = account.healthScore;
143
+ const newScore = Math.min(100, oldScore + 10);
144
+ await this.storage.updateAccount(i, {
145
+ healthScore: newScore,
146
+ consecutiveFailures: 0,
147
+ });
148
+ refreshed++;
149
+ details.push(`${account.name}: ${oldScore}% → ${newScore}%`);
150
+ }
151
+ }
152
+ return { refreshed, details };
153
+ }
88
154
  async roundRobinRotation(config) {
89
155
  const availableIndices = this.getAvailableIndices(config);
90
156
  if (availableIndices.length === 0) {
@@ -93,7 +159,7 @@ export class KimiAccountManager {
93
159
  return { account, index: soonestIndex, reason: 'all-rate-limited' };
94
160
  }
95
161
  const currentIndex = config.activeIndex;
96
- let nextIndex = availableIndices.find(idx => idx > currentIndex) ?? availableIndices[0];
162
+ const nextIndex = availableIndices.find((idx) => idx > currentIndex) ?? availableIndices[0];
97
163
  await this.storage.setActiveIndex(nextIndex);
98
164
  await this.markAccountUsed(nextIndex);
99
165
  return {
@@ -113,7 +179,7 @@ export class KimiAccountManager {
113
179
  reason: 'sticky',
114
180
  };
115
181
  }
116
- const availableIndices = this.getAvailableIndices(config).filter(idx => idx !== currentIndex);
182
+ const availableIndices = this.getAvailableIndices(config).filter((idx) => idx !== currentIndex);
117
183
  if (availableIndices.length === 0) {
118
184
  const soonestIndex = this.getSoonestAvailableIndex(config);
119
185
  const account = config.accounts[soonestIndex];
@@ -132,7 +198,9 @@ export class KimiAccountManager {
132
198
  async healthBasedRotation(config, forceRotation) {
133
199
  const currentIndex = config.activeIndex;
134
200
  const currentAccount = config.accounts[currentIndex];
135
- if (!forceRotation && !this.isRateLimited(currentAccount) && currentAccount.healthScore > this.minHealthScore) {
201
+ if (!forceRotation &&
202
+ !this.isRateLimited(currentAccount) &&
203
+ currentAccount.healthScore > this.minHealthScore) {
136
204
  await this.markAccountUsed(currentIndex);
137
205
  return {
138
206
  account: currentAccount,
@@ -192,12 +260,13 @@ export class KimiAccountManager {
192
260
  return soonestIndex;
193
261
  }
194
262
  isRateLimited(account) {
195
- return account.rateLimitResetTime > Date.now();
263
+ const now = Date.now();
264
+ return account.rateLimitResetTime > now || account.billingLimitResetTime > now;
196
265
  }
197
266
  async getAccount(index) {
198
267
  const accounts = await this.storage.listAccounts();
199
268
  if (index < 0 || index >= accounts.length) {
200
- throw new Error(`Invalid account index: ${index}`);
269
+ throw new Error(`Invalid account index: ${String(index)}`);
201
270
  }
202
271
  return accounts[index];
203
272
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Plugin } from "@opencode-ai/plugin";
1
+ import type { Plugin } from '@opencode-ai/plugin';
2
2
  import type { KimiAccount } from './types.js';
3
3
  export declare const KimiRotatorPlugin: Plugin;
4
4
  export default KimiRotatorPlugin;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAqE9C,eAAO,MAAM,iBAAiB,EAAE,MAqG/B,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAyE9C,eAAO,MAAM,iBAAiB,EAAE,MA4I/B,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,CAAC"}