@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.
Files changed (153) hide show
  1. package/dist/assets/notification.mp3 +0 -0
  2. package/dist/package.json +2 -2
  3. package/dist/src/commands/voice.js +39 -34
  4. package/dist/src/commands/voice.js.map +1 -1
  5. package/dist/src/config/config.js +1 -4
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/config/settings.d.ts +2 -0
  8. package/dist/src/config/settings.js +22 -1
  9. package/dist/src/config/settings.js.map +1 -1
  10. package/dist/src/config/settingsSchema.d.ts +36 -7
  11. package/dist/src/config/settingsSchema.js +35 -8
  12. package/dist/src/config/settingsSchema.js.map +1 -1
  13. package/dist/src/gemini.js +25 -20
  14. package/dist/src/gemini.js.map +1 -1
  15. package/dist/src/generated/git-commit.d.ts +2 -2
  16. package/dist/src/generated/git-commit.js +2 -2
  17. package/dist/src/services/BuiltinCommandLoader.js +2 -2
  18. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  19. package/dist/src/services/agentExecutor.d.ts +5 -0
  20. package/dist/src/services/agentExecutor.js +6 -2
  21. package/dist/src/services/agentExecutor.js.map +1 -1
  22. package/dist/src/services/voiceRecordingService.d.ts +13 -1
  23. package/dist/src/services/voiceRecordingService.js +38 -5
  24. package/dist/src/services/voiceRecordingService.js.map +1 -1
  25. package/dist/src/ui/App.js +255 -20
  26. package/dist/src/ui/App.js.map +1 -1
  27. package/dist/src/ui/commands/agentCommand.js +134 -43
  28. package/dist/src/ui/commands/agentCommand.js.map +1 -1
  29. package/dist/src/ui/commands/modelCommand.js +15 -2
  30. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  31. package/dist/src/ui/commands/quitCommand.js +5 -0
  32. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  33. package/dist/src/ui/commands/subAgentsCommand.d.ts +7 -0
  34. package/dist/src/ui/commands/subAgentsCommand.js +32 -0
  35. package/dist/src/ui/commands/subAgentsCommand.js.map +1 -0
  36. package/dist/src/ui/commands/types.d.ts +14 -3
  37. package/dist/src/ui/commands/types.js.map +1 -1
  38. package/dist/src/ui/commands/voiceCommand.js +70 -34
  39. package/dist/src/ui/commands/voiceCommand.js.map +1 -1
  40. package/dist/src/ui/commands/voiceCommand.test.d.ts +6 -0
  41. package/dist/src/ui/commands/voiceCommand.test.js +131 -0
  42. package/dist/src/ui/commands/voiceCommand.test.js.map +1 -0
  43. package/dist/src/ui/components/AgentModelSelector.js +1 -1
  44. package/dist/src/ui/components/AgentModelSelector.js.map +1 -1
  45. package/dist/src/ui/components/AgentSetDialog.d.ts +15 -0
  46. package/dist/src/ui/components/AgentSetDialog.js +52 -0
  47. package/dist/src/ui/components/AgentSetDialog.js.map +1 -0
  48. package/dist/src/ui/components/ApiKeyInputDialog.d.ts +17 -0
  49. package/dist/src/ui/components/ApiKeyInputDialog.js +44 -0
  50. package/dist/src/ui/components/ApiKeyInputDialog.js.map +1 -0
  51. package/dist/src/ui/components/AuthDialog.js +32 -46
  52. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  53. package/dist/src/ui/components/Footer.d.ts +6 -0
  54. package/dist/src/ui/components/Footer.js +17 -2
  55. package/dist/src/ui/components/Footer.js.map +1 -1
  56. package/dist/src/ui/components/GenericProviderKeyPrompt.js +1 -1
  57. package/dist/src/ui/components/GenericProviderKeyPrompt.js.map +1 -1
  58. package/dist/src/ui/components/Header.js +2 -9
  59. package/dist/src/ui/components/Header.js.map +1 -1
  60. package/dist/src/ui/components/HistoryBrowserDialog.js +2 -1
  61. package/dist/src/ui/components/HistoryBrowserDialog.js.map +1 -1
  62. package/dist/src/ui/components/InputPrompt.js +3 -1
  63. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  64. package/dist/src/ui/components/MemoryUsageDisplay.js +41 -8
  65. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  66. package/dist/src/ui/components/SettingsDialog.js +4 -3
  67. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  68. package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
  69. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  70. package/dist/src/ui/components/Tips.js +1 -1
  71. package/dist/src/ui/components/Tips.js.map +1 -1
  72. package/dist/src/ui/components/agents/SingleAgentDialog.d.ts +7 -4
  73. package/dist/src/ui/components/agents/SingleAgentDialog.js +135 -63
  74. package/dist/src/ui/components/agents/SingleAgentDialog.js.map +1 -1
  75. package/dist/src/ui/components/messages/DiffRenderer.js +1 -9
  76. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  77. package/dist/src/ui/components/messages/ErrorMessage.js +2 -1
  78. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
  79. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  80. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  81. package/dist/src/ui/components/messages/ToolGroupMessage.js +4 -1
  82. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  83. package/dist/src/ui/components/messages/UserMessage.js +1 -2
  84. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  85. package/dist/src/ui/components/shared/RadioButtonSelect.js +14 -4
  86. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  87. package/dist/src/ui/contexts/SessionContext.d.ts +18 -0
  88. package/dist/src/ui/contexts/SessionContext.js +25 -1
  89. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  90. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -2
  91. package/dist/src/ui/hooks/slashCommandProcessor.js +54 -2
  92. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  93. package/dist/src/ui/hooks/useAgentCommandProcessor.d.ts +12 -2
  94. package/dist/src/ui/hooks/useAgentCommandProcessor.js +169 -4
  95. package/dist/src/ui/hooks/useAgentCommandProcessor.js.map +1 -1
  96. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -1
  97. package/dist/src/ui/hooks/useAuthCommand.js +22 -2
  98. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  99. package/dist/src/ui/hooks/useDialogClose.d.ts +2 -0
  100. package/dist/src/ui/hooks/useDialogClose.js +5 -0
  101. package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
  102. package/dist/src/ui/hooks/useEncryptedStream.d.ts +2 -1
  103. package/dist/src/ui/hooks/useEncryptedStream.js +17 -4
  104. package/dist/src/ui/hooks/useEncryptedStream.js.map +1 -1
  105. package/dist/src/ui/hooks/useGeminiStream.js +216 -21
  106. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  107. package/dist/src/ui/hooks/useInputBoxColor.d.ts +13 -0
  108. package/dist/src/ui/hooks/useInputBoxColor.js +62 -0
  109. package/dist/src/ui/hooks/useInputBoxColor.js.map +1 -0
  110. package/dist/src/ui/hooks/useMessageQueue.d.ts +7 -1
  111. package/dist/src/ui/hooks/useMessageQueue.js +9 -3
  112. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  113. package/dist/src/ui/utils/agentConversationUtils.d.ts +28 -0
  114. package/dist/src/ui/utils/agentConversationUtils.js +71 -0
  115. package/dist/src/ui/utils/agentConversationUtils.js.map +1 -0
  116. package/dist/src/ui/utils/colorBlend.d.ts +33 -0
  117. package/dist/src/ui/utils/colorBlend.js +61 -0
  118. package/dist/src/ui/utils/colorBlend.js.map +1 -0
  119. package/dist/src/ui/utils/commandUtils.d.ts +2 -1
  120. package/dist/src/ui/utils/commandUtils.js +14 -1
  121. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  122. package/dist/src/ui/utils/commandUtils.test.js +25 -0
  123. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  124. package/dist/src/ui/utils/terminalBackgroundDetector.d.ts +16 -0
  125. package/dist/src/ui/utils/terminalBackgroundDetector.js +124 -23
  126. package/dist/src/ui/utils/terminalBackgroundDetector.js.map +1 -1
  127. package/dist/src/utils/agentCommandBuilder.d.ts +16 -4
  128. package/dist/src/utils/agentCommandBuilder.js +66 -26
  129. package/dist/src/utils/agentCommandBuilder.js.map +1 -1
  130. package/dist/src/utils/apiKeyUtils.d.ts +47 -0
  131. package/dist/src/utils/apiKeyUtils.js +177 -0
  132. package/dist/src/utils/apiKeyUtils.js.map +1 -0
  133. package/dist/src/utils/backgroundUpdateCheck.js +104 -7
  134. package/dist/src/utils/backgroundUpdateCheck.js.map +1 -1
  135. package/dist/src/utils/memoryManager.d.ts +85 -0
  136. package/dist/src/utils/memoryManager.js +258 -0
  137. package/dist/src/utils/memoryManager.js.map +1 -0
  138. package/dist/src/utils/memoryMonitor.d.ts +89 -0
  139. package/dist/src/utils/memoryMonitor.js +238 -0
  140. package/dist/src/utils/memoryMonitor.js.map +1 -0
  141. package/dist/src/utils/memoryWrapper.d.ts +18 -0
  142. package/dist/src/utils/memoryWrapper.js +62 -0
  143. package/dist/src/utils/memoryWrapper.js.map +1 -0
  144. package/dist/src/utils/preLaunchUpdateCheck.js +17 -7
  145. package/dist/src/utils/preLaunchUpdateCheck.js.map +1 -1
  146. package/dist/src/utils/soundNotification.d.ts +15 -0
  147. package/dist/src/utils/soundNotification.js +138 -0
  148. package/dist/src/utils/soundNotification.js.map +1 -0
  149. package/dist/src/utils/versionStorage.d.ts +20 -0
  150. package/dist/src/utils/versionStorage.js +62 -0
  151. package/dist/src/utils/versionStorage.js.map +1 -1
  152. package/dist/tsconfig.tsbuildinfo +1 -1
  153. 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
