@vybestack/llxprt-code 0.1.19-alpha → 0.1.19-gamma

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 (203) hide show
  1. package/README.md +49 -2
  2. package/dist/package.json +3 -3
  3. package/dist/src/auth/anthropic-oauth-provider.d.ts +33 -0
  4. package/dist/src/auth/anthropic-oauth-provider.js +129 -0
  5. package/dist/src/auth/anthropic-oauth-provider.js.map +1 -0
  6. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  7. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  8. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  9. package/dist/src/auth/oauth-manager.d.ts +109 -0
  10. package/dist/src/auth/oauth-manager.js +334 -0
  11. package/dist/src/auth/oauth-manager.js.map +1 -0
  12. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  13. package/dist/src/auth/oauth-manager.spec.js +523 -0
  14. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  15. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  16. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  17. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  18. package/dist/src/auth/types.d.ts +7 -0
  19. package/dist/src/auth/types.js +7 -0
  20. package/dist/src/auth/types.js.map +1 -0
  21. package/dist/src/config/auth.js +11 -0
  22. package/dist/src/config/auth.js.map +1 -1
  23. package/dist/src/config/config.js +52 -30
  24. package/dist/src/config/config.js.map +1 -1
  25. package/dist/src/config/keyBindings.d.ts +66 -0
  26. package/dist/src/config/keyBindings.js +136 -0
  27. package/dist/src/config/keyBindings.js.map +1 -0
  28. package/dist/src/config/settings.d.ts +3 -61
  29. package/dist/src/config/settings.js.map +1 -1
  30. package/dist/src/config/settingsSchema.d.ts +587 -0
  31. package/dist/src/config/settingsSchema.js +565 -0
  32. package/dist/src/config/settingsSchema.js.map +1 -0
  33. package/dist/src/gemini.js +9 -2
  34. package/dist/src/gemini.js.map +1 -1
  35. package/dist/src/generated/git-commit.d.ts +1 -1
  36. package/dist/src/generated/git-commit.js +1 -1
  37. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  38. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  39. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  40. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  41. package/dist/src/providers/logging/git-stats.js +137 -0
  42. package/dist/src/providers/logging/git-stats.js.map +1 -0
  43. package/dist/src/providers/providerManagerInstance.d.ts +2 -0
  44. package/dist/src/providers/providerManagerInstance.js +49 -5
  45. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  46. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  47. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  48. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  49. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  50. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  51. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  52. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  53. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  54. package/dist/src/ui/App.js +153 -36
  55. package/dist/src/ui/App.js.map +1 -1
  56. package/dist/src/ui/colors.d.ts +5 -0
  57. package/dist/src/ui/colors.js +51 -0
  58. package/dist/src/ui/colors.js.map +1 -1
  59. package/dist/src/ui/commands/authCommand.d.ts +11 -1
  60. package/dist/src/ui/commands/authCommand.js +145 -48
  61. package/dist/src/ui/commands/authCommand.js.map +1 -1
  62. package/dist/src/ui/commands/chatCommand.js +16 -0
  63. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  64. package/dist/src/ui/commands/diagnosticsCommand.js +94 -10
  65. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  66. package/dist/src/ui/commands/ideCommand.js +67 -31
  67. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  68. package/dist/src/ui/commands/keyCommand.js +32 -2
  69. package/dist/src/ui/commands/keyCommand.js.map +1 -1
  70. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  71. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  72. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  73. package/dist/src/ui/commands/loggingCommand.js +421 -0
  74. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  75. package/dist/src/ui/commands/modelCommand.js +21 -3
  76. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  77. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  78. package/dist/src/ui/commands/privacyCommand.js +6 -3
  79. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  80. package/dist/src/ui/commands/providerCommand.js +52 -14
  81. package/dist/src/ui/commands/providerCommand.js.map +1 -1
  82. package/dist/src/ui/commands/setCommand.js +17 -1
  83. package/dist/src/ui/commands/setCommand.js.map +1 -1
  84. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  85. package/dist/src/ui/commands/settingsCommand.js +16 -0
  86. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  87. package/dist/src/ui/commands/toolformatCommand.js +79 -23
  88. package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
  89. package/dist/src/ui/commands/types.d.ts +14 -2
  90. package/dist/src/ui/commands/types.js.map +1 -1
  91. package/dist/src/ui/components/AuthDialog.js +15 -54
  92. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  93. package/dist/src/ui/components/ContextUsageDisplay.js +14 -2
  94. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  95. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  96. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  97. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  98. package/dist/src/ui/components/Footer.js +136 -16
  99. package/dist/src/ui/components/Footer.js.map +1 -1
  100. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  101. package/dist/src/ui/components/InputPrompt.js +87 -31
  102. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  103. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  104. package/dist/src/ui/components/LoggingDialog.js +155 -0
  105. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  106. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  107. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  108. package/dist/src/ui/components/OAuthCodeDialog.d.ts +13 -0
  109. package/dist/src/ui/components/OAuthCodeDialog.js +54 -0
  110. package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -0
  111. package/dist/src/ui/components/ProviderDialog.js +100 -26
  112. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  113. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  114. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  115. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  116. package/dist/src/ui/components/SettingsDialog.js +247 -0
  117. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  118. package/dist/src/ui/components/ThemeDialog.js +4 -15
  119. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  120. package/dist/src/ui/components/TodoPanel.js +93 -18
  121. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  122. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +85 -7
  123. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  124. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  125. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  126. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  127. package/dist/src/ui/hooks/atCommandProcessor.js +21 -0
  128. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  129. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  130. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  131. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  132. package/dist/src/ui/hooks/useAuthCommand.js +48 -2
  133. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  134. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  135. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  136. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  137. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  138. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  139. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  140. package/dist/src/ui/hooks/useGeminiStream.js +35 -10
  141. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  142. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  143. package/dist/src/ui/hooks/useResponsive.js +19 -0
  144. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  145. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  146. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  147. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  148. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  149. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  150. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  151. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  152. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  153. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  154. package/dist/src/ui/keyMatchers.d.ts +26 -0
  155. package/dist/src/ui/keyMatchers.js +68 -0
  156. package/dist/src/ui/keyMatchers.js.map +1 -0
  157. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  158. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  159. package/dist/src/ui/reducers/appReducer.d.ts +3 -2
  160. package/dist/src/ui/reducers/appReducer.js +1 -0
  161. package/dist/src/ui/reducers/appReducer.js.map +1 -1
  162. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  163. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  164. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  165. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  166. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  167. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  168. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  169. package/dist/src/ui/themes/theme-compat.js +65 -0
  170. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  171. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  172. package/dist/src/ui/themes/theme-manager.js +18 -0
  173. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  174. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  175. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  176. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  177. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  178. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  179. package/dist/src/ui/utils/responsive.d.ts +16 -0
  180. package/dist/src/ui/utils/responsive.js +111 -0
  181. package/dist/src/ui/utils/responsive.js.map +1 -0
  182. package/dist/src/utils/cleanup.d.ts +2 -2
  183. package/dist/src/utils/cleanup.js +2 -2
  184. package/dist/src/utils/cleanup.js.map +1 -1
  185. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  186. package/dist/src/utils/dialogScopeUtils.js +48 -0
  187. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  188. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  189. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  190. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  191. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  192. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  193. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  194. package/dist/src/utils/sandbox.js +10 -0
  195. package/dist/src/utils/sandbox.js.map +1 -1
  196. package/dist/src/utils/settingsUtils.d.ts +126 -0
  197. package/dist/src/utils/settingsUtils.js +327 -0
  198. package/dist/src/utils/settingsUtils.js.map +1 -0
  199. package/dist/tsconfig.tsbuildinfo +1 -1
  200. package/package.json +3 -3
  201. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  202. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -30
  203. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,334 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { SettingScope } from '../config/settings.js';
