opencode-qwen-oauth 2.3.1 → 2.4.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.
Files changed (50) hide show
  1. package/README.md +52 -60
  2. package/dist/api-key-exchange.js +1 -1
  3. package/dist/api-key-exchange.js.map +1 -1
  4. package/dist/browser.js +1 -1
  5. package/dist/browser.js.map +1 -1
  6. package/dist/index.d.ts +1 -4
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +50 -443
  9. package/dist/index.js.map +1 -1
  10. package/dist/middleware/auth.middleware.d.ts +10 -0
  11. package/dist/middleware/auth.middleware.d.ts.map +1 -0
  12. package/dist/middleware/auth.middleware.js +102 -0
  13. package/dist/middleware/auth.middleware.js.map +1 -0
  14. package/dist/middleware/rate-limit.middleware.d.ts +10 -0
  15. package/dist/middleware/rate-limit.middleware.d.ts.map +1 -0
  16. package/dist/middleware/rate-limit.middleware.js +22 -0
  17. package/dist/middleware/rate-limit.middleware.js.map +1 -0
  18. package/dist/middleware/retry.middleware.d.ts +11 -0
  19. package/dist/middleware/retry.middleware.d.ts.map +1 -0
  20. package/dist/middleware/retry.middleware.js +43 -0
  21. package/dist/middleware/retry.middleware.js.map +1 -0
  22. package/dist/repositories/credential.repository.d.ts +13 -0
  23. package/dist/repositories/credential.repository.d.ts.map +1 -0
  24. package/dist/repositories/credential.repository.js +65 -0
  25. package/dist/repositories/credential.repository.js.map +1 -0
  26. package/dist/services/token.service.d.ts +20 -0
  27. package/dist/services/token.service.d.ts.map +1 -0
  28. package/dist/services/token.service.js +106 -0
  29. package/dist/services/token.service.js.map +1 -0
  30. package/dist/strategies/oauth.strategy.d.ts +9 -0
  31. package/dist/strategies/oauth.strategy.d.ts.map +1 -0
  32. package/dist/strategies/oauth.strategy.js +249 -0
  33. package/dist/strategies/oauth.strategy.js.map +1 -0
  34. package/dist/types.d.ts +38 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +5 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/utils/logger.d.ts +24 -0
  39. package/dist/utils/logger.d.ts.map +1 -0
  40. package/dist/utils/logger.js +32 -0
  41. package/dist/utils/logger.js.map +1 -0
  42. package/dist/utils/mutex.d.ts +16 -0
  43. package/dist/utils/mutex.d.ts.map +1 -0
  44. package/dist/utils/mutex.js +54 -0
  45. package/dist/utils/mutex.js.map +1 -0
  46. package/dist/utils/pkce.d.ts +8 -0
  47. package/dist/utils/pkce.d.ts.map +1 -0
  48. package/dist/utils/pkce.js +17 -0
  49. package/dist/utils/pkce.js.map +1 -0
  50. package/package.json +4 -3
package/dist/index.js CHANGED
@@ -1,400 +1,58 @@
1
1
  /**
2
2
  * Qwen OAuth Plugin for OpenCode
3
- * Provides OAuth device flow authentication for Qwen.ai
4
- * With proactive token refresh via custom fetch loader
5
- *
6
- * @packageDocumentation
3
+ * Clean architecture with separated concerns
7
4
  */
8
- const PLUGIN_VERSION = "2.3.1";
9
- const QWEN_CODE_VERSION = "0.10.3";
10
- const TOKEN_CACHE_DURATION = 5 * 60 * 1000;
11
- const REFRESH_BEFORE_EXPIRY_MS = 5 * 60 * 1000;
12
- let cachedToken = null;
13
- let cachedTokenExpiry = 0;
14
- let lastRefreshTime = 0;
15
5
  import { QWEN_API_BASE_URL } from "./constants.js";
16
6
  import { openBrowser } from "./browser.js";
