@vybestack/llxprt-code 0.4.4 → 0.4.5-nightly.251027.c0567b33
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/README.md +9 -0
- package/dist/package.json +3 -3
- package/dist/src/{ui/components/ProQuotaDialog.test.d.ts → auth/oauth-manager-initialization.spec.d.ts} +1 -1
- package/dist/src/auth/oauth-manager-initialization.spec.js +206 -0
- package/dist/src/auth/oauth-manager-initialization.spec.js.map +1 -0
- package/dist/src/auth/oauth-manager.js +25 -8
- package/dist/src/auth/oauth-manager.js.map +1 -1
- package/dist/src/auth/oauth-manager.spec.js +35 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -1
- package/dist/src/config/cliEphemeralSettings.d.ts +12 -0
- package/dist/src/config/cliEphemeralSettings.js +43 -0
- package/dist/src/config/cliEphemeralSettings.js.map +1 -0
- package/dist/src/config/cliEphemeralSettings.test.d.ts +6 -0
- package/dist/src/config/cliEphemeralSettings.test.js +59 -0
- package/dist/src/config/cliEphemeralSettings.test.js.map +1 -0
- package/dist/src/config/config.d.ts +1 -0
- package/dist/src/config/config.js +19 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/settings.js +8 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +9 -0
- package/dist/src/config/settingsSchema.js +9 -0
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +128 -141
- package/dist/src/gemini.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/providers/credentialPrecedence.d.ts +22 -0
- package/dist/src/providers/credentialPrecedence.js +44 -0
- package/dist/src/providers/credentialPrecedence.js.map +1 -0
- package/dist/src/providers/credentialPrecedence.test.d.ts +6 -0
- package/dist/src/providers/credentialPrecedence.test.js +52 -0
- package/dist/src/providers/credentialPrecedence.test.js.map +1 -0
- package/dist/src/providers/oauth-provider-registration.d.ts +21 -0
- package/dist/src/providers/oauth-provider-registration.js +55 -0
- package/dist/src/providers/oauth-provider-registration.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.js +76 -14
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.d.ts +6 -0
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +114 -0
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -0
- package/dist/src/settings/ephemeralSettings.d.ts +17 -0
- package/dist/src/settings/ephemeralSettings.js +187 -0
- package/dist/src/settings/ephemeralSettings.js.map +1 -0
- package/dist/src/settings/modelParamParser.d.ts +10 -0
- package/dist/src/settings/modelParamParser.js +31 -0
- package/dist/src/settings/modelParamParser.js.map +1 -0
- package/dist/src/ui/App.js +7 -141
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.js +2 -0
- package/dist/src/ui/commands/profileCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.test.js +29 -0
- package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
- package/dist/src/ui/commands/setCommand.js +15 -200
- package/dist/src/ui/commands/setCommand.js.map +1 -1
- package/dist/src/ui/commands/setCommand.test.js +29 -4
- package/dist/src/ui/commands/setCommand.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -0
- package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/TodoPanel.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -0
- package/dist/src/ui/components/messages/ToolGroupMessage.js +64 -15
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +112 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/todo-utils.d.ts +1 -11
- package/dist/src/ui/components/todo-utils.js +1 -35
- package/dist/src/ui/components/todo-utils.js.map +1 -1
- package/dist/src/ui/containers/SessionController.js +1 -60
- package/dist/src/ui/containers/SessionController.js.map +1 -1
- package/dist/src/ui/containers/SessionController.test.js +0 -101
- package/dist/src/ui/containers/SessionController.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js +1 -3
- package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +1 -12
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/reducers/sessionReducer.d.ts +0 -4
- package/dist/src/ui/reducers/sessionReducer.js +0 -2
- package/dist/src/ui/reducers/sessionReducer.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.js +8 -4
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/ui/components/ProQuotaDialog.d.ts +0 -13
- package/dist/src/ui/components/ProQuotaDialog.js +0 -22
- package/dist/src/ui/components/ProQuotaDialog.js.map +0 -1
- package/dist/src/ui/components/ProQuotaDialog.test.js +0 -57
- package/dist/src/ui/components/ProQuotaDialog.test.js.map +0 -1
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
* Copyright 2025 Vybestack LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { ProviderManager, OpenAIProvider, OpenAIResponsesProvider, AnthropicProvider, GeminiProvider, sanitizeForByteString, needsSanitization, } from '@vybestack/llxprt-code-core';
|
|
6
|
+
import { ProviderManager, OpenAIProvider, OpenAIResponsesProvider, AnthropicProvider, GeminiProvider, sanitizeForByteString, needsSanitization, getSettingsService, } from '@vybestack/llxprt-code-core';
|
|
7
7
|
import { NodeFileSystem } from './IFileSystem.js';
|
|
8
8
|
import { LoadedSettings, USER_SETTINGS_PATH, } from '../config/settings.js';
|
|
9
9
|
import stripJsonComments from 'strip-json-comments';
|
|
10
10
|
import { OAuthManager } from '../auth/oauth-manager.js';
|
|
11
11
|
import { MultiProviderTokenStore } from '../auth/types.js';
|
|
12
|
-
import {
|
|
13
|
-
import { QwenOAuthProvider } from '../auth/qwen-oauth-provider.js';
|
|
14
|
-
import { AnthropicOAuthProvider } from '../auth/anthropic-oauth-provider.js';
|
|
12
|
+
import { ensureOAuthProviderRegistered } from './oauth-provider-registration.js';
|
|
15
13
|
/**
|
|
16
14
|
* Sanitizes API keys to remove problematic characters that cause ByteString errors.
|
|
17
15
|
* This handles cases where API key files have encoding issues or contain
|
|
@@ -28,6 +26,60 @@ function sanitizeApiKey(key) {
|
|
|
28
26
|
let providerManagerInstance = null;
|
|
29
27
|
let fileSystemInstance = null;
|
|
30
28
|
let oauthManagerInstance = null;
|
|
29
|
+
function coerceAuthOnly(value) {
|
|
30
|
+
if (typeof value === 'boolean') {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
const normalized = value.trim().toLowerCase();
|
|
35
|
+
if (normalized === 'true') {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
if (normalized === 'false') {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function resolveAuthOnlyFlag(config, loadedSettings) {
|
|
45
|
+
if (config && typeof config.getEphemeralSettings === 'function') {
|
|
46
|
+
const authOnlyValue = config.getEphemeralSettings().authOnly;
|
|
47
|
+
if (authOnlyValue !== undefined) {
|
|
48
|
+
const coerced = coerceAuthOnly(authOnlyValue);
|
|
49
|
+
if (typeof coerced === 'boolean') {
|
|
50
|
+
return coerced;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (loadedSettings?.merged) {
|
|
55
|
+
const mergedAuthOnly = loadedSettings.merged
|
|
56
|
+
.authOnly;
|
|
57
|
+
if (mergedAuthOnly !== undefined) {
|
|
58
|
+
const coerced = coerceAuthOnly(mergedAuthOnly);
|
|
59
|
+
if (typeof coerced === 'boolean') {
|
|
60
|
+
return coerced;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (typeof getSettingsService === 'function') {
|
|
65
|
+
try {
|
|
66
|
+
const settingsService = getSettingsService();
|
|
67
|
+
if (settingsService && typeof settingsService.get === 'function') {
|
|
68
|
+
const serviceValue = settingsService.get('authOnly');
|
|
69
|
+
if (serviceValue !== undefined) {
|
|
70
|
+
const coerced = coerceAuthOnly(serviceValue);
|
|
71
|
+
if (typeof coerced === 'boolean') {
|
|
72
|
+
return coerced;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (_error) {
|
|
78
|
+
// Ignore SettingsService lookup failures and fall back to default
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
31
83
|
/**
|
|
32
84
|
* Set a custom file system implementation (mainly for testing).
|
|
33
85
|
*/
|
|
@@ -90,36 +142,38 @@ export function getProviderManager(config, allowBrowserEnvironment = false, sett
|
|
|
90
142
|
true)
|
|
91
143
|
: undefined;
|
|
92
144
|
}
|
|
145
|
+
const authOnlyEnabled = resolveAuthOnlyFlag(config, loadedSettings);
|
|
93
146
|
// @plan:PLAN-20250823-AUTHFIXES.P15
|
|
94
147
|
// @requirement:REQ-004
|
|
95
148
|
// Create OAuth manager for providers with TokenStore integration
|
|
96
149
|
const tokenStore = new MultiProviderTokenStore();
|
|
97
150
|
const oauthManager = new OAuthManager(tokenStore, loadedSettings);
|
|
98
151
|
oauthManagerInstance = oauthManager;
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const anthropicOAuthProvider = new AnthropicOAuthProvider(tokenStore);
|
|
103
|
-
oauthManager.registerProvider(geminiOAuthProvider);
|
|
104
|
-
oauthManager.registerProvider(qwenOAuthProvider);
|
|
105
|
-
oauthManager.registerProvider(anthropicOAuthProvider);
|
|
152
|
+
// CRITICAL FIX: Don't register OAuth providers upfront
|
|
153
|
+
// They should be registered on-demand when actually needed
|
|
154
|
+
// This prevents premature OAuth initialization during MCP operations
|
|
106
155
|
// Set config BEFORE registering providers so logging wrapper works
|
|
107
156
|
if (config) {
|
|
108
157
|
providerManagerInstance.setConfig(config);
|
|
109
158
|
// CRITICAL: Set provider manager on config so LoggingProviderWrapper can accumulate tokens!
|
|
110
159
|
config.setProviderManager(providerManagerInstance);
|
|
111
160
|
}
|
|
112
|
-
//
|
|
161
|
+
// Register OAuth providers on-demand when creating actual providers
|
|
162
|
+
// Gemini Provider
|
|
113
163
|
const geminiProvider = new GeminiProvider(undefined, undefined, config, oauthManager);
|
|
114
164
|
if (config) {
|
|
115
165
|
geminiProvider.setConfig(config);
|
|
116
166
|
}
|
|
117
167
|
providerManagerInstance.registerProvider(geminiProvider);
|
|
168
|
+
// Register Gemini OAuth provider when Gemini provider is created
|
|
169
|
+
if (oauthManager && tokenStore) {
|
|
170
|
+
void ensureOAuthProviderRegistered('gemini', oauthManager, tokenStore, addItem);
|
|
171
|
+
}
|
|
118
172
|
// Gemini auth configuration removed - use explicit --key/--keyfile, /key//keyfile commands, profiles, env vars, or OAuth only
|
|
119
173
|
// Always register OpenAI provider
|
|
120
174
|
// Priority: Environment variable only - no automatic keyfile loading
|
|
121
175
|
let openaiApiKey;
|
|
122
|
-
if (process.env.OPENAI_API_KEY) {
|
|
176
|
+
if (!authOnlyEnabled && process.env.OPENAI_API_KEY) {
|
|
123
177
|
openaiApiKey = sanitizeApiKey(process.env.OPENAI_API_KEY);
|
|
124
178
|
}
|
|
125
179
|
const openaiBaseUrl = process.env.OPENAI_BASE_URL;
|
|
@@ -163,6 +217,10 @@ export function getProviderManager(config, allowBrowserEnvironment = false, sett
|
|
|
163
217
|
configurable: true,
|
|
164
218
|
});
|
|
165
219
|
providerManagerInstance.registerProvider(qwenProvider);
|
|
220
|
+
// Register Qwen OAuth provider when Qwen provider is created
|
|
221
|
+
if (oauthManager && tokenStore) {
|
|
222
|
+
void ensureOAuthProviderRegistered('qwen', oauthManager, tokenStore, addItem);
|
|
223
|
+
}
|
|
166
224
|
// Register OpenAI Responses provider (for o1, o3 models)
|
|
167
225
|
// This provider exclusively uses the /responses endpoint
|
|
168
226
|
const openaiResponsesProvider = new OpenAIResponsesProvider(openaiApiKey || undefined, // Use same API key as OpenAI
|
|
@@ -171,7 +229,7 @@ export function getProviderManager(config, allowBrowserEnvironment = false, sett
|
|
|
171
229
|
// Always register Anthropic provider
|
|
172
230
|
// Priority: Environment variable only - no automatic keyfile loading
|
|
173
231
|
let anthropicApiKey;
|
|
174
|
-
if (process.env.ANTHROPIC_API_KEY) {
|
|
232
|
+
if (!authOnlyEnabled && process.env.ANTHROPIC_API_KEY) {
|
|
175
233
|
anthropicApiKey = sanitizeApiKey(process.env.ANTHROPIC_API_KEY);
|
|
176
234
|
}
|
|
177
235
|
const anthropicBaseUrl = process.env.ANTHROPIC_BASE_URL;
|
|
@@ -182,6 +240,10 @@ export function getProviderManager(config, allowBrowserEnvironment = false, sett
|
|
|
182
240
|
const anthropicProvider = new AnthropicProvider(anthropicApiKey || undefined, // Pass undefined instead of empty string to allow OAuth fallback
|
|
183
241
|
anthropicBaseUrl, anthropicProviderConfig, oauthManager);
|
|
184
242
|
providerManagerInstance.registerProvider(anthropicProvider);
|
|
243
|
+
// Always register Anthropic OAuth provider so users can switch between API key and OAuth flows
|
|
244
|
+
if (oauthManager && tokenStore) {
|
|
245
|
+
void ensureOAuthProviderRegistered('anthropic', oauthManager, tokenStore, addItem);
|
|
246
|
+
}
|
|
185
247
|
// Set default provider to gemini
|
|
186
248
|
providerManagerInstance.setActiveProvider('gemini');
|
|
187
249
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerManagerInstance.js","sourceRoot":"","sources":["../../../src/providers/providerManagerInstance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"providerManagerInstance.js","sourceRoot":"","sources":["../../../src/providers/providerManagerInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
7
|
+
describe('Anthropic OAuth registration with environment key', () => {
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
delete process.env.ANTHROPIC_API_KEY;
|
|
10
|
+
delete process.env.OPENAI_API_KEY;
|
|
11
|
+
vi.resetModules();
|
|
12
|
+
vi.clearAllMocks();
|
|
13
|
+
});
|
|
14
|
+
it('registers Anthropic OAuth provider even when ANTHROPIC_API_KEY is set', async () => {
|
|
15
|
+
const ensureOAuthProviderRegisteredMock = vi.fn();
|
|
16
|
+
process.env.ANTHROPIC_API_KEY = 'sk-test-key';
|
|
17
|
+
vi.doMock('./oauth-provider-registration.js', () => ({
|
|
18
|
+
ensureOAuthProviderRegistered: ensureOAuthProviderRegisteredMock,
|
|
19
|
+
isOAuthProviderRegistered: vi.fn(),
|
|
20
|
+
resetRegisteredProviders: vi.fn(),
|
|
21
|
+
}));
|
|
22
|
+
const anthropicCtor = vi.fn(() => ({}));
|
|
23
|
+
vi.doMock('@vybestack/llxprt-code-core', async () => {
|
|
24
|
+
const actual = await vi.importActual('@vybestack/llxprt-code-core');
|
|
25
|
+
class MockProviderManager {
|
|
26
|
+
setConfig() { }
|
|
27
|
+
setActiveProvider() { }
|
|
28
|
+
registerProvider() { }
|
|
29
|
+
}
|
|
30
|
+
class MockGeminiProvider {
|
|
31
|
+
setConfig() { }
|
|
32
|
+
}
|
|
33
|
+
class MockConfig {
|
|
34
|
+
setProviderManager() { }
|
|
35
|
+
getEphemeralSettings() {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
class MockProvider {
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
...actual,
|
|
43
|
+
ProviderManager: MockProviderManager,
|
|
44
|
+
Config: MockConfig,
|
|
45
|
+
GeminiProvider: MockGeminiProvider,
|
|
46
|
+
OpenAIProvider: MockProvider,
|
|
47
|
+
OpenAIResponsesProvider: MockProvider,
|
|
48
|
+
AnthropicProvider: anthropicCtor,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
const { getProviderManager, resetProviderManager } = await import('./providerManagerInstance.js');
|
|
52
|
+
resetProviderManager();
|
|
53
|
+
getProviderManager(undefined, false, undefined);
|
|
54
|
+
const registeredAnthropic = ensureOAuthProviderRegisteredMock.mock.calls.some(([provider]) => provider === 'anthropic');
|
|
55
|
+
expect(registeredAnthropic).toBe(true);
|
|
56
|
+
// Ensure anthropic provider constructor received oauthManager even when API key exists
|
|
57
|
+
const ctorCalls = anthropicCtor.mock.calls;
|
|
58
|
+
expect(ctorCalls).toHaveLength(1);
|
|
59
|
+
const firstCall = ctorCalls[0];
|
|
60
|
+
const oauthManagerArg = firstCall ? firstCall[3] : undefined;
|
|
61
|
+
expect(oauthManagerArg).toBeTruthy();
|
|
62
|
+
});
|
|
63
|
+
it('ignores API keys when authOnly is enabled', async () => {
|
|
64
|
+
const ensureOAuthProviderRegisteredMock = vi.fn();
|
|
65
|
+
process.env.ANTHROPIC_API_KEY = 'sk-test-key';
|
|
66
|
+
process.env.OPENAI_API_KEY = 'sk-test-openai';
|
|
67
|
+
vi.doMock('./oauth-provider-registration.js', () => ({
|
|
68
|
+
ensureOAuthProviderRegistered: ensureOAuthProviderRegisteredMock,
|
|
69
|
+
isOAuthProviderRegistered: vi.fn(),
|
|
70
|
+
resetRegisteredProviders: vi.fn(),
|
|
71
|
+
}));
|
|
72
|
+
const anthropicCtor = vi.fn(() => ({}));
|
|
73
|
+
const openaiCtor = vi.fn(() => ({}));
|
|
74
|
+
const openaiResponsesCtor = vi.fn(() => ({}));
|
|
75
|
+
vi.doMock('@vybestack/llxprt-code-core', async () => {
|
|
76
|
+
const actual = await vi.importActual('@vybestack/llxprt-code-core');
|
|
77
|
+
class MockProviderManager {
|
|
78
|
+
setConfig() { }
|
|
79
|
+
setActiveProvider() { }
|
|
80
|
+
registerProvider() { }
|
|
81
|
+
}
|
|
82
|
+
class MockGeminiProvider {
|
|
83
|
+
setConfig() { }
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
...actual,
|
|
87
|
+
ProviderManager: MockProviderManager,
|
|
88
|
+
GeminiProvider: MockGeminiProvider,
|
|
89
|
+
OpenAIProvider: openaiCtor,
|
|
90
|
+
OpenAIResponsesProvider: openaiResponsesCtor,
|
|
91
|
+
AnthropicProvider: anthropicCtor,
|
|
92
|
+
};
|
|
93
|
+
});
|
|
94
|
+
const { getProviderManager, resetProviderManager } = await import('./providerManagerInstance.js');
|
|
95
|
+
resetProviderManager();
|
|
96
|
+
const mockConfig = {
|
|
97
|
+
setProviderManager() { },
|
|
98
|
+
getEphemeralSettings() {
|
|
99
|
+
return { authOnly: true };
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
getProviderManager(mockConfig, false, undefined);
|
|
103
|
+
expect(openaiCtor).toHaveBeenCalled();
|
|
104
|
+
const firstOpenaiCall = openaiCtor.mock.calls[0];
|
|
105
|
+
expect(firstOpenaiCall?.[0]).toBeUndefined();
|
|
106
|
+
expect(openaiResponsesCtor).toHaveBeenCalled();
|
|
107
|
+
const firstResponsesCall = openaiResponsesCtor.mock.calls[0];
|
|
108
|
+
expect(firstResponsesCall?.[0]).toBeUndefined();
|
|
109
|
+
expect(anthropicCtor).toHaveBeenCalled();
|
|
110
|
+
const anthropicArgs = anthropicCtor.mock.calls[0];
|
|
111
|
+
expect(anthropicArgs?.[0]).toBeUndefined();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=providerManagerInstance.oauthRegistration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerManagerInstance.oauthRegistration.test.js","sourceRoot":"","sources":["../../../src/providers/providerManagerInstance.oauthRegistration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export declare const ephemeralSettingHelp: Record<string, string>;
|
|
7
|
+
export type EphemeralSettingKey = keyof typeof ephemeralSettingHelp;
|
|
8
|
+
export interface EphemeralParseSuccess {
|
|
9
|
+
success: true;
|
|
10
|
+
value: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface EphemeralParseFailure {
|
|
13
|
+
success: false;
|
|
14
|
+
message: string;
|
|
15
|
+
}
|
|
16
|
+
export type EphemeralParseResult = EphemeralParseSuccess | EphemeralParseFailure;
|
|
17
|
+
export declare function parseEphemeralSettingValue(key: string, rawValue: string): EphemeralParseResult;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export const ephemeralSettingHelp = {
|
|
7
|
+
'context-limit': 'Maximum number of tokens for the context window (e.g., 100000)',
|
|
8
|
+
'compression-threshold': 'Fraction of context limit that triggers compression (0.0-1.0, e.g., 0.7 for 70%)',
|
|
9
|
+
'base-url': 'Base URL for API requests',
|
|
10
|
+
'tool-format': 'Tool format override for the provider',
|
|
11
|
+
'api-version': 'API version to use',
|
|
12
|
+
'custom-headers': 'Custom HTTP headers as JSON object',
|
|
13
|
+
'stream-options': 'Stream options for OpenAI API (default: { include_usage: true })',
|
|
14
|
+
streaming: 'Enable or disable streaming responses (enabled/disabled, default: enabled)',
|
|
15
|
+
'shell-replacement': 'Allow command substitution ($(), <(), backticks) in shell commands (default: false)',
|
|
16
|
+
'socket-timeout': 'Request timeout in milliseconds for local AI servers (default: 60000)',
|
|
17
|
+
'socket-keepalive': 'Enable TCP keepalive for local AI server connections (true/false, default: true)',
|
|
18
|
+
'socket-nodelay': 'Enable TCP_NODELAY concept for local AI servers (true/false, default: true)',
|
|
19
|
+
'tool-output-max-items': 'Maximum number of items/files/matches returned by tools (default: 50)',
|
|
20
|
+
'tool-output-max-tokens': 'Maximum tokens in tool output (default: 50000)',
|
|
21
|
+
'tool-output-truncate-mode': 'How to handle exceeding limits: warn, truncate, or sample (default: warn)',
|
|
22
|
+
'tool-output-item-size-limit': 'Maximum size per item/file in bytes (default: 524288 = 512KB)',
|
|
23
|
+
'max-prompt-tokens': 'Maximum tokens allowed in any prompt sent to LLM (default: 200000)',
|
|
24
|
+
emojifilter: 'Emoji filter mode (allowed, auto, warn, error)',
|
|
25
|
+
retries: 'Maximum number of retry attempts for API calls (default: varies by provider)',
|
|
26
|
+
retrywait: 'Initial delay in milliseconds between retry attempts (default: varies by provider)',
|
|
27
|
+
maxTurnsPerPrompt: 'Maximum number of turns allowed per prompt before stopping (default: 100, -1 for unlimited)',
|
|
28
|
+
authOnly: 'Force providers to use OAuth authentication only, ignoring API keys and environment variables',
|
|
29
|
+
};
|
|
30
|
+
const validEphemeralKeys = Object.keys(ephemeralSettingHelp);
|
|
31
|
+
export function parseEphemeralSettingValue(key, rawValue) {
|
|
32
|
+
if (!validEphemeralKeys.includes(key)) {
|
|
33
|
+
return {
|
|
34
|
+
success: false,
|
|
35
|
+
message: `Invalid setting key: ${key}. Valid keys are: ${validEphemeralKeys.join(', ')}`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
let parsedValue = parseValue(rawValue);
|
|
39
|
+
if (key === 'compression-threshold') {
|
|
40
|
+
const numValue = parsedValue;
|
|
41
|
+
if (typeof numValue !== 'number' || numValue <= 0 || numValue > 1) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
message: 'compression-threshold must be a decimal between 0 and 1 (e.g., 0.7 for 70%)',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (key === 'context-limit') {
|
|
49
|
+
const numValue = parsedValue;
|
|
50
|
+
if (typeof numValue !== 'number' ||
|
|
51
|
+
numValue <= 0 ||
|
|
52
|
+
!Number.isInteger(numValue)) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
message: 'context-limit must be a positive integer (e.g., 100000)',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (key === 'socket-timeout') {
|
|
60
|
+
const numValue = parsedValue;
|
|
61
|
+
if (typeof numValue !== 'number' ||
|
|
62
|
+
numValue <= 0 ||
|
|
63
|
+
!Number.isInteger(numValue)) {
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
message: 'socket-timeout must be a positive integer in milliseconds (e.g., 60000)',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (key === 'socket-keepalive' || key === 'socket-nodelay') {
|
|
71
|
+
if (typeof parsedValue !== 'boolean') {
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
message: `${key} must be either 'true' or 'false'`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (key === 'tool-output-max-items' ||
|
|
79
|
+
key === 'tool-output-max-tokens' ||
|
|
80
|
+
key === 'tool-output-item-size-limit' ||
|
|
81
|
+
key === 'max-prompt-tokens') {
|
|
82
|
+
const numValue = parsedValue;
|
|
83
|
+
if (typeof numValue !== 'number' ||
|
|
84
|
+
numValue <= 0 ||
|
|
85
|
+
!Number.isInteger(numValue)) {
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
message: `${key} must be a positive integer`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (key === 'maxTurnsPerPrompt') {
|
|
93
|
+
const numValue = parsedValue;
|
|
94
|
+
if (typeof numValue !== 'number' ||
|
|
95
|
+
!Number.isInteger(numValue) ||
|
|
96
|
+
(numValue !== -1 && numValue <= 0)) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
message: `${key} must be a positive integer or -1 for unlimited`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (key === 'tool-output-truncate-mode') {
|
|
104
|
+
const validModes = ['warn', 'truncate', 'sample'];
|
|
105
|
+
if (!validModes.includes(parsedValue)) {
|
|
106
|
+
return {
|
|
107
|
+
success: false,
|
|
108
|
+
message: `${key} must be one of: ${validModes.join(', ')}`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (key === 'emojifilter') {
|
|
113
|
+
const validModes = ['allowed', 'auto', 'warn', 'error'];
|
|
114
|
+
const value = parsedValue;
|
|
115
|
+
const normalizedValue = value.toLowerCase();
|
|
116
|
+
if (!validModes.includes(normalizedValue)) {
|
|
117
|
+
return {
|
|
118
|
+
success: false,
|
|
119
|
+
message: `Invalid emoji filter mode '${parsedValue}'. Valid modes are: ${validModes.join(', ')}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
parsedValue = normalizedValue;
|
|
123
|
+
}
|
|
124
|
+
if (key === 'shell-replacement') {
|
|
125
|
+
if (typeof parsedValue !== 'boolean') {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
message: `shell-replacement must be either 'true' or 'false'`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (key === 'authOnly') {
|
|
133
|
+
if (typeof parsedValue !== 'boolean') {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
message: `authOnly must be either 'true' or 'false'`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (key === 'streaming') {
|
|
141
|
+
const validModes = ['enabled', 'disabled'];
|
|
142
|
+
if (typeof parsedValue === 'boolean') {
|
|
143
|
+
parsedValue = parsedValue ? 'enabled' : 'disabled';
|
|
144
|
+
}
|
|
145
|
+
else if (typeof parsedValue === 'string' &&
|
|
146
|
+
validModes.includes(parsedValue.toLowerCase())) {
|
|
147
|
+
parsedValue = parsedValue.toLowerCase();
|
|
148
|
+
}
|
|
149
|
+
else if (typeof parsedValue === 'string' &&
|
|
150
|
+
validModes.includes(parsedValue.trim().toLowerCase())) {
|
|
151
|
+
parsedValue = parsedValue.trim().toLowerCase();
|
|
152
|
+
}
|
|
153
|
+
else if (typeof parsedValue === 'string' &&
|
|
154
|
+
['true', 'false'].includes(parsedValue.toLowerCase())) {
|
|
155
|
+
parsedValue =
|
|
156
|
+
parsedValue.toLowerCase() === 'true' ? 'enabled' : 'disabled';
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
message: `Invalid streaming mode '${parsedValue}'. Valid modes are: ${validModes.join(', ')}`,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return { success: true, value: parsedValue };
|
|
166
|
+
}
|
|
167
|
+
function parseValue(value) {
|
|
168
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) {
|
|
169
|
+
const num = Number(value);
|
|
170
|
+
if (!Number.isNaN(num)) {
|
|
171
|
+
return num;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (value.toLowerCase() === 'true') {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
if (value.toLowerCase() === 'false') {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
return JSON.parse(value);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return value;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=ephemeralSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ephemeralSettings.js","sourceRoot":"","sources":["../../../src/settings/ephemeralSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse a model parameter value provided via CLI or slash commands.
|
|
8
|
+
* Attempts numeric, boolean, and JSON decoding before falling back to raw string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseModelParamValue(value: string): unknown;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Vybestack LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Parse a model parameter value provided via CLI or slash commands.
|
|
8
|
+
* Attempts numeric, boolean, and JSON decoding before falling back to raw string.
|
|
9
|
+
*/
|
|
10
|
+
export function parseModelParamValue(value) {
|
|
11
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) {
|
|
12
|
+
const num = Number(value);
|
|
13
|
+
if (!Number.isNaN(num)) {
|
|
14
|
+
return num;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const lower = value.toLowerCase();
|
|
18
|
+
if (lower === 'true') {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (lower === 'false') {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(value);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=modelParamParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelParamParser.js","sourceRoot":"","sources":["../../../src/settings/modelParamParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|