opencode-qwen-auth 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- 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/package.json +4 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/opencode-qwen-auth)
|
|
4
4
|
[](https://www.npmjs.com/package/opencode-qwen-auth)
|
|
5
|
-
[](https://github.com/foxswat/opencode-qwen-auth/actions)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://bun.sh)
|
|
8
8
|
|
|
@@ -19,15 +19,31 @@ Qwen OAuth authentication plugin for [OpenCode](https://opencode.ai) with multi-
|
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
22
|
+
### Quick Install (Recommended)
|
|
23
|
+
|
|
24
|
+
Run one command to automatically configure OpenCode:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
bunx opencode-qwen-auth install
|
|
28
|
+
# or
|
|
29
|
+
npx opencode-qwen-auth install
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This adds the plugin and Qwen provider configuration to your `opencode.json`.
|
|
33
|
+
|
|
34
|
+
### Manual Installation
|
|
35
|
+
|
|
36
|
+
If you prefer manual setup:
|
|
37
|
+
|
|
22
38
|
```bash
|
|
23
|
-
# Using Bun
|
|
39
|
+
# Using Bun
|
|
24
40
|
bun add opencode-qwen-auth
|
|
25
41
|
|
|
26
42
|
# Using npm
|
|
27
43
|
npm install opencode-qwen-auth
|
|
28
44
|
```
|
|
29
45
|
|
|
30
|
-
|
|
46
|
+
Then add to your `opencode.json`:
|
|
31
47
|
|
|
32
48
|
```json
|
|
33
49
|
{
|
|
@@ -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":";AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,uBAAuB,GAAG;IAC9B,IAAI,EAAE;QACJ,GAAG,EAAE,gBAAgB;QACrB,OAAO,EAAE;YACP,OAAO,EAAE,2BAA2B;YACpC,aAAa,EAAE,QAAQ;SACxB;QACD,MAAM,EAAE;YACN,kBAAkB,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;YAC9C,eAAe,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;SAC7D;KACF;CACF,CAAC;AASF,SAAS,cAAc;IACrB,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC;KAClD,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,IAAI,CAAC;YACf,OAAO,GAAG,KAAK,CAAC;YAChB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,IAAI,CAAC;YACf,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,MAAM,IAAI,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/C,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,CAAC,IAAI,CAAC,CAAC;gBACP,OACE,CAAC,GAAG,MAAM,CAAC,MAAM;oBACjB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAC7C,CAAC;oBACD,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,UAAkB;IACpC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,UAAkB,EAAE,MAAsB;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,MAAsB;IACvC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAsB;IAC7C,OAAO,CAAC,CAAC,CACP,MAAM,CAAC,QAAQ;QACf,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACnC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAsB;IACvC,MAAM,OAAO,GAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,iCAAiC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,MAAsB;IACzC,MAAM,OAAO,GAAmB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,GAAG;YACjB,GAAG,OAAO,CAAC,QAAQ;YACnB,GAAG,uBAAuB;SAC3B,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB,EAAE,MAAe;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;SACL,WAAW;;;SAGX,WAAW;QACZ,WAAW;;;;;;;;SAQV,WAAW;QACZ,WAAW;;;;CAIlB,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,UAAgC,EAAE;IAKxD,IAAI,UAAkB,CAAC;IAEvB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,GAAG,cAAc,EAAE,CAAC;QACxC,UAAU,GAAG,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhD,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEnD,IAAI,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7B,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,qBAAqB,EAAE,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QAER,KAAK,SAAS;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,0CAA0C,OAAO,GAAG,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,WAAW,mBAAmB,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-qwen-auth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Qwen OAuth authentication plugin for OpenCode with multi-account rotation and API translation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
"types": "./dist/index.d.ts"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"opencode-qwen-auth": "./dist/src/cli/install.js"
|
|
16
|
+
},
|
|
14
17
|
"type": "module",
|
|
15
18
|
"license": "Apache-2.0",
|
|
16
19
|
"author": "OpenCode Qwen Auth Contributors",
|