opencode-qwen-auth 0.1.3 → 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,15 +20,39 @@ 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
+
31
+ ### Quick Install (Recommended)
32
+
33
+ Run one command to automatically configure OpenCode:
34
+
22
35
  ```bash
23
- # Using Bun (recommended)
36
+ bunx opencode-qwen-auth install
37
+ # or
38
+ npx opencode-qwen-auth install
39
+ ```
40
+
41
+ This adds the plugin and Qwen provider configuration to your `opencode.json`.
42
+
43
+ ### Manual Installation
44
+
45
+ If you prefer manual setup:
46
+
47
+ ```bash
48
+ # Using Bun
24
49
  bun add opencode-qwen-auth
25
50
 
26
51
  # Using npm
27
52
  npm install opencode-qwen-auth
28
53
  ```
29
54
 
30
- Add to your `opencode.json`:
55
+ Then add to your `opencode.json`:
31
56
 
32
57
  ```json
33
58
  {
@@ -72,33 +97,54 @@ Add to your `opencode.json`:
72
97
 
73
98
  ## Configuration
74
99
 
75
- 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.
76
101
 
77
- ```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
78
105
  {
106
+ // API endpoint (default: https://portal.qwen.ai/v1)
79
107
  "base_url": "https://portal.qwen.ai/v1",
80
- "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)
81
113
  "oauth_base_url": "https://chat.qwen.ai",
82
- "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)
83
122
  "proactive_refresh": true,
123
+
124
+ // Seconds before expiry to trigger refresh (default: 300)
84
125
  "refresh_window_seconds": 300,
126
+
127
+ // Maximum wait time when rate limited (default: 300)
85
128
  "max_rate_limit_wait_seconds": 300,
86
- "quiet_mode": false
129
+
130
+ // Suppress informational messages (default: false)
131
+ "quiet_mode": true
87
132
  }
