opencode-qwen-auth 0.2.0 → 0.3.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/README.md CHANGED
@@ -12,6 +12,7 @@ Qwen OAuth authentication plugin for [OpenCode](https://opencode.ai) with multi-
12
12
 
13
13
  - **Device Flow OAuth** - PKCE-secured authentication, works in headless/CI environments
14
14
  - **Multi-Account Support** - Store and rotate between multiple Qwen accounts
15
+ - **Hybrid Account Rotation** - Smart selection using health scores, token bucket, and LRU
15
16
  - **Proactive Token Refresh** - Automatically refresh tokens before expiry
16
17
  - **Rate Limit Handling** - Detects 429 responses, rotates accounts, respects retry-after
17
18
  - **API Translation** - Bridges OpenAI Responses API ↔ Chat Completions API
@@ -19,6 +20,14 @@ Qwen OAuth authentication plugin for [OpenCode](https://opencode.ai) with multi-
19
20
 
20
21
  ## Installation
21
22
 
23
+ ### Let an LLM Do It
24
+
25
+ Paste this into any LLM agent (Claude Code, OpenCode, Cursor, etc.):
26
+
27
+ ```
28
+ Install the opencode-qwen-auth plugin by following: https://raw.githubusercontent.com/foxswat/opencode-qwen-auth/main/README.md
29
+ ```
30
+
22
31
  ### Quick Install (Recommended)
23
32
 
24
33
  Run one command to automatically configure OpenCode:
@@ -88,33 +97,54 @@ Then add to your `opencode.json`:
88
97
 
89
98
  ## Configuration
90
99
 
91
- Create `.opencode/qwen.json` in your project or `~/.config/opencode/qwen.json` for user-level config:
100
+ **No configuration required.** The plugin works out of the box with sensible defaults.
92
101
 
93
- ```json
102
+ To customize behavior, create `.opencode/qwen.json` (project) or `~/.config/opencode/qwen.json` (user-level) with only the options you want to override:
103
+
104
+ ```jsonc
94
105
  {
106
+ // API endpoint (default: https://portal.qwen.ai/v1)
95
107
  "base_url": "https://portal.qwen.ai/v1",
96
- "client_id": "f0304373b74a44d2b584a3fb70ca9e56",
108
+
109
+ // OAuth client ID (default: built-in)
110
+ "client_id": "your-client-id",
111
+
112
+ // OAuth server URL (default: https://chat.qwen.ai)
97
113
  "oauth_base_url": "https://chat.qwen.ai",
98
- "rotation_strategy": "round-robin",
114
+
115
+ // Account rotation: "hybrid", "round-robin", or "sequential" (default: hybrid)
116
+ "rotation_strategy": "hybrid",
117
+
118
+ // Enable PID-based offset for multi-session load distribution (default: false)
119
+ "pid_offset_enabled": false,
120
+
121
+ // Refresh tokens before expiry (default: true)
99
122
  "proactive_refresh": true,
123
+
124
+ // Seconds before expiry to trigger refresh (default: 300)
100
125
  "refresh_window_seconds": 300,
126
+
127
+ // Maximum wait time when rate limited (default: 300)
101
128
  "max_rate_limit_wait_seconds": 300,
102
- "quiet_mode": false
129
+
130
+ // Suppress informational messages (default: false)
131
+ "quiet_mode": true
103
132
  }
104
133
  ```
105
134
 
106
135
  ### Configuration Options
107
136
 
108
- | Option | Default | Description |
109
- | ----------------------------- | --------------------------- | ----------------------------------------------- |
110
- | `base_url` | `https://portal.qwen.ai/v1` | API endpoint for Qwen requests |
111
- | `client_id` | (built-in) | OAuth client ID |
112
- | `oauth_base_url` | `https://chat.qwen.ai` | OAuth server URL |
113
- | `rotation_strategy` | `round-robin` | Account rotation: `round-robin` or `sequential` |
114
- | `proactive_refresh` | `true` | Refresh tokens before expiry |
115
- | `refresh_window_seconds` | `300` | Seconds before expiry to trigger refresh |
116
- | `max_rate_limit_wait_seconds` | `300` | Maximum wait time when rate limited |
117
- | `quiet_mode` | `false` | Suppress informational messages |
137
+ | Option | Default | Description |
138
+ | ----------------------------- | --------------------------- | ---------------------------------------------------------------- |
139
+ | `base_url` | `https://portal.qwen.ai/v1` | API endpoint for Qwen requests |
140
+ | `client_id` | (built-in) | OAuth client ID |
141
+ | `oauth_base_url` | `https://chat.qwen.ai` | OAuth server URL |
142
+ | `rotation_strategy` | `hybrid` | Account rotation: `hybrid`, `round-robin`, or `sequential` |
143
+ | `pid_offset_enabled` | `false` | Distribute parallel sessions across accounts using PID offset |
144
+ | `proactive_refresh` | `true` | Refresh tokens before expiry |
145
+ | `refresh_window_seconds` | `300` | Seconds before expiry to trigger refresh |
146
+ | `max_rate_limit_wait_seconds` | `300` | Maximum wait time when rate limited |
147
+ | `quiet_mode` | `false` | Suppress informational messages |
118
148
 
119
149
  ### Environment Variables
120
150
 
@@ -124,6 +154,7 @@ All options can be overridden via environment variables:
124
154
  - `QWEN_OAUTH_CLIENT_ID`
125
155
  - `QWEN_OAUTH_BASE_URL`
126
156
  - `QWEN_ROTATION_STRATEGY`
157
+ - `QWEN_PID_OFFSET_ENABLED`
127
158
  - `QWEN_PROACTIVE_REFRESH`
128
159
  - `QWEN_REFRESH_WINDOW_SECONDS`
129
160
  - `QWEN_MAX_RATE_LIMIT_WAIT_SECONDS`
@@ -148,9 +179,22 @@ Add multiple accounts for higher throughput:
148
179
 
149
180
  ### Rotation Strategies
150
181
 
182
+ - **hybrid** (default): Smart selection combining health scores, token bucket rate limiting, and LRU. Accounts recover health passively over time.
151
183
  - **round-robin**: Cycles through accounts on each request
152
184
  - **sequential**: Uses one account until rate limited, then switches
153
185
 
186
+ #### Hybrid Strategy Details
187
+
188
+ The hybrid strategy uses a weighted scoring algorithm:
189
+
190
+ - **Health Score (0-100)**: Tracks account wellness. Success rewards (+1), rate limits penalize (-10), failures penalize more (-20). Accounts passively recover +2 points/hour when rested.
191
+ - **Token Bucket**: Client-side rate limiting (50 tokens max, regenerates 6/minute) to prevent hitting server 429s.
192
+ - **LRU Freshness**: Prefers accounts that haven't been used recently.
193
+
194
+ Score formula: `(health × 2) + (tokens × 5) + (freshness × 0.1)`
195
+
196
+ Enable `pid_offset_enabled: true` when running multiple parallel sessions (e.g., oh-my-opencode) to distribute load across accounts.
197
+
154
198
  ## How It Works
155
199
 
156
200
  This plugin bridges OpenCode's Responses API format with Qwen's Chat Completions API:
@@ -1,4 +1,17 @@
1
- export type RotationStrategy = "round-robin" | "sequential";
1
+ import type { RotationStrategy } from "./config/schema";
2
+ import { type HealthScoreTracker, type TokenBucketTracker } from "./rotation";
3
+ export type { RotationStrategy } from "./config/schema";
4
+ /**
5
+ * Options for selectAccount when using hybrid strategy.
6
+ */
7
+ export interface SelectAccountOptions {
8
+ /** Health score tracker for hybrid selection */
9
+ healthTracker?: HealthScoreTracker;
10
+ /** Token bucket tracker for hybrid selection */
11
+ tokenTracker?: TokenBucketTracker;
12
+ /** PID offset for distributing sessions across accounts */
13
+ pidOffset?: number;
14
+ }
2
15
  export interface AccountHealth {
3
16
  successCount: number;
4
17
  failureCount: number;
@@ -26,7 +39,7 @@ export declare function loadAccounts(): Promise<AccountStorage | null>;
26
39
  export declare function saveAccounts(storage: AccountStorage): Promise<void>;
27
40
  export declare function upsertAccount(storage: AccountStorage, account: QwenAccount): AccountStorage;
28
41
  export declare function updateAccount(storage: AccountStorage, index: number, update: Partial<QwenAccount>): AccountStorage;
29
- export declare function selectAccount(storage: AccountStorage, strategy: RotationStrategy, now: number): {
42
+ export declare function selectAccount(storage: AccountStorage, strategy: RotationStrategy, now: number, options?: SelectAccountOptions): {
30
43
  account: QwenAccount;
31
44
  index: number;
32
45
  storage: AccountStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/plugin/account.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,YAAY,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAyED,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoBnE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,WAAW,GACnB,cAAc,CAsBhB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAC3B,cAAc,CAUhB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,MAAM,GACV;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAyBzE;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,cAAc,CAGhB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAWf;AAYD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CASjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,GACZ,cAAc,CAahB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,GACZ,cAAc,CAahB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,SAAS,SAAM,GACd,OAAO,CAET"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/plugin/account.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAIL,KAAK,kBAAkB,EAEvB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,gDAAgD;IAChD,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgBD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAyED,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoBnE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,WAAW,GACnB,cAAc,CAsBhB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAC3B,cAAc,CAUhB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAwFzE;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,cAAc,CAGhB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CAWf;AAYD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CASjE;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,GACZ,cAAc,CAahB;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,GACZ,cAAc,CAahB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,SAAS,SAAM,GACd,OAAO,CAET"}
@@ -3,6 +3,7 @@ import { promises as fs } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { dirname, join } from "node:path";
5
5
  import lockfile from "proper-lockfile";
6
+ import { getHealthTracker, getTokenTracker, selectHybridAccount, } from "./rotation";
6
7
  const STORAGE_VERSION = 1;
7
8
  function getConfigDir() {
8
9
  if (process.platform === "win32") {
@@ -150,10 +151,54 @@ export function updateAccount(storage, index, update) {
150
151
  activeIndex: storage.activeIndex,
151
152
  });
152
153
  }
153
- export function selectAccount(storage, strategy, now) {
154
+ export function selectAccount(storage, strategy, now, options) {
154
155
  const total = storage.accounts.length;
155
156
  if (total === 0)
156
157
  return null;
158
+ if (strategy === "hybrid") {
159
+ const healthTracker = options?.healthTracker ?? getHealthTracker();
160
+ const tokenTracker = options?.tokenTracker ?? getTokenTracker();
161
+ const pidOffset = options?.pidOffset ?? 0;
162
+ const accountsWithMetrics = storage.accounts.map((account, idx) => ({
163
+ index: idx,
164
+ lastUsed: account.lastUsed,
165
+ healthScore: healthTracker.getScore(idx),
166
+ tokens: tokenTracker.getTokens(idx),
167
+ isRateLimited: !!(account.rateLimitResetAt && account.rateLimitResetAt > now),
168
+ }));
169
+ if (pidOffset > 0 && accountsWithMetrics.length > 1) {
170
+ const rotateBy = pidOffset % accountsWithMetrics.length;
171
+ for (let i = 0; i < rotateBy; i++) {
172
+ const first = accountsWithMetrics.shift();
173
+ if (first)
174
+ accountsWithMetrics.push(first);
175
+ }
176
+ }
177
+ const result = selectHybridAccount(accountsWithMetrics, healthTracker.config.minUsable, tokenTracker.getMaxTokens());
178
+ if (!result) {
179
+ return null;
180
+ }
181
+ const selectedIndex = result.index;
182
+ const selectedAccount = storage.accounts[selectedIndex];
183
+ if (!selectedAccount)
184
+ return null;
185
+ tokenTracker.consume(selectedIndex);
186
+ const updatedAccounts = [...storage.accounts];
187
+ updatedAccounts[selectedIndex] = {
188
+ ...selectedAccount,
189
+ lastUsed: now,
190
+ };
191
+ const updated = normalizeStorage({
192
+ version: STORAGE_VERSION,
193
+ accounts: updatedAccounts,
194
+ activeIndex: selectedIndex,
195
+ });
196
+ return {
197
+ account: updatedAccounts[selectedIndex],
198
+ index: selectedIndex,
199
+ storage: updated,
200
+ };
201
+ }
157
202
  const startIndex = strategy === "round-robin"
158
203
  ? (storage.activeIndex + 1) % total
159
204
  : Math.min(storage.activeIndex, total - 1);
@@ -165,12 +210,17 @@ export function selectAccount(storage, strategy, now) {
165
210
  if (account.rateLimitResetAt && account.rateLimitResetAt > now) {
166
211
  continue;
167
212
  }
213
+ const updatedAccounts = [...storage.accounts];
214
+ updatedAccounts[index] = {
215
+ ...account,
216
+ lastUsed: now,
217
+ };
168
218
  const updated = normalizeStorage({
169
219
  version: STORAGE_VERSION,
170
- accounts: storage.accounts,
220
+ accounts: updatedAccounts,
171
221
  activeIndex: index,
172
222
  });
173
- return { account, index, storage: updated };
223
+ return { account: updatedAccounts[index], index, storage: updated };
174
224
  }
175
225
  return null;
176
226
  }
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/plugin/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/plugin/account.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { loadConfig } from "./loader";
1
+ export { type LoadedConfig, loadConfig } from "./loader";
2
2
  export type { QwenPluginConfig } from "./schema";
3
3
  export { QwenConfigSchema } from "./schema";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugin/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import { type QwenPluginConfig } from "./schema";
2
- export declare function loadConfig(directory: string): QwenPluginConfig;
2
+ export interface LoadedConfig extends QwenPluginConfig {
3
+ isExplicitStrategy: boolean;
4
+ }
5
+ export declare function loadConfig(directory: string): LoadedConfig;
3
6
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AA4DnE,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAW9D"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AA6ED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAqB1D"}
@@ -20,6 +20,7 @@ function getProjectConfigPath(directory) {
20
20
  }
21
21
  function applyEnvOverrides(config) {
22
22
  const overrides = {};
23
+ let envHasStrategy = false;
23
24
  if (process.env.QWEN_OAUTH_CLIENT_ID) {
24
25
  overrides.client_id = process.env.QWEN_OAUTH_CLIENT_ID;
25
26
  }
@@ -31,8 +32,11 @@ function applyEnvOverrides(config) {
31
32
  }
32
33
  if (process.env.QWEN_ROTATION_STRATEGY) {
33
34
  const strategy = process.env.QWEN_ROTATION_STRATEGY;
34
- if (strategy === "round-robin" || strategy === "sequential") {
35
+ if (strategy === "round-robin" ||
36
+ strategy === "sequential" ||
37
+ strategy === "hybrid") {
35
38
  overrides.rotation_strategy = strategy;
39
+ envHasStrategy = true;
36
40
  }
37
41
  }
38
42
  if (process.env.QWEN_PROACTIVE_REFRESH) {
@@ -53,17 +57,31 @@ function applyEnvOverrides(config) {
53
57
  if (process.env.QWEN_QUIET_MODE) {
54
58
  overrides.quiet_mode = process.env.QWEN_QUIET_MODE === "true";
55
59
  }
56
- return QwenConfigSchema.parse({ ...config, ...overrides });
60
+ if (process.env.QWEN_PID_OFFSET_ENABLED) {
61
+ overrides.pid_offset_enabled =
62
+ process.env.QWEN_PID_OFFSET_ENABLED === "true" ||
63
+ process.env.QWEN_PID_OFFSET_ENABLED === "1";
64
+ }
65
+ return {
66
+ config: QwenConfigSchema.parse({ ...config, ...overrides }),
67
+ envHasStrategy,
68
+ };
57
69
  }
58
70
  export function loadConfig(directory) {
59
71
  const defaults = QwenConfigSchema.parse({});
60
72
  const userConfig = readJsonFile(getUserConfigPath());
61
73
  const projectConfig = readJsonFile(getProjectConfigPath(directory));
74
+ const rawHasStrategy = userConfig?.rotation_strategy !== undefined ||
75
+ projectConfig?.rotation_strategy !== undefined;
62
76
  const merged = QwenConfigSchema.parse({
63
77
  ...defaults,
64
78
  ...(userConfig ?? {}),
65
79
  ...(projectConfig ?? {}),
66
80
  });
67
- return applyEnvOverrides(merged);
81
+ const { config, envHasStrategy } = applyEnvOverrides(merged);
82
+ return {
83
+ ...config,
84
+ isExplicitStrategy: rawHasStrategy || envHasStrategy,
85
+ };
68
86
  }
69
87
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/plugin/config/loader.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,125 @@
1
1
  import { z } from "zod";
2
+ export declare const HealthScoreConfigSchema: z.ZodObject<{
3
+ initial: z.ZodDefault<z.ZodNumber>;
4
+ success_reward: z.ZodDefault<z.ZodNumber>;
5
+ rate_limit_penalty: z.ZodDefault<z.ZodNumber>;
6
+ failure_penalty: z.ZodDefault<z.ZodNumber>;
7
+ recovery_rate_per_hour: z.ZodDefault<z.ZodNumber>;
8
+ min_usable: z.ZodDefault<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ initial: number;
11
+ success_reward: number;
12
+ rate_limit_penalty: number;
13
+ failure_penalty: number;
14
+ recovery_rate_per_hour: number;
15
+ min_usable: number;
16
+ }, {
17
+ initial?: number | undefined;
18
+ success_reward?: number | undefined;
19
+ rate_limit_penalty?: number | undefined;
20
+ failure_penalty?: number | undefined;
21
+ recovery_rate_per_hour?: number | undefined;
22
+ min_usable?: number | undefined;
23
+ }>;
24
+ export declare const TokenBucketConfigSchema: z.ZodObject<{
25
+ max_tokens: z.ZodDefault<z.ZodNumber>;
26
+ regeneration_rate_per_minute: z.ZodDefault<z.ZodNumber>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ max_tokens: number;
29
+ regeneration_rate_per_minute: number;
30
+ }, {
31
+ max_tokens?: number | undefined;
32
+ regeneration_rate_per_minute?: number | undefined;
33
+ }>;
2
34
  export declare const QwenConfigSchema: z.ZodObject<{
3
35
  client_id: z.ZodDefault<z.ZodString>;
4
36
  oauth_base_url: z.ZodDefault<z.ZodString>;
5
37
  base_url: z.ZodDefault<z.ZodString>;
6
- rotation_strategy: z.ZodDefault<z.ZodEnum<["round-robin", "sequential"]>>;
38
+ rotation_strategy: z.ZodDefault<z.ZodEnum<["round-robin", "sequential", "hybrid"]>>;
7
39
  proactive_refresh: z.ZodDefault<z.ZodBoolean>;
8
40
  refresh_window_seconds: z.ZodDefault<z.ZodNumber>;
9
41
  max_rate_limit_wait_seconds: z.ZodDefault<z.ZodNumber>;
10
42
  quiet_mode: z.ZodDefault<z.ZodBoolean>;
43
+ pid_offset_enabled: z.ZodDefault<z.ZodBoolean>;
44
+ health_score: z.ZodOptional<z.ZodObject<{
45
+ initial: z.ZodDefault<z.ZodNumber>;
46
+ success_reward: z.ZodDefault<z.ZodNumber>;
47
+ rate_limit_penalty: z.ZodDefault<z.ZodNumber>;
48
+ failure_penalty: z.ZodDefault<z.ZodNumber>;
49
+ recovery_rate_per_hour: z.ZodDefault<z.ZodNumber>;
50
+ min_usable: z.ZodDefault<z.ZodNumber>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ initial: number;
53
+ success_reward: number;
54
+ rate_limit_penalty: number;
55
+ failure_penalty: number;
56
+ recovery_rate_per_hour: number;
57
+ min_usable: number;
58
+ }, {
59
+ initial?: number | undefined;
60
+ success_reward?: number | undefined;
61
+ rate_limit_penalty?: number | undefined;
62
+ failure_penalty?: number | undefined;
63
+ recovery_rate_per_hour?: number | undefined;
64
+ min_usable?: number | undefined;
65
+ }>>;
66
+ token_bucket: z.ZodOptional<z.ZodObject<{
67
+ max_tokens: z.ZodDefault<z.ZodNumber>;
68
+ regeneration_rate_per_minute: z.ZodDefault<z.ZodNumber>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ max_tokens: number;
71
+ regeneration_rate_per_minute: number;
72
+ }, {
73
+ max_tokens?: number | undefined;
74
+ regeneration_rate_per_minute?: number | undefined;
75
+ }>>;
11
76
  }, "strip", z.ZodTypeAny, {
12
77
  client_id: string;
13
78
  oauth_base_url: string;
14
79
  base_url: string;
15
- rotation_strategy: "round-robin" | "sequential";
80
+ rotation_strategy: "round-robin" | "sequential" | "hybrid";
16
81
  proactive_refresh: boolean;
17
82
  refresh_window_seconds: number;
18
83
  max_rate_limit_wait_seconds: number;
19
84
  quiet_mode: boolean;
85
+ pid_offset_enabled: boolean;
86
+ health_score?: {
87
+ initial: number;
88
+ success_reward: number;
89
+ rate_limit_penalty: number;
90
+ failure_penalty: number;
91
+ recovery_rate_per_hour: number;
92
+ min_usable: number;
93
+ } | undefined;
94
+ token_bucket?: {
95
+ max_tokens: number;
96
+ regeneration_rate_per_minute: number;
97
+ } | undefined;
20
98
  }, {
21
99
  client_id?: string | undefined;
22
100
  oauth_base_url?: string | undefined;
23
101
  base_url?: string | undefined;
24
- rotation_strategy?: "round-robin" | "sequential" | undefined;
102
+ rotation_strategy?: "round-robin" | "sequential" | "hybrid" | undefined;
25
103
  proactive_refresh?: boolean | undefined;
26
104
  refresh_window_seconds?: number | undefined;
27
105
  max_rate_limit_wait_seconds?: number | undefined;
28
106
  quiet_mode?: boolean | undefined;
107
+ pid_offset_enabled?: boolean | undefined;
108
+ health_score?: {
109
+ initial?: number | undefined;
110
+ success_reward?: number | undefined;
111
+ rate_limit_penalty?: number | undefined;
112
+ failure_penalty?: number | undefined;
113
+ recovery_rate_per_hour?: number | undefined;
114
+ min_usable?: number | undefined;
115
+ } | undefined;
116
+ token_bucket?: {
117
+ max_tokens?: number | undefined;
118
+ regeneration_rate_per_minute?: number | undefined;
119
+ } | undefined;
29
120
  }>;
121
+ export type HealthScorePluginConfig = z.infer<typeof HealthScoreConfigSchema>;
122
+ export type TokenBucketPluginConfig = z.infer<typeof TokenBucketConfigSchema>;
30
123
  export type QwenPluginConfig = z.infer<typeof QwenConfigSchema>;
124
+ export type RotationStrategy = QwenPluginConfig["rotation_strategy"];
31
125
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC"}
@@ -1,15 +1,30 @@
1
1
  import { z } from "zod";
2
2
  import { QWEN_DEFAULT_API_BASE_URL, QWEN_DEFAULT_CLIENT_ID, QWEN_OAUTH_BASE_URL, } from "../../constants";
3
+ export const HealthScoreConfigSchema = z.object({
4
+ initial: z.number().min(0).max(100).default(70),
5
+ success_reward: z.number().default(1),
6
+ rate_limit_penalty: z.number().max(0).default(-10),
7
+ failure_penalty: z.number().max(0).default(-20),
8
+ recovery_rate_per_hour: z.number().min(0).default(2),
9
+ min_usable: z.number().min(0).max(100).default(50),
10
+ });
11
+ export const TokenBucketConfigSchema = z.object({
12
+ max_tokens: z.number().min(1).default(50),
13
+ regeneration_rate_per_minute: z.number().min(0).default(6),
14
+ });
3
15
  export const QwenConfigSchema = z.object({
4
16
  client_id: z.string().default(QWEN_DEFAULT_CLIENT_ID),
5
17
  oauth_base_url: z.string().default(QWEN_OAUTH_BASE_URL),
6
18
  base_url: z.string().default(QWEN_DEFAULT_API_BASE_URL),
7
19
  rotation_strategy: z
8
- .enum(["round-robin", "sequential"])
9
- .default("round-robin"),
20
+ .enum(["round-robin", "sequential", "hybrid"])
21
+ .default("hybrid"),
10
22
  proactive_refresh: z.boolean().default(true),
11
23
  refresh_window_seconds: z.number().min(0).default(300),
12
24
  max_rate_limit_wait_seconds: z.number().min(0).default(300),
13
25
  quiet_mode: z.boolean().default(false),
26
+ pid_offset_enabled: z.boolean().default(false),
27
+ health_score: HealthScoreConfigSchema.optional(),
28
+ token_bucket: TokenBucketConfigSchema.optional(),
14
29
  });
15
30
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACvD,iBAAiB,EAAE,CAAC;SACjB,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;SACnC,OAAO,CAAC,aAAa,CAAC;IACzB,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACtD,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvC,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/plugin/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAClD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IAC/C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,4BAA4B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACrD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACvD,iBAAiB,EAAE,CAAC;SACjB,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;SAC7C,OAAO,CAAC,QAAQ,CAAC;IACpB,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACtD,2BAA2B,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,YAAY,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAChD,YAAY,EAAE,uBAAuB,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC"}