@blackbox_ai/blackbox-cli 0.0.6 → 0.0.9

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 (45) hide show
  1. package/dist/package.json +4 -3
  2. package/dist/src/commands/configure/ConfigureUI.d.ts +11 -0
  3. package/dist/src/commands/configure/ConfigureUI.js +416 -0
  4. package/dist/src/commands/configure/ConfigureUI.js.map +1 -0
  5. package/dist/src/commands/configure/index.d.ts +7 -0
  6. package/dist/src/commands/configure/index.js +30 -0
  7. package/dist/src/commands/configure/index.js.map +1 -0
  8. package/dist/src/commands/configure.d.ts +7 -0
  9. package/dist/src/commands/configure.js +259 -0
  10. package/dist/src/commands/configure.js.map +1 -0
  11. package/dist/src/commands/configure.test.d.ts +6 -0
  12. package/dist/src/commands/configure.test.js +32 -0
  13. package/dist/src/commands/configure.test.js.map +1 -0
  14. package/dist/src/config/auth.d.ts +29 -0
  15. package/dist/src/config/auth.js +281 -1
  16. package/dist/src/config/auth.js.map +1 -1
  17. package/dist/src/config/config.js +5 -3
  18. package/dist/src/config/config.js.map +1 -1
  19. package/dist/src/config/modelFetcher.d.ts +21 -0
  20. package/dist/src/config/modelFetcher.js +251 -0
  21. package/dist/src/config/modelFetcher.js.map +1 -0
  22. package/dist/src/config/settings.js +37 -0
  23. package/dist/src/config/settings.js.map +1 -1
  24. package/dist/src/config/settingsSchema.d.ts +275 -0
  25. package/dist/src/config/settingsSchema.js +275 -0
  26. package/dist/src/config/settingsSchema.js.map +1 -1
  27. package/dist/src/gemini.js +4 -1
  28. package/dist/src/gemini.js.map +1 -1
  29. package/dist/src/generated/git-commit.d.ts +2 -2
  30. package/dist/src/generated/git-commit.js +2 -2
  31. package/dist/src/nonInteractiveCli.js +149 -5
  32. package/dist/src/nonInteractiveCli.js.map +1 -1
  33. package/dist/src/ui/App.js +1 -1
  34. package/dist/src/ui/App.js.map +1 -1
  35. package/dist/src/ui/components/AuthDialog.d.ts +3 -2
  36. package/dist/src/ui/components/AuthDialog.js +309 -61
  37. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  38. package/dist/src/ui/components/GenericProviderKeyPrompt.d.ts +22 -0
  39. package/dist/src/ui/components/GenericProviderKeyPrompt.js +86 -0
  40. package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -0
  41. package/dist/src/ui/hooks/useGeminiStream.js +2 -0
  42. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  43. package/dist/src/zed-integration/schema.d.ts +286 -286
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +4 -3
@@ -4,12 +4,13 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type React from 'react';
7
- import { AuthType } from '@blackbox_ai/blackbox-cli-core';
7
+ import { AuthType, type Config } from '@blackbox_ai/blackbox-cli-core';
8
8
  import { type LoadedSettings, SettingScope } from '../../config/settings.js';
9
9
  interface AuthDialogProps {
10
10
  onSelect: (authMethod: AuthType | undefined, scope: SettingScope) => void;
11
11
  settings: LoadedSettings;
12
12
  initialErrorMessage?: string | null;
13
+ config?: Config;
13
14
  }
14
- export declare function AuthDialog({ onSelect, settings, initialErrorMessage, }: AuthDialogProps): React.JSX.Element;
15
+ export declare function AuthDialog({ onSelect, settings, initialErrorMessage, config, }: AuthDialogProps): React.JSX.Element;
15
16
  export {};
@@ -2,13 +2,179 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { AuthType } from '@blackbox_ai/blackbox-cli-core';
4
4
  import { Box, Text } from 'ink';
