@vybestack/llxprt-code 0.4.8 → 0.5.0-nightly.251102.6bb3db7a

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 (269) hide show
  1. package/dist/package.json +5 -3
  2. package/dist/src/auth/__tests__/oauthManager.safety.test.d.ts +6 -0
  3. package/dist/src/auth/__tests__/oauthManager.safety.test.js +49 -0
  4. package/dist/src/auth/__tests__/oauthManager.safety.test.js.map +1 -0
  5. package/dist/src/auth/oauth-manager.d.ts +11 -0
  6. package/dist/src/auth/oauth-manager.js +62 -29
  7. package/dist/src/auth/oauth-manager.js.map +1 -1
  8. package/dist/src/auth/oauth-manager.spec.js +7 -2
  9. package/dist/src/auth/oauth-manager.spec.js.map +1 -1
  10. package/dist/src/config/__tests__/nonInteractiveTools.test.d.ts +6 -0
  11. package/dist/src/config/__tests__/nonInteractiveTools.test.js +13 -0
  12. package/dist/src/config/__tests__/nonInteractiveTools.test.js.map +1 -0
  13. package/dist/src/config/__tests__/profileBootstrap.test.d.ts +6 -0
  14. package/dist/src/config/__tests__/profileBootstrap.test.js +91 -0
  15. package/dist/src/config/__tests__/profileBootstrap.test.js.map +1 -0
  16. package/dist/src/config/config.d.ts +6 -2
  17. package/dist/src/config/config.js +219 -18
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/profileBootstrap.d.ts +64 -0
  20. package/dist/src/config/profileBootstrap.js +140 -0
  21. package/dist/src/config/profileBootstrap.js.map +1 -0
  22. package/dist/src/gemini.js +68 -23
  23. package/dist/src/gemini.js.map +1 -1
  24. package/dist/src/gemini.test.js +1 -2
  25. package/dist/src/gemini.test.js.map +1 -1
  26. package/dist/src/generated/git-commit.d.ts +1 -1
  27. package/dist/src/generated/git-commit.js +1 -1
  28. package/dist/src/integration-tests/base-url-behavior.integration.test.js +110 -450
  29. package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -1
  30. package/dist/src/integration-tests/model-params-isolation.integration.test.js +101 -539
  31. package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -1
  32. package/dist/src/integration-tests/modelParams.integration.test.js +86 -761
  33. package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -1
  34. package/dist/src/integration-tests/provider-multi-runtime.integration.test.d.ts +6 -0
  35. package/dist/src/integration-tests/provider-multi-runtime.integration.test.js +198 -0
  36. package/dist/src/integration-tests/provider-multi-runtime.integration.test.js.map +1 -0
  37. package/dist/src/integration-tests/provider-switching.integration.test.js +97 -151
  38. package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -1
  39. package/dist/src/integration-tests/runtime-isolation.test.d.ts +13 -0
  40. package/dist/src/integration-tests/runtime-isolation.test.js +170 -0
  41. package/dist/src/integration-tests/runtime-isolation.test.js.map +1 -0
  42. package/dist/src/integration-tests/test-utils.js +19 -2
  43. package/dist/src/integration-tests/test-utils.js.map +1 -1
  44. package/dist/src/integration-tests/test-utils.test.js +9 -8
  45. package/dist/src/integration-tests/test-utils.test.js.map +1 -1
  46. package/dist/src/integration-tests/todo-continuation.integration.test.js +5 -2
  47. package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -1
  48. package/dist/src/integration-tests/tools-governance.integration.test.d.ts +6 -0
  49. package/dist/src/integration-tests/tools-governance.integration.test.js +98 -0
  50. package/dist/src/integration-tests/tools-governance.integration.test.js.map +1 -0
  51. package/dist/src/nonInteractiveCli.js +36 -11
  52. package/dist/src/nonInteractiveCli.js.map +1 -1
  53. package/dist/src/providers/logging/git-stats.test.js +11 -1
  54. package/dist/src/providers/logging/git-stats.test.js.map +1 -1
  55. package/dist/src/providers/logging/multi-provider-logging.integration.test.js +1 -2
  56. package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -1
  57. package/dist/src/providers/logging/performance.test.js +1 -1
  58. package/dist/src/providers/logging/performance.test.js.map +1 -1
  59. package/dist/src/providers/oauth-provider-registration.d.ts +2 -2
  60. package/dist/src/providers/oauth-provider-registration.js +25 -9
  61. package/dist/src/providers/oauth-provider-registration.js.map +1 -1
  62. package/dist/src/providers/provider-gemini-switching.test.js +67 -89
  63. package/dist/src/providers/provider-gemini-switching.test.js.map +1 -1
  64. package/dist/src/providers/provider-switching.integration.test.js +42 -98
  65. package/dist/src/providers/provider-switching.integration.test.js.map +1 -1
  66. package/dist/src/providers/providerConfigUtils.d.ts +12 -7
  67. package/dist/src/providers/providerConfigUtils.js +31 -99
  68. package/dist/src/providers/providerConfigUtils.js.map +1 -1
  69. package/dist/src/providers/providerManagerInstance.d.ts +17 -1
  70. package/dist/src/providers/providerManagerInstance.js +157 -175
  71. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  72. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +19 -15
  73. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
  74. package/dist/src/providers/providerManagerInstance.test.js +2 -5
  75. package/dist/src/providers/providerManagerInstance.test.js.map +1 -1
  76. package/dist/src/runtime/__tests__/profileApplication.test.d.ts +5 -0
  77. package/dist/src/runtime/__tests__/profileApplication.test.js +232 -0
  78. package/dist/src/runtime/__tests__/profileApplication.test.js.map +1 -0
  79. package/dist/src/runtime/__tests__/runtimeIsolation.test.d.ts +5 -0
  80. package/dist/src/runtime/__tests__/runtimeIsolation.test.js +376 -0
  81. package/dist/src/runtime/__tests__/runtimeIsolation.test.js.map +1 -0
  82. package/dist/src/runtime/agentRuntimeAdapter.d.ts +249 -0
  83. package/dist/src/runtime/agentRuntimeAdapter.js +506 -0
  84. package/dist/src/runtime/agentRuntimeAdapter.js.map +1 -0
  85. package/dist/src/runtime/agentRuntimeAdapter.spec.d.ts +6 -0
  86. package/dist/src/runtime/agentRuntimeAdapter.spec.js +866 -0
  87. package/dist/src/runtime/agentRuntimeAdapter.spec.js.map +1 -0
  88. package/dist/src/runtime/messages.d.ts +28 -0
  89. package/dist/src/runtime/messages.js +64 -0
  90. package/dist/src/runtime/messages.js.map +1 -0
  91. package/dist/src/runtime/profileApplication.d.ts +33 -0
  92. package/dist/src/runtime/profileApplication.js +191 -0
  93. package/dist/src/runtime/profileApplication.js.map +1 -0
  94. package/dist/src/runtime/providerConfigUtils.test.d.ts +1 -0
  95. package/dist/src/runtime/providerConfigUtils.test.js +68 -0
  96. package/dist/src/runtime/providerConfigUtils.test.js.map +1 -0
  97. package/dist/src/runtime/runtimeContextFactory.d.ts +102 -0
  98. package/dist/src/runtime/runtimeContextFactory.js +190 -0
  99. package/dist/src/runtime/runtimeContextFactory.js.map +1 -0
  100. package/dist/src/runtime/runtimeSettings.d.ts +217 -0
  101. package/dist/src/runtime/runtimeSettings.js +1094 -0
  102. package/dist/src/runtime/runtimeSettings.js.map +1 -0
  103. package/dist/src/runtime/runtimeSettings.test.d.ts +1 -0
  104. package/dist/src/runtime/runtimeSettings.test.js +320 -0
  105. package/dist/src/runtime/runtimeSettings.test.js.map +1 -0
  106. package/dist/src/services/BuiltinCommandLoader.d.ts +13 -4
  107. package/dist/src/services/BuiltinCommandLoader.js +17 -4
  108. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  109. package/dist/src/services/McpPromptLoader.js +34 -13
  110. package/dist/src/services/McpPromptLoader.js.map +1 -1
  111. package/dist/src/test-utils/mockCommandContext.js +5 -2
  112. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  113. package/dist/src/ui/App.js +29 -49
  114. package/dist/src/ui/App.js.map +1 -1
  115. package/dist/src/ui/commands/aboutCommand.js +59 -38
  116. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  117. package/dist/src/ui/commands/authCommand.js +7 -9
  118. package/dist/src/ui/commands/authCommand.js.map +1 -1
  119. package/dist/src/ui/commands/baseurlCommand.js +8 -44
  120. package/dist/src/ui/commands/baseurlCommand.js.map +1 -1
  121. package/dist/src/ui/commands/chatCommand.js +28 -12
  122. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  123. package/dist/src/ui/commands/diagnosticsCommand.d.ts +0 -3
  124. package/dist/src/ui/commands/diagnosticsCommand.js +45 -191
  125. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  126. package/dist/src/ui/commands/keyCommand.js +9 -58
  127. package/dist/src/ui/commands/keyCommand.js.map +1 -1
  128. package/dist/src/ui/commands/keyCommand.test.js +48 -102
  129. package/dist/src/ui/commands/keyCommand.test.js.map +1 -1
  130. package/dist/src/ui/commands/keyfileCommand.js +42 -93
  131. package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
  132. package/dist/src/ui/commands/logoutCommand.js +2 -2
  133. package/dist/src/ui/commands/logoutCommand.js.map +1 -1
  134. package/dist/src/ui/commands/mcpCommand.js +29 -7
  135. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  136. package/dist/src/ui/commands/modelCommand.js +8 -59
  137. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  138. package/dist/src/ui/commands/profileCommand.js +151 -267
  139. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  140. package/dist/src/ui/commands/profileCommand.test.js +88 -344
  141. package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
  142. package/dist/src/ui/commands/providerCommand.js +9 -3
  143. package/dist/src/ui/commands/providerCommand.js.map +1 -1
  144. package/dist/src/ui/commands/restoreCommand.js +38 -18
  145. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  146. package/dist/src/ui/commands/schema/argumentResolver.test.d.ts +6 -0
  147. package/dist/src/ui/commands/schema/argumentResolver.test.js +619 -0
  148. package/dist/src/ui/commands/schema/argumentResolver.test.js.map +1 -0
  149. package/dist/src/ui/commands/schema/index.d.ts +15 -0
  150. package/dist/src/ui/commands/schema/index.js +320 -0
  151. package/dist/src/ui/commands/schema/index.js.map +1 -0
  152. package/dist/src/ui/commands/schema/types.d.ts +61 -0
  153. package/dist/src/ui/commands/schema/types.js +12 -0
  154. package/dist/src/ui/commands/schema/types.js.map +1 -0
  155. package/dist/src/ui/commands/setCommand.js +641 -325
  156. package/dist/src/ui/commands/setCommand.js.map +1 -1
  157. package/dist/src/ui/commands/setCommand.test.js +92 -388
  158. package/dist/src/ui/commands/setCommand.test.js.map +1 -1
  159. package/dist/src/ui/commands/statusCommand.js +2 -2
  160. package/dist/src/ui/commands/statusCommand.js.map +1 -1
  161. package/dist/src/ui/commands/subagentCommand.d.ts +16 -0
  162. package/dist/src/ui/commands/subagentCommand.js +674 -0
  163. package/dist/src/ui/commands/subagentCommand.js.map +1 -0
  164. package/dist/src/ui/commands/test/setCommand.mutation.test.d.ts +6 -0
  165. package/dist/src/ui/commands/test/setCommand.mutation.test.js +132 -0
  166. package/dist/src/ui/commands/test/setCommand.mutation.test.js.map +1 -0
  167. package/dist/src/ui/commands/test/setCommand.phase09.test.d.ts +6 -0
  168. package/dist/src/ui/commands/test/setCommand.phase09.test.js +222 -0
  169. package/dist/src/ui/commands/test/setCommand.phase09.test.js.map +1 -0
  170. package/dist/src/ui/commands/test/subagentCommand.schema.test.d.ts +6 -0
  171. package/dist/src/ui/commands/test/subagentCommand.schema.test.js +125 -0
  172. package/dist/src/ui/commands/test/subagentCommand.schema.test.js.map +1 -0
  173. package/dist/src/ui/commands/test/subagentCommand.test.d.ts +1 -0
  174. package/dist/src/ui/commands/test/subagentCommand.test.js +598 -0
  175. package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -0
  176. package/dist/src/ui/commands/toolformatCommand.js +25 -98
  177. package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
  178. package/dist/src/ui/commands/toolformatCommand.test.js +56 -102
  179. package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -1
  180. package/dist/src/ui/commands/toolsCommand.js +187 -31
  181. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  182. package/dist/src/ui/commands/types.d.ts +11 -2
  183. package/dist/src/ui/commands/types.js.map +1 -1
  184. package/dist/src/ui/components/AuthDialog.js +16 -55
  185. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  186. package/dist/src/ui/components/Footer.js +4 -5
  187. package/dist/src/ui/components/Footer.js.map +1 -1
  188. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  189. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  190. package/dist/src/ui/components/InputPrompt.js +1 -1
  191. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  192. package/dist/src/ui/components/StatsDisplay.js +6 -11
  193. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  194. package/dist/src/ui/components/SuggestionsDisplay.d.ts +13 -1
  195. package/dist/src/ui/components/SuggestionsDisplay.js +22 -3
  196. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  197. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -0
  198. package/dist/src/ui/components/messages/ToolGroupMessage.js +14 -14
  199. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  200. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +1 -0
  201. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  202. package/dist/src/ui/containers/SessionController.js +61 -117
  203. package/dist/src/ui/containers/SessionController.js.map +1 -1
  204. package/dist/src/ui/contexts/RuntimeContext.d.ts +61 -0
  205. package/dist/src/ui/contexts/RuntimeContext.js +118 -0
  206. package/dist/src/ui/contexts/RuntimeContext.js.map +1 -0
  207. package/dist/src/ui/contexts/TodoProvider.d.ts +1 -0
  208. package/dist/src/ui/contexts/TodoProvider.js +10 -8
  209. package/dist/src/ui/contexts/TodoProvider.js.map +1 -1
  210. package/dist/src/ui/contexts/ToolCallProvider.d.ts +1 -0
  211. package/dist/src/ui/contexts/ToolCallProvider.js +10 -9
  212. package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -1
  213. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.d.ts +6 -0
  214. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js +39 -0
  215. package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js.map +1 -0
  216. package/dist/src/ui/hooks/atCommandProcessor.js +11 -3
  217. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  218. package/dist/src/ui/hooks/atCommandProcessor.test.js +3 -1
  219. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  220. package/dist/src/ui/hooks/shellCommandProcessor.js +4 -1
  221. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  222. package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -0
  223. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  224. package/dist/src/ui/hooks/slashCommandProcessor.js +27 -1
  225. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  226. package/dist/src/ui/hooks/useAuthCommand.js +11 -3
  227. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  228. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -0
  229. package/dist/src/ui/hooks/useCommandCompletion.js +2 -0
  230. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  231. package/dist/src/ui/hooks/useGeminiStream.js +37 -11
  232. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  233. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.d.ts +6 -0
  234. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js +232 -0
  235. package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js.map +1 -0
  236. package/dist/src/ui/hooks/useLoadProfileDialog.d.ts +1 -1
  237. package/dist/src/ui/hooks/useLoadProfileDialog.js +18 -57
  238. package/dist/src/ui/hooks/useLoadProfileDialog.js.map +1 -1
  239. package/dist/src/ui/hooks/useOpenAIProviderInfo.d.ts +1 -1
  240. package/dist/src/ui/hooks/useOpenAIProviderInfo.js +12 -7
  241. package/dist/src/ui/hooks/useOpenAIProviderInfo.js.map +1 -1
  242. package/dist/src/ui/hooks/useProviderDialog.d.ts +1 -1
  243. package/dist/src/ui/hooks/useProviderDialog.js +17 -90
  244. package/dist/src/ui/hooks/useProviderDialog.js.map +1 -1
  245. package/dist/src/ui/hooks/useProviderModelDialog.d.ts +2 -2
  246. package/dist/src/ui/hooks/useProviderModelDialog.js +11 -12
  247. package/dist/src/ui/hooks/useProviderModelDialog.js.map +1 -1
  248. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +3 -1
  249. package/dist/src/ui/hooks/useReactToolScheduler.js +144 -34
  250. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  251. package/dist/src/ui/hooks/useSlashCompletion.d.ts +32 -0
  252. package/dist/src/ui/hooks/useSlashCompletion.js +154 -77
  253. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  254. package/dist/src/ui/hooks/useSlashCompletion.test.js +39 -14
  255. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  256. package/dist/src/ui/hooks/useToolScheduler.test.js +108 -79
  257. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  258. package/dist/src/ui/types.d.ts +1 -0
  259. package/dist/src/ui/types.js.map +1 -1
  260. package/dist/src/utils/sandbox.js +7 -5
  261. package/dist/src/utils/sandbox.js.map +1 -1
  262. package/dist/src/validateNonInterActiveAuth.js +4 -2
  263. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  264. package/dist/src/zed-integration/schema.d.ts +30 -30
  265. package/dist/src/zed-integration/zedIntegration.js +112 -39
  266. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  267. package/dist/tsconfig.build.tsbuildinfo +1 -0
  268. package/package.json +5 -3
  269. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -3,87 +3,76 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
