@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.
- package/dist/package.json +4 -3
- package/dist/src/commands/configure/ConfigureUI.d.ts +11 -0
- package/dist/src/commands/configure/ConfigureUI.js +416 -0
- package/dist/src/commands/configure/ConfigureUI.js.map +1 -0
- package/dist/src/commands/configure/index.d.ts +7 -0
- package/dist/src/commands/configure/index.js +30 -0
- package/dist/src/commands/configure/index.js.map +1 -0
- package/dist/src/commands/configure.d.ts +7 -0
- package/dist/src/commands/configure.js +259 -0
- package/dist/src/commands/configure.js.map +1 -0
- package/dist/src/commands/configure.test.d.ts +6 -0
- package/dist/src/commands/configure.test.js +32 -0
- package/dist/src/commands/configure.test.js.map +1 -0
- package/dist/src/config/auth.d.ts +29 -0
- package/dist/src/config/auth.js +281 -1
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.js +5 -3
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/modelFetcher.d.ts +21 -0
- package/dist/src/config/modelFetcher.js +251 -0
- package/dist/src/config/modelFetcher.js.map +1 -0
- package/dist/src/config/settings.js +37 -0
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +275 -0
- package/dist/src/config/settingsSchema.js +275 -0
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +4 -1
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/nonInteractiveCli.js +149 -5
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/ui/App.js +1 -1
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.d.ts +3 -2
- package/dist/src/ui/components/AuthDialog.js +309 -61
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.d.ts +22 -0
- package/dist/src/ui/components/GenericProviderKeyPrompt.js +86 -0
- package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -0
- package/dist/src/ui/hooks/useGeminiStream.js +2 -0
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +286 -286
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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,
|
|
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 {
|
|
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 [
|
|
22
|
-
const [
|
|
23
|
-
const items =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
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
|
|
208
|
+
return provider.authType === defaultAuthType;
|
|
36
209
|
}
|
|
37
210
|
if (process.env['GEMINI_API_KEY']) {
|
|
38
|
-
return
|
|
211
|
+
return provider.authType === AuthType.USE_GEMINI;
|
|
39
212
|
}
|
|
40
|
-
return
|
|
213
|
+
return provider.authType === AuthType.LOGIN_WITH_GOOGLE;
|
|
41
214
|
}));
|
|
42
|
-
const handleAuthSelect = (
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
56
|
-
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.error('Failed to update model in config:', error);
|
|
57
324
|
}
|
|
58
325
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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 (
|
|
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 (
|
|
105
|
-
return (_jsx(
|
|
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":";AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,QAAQ,
|
|
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) {
|