opencode-kimi-rotator 1.0.0 → 1.1.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/dist/plugin.js CHANGED
@@ -42,7 +42,9 @@ async function flushToastQueue() {
42
42
  const toast = toastQueue.shift();
43
43
  if (toast) {
44
44
  try {
45
- await openCodeClient.tui.showToast({ body: { message: toast.message, variant: toast.variant } });
45
+ await openCodeClient.tui.showToast({
46
+ body: { message: toast.message, variant: toast.variant },
47
+ });
46
48
  }
47
49
  catch {
48
50
  return;
@@ -63,6 +65,9 @@ export const KimiRotatorPlugin = async ({ client }) => {
63
65
  globalThis.fetch = async (input, init) => {
64
66
  const url = typeof input === 'string' ? input : input.toString();
65
67
  if (url.includes('api.kimi.com')) {
68
+ if (!accountManager) {
69
+ throw new Error('Account manager not initialized');
70
+ }
66
71
  const nextAccount = await accountManager.getNextAccount();
67
72
  if (nextAccount) {
68
73
  currentAccountIndex = nextAccount.index;
@@ -70,20 +75,26 @@ export const KimiRotatorPlugin = async ({ client }) => {
70
75
  const position = nextAccount.index + 1;
71
76
  const allKeysNow = await accountManager.listKeys();
72
77
  const total = allKeysNow.length;
73
- await showToast(`🔄 Using key: ${keyLabel} (${position}/${total})`, 'info');
78
+ await showToast(`🔄 Using key: ${keyLabel} (${String(position)}/${String(total)})`, 'info');
74
79
  const headers = new Headers(init?.headers);
75
80
  headers.set('x-api-key', nextAccount.account.key);
76
81
  headers.delete('Authorization');
82
+ const requestStartTime = Date.now();
83
+ const today = new Date().toISOString().split('T')[0];
84
+ if (!originalFetch) {
85
+ throw new Error('Original fetch not available');
86
+ }
77
87
  try {
78
88
  const response = await originalFetch(input, { ...init, headers });
89
+ const responseTime = Date.now() - requestStartTime;
79
90
  if (response.status === 429) {
80
91
  const retryAfter = response.headers.get('retry-after');
81
92
  const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
82
93
  await accountManager.markAccountRateLimited(currentAccountIndex, retryAfterMs);
83
- await showToast(`⚠️ Key ${position} rate limited`, 'warning');
94
+ await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
84
95
  }
85
96
  else if (response.ok) {
86
- await accountManager.markAccountSuccess(currentAccountIndex);
97
+ await accountManager.markAccountSuccess(currentAccountIndex, responseTime, today);
87
98
  }
88
99
  else if (response.status >= 500) {
89
100
  await accountManager.markAccountFailure(currentAccountIndex);
@@ -96,21 +107,26 @@ export const KimiRotatorPlugin = async ({ client }) => {
96
107
  }
97
108
  }
98
109
  }
110
+ if (!originalFetch) {
111
+ throw new Error('Original fetch not available');
112
+ }
99
113
  return originalFetch(input, init);
100
114
  };
101
115
  const showInitialToast = async () => {
102
- await new Promise(resolve => setTimeout(resolve, 500));
116
+ await new Promise((resolve) => setTimeout(resolve, 500));
103
117
  await flushToastQueue();
104
- await showToast("🎉 Kimi Rotator Plugin loaded!", 'info');
118
+ await showToast('🎉 Kimi Rotator Plugin loaded!', 'info');
105
119
  };
106
- showInitialToast().catch(() => { });
120
+ showInitialToast().catch(() => undefined);
107
121
  const pluginReturn = {
108
122
  auth: {
109
123
  provider: 'kimi-rotator',
110
- methods: [{
124
+ methods: [
125
+ {
111
126
  type: 'api',
112
127
  label: 'Kimi API Key',
113
- }],
128
+ },
129
+ ],
114
130
  loader: async () => {
115
131
  const auth = await getAuth();
116
132
  if (!auth) {
@@ -122,7 +138,7 @@ export const KimiRotatorPlugin = async ({ client }) => {
122
138
  baseURL: kimiBaseUrl,
123
139
  async fetch(input, init) {
124
140
  return globalThis.fetch(input, init);
125
- }
141
+ },
126
142
  };
127
143
  },
128
144
  },
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAGZ,MAAM,YAAY,CAAC;AAOpB,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAGjB;;IAOI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAkBzC,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAuB5D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKtC,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQ/C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAWlE,WAAW;CAgB1B"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,kBAAkB,EAElB,WAAW,EAGZ,MAAM,YAAY,CAAC;AAOpB,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAGjB;;IAOI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrB,UAAU,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAkBzC,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAuB5D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3C,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKtC,gBAAgB,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQ/C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAWlE,WAAW;CAgB1B"}
package/dist/storage.js CHANGED
@@ -68,14 +68,14 @@ export class KimiStorage {
68
68
  }
69
69
  async addAccount(key, name) {
70
70
  const config = await this.loadConfig();
71
- const existingIndex = config.accounts.findIndex(a => a.key === key);
71
+ const existingIndex = config.accounts.findIndex((a) => a.key === key);
72
72
  if (existingIndex !== -1) {
73
73
  throw new Error('This API key already exists');
74
74
  }
75
75
  const now = Date.now();
76
76
  const newAccount = {
77
77
  key,
78
- name: name || `Account ${config.accounts.length + 1}`,
78
+ name: name ?? `Account ${config.accounts.length + 1}`,
79
79
  addedAt: now,
80
80
  lastUsed: now,
81
81
  ...DEFAULT_ACCOUNT,
@@ -87,7 +87,7 @@ export class KimiStorage {
87
87
  async removeAccount(index) {
88
88
  const config = await this.loadConfig();
89
89
  if (index < 0 || index >= config.accounts.length) {
90
- throw new Error(`Invalid account index: ${index}`);
90
+ throw new Error(`Invalid account index: ${String(index)}`);
91
91
  }
92
92
  config.accounts.splice(index, 1);
93
93
  if (config.activeIndex >= config.accounts.length) {
@@ -109,7 +109,7 @@ export class KimiStorage {
109
109
  async setActiveIndex(index) {
110
110
  const config = await this.loadConfig();
111
111
  if (index < 0 || index >= config.accounts.length) {
112
- throw new Error(`Invalid account index: ${index}`);
112
+ throw new Error(`Invalid account index: ${String(index)}`);
113
113
  }
114
114
  config.activeIndex = index;
115
115
  await this.saveConfig(config);
@@ -117,7 +117,7 @@ export class KimiStorage {
117
117
  async updateAccount(index, updates) {
118
118
  const config = await this.loadConfig();
119
119
  if (index < 0 || index >= config.accounts.length) {
120
- throw new Error(`Invalid account index: ${index}`);
120
+ throw new Error(`Invalid account index: ${String(index)}`);
121
121
  }
122
122
  config.accounts[index] = { ...config.accounts[index], ...updates };
123
123
  await this.saveConfig(config);
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -9,6 +9,8 @@ export declare const KimiAccountSchema: z.ZodObject<{
9
9
  consecutiveFailures: z.ZodDefault<z.ZodNumber>;
10
10
  totalRequests: z.ZodDefault<z.ZodNumber>;
11
11
  successfulRequests: z.ZodDefault<z.ZodNumber>;
12
+ responseTimes: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
13
+ dailyRequests: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
12
14
  }, "strip", z.ZodTypeAny, {
13
15
  key: string;
14
16
  addedAt: number;
@@ -18,6 +20,8 @@ export declare const KimiAccountSchema: z.ZodObject<{
18
20
  consecutiveFailures: number;
19
21
  totalRequests: number;
20
22
  successfulRequests: number;
23
+ responseTimes: number[];
24
+ dailyRequests: Record<string, number>;
21
25
  name?: string | undefined;
22
26
  }, {
23
27
  key: string;
@@ -29,6 +33,8 @@ export declare const KimiAccountSchema: z.ZodObject<{
29
33
  consecutiveFailures?: number | undefined;
30
34
  totalRequests?: number | undefined;
31
35
  successfulRequests?: number | undefined;
36
+ responseTimes?: number[] | undefined;
37
+ dailyRequests?: Record<string, number> | undefined;
32
38
  }>;
33
39
  export declare const KimiAccountsConfigSchema: z.ZodObject<{
34
40
  version: z.ZodDefault<z.ZodNumber>;
@@ -42,6 +48,8 @@ export declare const KimiAccountsConfigSchema: z.ZodObject<{
42
48
  consecutiveFailures: z.ZodDefault<z.ZodNumber>;
43
49
  totalRequests: z.ZodDefault<z.ZodNumber>;
44
50
  successfulRequests: z.ZodDefault<z.ZodNumber>;
51
+ responseTimes: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
52
+ dailyRequests: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodNumber>>;
45
53
  }, "strip", z.ZodTypeAny, {
46
54
  key: string;
47
55
  addedAt: number;
@@ -51,6 +59,8 @@ export declare const KimiAccountsConfigSchema: z.ZodObject<{
51
59
  consecutiveFailures: number;
52
60
  totalRequests: number;
53
61
  successfulRequests: number;
62
+ responseTimes: number[];
63
+ dailyRequests: Record<string, number>;
54
64
  name?: string | undefined;
55
65
  }, {
56
66
  key: string;
@@ -62,9 +72,13 @@ export declare const KimiAccountsConfigSchema: z.ZodObject<{
62
72
  consecutiveFailures?: number | undefined;
63
73
  totalRequests?: number | undefined;
64
74
  successfulRequests?: number | undefined;
75
+ responseTimes?: number[] | undefined;
76
+ dailyRequests?: Record<string, number> | undefined;
65
77
  }>, "many">;
66
78
  activeIndex: z.ZodDefault<z.ZodNumber>;
67
79
  rotationStrategy: z.ZodDefault<z.ZodEnum<["round-robin", "health-based", "sticky"]>>;
80
+ autoRefreshHealth: z.ZodDefault<z.ZodBoolean>;
81
+ healthRefreshCooldownMinutes: z.ZodDefault<z.ZodNumber>;
68
82
  }, "strip", z.ZodTypeAny, {
69
83
  version: number;
70
84
  accounts: {
@@ -76,10 +90,14 @@ export declare const KimiAccountsConfigSchema: z.ZodObject<{
76
90
  consecutiveFailures: number;
77
91
  totalRequests: number;
78
92
  successfulRequests: number;
93
+ responseTimes: number[];
94
+ dailyRequests: Record<string, number>;
79
95
  name?: string | undefined;
80
96
  }[];
81
97
  activeIndex: number;
82
98
  rotationStrategy: "round-robin" | "health-based" | "sticky";
99
+ autoRefreshHealth: boolean;
100
+ healthRefreshCooldownMinutes: number;
83
101
  }, {
84
102
  accounts: {
85
103
  key: string;
@@ -91,10 +109,14 @@ export declare const KimiAccountsConfigSchema: z.ZodObject<{
91
109
  consecutiveFailures?: number | undefined;
92
110
  totalRequests?: number | undefined;
93
111
  successfulRequests?: number | undefined;
112
+ responseTimes?: number[] | undefined;
113
+ dailyRequests?: Record<string, number> | undefined;
94
114
  }[];
95
115
  version?: number | undefined;
96
116
  activeIndex?: number | undefined;
97
117
  rotationStrategy?: "round-robin" | "health-based" | "sticky" | undefined;
118
+ autoRefreshHealth?: boolean | undefined;
119
+ healthRefreshCooldownMinutes?: number | undefined;
98
120
  }>;
99
121
  export type KimiAccount = z.infer<typeof KimiAccountSchema>;
100
122
  export type KimiAccountsConfig = z.infer<typeof KimiAccountsConfigSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKnC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAM7E,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAI/D,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAQ7E,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAM/D,CAAC"}
package/dist/types.js CHANGED
@@ -9,12 +9,16 @@ export const KimiAccountSchema = z.object({
9
9
  consecutiveFailures: z.number().default(0),
10
10
  totalRequests: z.number().default(0),
11
11
  successfulRequests: z.number().default(0),
12
+ responseTimes: z.array(z.number()).default([]),
13
+ dailyRequests: z.record(z.number()).default({}),
12
14
  });
13
15
  export const KimiAccountsConfigSchema = z.object({
14
16
  version: z.number().default(1),
15
17
  accounts: z.array(KimiAccountSchema),
16
18
  activeIndex: z.number().default(0),
17
19
  rotationStrategy: z.enum(['round-robin', 'health-based', 'sticky']).default('health-based'),
20
+ autoRefreshHealth: z.boolean().default(true),
21
+ healthRefreshCooldownMinutes: z.number().min(1).max(1440).default(30),
18
22
  });
19
23
  export const DEFAULT_ACCOUNT = {
20
24
  rateLimitResetTime: 0,
@@ -22,10 +26,14 @@ export const DEFAULT_ACCOUNT = {
22
26
  consecutiveFailures: 0,
23
27
  totalRequests: 0,
24
28
  successfulRequests: 0,
29
+ responseTimes: [],
30
+ dailyRequests: {},
25
31
  };
26
32
  export const DEFAULT_CONFIG = {
27
33
  version: 1,
28
34
  activeIndex: 0,
29
35
  rotationStrategy: 'health-based',
36
+ autoRefreshHealth: true,
37
+ healthRefreshCooldownMinutes: 30,
30
38
  };
31
39
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACpD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;CAC5F,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,eAAe,GAAsD;IAChF,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,CAAC;IACtB,aAAa,EAAE,CAAC;IAChB,kBAAkB,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAyC;IAClE,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,cAAc;CACjC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACpD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC3F,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACtE,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,eAAe,GAAsD;IAChF,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,GAAG;IAChB,mBAAmB,EAAE,CAAC;IACtB,aAAa,EAAE,CAAC;IAChB,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,EAAE;IACjB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAyC;IAClE,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,cAAc;IAChC,iBAAiB,EAAE,IAAI;IACvB,4BAA4B,EAAE,EAAE;CACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-kimi-rotator",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Kimi API Key Rotator for OpenCode - Automatically rotate between multiple Kimi API keys to handle rate limits",
5
5
  "main": "./dist/plugin.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,9 +14,15 @@
14
14
  "bundle": "esbuild src/plugin.ts --bundle --platform=node --format=esm --outfile=dist/plugin.bundle.js --external:@opencode-ai/plugin --packages=bundle",
15
15
  "dev": "tsc --watch",
16
16
  "typecheck": "tsc --noEmit",
17
+ "lint": "eslint .",
18
+ "lint:fix": "eslint . --fix",
19
+ "format": "prettier --write .",
20
+ "format:check": "prettier --check .",
17
21
  "clean": "rm -rf dist",
18
22
  "install:plugin": "npm run bundle && mkdir -p ~/.config/opencode/plugins && cp dist/plugin.bundle.js ~/.config/opencode/plugins/kimi-rotator.js",
19
- "prepublishOnly": "npm run build"
23
+ "postinstall": "npm run install:plugin && echo '\n✓ Kimi Rotator Plugin installed/updated!' && echo ' Location: ~/.config/opencode/plugins/kimi-rotator.js' && echo ' Restart OpenCode if currently running.'",
24
+ "prepublishOnly": "npm run build",
25
+ "ci": "npm run lint && npm run format:check && npm run typecheck"
20
26
  },
21
27
  "keywords": [
22
28
  "opencode",
@@ -40,15 +46,20 @@
40
46
  },
41
47
  "homepage": "https://github.com/deyndev/opencode-kimi-rotator#readme",
42
48
  "dependencies": {
43
- "@opencode-ai/plugin": "^0.15.30",
49
+ "@opencode-ai/plugin": "^1.1.48",
44
50
  "proper-lockfile": "^4.1.2",
45
51
  "zod": "^3.22.4"
46
52
  },
47
53
  "devDependencies": {
54
+ "@eslint/js": "^9.19.0",
48
55
  "@types/node": "^20.10.0",
49
56
  "@types/proper-lockfile": "^4.1.4",
50
57
  "esbuild": "^0.27.2",
51
- "typescript": "^5.3.0"
58
+ "eslint": "^9.19.0",
59
+ "eslint-config-prettier": "^10.0.1",
60
+ "prettier": "^3.4.2",
61
+ "typescript": "^5.3.0",
62
+ "typescript-eslint": "^8.22.0"
52
63
  },
53
64
  "files": [
54
65
  "dist",
@@ -63,4 +74,4 @@
63
74
  "publishConfig": {
64
75
  "access": "public"
65
76
  }
66
- }
77
+ }
package/src/plugin.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 { KimiAccountManager } from './accounts.js';
3
3
  import type { KimiAccount } from './types.js';
4
4
 
@@ -8,7 +8,7 @@ interface OpenCodeAuth {
8
8
  }
9
9
 
10
10
  let accountManager: KimiAccountManager | null = null;
11
- let currentAccountIndex: number = 0;
11
+ let currentAccountIndex = 0;
12
12
  let originalFetch: typeof globalThis.fetch | null = null;
13
13
 
14
14
  async function getAccountManager(): Promise<KimiAccountManager> {
@@ -37,11 +37,13 @@ async function getAuth(): Promise<OpenCodeAuth | null> {
37
37
 
38
38
  let openCodeClient: {
39
39
  tui?: {
40
- showToast: (options: { body: { message: string; variant: 'info' | 'warning' | 'error' } }) => Promise<unknown>;
40
+ showToast: (options: {
41
+ body: { message: string; variant: 'info' | 'warning' | 'error' };
42
+ }) => Promise<unknown>;
41
43
  };
42
44
  } | null = null;
43
45
 
44
- let toastQueue: Array<{ message: string; variant: 'info' | 'warning' | 'error' }> = [];
46
+ let toastQueue: { message: string; variant: 'info' | 'warning' | 'error' }[] = [];
45
47
 
46
48
  async function showToast(message: string, variant: 'info' | 'warning' | 'error' = 'info') {
47
49
  if (!openCodeClient?.tui?.showToast) {
@@ -61,7 +63,9 @@ async function flushToastQueue() {
61
63
  const toast = toastQueue.shift();
62
64
  if (toast) {
63
65
  try {
64
- await openCodeClient.tui.showToast({ body: { message: toast.message, variant: toast.variant } });
66
+ await openCodeClient.tui.showToast({
67
+ body: { message: toast.message, variant: toast.variant },
68
+ });
65
69
  } catch {
66
70
  return;
67
71
  }
@@ -83,64 +87,83 @@ export const KimiRotatorPlugin: Plugin = async ({ client }) => {
83
87
  }
84
88
 
85
89
  originalFetch = globalThis.fetch;
86
- globalThis.fetch = async (input: string | Request | URL, init?: RequestInit): Promise<Response> => {
90
+ globalThis.fetch = async (
91
+ input: string | Request | URL,
92
+ init?: RequestInit
93
+ ): Promise<Response> => {
87
94
  const url = typeof input === 'string' ? input : input.toString();
88
95
 
89
96
  if (url.includes('api.kimi.com')) {
90
- const nextAccount = await accountManager!.getNextAccount();
97
+ if (!accountManager) {
98
+ throw new Error('Account manager not initialized');
99
+ }
100
+ const nextAccount = await accountManager.getNextAccount();
91
101
  if (nextAccount) {
92
102
  currentAccountIndex = nextAccount.index;
93
103
  const keyLabel = nextAccount.account.key.substring(0, 18) + '...';
94
104
  const position = nextAccount.index + 1;
95
- const allKeysNow = await accountManager!.listKeys();
105
+ const allKeysNow = await accountManager.listKeys();
96
106
  const total = allKeysNow.length;
97
107
 
98
- await showToast(`🔄 Using key: ${keyLabel} (${position}/${total})`, 'info');
108
+ await showToast(`🔄 Using key: ${keyLabel} (${String(position)}/${String(total)})`, 'info');
99
109
 
100
110
  const headers = new Headers(init?.headers);
101
111
  headers.set('x-api-key', nextAccount.account.key);
102
112
  headers.delete('Authorization');
103
113
 
114
+ const requestStartTime = Date.now();
115
+ const today = new Date().toISOString().split('T')[0];
116
+
117
+ if (!originalFetch) {
118
+ throw new Error('Original fetch not available');
119
+ }
120
+
104
121
  try {
105
- const response = await originalFetch!(input, { ...init, headers });
122
+ const response = await originalFetch(input, { ...init, headers });
123
+ const responseTime = Date.now() - requestStartTime;
106
124
 
107
125
  if (response.status === 429) {
108
126
  const retryAfter = response.headers.get('retry-after');
109
127
  const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : 60000;
110
- await accountManager!.markAccountRateLimited(currentAccountIndex, retryAfterMs);
111
- await showToast(`⚠️ Key ${position} rate limited`, 'warning');
128
+ await accountManager.markAccountRateLimited(currentAccountIndex, retryAfterMs);
129
+ await showToast(`⚠️ Key ${String(position)} rate limited`, 'warning');
112
130
  } else if (response.ok) {
113
- await accountManager!.markAccountSuccess(currentAccountIndex);
131
+ await accountManager.markAccountSuccess(currentAccountIndex, responseTime, today);
114
132
  } else if (response.status >= 500) {
115
- await accountManager!.markAccountFailure(currentAccountIndex);
133
+ await accountManager.markAccountFailure(currentAccountIndex);
116
134
  }
117
135
 
118
136
  return response;
119
137
  } catch (error: unknown) {
120
- await accountManager!.markAccountFailure(currentAccountIndex);
138
+ await accountManager.markAccountFailure(currentAccountIndex);
121
139
  throw error;
122
140
  }
123
141
  }
124
142
  }
125
143
 
126
- return originalFetch!(input, init);
144
+ if (!originalFetch) {
145
+ throw new Error('Original fetch not available');
146
+ }
147
+ return originalFetch(input, init);
127
148
  };
128
149
 
129
150
  const showInitialToast = async () => {
130
- await new Promise(resolve => setTimeout(resolve, 500));
151
+ await new Promise((resolve) => setTimeout(resolve, 500));
131
152
  await flushToastQueue();
132
- await showToast("🎉 Kimi Rotator Plugin loaded!", 'info');
153
+ await showToast('🎉 Kimi Rotator Plugin loaded!', 'info');
133
154
  };
134
155
 
135
- showInitialToast().catch(() => { });
156
+ showInitialToast().catch(() => undefined);
136
157
 
137
158
  const pluginReturn = {
138
159
  auth: {
139
160
  provider: 'kimi-rotator',
140
- methods: [{
141
- type: 'api' as const,
142
- label: 'Kimi API Key',
143
- }],
161
+ methods: [
162
+ {
163
+ type: 'api' as const,
164
+ label: 'Kimi API Key',
165
+ },
166
+ ],
144
167
  loader: async () => {
145
168
  const auth = await getAuth();
146
169
  if (!auth) {
@@ -154,7 +177,7 @@ export const KimiRotatorPlugin: Plugin = async ({ client }) => {
154
177
  baseURL: kimiBaseUrl,
155
178
  async fetch(input: string | Request | URL, init?: RequestInit) {
156
179
  return globalThis.fetch(input, init);
157
- }
180
+ },
158
181
  };
159
182
  },
160
183
  },