@blackbox_ai/blackbox-cli 0.0.7 → 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
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blackbox_ai/blackbox-cli",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "description": "Blackbox Code",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,8 +28,8 @@
28
28
  "sandboxImageUri": "ghcr.io/blackbox_ai/blackbox-cli:0.0.1"
29
29
  },
30
30
  "dependencies": {
31
- "@blackbox_ai/blackbox-cli-core": "0.0.7",
32
- "@google/genai": "1.9.0",
31
+ "@blackbox_ai/blackbox-cli-core": "0.0.9",
32
+ "@google/genai": "^1.26.0",
33
33
  "@iarna/toml": "^2.2.5",
34
34
  "@modelcontextprotocol/sdk": "^1.15.1",
35
35
  "@types/update-notifier": "^6.0.8",
@@ -75,6 +75,7 @@
75
75
  "@types/semver": "^7.7.0",
76
76
  "@types/shell-quote": "^1.7.5",
77
77
  "@types/yargs": "^17.0.32",
78
+ "google-auth-library": "^10.4.1",
78
79
  "ink-testing-library": "^4.0.0",
79
80
  "jsdom": "^26.1.0",
80
81
  "pretty-format": "^30.0.2",
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type React from 'react';
7
+ interface ConfigureUIProps {
8
+ onComplete: () => void;
9
+ }
10
+ export declare function ConfigureUI({ onComplete }: ConfigureUIProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,416 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text, useApp } from 'ink';
4
+ import { AuthType } from '@blackbox_ai/blackbox-cli-core';
5
+ import { Colors } from '../../ui/colors.js';
6
+ import { RadioButtonSelect } from '../../ui/components/shared/RadioButtonSelect.js';
7
+ import { TextInput } from '../../ui/components/shared/TextInput.js';
8
+ import { setBlackboxApiKey, setBlackboxApiBaseUrl, setBlackboxApiModel, setOpenAIApiKey, setOpenAIBaseUrl, setOpenAIModel, setOpenRouterApiKey, setOpenRouterBaseUrl, setOpenRouterModel, setCustomApiKey, setCustomBaseUrl, setCustomModel, setAnthropicApiKey, setAnthropicBaseUrl, setAnthropicModel, setGoogleApiKey, setGoogleBaseUrl, setGoogleModel, setXaiApiKey, setXaiBaseUrl, setXaiModel, saveProviderCredentials, } from '../../config/auth.js';
9
+ import { loadSettings, SettingScope } from '../../config/settings.js';
10
+ import { fetchModelsForProvider } from '../../config/modelFetcher.js';
11
+ const PROVIDERS = [
12
+ {
13
+ name: 'xai',
14
+ displayName: 'xAI',
15
+ authType: AuthType.USE_OPENAI, // xAI uses OpenAI-compatible API
16
+ requiresApiKey: true,
17
+ defaultBaseUrl: 'https://api.x.ai/v1',
18
+ defaultModel: 'grok-code-fast-1',
19
+ envKeyName: 'XAI_API_KEY',
20
+ envBaseUrlName: 'XAI_HOST',
21
+ envModelName: 'XAI_MODEL',
22
+ availableModels: [
23
+ 'grok-code-fast-1',
24
+ 'grok-4-0709',
25
+ 'grok-3',
26
+ 'grok-3-fast',
27
+ 'grok-3-mini',
28
+ 'grok-3-mini-fast',
29
+ 'grok-2-vision-1212',
30
+ 'grok-2-image-1212',
31
+ 'grok-3-latest',
32
+ 'grok-3-fast-latest',
33
+ 'grok-3-mini-latest',
34
+ 'grok-3-mini-fast-latest',
35
+ 'grok-2-vision',
36
+ 'grok-2-vision-latest',
37
+ 'grok-2-image',
38
+ 'grok-2-image-latest',
39
+ 'grok-2',
40
+ 'grok-2-latest',
41
+ ],
42
+ },
43
+ {
44
+ name: 'google',
45
+ displayName: 'Google Gemini',
46
+ authType: AuthType.USE_OPENAI, // Google uses OpenAI-compatible API
47
+ requiresApiKey: true,
48
+ defaultBaseUrl: 'https://generativelanguage.googleapis.com',
49
+ defaultModel: 'gemini-2.5-flash',
50
+ envKeyName: 'GOOGLE_API_KEY',
51
+ envBaseUrlName: 'GOOGLE_HOST',
52
+ envModelName: 'GOOGLE_MODEL',
53
+ availableModels: [
54
+ 'gemini-2.5-pro',
55
+ 'gemini-2.5-pro-preview-06-05',
56
+ 'gemini-2.5-pro-preview-05-06',
57
+ 'gemini-2.5-flash',
58
+ 'gemini-2.5-flash-preview-05-20',
59
+ 'gemini-2.5-flash-lite-preview-06-17',
60
+ 'gemini-2.0-flash',
61
+ 'gemini-2.0-flash-exp',
62
+ 'gemini-2.0-flash-lite',
63
+ 'gemini-1.5-flash',
64
+ 'gemini-1.5-flash-latest',
65
+ 'gemini-1.5-flash-002',
66
+ 'gemini-1.5-flash-8b',
67
+ 'gemini-1.5-flash-8b-latest',
68
+ 'gemini-1.5-pro',
69
+ 'gemini-1.5-pro-latest',
70
+ 'gemini-1.5-pro-002',
71
+ ],
72
+ },
73
+ {
74
+ name: 'anthropic',
75
+ displayName: 'Anthropic',
76
+ authType: AuthType.USE_OPENAI, // Anthropic uses OpenAI-compatible API
77
+ requiresApiKey: true,
78
+ defaultBaseUrl: 'https://api.anthropic.com/v1',
79
+ defaultModel: 'claude-3-5-sonnet-latest',
80
+ envKeyName: 'ANTHROPIC_API_KEY',
81
+ envBaseUrlName: 'ANTHROPIC_BASE_URL',
82
+ envModelName: 'ANTHROPIC_MODEL',
83
+ availableModels: [
84
+ 'claude-sonnet-4-latest',
85
+ 'claude-sonnet-4-20250514',
86
+ 'claude-opus-4-latest',
87
+ 'claude-opus-4-20250514',
88
+ 'claude-3-7-sonnet-latest',
89
+ 'claude-3-7-sonnet-20250219',
90
+ 'claude-3-5-sonnet-latest',
91
+ 'claude-3-5-sonnet-20241022',
92
+ 'claude-3-5-haiku-latest',
93
+ 'claude-3-5-haiku-20241022',
94
+ 'claude-3-opus-latest',
95
+ 'claude-3-opus-20240229',
96
+ 'claude-3-sonnet-20240229',
97
+ 'claude-3-haiku-20240307',
98
+ ],
99
+ },
100
+ {
101
+ name: 'blackbox',
102
+ displayName: 'BlackboxAI',
103
+ authType: AuthType.USE_BLACKBOX_API,
104
+ requiresApiKey: true,
105
+ defaultBaseUrl: 'https://api.blackbox.ai/v1',
106
+ defaultModel: 'blackbox-ai',
107
+ envKeyName: 'BLACKBOX_API_KEY',
108
+ envBaseUrlName: 'BLACKBOX_API_BASE_URL',
109
+ envModelName: 'BLACKBOX_API_MODEL',
110
+ availableModels: [
111
+ 'blackboxai/anthropic/claude-3.5-sonnet',
112
+ 'blackboxai/anthropic/claude-3.7-sonnet',
113
+ 'blackboxai/anthropic/claude-sonnet-4',
114
+ 'blackboxai/anthropic/claude-sonnet-4.5',
115
+ 'blackboxai/anthropic/claude-opus-4',
116
+ 'blackboxai/deepseek/deepseek-chat',
117
+ 'blackboxai/deepseek/deepseek-chat:free',
118
+ 'blackboxai/google/gemini-2.5-flash',
119
+ 'blackboxai/google/gemini-2.5-pro',
120
+ 'blackboxai/mistralai/mistral-large',
121
+ 'blackboxai/openai/codex-mini',
122
+ 'blackboxai/openai/gpt-4.1',
123
+ 'blackboxai/openai/gpt-4.1-mini',
124
+ 'blackboxai/openai/gpt-4o',
125
+ 'blackboxai/openai/gpt-4o-mini',
126
+ 'blackboxai/openai/o4-mini',
127
+ 'blackboxai/openai/o3-mini'
128
+ ],
129
+ },
130
+ {
131
+ name: 'openai',
132
+ displayName: 'OpenAI',
133
+ authType: AuthType.USE_OPENAI,
134
+ requiresApiKey: true,
135
+ defaultBaseUrl: 'https://api.openai.com/v1',
136
+ defaultModel: 'gpt-4',
137
+ envKeyName: 'OPENAI_API_KEY',
138
+ envBaseUrlName: 'OPENAI_BASE_URL',
139
+ envModelName: 'OPENAI_MODEL',
140
+ availableModels: [
141
+ 'gpt-4',
142
+ 'gpt-4-turbo',
143
+ 'gpt-4o',
144
+ 'gpt-4o-mini',
145
+ 'gpt-3.5-turbo',
146
+ 'o1',
147
+ 'o1-mini',
148
+ 'o1-preview',
149
+ ],
150
+ },
151
+ {
152
+ name: 'openrouter',
153
+ displayName: 'OpenRouter',
154
+ authType: AuthType.USE_OPENAI, // OpenRouter uses OpenAI-compatible API
155
+ requiresApiKey: true,
156
+ defaultBaseUrl: 'https://openrouter.ai/api/v1',
157
+ defaultModel: 'anthropic/claude-3.5-sonnet',
158
+ envKeyName: 'OPENROUTER_API_KEY',
159
+ envBaseUrlName: 'OPENROUTER_BASE_URL',
160
+ envModelName: 'OPENROUTER_MODEL',
161
+ availableModels: [
162
+ 'anthropic/claude-3.5-sonnet',
163
+ 'anthropic/claude-3.7-sonnet',
164
+ 'anthropic/claude-sonnet-4',
165
+ 'google/gemini-2.5-pro',
166
+ 'deepseek/deepseek-r1-0528',
167
+ 'openai/gpt-4o',
168
+ 'openai/gpt-4-turbo',
169
+ 'meta-llama/llama-3.3-70b-instruct',
170
+ ],
171
+ },
172
+ {
173
+ name: 'custom',
174
+ displayName: 'Custom Provider',
175
+ authType: AuthType.USE_OPENAI, // Custom provider uses OpenAI-compatible API
176
+ requiresApiKey: true,
177
+ defaultBaseUrl: '',
178
+ defaultModel: '',
179
+ envKeyName: 'CUSTOM_API_KEY',
180
+ envBaseUrlName: 'CUSTOM_BASE_URL',
181
+ envModelName: 'CUSTOM_MODEL',
182
+ availableModels: [],
183
+ },
184
+ ];
185
+ export function ConfigureUI({ onComplete }) {
186
+ const { exit } = useApp();
187
+ const [step, setStep] = useState('provider');
188
+ const [selectedProvider, setSelectedProvider] = useState(null);
189
+ const [apiKey, setApiKey] = useState('');
190
+ const [baseUrl, setBaseUrl] = useState('');
191
+ const [model, setModel] = useState('');
192
+ const [modelSearch, setModelSearch] = useState('');
193
+ const [error, setError] = useState(null);
194
+ const [isFetchingModels, setIsFetchingModels] = useState(false);
195
+ const [fetchedModels, setFetchedModels] = useState([]);
196
+ // Check for existing environment variables when provider is selected
197
+ useEffect(() => {
198
+ if (selectedProvider) {
199
+ const existingApiKey = process.env[selectedProvider.envKeyName];
200
+ const existingBaseUrl = process.env[selectedProvider.envBaseUrlName];
201
+ const existingModel = process.env[selectedProvider.envModelName];
202
+ if (existingApiKey) {
203
+ setApiKey(existingApiKey);
204
+ }
205
+ if (existingBaseUrl) {
206
+ setBaseUrl(existingBaseUrl);
207
+ }
208
+ else {
209
+ setBaseUrl(selectedProvider.defaultBaseUrl);
210
+ }
211
+ if (existingModel) {
212
+ setModel(existingModel);
213
+ }
214
+ else {
215
+ setModel(selectedProvider.defaultModel);
216
+ }
217
+ }
218
+ }, [selectedProvider]);
219
+ // Fetch models when moving to model selection step
220
+ useEffect(() => {
221
+ if (step === 'model' && selectedProvider && apiKey && baseUrl) {
222
+ const providerName = selectedProvider.name;
223
+ console.log(`[${providerName}] Fetching models from API...`);
224
+ setIsFetchingModels(true);
225
+ setFetchedModels([]); // Clear previous models
226
+ fetchModelsForProvider(providerName, apiKey, baseUrl)
227
+ .then((models) => {
228
+ console.log(`[${providerName}] Fetched ${models.length} models`);
229
+ if (models.length > 0) {
230
+ setFetchedModels(models);
231
+ console.log(`[${providerName}] First 5 models:`, models.slice(0, 5));
232
+ }
233
+ else {
234
+ console.log(`[${providerName}] No models fetched, using defaults`);
235
+ }
236
+ })
237
+ .catch((error) => {
238
+ console.error(`[${providerName}] Error fetching models:`, error);
239
+ })
240
+ .finally(() => {
241
+ setIsFetchingModels(false);
242
+ });
243
+ }
244
+ }, [step, selectedProvider, apiKey, baseUrl]);
245
+ const handleProviderSelect = (providerName) => {
246
+ const provider = PROVIDERS.find((p) => p.name === providerName);
247
+ if (provider) {
248
+ setSelectedProvider(provider);
249
+ setStep('apiKey');
250
+ }
251
+ };
252
+ const handleApiKeySubmit = () => {
253
+ if (!apiKey.trim()) {
254
+ setError('API key is required');
255
+ return;
256
+ }
257
+ setError(null);
258
+ // Skip baseUrl step for non-custom providers (use default)
259
+ if (selectedProvider?.name === 'custom') {
260
+ setStep('baseUrl');
261
+ }
262
+ else {
263
+ setStep('model');
264
+ }
265
+ };
266
+ const handleBaseUrlSubmit = () => {
267
+ if (!baseUrl.trim()) {
268
+ setError('Base URL is required');
269
+ return;
270
+ }
271
+ setError(null);
272
+ setStep('model');
273
+ };
274
+ const handleModelSelect = (selectedModel) => {
275
+ setModel(selectedModel);
276
+ setStep('confirm');
277
+ };
278
+ // Filter models based on search
279
+ // Use fetched models if available, otherwise use default list
280
+ const availableModels = selectedProvider
281
+ ? fetchedModels.length > 0
282
+ ? fetchedModels
283
+ : selectedProvider.availableModels
284
+ : [];
285
+ const filteredModels = availableModels.filter((m) => m.toLowerCase().includes(modelSearch.toLowerCase()));
286
+ const handleModelSearchSubmit = () => {
287
+ // Only submit if there are no filtered results (custom model entry)
288
+ // If there are filtered results, the RadioButtonSelect should handle selection
289
+ if (filteredModels.length > 0) {
290
+ return; // Don't submit, let RadioButtonSelect handle it
291
+ }
292
+ if (!modelSearch.trim()) {
293
+ setError('Model name is required');
294
+ return;
295
+ }
296
+ setModel(modelSearch);
297
+ setStep('confirm');
298
+ };
299
+ const handleConfirm = async () => {
300
+ if (!selectedProvider)
301
+ return;
302
+ try {
303
+ // Load settings first
304
+ const settings = loadSettings(process.cwd());
305
+ // Apply configuration based on provider name (not authType, since OpenRouter uses USE_OPENAI)
306
+ if (selectedProvider.name === 'openrouter') {
307
+ // Set environment variables for immediate use
308
+ setOpenRouterApiKey(apiKey);
309
+ setOpenRouterBaseUrl(baseUrl);
310
+ setOpenRouterModel(model);
311
+ // Save to settings for persistence
312
+ saveProviderCredentials(settings, 'openrouter', {
313
+ apiKey,
314
+ baseUrl,
315
+ model,
316
+ });
317
+ }
318
+ else if (selectedProvider.name === 'openai') {
319
+ // Set environment variables for immediate use
320
+ setOpenAIApiKey(apiKey);
321
+ setOpenAIBaseUrl(baseUrl);
322
+ setOpenAIModel(model);
323
+ // Save to settings for persistence
324
+ saveProviderCredentials(settings, 'openai', {
325
+ apiKey,
326
+ baseUrl,
327
+ model,
328
+ });
329
+ }
330
+ else if (selectedProvider.name === 'blackbox') {
331
+ // Set environment variables for immediate use
332
+ setBlackboxApiKey(apiKey);
333
+ setBlackboxApiBaseUrl(baseUrl);
334
+ setBlackboxApiModel(model);
335
+ // Save to settings for persistence
336
+ saveProviderCredentials(settings, 'blackbox', {
337
+ apiKey,
338
+ baseUrl,
339
+ model,
340
+ });
341
+ }
342
+ else if (selectedProvider.name === 'xai') {
343
+ // Set environment variables for immediate use
344
+ setXaiApiKey(apiKey);
345
+ setXaiBaseUrl(baseUrl);
346
+ setXaiModel(model);
347
+ // Save to settings for persistence
348
+ saveProviderCredentials(settings, 'xai', {
349
+ apiKey,
350
+ baseUrl,
351
+ model,
352
+ });
353
+ }
354
+ else if (selectedProvider.name === 'google') {
355
+ // Set environment variables for immediate use
356
+ setGoogleApiKey(apiKey);
357
+ setGoogleBaseUrl(baseUrl);
358
+ setGoogleModel(model);
359
+ // Save to settings for persistence
360
+ saveProviderCredentials(settings, 'google', {
361
+ apiKey,
362
+ baseUrl,
363
+ model,
364
+ });
365
+ }
366
+ else if (selectedProvider.name === 'anthropic') {
367
+ // Set environment variables for immediate use
368
+ setAnthropicApiKey(apiKey);
369
+ setAnthropicBaseUrl(baseUrl);
370
+ setAnthropicModel(model);
371
+ // Save to settings for persistence
372
+ saveProviderCredentials(settings, 'anthropic', {
373
+ apiKey,
374
+ baseUrl,
375
+ model,
376
+ });
377
+ }
378
+ else if (selectedProvider.name === 'custom') {
379
+ // Set environment variables for immediate use
380
+ setCustomApiKey(apiKey);
381
+ setCustomBaseUrl(baseUrl);
382
+ setCustomModel(model);
383
+ // Save to settings for persistence
384
+ saveProviderCredentials(settings, 'custom', {
385
+ apiKey,
386
+ baseUrl,
387
+ model,
388
+ });
389
+ }
390
+ // Save provider selection and model name
391
+ // For selectedType, we use authType for backward compatibility
392
+ settings.setValue(SettingScope.User, 'security.auth.selectedType', selectedProvider.authType);
393
+ // Save the actual provider name so we can distinguish between OpenAI and OpenRouter
394
+ settings.setValue(SettingScope.User, 'security.auth.selectedProvider', selectedProvider.name);
395
+ settings.setValue(SettingScope.User, 'model.name', model);
396
+ setStep('complete');
397
+ setTimeout(() => {
398
+ onComplete();
399
+ exit();
400
+ }, 2000);
401
+ }
402
+ catch (err) {
403
+ setError(err instanceof Error ? err.message : 'Configuration failed');
404
+ }
405
+ };
406
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, color: Colors.AccentCyan, children: "\uD83D\uDE80 Blackbox CLI Configuration" }) }), step === 'provider' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select your AI provider:" }) }), _jsx(RadioButtonSelect, { items: PROVIDERS.map((p) => ({
407
+ label: p.displayName,
408
+ value: p.name,
409
+ })), onSelect: handleProviderSelect, isFocused: true }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Use \u2191\u2193 arrows to navigate, Enter to select, Ctrl+C to cancel" }) })] })), step === 'apiKey' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Configure ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), process.env[selectedProvider.envKeyName] && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2713 API key found in environment variable ", selectedProvider.envKeyName] }) })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Enter your API key (or press Enter to use existing):" }) }), _jsx(TextInput, { value: apiKey, onChange: setApiKey, onSubmit: handleApiKeySubmit, placeholder: "Enter API key...", isActive: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to continue, Ctrl+C to cancel" }) })] })), step === 'baseUrl' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Base URL (press Enter to use default):" }) }), _jsx(TextInput, { value: baseUrl, onChange: setBaseUrl, onSubmit: handleBaseUrlSubmit, placeholder: selectedProvider.defaultBaseUrl, isActive: true }), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: "Press Enter to continue, Ctrl+C to cancel" }) })] })), step === 'model' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: "Select a model or search for a custom one:" }) }), isFetchingModels && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentCyan, children: ["\u23F3 Fetching available models from ", selectedProvider.displayName, "..."] }) })), !isFetchingModels && fetchedModels.length > 0 && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: Colors.AccentGreen, children: ["\u2713 Loaded ", fetchedModels.length, " models from ", selectedProvider.displayName, " API"] }) })), !isFetchingModels && fetchedModels.length === 0 && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\u26A0 Could not fetch models from API, using default list" }) })), _jsx(Box, { marginBottom: 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) => ({
410
+ label: m,
411
+ value: m,
412
+ })), 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."] }) })), error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: Colors.AccentRed, children: ["\u274C ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.Gray, children: filteredModels.length > 0
413
+ ? 'Type to filter, use ↑↓ to navigate, Enter to select, Ctrl+C to cancel'
414
+ : 'Type model name and press Enter to use custom model, Ctrl+C to cancel' }) })] })), step === 'confirm' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { bold: true, children: "Review your configuration:" }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Provider: ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["API Key: ", _jsxs(Text, { color: Colors.AccentGreen, children: [apiKey.substring(0, 8), "..."] })] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Base URL: ", _jsx(Text, { color: Colors.AccentGreen, children: baseUrl })] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Model: ", _jsx(Text, { color: Colors.AccentGreen, children: model })] }) }), _jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(Text, { children: "Press Enter to save, Ctrl+C to cancel" }) }), _jsx(TextInput, { value: "", onChange: () => { }, onSubmit: handleConfirm, placeholder: "Press Enter to confirm...", isActive: true })] })), step === 'complete' && selectedProvider && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentGreen, children: "\u2705 Configuration saved successfully!" }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Provider: ", _jsx(Text, { color: Colors.AccentGreen, children: selectedProvider.displayName })] }) }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { children: ["Model: ", _jsx(Text, { color: Colors.AccentGreen, children: model })] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentYellow, children: "\uD83D\uDCDD To persist your API key across sessions, add it to:" }) }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: Colors.Gray, children: "\u2022 Your shell profile (~/.bashrc, ~/.zshrc, etc.)" }) }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: Colors.Gray, children: "\u2022 Or ~/.blackboxcli/.env" }) }), _jsx(Box, { marginTop: 1, marginLeft: 2, children: _jsxs(Text, { color: Colors.Gray, children: ["export ", selectedProvider.envKeyName, "='", apiKey.substring(0, 8), "...'"] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: Colors.AccentCyan, children: "\uD83D\uDCA1 Run 'blackbox' to start using the CLI!" }) })] }))] }));
415
+ }
416
+ //# sourceMappingURL=ConfigureUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigureUI.js","sourceRoot":"","sources":["../../../../src/commands/configure/ConfigureUI.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { CommandModule } from 'yargs';
7
+ export declare const configureCommand: CommandModule;
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render } from 'ink';
3
+ import { ConfigureUI } from './ConfigureUI.js';
4
+ import { KeypressProvider } from '../../ui/contexts/KeypressContext.js';
5
+ async function runConfigure() {
6
+ return new Promise((resolve) => {
7
+ // Create a minimal config for KeypressProvider
8
+ // We don't need full config functionality for the configure command
9
+ const minimalConfig = {
10
+ getDebugMode: () => false,
11
+ };
12
+ const { unmount } = render(_jsx(KeypressProvider, { kittyProtocolEnabled: false, pasteWorkaround: process.platform === 'win32', config: minimalConfig, debugKeystrokeLogging: false, children: _jsx(ConfigureUI, { onComplete: () => {
13
+ unmount();
14
+ resolve();
15
+ } }) }));
16
+ });
17
+ }
18
+ export const configureCommand = {
19
+ command: 'configure',
20
+ describe: 'Configure Blackbox CLI provider and model settings',
21
+ builder: (yargs) => yargs
22
+ .usage('Usage: blackbox configure')
23
+ .example('blackbox configure', 'Start the configuration wizard')
24
+ .help(),
25
+ handler: async () => {
26
+ await runConfigure();
27
+ process.exit(0);
28
+ },
29
+ };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/configure/index.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGxE,KAAK,UAAU,YAAY;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,+CAA+C;QAC/C,oEAAoE;QACpE,MAAM,aAAa,GAAG;YACpB,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;SAChB,CAAC;QAEZ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CACxB,KAAC,gBAAgB,IACf,oBAAoB,EAAE,KAAK,EAC3B,eAAe,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAC7C,MAAM,EAAE,aAAa,EACrB,qBAAqB,EAAE,KAAK,YAE5B,KAAC,WAAW,IACV,UAAU,EAAE,GAAG,EAAE;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;gBACZ,CAAC,GACD,GACe,CACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,oDAAoD;IAC9D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,KAAK,CAAC,2BAA2B,CAAC;SAClC,OAAO,CAAC,oBAAoB,EAAE,gCAAgC,CAAC;SAC/D,IAAI,EAAE;IACX,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,YAAY,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { CommandModule } from 'yargs';
7
+ export declare const configureCommand: CommandModule;