@vybestack/llxprt-code 0.4.7 → 0.5.0-nightly.251102.f115237d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +7 -5
- package/dist/src/auth/__tests__/oauthManager.safety.test.d.ts +6 -0
- package/dist/src/auth/__tests__/oauthManager.safety.test.js +49 -0
- package/dist/src/auth/__tests__/oauthManager.safety.test.js.map +1 -0
- package/dist/src/auth/oauth-manager.d.ts +16 -0
- package/dist/src/auth/oauth-manager.js +81 -29
- package/dist/src/auth/oauth-manager.js.map +1 -1
- package/dist/src/auth/oauth-manager.spec.js +7 -2
- package/dist/src/auth/oauth-manager.spec.js.map +1 -1
- package/dist/src/commands/extensions.js +1 -1
- package/dist/src/commands/extensions.js.map +1 -1
- package/dist/src/config/__tests__/nonInteractiveTools.test.d.ts +6 -0
- package/dist/src/config/__tests__/nonInteractiveTools.test.js +13 -0
- package/dist/src/config/__tests__/nonInteractiveTools.test.js.map +1 -0
- package/dist/src/config/__tests__/profileBootstrap.test.d.ts +6 -0
- package/dist/src/config/__tests__/profileBootstrap.test.js +91 -0
- package/dist/src/config/__tests__/profileBootstrap.test.js.map +1 -0
- package/dist/src/config/config.d.ts +7 -2
- package/dist/src/config/config.js +225 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.loadMemory.test.js +1 -0
- package/dist/src/config/config.loadMemory.test.js.map +1 -1
- package/dist/src/config/profileBootstrap.d.ts +64 -0
- package/dist/src/config/profileBootstrap.js +140 -0
- package/dist/src/config/profileBootstrap.js.map +1 -0
- package/dist/src/config/settings.env.test.d.ts +6 -0
- package/dist/src/config/settings.env.test.js +38 -0
- package/dist/src/config/settings.env.test.js.map +1 -0
- package/dist/src/config/settings.js +2 -2
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/gemini.js +70 -25
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +1 -2
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/integration-tests/base-url-behavior.integration.test.js +110 -450
- package/dist/src/integration-tests/base-url-behavior.integration.test.js.map +1 -1
- package/dist/src/integration-tests/model-params-isolation.integration.test.js +101 -539
- package/dist/src/integration-tests/model-params-isolation.integration.test.js.map +1 -1
- package/dist/src/integration-tests/modelParams.integration.test.js +86 -761
- package/dist/src/integration-tests/modelParams.integration.test.js.map +1 -1
- package/dist/src/integration-tests/provider-multi-runtime.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/provider-multi-runtime.integration.test.js +198 -0
- package/dist/src/integration-tests/provider-multi-runtime.integration.test.js.map +1 -0
- package/dist/src/integration-tests/provider-switching.integration.test.js +97 -151
- package/dist/src/integration-tests/provider-switching.integration.test.js.map +1 -1
- package/dist/src/integration-tests/runtime-isolation.test.d.ts +13 -0
- package/dist/src/integration-tests/runtime-isolation.test.js +170 -0
- package/dist/src/integration-tests/runtime-isolation.test.js.map +1 -0
- package/dist/src/integration-tests/test-utils.js +19 -2
- package/dist/src/integration-tests/test-utils.js.map +1 -1
- package/dist/src/integration-tests/test-utils.test.js +9 -8
- package/dist/src/integration-tests/test-utils.test.js.map +1 -1
- package/dist/src/integration-tests/todo-continuation.integration.test.js +5 -2
- package/dist/src/integration-tests/todo-continuation.integration.test.js.map +1 -1
- package/dist/src/integration-tests/tools-governance.integration.test.d.ts +6 -0
- package/dist/src/integration-tests/tools-governance.integration.test.js +98 -0
- package/dist/src/integration-tests/tools-governance.integration.test.js.map +1 -0
- package/dist/src/nonInteractiveCli.js +36 -11
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/providers/logging/git-stats.test.js +11 -1
- package/dist/src/providers/logging/git-stats.test.js.map +1 -1
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js +1 -2
- package/dist/src/providers/logging/multi-provider-logging.integration.test.js.map +1 -1
- package/dist/src/providers/logging/performance.test.js +1 -1
- package/dist/src/providers/logging/performance.test.js.map +1 -1
- package/dist/src/providers/oauth-provider-registration.d.ts +2 -2
- package/dist/src/providers/oauth-provider-registration.js +25 -9
- package/dist/src/providers/oauth-provider-registration.js.map +1 -1
- package/dist/src/providers/provider-gemini-switching.test.js +67 -89
- package/dist/src/providers/provider-gemini-switching.test.js.map +1 -1
- package/dist/src/providers/provider-switching.integration.test.js +42 -98
- package/dist/src/providers/provider-switching.integration.test.js.map +1 -1
- package/dist/src/providers/providerConfigUtils.d.ts +12 -7
- package/dist/src/providers/providerConfigUtils.js +31 -99
- package/dist/src/providers/providerConfigUtils.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.d.ts +17 -1
- package/dist/src/providers/providerManagerInstance.js +157 -175
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +19 -15
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.test.js +2 -5
- package/dist/src/providers/providerManagerInstance.test.js.map +1 -1
- package/dist/src/runtime/__tests__/profileApplication.test.d.ts +5 -0
- package/dist/src/runtime/__tests__/profileApplication.test.js +232 -0
- package/dist/src/runtime/__tests__/profileApplication.test.js.map +1 -0
- package/dist/src/runtime/__tests__/runtimeIsolation.test.d.ts +5 -0
- package/dist/src/runtime/__tests__/runtimeIsolation.test.js +376 -0
- package/dist/src/runtime/__tests__/runtimeIsolation.test.js.map +1 -0
- package/dist/src/runtime/agentRuntimeAdapter.d.ts +249 -0
- package/dist/src/runtime/agentRuntimeAdapter.js +506 -0
- package/dist/src/runtime/agentRuntimeAdapter.js.map +1 -0
- package/dist/src/runtime/agentRuntimeAdapter.spec.d.ts +6 -0
- package/dist/src/runtime/agentRuntimeAdapter.spec.js +866 -0
- package/dist/src/runtime/agentRuntimeAdapter.spec.js.map +1 -0
- package/dist/src/runtime/messages.d.ts +28 -0
- package/dist/src/runtime/messages.js +64 -0
- package/dist/src/runtime/messages.js.map +1 -0
- package/dist/src/runtime/profileApplication.d.ts +33 -0
- package/dist/src/runtime/profileApplication.js +191 -0
- package/dist/src/runtime/profileApplication.js.map +1 -0
- package/dist/src/runtime/providerConfigUtils.test.d.ts +1 -0
- package/dist/src/runtime/providerConfigUtils.test.js +68 -0
- package/dist/src/runtime/providerConfigUtils.test.js.map +1 -0
- package/dist/src/runtime/runtimeContextFactory.d.ts +102 -0
- package/dist/src/runtime/runtimeContextFactory.js +190 -0
- package/dist/src/runtime/runtimeContextFactory.js.map +1 -0
- package/dist/src/runtime/runtimeSettings.d.ts +217 -0
- package/dist/src/runtime/runtimeSettings.js +1094 -0
- package/dist/src/runtime/runtimeSettings.js.map +1 -0
- package/dist/src/runtime/runtimeSettings.test.d.ts +1 -0
- package/dist/src/runtime/runtimeSettings.test.js +320 -0
- package/dist/src/runtime/runtimeSettings.test.js.map +1 -0
- package/dist/src/services/BuiltinCommandLoader.d.ts +13 -4
- package/dist/src/services/BuiltinCommandLoader.js +17 -4
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/McpPromptLoader.js +34 -13
- package/dist/src/services/McpPromptLoader.js.map +1 -1
- package/dist/src/settings/ephemeralSettings.js +3 -2
- package/dist/src/settings/ephemeralSettings.js.map +1 -1
- package/dist/src/test-utils/mockCommandContext.js +5 -2
- package/dist/src/test-utils/mockCommandContext.js.map +1 -1
- package/dist/src/ui/App.js +29 -49
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/aboutCommand.js +29 -0
- package/dist/src/ui/commands/aboutCommand.js.map +1 -1
- package/dist/src/ui/commands/authCommand.js +15 -12
- package/dist/src/ui/commands/authCommand.js.map +1 -1
- package/dist/src/ui/commands/baseurlCommand.js +8 -44
- package/dist/src/ui/commands/baseurlCommand.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +28 -12
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.d.ts +0 -3
- package/dist/src/ui/commands/diagnosticsCommand.js +40 -191
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/docsCommand.js +1 -1
- package/dist/src/ui/commands/docsCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.js +9 -58
- package/dist/src/ui/commands/keyCommand.js.map +1 -1
- package/dist/src/ui/commands/keyCommand.test.js +48 -102
- package/dist/src/ui/commands/keyCommand.test.js.map +1 -1
- package/dist/src/ui/commands/keyfileCommand.js +42 -93
- package/dist/src/ui/commands/keyfileCommand.js.map +1 -1
- package/dist/src/ui/commands/logoutCommand.js +2 -2
- package/dist/src/ui/commands/logoutCommand.js.map +1 -1
- package/dist/src/ui/commands/mcpCommand.js +29 -7
- package/dist/src/ui/commands/mcpCommand.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.js +8 -59
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.js +151 -267
- package/dist/src/ui/commands/profileCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.test.js +88 -344
- package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.js +9 -3
- package/dist/src/ui/commands/providerCommand.js.map +1 -1
- package/dist/src/ui/commands/restoreCommand.js +38 -18
- package/dist/src/ui/commands/restoreCommand.js.map +1 -1
- package/dist/src/ui/commands/schema/argumentResolver.test.d.ts +6 -0
- package/dist/src/ui/commands/schema/argumentResolver.test.js +619 -0
- package/dist/src/ui/commands/schema/argumentResolver.test.js.map +1 -0
- package/dist/src/ui/commands/schema/index.d.ts +15 -0
- package/dist/src/ui/commands/schema/index.js +320 -0
- package/dist/src/ui/commands/schema/index.js.map +1 -0
- package/dist/src/ui/commands/schema/types.d.ts +61 -0
- package/dist/src/ui/commands/schema/types.js +12 -0
- package/dist/src/ui/commands/schema/types.js.map +1 -0
- package/dist/src/ui/commands/setCommand.js +641 -325
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.test.js +92 -388
- package/dist/src/ui/commands/setCommand.test.js.map +1 -1
- package/dist/src/ui/commands/statusCommand.js +2 -2
- package/dist/src/ui/commands/statusCommand.js.map +1 -1
- package/dist/src/ui/commands/subagentCommand.d.ts +16 -0
- package/dist/src/ui/commands/subagentCommand.js +656 -0
- package/dist/src/ui/commands/subagentCommand.js.map +1 -0
- package/dist/src/ui/commands/test/setCommand.mutation.test.d.ts +6 -0
- package/dist/src/ui/commands/test/setCommand.mutation.test.js +132 -0
- package/dist/src/ui/commands/test/setCommand.mutation.test.js.map +1 -0
- package/dist/src/ui/commands/test/setCommand.phase09.test.d.ts +6 -0
- package/dist/src/ui/commands/test/setCommand.phase09.test.js +222 -0
- package/dist/src/ui/commands/test/setCommand.phase09.test.js.map +1 -0
- package/dist/src/ui/commands/test/subagentCommand.schema.test.d.ts +6 -0
- package/dist/src/ui/commands/test/subagentCommand.schema.test.js +125 -0
- package/dist/src/ui/commands/test/subagentCommand.schema.test.js.map +1 -0
- package/dist/src/ui/commands/test/subagentCommand.test.d.ts +1 -0
- package/dist/src/ui/commands/test/subagentCommand.test.js +589 -0
- package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -0
- package/dist/src/ui/commands/toolformatCommand.js +25 -98
- package/dist/src/ui/commands/toolformatCommand.js.map +1 -1
- package/dist/src/ui/commands/toolformatCommand.test.js +56 -102
- package/dist/src/ui/commands/toolformatCommand.test.js.map +1 -1
- package/dist/src/ui/commands/toolsCommand.js +187 -31
- package/dist/src/ui/commands/toolsCommand.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +11 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AboutBox.d.ts +4 -0
- package/dist/src/ui/components/AboutBox.js +1 -1
- package/dist/src/ui/components/AboutBox.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +4 -3
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.test.js +67 -1
- package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.js +4 -5
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.test.js +2 -0
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +18 -6
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +1 -1
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.js +6 -11
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.d.ts +13 -1
- package/dist/src/ui/components/SuggestionsDisplay.js +22 -3
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/WorkspaceMigrationDialog.js +1 -1
- package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js +14 -14
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/shared/text-buffer.js +4 -1
- package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
- package/dist/src/ui/containers/SessionController.js +61 -117
- package/dist/src/ui/containers/SessionController.js.map +1 -1
- package/dist/src/ui/contexts/RuntimeContext.d.ts +61 -0
- package/dist/src/ui/contexts/RuntimeContext.js +118 -0
- package/dist/src/ui/contexts/RuntimeContext.js.map +1 -0
- package/dist/src/ui/contexts/TodoProvider.d.ts +1 -0
- package/dist/src/ui/contexts/TodoProvider.js +10 -8
- package/dist/src/ui/contexts/TodoProvider.js.map +1 -1
- package/dist/src/ui/contexts/ToolCallProvider.d.ts +1 -0
- package/dist/src/ui/contexts/ToolCallProvider.js +10 -9
- package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -1
- package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.d.ts +6 -0
- package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js +39 -0
- package/dist/src/ui/hooks/__tests__/useSlashCompletion.set.phase09.test.js.map +1 -0
- package/dist/src/ui/hooks/atCommandProcessor.js +11 -3
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js +3 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +4 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +1 -0
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +29 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.js +11 -3
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -0
- package/dist/src/ui/hooks/useCommandCompletion.js +2 -0
- package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +37 -11
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.subagent.spec.d.ts +6 -0
- package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js +232 -0
- package/dist/src/ui/hooks/useGeminiStream.subagent.spec.js.map +1 -0
- package/dist/src/ui/hooks/useLoadProfileDialog.d.ts +1 -1
- package/dist/src/ui/hooks/useLoadProfileDialog.js +18 -57
- package/dist/src/ui/hooks/useLoadProfileDialog.js.map +1 -1
- package/dist/src/ui/hooks/useOpenAIProviderInfo.d.ts +1 -1
- package/dist/src/ui/hooks/useOpenAIProviderInfo.js +12 -7
- package/dist/src/ui/hooks/useOpenAIProviderInfo.js.map +1 -1
- package/dist/src/ui/hooks/useProviderDialog.d.ts +1 -1
- package/dist/src/ui/hooks/useProviderDialog.js +17 -90
- package/dist/src/ui/hooks/useProviderDialog.js.map +1 -1
- package/dist/src/ui/hooks/useProviderModelDialog.d.ts +2 -2
- package/dist/src/ui/hooks/useProviderModelDialog.js +11 -12
- package/dist/src/ui/hooks/useProviderModelDialog.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.d.ts +3 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +144 -34
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.d.ts +32 -0
- package/dist/src/ui/hooks/useSlashCompletion.js +154 -77
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +39 -14
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +108 -79
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
- package/dist/src/ui/types.d.ts +5 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.test.js +16 -0
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
- package/dist/src/ui/utils/TableRenderer.js +213 -40
- package/dist/src/ui/utils/TableRenderer.js.map +1 -1
- package/dist/src/utils/sandbox.js +1 -1
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js +4 -2
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +30 -30
- package/dist/src/zed-integration/zedIntegration.js +112 -39
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +7 -5
- 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,
|
|
7
|
-
import {
|
|
8
|
-
import { AuthType } from '@vybestack/llxprt-code-core';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
68
|
-
|
|
60
|
+
manager.registerProvider(createMockProvider());
|
|
61
|
+
expect(manager.hasActiveProvider()).toBe(false);
|
|
69
62
|
const config = {
|
|
70
|
-
refreshAuth:
|
|
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
|
-
|
|
77
|
-
expect(originalRefreshAuth).toHaveBeenCalled();
|
|
68
|
+
expect(config.refreshAuth).toHaveBeenCalledWith(AuthType.USE_GEMINI);
|
|
78
69
|
});
|
|
79
|
-
it('
|
|
80
|
-
const manager =
|
|
81
|
-
|
|
82
|
-
manager.registerProvider(
|
|
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
|
-
|
|
87
|
+
expect(config.refreshAuth).toHaveBeenCalledWith(AuthType.USE_GEMINI);
|
|
104
88
|
expect(mockGeminiClient.chat.contentGenerator).toBeNull();
|
|
105
89
|
});
|
|
106
|
-
it('
|
|
107
|
-
const manager =
|
|
108
|
-
|
|
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(
|
|
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
|
-
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,
|
|
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
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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('
|
|
63
|
-
const manager =
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,
|
|
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(
|
|
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(
|
|
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 {
|
|
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(
|
|
28
|
+
export async function setProviderApiKey(apiKey) {
|
|
24
29
|
try {
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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(
|
|
55
|
+
export async function setProviderBaseUrl(baseUrl) {
|
|
97
56
|
try {
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
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;
|