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 +77 -17
- package/dist/src/cli/install.d.ts +10 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +230 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/plugin/account.d.ts +15 -2
- package/dist/src/plugin/account.d.ts.map +1 -1
- package/dist/src/plugin/account.js +53 -3
- package/dist/src/plugin/account.js.map +1 -1
- package/dist/src/plugin/config/index.d.ts +1 -1
- package/dist/src/plugin/config/index.d.ts.map +1 -1
- package/dist/src/plugin/config/index.js.map +1 -1
- package/dist/src/plugin/config/loader.d.ts +4 -1
- package/dist/src/plugin/config/loader.d.ts.map +1 -1
- package/dist/src/plugin/config/loader.js +21 -3
- package/dist/src/plugin/config/loader.js.map +1 -1
- package/dist/src/plugin/config/schema.d.ts +97 -3
- package/dist/src/plugin/config/schema.d.ts.map +1 -1
- package/dist/src/plugin/config/schema.js +17 -2
- package/dist/src/plugin/config/schema.js.map +1 -1
- package/dist/src/plugin/rotation.d.ts +208 -0
- package/dist/src/plugin/rotation.d.ts.map +1 -0
- package/dist/src/plugin/rotation.js +334 -0
- package/dist/src/plugin/rotation.js.map +1 -0
- package/dist/src/plugin.d.ts.map +1 -1
- package/dist/src/plugin.js +56 -2
- package/dist/src/plugin.js.map +1 -1
- package/package.json +4 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
100
|
+
**No configuration required.** The plugin works out of the box with sensible defaults.
|
|
76
101
|
|
|
77
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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` | `
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
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
|
-
|
|
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":"
|
|
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:
|
|
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 +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;
|
|
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,
|
|
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
|
|
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;
|
|
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"}
|