@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.
Files changed (90) hide show
  1. package/README.md +9 -0
  2. package/dist/package.json +3 -3
  3. package/dist/src/{ui/components/ProQuotaDialog.test.d.ts → auth/oauth-manager-initialization.spec.d.ts} +1 -1
  4. package/dist/src/auth/oauth-manager-initialization.spec.js +206 -0
  5. package/dist/src/auth/oauth-manager-initialization.spec.js.map +1 -0
  6. package/dist/src/auth/oauth-manager.js +25 -8
  7. package/dist/src/auth/oauth-manager.js.map +1 -1
  8. package/dist/src/auth/oauth-manager.spec.js +35 -0
  9. package/dist/src/auth/oauth-manager.spec.js.map +1 -1
  10. package/dist/src/config/cliEphemeralSettings.d.ts +12 -0
  11. package/dist/src/config/cliEphemeralSettings.js +43 -0
  12. package/dist/src/config/cliEphemeralSettings.js.map +1 -0
  13. package/dist/src/config/cliEphemeralSettings.test.d.ts +6 -0
  14. package/dist/src/config/cliEphemeralSettings.test.js +59 -0
  15. package/dist/src/config/cliEphemeralSettings.test.js.map +1 -0
  16. package/dist/src/config/config.d.ts +1 -0
  17. package/dist/src/config/config.js +19 -0
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/settings.js +8 -1
  20. package/dist/src/config/settings.js.map +1 -1
  21. package/dist/src/config/settingsSchema.d.ts +9 -0
  22. package/dist/src/config/settingsSchema.js +9 -0
  23. package/dist/src/config/settingsSchema.js.map +1 -1
  24. package/dist/src/gemini.js +128 -141
  25. package/dist/src/gemini.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/providers/credentialPrecedence.d.ts +22 -0
  29. package/dist/src/providers/credentialPrecedence.js +44 -0
  30. package/dist/src/providers/credentialPrecedence.js.map +1 -0
  31. package/dist/src/providers/credentialPrecedence.test.d.ts +6 -0
  32. package/dist/src/providers/credentialPrecedence.test.js +52 -0
  33. package/dist/src/providers/credentialPrecedence.test.js.map +1 -0
  34. package/dist/src/providers/oauth-provider-registration.d.ts +21 -0
  35. package/dist/src/providers/oauth-provider-registration.js +55 -0
  36. package/dist/src/providers/oauth-provider-registration.js.map +1 -0
  37. package/dist/src/providers/providerManagerInstance.js +76 -14
  38. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  39. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.d.ts +6 -0
  40. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +114 -0
  41. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -0
  42. package/dist/src/settings/ephemeralSettings.d.ts +17 -0
  43. package/dist/src/settings/ephemeralSettings.js +187 -0
  44. package/dist/src/settings/ephemeralSettings.js.map +1 -0
  45. package/dist/src/settings/modelParamParser.d.ts +10 -0
  46. package/dist/src/settings/modelParamParser.js +31 -0
  47. package/dist/src/settings/modelParamParser.js.map +1 -0
  48. package/dist/src/ui/App.js +7 -141
  49. package/dist/src/ui/App.js.map +1 -1
  50. package/dist/src/ui/commands/profileCommand.js +2 -0
  51. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  52. package/dist/src/ui/commands/profileCommand.test.js +29 -0
  53. package/dist/src/ui/commands/profileCommand.test.js.map +1 -1
  54. package/dist/src/ui/commands/setCommand.js +15 -200
  55. package/dist/src/ui/commands/setCommand.js.map +1 -1
  56. package/dist/src/ui/commands/setCommand.test.js +29 -4
  57. package/dist/src/ui/commands/setCommand.test.js.map +1 -1
  58. package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -0
  59. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  60. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  61. package/dist/src/ui/components/TodoPanel.js.map +1 -1
  62. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +1 -0
  63. package/dist/src/ui/components/messages/ToolGroupMessage.js +64 -15
  64. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  65. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +112 -1
  66. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  67. package/dist/src/ui/components/todo-utils.d.ts +1 -11
  68. package/dist/src/ui/components/todo-utils.js +1 -35
  69. package/dist/src/ui/components/todo-utils.js.map +1 -1
  70. package/dist/src/ui/containers/SessionController.js +1 -60
  71. package/dist/src/ui/containers/SessionController.js.map +1 -1
  72. package/dist/src/ui/containers/SessionController.test.js +0 -101
  73. package/dist/src/ui/containers/SessionController.test.js.map +1 -1
  74. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  75. package/dist/src/ui/hooks/useGeminiStream.integration.test.js +1 -3
  76. package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -1
  77. package/dist/src/ui/hooks/useGeminiStream.js +1 -12
  78. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  79. package/dist/src/ui/reducers/sessionReducer.d.ts +0 -4
  80. package/dist/src/ui/reducers/sessionReducer.js +0 -2
  81. package/dist/src/ui/reducers/sessionReducer.js.map +1 -1
  82. package/dist/src/zed-integration/zedIntegration.js +8 -4
  83. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/package.json +3 -3
  86. package/dist/src/ui/components/ProQuotaDialog.d.ts +0 -13
  87. package/dist/src/ui/components/ProQuotaDialog.js +0 -22
  88. package/dist/src/ui/components/ProQuotaDialog.js.map +0 -1
  89. package/dist/src/ui/components/ProQuotaDialog.test.js +0 -57
  90. 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 { GeminiOAuthProvider } from '../auth/gemini-oauth-provider.js';
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
- // Register OAuth providers with TokenStore for persistence
100
- const geminiOAuthProvider = new GeminiOAuthProvider(tokenStore);
101
- const qwenOAuthProvider = new QwenOAuthProvider(tokenStore);
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
- // Always register GeminiProvider with OAuth manager
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":"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"}
1
+ {"version":3,"file":"providerManagerInstance.js","sourceRoot":"","sources":["../../../src/providers/providerManagerInstance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -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":"AAAA;;;;GAIG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,eAAe,EACb,gEAAgE;IAClE,uBAAuB,EACrB,kFAAkF;IACpF,UAAU,EAAE,2BAA2B;IACvC,aAAa,EAAE,uCAAuC;IACtD,aAAa,EAAE,oBAAoB;IACnC,gBAAgB,EAAE,oCAAoC;IACtD,gBAAgB,EACd,kEAAkE;IACpE,SAAS,EACP,4EAA4E;IAC9E,mBAAmB,EACjB,qFAAqF;IACvF,gBAAgB,EACd,uEAAuE;IACzE,kBAAkB,EAChB,kFAAkF;IACpF,gBAAgB,EACd,6EAA6E;IAC/E,uBAAuB,EACrB,uEAAuE;IACzE,wBAAwB,EAAE,gDAAgD;IAC1E,2BAA2B,EACzB,2EAA2E;IAC7E,6BAA6B,EAC3B,+DAA+D;IACjE,mBAAmB,EACjB,oEAAoE;IACtE,WAAW,EAAE,gDAAgD;IAC7D,OAAO,EACL,8EAA8E;IAChF,SAAS,EACP,oFAAoF;IACtF,iBAAiB,EACf,6FAA6F;IAC/F,QAAQ,EACN,+FAA+F;CAClG,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAkB7D,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,QAAgB;IAEhB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,wBAAwB,GAAG,qBAAqB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACzF,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAqB,CAAC;QACvC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EACL,6EAA6E;aAChF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,WAAqB,CAAC;QACvC,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,IAAI,CAAC;YACb,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yDAAyD;aACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAqB,CAAC;QACvC,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,IAAI,CAAC;YACb,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EACL,yEAAyE;aAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,kBAAkB,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;QAC3D,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,GAAG,GAAG,mCAAmC;aACnD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IACE,GAAG,KAAK,uBAAuB;QAC/B,GAAG,KAAK,wBAAwB;QAChC,GAAG,KAAK,6BAA6B;QACrC,GAAG,KAAK,mBAAmB,EAC3B,CAAC;QACD,MAAM,QAAQ,GAAG,WAAqB,CAAC;QACvC,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,IAAI,CAAC;YACb,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC3B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,GAAG,GAAG,6BAA6B;aAC7C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,WAAqB,CAAC;QACvC,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC3B,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,EAClC,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,GAAG,GAAG,iDAAiD;aACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,2BAA2B,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAqB,CAAC,EAAE,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,GAAG,GAAG,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,MAAM,KAAK,GAAG,WAAqB,CAAC;QACpC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAqB,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,8BAA8B,WAAW,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACjG,CAAC;QACJ,CAAC;QACD,WAAW,GAAG,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;QAChC,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,oDAAoD;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QACvB,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2CAA2C;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,OAAO,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QACrD,CAAC;aAAM,IACL,OAAO,WAAW,KAAK,QAAQ;YAC/B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAC9C,CAAC;YACD,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC1C,CAAC;aAAM,IACL,OAAO,WAAW,KAAK,QAAQ;YAC/B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EACrD,CAAC;YACD,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;aAAM,IACL,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EACrD,CAAC;YACD,WAAW;gBACT,WAAW,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2BAA2B,WAAW,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,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,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;QACpC,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"}
@@ -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"}