5
- import { setBlackboxApiKey, setBlackboxApiBaseUrl, setBlackboxApiModel, setOpenAIApiKey, setOpenAIBaseUrl, setOpenAIModel, validateAuthMethod, } from '../../config/auth.js';
5
+ import { setBlackboxApiKey, setBlackboxApiBaseUrl, setBlackboxApiModel, setOpenAIApiKey, setOpenAIBaseUrl, setOpenAIModel, setOpenRouterApiKey, setOpenRouterBaseUrl, setOpenRouterModel, setCustomApiKey, setCustomBaseUrl, setCustomModel, setAnthropicApiKey, setAnthropicBaseUrl, setAnthropicModel, setGoogleApiKey, setGoogleBaseUrl, setGoogleModel, setXaiApiKey, setXaiBaseUrl, setXaiModel, saveProviderCredentials, loadProviderCredentialsFromSettings, } from '../../config/auth.js';
6
6
  import { SettingScope } from '../../config/settings.js';
7
7
  import { Colors } from '../colors.js';
8
8
  import { useKeypress } from '../hooks/useKeypress.js';
9
- import { BlackboxKeyPrompt } from './BlackboxKeyPrompt.js';
10
- import { OpenAIKeyPrompt } from './OpenAIKeyPrompt.js';
9
+ import { GenericProviderKeyPrompt } from './GenericProviderKeyPrompt.js';
11
10
  import { RadioButtonSelect } from './shared/RadioButtonSelect.js';