- async cancelRecording() {
376
+ handleCancellation() {
364
377
  if (!this.ffmpegProcess) {
365
378
  return;
366
379
  }
367
- debugLog('Cancelling recording...');
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
- fs.unlinkSync(filePath);
383
- debugLog('Recording file deleted:', filePath);
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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAEvD,wDAAwD;AACxD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC;AAEhK,SAAS,QAAQ,CAAC,GAAG,IAAe;IAClC,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAgBD;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IACf,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,WAAW,CAAS;IAC7B,aAAa,GAAwB,IAAI,CAAC;IAC1C,cAAc,GAAkB,IAAI,CAAC;IACrC,UAAU,GAA0B,IAAI,CAAC;IACzC,SAAS,GAAkB,IAAI,CAAC;IAChC,WAAW,GAAoB,IAAI,CAAC;IAE5C,YAAY,SAA+B,EAAE;QAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB;QACnC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;QAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC;YACxC,MAAM,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAErE,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;YACrC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACtC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC3C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACtD,QAAQ,CAAC,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,wFAAwF;gBACxF,UAAU;gBACV,yCAAyC;gBACzC,+BAA+B;gBAC/B,2CAA2C;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,mDAAmD;oBACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;wBAC9C,cAAc,GAAG,IAAI,CAAC;wBACtB,SAAS;oBACX,CAAC;oBAED,8EAA8E;oBAC9E,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC;wBAC5D,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC5F,MAAM;oBACR,CAAC;oBAED,0CAA0C;oBAC1C,IAAI,cAAc,EAAE,CAAC;wBACnB,0EAA0E;wBAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;wBAC9D,IAAI,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;4BACxE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,gEAAgE;gBAChE,8CAA8C;gBAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,QAAQ,CAAC,6DAA6D,CAAC,CAAC;oBACxE,MAAM,gBAAgB,GAAG,2CAA2C,CAAC;oBACrE,IAAI,KAAK,CAAC;oBAEV,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACxD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;4BACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACxE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACpC,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAChC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,QAAQ,CAAC,2CAA2C,EAAE,QAAQ,CAAC,CAAC;QAEhE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ,EAAE,QAAQ;gBACrB,QAAQ,CAAC,oDAAoD,CAAC,CAAC;gBAC/D,OAAO;oBACL,MAAM,EAAE,cAAc;oBACtB,MAAM,EAAE,IAAI,EAAE,6BAA6B;iBAC5C,CAAC;YACJ,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,+DAA+D;gBAC/D,+EAA+E;gBAC/E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAErD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,QAAQ,CAAC,0CAA0C,CAAC,CAAC;oBACrD,MAAM,IAAI,KAAK,CACb,gDAAgD;wBAChD,2EAA2E;wBAC3E,8DAA8D;wBAC9D,wFAAwF,CACzF,CAAC;gBACJ,CAAC;gBAED,uCAAuC;gBACvC,sDAAsD;gBACtD,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,gCAAgC,EAAE,UAAU,CAAC,CAAC;gBACvD,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,SAAS,UAAU,EAAE;iBAC9B,CAAC;YACJ,CAAC;YACD,KAAK,OAAO;gBACV,QAAQ,CAAC,sCAAsC,CAAC,CAAC;gBACjD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,SAAS,EAAE,sBAAsB;iBAC1C,CAAC;YACJ;gBACE,QAAQ,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAClB,UAAmB,EACnB,YAAsC;QAEtC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,cAAc,GAAG,UAAU,IAAI,IAAI,CAAC;QACzC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAClC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,kBAAkB,CAAC,CAAC;QACpE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC;YACxC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC;oBAEH,2CAA2C;oBAC3C,MAAM,IAAI,GAAG;wBACX,IAAI,EAAE,MAAM,EAAY,eAAe;wBACvC,IAAI,EAAE,MAAM,EAAY,eAAe;wBACvC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,cAAc;wBAC9C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAI,qBAAqB;wBACrD,SAAS,EAAE,WAAW,EAAE,2BAA2B;wBACnD,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB;wBACxC,GAAG,CAAqB,0BAA0B;qBACnD,CAAC;oBAEF,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAExD,uBAAuB;oBACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;wBAC3C,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;qBAClC,CAAC,CAAC;oBAEH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5B,QAAQ,CAAC,8BAA8B,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBAEjE,mCAAmC;oBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAkB,CAAC;oBAEzD,iEAAiE;oBACjE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBAC5D,QAAQ,CAAC,0BAA0B,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC5D,CAAC;oBAED,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,IAAI,UAAU,GAAG,CAAC,CAAC;oBAEnB,oBAAoB;oBACpB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAC5C,UAAU,EAAE,CAAC;wBACb,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;wBAE3B,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;4BACrB,QAAQ,CAAC,mCAAmC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBACvE,CAAC;6BAAM,IAAI,UAAU,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;4BAClC,sCAAsC;4BACtC,QAAQ,CAAC,iBAAiB,UAAU,kBAAkB,UAAU,EAAE,CAAC,CAAC;wBACtE,CAAC;wBAED,2CAA2C;wBAC3C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC/B,CAAC;wBAED,2CAA2C;wBAC3C,IAAI,YAAY,EAAE,CAAC;4BACjB,YAAY,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,4BAA4B;oBAC5B,MAAM,YAAY,GAAa,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBACtD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACzB,IAAI,UAAU,EAAE,CAAC;4BACf,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACpC,qCAAqC;4BACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gCACnE,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;4BAChD,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,wBAAwB;oBACxB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;wBAC9C,QAAQ,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBACjD,IAAI,CAAC,OAAO,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAChE,CAAC,CAAC,CAAC;oBAEH,sBAAsB;oBACtB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;wBAC9C,QAAQ,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;wBACnD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;4BAChC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;4BACrD,QAAQ,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;4BAE/C,qDAAqD;4BACrD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;gCACzD,IAAI,CAAC,OAAO,EAAE,CAAC;gCACf,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAC9B,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC;oBAEH,8CAA8C;oBAC9C,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;4BACrD,QAAQ,CAAC,gCAAgC,CAAC,CAAC;4BAC3C,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;wBACrC,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,uCAAuC,CAAC,CAAC;4BAClD,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBACtD,CAAC;oBACH,CAAC,EAAE,GAAG,CAAC,CAAC;gBACV,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,MAAM,CACJ,IAAI,KAAK,CAAC,8BAA8B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAClE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,YAAoB;QAC3C,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAE/C,IAAI,WAAW,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACjD,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,gDAAgD;oBAChD,2EAA2E;oBAC3E,8DAA8D;oBAC9D,wFAAwF,CAAC;YAClG,CAAC;YACD,OAAO,wEAAwE,CAAC;QAClF,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1C,OAAO,8EAA8E,CAAC;QACxF,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACpD,OAAO,sDAAsD,CAAC;QAChE,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACvE,OAAO,8EAA8E,CAAC;QACxF,CAAC;QAED,qDAAqD;QACrD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,iBAAiB,aAAa,IAAI,wBAAwB,EAAE,CAAC;IACtE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QAElC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAU,CAAC;YAElC,iCAAiC;YACjC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACjC,CAAC;YAED,+CAA+C;YAC/C,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBACrD,QAAQ,CAAC,mCAAmC,CAAC,CAAC;gBAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YAED,8DAA8D;YAC9D,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC7D,IAAI,IAAI,GAAG,CAAC,CAAC;oBAEb,0CAA0C;oBAC1C,IAAI,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACxC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACpC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;wBAClB,QAAQ,CAAC,8BAA8B,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAC1F,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,iDAAiD,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACnF,CAAC;oBAED,IAAI,CAAC,OAAO,EAAE,CAAC;oBAEf,OAAO,CAAC;wBACN,QAAQ;wBACR,QAAQ;wBACR,IAAI;qBACL,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,MAAM,CACJ,IAAI,KAAK,CAAC,gCAAgC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CACpE,CAAC;gBACJ,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,yBAAyB,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QAErC,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC/B,QAAQ,CAAC,mCAAmC,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAED,iCAAiC;QACjC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACtB,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,mDAAmD;QACnD,IAAI,QAAQ,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,OAAO;QACb,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"voiceRecordingService.js","sourceRoot":"","sources":["../../../src/services/voiceRecordingService.ts"],"names":[],"mappings":"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"}
@@ -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
- stdout.write(ansiEscapes.clearTerminal);
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: "90%", children: [_jsx(Static, { items: [
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
- // Save configuration to settings ONLY
1110
- // Do NOT set the model in config - that would try to use it with current API
1111
- // The /agents command will use this config to execute the appropriate CLI tool
1112
- settings.setValue(SettingScope.User, 'singleAgent', singleAgentConfig);
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: `Agent configuration saved: ${singleAgentConfig.selectedAgent} with model ${singleAgentConfig.model}. You're now working with ${singleAgentConfig.selectedAgent}.`,
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 || 'blackbox'),
1120
- model: settings.merged.singleAgent?.model || 'coder-model',
1121
- }, hasOpenAIKey: !!process.env['OPENAI_API_KEY']?.startsWith('sk-'), hasGeminiKey: !!process.env['GEMINI_API_KEY'] }) })) : isMultiAgentConfigDialogOpen ? (_jsx(Box, { flexDirection: "column", children: _jsx(MultiAgentConfigDialog, { onComplete: (multiAgentConfig) => {
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: settings.merged.singleAgent?.selectedAgent, agentModel: settings.merged.singleAgent?.model }))] })] }) }));
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