@blackbox_ai/blackbox-cli 0.9.2 → 1.0.2
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/assets/notification.mp3 +0 -0
- package/dist/package.json +2 -2
- package/dist/src/commands/voice.js +39 -34
- package/dist/src/commands/voice.js.map +1 -1
- package/dist/src/config/config.js +1 -4
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/settings.d.ts +2 -0
- package/dist/src/config/settings.js +22 -1
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +36 -7
- package/dist/src/config/settingsSchema.js +35 -8
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/gemini.js +25 -20
- 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/services/BuiltinCommandLoader.js +2 -2
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/agentExecutor.d.ts +5 -0
- package/dist/src/services/agentExecutor.js +6 -2
- package/dist/src/services/agentExecutor.js.map +1 -1
- package/dist/src/services/voiceRecordingService.d.ts +13 -1
- package/dist/src/services/voiceRecordingService.js +38 -5
- package/dist/src/services/voiceRecordingService.js.map +1 -1
- package/dist/src/ui/App.js +255 -20
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/commands/agentCommand.js +134 -43
- package/dist/src/ui/commands/agentCommand.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.js +15 -2
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/quitCommand.js +5 -0
- package/dist/src/ui/commands/quitCommand.js.map +1 -1
- package/dist/src/ui/commands/subAgentsCommand.d.ts +7 -0
- package/dist/src/ui/commands/subAgentsCommand.js +32 -0
- package/dist/src/ui/commands/subAgentsCommand.js.map +1 -0
- package/dist/src/ui/commands/types.d.ts +14 -3
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/voiceCommand.js +70 -34
- package/dist/src/ui/commands/voiceCommand.js.map +1 -1
- package/dist/src/ui/commands/voiceCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/voiceCommand.test.js +131 -0
- package/dist/src/ui/commands/voiceCommand.test.js.map +1 -0
- package/dist/src/ui/components/AgentModelSelector.js +1 -1
- package/dist/src/ui/components/AgentModelSelector.js.map +1 -1
- package/dist/src/ui/components/AgentSetDialog.d.ts +15 -0
- package/dist/src/ui/components/AgentSetDialog.js +52 -0
- package/dist/src/ui/components/AgentSetDialog.js.map +1 -0
- package/dist/src/ui/components/ApiKeyInputDialog.d.ts +17 -0
- package/dist/src/ui/components/ApiKeyInputDialog.js +44 -0
- package/dist/src/ui/components/ApiKeyInputDialog.js.map +1 -0
- package/dist/src/ui/components/AuthDialog.js +32 -46
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/components/Footer.d.ts +6 -0
- package/dist/src/ui/components/Footer.js +17 -2
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.js +1 -1
- package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
- package/dist/src/ui/components/Header.js +2 -9
- package/dist/src/ui/components/Header.js.map +1 -1
- package/dist/src/ui/components/HistoryBrowserDialog.js +2 -1
- package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +3 -1
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.js +41 -8
- package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +4 -3
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/Tips.js +1 -1
- package/dist/src/ui/components/Tips.js.map +1 -1
- package/dist/src/ui/components/agents/SingleAgentDialog.d.ts +7 -4
- package/dist/src/ui/components/agents/SingleAgentDialog.js +135 -63
- package/dist/src/ui/components/agents/SingleAgentDialog.js.map +1 -1
- package/dist/src/ui/components/messages/DiffRenderer.js +1 -9
- package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
- package/dist/src/ui/components/messages/ErrorMessage.js +2 -1
- package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.js +2 -1
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +4 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +1 -2
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/shared/RadioButtonSelect.js +14 -4
- package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
- package/dist/src/ui/contexts/SessionContext.d.ts +18 -0
- package/dist/src/ui/contexts/SessionContext.js +25 -1
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +54 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAgentCommandProcessor.d.ts +12 -2
- package/dist/src/ui/hooks/useAgentCommandProcessor.js +169 -4
- package/dist/src/ui/hooks/useAgentCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -1
- package/dist/src/ui/hooks/useAuthCommand.js +22 -2
- package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
- package/dist/src/ui/hooks/useDialogClose.d.ts +2 -0
- package/dist/src/ui/hooks/useDialogClose.js +5 -0
- package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
- package/dist/src/ui/hooks/useEncryptedStream.d.ts +2 -1
- package/dist/src/ui/hooks/useEncryptedStream.js +17 -4
- package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +216 -21
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useInputBoxColor.d.ts +13 -0
- package/dist/src/ui/hooks/useInputBoxColor.js +62 -0
- package/dist/src/ui/hooks/useInputBoxColor.js.map +1 -0
- package/dist/src/ui/hooks/useMessageQueue.d.ts +7 -1
- package/dist/src/ui/hooks/useMessageQueue.js +9 -3
- package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
- package/dist/src/ui/utils/agentConversationUtils.d.ts +28 -0
- package/dist/src/ui/utils/agentConversationUtils.js +71 -0
- package/dist/src/ui/utils/agentConversationUtils.js.map +1 -0
- package/dist/src/ui/utils/colorBlend.d.ts +33 -0
- package/dist/src/ui/utils/colorBlend.js +61 -0
- package/dist/src/ui/utils/colorBlend.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.d.ts +2 -1
- package/dist/src/ui/utils/commandUtils.js +14 -1
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js +25 -0
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/ui/utils/terminalBackgroundDetector.d.ts +16 -0
- package/dist/src/ui/utils/terminalBackgroundDetector.js +124 -23
- package/dist/src/ui/utils/terminalBackgroundDetector.js.map +1 -1
- package/dist/src/utils/agentCommandBuilder.d.ts +16 -4
- package/dist/src/utils/agentCommandBuilder.js +66 -26
- package/dist/src/utils/agentCommandBuilder.js.map +1 -1
- package/dist/src/utils/apiKeyUtils.d.ts +47 -0
- package/dist/src/utils/apiKeyUtils.js +177 -0
- package/dist/src/utils/apiKeyUtils.js.map +1 -0
- package/dist/src/utils/backgroundUpdateCheck.js +104 -7
- package/dist/src/utils/backgroundUpdateCheck.js.map +1 -1
- package/dist/src/utils/memoryManager.d.ts +85 -0
- package/dist/src/utils/memoryManager.js +258 -0
- package/dist/src/utils/memoryManager.js.map +1 -0
- package/dist/src/utils/memoryMonitor.d.ts +89 -0
- package/dist/src/utils/memoryMonitor.js +238 -0
- package/dist/src/utils/memoryMonitor.js.map +1 -0
- package/dist/src/utils/memoryWrapper.d.ts +18 -0
- package/dist/src/utils/memoryWrapper.js +62 -0
- package/dist/src/utils/memoryWrapper.js.map +1 -0
- package/dist/src/utils/preLaunchUpdateCheck.js +17 -7
- package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -1
- package/dist/src/utils/soundNotification.d.ts +15 -0
- package/dist/src/utils/soundNotification.js +138 -0
- package/dist/src/utils/soundNotification.js.map +1 -0
- package/dist/src/utils/versionStorage.d.ts +20 -0
- package/dist/src/utils/versionStorage.js +62 -0
- package/dist/src/utils/versionStorage.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -28,11 +28,19 @@ export class VoiceRecordingService {
|
|
|
28
28
|
fileStream = null;
|
|
29
29
|
startTime = null;
|
|
30
30
|
audioStream = null;
|
|
31
|
+
cancelled = false;
|
|
32
|
+
onCancelCallback = null;
|
|
31
33
|
constructor(config = {}) {
|
|
32
34
|
this.sampleRate = config.sampleRate || 16000;
|
|
33
35
|
this.channels = config.channels || 1;
|
|
34
36
|
this.audioFormat = config.audioFormat || 'wav';
|
|
35
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Set a callback to be invoked when recording is cancelled
|
|
40
|
+
*/
|
|
41
|
+
setOnCancelCallback(callback) {
|
|
42
|
+
this.onCancelCallback = callback;
|
|
43
|
+
}
|
|
36
44
|
/**
|
|
37
45
|
* List available audio input devices on Windows using DirectShow
|
|
38
46
|
*/
|
|
@@ -156,6 +164,8 @@ export class VoiceRecordingService {
|
|
|
156
164
|
if (this.ffmpegProcess) {
|
|
157
165
|
throw new Error('Recording is already in progress');
|
|
158
166
|
}
|
|
167
|
+
// Reset cancelled flag when starting a new recording
|
|
168
|
+
this.cancelled = false;
|
|
159
169
|
// Only create file path if explicitly provided
|
|
160
170
|
this.outputFilePath = outputPath || null;
|
|
161
171
|
debugLog('Starting recording...');
|
|
@@ -313,6 +323,7 @@ export class VoiceRecordingService {
|
|
|
313
323
|
return new Promise((resolve, reject) => {
|
|
314
324
|
const filePath = this.outputFilePath || '';
|
|
315
325
|
const startTime = this.startTime;
|
|
326
|
+
const wasCancelled = this.cancelled;
|
|
316
327
|
// Close file stream if it exists
|
|
317
328
|
if (this.fileStream) {
|
|
318
329
|
this.fileStream.end();
|
|
@@ -342,6 +353,7 @@ export class VoiceRecordingService {
|
|
|
342
353
|
filePath,
|
|
343
354
|
duration,
|
|
344
355
|
size,
|
|
356
|
+
cancelled: wasCancelled,
|
|
345
357
|
});
|
|
346
358
|
}
|
|
347
359
|
catch (error) {
|
|
@@ -359,12 +371,14 @@ export class VoiceRecordingService {
|
|
|
359
371
|
}
|
|
360
372
|
/**
|
|
361
373
|
* Cancel the current recording and delete the file if it exists
|
|
374
|
+
* This is a simple handler that marks the recording as cancelled
|
|
362
375
|
*/
|
|
363
|
-
|
|
376
|
+
handleCancellation() {
|
|
364
377
|
if (!this.ffmpegProcess) {
|
|
365
378
|
return;
|
|
366
379
|
}
|
|
367
|
-
debugLog('
|
|
380
|
+
debugLog('Handling cancellation...');
|
|
381
|
+
this.cancelled = true;
|
|
368
382
|
const filePath = this.outputFilePath;
|
|
369
383
|
// Kill the ffmpeg process
|
|
370
384
|
if (!this.ffmpegProcess.killed) {
|
|
@@ -376,12 +390,28 @@ export class VoiceRecordingService {
|
|
|
376
390
|
this.fileStream.end();
|
|
377
391
|
debugLog('File stream closed');
|
|
378
392
|
}
|
|
379
|
-
this.cleanup();
|
|
380
393
|
// Delete the recording file only if it was created
|
|
381
394
|
if (filePath && fs.existsSync(filePath)) {
|
|
382
|
-
|
|
383
|
-
|
|
395
|
+
try {
|
|
396
|
+
fs.unlinkSync(filePath);
|
|
397
|
+
debugLog('Recording file deleted:', filePath);
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
debugLog('Failed to delete recording file:', getErrorMessage(error));
|
|
401
|
+
}
|
|
384
402
|
}
|
|
403
|
+
this.cleanup();
|
|
404
|
+
// Invoke the cancellation callback if set
|
|
405
|
+
if (this.onCancelCallback) {
|
|
406
|
+
debugLog('Invoking cancellation callback');
|
|
407
|
+
this.onCancelCallback();
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Check if the recording was cancelled
|
|
412
|
+
*/
|
|
413
|
+
wasCancelled() {
|
|
414
|
+
return this.cancelled;
|
|
385
415
|
}
|
|
386
416
|
/**
|
|
387
417
|
* Clean up recording resources
|
|
@@ -392,6 +422,9 @@ export class VoiceRecordingService {
|
|
|
392
422
|
this.outputFilePath = null;
|
|
393
423
|
this.fileStream = null;
|
|
394
424
|
this.startTime = null;
|
|
425
|
+
// Don't reset cancelled flag here - it needs to persist after cleanup
|
|
426
|
+
// so wasCancelled() returns the correct value
|
|
427
|
+
this.onCancelCallback = null;
|
|
395
428
|
}
|
|
396
429
|
}
|
|
397
430
|
//# sourceMappingURL=voiceRecordingService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voiceRecordingService.js","sourceRoot":"","sources":["../../../src/services/voiceRecordingService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"voiceRecordingService.js","sourceRoot":"","sources":["../../../src/services/voiceRecordingService.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ui/App.js
CHANGED
|
@@ -53,8 +53,9 @@ import { AgentCreationWizard, AgentsManagerDialog, } from './components/subagent
|
|
|
53
53
|
import { SingleAgentDialog } from './components/agents/SingleAgentDialog.js';
|
|
54
54
|
import { MultiAgentConfigDialog } from './components/multiagent/MultiAgentConfigDialog.js';
|
|
55
55
|
import { Colors } from './colors.js';
|
|
56
|
+
import { convertHistoryToConversationString } from './utils/agentConversationUtils.js';
|
|
56
57
|
import { loadHierarchicalGeminiMemory } from '../config/config.js';
|
|
57
|
-
import { SettingScope } from '../config/settings.js';
|
|
58
|
+
import { SettingScope, settingsChangeEmitter } from '../config/settings.js';
|
|
58
59
|
import { Tips } from './components/Tips.js';
|
|
59
60
|
import { ConsolePatcher } from './utils/ConsolePatcher.js';
|
|
60
61
|
import { registerCleanup } from '../utils/cleanup.js';
|
|
@@ -96,6 +97,7 @@ import { TodoListDialog } from './components/TodoListDialog.js';
|
|
|
96
97
|
import { ConfigureUI } from '../commands/configure/ConfigureUI.js';
|
|
97
98
|
import { VoiceConfigDialog } from './components/VoiceConfigDialog.js';
|
|
98
99
|
import { QuitConfirmationDialog } from './components/QuitConfirmationDialog.js';
|
|
100
|
+
import { AgentSetDialog } from './components/AgentSetDialog.js';
|
|
99
101
|
// Maximum number of queued messages to display in UI to prevent performance issues
|
|
100
102
|
const MAX_DISPLAYED_QUEUED_MESSAGES = 3;
|
|
101
103
|
function isToolExecuting(pendingHistoryItems) {
|
|
@@ -151,7 +153,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
151
153
|
consolePatcher.patch();
|
|
152
154
|
registerCleanup(consolePatcher.cleanup);
|
|
153
155
|
}, [handleNewMessage, config]);
|
|
154
|
-
const { stats: sessionStats, initializeProgressiveAutoSave, setProgressiveAutoSaveEnabled } = useSessionStats();
|
|
156
|
+
const { stats: sessionStats, initializeProgressiveAutoSave, setProgressiveAutoSaveEnabled, setAgentRoutingDisabled, setActiveAgentSession } = useSessionStats();
|
|
155
157
|
// Initialize progressive auto-save service
|
|
156
158
|
useEffect(() => {
|
|
157
159
|
const progressiveAutoSaveEnabled = settings.merged.general?.progressiveAutoSave?.enabled ?? true;
|
|
@@ -162,10 +164,27 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
162
164
|
const enabled = settings.merged.general?.progressiveAutoSave?.enabled ?? true;
|
|
163
165
|
setProgressiveAutoSaveEnabled(enabled);
|
|
164
166
|
}, [settings.merged.general?.progressiveAutoSave?.enabled, setProgressiveAutoSaveEnabled]);
|
|
167
|
+
// Initialize agent routing disabled state from settings on startup
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
const routingDisabled = settings.merged.singleAgent?.routingDisabled ?? false;
|
|
170
|
+
setAgentRoutingDisabled(routingDisabled);
|
|
171
|
+
}, [settings.merged.singleAgent?.routingDisabled, setAgentRoutingDisabled, settings.merged.singleAgent]);
|
|
172
|
+
// Watch for changes in singleAgent settings and update local state for Footer
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
const selectedAgent = settings.merged.singleAgent?.selectedAgent;
|
|
175
|
+
setSelectedAgentForFooter(selectedAgent);
|
|
176
|
+
// Get model from per-agent configuration
|
|
177
|
+
const agentModel = selectedAgent
|
|
178
|
+
? settings.merged.singleAgent?.agents?.[selectedAgent]?.model
|
|
179
|
+
: undefined;
|
|
180
|
+
setAgentModelForFooter(agentModel);
|
|
181
|
+
}, [settings.merged.singleAgent?.selectedAgent, settings.merged.singleAgent?.agents]);
|
|
165
182
|
const [staticNeedsRefresh, setStaticNeedsRefresh] = useState(false);
|
|
166
183
|
const [staticKey, setStaticKey] = useState(0);
|
|
167
184
|
const refreshStatic = useCallback(() => {
|
|
168
|
-
|
|
185
|
+
// Use cursor repositioning + erase instead of full terminal clear to reduce flickering
|
|
186
|
+
// This moves cursor to top-left and clears from there, which is less jarring than clearTerminal
|
|
187
|
+
stdout.write(ansiEscapes.cursorTo(0, 0) + ansiEscapes.eraseDown);
|
|
169
188
|
setStaticKey((prev) => prev + 1);
|
|
170
189
|
}, [setStaticKey, stdout]);
|
|
171
190
|
const [debugMessage, setDebugMessage] = useState('');
|
|
@@ -193,6 +212,80 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
193
212
|
const [isProcessing, setIsProcessing] = useState(false);
|
|
194
213
|
const [showTodoListDialog, setShowTodoListDialog] = useState(false);
|
|
195
214
|
const [isVoiceConfigDialogOpen, setIsVoiceConfigDialogOpen] = useState(false);
|
|
215
|
+
const [showHelpTip, setShowHelpTip] = useState(true);
|
|
216
|
+
// Hide help tip if history is loaded (e.g., from previous session)
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
if (history.length > 0) {
|
|
219
|
+
setShowHelpTip(false);
|
|
220
|
+
}
|
|
221
|
+
}, [history.length]);
|
|
222
|
+
const [isAgentSetDialogOpen, setIsAgentSetDialogOpen] = useState(false);
|
|
223
|
+
const [voiceRecordingActive, setVoiceRecordingActive] = useState(false);
|
|
224
|
+
// State for agent configuration to ensure Footer updates when /agent model changes
|
|
225
|
+
const [selectedAgentForFooter, setSelectedAgentForFooter] = useState(settings.merged.singleAgent?.selectedAgent);
|
|
226
|
+
const [agentModelForFooter, setAgentModelForFooter] = useState(() => {
|
|
227
|
+
const selectedAgent = settings.merged.singleAgent?.selectedAgent;
|
|
228
|
+
return selectedAgent
|
|
229
|
+
? settings.merged.singleAgent?.agents?.[selectedAgent]?.model
|
|
230
|
+
: undefined;
|
|
231
|
+
});
|
|
232
|
+
// Listen for settings changes via event emitter to ensure UI reactivity
|
|
233
|
+
useEffect(() => {
|
|
234
|
+
const handleSettingsChange = (changeData) => {
|
|
235
|
+
// If singleAgent settings changed, update local state immediately
|
|
236
|
+
if (changeData.key === 'singleAgent') {
|
|
237
|
+
const singleAgentConfig = changeData.merged.singleAgent;
|
|
238
|
+
// Check if we should preserve the active session
|
|
239
|
+
// Only clear the session if the agent type changed, not just the model
|
|
240
|
+
const currentSession = sessionStats.activeAgentSession;
|
|
241
|
+
const newSelectedAgent = singleAgentConfig?.selectedAgent;
|
|
242
|
+
// Sync conversation history from UI history when switching agents
|
|
243
|
+
// This ensures CLI agents (claude, codex, gemini) have access to the full conversation
|
|
244
|
+
// that was built up while using blackbox (which uses Gemini client internal history)
|
|
245
|
+
const syncedConversationHistory = convertHistoryToConversationString(history);
|
|
246
|
+
// Get the model for the new agent
|
|
247
|
+
const newModel = newSelectedAgent
|
|
248
|
+
? singleAgentConfig?.agents?.[newSelectedAgent]?.model
|
|
249
|
+
: currentSession?.model;
|
|
250
|
+
// Always preserve conversation history when switching agents
|
|
251
|
+
// History should only be cleared via /agent exit command
|
|
252
|
+
if (currentSession) {
|
|
253
|
+
// Update the existing session with new agent type, model, and synced conversation history
|
|
254
|
+
setActiveAgentSession({
|
|
255
|
+
...currentSession,
|
|
256
|
+
agentType: newSelectedAgent,
|
|
257
|
+
model: newModel || currentSession.model,
|
|
258
|
+
conversationHistory: syncedConversationHistory,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
else if (history.length > 0 && newSelectedAgent) {
|
|
262
|
+
// No current session but there's UI history - create a new session with synced history
|
|
263
|
+
// This handles the case where user was using blackbox (direct Gemini client) and switches to another agent
|
|
264
|
+
setActiveAgentSession({
|
|
265
|
+
agentType: newSelectedAgent,
|
|
266
|
+
model: newModel || 'default',
|
|
267
|
+
task: '', // No specific task, just continuing conversation
|
|
268
|
+
conversationHistory: syncedConversationHistory,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
// If no current session and no history, don't set one - let the user start a new conversation
|
|
272
|
+
const selectedAgent = singleAgentConfig?.selectedAgent;
|
|
273
|
+
setSelectedAgentForFooter(selectedAgent);
|
|
274
|
+
// Get model from per-agent configuration
|
|
275
|
+
const agentModel = selectedAgent
|
|
276
|
+
? singleAgentConfig?.agents?.[selectedAgent]?.model
|
|
277
|
+
: undefined;
|
|
278
|
+
setAgentModelForFooter(agentModel);
|
|
279
|
+
// Also update agent routing disabled state
|
|
280
|
+
const routingDisabled = singleAgentConfig?.routingDisabled ?? false;
|
|
281
|
+
setAgentRoutingDisabled(routingDisabled);
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
settingsChangeEmitter.on('settingsChanged', handleSettingsChange);
|
|
285
|
+
return () => {
|
|
286
|
+
settingsChangeEmitter.off('settingsChanged', handleSettingsChange);
|
|
287
|
+
};
|
|
288
|
+
}, [setAgentRoutingDisabled, setActiveAgentSession, sessionStats.activeAgentSession, history]);
|
|
196
289
|
// Releases dialog hook
|
|
197
290
|
const { isReleasesDialogOpen, openReleasesDialog, closeReleasesDialog, releasesVersions, isReleasesLoading, } = useReleasesDialog();
|
|
198
291
|
const { showWorkspaceMigrationDialog, workspaceExtensions, onWorkspaceMigrationDialogOpen, onWorkspaceMigrationDialogClose, } = useWorkspaceMigration(settings);
|
|
@@ -351,9 +444,63 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
351
444
|
const closeVoiceConfigDialog = useCallback(() => {
|
|
352
445
|
voiceConfigDialogAnimation.startClosing();
|
|
353
446
|
}, [voiceConfigDialogAnimation]);
|
|
447
|
+
// Agent set dialog handlers
|
|
448
|
+
const openAgentSetDialog = useCallback(() => {
|
|
449
|
+
setIsAgentSetDialogOpen(true);
|
|
450
|
+
}, []);
|
|
451
|
+
const closeAgentSetDialogOriginal = useCallback(() => {
|
|
452
|
+
setIsAgentSetDialogOpen(false);
|
|
453
|
+
}, []);
|
|
454
|
+
// Animation hook for agent set dialog
|
|
455
|
+
const agentSetDialogAnimation = useDialogCloseAnimation(() => {
|
|
456
|
+
closeAgentSetDialogOriginal();
|
|
457
|
+
});
|
|
458
|
+
const closeAgentSetDialog = useCallback(() => {
|
|
459
|
+
agentSetDialogAnimation.startClosing();
|
|
460
|
+
}, [agentSetDialogAnimation]);
|
|
461
|
+
const handleAgentSelected = useCallback((agentType, model) => {
|
|
462
|
+
// Get the stored model for this agent, or use default
|
|
463
|
+
const currentAgentConfigs = settings.merged?.singleAgent?.agents || {};
|
|
464
|
+
const storedModel = currentAgentConfigs[agentType]?.model;
|
|
465
|
+
const finalModel = storedModel || model;
|
|
466
|
+
// Update UI state immediately for instant visual feedback
|
|
467
|
+
setSelectedAgentForFooter(agentType);
|
|
468
|
+
setAgentModelForFooter(finalModel);
|
|
469
|
+
// Defer ALL operations to avoid blocking the dialog close
|
|
470
|
+
setTimeout(() => {
|
|
471
|
+
// Show success message
|
|
472
|
+
addItem({
|
|
473
|
+
type: MessageType.INFO,
|
|
474
|
+
text: `✓ Switched to ${agentType.charAt(0).toUpperCase() + agentType.slice(1)} agent with model: ${finalModel}`,
|
|
475
|
+
}, Date.now());
|
|
476
|
+
// Build the complete singleAgent config object and save it
|
|
477
|
+
const updatedAgentConfigs = {
|
|
478
|
+
...currentAgentConfigs,
|
|
479
|
+
[agentType]: { model: finalModel },
|
|
480
|
+
};
|
|
481
|
+
const singleAgentConfig = {
|
|
482
|
+
...settings.merged?.singleAgent,
|
|
483
|
+
selectedAgent: agentType,
|
|
484
|
+
model: finalModel,
|
|
485
|
+
routingDisabled: false,
|
|
486
|
+
agents: updatedAgentConfigs,
|
|
487
|
+
};
|
|
488
|
+
// Save settings in the background - this will trigger the settings change event
|
|
489
|
+
// which will update other parts of the UI that depend on settings
|
|
490
|
+
settings.setValue(SettingScope.User, 'singleAgent', singleAgentConfig);
|
|
491
|
+
}, 0);
|
|
492
|
+
}, [addItem, settings, setSelectedAgentForFooter, setAgentModelForFooter]);
|
|
354
493
|
const { isSubagentCreateDialogOpen, openSubagentCreateDialog, closeSubagentCreateDialog, } = useSubagentCreateDialog();
|
|
355
494
|
const { isAgentsManagerDialogOpen, openAgentsManagerDialog, closeAgentsManagerDialog, } = useAgentsManagerDialog();
|
|
356
495
|
const { isSingleAgentDialogOpen, openSingleAgentDialog, closeSingleAgentDialog, } = useSingleAgentCommand();
|
|
496
|
+
// State for single agent model-only dialog
|
|
497
|
+
const [isSingleAgentModelDialogOpen, setIsSingleAgentModelDialogOpen] = useState(false);
|
|
498
|
+
const openSingleAgentModelDialog = useCallback(() => {
|
|
499
|
+
setIsSingleAgentModelDialogOpen(true);
|
|
500
|
+
}, []);
|
|
501
|
+
const closeSingleAgentModelDialog = useCallback(() => {
|
|
502
|
+
setIsSingleAgentModelDialogOpen(false);
|
|
503
|
+
}, []);
|
|
357
504
|
const { isMultiAgentConfigDialogOpen, openMultiAgentConfigDialog, closeMultiAgentConfigDialog, } = useMultiAgentConfigCommand();
|
|
358
505
|
const { isFolderTrustDialogOpen, handleFolderTrustSelect, isRestarting } = useFolderTrust(settings, setIsTrustedFolder);
|
|
359
506
|
const { showQuitConfirmation, handleQuitConfirmationSelect } = useQuitConfirmation();
|
|
@@ -367,7 +514,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
367
514
|
if (reloadCommandsRef.current) {
|
|
368
515
|
reloadCommandsRef.current();
|
|
369
516
|
}
|
|
370
|
-
});
|
|
517
|
+
}, setActiveAgentSession);
|
|
371
518
|
// Animation hook for auth dialog
|
|
372
519
|
const authDialogAnimation = useDialogCloseAnimation(() => {
|
|
373
520
|
// Close handler - for ESC case
|
|
@@ -584,7 +731,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
584
731
|
const isValidEditor = isEditorAvailable(editorType);
|
|
585
732
|
if (!isValidEditor) {
|
|
586
733
|
openEditorDialog();
|
|
587
|
-
return;
|
|
734
|
+
return undefined;
|
|
588
735
|
}
|
|
589
736
|
return editorType;
|
|
590
737
|
}, [settings, openEditorDialog]);
|
|
@@ -699,7 +846,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
699
846
|
}, [isModelSelectionDialogOpen, getAvailableModelsForCurrentAuth]);
|
|
700
847
|
// Core hooks and processors
|
|
701
848
|
const { vimEnabled: vimModeEnabled, vimMode, toggleVimEnabled, } = useVimMode();
|
|
702
|
-
const { handleSlashCommand, slashCommands, pendingHistoryItems: pendingSlashCommandHistoryItems, commandContext, shellConfirmationRequest, confirmationRequest, quitConfirmationRequest, } = useSlashCommandProcessor(config, settings, addItem, clearItems, loadHistory, refreshStatic, setDebugMessage, openThemeDialog, openAuthDialog, openEditorDialog, toggleCorgiMode, setQuittingMessages, openPrivacyNotice, openSettingsDialog, openExtensionsDialog, handleModelSelectionOpen, openSubagentCreateDialog, openAgentsManagerDialog, openSingleAgentDialog, openMultiAgentConfigDialog, openHistoryBrowser, openDbConfigureDialog, toggleVimEnabled, setIsProcessing, setGeminiMdFileCount, showQuitConfirmation, openVoiceConfigDialog, openReleasesDialog);
|
|
849
|
+
const { handleSlashCommand, slashCommands, pendingHistoryItems: pendingSlashCommandHistoryItems, commandContext, shellConfirmationRequest, confirmationRequest, quitConfirmationRequest, } = useSlashCommandProcessor(config, settings, addItem, clearItems, loadHistory, refreshStatic, setDebugMessage, openThemeDialog, openAuthDialog, openEditorDialog, toggleCorgiMode, setQuittingMessages, openPrivacyNotice, openSettingsDialog, openExtensionsDialog, handleModelSelectionOpen, openSubagentCreateDialog, openAgentsManagerDialog, openSingleAgentDialog, openSingleAgentModelDialog, openMultiAgentConfigDialog, openHistoryBrowser, openDbConfigureDialog, toggleVimEnabled, setIsProcessing, setGeminiMdFileCount, showQuitConfirmation, openVoiceConfigDialog, openReleasesDialog, openAgentSetDialog, setVoiceRecordingActive);
|
|
703
850
|
// Set the reloadCommands ref when commandContext is available
|
|
704
851
|
useEffect(() => {
|
|
705
852
|
if (commandContext?.ui?.reloadCommands) {
|
|
@@ -765,6 +912,8 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
765
912
|
closeExtensionsDialog,
|
|
766
913
|
isVoiceConfigDialogOpen,
|
|
767
914
|
closeVoiceConfigDialog,
|
|
915
|
+
isAgentSetDialogOpen,
|
|
916
|
+
closeAgentSetDialog,
|
|
768
917
|
isReleasesDialogOpen,
|
|
769
918
|
closeReleasesDialog,
|
|
770
919
|
isFolderTrustDialogOpen,
|
|
@@ -809,8 +958,12 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
809
958
|
]);
|
|
810
959
|
// Input handling - queue messages for processing
|
|
811
960
|
const handleFinalSubmit = useCallback((submittedValue) => {
|
|
961
|
+
// Hide help tip on first command submission
|
|
962
|
+
if (showHelpTip) {
|
|
963
|
+
setShowHelpTip(false);
|
|
964
|
+
}
|
|
812
965
|
addMessage(submittedValue);
|
|
813
|
-
}, [addMessage]);
|
|
966
|
+
}, [addMessage, showHelpTip]);
|
|
814
967
|
const { handleInput: vimHandleInput } = useVim(buffer, handleFinalSubmit);
|
|
815
968
|
const { todos, currentTodo, nextTodo } = useTodoList(config.getSessionId());
|
|
816
969
|
const { elapsedTime, currentLoadingPhrase } = useLoadingIndicator(streamingState, currentTodo?.content || null);
|
|
@@ -890,6 +1043,10 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
890
1043
|
if (isAuthenticating) {
|
|
891
1044
|
return;
|
|
892
1045
|
}
|
|
1046
|
+
// When voice recording is active, let the voice command handle Ctrl+C.
|
|
1047
|
+
if (voiceRecordingActive) {
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
893
1050
|
handleExit(ctrlCPressedOnce, setCtrlCPressedOnce, ctrlCTimerRef);
|
|
894
1051
|
}
|
|
895
1052
|
else if (keyMatchers[Command.EXIT](key)) {
|
|
@@ -920,6 +1077,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
920
1077
|
ctrlDTimerRef,
|
|
921
1078
|
handleSlashCommand,
|
|
922
1079
|
isAuthenticating,
|
|
1080
|
+
voiceRecordingActive,
|
|
923
1081
|
settings.merged.general?.debugKeystrokeLogging,
|
|
924
1082
|
]);
|
|
925
1083
|
useKeypress(handleGlobalKeypress, {
|
|
@@ -968,7 +1126,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
968
1126
|
const handleClearScreen = useCallback(() => {
|
|
969
1127
|
clearItems();
|
|
970
1128
|
clearConsoleMessagesState();
|
|
971
|
-
console.clear()
|
|
1129
|
+
// Removed redundant console.clear() - refreshStatic() already handles screen clearing
|
|
972
1130
|
refreshStatic();
|
|
973
1131
|
}, [clearItems, clearConsoleMessagesState, refreshStatic]);
|
|
974
1132
|
const mainControlsRef = useRef(null);
|
|
@@ -1085,7 +1243,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
1085
1243
|
const placeholder = vimModeEnabled
|
|
1086
1244
|
? " Press 'i' for INSERT mode and 'Esc' for NORMAL mode."
|
|
1087
1245
|
: ' Type your message or @path/to/file';
|
|
1088
|
-
return (_jsx(StreamingContext.Provider, { value: streamingState, children: _jsxs(Box, { flexDirection: "column", width: "
|
|
1246
|
+
return (_jsx(StreamingContext.Provider, { value: streamingState, children: _jsxs(Box, { flexDirection: "column", width: "99%", children: [_jsx(Static, { items: [
|
|
1089
1247
|
_jsxs(Box, { flexDirection: "column", children: [!(settings.merged.ui?.hideBanner || config.getScreenReader()) && _jsx(Header, { version: version, nightly: nightly }), !(settings.merged.ui?.hideTips || config.getScreenReader()) && (_jsx(Tips, { config: config }))] }, "header"),
|
|
1090
1248
|
...history.map((h) => (_jsx(HistoryItemDisplay, { terminalWidth: mainAreaWidth, availableTerminalHeight: staticAreaMaxItemHeight, item: h, isPending: false, config: config, commands: slashCommands }, h.id))),
|
|
1091
1249
|
], children: (item) => item }, staticKey), _jsx(OverflowProvider, { children: _jsxs(Box, { ref: pendingHistoryItemRef, flexDirection: "column", children: [pendingHistoryItems.map((item) => (_jsx(HistoryItemDisplay, { availableTerminalHeight: constrainHeight ? availableTerminalHeight : undefined, terminalWidth: mainAreaWidth, item: item, isPending: true, config: config, isFocused: !isEditorDialogOpen }, item.id))), _jsx(ShowMoreLines, { constrainHeight: constrainHeight })] }) }), _jsxs(Box, { flexDirection: "column", ref: mainControlsRef, children: [updateInfo && _jsx(UpdateNotification, { message: updateInfo.message }), startupWarnings.length > 0 && (_jsx(Box, { borderStyle: "round", borderColor: Colors.Gray, paddingX: 1, marginY: 1, flexDirection: "column", children: startupWarnings.map((warning, index) => (_jsx(Text, { color: Colors.Gray, children: warning }, index))) })), showWelcomeBackDialog && welcomeBackInfo?.hasHistory && (_jsx(WelcomeBackDialog, { welcomeBackInfo: welcomeBackInfo, onSelect: handleWelcomeBackSelection, onClose: handleWelcomeBackClose })), showWorkspaceMigrationDialog ? (_jsx(WorkspaceMigrationDialog, { workspaceExtensions: workspaceExtensions, onOpen: onWorkspaceMigrationDialogOpen, onClose: onWorkspaceMigrationDialogClose })) : isFolderTrustDialogOpen ? (_jsx(FolderTrustDialog, { onSelect: handleFolderTrustSelect, isRestarting: isRestarting })) : quitConfirmationRequest ? (_jsx(QuitConfirmationDialog, { onSelect: (choice) => {
|
|
@@ -1106,19 +1264,96 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
1106
1264
|
: undefined, terminalWidth: mainAreaWidth, isClosing: themeDialogAnimation.isClosing })] })) : isReleasesDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(ReleaseNotesDialog, { versions: releasesVersions, onClose: closeReleasesDialog, availableTerminalHeight: constrainHeight
|
|
1107
1265
|
? terminalHeight - staticExtraHeight
|
|
1108
1266
|
: undefined, terminalWidth: mainAreaWidth, isLoading: isReleasesLoading }) })) : isSettingsDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(SettingsDialog, { settings: settings, onSelect: () => closeSettingsDialog(), onRestartRequest: () => process.exit(0), isClosing: settingsDialogAnimation.isClosing }) })) : isExtensionsDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(ExtensionsDialog, { onClose: () => closeExtensionsDialog() }) })) : isSubagentCreateDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(AgentCreationWizard, { onClose: closeSubagentCreateDialog, config: config }) })) : isAgentsManagerDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(AgentsManagerDialog, { onClose: closeAgentsManagerDialog, config: config }) })) : isSingleAgentDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(SingleAgentDialog, { onComplete: async (singleAgentConfig) => {
|
|
1109
|
-
//
|
|
1110
|
-
//
|
|
1111
|
-
|
|
1112
|
-
|
|
1267
|
+
// Always preserve conversation history when switching agents
|
|
1268
|
+
// History should only be cleared via /agent exit command
|
|
1269
|
+
const currentSession = sessionStats.activeAgentSession;
|
|
1270
|
+
if (currentSession) {
|
|
1271
|
+
// Update the session with new agent type and model, preserving conversation history
|
|
1272
|
+
setActiveAgentSession({
|
|
1273
|
+
...currentSession,
|
|
1274
|
+
agentType: singleAgentConfig.selectedAgent,
|
|
1275
|
+
model: singleAgentConfig.model,
|
|
1276
|
+
});
|
|
1277
|
+
}
|
|
1278
|
+
// If no current session, don't set one - let the user start a new conversation
|
|
1279
|
+
// Get current agent configurations
|
|
1280
|
+
const currentAgentConfigs = settings.merged.singleAgent?.agents || {};
|
|
1281
|
+
// Update the model for the specific agent in the agents config
|
|
1282
|
+
const updatedAgentConfigs = {
|
|
1283
|
+
...currentAgentConfigs,
|
|
1284
|
+
[singleAgentConfig.selectedAgent]: {
|
|
1285
|
+
model: singleAgentConfig.model,
|
|
1286
|
+
},
|
|
1287
|
+
};
|
|
1288
|
+
// Save configuration to settings with per-agent model storage
|
|
1289
|
+
settings.setValue(SettingScope.User, 'singleAgent', {
|
|
1290
|
+
selectedAgent: singleAgentConfig.selectedAgent,
|
|
1291
|
+
agents: updatedAgentConfigs,
|
|
1292
|
+
routingDisabled: false,
|
|
1293
|
+
});
|
|
1294
|
+
// Re-enable agent routing when configuration is saved
|
|
1295
|
+
setAgentRoutingDisabled(false);
|
|
1296
|
+
// Update local state to trigger Footer re-render
|
|
1297
|
+
setSelectedAgentForFooter(singleAgentConfig.selectedAgent);
|
|
1298
|
+
setAgentModelForFooter(singleAgentConfig.model);
|
|
1113
1299
|
closeSingleAgentDialog();
|
|
1300
|
+
// Show appropriate message based on whether history was preserved
|
|
1301
|
+
const historyPreserved = currentSession && currentSession.agentType === singleAgentConfig.selectedAgent;
|
|
1114
1302
|
addItem({
|
|
1115
1303
|
type: MessageType.INFO,
|
|
1116
|
-
text:
|
|
1304
|
+
text: historyPreserved
|
|
1305
|
+
? `Agent model changed to ${singleAgentConfig.model} for ${singleAgentConfig.selectedAgent}. Conversation context preserved.`
|
|
1306
|
+
: `Agent configuration saved: ${singleAgentConfig.selectedAgent} with model ${singleAgentConfig.model}. You're now working with ${singleAgentConfig.selectedAgent}.`,
|
|
1117
1307
|
}, Date.now());
|
|
1118
1308
|
}, onCancel: closeSingleAgentDialog, initialConfig: {
|
|
1119
|
-
selectedAgent: (settings.merged.singleAgent?.selectedAgent
|
|
1120
|
-
model: settings.merged.singleAgent?.
|
|
1121
|
-
|
|
1309
|
+
selectedAgent: (settings.merged.singleAgent?.selectedAgent === 'blackbox' ? 'claude' : settings.merged.singleAgent?.selectedAgent || 'claude'),
|
|
1310
|
+
model: settings.merged.singleAgent?.agents?.[settings.merged.singleAgent?.selectedAgent === 'blackbox' ? 'claude' : settings.merged.singleAgent?.selectedAgent || 'claude']?.model ||
|
|
1311
|
+
settings.merged.singleAgent?.model ||
|
|
1312
|
+
'blackboxai/anthropic/claude-sonnet-4.5',
|
|
1313
|
+
}, settings: settings }) })) : isSingleAgentModelDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(SingleAgentDialog, { onComplete: async (singleAgentConfig) => {
|
|
1314
|
+
// Always preserve conversation history when switching agents
|
|
1315
|
+
// History should only be cleared via /agent exit command
|
|
1316
|
+
const currentSession = sessionStats.activeAgentSession;
|
|
1317
|
+
if (currentSession) {
|
|
1318
|
+
// Update the session with new agent type and model, preserving conversation history
|
|
1319
|
+
setActiveAgentSession({
|
|
1320
|
+
...currentSession,
|
|
1321
|
+
agentType: singleAgentConfig.selectedAgent,
|
|
1322
|
+
model: singleAgentConfig.model,
|
|
1323
|
+
});
|
|
1324
|
+
}
|
|
1325
|
+
// If no current session, don't set one - let the user start a new conversation
|
|
1326
|
+
// Get current agent configurations
|
|
1327
|
+
const currentAgentConfigs = settings.merged.singleAgent?.agents || {};
|
|
1328
|
+
// Update the model for the specific agent in the agents config
|
|
1329
|
+
const updatedAgentConfigs = {
|
|
1330
|
+
...currentAgentConfigs,
|
|
1331
|
+
[singleAgentConfig.selectedAgent]: {
|
|
1332
|
+
model: singleAgentConfig.model,
|
|
1333
|
+
},
|
|
1334
|
+
};
|
|
1335
|
+
// Save the updated per-agent configuration
|
|
1336
|
+
settings.setValue(SettingScope.User, 'singleAgent', {
|
|
1337
|
+
selectedAgent: singleAgentConfig.selectedAgent,
|
|
1338
|
+
agents: updatedAgentConfigs,
|
|
1339
|
+
routingDisabled: false,
|
|
1340
|
+
});
|
|
1341
|
+
// Re-enable agent routing when configuration is saved
|
|
1342
|
+
setAgentRoutingDisabled(false);
|
|
1343
|
+
// Update local state to trigger Footer re-render
|
|
1344
|
+
setSelectedAgentForFooter(singleAgentConfig.selectedAgent);
|
|
1345
|
+
setAgentModelForFooter(singleAgentConfig.model);
|
|
1346
|
+
closeSingleAgentModelDialog();
|
|
1347
|
+
addItem({
|
|
1348
|
+
type: MessageType.INFO,
|
|
1349
|
+
text: `Agent model changed to ${singleAgentConfig.model} for ${singleAgentConfig.selectedAgent}. Conversation context preserved.`,
|
|
1350
|
+
}, Date.now());
|
|
1351
|
+
}, onCancel: closeSingleAgentModelDialog, initialConfig: {
|
|
1352
|
+
selectedAgent: (settings.merged.singleAgent?.selectedAgent === 'blackbox' ? 'claude' : settings.merged.singleAgent?.selectedAgent || 'claude'),
|
|
1353
|
+
model: settings.merged.singleAgent?.agents?.[settings.merged.singleAgent?.selectedAgent === 'blackbox' ? 'claude' : settings.merged.singleAgent?.selectedAgent || 'claude']?.model ||
|
|
1354
|
+
settings.merged.singleAgent?.model ||
|
|
1355
|
+
'blackboxai/anthropic/claude-sonnet-4.5',
|
|
1356
|
+
}, settings: settings, startAtModelStep: true }) })) : isMultiAgentConfigDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(MultiAgentConfigDialog, { onComplete: (multiAgentConfig) => {
|
|
1122
1357
|
// Save configuration to settings
|
|
1123
1358
|
settings.setValue(SettingScope.User, 'multiAgent', multiAgentConfig);
|
|
1124
1359
|
closeMultiAgentConfigDialog();
|
|
@@ -1168,7 +1403,7 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
1168
1403
|
} })) : (_jsx(AuthInProgress, { onTimeout: () => {
|
|
1169
1404
|
// User cancelled - just return to agent without showing dialog
|
|
1170
1405
|
cancelAuthentication();
|
|
1171
|
-
} })), showErrorDetails && (_jsx(OverflowProvider, { children: _jsxs(Box, { flexDirection: "column", children: [_jsx(DetailedMessagesDisplay, { messages: filteredConsoleMessages, maxHeight: constrainHeight ? debugConsoleMaxHeight : undefined, width: inputWidth }), _jsx(ShowMoreLines, { constrainHeight: constrainHeight })] }) }))] })) : isAuthDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(AuthDialog, { onSelect: handleAuthSelect, settings: settings, initialErrorMessage: authError, isClosing: authDialogAnimation.isClosing }) })) : isEditorDialogOpen ? (_jsxs(Box, { flexDirection: "column", children: [editorError && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentRed, children: editorError }) })), _jsx(EditorSettingsDialog, { onSelect: handleEditorSelect, settings: settings, onExit: exitEditorDialog })] })) : isModelSelectionDialogOpen ? (_jsx(ModelSelectionDialog, { availableModels: availableModelsForDialog, currentModel: currentModel, onSelect: handleModelSelect, onCancel: handleModelSelectionClose, isClosing: modelDialogAnimation.isClosing })) : isVisionSwitchDialogOpen ? (_jsx(ModelSwitchDialog, { onSelect: handleVisionSwitchSelect })) : isVoiceConfigDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(VoiceConfigDialog, { settings: settings, onClose: closeVoiceConfigDialog, isClosing: voiceConfigDialogAnimation.isClosing, onConfigComplete: handleVoiceConfigComplete }) })) : showPrivacyNotice ? (_jsx(PrivacyNotice, { onExit: () => setShowPrivacyNotice(false), config: config })) : (_jsxs(_Fragment, { children: [showTodoListDialog && (_jsx(TodoListDialog, { todos: todos, onClose: () => setShowTodoListDialog(false) })), _jsx(LoadingIndicator, { thought: streamingState === StreamingState.WaitingForConfirmation ||
|
|
1406
|
+
} })), showErrorDetails && (_jsx(OverflowProvider, { children: _jsxs(Box, { flexDirection: "column", children: [_jsx(DetailedMessagesDisplay, { messages: filteredConsoleMessages, maxHeight: constrainHeight ? debugConsoleMaxHeight : undefined, width: inputWidth }), _jsx(ShowMoreLines, { constrainHeight: constrainHeight })] }) }))] })) : isAuthDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(AuthDialog, { onSelect: handleAuthSelect, settings: settings, initialErrorMessage: authError, isClosing: authDialogAnimation.isClosing }) })) : isEditorDialogOpen ? (_jsxs(Box, { flexDirection: "column", children: [editorError && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: Colors.AccentRed, children: editorError }) })), _jsx(EditorSettingsDialog, { onSelect: handleEditorSelect, settings: settings, onExit: exitEditorDialog })] })) : isModelSelectionDialogOpen ? (_jsx(ModelSelectionDialog, { availableModels: availableModelsForDialog, currentModel: currentModel, onSelect: handleModelSelect, onCancel: handleModelSelectionClose, isClosing: modelDialogAnimation.isClosing })) : isVisionSwitchDialogOpen ? (_jsx(ModelSwitchDialog, { onSelect: handleVisionSwitchSelect })) : isVoiceConfigDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(VoiceConfigDialog, { settings: settings, onClose: closeVoiceConfigDialog, isClosing: voiceConfigDialogAnimation.isClosing, onConfigComplete: handleVoiceConfigComplete }) })) : isAgentSetDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(AgentSetDialog, { settings: settings, onClose: closeAgentSetDialog, onAgentSelected: handleAgentSelected }) })) : showPrivacyNotice ? (_jsx(PrivacyNotice, { onExit: () => setShowPrivacyNotice(false), config: config })) : (_jsxs(_Fragment, { children: [showTodoListDialog && (_jsx(TodoListDialog, { todos: todos, onClose: () => setShowTodoListDialog(false) })), _jsx(LoadingIndicator, { thought: streamingState === StreamingState.WaitingForConfirmation ||
|
|
1172
1407
|
config.getAccessibility()?.disableLoadingPhrases ||
|
|
1173
1408
|
config.getScreenReader()
|
|
1174
1409
|
? undefined
|
|
@@ -1185,8 +1420,8 @@ const App = ({ config, settings, startupWarnings = [], version, initialSlashComm
|
|
|
1185
1420
|
// Ensure the Box takes full width so truncation calculates correctly
|
|
1186
1421
|
_jsx(Box, { paddingLeft: 2, width: "100%", children: _jsx(Text, { dimColor: true, wrap: "truncate", children: preview }) }, index));
|
|
1187
1422
|
}), messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["... (+", messageQueue.length - MAX_DISPLAYED_QUEUED_MESSAGES, "more)"] }) }))] })), _jsxs(Box, { marginTop: 1, justifyContent: "space-between", width: "100%", flexDirection: isNarrow ? 'column' : 'row', alignItems: isNarrow ? 'flex-start' : 'center', children: [_jsxs(Box, { children: [process.env['GEMINI_SYSTEM_MD'] && (_jsx(Text, { color: Colors.AccentRed, children: "|\u2310\u25A0_\u25A0| " })), ctrlCPressedOnce ? (_jsx(Text, { color: Colors.AccentYellow, children: "Press Ctrl+C again to confirm exit." })) : ctrlDPressedOnce ? (_jsx(Text, { color: Colors.AccentYellow, children: "Press Ctrl+D again to exit." })) : showEscapePrompt ? (_jsx(Text, { color: Colors.Gray, children: "Press Esc again to clear." })) : null] }), _jsxs(Box, { paddingTop: isNarrow ? 1 : 0, children: [showAutoAcceptIndicator !== ApprovalMode.DEFAULT &&
|
|
1188
|
-
!shellModeActive && (_jsx(AutoAcceptIndicator, { approvalMode: showAutoAcceptIndicator })), shellModeActive && _jsx(ShellModeIndicator, {})] })] }), showErrorDetails && (_jsx(OverflowProvider, { children: _jsxs(Box, { flexDirection: "column", children: [_jsx(DetailedMessagesDisplay, { messages: filteredConsoleMessages, maxHeight: constrainHeight ? debugConsoleMaxHeight : undefined, width: inputWidth }), _jsx(ShowMoreLines, { constrainHeight: constrainHeight })] }) })), isInputActive && (_jsx(InputPrompt, { buffer: buffer, inputWidth: inputWidth, suggestionsWidth: suggestionsWidth, onSubmit: handleFinalSubmit, userMessages: userMessages, onClearScreen: handleClearScreen, config: config, slashCommands: slashCommands, commandContext: commandContext, shellModeActive: shellModeActive, setShellModeActive: setShellModeActive, onEscapePromptChange: handleEscapePromptChange, focus: isFocused, vimHandleInput: vimHandleInput, placeholder: placeholder }))] })), initError && streamingState !== StreamingState.Responding && (_jsx(Box, { borderStyle: "round", borderColor: Colors.AccentRed, paddingX: 1, marginBottom: 1, children: history.find((item) => item.type === 'error' && item.text?.includes(initError))?.text ? (_jsx(Text, { color: Colors.AccentRed, children: history.find((item) => item.type === 'error' && item.text?.includes(initError))?.text })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.AccentRed, children: ["Initialization Error: ", initError] }), _jsxs(Text, { color: Colors.AccentRed, children: [' ', "Please check API key and configuration."] })] })) })), !settings.merged.ui?.hideFooter && (_jsx(Footer, { model: currentModel, targetDir: config.getTargetDir(), debugMode: config.getDebugMode(), branchName: branchName, debugMessage: debugMessage, corgiMode: corgiMode, errorCount: errorCount, showErrorDetails: showErrorDetails, showMemoryUsage: config.getDebugMode() ||
|
|
1423
|
+
!shellModeActive && (_jsx(AutoAcceptIndicator, { approvalMode: showAutoAcceptIndicator })), shellModeActive && _jsx(ShellModeIndicator, {})] })] }), showErrorDetails && (_jsx(OverflowProvider, { children: _jsxs(Box, { flexDirection: "column", children: [_jsx(DetailedMessagesDisplay, { messages: filteredConsoleMessages, maxHeight: constrainHeight ? debugConsoleMaxHeight : undefined, width: inputWidth }), _jsx(ShowMoreLines, { constrainHeight: constrainHeight })] }) })), isInputActive && (_jsx(InputPrompt, { buffer: buffer, inputWidth: inputWidth, suggestionsWidth: suggestionsWidth, onSubmit: handleFinalSubmit, userMessages: userMessages, onClearScreen: handleClearScreen, config: config, slashCommands: slashCommands, commandContext: commandContext, shellModeActive: shellModeActive, setShellModeActive: setShellModeActive, onEscapePromptChange: handleEscapePromptChange, focus: isFocused, vimHandleInput: vimHandleInput, placeholder: placeholder })), showHelpTip && isInputActive && history.length === 0 && (_jsxs(Box, { marginTop: 1, marginBottom: 1, flexDirection: "column", children: [_jsx(Text, { color: Colors.Gray, children: "Run /help for tips" }), _jsx(Text, { color: Colors.Gray, children: "Use Ctrl+J to newline" })] }))] })), initError && streamingState !== StreamingState.Responding && (_jsx(Box, { borderStyle: "round", borderColor: Colors.AccentRed, paddingX: 1, marginBottom: 1, children: history.find((item) => item.type === 'error' && item.text?.includes(initError))?.text ? (_jsx(Text, { color: Colors.AccentRed, children: history.find((item) => item.type === 'error' && item.text?.includes(initError))?.text })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { color: Colors.AccentRed, children: ["Initialization Error: ", initError] }), _jsxs(Text, { color: Colors.AccentRed, children: [' ', "Please check API key and configuration."] })] })) })), !settings.merged.ui?.hideFooter && (_jsx(Footer, { model: currentModel, targetDir: config.getTargetDir(), debugMode: config.getDebugMode(), branchName: branchName, debugMessage: debugMessage, corgiMode: corgiMode, errorCount: errorCount, showErrorDetails: showErrorDetails, showMemoryUsage: config.getDebugMode() ||
|
|
1189
1424
|
settings.merged.ui?.showMemoryUsage ||
|
|
1190
|
-
false, promptTokenCount: sessionStats.lastPromptTokenCount, nightly: nightly, vimMode: vimModeEnabled ? vimMode : undefined, isTrustedFolder: isTrustedFolderState, selectedAgent:
|
|
1425
|
+
false, promptTokenCount: sessionStats.lastPromptTokenCount, nightly: nightly, vimMode: vimModeEnabled ? vimMode : undefined, isTrustedFolder: isTrustedFolderState, selectedAgent: selectedAgentForFooter, agentModel: agentModelForFooter, activeAgentSession: sessionStats.activeAgentSession, agentRoutingDisabled: sessionStats.agentRoutingDisabled }))] })] }) }));
|
|
1191
1426
|
};
|
|
1192
1427
|
//# sourceMappingURL=App.js.map
|