11
+ const PROVIDERS = [
12
+ {
13
+ name: 'xai',
14
+ displayName: 'xAI',
15
+ authType: AuthType.USE_OPENAI,
16
+ defaultBaseUrl: 'https://api.x.ai/v1',
17
+ defaultModel: 'grok-code-fast-1',
18
+ envKeyName: 'XAI_API_KEY',
19
+ requiresBaseUrl: true,
20
+ apiKeyUrl: 'https://console.x.ai/',
21
+ availableModels: [
22
+ 'grok-code-fast-1',
23
+ 'grok-4-0709',
24
+ 'grok-3',
25
+ 'grok-3-fast',
26
+ 'grok-3-mini',
27
+ 'grok-3-mini-fast',
28
+ 'grok-2-vision-1212',
29
+ 'grok-2-image-1212',
30
+ 'grok-3-latest',
31
+ 'grok-3-fast-latest',
32
+ 'grok-3-mini-latest',
33
+ 'grok-3-mini-fast-latest',
34
+ 'grok-2-vision',
35
+ 'grok-2-vision-latest',
36
+ 'grok-2-image',
37
+ 'grok-2-image-latest',
38
+ 'grok-2',
39
+ 'grok-2-latest',
40
+ ],
41
+ },
42
+ {
43
+ name: 'google',
44
+ displayName: 'Google Gemini',
45
+ authType: AuthType.USE_OPENAI,
46
+ defaultBaseUrl: 'https://generativelanguage.googleapis.com',
47
+ defaultModel: 'gemini-2.5-flash',
48
+ envKeyName: 'GOOGLE_API_KEY',
49
+ requiresBaseUrl: true,
50
+ apiKeyUrl: 'https://aistudio.google.com/apikey',
51
+ availableModels: [
52
+ 'gemini-2.5-pro',
53
+ 'gemini-2.5-pro-preview-06-05',
54
+ 'gemini-2.5-pro-preview-05-06',
55
+ 'gemini-2.5-flash',
56
+ 'gemini-2.5-flash-preview-05-20',
57
+ 'gemini-2.5-flash-lite-preview-06-17',
58
+ 'gemini-2.0-flash',
59
+ 'gemini-2.0-flash-exp',
60
+ 'gemini-2.0-flash-lite',
61
+ 'gemini-1.5-flash',
62
+ 'gemini-1.5-flash-latest',
63
+ 'gemini-1.5-flash-002',
64
+ 'gemini-1.5-flash-8b',
65
+ 'gemini-1.5-flash-8b-latest',
66
+ 'gemini-1.5-pro',
67
+ 'gemini-1.5-pro-latest',
68
+ 'gemini-1.5-pro-002',
69
+ ],
70
+ },
71
+ {
72
+ name: 'anthropic',
73
+ displayName: 'Anthropic',
74
+ authType: AuthType.USE_OPENAI,
75
+ defaultBaseUrl: 'https://api.anthropic.com/v1',
76
+ defaultModel: 'claude-3-5-sonnet-latest',
77
+ envKeyName: 'ANTHROPIC_API_KEY',
78
+ requiresBaseUrl: true,
79
+ apiKeyUrl: 'https://console.anthropic.com/',
80
+ availableModels: [
81
+ 'claude-sonnet-4-latest',
82
+ 'claude-sonnet-4-20250514',
83
+ 'claude-opus-4-latest',
84
+ 'claude-opus-4-20250514',
85
+ 'claude-3-7-sonnet-latest',
86
+ 'claude-3-7-sonnet-20250219',
87
+ 'claude-3-5-sonnet-latest',
88
+ 'claude-3-5-sonnet-20241022',
89
+ 'claude-3-5-haiku-latest',
90
+ 'claude-3-5-haiku-20241022',
91
+ 'claude-3-opus-latest',
92
+ 'claude-3-opus-20240229',
93
+ 'claude-3-sonnet-20240229',
94
+ 'claude-3-haiku-20240307',
95
+ ],
96
+ },
97
+ {
98
+ name: 'blackbox',
99
+ displayName: 'BlackboxAI',
100
+ authType: AuthType.USE_BLACKBOX_API,
101
+ defaultBaseUrl: 'https://api.blackbox.ai/v1',
102
+ defaultModel: 'blackbox-ai',
103
+ envKeyName: 'BLACKBOX_API_KEY',
104
+ requiresBaseUrl: false,
105
+ apiKeyUrl: 'https://www.blackbox.ai/',
106
+ availableModels: [
107
+ 'blackboxai/anthropic/claude-3.5-sonnet',
108
+ 'blackboxai/anthropic/claude-3.7-sonnet',
109
+ 'blackboxai/anthropic/claude-sonnet-4',
110
+ 'blackboxai/anthropic/claude-sonnet-4.5',
111
+ 'blackboxai/anthropic/claude-opus-4',
112
+ 'blackboxai/deepseek/deepseek-chat',
113
+ 'blackboxai/deepseek/deepseek-chat:free',
114
+ 'blackboxai/google/gemini-2.5-flash',
115
+ 'blackboxai/google/gemini-2.5-pro',
116
+ 'blackboxai/mistralai/mistral-large',
117
+ 'blackboxai/openai/codex-mini',
118
+ 'blackboxai/openai/gpt-4.1',
119
+ 'blackboxai/openai/gpt-4.1-mini',
120
+ 'blackboxai/openai/gpt-4o',
121
+ 'blackboxai/openai/gpt-4o-mini',
122
+ 'blackboxai/openai/o4-mini',
123
+ 'blackboxai/openai/o3-mini',
124
+ ],
125
+ },
126
+ {
127
+ name: 'openai',
128
+ displayName: 'OpenAI',
129
+ authType: AuthType.USE_OPENAI,
130
+ defaultBaseUrl: 'https://api.openai.com/v1',
131
+ defaultModel: 'gpt-4o-mini',
132
+ envKeyName: 'OPENAI_API_KEY',
133
+ requiresBaseUrl: true,
134
+ apiKeyUrl: 'https://platform.openai.com/api-keys',
135
+ availableModels: [
136
+ 'gpt-4',
137
+ 'gpt-4-turbo',
138
+ 'gpt-4o',
139
+ 'gpt-4o-mini',
140
+ 'gpt-3.5-turbo',
141
+ 'o1',
142
+ 'o1-mini',
143
+ 'o1-preview',
144
+ ],
145
+ },
146
+ {
147
+ name: 'openrouter',
148
+ displayName: 'OpenRouter',
149
+ authType: AuthType.USE_OPENAI,
150
+ defaultBaseUrl: 'https://openrouter.ai/api/v1',
151
+ defaultModel: 'anthropic/claude-3.5-sonnet',
152
+ envKeyName: 'OPENROUTER_API_KEY',
153
+ requiresBaseUrl: true,
154
+ apiKeyUrl: 'https://openrouter.ai/keys',
155
+ availableModels: [
156
+ 'anthropic/claude-3.5-sonnet',
157
+ 'anthropic/claude-3.7-sonnet',
158
+ 'anthropic/claude-sonnet-4',
159
+ 'google/gemini-2.5-pro',
160
+ 'deepseek/deepseek-r1-0528',
161
+ 'openai/gpt-4o',
162
+ 'openai/gpt-4-turbo',
163
+ 'meta-llama/llama-3.3-70b-instruct',
164
+ ],
165
+ },
166
+ {
167
+ name: 'custom',
168
+ displayName: 'Custom Provider',
169
+ authType: AuthType.USE_OPENAI,
170
+ defaultBaseUrl: '',
171
+ defaultModel: '',
172
+ envKeyName: 'CUSTOM_API_KEY',
173
+ requiresBaseUrl: true,
174
+ apiKeyUrl: '',
175
+ availableModels: [],
176
+ },
177
+ ];
12
178
  function parseDefaultAuthType(defaultAuthType) {
13
179
  if (defaultAuthType &&
14
180
  Object.values(AuthType).includes(defaultAuthType)) {
@@ -16,75 +182,160 @@ function parseDefaultAuthType(defaultAuthType) {
16
182
  }
17
183
  return null;
18
184
  }
19
- export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
185
+ export function AuthDialog({ onSelect, settings, initialErrorMessage, config, }) {
20
186
  const [errorMessage, setErrorMessage] = useState(initialErrorMessage || null);
21
- const [showOpenAIKeyPrompt, setShowOpenAIKeyPrompt] = useState(false);
22
- const [showBlackboxKeyPrompt, setShowBlackboxKeyPrompt] = useState(false);
23
- const items = [
24
- { label: 'BlackboxAI', value: AuthType.USE_BLACKBOX_API },
25
- { label: 'OpenAI', value: AuthType.USE_OPENAI },
26
- // Temporarily disabled
27
- // { label: 'Blackbox OAuth', value: AuthType.BLACKBOX_OAUTH },
28
- ];
187
+ const [showProviderKeyPrompt, setShowProviderKeyPrompt] = useState(false);
188
+ const [selectedProvider, setSelectedProvider] = useState(null);
189
+ const items = PROVIDERS.map((provider) => ({
190
+ label: provider.displayName,
191
+ value: provider.name,
192
+ }));
29
193
  const initialAuthIndex = Math.max(0, items.findIndex((item) => {
194
+ const provider = PROVIDERS.find((p) => p.name === item.value);
195
+ if (!provider)
196
+ return false;
197
+ // Check if this provider matches the selected provider in settings
198
+ const selectedProviderName = settings.merged.security?.auth?.selectedProvider;
199
+ if (selectedProviderName && selectedProviderName === provider.name) {
200
+ return true;
201
+ }
202
+ // Fallback to checking selectedType for backward compatibility
30
203
  if (settings.merged.security?.auth?.selectedType) {
31
- return item.value === settings.merged.security?.auth?.selectedType;
204
+ return provider.authType === settings.merged.security?.auth?.selectedType;
32
205
  }
33
206
  const defaultAuthType = parseDefaultAuthType(process.env['BLACKBOX_DEFAULT_AUTH_TYPE']);
34
207
  if (defaultAuthType) {
35
- return item.value === defaultAuthType;
208
+ return provider.authType === defaultAuthType;
36
209
  }
37
210
  if (process.env['GEMINI_API_KEY']) {
38
- return item.value === AuthType.USE_GEMINI;
211
+ return provider.authType === AuthType.USE_GEMINI;
39
212
  }
40
- return item.value === AuthType.LOGIN_WITH_GOOGLE;
213
+ return provider.authType === AuthType.LOGIN_WITH_GOOGLE;
41
214
  }));
42
- const handleAuthSelect = (authMethod) => {
43
- const error = validateAuthMethod(authMethod);
44
- if (error) {
45
- if (authMethod === AuthType.USE_OPENAI &&
46
- !process.env['OPENAI_API_KEY']) {
47
- setShowOpenAIKeyPrompt(true);
48
- setErrorMessage(null);
49
- }
50
- else if (authMethod === AuthType.USE_BLACKBOX_API &&
51
- !process.env['BLACKBOX_API_KEY']) {
52
- setShowBlackboxKeyPrompt(true);
53
- setErrorMessage(null);
215
+ const handleAuthSelect = (providerName) => {
216
+ const provider = PROVIDERS.find((p) => p.name === providerName);
217
+ if (!provider)
218
+ return;
219
+ // Always show the configuration prompt to allow users to change API key or model
220
+ // even if the provider is already configured
221
+ setSelectedProvider(provider);
222
+ setShowProviderKeyPrompt(true);
223
+ setErrorMessage(null);
224
+ };
225
+ const handleProviderKeySubmit = async (apiKey, baseUrl, model) => {
226
+ if (!selectedProvider)
227
+ return;
228
+ // Set environment variables based on provider
229
+ if (selectedProvider.name === 'openrouter') {
230
+ setOpenRouterApiKey(apiKey);
231
+ setOpenRouterBaseUrl(baseUrl);
232
+ setOpenRouterModel(model);
233
+ saveProviderCredentials(settings, 'openrouter', {
234
+ apiKey,
235
+ baseUrl,
236
+ model,
237
+ });
238
+ }
239
+ else if (selectedProvider.name === 'openai') {
240
+ setOpenAIApiKey(apiKey);
241
+ setOpenAIBaseUrl(baseUrl);
242
+ setOpenAIModel(model);
243
+ saveProviderCredentials(settings, 'openai', {
244
+ apiKey,
245
+ baseUrl,
246
+ model,
247
+ });
248
+ }
249
+ else if (selectedProvider.name === 'blackbox') {
250
+ setBlackboxApiKey(apiKey);
251
+ setBlackboxApiBaseUrl(baseUrl);
252
+ setBlackboxApiModel(model);
253
+ saveProviderCredentials(settings, 'blackbox', {
254
+ apiKey,
255
+ baseUrl,
256
+ model,
257
+ });
258
+ }
259
+ else if (selectedProvider.name === 'xai') {
260
+ setXaiApiKey(apiKey);
261
+ setXaiBaseUrl(baseUrl);
262
+ setXaiModel(model);
263
+ saveProviderCredentials(settings, 'xai', {
264
+ apiKey,
265
+ baseUrl,
266
+ model,
267
+ });
268
+ }
269
+ else if (selectedProvider.name === 'google') {
270
+ setGoogleApiKey(apiKey);
271
+ setGoogleBaseUrl(baseUrl);
272
+ setGoogleModel(model);
273
+ saveProviderCredentials(settings, 'google', {
274
+ apiKey,
275
+ baseUrl,
276
+ model,
277
+ });
278
+ }
279
+ else if (selectedProvider.name === 'anthropic') {
280
+ setAnthropicApiKey(apiKey);
281
+ setAnthropicBaseUrl(baseUrl);
282
+ setAnthropicModel(model);
283
+ saveProviderCredentials(settings, 'anthropic', {
284
+ apiKey,
285
+ baseUrl,
286
+ model,
287
+ });
288
+ }
289
+ else if (selectedProvider.name === 'custom') {
290
+ setCustomApiKey(apiKey);
291
+ setCustomBaseUrl(baseUrl);
292
+ setCustomModel(model);
293
+ saveProviderCredentials(settings, 'custom', {
294
+ apiKey,
295
+ baseUrl,
296
+ model,
297
+ });
298
+ }
299
+ // Save provider selection and model
300
+ settings.setValue(SettingScope.User, 'security.auth.selectedType', selectedProvider.authType);
301
+ settings.setValue(SettingScope.User, 'security.auth.selectedProvider', selectedProvider.name);
302
+ settings.setValue(SettingScope.User, 'model.name', model);
303
+ // Clear the OPENAI_MODEL environment variable to ensure the new provider's model is used
304
+ // This is important because loadProviderCredentialsFromSettings only sets OPENAI_MODEL
305
+ // if it's not already set, so we need to clear it first
306
+ delete process.env['OPENAI_MODEL'];
307
+ delete process.env['OPENAI_BASE_URL'];
308
+ delete process.env['OPENAI_API_KEY'];
309
+ // Reload credentials from settings to ensure environment variables are set correctly
310
+ // This is important because some providers (xAI, Google, Anthropic, etc.) map their
311
+ // specific API keys to OPENAI_API_KEY for compatibility
312
+ loadProviderCredentialsFromSettings(settings);
313
+ // Update the config model if config is provided
314
+ // This ensures the model is synced immediately BEFORE refreshAuth is called
315
+ if (config && typeof config.setModel === 'function') {
316
+ try {
317
+ await config.setModel(model, {
318
+ reason: 'manual',
319
+ context: 'auth_dialog_provider_change',
320
+ });
54
321
  }
55
- else {
56
- setErrorMessage(error);
322
+ catch (error) {
323
+ console.error('Failed to update model in config:', error);
57
324
  }
58
325
  }
59
- else {
60
- setErrorMessage(null);
61
- onSelect(authMethod, SettingScope.User);
62
- }
326
+ // Clear any previous auth error since we just set new credentials
327
+ setErrorMessage(null);
328
+ setShowProviderKeyPrompt(false);
329
+ setSelectedProvider(null);
330
+ onSelect(selectedProvider.authType, SettingScope.User);
63
331
  };
64
- const handleOpenAIKeySubmit = (apiKey, baseUrl, model) => {
65
- setOpenAIApiKey(apiKey);
66
- setOpenAIBaseUrl(baseUrl);
67
- setOpenAIModel(model);
68
- setShowOpenAIKeyPrompt(false);
69
- onSelect(AuthType.USE_OPENAI, SettingScope.User);
70
- };
71
- const handleOpenAIKeyCancel = () => {
72
- setShowOpenAIKeyPrompt(false);
73
- setErrorMessage('OpenAI API key is required to use OpenAI authentication.');
74
- };
75
- const handleBlackboxKeySubmit = (apiKey, baseUrl, model) => {
76
- setBlackboxApiKey(apiKey);
77
- setBlackboxApiBaseUrl(baseUrl);
78
- setBlackboxApiModel(model);
79
- setShowBlackboxKeyPrompt(false);
80
- onSelect(AuthType.USE_BLACKBOX_API, SettingScope.User);
81
- };
82
- const handleBlackboxKeyCancel = () => {
83
- setShowBlackboxKeyPrompt(false);
84
- setErrorMessage('BlackboxAI API key is required to use BlackboxAI authentication.');
332
+ const handleProviderKeyCancel = () => {
333
+ setShowProviderKeyPrompt(false);
334
+ setSelectedProvider(null);
335
+ setErrorMessage(`${selectedProvider?.displayName || 'Provider'} API key is required to use ${selectedProvider?.displayName || 'this provider'} authentication.`);
85
336
  };
86
337
  useKeypress((key) => {
87
- if (showOpenAIKeyPrompt || showBlackboxKeyPrompt) {
338
+ if (showProviderKeyPrompt) {
88
339
  return;
89
340
  }
90
341
  if (key.name === 'escape') {
@@ -101,11 +352,8 @@ export function AuthDialog({ onSelect, settings, initialErrorMessage, }) {
101
352
  onSelect(undefined, SettingScope.User);
102
353
  }
103
354
  }, { isActive: true });
104
- if (showOpenAIKeyPrompt) {
105
- return (_jsx(OpenAIKeyPrompt, { onSubmit: handleOpenAIKeySubmit, onCancel: handleOpenAIKeyCancel }));
106
- }
107
- if (showBlackboxKeyPrompt) {
108
- return (_jsx(BlackboxKeyPrompt, { onSubmit: handleBlackboxKeySubmit, onCancel: handleBlackboxKeyCancel }));
355
+ if (showProviderKeyPrompt && selectedProvider) {
356
+ return (_jsx(GenericProviderKeyPrompt, { provider: selectedProvider, onSubmit: handleProviderKeySubmit, onCancel: handleProviderKeyCancel }));
109
357
  }
110
358
  return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, width: "100%", children: [_jsx(Text, { bold: true, children: "Get started" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "How would you like to authenticate for this project?" }) }), _jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: items, initialIndex: initialAuthIndex, onSelect: handleAuthSelect }) }), errorMessage && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentRed, children: errorMessage }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentPurple, children: "(Use Enter to Set Auth)" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Terms of Services and Privacy Notice for BlackboxAI" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentBlue, children: 'https://www.blackbox.ai/terms' }) })] }));
111
359
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/AuthDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type React from 'react';
7
+ interface ProviderConfig {
8
+ name: string;
9
+ displayName: string;
10
+ defaultBaseUrl: string;
11
+ defaultModel: string;
12
+ requiresBaseUrl: boolean;
13
+ apiKeyUrl: string;
14
+ availableModels?: string[];
15
+ }
16
+ interface GenericProviderKeyPromptProps {
17
+ provider: ProviderConfig;
18
+ onSubmit: (apiKey: string, baseUrl: string, model: string) => void;
19
+ onCancel: () => void;
20
+ }
21
+ export declare function GenericProviderKeyPrompt({ provider, onSubmit, onCancel, }: GenericProviderKeyPromptProps): React.JSX.Element | null;
22
+ export {};
@@ -0,0 +1,86 @@
1
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import { Colors } from '../colors.js';
5
+ import { TextInput } from './shared/TextInput.js';
6
+ import { RadioButtonSelect } from './shared/RadioButtonSelect.js';
7
+ import { fetchModelsForProvider } from '../../config/modelFetcher.js';
8
+ export function GenericProviderKeyPrompt({ provider, onSubmit, onCancel, }) {
9
+ const [apiKey, setApiKey] = useState('');
10
+ const [baseUrl] = useState(provider.defaultBaseUrl);
11
+ const [modelSearch, setModelSearch] = useState('');
12
+ const [currentStep, setCurrentStep] = useState('apiKey');
13
+ const [isFetchingModels, setIsFetchingModels] = useState(false);
14
+ const [fetchedModels, setFetchedModels] = useState([]);
15
+ // Fetch models when moving to model selection step
16
+ useEffect(() => {
17
+ if (currentStep === 'model' && apiKey && baseUrl) {
18
+ const providerName = provider.name;
19
+ console.log(`[${providerName}] Fetching models from API...`);
20
+ setIsFetchingModels(true);
21
+ setFetchedModels([]); // Clear previous models
22
+ fetchModelsForProvider(providerName, apiKey, baseUrl)
23
+ .then((models) => {
24
+ console.log(`[${providerName}] Fetched ${models.length} models`);
25
+ if (models.length > 0) {
26
+ setFetchedModels(models);
27
+ console.log(`[${providerName}] First 5 models:`, models.slice(0, 5));
28
+ }
29
+ else {
30
+ console.log(`[${providerName}] No models fetched, using defaults`);
31
+ }
32
+ })
33
+ .catch((error) => {
34
+ console.error(`[${providerName}] Error fetching models:`, error);
35
+ })
36
+ .finally(() => {
37
+ setIsFetchingModels(false);
38
+ });
39
+ }
40
+ }, [currentStep, provider.name, apiKey, baseUrl]);
41
+ const handleApiKeySubmit = () => {
42
+ if (!apiKey.trim()) {
43
+ return; // Don't proceed without API key
44
+ }
45
+ // Always skip base URL step and use default
46
+ setCurrentStep('model');
47
+ };
48
+ const handleModelSelect = (selectedModel) => {
49
+ onSubmit(apiKey.trim(), baseUrl.trim(), selectedModel);
50
+ };
51
+ const handleModelSearchSubmit = () => {
52
+ // Only submit if there are no filtered results (custom model entry)
53
+ if (filteredModels.length > 0) {
54
+ return; // Don't submit, let RadioButtonSelect handle it
55
+ }
56
+ if (!modelSearch.trim()) {
57
+ return; // Don't submit without a model
58
+ }
59
+ onSubmit(apiKey.trim(), baseUrl.trim(), modelSearch);
60
+ };
61
+ // Use fetched models if available, otherwise use default list
62
+ const availableModels = fetchedModels.length > 0
63
+ ? fetchedModels
64
+ : (provider.availableModels || []);
65
+ // Filter models based on search
66
+ const filteredModels = availableModels.filter((m) => m.toLowerCase().includes(modelSearch.toLowerCase()));
67
+ useInput((input, key) => {
68
+ if (key.escape) {
69
+ onCancel();
70
+ return;
71
+ }
72
+ });
73
+ if (currentStep === 'apiKey') {
74
+ return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.AccentBlue, flexDirection: "column", padding: 1, width: "100%", children: [_jsxs(Text, { bold: true, color: Colors.AccentBlue, children: [provider.displayName, " Configuration Required"] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { children: ["Please enter your ", provider.displayName, " API key.", provider.apiKeyUrl && (_jsxs(_Fragment, { children: [' ', "You can get an API key from", ' ', _jsx(Text, { color: Colors.AccentBlue, children: provider.apiKeyUrl })] }))] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Enter your API key:" }) }), _jsx(TextInput, { value: apiKey, onChange: setApiKey, onSubmit: handleApiKeySubmit, placeholder: "Enter API key...", isActive: true }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to continue, Esc to cancel" }) })] }));
75
+ }
76
+ if (currentStep === 'model') {
77
+ return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.AccentBlue, flexDirection: "column", padding: 1, width: "100%", children: [_jsxs(Text, { bold: true, color: Colors.AccentBlue, children: [provider.displayName, " Model Selection"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: "Select a model or search for a custom one:" }) }), isFetchingModels && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentCyan, children: ["\u23F3 Fetching available models from ", provider.displayName, "..."] }) })), !isFetchingModels && fetchedModels.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2713 Loaded ", fetchedModels.length, " models from ", provider.displayName, " API"] }) })), !isFetchingModels && fetchedModels.length === 0 && availableModels.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\u26A0 Could not fetch models from API, using default list" }) })), _jsx(Box, { marginTop: 1, children: _jsx(TextInput, { value: modelSearch, onChange: setModelSearch, onSubmit: handleModelSearchSubmit, placeholder: "Search models or enter custom model name...", isActive: true }) }), filteredModels.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(RadioButtonSelect, { items: filteredModels.map((m) => ({
78
+ label: m,
79
+ value: m,
80
+ })), onSelect: handleModelSelect, isFocused: true, maxItemsToShow: 8, showScrollArrows: true }) })), modelSearch && filteredModels.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.Gray, children: ["No matching models. Press Enter to use ", modelSearch, " as custom model."] }) })), !modelSearch && availableModels.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.Gray, children: ["Enter a model name (default: ", provider.defaultModel || 'none', ")"] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: filteredModels.length > 0
81
+ ? 'Type to filter, use ↑↓ to navigate, Enter to select, Esc to cancel'
82
+ : 'Type model name and press Enter to use custom model, Esc to cancel' }) })] }));
83
+ }
84
+ return null;
85
+ }
86
+ //# sourceMappingURL=GenericProviderKeyPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericProviderKeyPrompt.js","sourceRoot":"","sources":["../../../../src/ui/components/GenericProviderKeyPrompt.tsx"],"names":[],"mappings":"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"}
@@ -314,6 +314,8 @@ export const useGeminiStream = (geminiClient, history, addItem, config, onDebugM
314
314
  [FinishReason.MALFORMED_FUNCTION_CALL]: 'Response stopped due to malformed function call.',
315
315
  [FinishReason.IMAGE_SAFETY]: 'Response stopped due to image safety violations.',
316
316
  [FinishReason.UNEXPECTED_TOOL_CALL]: 'Response stopped due to unexpected tool call.',
317
+ [FinishReason.IMAGE_PROHIBITED_CONTENT]: 'Response stopped due to prohibited image content.',
318
+ [FinishReason.NO_IMAGE]: 'Response stopped because no image was provided.',
317
319
  };
318
320
  const message = finishReasonMessages[finishReason];
319
321
  if (message) {