@vybestack/llxprt-code 0.1.18-nightly.250807.306d1939 → 0.1.18-nightly.250811.b0db22c6

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 (250) hide show
  1. package/README.md +1 -0
  2. package/dist/package.json +6 -4
  3. package/dist/src/acp/acpPeer.js +72 -64
  4. package/dist/src/acp/acpPeer.js.map +1 -1
  5. package/dist/src/auth/gemini-oauth-provider.d.ts +15 -0
  6. package/dist/src/auth/gemini-oauth-provider.js +33 -0
  7. package/dist/src/auth/gemini-oauth-provider.js.map +1 -0
  8. package/dist/src/auth/oauth-manager.d.ts +103 -0
  9. package/dist/src/auth/oauth-manager.js +326 -0
  10. package/dist/src/auth/oauth-manager.js.map +1 -0
  11. package/dist/src/auth/oauth-manager.spec.d.ts +6 -0
  12. package/dist/src/auth/oauth-manager.spec.js +523 -0
  13. package/dist/src/auth/oauth-manager.spec.js.map +1 -0
  14. package/dist/src/auth/qwen-oauth-provider.d.ts +14 -0
  15. package/dist/src/auth/qwen-oauth-provider.js +75 -0
  16. package/dist/src/auth/qwen-oauth-provider.js.map +1 -0
  17. package/dist/src/auth/types.d.ts +7 -0
  18. package/dist/src/auth/types.js +7 -0
  19. package/dist/src/auth/types.js.map +1 -0
  20. package/dist/src/commands/mcp/add.d.ts +7 -0
  21. package/dist/src/commands/mcp/add.js +155 -0
  22. package/dist/src/commands/mcp/add.js.map +1 -0
  23. package/dist/src/commands/mcp/list.d.ts +8 -0
  24. package/dist/src/commands/mcp/list.js +110 -0
  25. package/dist/src/commands/mcp/list.js.map +1 -0
  26. package/dist/src/commands/mcp/remove.d.ts +7 -0
  27. package/dist/src/commands/mcp/remove.js +44 -0
  28. package/dist/src/commands/mcp/remove.js.map +1 -0
  29. package/dist/src/commands/mcp.d.ts +7 -0
  30. package/dist/src/commands/mcp.js +23 -0
  31. package/dist/src/commands/mcp.js.map +1 -0
  32. package/dist/src/config/auth.js +9 -0
  33. package/dist/src/config/auth.js.map +1 -1
  34. package/dist/src/config/config.js +100 -43
  35. package/dist/src/config/config.js.map +1 -1
  36. package/dist/src/config/keyBindings.d.ts +66 -0
  37. package/dist/src/config/keyBindings.js +136 -0
  38. package/dist/src/config/keyBindings.js.map +1 -0
  39. package/dist/src/config/settings.d.ts +3 -56
  40. package/dist/src/config/settings.js +20 -4
  41. package/dist/src/config/settings.js.map +1 -1
  42. package/dist/src/config/settingsSchema.d.ts +587 -0
  43. package/dist/src/config/settingsSchema.js +565 -0
  44. package/dist/src/config/settingsSchema.js.map +1 -0
  45. package/dist/src/gemini.js +12 -109
  46. package/dist/src/gemini.js.map +1 -1
  47. package/dist/src/generated/git-commit.d.ts +1 -1
  48. package/dist/src/generated/git-commit.js +1 -1
  49. package/dist/src/nonInteractiveCli.js +0 -1
  50. package/dist/src/nonInteractiveCli.js.map +1 -1
  51. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  52. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  53. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  54. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  55. package/dist/src/providers/logging/git-stats.js +137 -0
  56. package/dist/src/providers/logging/git-stats.js.map +1 -0
  57. package/dist/src/providers/providerManagerInstance.js +42 -4
  58. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  59. package/dist/src/services/BuiltinCommandLoader.js +4 -0
  60. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  61. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  62. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  63. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  64. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  65. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  66. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  67. package/dist/src/ui/App.js +123 -37
  68. package/dist/src/ui/App.js.map +1 -1
  69. package/dist/src/ui/IdeIntegrationNudge.d.ts +14 -0
  70. package/dist/src/ui/IdeIntegrationNudge.js +32 -0
  71. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  72. package/dist/src/ui/colors.d.ts +5 -0
  73. package/dist/src/ui/colors.js +51 -0
  74. package/dist/src/ui/colors.js.map +1 -1
  75. package/dist/src/ui/commands/authCommand.d.ts +11 -1
  76. package/dist/src/ui/commands/authCommand.js +143 -48
  77. package/dist/src/ui/commands/authCommand.js.map +1 -1
  78. package/dist/src/ui/commands/chatCommand.js +16 -0
  79. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  80. package/dist/src/ui/commands/diagnosticsCommand.js +9 -1
  81. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  82. package/dist/src/ui/commands/ideCommand.js +67 -31
  83. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  84. package/dist/src/ui/commands/keyfileCommand.js +15 -12
  85. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  86. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  87. package/dist/src/ui/commands/loggingCommand.js +421 -0
  88. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  89. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  90. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  91. package/dist/src/ui/commands/privacyCommand.js +6 -3
  92. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  93. package/dist/src/ui/commands/profileCommand.js +1 -0
  94. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  95. package/dist/src/ui/commands/setCommand.js +2 -0
  96. package/dist/src/ui/commands/setCommand.js.map +1 -1
  97. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  98. package/dist/src/ui/commands/settingsCommand.js +16 -0
  99. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  100. package/dist/src/ui/commands/setupGithubCommand.js +90 -26
  101. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  102. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  103. package/dist/src/ui/commands/types.d.ts +14 -2
  104. package/dist/src/ui/commands/types.js.map +1 -1
  105. package/dist/src/ui/components/AuthDialog.js +13 -56
  106. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  107. package/dist/src/ui/components/AuthInProgress.js +3 -3
  108. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  109. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  110. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  111. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  112. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  113. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  114. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  115. package/dist/src/ui/components/Footer.js +132 -15
  116. package/dist/src/ui/components/Footer.js.map +1 -1
  117. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  118. package/dist/src/ui/components/InputPrompt.js +87 -31
  119. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  120. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  121. package/dist/src/ui/components/LoggingDialog.js +155 -0
  122. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  123. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  124. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  125. package/dist/src/ui/components/ProviderDialog.js +100 -26
  126. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  127. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  128. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  129. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  130. package/dist/src/ui/components/SettingsDialog.js +247 -0
  131. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  132. package/dist/src/ui/components/ThemeDialog.js +4 -15
  133. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  134. package/dist/src/ui/components/TodoPanel.d.ts +11 -0
  135. package/dist/src/ui/components/TodoPanel.js +206 -0
  136. package/dist/src/ui/components/TodoPanel.js.map +1 -0
  137. package/dist/src/ui/components/ToolsDialog.d.ts +2 -2
  138. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +116 -16
  139. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  140. package/dist/src/ui/components/messages/ToolGroupMessage.js +36 -8
  141. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  142. package/dist/src/ui/components/todo-utils.d.ts +16 -0
  143. package/dist/src/ui/components/todo-utils.js +41 -0
  144. package/dist/src/ui/components/todo-utils.js.map +1 -0
  145. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  146. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  147. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  148. package/dist/src/ui/contexts/TodoContext.d.ts +15 -0
  149. package/dist/src/ui/contexts/TodoContext.js +18 -0
  150. package/dist/src/ui/contexts/TodoContext.js.map +1 -0
  151. package/dist/src/ui/contexts/TodoProvider.d.ts +7 -0
  152. package/dist/src/ui/contexts/TodoProvider.js +62 -0
  153. package/dist/src/ui/contexts/TodoProvider.js.map +1 -0
  154. package/dist/src/ui/contexts/ToolCallContext.d.ts +19 -0
  155. package/dist/src/ui/contexts/ToolCallContext.js +13 -0
  156. package/dist/src/ui/contexts/ToolCallContext.js.map +1 -0
  157. package/dist/src/ui/contexts/ToolCallProvider.d.ts +12 -0
  158. package/dist/src/ui/contexts/ToolCallProvider.js +62 -0
  159. package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -0
  160. package/dist/src/ui/hooks/atCommandProcessor.js +28 -4
  161. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  162. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -2
  163. package/dist/src/ui/hooks/slashCommandProcessor.js +142 -113
  164. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  165. package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
  166. package/dist/src/ui/hooks/useAtCompletion.js +180 -0
  167. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
  168. package/dist/src/ui/hooks/useAuthCommand.js +14 -0
  169. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  170. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  171. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  172. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  173. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  174. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  175. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  176. package/dist/src/ui/hooks/useGeminiStream.js +16 -4
  177. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  178. package/dist/src/ui/hooks/useReactToolScheduler.js +12 -12
  179. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  180. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  181. package/dist/src/ui/hooks/useResponsive.js +19 -0
  182. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  183. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  184. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  185. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  186. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  187. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  188. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  189. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  190. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  191. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  192. package/dist/src/ui/hooks/useToolsDialog.d.ts +2 -2
  193. package/dist/src/ui/hooks/useToolsDialog.js.map +1 -1
  194. package/dist/src/ui/keyMatchers.d.ts +26 -0
  195. package/dist/src/ui/keyMatchers.js +68 -0
  196. package/dist/src/ui/keyMatchers.js.map +1 -0
  197. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  198. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  199. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  200. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  201. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  202. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  203. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  204. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  205. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  206. package/dist/src/ui/themes/theme-compat.js +65 -0
  207. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  208. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  209. package/dist/src/ui/themes/theme-manager.js +18 -0
  210. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  211. package/dist/src/ui/types.d.ts +1 -1
  212. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  213. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  214. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  215. package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -0
  216. package/dist/src/ui/utils/ConsolePatcher.js +3 -0
  217. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  218. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  219. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  220. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  221. package/dist/src/ui/utils/commandUtils.js +22 -1
  222. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  223. package/dist/src/ui/utils/responsive.d.ts +16 -0
  224. package/dist/src/ui/utils/responsive.js +111 -0
  225. package/dist/src/ui/utils/responsive.js.map +1 -0
  226. package/dist/src/utils/cleanup.d.ts +2 -2
  227. package/dist/src/utils/cleanup.js +2 -2
  228. package/dist/src/utils/cleanup.js.map +1 -1
  229. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  230. package/dist/src/utils/dialogScopeUtils.js +48 -0
  231. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  232. package/dist/src/utils/gitUtils.d.ts +21 -1
  233. package/dist/src/utils/gitUtils.js +70 -3
  234. package/dist/src/utils/gitUtils.js.map +1 -1
  235. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  236. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  237. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  238. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  239. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  240. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  241. package/dist/src/utils/sandbox.js +430 -401
  242. package/dist/src/utils/sandbox.js.map +1 -1
  243. package/dist/src/utils/settingsUtils.d.ts +126 -0
  244. package/dist/src/utils/settingsUtils.js +327 -0
  245. package/dist/src/utils/settingsUtils.js.map +1 -0
  246. package/dist/tsconfig.tsbuildinfo +1 -1
  247. package/package.json +6 -4
  248. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  249. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  250. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -0,0 +1,326 @@
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
+ * Authenticate with a specific provider
45
+ * @param providerName - Name of the provider to authenticate with
46
+ */
47
+ async authenticate(providerName) {
48
+ if (!providerName || typeof providerName !== 'string') {
49
+ throw new Error('Provider name must be a non-empty string');
50
+ }
51
+ const provider = this.providers.get(providerName);
52
+ if (!provider) {
53
+ throw new Error(`Unknown provider: ${providerName}`);
54
+ }
55
+ try {
56
+ // 1. Initiate authentication with the provider
57
+ await provider.initiateAuth();
58
+ // 2. Get token from provider after successful auth
59
+ const providerToken = await provider.getToken();
60
+ if (!providerToken) {
61
+ throw new Error('Authentication completed but no token was returned');
62
+ }
63
+ // 3. Store token using tokenStore
64
+ await this.tokenStore.saveToken(providerName, providerToken);
65
+ }
66
+ catch (error) {
67
+ // Propagate provider authentication errors
68
+ if (error instanceof Error) {
69
+ throw error;
70
+ }
71
+ throw new Error(`Authentication failed for provider ${providerName}: ${String(error)}`);
72
+ }
73
+ }
74
+ /**
75
+ * Get authentication status for all registered providers
76
+ * @returns Array of authentication status for each provider
77
+ */
78
+ async getAuthStatus() {
79
+ const statuses = [];
80
+ // Get all registered providers and check their status
81
+ for (const [providerName, _provider] of this.providers) {
82
+ try {
83
+ const token = await this.tokenStore.getToken(providerName);
84
+ const oauthEnabled = this.isOAuthEnabled(providerName);
85
+ if (token) {
86
+ // Provider is authenticated, calculate time until expiry
87
+ const now = Date.now();
88
+ const expiresIn = Math.max(0, Math.floor((token.expiry - now) / 1000)); // seconds
89
+ statuses.push({
90
+ provider: providerName,
91
+ authenticated: true,
92
+ authType: 'oauth',
93
+ expiresIn,
94
+ oauthEnabled,
95
+ });
96
+ }
97
+ else {
98
+ // Provider is not authenticated
99
+ statuses.push({
100
+ provider: providerName,
101
+ authenticated: false,
102
+ authType: 'none',
103
+ oauthEnabled,
104
+ });
105
+ }
106
+ }
107
+ catch (_error) {
108
+ // If we can't get token status, consider it unauthenticated
109
+ const oauthEnabled = this.isOAuthEnabled(providerName);
110
+ statuses.push({
111
+ provider: providerName,
112
+ authenticated: false,
113
+ authType: 'none',
114
+ oauthEnabled,
115
+ });
116
+ }
117
+ }
118
+ return statuses;
119
+ }
120
+ /**
121
+ * Check if authenticated with a specific provider (required by precedence resolver)
122
+ * @param providerName - Name of the provider
123
+ * @returns True if authenticated, false otherwise
124
+ */
125
+ async isAuthenticated(providerName) {
126
+ // Special handling for Gemini - check if OAuth is enabled and working
127
+ if (providerName === 'gemini' && this.isOAuthEnabled('gemini')) {
128
+ // For Gemini, if OAuth is enabled, we assume it's authenticated
129
+ // since the actual auth is handled by LOGIN_WITH_GOOGLE
130
+ return true;
131
+ }
132
+ const token = await this.getOAuthToken(providerName);
133
+ return token !== null;
134
+ }
135
+ /**
136
+ * Get OAuth token for a specific provider
137
+ * Compatible with precedence resolver - returns access token string
138
+ * @param providerName - Name of the provider
139
+ * @returns Access token string if available, null otherwise
140
+ */
141
+ async getToken(providerName) {
142
+ // Check if OAuth is enabled for this provider
143
+ if (!this.isOAuthEnabled(providerName)) {
144
+ return null;
145
+ }
146
+ const token = await this.getOAuthToken(providerName);
147
+ // Special handling for different providers
148
+ if (providerName === 'gemini') {
149
+ if (token) {
150
+ return token.access_token;
151
+ }
152
+ // Return a special token that signals to use LOGIN_WITH_GOOGLE
153
+ return 'USE_LOGIN_WITH_GOOGLE';
154
+ }
155
+ // For Qwen, return the OAuth token to be used as API key
156
+ if (providerName === 'qwen' && token) {
157
+ return token.access_token;
158
+ }
159
+ if (token) {
160
+ return token.access_token;
161
+ }
162
+ // For other providers, trigger OAuth flow
163
+ try {
164
+ await this.authenticate(providerName);
165
+ const newToken = await this.getOAuthToken(providerName);
166
+ // Return the access token without any prefix - OAuth Bearer tokens should be used as-is
167
+ return newToken ? newToken.access_token : null;
168
+ }
169
+ catch (error) {
170
+ // Re-throw the error so it's not silently swallowed
171
+ console.error(`OAuth authentication failed for ${providerName}:`, error);
172
+ throw error;
173
+ }
174
+ }
175
+ /**
176
+ * Get OAuth token object for a specific provider
177
+ * @param providerName - Name of the provider
178
+ * @returns OAuth token if available, null otherwise
179
+ */
180
+ async getOAuthToken(providerName) {
181
+ if (!providerName || typeof providerName !== 'string') {
182
+ throw new Error('Provider name must be a non-empty string');
183
+ }
184
+ const provider = this.providers.get(providerName);
185
+ if (!provider) {
186
+ throw new Error(`Unknown provider: ${providerName}`);
187
+ }
188
+ try {
189
+ // 1. Try to get token from store
190
+ const token = await this.tokenStore.getToken(providerName);
191
+ if (!token) {
192
+ return null;
193
+ }
194
+ // 2. Check if token expires within 30 seconds (30000ms)
195
+ const now = Date.now();
196
+ const thirtySecondsFromNow = now + 30000;
197
+ if (token.expiry <= thirtySecondsFromNow) {
198
+ // 3. Token is expired or about to expire, try refresh
199
+ try {
200
+ const refreshedToken = await provider.refreshIfNeeded();
201
+ if (refreshedToken) {
202
+ // 4. Update stored token if refreshed
203
+ await this.tokenStore.saveToken(providerName, refreshedToken);
204
+ return refreshedToken;
205
+ }
206
+ else {
207
+ // Refresh failed, return null
208
+ return null;
209
+ }
210
+ }
211
+ catch (_error) {
212
+ // Token refresh failure: Return null, no logging
213
+ return null;
214
+ }
215
+ }
216
+ // 5. Return valid token
217
+ return token;
218
+ }
219
+ catch (error) {
220
+ // For unknown provider or other critical errors, throw
221
+ if (error instanceof Error &&
222
+ error.message.includes('Unknown provider')) {
223
+ throw error;
224
+ }
225
+ // For other errors, return null
226
+ return null;
227
+ }
228
+ }
229
+ /**
230
+ * Get list of all registered provider names
231
+ * @returns Array of provider names
232
+ */
233
+ getSupportedProviders() {
234
+ return Array.from(this.providers.keys()).sort();
235
+ }
236
+ /**
237
+ * Toggle OAuth enablement for a provider
238
+ * @param providerName - Name of the provider
239
+ * @returns New enablement state (true if enabled, false if disabled)
240
+ */
241
+ async toggleOAuthEnabled(providerName) {
242
+ if (!providerName || typeof providerName !== 'string') {
243
+ throw new Error('Provider name must be a non-empty string');
244
+ }
245
+ const provider = this.providers.get(providerName);
246
+ if (!provider) {
247
+ throw new Error(`Unknown provider: ${providerName}`);
248
+ }
249
+ if (!this.settings) {
250
+ throw new Error('Settings are required to toggle OAuth enablement');
251
+ }
252
+ const currentlyEnabled = this.isOAuthEnabled(providerName);
253
+ const newState = !currentlyEnabled;
254
+ // Get current OAuth enabled providers or initialize empty object
255
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
256
+ oauthEnabledProviders[providerName] = newState;
257
+ // Save the updated configuration
258
+ this.settings.setValue(SettingScope.User, 'oauthEnabledProviders', oauthEnabledProviders);
259
+ return newState;
260
+ }
261
+ /**
262
+ * Check if OAuth is enabled for a provider
263
+ * @param providerName - Name of the provider
264
+ * @returns True if OAuth is enabled, false otherwise
265
+ */
266
+ isOAuthEnabled(providerName) {
267
+ if (!this.settings) {
268
+ // Default to false if no settings available
269
+ return false;
270
+ }
271
+ const oauthEnabledProviders = this.settings.merged.oauthEnabledProviders || {};
272
+ return oauthEnabledProviders[providerName] ?? false;
273
+ }
274
+ /**
275
+ * Check for higher priority authentication methods
276
+ * @param providerName - Name of the provider to check
277
+ * @returns String describing higher priority auth method, null if none
278
+ */
279
+ async getHigherPriorityAuth(providerName) {
280
+ if (!this.settings) {
281
+ return null;
282
+ }
283
+ const merged = this.settings.merged;
284
+ // Check for API keys (highest priority)
285
+ if (merged.providerApiKeys && merged.providerApiKeys[providerName]) {
286
+ return 'API Key';
287
+ }
288
+ // Check for keyfiles (second highest priority)
289
+ if (merged.providerKeyfiles && merged.providerKeyfiles[providerName]) {
290
+ return 'Keyfile';
291
+ }
292
+ // Check for environment variables
293
+ const envKeyName = `${providerName.toUpperCase()}_API_KEY`;
294
+ if (process.env[envKeyName]) {
295
+ return 'Environment Variable';
296
+ }
297
+ // For OpenAI-based providers, check if baseURL is compatible
298
+ if (providerName === 'qwen') {
299
+ const baseUrls = merged.providerBaseUrls || {};
300
+ const openaiBaseUrl = baseUrls['openai'];
301
+ if (openaiBaseUrl && !this.isQwenCompatibleUrl(openaiBaseUrl)) {
302
+ return 'OpenAI BaseURL Mismatch';
303
+ }
304
+ }
305
+ return null;
306
+ }
307
+ /**
308
+ * Check if a URL is compatible with Qwen OAuth
309
+ * @param url - The base URL to check
310
+ * @returns True if compatible, false otherwise
311
+ */
312
+ isQwenCompatibleUrl(url) {
313
+ if (!url)
314
+ return true; // Default OpenAI endpoint is compatible
315
+ // Qwen-compatible URLs
316
+ const qwenDomains = ['dashscope.aliyuncs.com', 'qwen.com', 'api.qwen.com'];
317
+ try {
318
+ const urlObj = new URL(url);
319
+ return qwenDomains.some((domain) => urlObj.hostname.includes(domain));
320
+ }
321
+ catch {
322
+ return false; // Invalid URL format
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=oauth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-manager.js","sourceRoot":"","sources":["../../../src/auth/oauth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};