7
+ /**
8
+ * OAuth Manager coordinates multiple OAuth providers
9
+ * Provides unified interface for authentication across providers
10
+ */
11
+ export class OAuthManager {
12
+ providers;
13
+ tokenStore;
14
+ settings;
15
+ constructor(tokenStore, settings) {
16
+ this.providers = new Map();
17
+ this.tokenStore = tokenStore;
18
+ this.settings = settings;
19
+ }
20
+ /**
21
+ * Register an OAuth provider with the manager
22
+ * @param provider - The OAuth provider to register
23
+ */
24
+ registerProvider(provider) {
25
+ if (!provider) {
26
+ throw new Error('Provider cannot be null or undefined');
27
+ }
28
+ if (!provider.name || typeof provider.name !== 'string') {
29
+ throw new Error('Provider must have a valid name');
30
+ }
31
+ // Validate provider has required methods
32
+ if (typeof provider.initiateAuth !== 'function') {
33
+ throw new Error('Provider must implement initiateAuth method');
34
+ }
35
+ if (typeof provider.getToken !== 'function') {
36
+ throw new Error('Provider must implement getToken method');
37
+ }
38
+ if (typeof provider.refreshIfNeeded !== 'function') {
39
+ throw new Error('Provider must implement refreshIfNeeded method');
40
+ }
41
+ this.providers.set(provider.name, provider);
42
+ }
43
+ /**
44
+ * Get a registered OAuth provider
45
+ * @param name - Provider name
46
+ * @returns OAuth provider or undefined if not registered
47
+ */
48
+ getProvider(name) {
49
+ return this.providers.get(name);
50
+ }
51
+ /**
52
+ * Authenticate with a specific provider
53
+ * @param providerName - Name of the provider to authenticate with
54
+ */
55
+ async authenticate(providerName) {
56
+ if (!providerName || typeof providerName !== 'string') {
57
+ throw new Error('Provider name must be a non-empty string');
58
+ }
59
+ const provider = this.providers.get(providerName);
60
+ if (!provider) {
61
+ throw new Error(`Unknown provider: ${providerName}`);
62
+ }
63
+ try {
64
+ // 1. Initiate authentication with the provider
65
+ await provider.initiateAuth();
66
+ // 2. Get token from provider after successful auth
67
+ const providerToken = await provider.getToken();
68
+ if (!providerToken) {
69
+ throw new Error('Authentication completed but no token was returned');
70
+ }
71
+ // 3. Store token using tokenStore
72
+ await this.tokenStore.saveToken(providerName, providerToken);
73
+ }
74
+ catch (error) {
75
+ // Propagate provider authentication errors
76
+ if (error instanceof Error) {
77
+ throw error;
78
+ }
79
+ throw new Error(`Authentication failed for provider ${providerName}: ${String(error)}`);
80
+ }
81
+ }
82
+ /**
83
+ * Get authentication status for all registered providers
84
+ * @returns Array of authentication status for each provider
85
+ */
86
+ async getAuthStatus() {
87
+ const statuses = [];
88
+ // Get all registered providers and check their status
89
+ for (const [providerName, _provider] of this.providers) {
90
+ try {
91
+ const token = await this.tokenStore.getToken(providerName);
92
+ const oauthEnabled = this.isOAuthEnabled(providerName);
93
+ if (token) {
94
+ // Provider is authenticated, calculate time until expiry
95
+ const now = Date.now();
96
+ const expiresIn = Math.max(0, Math.floor((token.expiry - now) / 1000)); // seconds
97
+ statuses.push({
98
+ provider: providerName,
99
+ authenticated: true,
100
+ authType: 'oauth',
101
+ expiresIn,
102
+ oauthEnabled,
103
+ });
104
+ }
105
+ else {
106
+ // Provider is not authenticated
107
+ statuses.push({
108
+ provider: providerName,
109
+ authenticated: false,
110
+ authType: 'none',
111
+ oauthEnabled,
112
+ });
113
+ }
114
+ }
115
+ catch (_error) {
116
+ // If we can't get token status, consider it unauthenticated
117
+ const oauthEnabled = this.isOAuthEnabled(providerName);
118
+ statuses.push({
119
+ provider: providerName,
120
+ authenticated: false,
121
+ authType: 'none',
122
+ oauthEnabled,
123
+ });
124
+ }
125
+ }
126
+ return statuses;
127
+ }
128
+ /**
129
+ * Check if authenticated with a specific provider (required by precedence resolver)
130
+ * @param providerName - Name of the provider
131
+ * @returns True if authenticated, false otherwise
132
+ */
133
+ async isAuthenticated(providerName) {
134
+ // Special handling for Gemini - check if OAuth is enabled and working
135
+ if (providerName === 'gemini' && this.isOAuthEnabled('gemini')) {
136
+ // For Gemini, if OAuth is enabled, we assume it's authenticated
137
+ // since the actual auth is handled by LOGIN_WITH_GOOGLE
138
+ return true;
139
+ }
140
+ const token = await this.getOAuthToken(providerName);
141
+ return token !== null;
142
+ }
143
+ /**
144
+ * Get OAuth token for a specific provider
145
+ * Compatible with precedence resolver - returns access token string
146
+ * @param providerName - Name of the provider
147
+ * @returns Access token string if available, null otherwise
148
+ */
149
+ async getToken(providerName) {
150
+ // Check if OAuth is enabled for this provider
151
+ if (!this.isOAuthEnabled(providerName)) {
152
+ return null;
153
+ }
154
+ const token = await this.getOAuthToken(providerName);
155
+ // Special handling for different providers
156
+ if (providerName === 'gemini') {
157
+ if (token) {
158
+ return token.access_token;
159
+ }
160
+ // Return a special token that signals to use LOGIN_WITH_GOOGLE
161
+ return 'USE_LOGIN_WITH_GOOGLE';
162
+ }
163
+ // For Qwen, return the OAuth token to be used as API key
164
+ if (providerName === 'qwen' && token) {
165
+ return token.access_token;
166
+ }
167
+ if (token) {
168
+ return token.access_token;
169
+ }
170
+ // For other providers, trigger OAuth flow
171
+ try {
172
+ await this.authenticate(providerName);
173
+ const newToken = await this.getOAuthToken(providerName);
174
+ // Return the access token without any prefix - OAuth Bearer tokens should be used as-is
175
+ return newToken ? newToken.access_token : null;
176
+ }
177
+ catch (error) {
178
+ // Re-throw the error so it's not silently swallowed
179
+ console.error(`OAuth authentication failed for ${providerName}:`, error);
180
+ throw error;
181
+ }
182
+ }
183
+ /**
184
+ * Get OAuth token object for a specific provider
185
+ * @param providerName - Name of the provider
186
+ * @returns OAuth token if available, null otherwise
187
+ */
188
+ async getOAuthToken(providerName) {
189
+ if (!providerName || typeof providerName !== 'string') {
190
+ throw new Error('Provider name must be a non-empty string');
191
+ }
192
+ const provider = this.providers.get(providerName);
193
+ if (!provider) {
194
+ throw new Error(`Unknown provider: ${providerName}`);
195
+ }
196
+ try {
197
+ // 1. Try to get token from store
198
+ const token = await this.tokenStore.getToken(providerName);
199
+ if (!token) {
200
+ return null;
201
+ }
202
+ // 2. Check if token expires within 30 seconds (30000ms)
203
+ const now = Date.now();
204
+ const thirtySecondsFromNow = now + 30000;
205
+ if (token.expiry <= thirtySecondsFromNow) {
206
+ // 3. Token is expired or about to expire, try refresh
207
+ try {
208
+ const refreshedToken = await provider.refreshIfNeeded();
209
+ if (refreshedToken) {
210
+ // 4. Update stored token if refreshed
211
+ await this.tokenStore.saveToken(providerName, refreshedToken);
212
+ return refreshedToken;
213
+ }
214
+ else {
215
+ // Refresh failed, return null
216
+ return null;
217
+ }
218
+ }
219
+ catch (_error) {
220
+ // Token refresh failure: Return null, no logging
221
+ return null;
222
+ }
223
+ }
224
+ // 5. Return valid token
225
+ return token;
226
+ }
227
+ catch (error) {
228
+ // For unknown provider or other critical errors, throw
229
+ if (error instanceof Error &&
230
+ error.message.includes('Unknown provider')) {
231
+ throw error;
232
+ }
233
+ // For other errors, return null
234
+ return null;
235
+ }
236
+ }
237
+ /**
238
+ * Get list of all registered provider names
239
+ * @returns Array of provider names
240
+ */
241
+ getSupportedProviders() {
242
+ return Array.from(this.providers.keys()).sort();
243
+ }
244
+ /**
245
+ * Toggle OAuth enablement for a provider
246
+ * @param providerName - Name of the provider
247
+ * @returns New enablement state (true if enabled, false if disabled)
248
+ */
249
+ async toggleOAuthEnabled(providerName) {
250
+ if (!providerName || typeof providerName !== 'string') {
251
+ throw new Error('Provider name must be a non-empty string');
252
+ }
253
+ const provider = this.providers.get(providerName);
254
+ if (!provider) {
255
+ throw new Error(`Unknown provider: ${providerName}`);
256
+ }
257
+ if (!this.settings) {
258
+ throw new Error('Settings are required to toggle OAuth enablement');
259
+ }
260
+ const currentlyEnabled = this.isOAuthEnabled(providerName);
261
+ const newState = !currentlyEnabled;
262
+ // Get current OAuth enabled providers or initialize empty object
263
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
264
+ oauthEnabledProviders[providerName] = newState;
265
+ // Save the updated configuration
266
+ this.settings.setValue(SettingScope.User, 'oauthEnabledProviders', oauthEnabledProviders);
267
+ return newState;
268
+ }
269
+ /**
270
+ * Check if OAuth is enabled for a provider
271
+ * @param providerName - Name of the provider
272
+ * @returns True if OAuth is enabled, false otherwise
273
+ */
274
+ isOAuthEnabled(providerName) {
275
+ if (!this.settings) {
276
+ // Default to false if no settings available
277
+ return false;
278
+ }
279
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
280
+ return oauthEnabledProviders[providerName] ?? false;
281
+ }
282
+ /**
283
+ * Check for higher priority authentication methods
284
+ * @param providerName - Name of the provider to check
285
+ * @returns String describing higher priority auth method, null if none
286
+ */
287
+ async getHigherPriorityAuth(providerName) {
288
+ if (!this.settings) {
289
+ return null;
290
+ }
291
+ const merged = this.settings.merged;
292
+ // Check for API keys (highest priority)
293
+ if (merged.providerApiKeys && merged.providerApiKeys[providerName]) {
294
+ return 'API Key';
295
+ }
296
+ // Check for keyfiles (second highest priority)
297
+ if (merged.providerKeyfiles && merged.providerKeyfiles[providerName]) {
298
+ return 'Keyfile';
299
+ }
300
+ // Check for environment variables
301
+ const envKeyName = `${providerName.toUpperCase()}_API_KEY`;
302
+ if (process.env[envKeyName]) {
303
+ return 'Environment Variable';
304
+ }
305
+ // For OpenAI-based providers, check if baseURL is compatible
306
+ if (providerName === 'qwen') {
307
+ const baseUrls = merged.providerBaseUrls || {};
308
+ const openaiBaseUrl = baseUrls['openai'];
309
+ if (openaiBaseUrl && !this.isQwenCompatibleUrl(openaiBaseUrl)) {
310
+ return 'OpenAI BaseURL Mismatch';
311
+ }
312
+ }
313
+ return null;
314
+ }
315
+ /**
316
+ * Check if a URL is compatible with Qwen OAuth
317
+ * @param url - The base URL to check
318
+ * @returns True if compatible, false otherwise
319
+ */
320
+ isQwenCompatibleUrl(url) {
321
+ if (!url)
322
+ return true; // Default OpenAI endpoint is compatible
323
+ // Qwen-compatible URLs
324
+ const qwenDomains = ['dashscope.aliyuncs.com', 'qwen.com', 'api.qwen.com'];
325
+ try {
326
+ const urlObj = new URL(url);
327
+ return qwenDomains.some((domain) => urlObj.hostname.includes(domain));
328
+ }
329
+ catch {
330
+ return false; // Invalid URL format
331
+ }
332
+ }
333
+ }
334
+ //# sourceMappingURL=oauth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.js","sourceRoot":"","sources":["../../../src/auth/oauth-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAkB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA6BrE;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,SAAS,CAA6B;IACtC,UAAU,CAAa;IACvB,QAAQ,CAAkB;IAElC,YAAY,UAAsB,EAAE,QAAyB;QAC3D,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAuB;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,yCAAyC;QACzC,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,QAAQ,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,YAAoB;QACrC,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;YAE9B,mDAAmD;YACnD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,kCAAkC;YAClC,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,2CAA2C;YAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,KAAK,CACb,sCAAsC,YAAY,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,sDAAsD;QACtD,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBAEvD,IAAI,KAAK,EAAE,CAAC;oBACV,yDAAyD;oBACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CACxC,CAAC,CAAC,UAAU;oBAEb,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,YAAY;wBACtB,aAAa,EAAE,IAAI;wBACnB,QAAQ,EAAE,OAAO;wBACjB,SAAS;wBACT,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,gCAAgC;oBAChC,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,YAAY;wBACtB,aAAa,EAAE,KAAK;wBACpB,QAAQ,EAAE,MAAM;wBAChB,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,4DAA4D;gBAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,YAAY;oBACtB,aAAa,EAAE,KAAK;oBACpB,QAAQ,EAAE,MAAM;oBAChB,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAC,YAAoB;QACxC,sEAAsE;QACtE,IAAI,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,gEAAgE;YAChE,wDAAwD;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACrD,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,YAAoB;QACjC,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAErD,2CAA2C;QAC3C,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC,YAAY,CAAC;YAC5B,CAAC;YACD,+DAA+D;YAC/D,OAAO,uBAAuB,CAAC;QACjC,CAAC;QAED,yDAAyD;QACzD,IAAI,YAAY,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,YAAY,CAAC;QAC5B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,YAAY,CAAC;QAC5B,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACxD,wFAAwF;YACxF,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oDAAoD;YACpD,OAAO,CAAC,KAAK,CAAC,mCAAmC,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC;YACH,iCAAiC;YACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC;YACd,CAAC;YAED,wDAAwD;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,KAAK,CAAC;YAEzC,IAAI,KAAK,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACzC,sDAAsD;gBACtD,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,CAAC;oBACxD,IAAI,cAAc,EAAE,CAAC;wBACnB,sCAAsC;wBACtC,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;wBAC9D,OAAO,cAAc,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACN,8BAA8B;wBAC9B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,iDAAiD;oBACjD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uDAAuD;YACvD,IACE,KAAK,YAAY,KAAK;gBACtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAC1C,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,gCAAgC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QAC3C,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,CAAC,gBAAgB,CAAC;QAEnC,iEAAiE;QACjE,MAAM,qBAAqB,GACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;QACnD,qBAAqB,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;QAE/C,iCAAiC;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,YAAY,CAAC,IAAI,EACjB,uBAAuB,EACvB,qBAAqB,CACtB,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,YAAoB;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,4CAA4C;YAC5C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,qBAAqB,GACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,IAAI,EAAE,CAAC;QACnD,OAAO,qBAAqB,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,qBAAqB,CAAC,YAAoB;QAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEpC,wCAAwC;QACxC,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YACnE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+CAA+C;QAC/C,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,kCAAkC;QAClC,MAAM,UAAU,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC;QAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,sBAAsB,CAAC;QAChC,CAAC;QAED,6DAA6D;QAC7D,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9D,OAAO,yBAAyB,CAAC;YACnC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,GAAW;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,CAAC,wCAAwC;QAE/D,uBAAuB;QACvB,MAAM,WAAW,GAAG,CAAC,wBAAwB,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,CAAC,qBAAqB;QACrC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};