17
- import { authorizeDevice, pollForToken, refreshAccessToken } from "./oauth.js";
18
- import { Mutex } from "./mutex.js";
7
+ import { authorizeDevice, pollForToken } from "./strategies/oauth.strategy.js";
8
+ import { tokenService } from "./services/token.service.js";
9
+ import { credentialRepository } from "./repositories/credential.repository.js";
10
+ import { createAuthMiddleware } from "./middleware/auth.middleware.js";
11
+ import { setLoggerClient } from "./utils/logger.js";
12
+ import { Mutex } from "./utils/mutex.js";
19
13
  import { getConfig } from "./config.js";
20
- import { requestQueue } from "./request-queue.js";
21
- import { saveCredentials, loadCredentials } from "./credentials.js";
22
- const authorizationMutex = new Mutex();
23
- const tokenRefreshMutex = new Mutex();
24
- let cachedAuth = null;
25
- function resetTokenCache() {
26
- cachedToken = null;
27
- cachedTokenExpiry = 0;
28
- lastRefreshTime = 0;
29
- }
30
- export const QwenOAuthPlugin = async ({ project, client, directory, worktree, }) => {
31
- const log = async (level, message, data) => {
32
- try {
33
- await client.app.log({
34
- body: {
35
- service: "qwen-oauth",
36
- level,
37
- message,
38
- extra: data,
39
- },
40
- });
41
- }
42
- catch {
43
- // Fallback to console if client.app.log fails
44
- console.log(`[${level}] ${message}`, data || "");
45
- }
46
- };
47
- const debugLog = (message, data) => log("debug", message, data);
48
- const infoLog = (message, data) => log("info", message, data);
49
- const warnLog = (message, data) => log("warn", message, data);
50
- debugLog("Plugin initialized", {
51
- directory,
52
- worktree,
53
- project: project?.name || "N/A",
14
+ const PLUGIN_VERSION = "2.3.1";
15
+ export const QwenOAuthPlugin = async ({ client, directory, worktree, project }) => {
16
+ setLoggerClient({
17
+ app: {
18
+ log: async (entry) => {
19
+ try {
20
+ await client.app.log(entry);
21
+ }
22
+ catch {
23
+ console.log(`[${entry.body.level}] ${entry.body.message}`, entry.body.extra || "");
24
+ }
25
+ },
26
+ },
54
27
  });
55
28
  const config = getConfig();
29
+ const authMutex = new Mutex();
30
+ const debugLog = (message, data) => client.app.log({ body: { service: "qwen-oauth", level: "debug", message, extra: data } }).catch(() => { });
31
+ debugLog("Plugin initialized", { directory, worktree, project: project?.name || "N/A" });
56
32
  return {
57
33
  auth: {
58
34
  provider: "qwen",
59
35
  async loader(getAuth, provider) {
60
- // First try to get auth from OpenCode runtime
61
36
  let auth = await getAuth();
62
- // If no valid runtime auth, try loading from file
63
- if (!auth || auth.type !== "oauth" || !auth.access || !auth.refresh) {
64
- console.log("[Qwen] No runtime auth, trying to load from file...");
65
- const fileCredentials = loadCredentials();
66
- if (fileCredentials && fileCredentials.accessToken && fileCredentials.refreshToken) {
67
- console.log("[Qwen] Loaded credentials from file", {
68
- hasAccess: !!fileCredentials.accessToken,
69
- hasRefresh: !!fileCredentials.refreshToken,
70
- expiryDate: fileCredentials.expiryDate,
71
- });
72
- // Use file credentials as fallback
37
+ if (!auth || auth.type !== "oauth" || !auth.access) {
38
+ const fileCreds = credentialRepository.load();
39
+ if (fileCreds) {
73
40
  auth = {
74
41
  type: "oauth",
75
- access: fileCredentials.accessToken,
76
- refresh: fileCredentials.refreshToken,
77
- expires: fileCredentials.expiryDate,
42
+ access: fileCreds.accessToken,
43
+ refresh: fileCreds.refreshToken,
44
+ expires: fileCreds.expiryDate,
78
45
  };
46
+ tokenService.setCachedAuth(auth);
79
47
  }
80
48
  }
81
- debugLog("Auth loader called", {
82
- hasAuth: !!auth,
83
- authType: auth?.type,
84
- hasAccess: !!auth?.access,
85
- hasAccessToken: !!auth?.access_token,
86
- hasAccessTokenCamel: !!auth?.accessToken,
87
- hasRefresh: !!auth?.refresh,
88
- hasRefreshToken: !!auth?.refresh_token,
89
- hasRefreshTokenCamel: !!auth?.refreshToken,
90
- expires: auth?.expires,
91
- expiresAt: auth?.expires_at,
92
- });
93
- if (!auth || auth.type !== "oauth") {
94
- return {};
95
- }
96
- // Handle multiple field name formats:
97
- // - OpenCode uses camelCase: accessToken, refreshToken
98
- // - OAuth spec uses snake_case: access_token, refresh_token
99
- // - Plugin internal uses short names: access, refresh
100
- // - Qwen-specific: apiKey or api_key for API endpoint access
101
- const normalizedAuth = {
102
- type: "oauth",
103
- access: auth.access || auth.access_token || auth.accessToken || "",
104
- refresh: auth.refresh || auth.refresh_token || auth.refreshToken || "",
105
- expires: auth.expires || auth.expires_at || 0,
106
- apiKey: auth.apiKey || auth.api_key || undefined,
107
- };
108
- // Defensive check: ensure we actually have tokens
109
- if (!normalizedAuth.access || !normalizedAuth.refresh) {
110
- warnLog("Empty tokens after normalization - authentication may have failed", {
111
- hasAccess: !!normalizedAuth.access,
112
- hasRefresh: !!normalizedAuth.refresh,
113
- authKeys: Object.keys(auth),
114
- authValue: JSON.stringify(auth).substring(0, 200), // First 200 chars for debugging
115
- });
49
+ if (!auth || auth.type !== "oauth")
116
50
  return {};
117
- }
118
- // Check if token is already expired
119
- const now = Date.now();
120
- const isExpired = normalizedAuth.expires && normalizedAuth.expires <= now;
121
- const timeUntilExpiry = normalizedAuth.expires ? normalizedAuth.expires - now : 0;
122
- debugLog("Auth successfully normalized", {
123
- hasAccess: !!normalizedAuth.access,
124
- hasRefresh: !!normalizedAuth.refresh,
125
- hasApiKey: !!normalizedAuth.apiKey,
126
- expiresAt: normalizedAuth.expires ? new Date(normalizedAuth.expires).toISOString() : "never",
127
- expiresIn: timeUntilExpiry > 0 ? Math.round(timeUntilExpiry / 1000) + "s" : "EXPIRED",
128
- isExpired,
129
- });
130
- // Log which token will be used for API calls
131
- if (normalizedAuth.apiKey) {
132
- infoLog("Using separate API key for Qwen API calls (different from OAuth access token)");
133
- }
134
- if (isExpired) {
135
- warnLog("Token is already expired, will refresh on first request", {
136
- expiredAt: normalizedAuth.expires ? new Date(normalizedAuth.expires).toISOString() : "unknown",
137
- expiredAgo: Math.round((now - (normalizedAuth.expires || now)) / 1000) + " seconds ago",
138
- });
139
- }
140
- else {
141
- infoLog("Auth loader: Tokens loaded successfully", {
142
- expiresIn: normalizedAuth.expires ? Math.round((normalizedAuth.expires - Date.now()) / 1000 / 60) + " minutes" : "unknown",
143
- hasApiKey: !!normalizedAuth.apiKey,
144
- });
145
- }
146
- cachedAuth = normalizedAuth;
147
- const refreshTokenIfNeeded = async () => {
148
- const now = Date.now();
149
- if (cachedToken && now < cachedTokenExpiry && now - lastRefreshTime < TOKEN_CACHE_DURATION) {
150
- if (cachedAuth) {
151
- return cachedAuth;
152
- }
153
- }
154
- if (!cachedAuth) {
155
- throw new Error("No authentication available");
156
- }
157
- const expiresAt = cachedAuth.expires || 0;
158
- const timeUntilExpiry = expiresAt - now;
159
- const hasValidExpiry = expiresAt > now;
160
- const shouldRefresh = !cachedAuth.access ||
161
- !hasValidExpiry ||
162
- timeUntilExpiry < REFRESH_BEFORE_EXPIRY_MS;
163
- debugLog("Token refresh check", {
164
- hasAccess: !!cachedAuth.access,
165
- expiresAt: expiresAt > 0 ? new Date(expiresAt).toISOString() : "not set",
166
- timeUntilExpiry: timeUntilExpiry > 0 ? Math.round(timeUntilExpiry / 1000) + "s" : "EXPIRED",
167
- hasValidExpiry,
168
- refreshThreshold: REFRESH_BEFORE_EXPIRY_MS,
169
- shouldRefresh,
170
- cachedToken: !!cachedToken,
171
- cacheValid: !!(cachedToken && now < cachedTokenExpiry),
172
- });
173
- if (!shouldRefresh && cachedToken) {
174
- debugLog("Token is still valid (cached), no refresh needed");
175
- return cachedAuth;
176
- }
177
- infoLog("Token refresh needed - attempting refresh", {
178
- reason: !cachedAuth.access ? "no access token" :
179
- !hasValidExpiry ? "token expired" :
180
- "token expires soon",
181
- timeUntilExpiry: timeUntilExpiry > 0 ? Math.round(timeUntilExpiry / 1000) + "s" : "EXPIRED",
182
- });
183
- return tokenRefreshMutex.runExclusive(async () => {
184
- const currentAuth = cachedAuth;
185
- if (!currentAuth || !currentAuth.refresh) {
186
- throw new Error("No refresh token available");
187
- }
188
- const result = await refreshAccessToken(currentAuth.refresh);
189
- if (result.success && result.access_token) {
190
- const expiresIn = result.expires_in || 0;
191
- // Only update expiry if valid (> 0), otherwise use 1 hour default
192
- const newExpires = expiresIn > 0
193
- ? Date.now() + expiresIn * 1000
194
- : Date.now() + 3600 * 1000; // Default: 1 hour from now
195
- const newAuth = {
196
- type: "oauth",
197
- refresh: result.refresh_token || currentAuth.refresh,
198
- access: result.access_token,
199
- expires: newExpires,
200
- apiKey: result.api_key || currentAuth.apiKey, // Preserve or update API key
201
- };
202
- cachedAuth = newAuth;
203
- cachedToken = newAuth.access;
204
- cachedTokenExpiry = newExpires;
205
- lastRefreshTime = Date.now();
206
- // Save refreshed credentials to file
207
- saveCredentials({
208
- accessToken: newAuth.access,
209
- refreshToken: newAuth.refresh,
210
- expiryDate: newExpires,
211
- tokenType: "Bearer",
212
- });
213
- try {
214
- await client.auth.set({
215
- path: { id: "qwen" },
216
- body: newAuth,
217
- });
218
- debugLog("Token refreshed and stored", {
219
- expires: newAuth.expires,
220
- });
221
- }
222
- catch (storeError) {
223
- debugLog("Failed to store refreshed token", {
224
- error: String(storeError),
225
- });
226
- }
227
- return newAuth;
228
- }
229
- debugLog("Token refresh failed", { error: result.error });
230
- throw new Error(result.error || "Token refresh failed");
231
- });
232
- };
51
+ tokenService.setCachedAuth(auth);
52
+ const authMiddleware = createAuthMiddleware({ platform: process.platform, arch: process.arch });
233
53
  return {
234
54
  apiKey: "",
235
- async fetch(input, init) {
236
- let auth;
237
- try {
238
- auth = await refreshTokenIfNeeded();
239
- }
240
- catch (refreshError) {
241
- warnLog("Failed to refresh token before API call", {
242
- error: String(refreshError),
243
- });
244
- // Return a clear error response
245
- return new Response(JSON.stringify({
246
- error: {
247
- code: "token_refresh_failed",
248
- message: "Failed to refresh your Qwen authentication token. Please run '/connect' in OpenCode to re-authenticate.",
249
- type: "auth_error",
250
- details: refreshError instanceof Error ? refreshError.message : String(refreshError)
251
- }
252
- }), {
253
- status: 401,
254
- headers: { "Content-Type": "application/json" },
255
- });
256
- }
257
- const userAgent = `QwenCode/${QWEN_CODE_VERSION} (${process.platform}; ${process.arch})`;
258
- return requestQueue.enqueue(async () => {
259
- for (let attempt = 0; attempt <= 2; attempt++) {
260
- let url;
261
- if (typeof input === "string") {
262
- url = input;
263
- }
264
- else if (input instanceof URL) {
265
- url = input.toString();
266
- }
267
- else {
268
- url = input.url;
269
- }
270
- const headers = new Headers(init?.headers);
271
- const tokenToUse = auth.apiKey || auth.access;
272
- if (tokenToUse) {
273
- headers.set("Authorization", `Bearer ${tokenToUse}`);
274
- headers.set("User-Agent", userAgent);
275
- headers.set("X-DashScope-CacheControl", "enable");
276
- headers.set("X-DashScope-UserAgent", userAgent);
277
- headers.set("X-DashScope-AuthType", "qwen-oauth");
278
- debugLog("Making API request with token", {
279
- url,
280
- attempt,
281
- tokenType: auth.apiKey ? "API Key" : "OAuth Access Token",
282
- tokenLength: tokenToUse.length,
283
- tokenPrefix: tokenToUse.substring(0, 20) + "...",
284
- hasExpiry: !!auth.expires,
285
- expiresAt: auth.expires ? new Date(auth.expires).toISOString() : "not set",
286
- isExpired: auth.expires ? auth.expires <= Date.now() : "unknown",
287
- });
288
- }
289
- else {
290
- warnLog("No access token or API key available for API request", { url });
291
- }
292
- const response = await fetch(url, {
293
- ...init,
294
- headers,
295
- });
296
- debugLog("API response received", {
297
- url,
298
- status: response.status,
299
- statusText: response.statusText,
300
- attempt,
301
- });
302
- if (response.status === 429) {
303
- const retryAfter = response.headers.get("Retry-After") || "60";
304
- const waitTimeMs = Number.parseInt(retryAfter, 10) * 1000;
305
- warnLog("Rate limited (429), waiting and retrying", {
306
- retryAfter,
307
- waitTimeMs,
308
- url,
309
- });
310
- await new Promise(resolve => setTimeout(resolve, waitTimeMs));
311
- continue;
312
- }
313
- if (response.status === 401 || response.status === 403) {
314
- const errorBody = await response.clone().json().catch(() => ({}));
315
- warnLog("Received 401/403 Unauthorized from Qwen API", {
316
- attempt,
317
- url,
318
- error: errorBody.error || errorBody.message,
319
- });
320
- const refreshedAuth = await tokenRefreshMutex.runExclusive(async () => {
321
- const currentAuth = cachedAuth;
322
- if (!currentAuth || !currentAuth.refresh) {
323
- throw new Error("No refresh token available");
324
- }
325
- const result = await refreshAccessToken(currentAuth.refresh);
326
- if (result.success && result.access_token) {
327
- const expiresIn = result.expires_in || 0;
328
- const newExpires = expiresIn > 0
329
- ? Date.now() + expiresIn * 1000
330
- : Date.now() + 3600 * 1000;
331
- const newAuth = {
332
- type: "oauth",
333
- refresh: result.refresh_token || currentAuth.refresh,
334
- access: result.access_token,
335
- expires: newExpires,
336
- apiKey: result.api_key || currentAuth.apiKey,
337
- };
338
- cachedAuth = newAuth;
339
- // Save refreshed credentials to file
340
- saveCredentials({
341
- accessToken: newAuth.access,
342
- refreshToken: newAuth.refresh,
343
- expiryDate: newExpires,
344
- tokenType: "Bearer",
345
- });
346
- try {
347
- await client.auth.set({
348
- path: { id: "qwen" },
349
- body: newAuth,
350
- });
351
- }
352
- catch (storeError) {
353
- debugLog("Failed to store refreshed token after 401", {
354
- error: String(storeError),
355
- });
356
- }
357
- return newAuth;
358
- }
359
- debugLog("Token refresh failed after 401", { error: result.error });
360
- return null;
361
- });
362
- if (refreshedAuth) {
363
- auth = refreshedAuth;
364
- debugLog("Retrying request with refreshed token", { attempt: attempt + 1 });
365
- continue;
366
- }
367
- else {
368
- warnLog("Authentication failed - please re-authenticate", {
369
- url,
370
- suggestion: "Run '/connect' in OpenCode to re-authenticate with Qwen"
371
- });
372
- return new Response(JSON.stringify({
373
- error: {
374
- code: "authentication_required",
375
- message: "Your Qwen authentication has expired. Please run '/connect' in OpenCode and re-authenticate.",
376
- type: "auth_error"
377
- }
378
- }), {
379
- status: 401,
380
- headers: { "Content-Type": "application/json" },
381
- });
382
- }
383
- }
384
- return response;
385
- }
386
- return new Response(JSON.stringify({
387
- error: {
388
- code: "max_retries_exceeded",
389
- message: "Maximum retry attempts exceeded",
390
- type: "server_error"
391
- }
392
- }), {
393
- status: 500,
394
- headers: { "Content-Type": "application/json" },
395
- });
396
- });
397
- },
55
+ fetch: authMiddleware,
398
56
  };
399
57
  },
400
58
  methods: [
@@ -402,21 +60,14 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
402
60
  type: "oauth",
403
61
  label: "Qwen Code (qwen.ai OAuth)",
404
62
  authorize: async () => {
405
- if (authorizationMutex.isLocked()) {
406
- warnLog("Authorization already in progress");
407
- throw new Error("Authorization already in progress. Please wait for the current flow to complete.");
63
+ if (authMutex.isLocked()) {
64
+ throw new Error("Authorization already in progress");
408
65
  }
409
- return authorizationMutex.runExclusive(async () => {
66
+ return authMutex.runExclusive(async () => {
410
67
  debugLog("Starting Qwen OAuth device flow...");
411
68
  const device = await authorizeDevice();
412
69
  const url = device.verification_uri_complete || device.verification_uri;
413
70
  openBrowser(url);
414
- debugLog("Device authorization received", {
415
- user_code: device.user_code,
416
- verification_uri: device.verification_uri,
417
- expires_in: device.expires_in,
418
- interval: device.interval,
419
- });
420
71
  return {
421
72
  url,
422
73
  instructions: `Enter code: ${device.user_code}`,
@@ -426,10 +77,7 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
426
77
  const result = await pollForToken(device.device_code, device.verifier, device.interval, device.expires_in);
427
78
  if (result.success) {
428
79
  const expiresIn = result.expires_in || 0;
429
- // Default to 6 hours (21600s) if not provided, matching Qwen's typical expiry
430
- const expires = expiresIn > 0
431
- ? Date.now() + expiresIn * 1000
432
- : Date.now() + 21600 * 1000;
80
+ const expires = expiresIn > 0 ? Date.now() + expiresIn * 1000 : Date.now() + 21600 * 1000;
433
81
  const authResult = {
434
82
  type: "oauth",
435
83
  refresh: result.refresh_token || "",
@@ -437,32 +85,19 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
437
85
  expires,
438
86
  apiKey: result.api_key,
439
87
  };
440
- cachedAuth = authResult;
441
- // Save credentials to file for persistence across sessions
442
- console.log("[Qwen] Saving credentials after OAuth...");
443
- saveCredentials({
88
+ tokenService.setCachedAuth(authResult);
89
+ credentialRepository.save({
444
90
  accessToken: result.access_token || "",
445
- refreshToken: result.refresh_token,
91
+ refreshToken: result.refresh_token || "",
446
92
  expiryDate: expires,
447
93
  tokenType: "Bearer",
448
94
  });
449
- console.log("[Qwen] Credentials saved to ~/.qwen/oauth_creds.json");
450
95
  debugLog("Qwen authentication successful!", {
451
96
  expires_in: result.expires_in,
452
97
  has_refresh: !!result.refresh_token,
453
98
  has_api_key: !!result.api_key,
454
99
  });
455
- if (result.api_key) {
456
- infoLog("Received separate API key for Qwen API - will use for API calls");
457
- }
458
- return {
459
- type: "success",
460
- refresh: result.refresh_token || "",
461
- access: result.access_token || "",
462
- expires: expires || 0,
463
- apiKey: result.api_key, // Qwen-specific API key
464
- api_key: result.api_key, // Also include snake_case version for compatibility
465
- };
100
+ return authResult;
466
101
  }
467
102
  debugLog(`Authentication failed: ${result.error}`);
468
103
  return { type: "failed", error: result.error };
@@ -473,15 +108,13 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
473
108
  },
474
109
  ],
475
110
  },
476
- config: async (config) => {
477
- const providers = config.provider || {};
478
- config.provider = providers;
111
+ config: async (cfg) => {
112
+ const providers = cfg.provider || {};
113
+ cfg.provider = providers;
479
114
  providers["qwen"] = {
480
115
  npm: "@ai-sdk/openai-compatible",
481
116
  name: "Qwen Code",
482
- options: {
483
- baseURL: QWEN_API_BASE_URL,
484
- },
117
+ options: { baseURL: QWEN_API_BASE_URL },
485
118
  models: {
486
119
  "coder-model": {
487
120
  id: "coder-model",
@@ -501,27 +134,13 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
501
134
  },
502
135
  event: async ({ event }) => {
503
136
  if (event.type === "session.error") {
504
- debugLog("Session error occurred", {
505
- type: event.type,
506
- timestamp: new Date().toISOString(),
507
- });
508
- }
509
- if (event.type === "session.created") {
510
- debugLog("New session created", {
511
- type: event.type,
512
- timestamp: new Date().toISOString(),
513
- });
137
+ debugLog("Session error occurred", { timestamp: new Date().toISOString() });
514
138
  }
515
139
  },
516
140
  "chat.headers": async (input, output) => {
517
141
  const providerId = input.provider?.info?.id || input.provider?.id;
518
142
  if (providerId === "qwen" || providerId === "qwen-code") {
519
- debugLog("Adding custom headers for Qwen request", {
520
- model: input.model.id,
521
- session: input.sessionID,
522
- providerId,
523
- });
524
- const userAgent = `QwenCode/${QWEN_CODE_VERSION} (${process.platform}; ${process.arch})`;
143
+ const userAgent = `QwenCode/${PLUGIN_VERSION} (${process.platform}; ${process.arch})`;
525
144
  output.headers["User-Agent"] = userAgent;
526
145
  output.headers["X-DashScope-CacheControl"] = "enable";
527
146
  output.headers["X-DashScope-UserAgent"] = userAgent;
@@ -531,23 +150,11 @@ export const QwenOAuthPlugin = async ({ project, client, directory, worktree, })
531
150
  "chat.params": async (input, output) => {
532
151
  const providerId = input.provider?.info?.id || input.provider?.id;
533
152
  if (providerId === "qwen" || providerId === "qwen-code") {
534
- debugLog("Customizing parameters for Qwen model", {
535
- model: input.model.id,
536
- current_temp: output.temperature,
537
- });
538
- if (output.temperature === undefined) {
539
- output.temperature = 0.7;
540
- }
541
- if (output.topP === undefined) {
542
- output.topP = 0.95;
543
- }
153
+ output.temperature = output.temperature ?? 0.7;
154
+ output.topP = output.topP ?? 0.95;
544
155
  }
545
156
  },
546
157
  "shell.env": async (input, output) => {
547
- debugLog("Setting up shell environment", {
548
- cwd: input.cwd,
549
- hasSession: !!input.sessionID,
550
- });
551
158
  output.env.QWEN_API_BASE_URL = QWEN_API_BASE_URL;
552
159
  output.env.QWEN_PROVIDER = "qwen";
553
160
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}