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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/opencode-qwen-auth.svg)](https://www.npmjs.com/package/opencode-qwen-auth)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/opencode-qwen-auth.svg)](https://www.npmjs.com/package/opencode-qwen-auth)
5
- [![CI](https://github.com/anthropics/opencode-qwen-auth/actions/workflows/ci.yml/badge.svg)](https://github.com/anthropics/opencode-qwen-auth/actions)
5
+ [![CI](https://github.com/foxswat/opencode-qwen-auth/actions/workflows/ci.yml/badge.svg)](https://github.com/foxswat/opencode-qwen-auth/actions)
6
6
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
7
7
  [![Built with Bun](https://img.shields.io/badge/Built%20with-Bun-black?logo=bun)](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 (recommended)
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
- Add to your `opencode.json`:
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-qwen-auth",
3
- "version": "0.1.2",
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",