7
- import { getProviderManager, resetProviderManager, } from './providerManagerInstance.js';
8
- import { AuthType } from '@vybestack/llxprt-code-core';
9
- describe('Provider-Gemini Switching', () => {
10
- let mockProvider;
11
- beforeEach(() => {
12
- resetProviderManager();
13
- mockProvider = {
14
- name: 'test-provider',
15
- async getModels() {
16
- return [
17
- {
18
- id: 'model-1',
19
- name: 'Test Model 1',
20
- provider: 'test-provider',
21
- supportedToolFormats: ['json'],
22
- },
23
- {
24
- id: 'model-2',
25
- name: 'Test Model 2',
26
- provider: 'test-provider',
27
- supportedToolFormats: ['json'],
28
- },
29
- ];
30
- },
31
- async *generateChatCompletion() {
32
- yield {
33
- speaker: 'ai',
34
- blocks: [{ type: 'text', text: 'test response' }],
35
- };
36
- },
37
- getCurrentModel() {
38
- return 'model-1';
39
- },
40
- getDefaultModel() {
41
- return 'model-1';
42
- },
43
- setModel(model) {
44
- console.log(`Provider model set to: ${model}`);
45
- },
46
- getServerTools() {
47
- return [];
48
- },
49
- async invokeServerTool() {
50
- return {};
51
- },
52
- };
53
- });
54
- afterEach(() => {
55
- resetProviderManager();
6
+ import { describe, it, expect, vi } from 'vitest';
7
+ import { createProviderManager } from './providerManagerInstance.js';
8
+ import { AuthType, SettingsService, createProviderRuntimeContext, } from '@vybestack/llxprt-code-core';
9
+ function createManager() {
10
+ const settingsService = new SettingsService();
11
+ const runtime = createProviderRuntimeContext({ settingsService });
12
+ const { manager } = createProviderManager(runtime, {
13
+ allowBrowserEnvironment: true,
56
14
  });
57
- it('should use Gemini when no provider is active', async () => {
58
- const manager = getProviderManager(undefined, true);
59
- // Clear any auto-loaded active provider
15
+ return manager;
16
+ }
17
+ function createMockProvider() {
18
+ return {
19
+ name: 'test-provider',
20
+ async getModels() {
21
+ return [
22
+ {
23
+ id: 'model-1',
24
+ name: 'Test Model 1',
25
+ provider: 'test-provider',
26
+ supportedToolFormats: ['json'],
27
+ },
28
+ {
29
+ id: 'model-2',
30
+ name: 'Test Model 2',
31
+ provider: 'test-provider',
32
+ supportedToolFormats: ['json'],
33
+ },
34
+ ];
35
+ },
36
+ async *generateChatCompletion() {
37
+ yield {
38
+ speaker: 'ai',
39
+ blocks: [{ type: 'text', text: 'test response' }],
40
+ };
41
+ },
42
+ getDefaultModel() {
43
+ return 'model-1';
44
+ },
45
+ getServerTools() {
46
+ return [];
47
+ },
48
+ async invokeServerTool() {
49
+ return {};
50
+ },
51
+ };
52
+ }
53
+ describe('Provider-Gemini Switching', () => {
54
+ it('uses Gemini when no provider is active', async () => {
55
+ const manager = createManager();
60
56
  if (manager.hasActiveProvider()) {
61
57
  manager.clearActiveProvider();
62
58
  }
63
- // Register provider but don't activate it
64
- manager.registerProvider(mockProvider);
65
- // Should not have an active provider
66
59
  expect(manager.hasActiveProvider()).toBe(false);
67
- // Create a mock config
68
- const originalRefreshAuth = vi.fn().mockResolvedValue(undefined);
60
+ manager.registerProvider(createMockProvider());
61
+ expect(manager.hasActiveProvider()).toBe(false);
69
62
  const config = {
70
- refreshAuth: originalRefreshAuth,
63
+ refreshAuth: vi.fn().mockResolvedValue(undefined),
71
64
  getGeminiClient: vi.fn().mockReturnValue(null),
72
65
  getModel: vi.fn().mockReturnValue('gemini-2.5-flash'),
73
66
  };
74
- // Call refreshAuth
75
67
  await config.refreshAuth(AuthType.USE_GEMINI);
76
- // Should have called the original since no provider is active
77
- expect(originalRefreshAuth).toHaveBeenCalled();
68
+ expect(config.refreshAuth).toHaveBeenCalledWith(AuthType.USE_GEMINI);
78
69
  });
79
- it('should use provider when active', async () => {
80
- const manager = getProviderManager(undefined, true);
81
- // Register and activate provider
82
- manager.registerProvider(mockProvider);
70
+ it('respects active provider configuration when set', async () => {
71
+ const manager = createManager();
72
+ const provider = createMockProvider();
73
+ manager.registerProvider(provider);
83
74
  manager.setActiveProvider('test-provider');
84
- // Should have an active provider
85
75
  expect(manager.hasActiveProvider()).toBe(true);
86
- // Create a mock config with a mock GeminiClient
87
76
  const mockGeminiClient = {
88
77
  chat: {
89
78
  contentGenerator: null,
@@ -94,39 +83,28 @@ describe('Provider-Gemini Switching', () => {
94
83
  getGeminiClient: vi.fn().mockReturnValue(mockGeminiClient),
95
84
  getModel: vi.fn().mockReturnValue('gemini-2.5-flash'),
96
85
  };
97
- // Store original refreshAuth
98
- const originalRefreshAuth = config.refreshAuth;
99
- // refreshAuth should remain the same (no wrapping in new implementation)
100
- expect(config.refreshAuth).toBe(originalRefreshAuth);
101
- // Call refreshAuth
102
86
  await config.refreshAuth(AuthType.USE_GEMINI);
103
- // Content generator remains null (provider support is in core now)
87
+ expect(config.refreshAuth).toHaveBeenCalledWith(AuthType.USE_GEMINI);
104
88
  expect(mockGeminiClient.chat.contentGenerator).toBeNull();
105
89
  });
106
- it('should switch back to Gemini when provider is cleared', async () => {
107
- const manager = getProviderManager(undefined, true);
108
- // Start with active provider
109
- manager.registerProvider(mockProvider);
90
+ it('falls back to Gemini when clearing the active provider', async () => {
91
+ const manager = createManager();
92
+ manager.registerProvider(createMockProvider());
110
93
  manager.setActiveProvider('test-provider');
111
94
  expect(manager.hasActiveProvider()).toBe(true);
112
- // Clear provider (switch back to Gemini)
113
95
  manager.clearActiveProvider();
114
96
  expect(manager.hasActiveProvider()).toBe(false);
115
- // Create a mock config
116
- const mockGeminiClient = {
117
- chat: {
118
- contentGenerator: null,
119
- },
120
- };
121
97
  const config = {
122
98
  refreshAuth: vi.fn().mockResolvedValue(undefined),
123
- getGeminiClient: vi.fn().mockReturnValue(mockGeminiClient),
99
+ getGeminiClient: vi.fn().mockReturnValue({
100
+ chat: {
101
+ contentGenerator: null,
102
+ },
103
+ }),
124
104
  getModel: vi.fn().mockReturnValue('gemini-2.5-flash'),
125
105
  };
126
- // Call refreshAuth
127
106
  await config.refreshAuth(AuthType.USE_GEMINI);
128
- // Should NOT update content generator since no provider is active
129
- expect(mockGeminiClient.chat.contentGenerator).toBeNull();
107
+ expect(config.refreshAuth).toHaveBeenCalled();
130
108
  });
131
109
  });
132
110
  //# sourceMappingURL=provider-gemini-switching.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-gemini-switching.test.js","sourceRoot":"","sources":["../../../src/providers/provider-gemini-switching.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-gemini-switching.test.js","sourceRoot":"","sources":["../../../src/providers/provider-gemini-switching.test.ts"],"names":[],"mappings":"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"}
@@ -3,116 +3,60 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
- import { getProviderManager, resetProviderManager, } from './providerManagerInstance.js';
8
- describe('Provider Switching Integration', () => {
9
- beforeEach(() => {
10
- resetProviderManager();
11
- });
12
- afterEach(() => {
13
- resetProviderManager();
6
+ import { describe, it, expect } from 'vitest';
7
+ import { createProviderManager } from './providerManagerInstance.js';
8
+ import { createProviderRuntimeContext, SettingsService, } from '@vybestack/llxprt-code-core';
9
+ function createManager() {
10
+ const settingsService = new SettingsService();
11
+ const runtime = createProviderRuntimeContext({ settingsService });
12
+ const { manager } = createProviderManager(runtime, {
13
+ allowBrowserEnvironment: true,
14
14
  });
15
- it('should support switching between providers and back to Gemini', () => {
16
- const manager = getProviderManager(undefined, true);
17
- // Clear any auto-loaded active provider
15
+ return manager;
16
+ }
17
+ function createMockProvider(name) {
18
+ return {
19
+ name,
20
+ async getModels() {
21
+ return [];
22
+ },
23
+ async *generateChatCompletion() {
24
+ yield {
25
+ speaker: 'ai',
26
+ blocks: [{ type: 'text', text: `${name}-response` }],
27
+ };
28
+ },
29
+ getDefaultModel() {
30
+ return `${name}-model`;
31
+ },
32
+ getServerTools() {
33
+ return [];
34
+ },
35
+ async invokeServerTool() {
36
+ return {};
37
+ },
38
+ };
39
+ }
40
+ describe('Provider Switching Integration', () => {
41
+ it('supports switching between providers and back to Gemini', () => {
42
+ const manager = createManager();
18
43
  if (manager.hasActiveProvider()) {
19
44
  manager.clearActiveProvider();
20
45
  }
21
- // Now no active provider (Gemini is default)
22
46
  expect(manager.hasActiveProvider()).toBe(false);
23
- // Register a mock provider
24
- const mockProvider = {
25
- name: 'test-provider',
26
- async getModels() {
27
- return [
28
- {
29
- id: 'test-model',
30
- name: 'Test Model',
31
- provider: 'test-provider',
32
- supportedToolFormats: ['json'],
33
- },
34
- ];
35
- },
36
- async *generateChatCompletion() {
37
- yield {
38
- speaker: 'ai',
39
- blocks: [{ type: 'text', text: 'test response' }],
40
- };
41
- },
42
- getDefaultModel() {
43
- return 'test-model';
44
- },
45
- getServerTools() {
46
- return [];
47
- },
48
- async invokeServerTool() {
49
- return {};
50
- },
51
- };
52
- manager.registerProvider(mockProvider);
53
- // Switch to the test provider
47
+ manager.registerProvider(createMockProvider('test-provider'));
54
48
  manager.setActiveProvider('test-provider');
55
- expect(manager.hasActiveProvider()).toBe(true);
56
49
  expect(manager.getActiveProviderName()).toBe('test-provider');
57
- // Switch back to Gemini
58
50
  manager.clearActiveProvider();
59
51
  expect(manager.hasActiveProvider()).toBe(false);
60
52
  expect(manager.getActiveProviderName()).toBe('');
61
53
  });
62
- it('should list gemini as an available option even when not registered', () => {
63
- const manager = getProviderManager(undefined, true);
64
- // Register some providers
65
- const provider1 = {
66
- name: 'provider1',
67
- async getModels() {
68
- return [];
69
- },
70
- async *generateChatCompletion() {
71
- yield {
72
- speaker: 'ai',
73
- blocks: [{ type: 'text', text: '' }],
74
- };
75
- },
76
- getDefaultModel() {
77
- return 'default';
78
- },
79
- getServerTools() {
80
- return [];
81
- },
82
- async invokeServerTool() {
83
- return {};
84
- },
85
- };
86
- const provider2 = {
87
- name: 'provider2',
88
- async getModels() {
89
- return [];
90
- },
91
- async *generateChatCompletion() {
92
- yield {
93
- speaker: 'ai',
94
- blocks: [{ type: 'text', text: '' }],
95
- };
96
- },
97
- getDefaultModel() {
98
- return 'default';
99
- },
100
- getServerTools() {
101
- return [];
102
- },
103
- async invokeServerTool() {
104
- return {};
105
- },
106
- };
107
- manager.registerProvider(provider1);
108
- manager.registerProvider(provider2);
109
- // List providers - should not include 'gemini' as it's not a registered provider
54
+ it('maintains custom providers in list without auto-registering gemini', () => {
55
+ const manager = createManager();
56
+ manager.registerProvider(createMockProvider('provider1'));
57
+ manager.registerProvider(createMockProvider('provider2'));
110
58
  const providers = manager.listProviders();
111
- // Filter out any auto-loaded providers like 'openai'
112
- const testProviders = providers.filter((p) => p.startsWith('provider'));
113
- expect(testProviders).toEqual(['provider1', 'provider2']);
114
- expect(providers).not.toContain('gemini');
115
- // But we can still clear to go back to Gemini
59
+ expect(providers).toEqual(expect.arrayContaining(['provider1', 'provider2']));
116
60
  manager.setActiveProvider('provider1');
117
61
  expect(manager.getActiveProviderName()).toBe('provider1');
118
62
  manager.clearActiveProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"provider-switching.integration.test.js","sourceRoot":"","sources":["../../../src/providers/provider-switching.integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-switching.integration.test.js","sourceRoot":"","sources":["../../../src/providers/provider-switching.integration.test.ts"],"names":[],"mappings":"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"}
@@ -3,19 +3,24 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ProviderManager, Config } from '@vybestack/llxprt-code-core';
7
- import { LoadedSettings } from '../config/settings.js';
8
6
  export interface ProviderConfigResult {
9
7
  success: boolean;
10
8
  message: string;
11
9
  isPaidMode?: boolean;
12
- requiresAuthRefresh?: boolean;
13
10
  }
14
11
  /**
15
- * Sets or removes the API key for the active provider
12
+ * Sets or removes the API key for the active provider.
13
+ *
14
+ * @plan:PLAN-20250218-STATELESSPROVIDER.P07
15
+ * @requirement:REQ-SP-005
16
+ * @pseudocode:cli-runtime.md lines 9-15
16
17
  */
17
- export declare function setProviderApiKey(providerManager: ProviderManager, settings: LoadedSettings, apiKey: string | undefined, config?: Config): Promise<ProviderConfigResult>;
18
+ export declare function setProviderApiKey(apiKey: string | undefined): Promise<ProviderConfigResult>;
18
19
  /**
19
- * Sets or clears the base URL for the active provider
20
+ * Sets or clears the base URL for the active provider.
21
+ *
22
+ * @plan:PLAN-20250218-STATELESSPROVIDER.P07
23
+ * @requirement:REQ-SP-005
24
+ * @pseudocode:cli-runtime.md lines 9-15
20
25
  */
21
- export declare function setProviderBaseUrl(providerManager: ProviderManager, settings: LoadedSettings, baseUrl: string | undefined): Promise<ProviderConfigResult>;
26
+ export declare function setProviderBaseUrl(baseUrl: string | undefined): Promise<ProviderConfigResult>;
@@ -3,7 +3,8 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { AuthType, sanitizeForByteString, needsSanitization, } from '@vybestack/llxprt-code-core';
6
+ import { sanitizeForByteString, needsSanitization, } from '@vybestack/llxprt-code-core';
7
+ import { updateActiveProviderApiKey, updateActiveProviderBaseUrl, } from '../runtime/runtimeSettings.js';
7
8
  /**
8
9
  * Sanitizes API keys to remove problematic characters that cause ByteString errors.
9
10
  * This handles cases where API key files have encoding issues or contain
@@ -18,70 +19,24 @@ function sanitizeApiKey(key) {
18
19
  return sanitized;
19
20
  }
20
21
  /**
21
- * Sets or removes the API key for the active provider
22
+ * Sets or removes the API key for the active provider.
23
+ *
24
+ * @plan:PLAN-20250218-STATELESSPROVIDER.P07
25
+ * @requirement:REQ-SP-005
26
+ * @pseudocode:cli-runtime.md lines 9-15
22
27
  */
23
- export async function setProviderApiKey(providerManager, settings, apiKey, config) {
28
+ export async function setProviderApiKey(apiKey) {
24
29
  try {
25
- const activeProvider = providerManager.getActiveProvider();
26
- const providerName = activeProvider.name;
27
- // If no key provided or 'none', remove the key
28
- if (!apiKey ||
29
- apiKey.trim() === '' ||
30
- apiKey.trim().toLowerCase() === 'none') {
31
- // Clear the API key using the provider's setApiKey method (which now stores in SettingsService)
32
- if (activeProvider.setApiKey) {
33
- activeProvider.setApiKey('');
34
- // If this is the Gemini provider, we might need to switch auth mode
35
- const requiresAuthRefresh = providerName === 'gemini' && !!config;
36
- if (requiresAuthRefresh && config) {
37
- await config.refreshAuth(AuthType.LOGIN_WITH_GOOGLE);
38
- }
39
- // Check payment mode after auth refresh
40
- const isPaidMode = activeProvider.isPaidMode?.() ?? true;
41
- const paymentMessage = !isPaidMode && providerName === 'gemini'
42
- ? '\n✅ You are now in FREE MODE - using OAuth authentication'
43
- : '';
44
- return {
45
- success: true,
46
- message: `API key removed for provider '${providerName}'${paymentMessage}`,
47
- isPaidMode,
48
- requiresAuthRefresh,
49
- };
50
- }
51
- else {
52
- return {
53
- success: false,
54
- message: `Provider '${providerName}' does not support API key updates`,
55
- };
56
- }
57
- }
58
- // Update the provider's API key (sanitized) - this will store in SettingsService
59
- if (activeProvider.setApiKey) {
60
- const sanitizedKey = sanitizeApiKey(apiKey);
61
- activeProvider.setApiKey(sanitizedKey);
62
- // If this is the Gemini provider, we need to refresh auth to use API key mode
63
- const requiresAuthRefresh = providerName === 'gemini' && !!config;
64
- if (requiresAuthRefresh && config) {
65
- await config.refreshAuth(AuthType.USE_GEMINI);
66
- }
67
- // Check if we're now in paid mode
68
- const isPaidMode = activeProvider.isPaidMode?.() ?? true;
69
- const paymentWarning = isPaidMode
70
- ? '\nWARNING: You are now in PAID MODE - API usage will be charged to your account'
71
- : '';
72
- return {
73
- success: true,
74
- message: `API key updated for provider '${providerName}'${paymentWarning}`,
75
- isPaidMode,
76
- requiresAuthRefresh,
77
- };
78
- }
79
- else {
80
- return {
81
- success: false,
82
- message: `Provider '${providerName}' does not support API key updates`,
83
- };
84
- }
30
+ const trimmed = apiKey?.trim();
31
+ const normalized = trimmed && trimmed.toLowerCase() !== 'none' && trimmed !== ''
32
+ ? sanitizeApiKey(trimmed)
33
+ : null;
34
+ const result = await updateActiveProviderApiKey(normalized);
35
+ return {
36
+ success: true,
37
+ message: result.message,
38
+ isPaidMode: result.isPaidMode,
39
+ };
85
40
  }
86
41
  catch (error) {
87
42
  return {
@@ -91,44 +46,21 @@ export async function setProviderApiKey(providerManager, settings, apiKey, confi
91
46
  }
92
47
  }
93
48
  /**
94
- * Sets or clears the base URL for the active provider
49
+ * Sets or clears the base URL for the active provider.
50
+ *
51
+ * @plan:PLAN-20250218-STATELESSPROVIDER.P07
52
+ * @requirement:REQ-SP-005
53
+ * @pseudocode:cli-runtime.md lines 9-15
95
54
  */
96
- export async function setProviderBaseUrl(providerManager, settings, baseUrl) {
55
+ export async function setProviderBaseUrl(baseUrl) {
97
56
  try {
98
- const activeProvider = providerManager.getActiveProvider();
99
- const providerName = activeProvider.name;
100
- if (!baseUrl || baseUrl.trim() === '') {
101
- // Clear base URL to provider default
102
- if (activeProvider.setBaseUrl) {
103
- activeProvider.setBaseUrl(undefined);
104
- // Don't need to remove from settings as we no longer save base URLs there
105
- return {
106
- success: true,
107
- message: `Base URL cleared, provider '${providerName}' now uses default URL`,
108
- };
109
- }
110
- else {
111
- return {
112
- success: false,
113
- message: `Provider '${providerName}' does not support base URL updates`,
114
- };
115
- }
116
- }
117
- // Update the provider's base URL
118
- if (activeProvider.setBaseUrl) {
119
- activeProvider.setBaseUrl(baseUrl);
120
- // Don't save base URLs to settings - they should only be in profiles or ephemeral
121
- return {
122
- success: true,
123
- message: `Base URL updated to '${baseUrl}' for provider '${providerName}'`,
124
- };
125
- }
126
- else {
127
- return {
128
- success: false,
129
- message: `Provider '${providerName}' does not support base URL updates`,
130
- };
131
- }
57
+ const trimmed = baseUrl?.trim() ?? '';
58
+ const normalized = trimmed === '' || trimmed.toLowerCase() === 'none' ? null : trimmed;
59
+ const result = await updateActiveProviderBaseUrl(normalized);
60
+ return {
61
+ success: true,
62
+ message: result.message,
63
+ };
132
64
  }
133
65
  catch (error) {
134
66
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"providerConfigUtils.js","sourceRoot":"","sources":["../../../src/providers/providerConfigUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providerConfigUtils.js","sourceRoot":"","sources":["../../../src/providers/providerConfigUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC;;;;GAIG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE7C,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,wFAAwF;YACtF,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/B,MAAM,UAAU,GACd,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,OAAO,KAAK,EAAE;YAC3D,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtC,MAAM,UAAU,GACd,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC7F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -3,15 +3,31 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Config, ProviderManager } from '@vybestack/llxprt-code-core';
6
+ import { Config, ProviderManager, SettingsService } from '@vybestack/llxprt-code-core';
7
7
  import { IFileSystem } from './IFileSystem.js';
8
8
  import { LoadedSettings } from '../config/settings.js';
9
9
  import { OAuthManager } from '../auth/oauth-manager.js';
10
10
  import { HistoryItemWithoutId } from '../ui/types.js';
11
+ interface ProviderManagerFactoryOptions {
12
+ config?: Config;
13
+ allowBrowserEnvironment?: boolean;
14
+ settings?: LoadedSettings;
15
+ addItem?: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number;
16
+ }
17
+ type RuntimeContextShape = {
18
+ settingsService: SettingsService;
19
+ config?: Config;
20
+ runtimeId?: string;
21
+ metadata?: Record<string, unknown>;
22
+ };
11
23
  /**
12
24
  * Set a custom file system implementation (mainly for testing).
13
25
  */
14
26
  export declare function setFileSystem(fs: IFileSystem): void;
27
+ export declare function createProviderManager(context: RuntimeContextShape, options?: ProviderManagerFactoryOptions): {
28
+ manager: ProviderManager;
29
+ oauthManager: OAuthManager;
30
+ };
15
31
  export declare function getProviderManager(config?: Config, allowBrowserEnvironment?: boolean, settings?: LoadedSettings, addItem?: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number): ProviderManager;
16
32
  export declare function resetProviderManager(): void;
17
33
  export declare function getOAuthManager(): OAuthManager | null;