88
133
  ```
89
134
 
90
135
  ### Configuration Options
91
136
 
92
- | Option | Default | Description |
93
- | ----------------------------- | --------------------------- | ----------------------------------------------- |
94
- | `base_url` | `https://portal.qwen.ai/v1` | API endpoint for Qwen requests |
95
- | `client_id` | (built-in) | OAuth client ID |
96
- | `oauth_base_url` | `https://chat.qwen.ai` | OAuth server URL |
97
- | `rotation_strategy` | `round-robin` | Account rotation: `round-robin` or `sequential` |
98
- | `proactive_refresh` | `true` | Refresh tokens before expiry |
99
- | `refresh_window_seconds` | `300` | Seconds before expiry to trigger refresh |
100
- | `max_rate_limit_wait_seconds` | `300` | Maximum wait time when rate limited |
101
- | `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 |
102
148
 
103
149
  ### Environment Variables
104
150
 
@@ -108,6 +154,7 @@ All options can be overridden via environment variables:
108
154
  - `QWEN_OAUTH_CLIENT_ID`
109
155
  - `QWEN_OAUTH_BASE_URL`
110
156
  - `QWEN_ROTATION_STRATEGY`
157
+ - `QWEN_PID_OFFSET_ENABLED`
111
158
  - `QWEN_PROACTIVE_REFRESH`
112
159
  - `QWEN_REFRESH_WINDOW_SECONDS`
113
160
  - `QWEN_MAX_RATE_LIMIT_WAIT_SECONDS`
@@ -132,9 +179,22 @@ Add multiple accounts for higher throughput:
132
179
 
133
180
  ### Rotation Strategies
134
181
 
182
+ - **hybrid** (default): Smart selection combining health scores, token bucket rate limiting, and LRU. Accounts recover health passively over time.
135
183
  - **round-robin**: Cycles through accounts on each request
136
184
  - **sequential**: Uses one account until rate limited, then switches
137
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
+
138
198
  ## How It Works
139
199
 
140
200
  This plugin bridges OpenCode's Responses API format with Qwen's Chat Completions API:
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ export declare function install(options?: {
3
+ global?: boolean;
4
+ }): {
5
+ success: boolean;
6
+ configPath: string;
7
+ alreadyInstalled: boolean;
8
+ };
9
+ export declare function main(args?: string[]): void;
10
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/install.ts"],"names":[],"mappings":";AA4NA,wBAAgB,OAAO,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CA0BA;AAED,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,IAAI,CAiCjE"}
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ const PLUGIN_NAME = "opencode-qwen-auth";
6
+ const DEFAULT_PROVIDER_CONFIG = {
7
+ qwen: {
8
+ npm: "@ai-sdk/openai",
9
+ options: {
10
+ baseURL: "https://portal.qwen.ai/v1",
11
+ compatibility: "strict",
12
+ },
13
+ models: {
14
+ "qwen3-coder-plus": { contextWindow: 1048576 },
15
+ "qwen3-vl-plus": { contextWindow: 262144, attachment: true },
16
+ },
17
+ },
18
+ };
19
+ function findConfigPath() {
20
+ const candidates = [
21
+ join(process.cwd(), "opencode.json"),
22
+ join(process.cwd(), ".opencode", "opencode.json"),
23
+ ];
24
+ for (const candidate of candidates) {
25
+ if (existsSync(candidate)) {
26
+ return candidate;
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ function getGlobalConfigPath() {
32
+ const configDir = process.env.XDG_CONFIG_HOME || join(homedir(), ".config", "opencode");
33
+ return join(configDir, "opencode.json");
34
+ }
35
+ function parseJsonc(content) {
36
+ const result = content;
37
+ let inString = false;
38
+ let escaped = false;
39
+ let output = "";
40
+ for (let i = 0; i < result.length; i++) {
41
+ const char = result[i];
42
+ const nextChar = result[i + 1];
43
+ if (escaped) {
44
+ output += char;
45
+ escaped = false;
46
+ continue;
47
+ }
48
+ if (char === "\\") {
49
+ output += char;
50
+ escaped = true;
51
+ continue;
52
+ }
53
+ if (char === '"') {
54
+ inString = !inString;
55
+ output += char;
56
+ continue;
57
+ }
58
+ if (!inString) {
59
+ if (char === "/" && nextChar === "/") {
60
+ while (i < result.length && result[i] !== "\n") {
61
+ i++;
62
+ }
63
+ continue;
64
+ }
65
+ if (char === "/" && nextChar === "*") {
66
+ i += 2;
67
+ while (i < result.length &&
68
+ !(result[i] === "*" && result[i + 1] === "/")) {
69
+ i++;
70
+ }
71
+ i++;
72
+ continue;
73
+ }
74
+ }
75
+ output += char;
76
+ }
77
+ return JSON.parse(output);
78
+ }
79
+ function loadConfig(configPath) {
80
+ try {
81
+ const content = readFileSync(configPath, "utf-8");
82
+ return parseJsonc(content);
83
+ }
84
+ catch {
85
+ return {};
86
+ }
87
+ }
88
+ function saveConfig(configPath, config) {
89
+ const dir = join(configPath, "..");
90
+ if (!existsSync(dir)) {
91
+ mkdirSync(dir, { recursive: true });
92
+ }
93
+ writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`);
94
+ }
95
+ function hasPlugin(config) {
96
+ if (!config.plugin || !Array.isArray(config.plugin)) {
97
+ return false;
98
+ }
99
+ return config.plugin.some((p) => p === PLUGIN_NAME || p.startsWith(`${PLUGIN_NAME}@`));
100
+ }
101
+ function hasQwenProvider(config) {
102
+ return !!(config.provider &&
103
+ typeof config.provider === "object" &&
104
+ "qwen" in config.provider);
105
+ }
106
+ function addPlugin(config) {
107
+ const updated = JSON.parse(JSON.stringify(config));
108
+ if (!updated.$schema) {
109
+ updated.$schema = "https://opencode.ai/config.json";
110
+ }
111
+ if (!updated.plugin) {
112
+ updated.plugin = [];
113
+ }
114
+ if (!hasPlugin(updated)) {
115
+ updated.plugin = [...updated.plugin, PLUGIN_NAME];
116
+ }
117
+ return updated;
118
+ }
119
+ function addProvider(config) {
120
+ const updated = JSON.parse(JSON.stringify(config));
121
+ if (!updated.provider) {
122
+ updated.provider = {};
123
+ }
124
+ if (!hasQwenProvider(updated)) {
125
+ updated.provider = {
126
+ ...updated.provider,
127
+ ...DEFAULT_PROVIDER_CONFIG,
128
+ };
129
+ }
130
+ return updated;
131
+ }
132
+ function printSuccess(configPath, _isNew) {
133
+ console.log("");
134
+ console.log("\x1b[32m✓\x1b[0m Qwen OAuth plugin installed successfully!");
135
+ console.log("");
136
+ console.log(` Config: ${configPath}`);
137
+ console.log("");
138
+ console.log("\x1b[1mNext steps:\x1b[0m");
139
+ console.log("");
140
+ console.log(" 1. Start OpenCode:");
141
+ console.log(" \x1b[36mopencode\x1b[0m");
142
+ console.log("");
143
+ console.log(" 2. Authenticate with Qwen:");
144
+ console.log(" \x1b[36m/auth\x1b[0m");
145
+ console.log("");
146
+ console.log(" 3. Select a Qwen model:");
147
+ console.log(" \x1b[36m/model qwen/qwen3-coder-plus\x1b[0m");
148
+ console.log("");
149
+ }
150
+ function printAlreadyInstalled() {
151
+ console.log("");
152
+ console.log("\x1b[33m⚠\x1b[0m Plugin already installed.");
153
+ console.log("");
154
+ console.log(" To authenticate, run \x1b[36m/auth\x1b[0m in OpenCode.");
155
+ console.log("");
156
+ }
157
+ function printHelp() {
158
+ console.log(`
159
+ \x1b[1m${PLUGIN_NAME}\x1b[0m - Qwen OAuth authentication plugin for OpenCode
160
+
161
+ \x1b[1mUSAGE:\x1b[0m
162
+ bunx ${PLUGIN_NAME} <command>
163
+ npx ${PLUGIN_NAME} <command>
164
+
165
+ \x1b[1mCOMMANDS:\x1b[0m
166
+ install Install plugin to opencode.json (project or global)
167
+ install --global Install to global config (~/.config/opencode/opencode.json)
168
+ help Show this help message
169
+
170
+ \x1b[1mEXAMPLES:\x1b[0m
171
+ bunx ${PLUGIN_NAME} install
172
+ npx ${PLUGIN_NAME} install --global
173
+
174
+ \x1b[1mMORE INFO:\x1b[0m
175
+ https://github.com/foxswat/opencode-qwen-auth
176
+ `);
177
+ }
178
+ export function install(options = {}) {
179
+ let configPath;
180
+ if (options.global) {
181
+ configPath = getGlobalConfigPath();
182
+ }
183
+ else {
184
+ const existingConfig = findConfigPath();
185
+ configPath = existingConfig || join(process.cwd(), "opencode.json");
186
+ }
187
+ let config = existsSync(configPath) ? loadConfig(configPath) : {};
188
+ const _isNew = Object.keys(config).length === 0;
189
+ const alreadyHasPlugin = hasPlugin(config);
190
+ const alreadyHasProvider = hasQwenProvider(config);
191
+ if (alreadyHasPlugin && alreadyHasProvider) {
192
+ return { success: true, configPath, alreadyInstalled: true };
193
+ }
194
+ config = addPlugin(config);
195
+ config = addProvider(config);
196
+ saveConfig(configPath, config);
197
+ return { success: true, configPath, alreadyInstalled: false };
198
+ }
199
+ export function main(args = process.argv.slice(2)) {
200
+ const command = args[0];
201
+ const flags = args.slice(1);
202
+ switch (command) {
203
+ case "install": {
204
+ const isGlobal = flags.includes("--global") || flags.includes("-g");
205
+ const result = install({ global: isGlobal });
206
+ if (result.alreadyInstalled) {
207
+ printAlreadyInstalled();
208
+ }
209
+ else {
210
+ printSuccess(result.configPath, false);
211
+ }
212
+ break;
213
+ }
214
+ case "help":
215
+ case "--help":
216
+ case "-h":
217
+ printHelp();
218
+ break;
219
+ case undefined:
220
+ printHelp();
221
+ break;
222
+ default:
223
+ console.error(`\x1b[31mError:\x1b[0m Unknown command '${command}'`);
224
+ console.error("");
225
+ console.error(`Run '${PLUGIN_NAME} help' for usage.`);
226
+ process.exit(1);
227
+ }
228
+ }
229
+ main();
230
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/install.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AA6BvC,MAAM,eAAe,GAA8B,CAAC,CAAC;AAErD,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CACT,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAC5D,UAAU,CACX,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,yBAAyB,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAAmB;YAC5B,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,CAAC;SACf,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YACvD,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,IAAY,EAAE,EAAoB;IAC/D,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;QACxC,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE;YACP,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,CAAC;SACV;KACF,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuB;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC7E,MAAM,WAAW,GACf,QAAQ,CAAC,MAAM,GAAG,CAAC;QACjB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC,CAAC;IACR,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CACpB,QAAwB,EACxB,QAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE;gBAC5B,GAAG,OAAO;gBACV,GAAG,OAAO;gBACV,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QACrD,IACE,CAAC,MAAM;YACP,MAAM,CAAC,OAAO,KAAK,eAAe;YAClC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAuB;IACxD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC;YAClC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACjE,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC5D,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,OAAoB;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CACrD,CAAC;IACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,gBAAgB,CAAC;YACtB,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG;QACf,GAAG,OAAO,CAAC,KAAK,CAAC;QACjB,GAAG,OAAO;QACV,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IACF,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,KAAa,EACb,MAA4B;IAE5B,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;IAC5C,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,eAAe;QACxB,QAAQ;QACR,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,QAA0B,EAC1B,GAAW;IAEX,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACtC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,UAAU,GACd,QAAQ,KAAK,aAAa;QACxB,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK;QACnC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAE/C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,GAAG,GAAG,EAAE,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAuB,EACvB,KAAa,EACb,YAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;IAC1C,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,GAAW;IAEX,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ;SAC3B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CACjE;SACA,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IAEnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,OAAO,CACL,OAAO,CAAC,MAAM,IAAI;QAChB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,mBAAmB,EAAE,CAAC;KACvB,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACxD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IAExE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,KAAa;IAEb,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAE7B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE;QACnC,MAAM,EAAE;YACN,GAAG,MAAM;YACT,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC;YACrC,mBAAmB,EAAE,CAAC;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,KAAa;IAEb,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAE7B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE;QACnC,MAAM,EAAE;YACN,GAAG,MAAM;YACT,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC;YACrC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,GAAG,CAAC;YACnD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAoB,EACpB,SAAS,GAAG,GAAG;IAEf,OAAO,oBAAoB,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AACpD,CAAC"}
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"}