centaurus-cli 2.8.9 → 2.9.0

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 (88) hide show
  1. package/dist/cli-adapter.d.ts +21 -2
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +302 -68
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/models.d.ts +8 -0
  6. package/dist/config/models.d.ts.map +1 -1
  7. package/dist/config/models.js +29 -0
  8. package/dist/config/models.js.map +1 -1
  9. package/dist/config/slash-commands.d.ts +1 -0
  10. package/dist/config/slash-commands.d.ts.map +1 -1
  11. package/dist/config/slash-commands.js +13 -1
  12. package/dist/config/slash-commands.js.map +1 -1
  13. package/dist/hooks/useConnectivity.d.ts +2 -0
  14. package/dist/hooks/useConnectivity.d.ts.map +1 -0
  15. package/dist/hooks/useConnectivity.js +12 -0
  16. package/dist/hooks/useConnectivity.js.map +1 -0
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/mcp/mcp-command-handler.d.ts.map +1 -1
  20. package/dist/mcp/mcp-command-handler.js +0 -3
  21. package/dist/mcp/mcp-command-handler.js.map +1 -1
  22. package/dist/mcp/mcp-tool-wrapper.d.ts.map +1 -1
  23. package/dist/mcp/mcp-tool-wrapper.js +8 -0
  24. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  25. package/dist/services/ai-service-client.d.ts +1 -0
  26. package/dist/services/ai-service-client.d.ts.map +1 -1
  27. package/dist/services/ai-service-client.js.map +1 -1
  28. package/dist/services/api-client.d.ts +26 -40
  29. package/dist/services/api-client.d.ts.map +1 -1
  30. package/dist/services/api-client.js +32 -34
  31. package/dist/services/api-client.js.map +1 -1
  32. package/dist/services/connectivity-manager.d.ts +18 -0
  33. package/dist/services/connectivity-manager.d.ts.map +1 -0
  34. package/dist/services/connectivity-manager.js +72 -0
  35. package/dist/services/connectivity-manager.js.map +1 -0
  36. package/dist/services/local-chat-storage.d.ts +5 -0
  37. package/dist/services/local-chat-storage.d.ts.map +1 -1
  38. package/dist/services/local-chat-storage.js +33 -0
  39. package/dist/services/local-chat-storage.js.map +1 -1
  40. package/dist/tools/background-command.d.ts +11 -0
  41. package/dist/tools/background-command.d.ts.map +1 -0
  42. package/dist/tools/background-command.js +162 -0
  43. package/dist/tools/background-command.js.map +1 -0
  44. package/dist/tools/command.d.ts.map +1 -1
  45. package/dist/tools/command.js +6 -3
  46. package/dist/tools/command.js.map +1 -1
  47. package/dist/tools/create-image.d.ts +10 -0
  48. package/dist/tools/create-image.d.ts.map +1 -0
  49. package/dist/tools/create-image.js +189 -0
  50. package/dist/tools/create-image.js.map +1 -0
  51. package/dist/ui/components/App.d.ts +3 -2
  52. package/dist/ui/components/App.d.ts.map +1 -1
  53. package/dist/ui/components/App.js +127 -44
  54. package/dist/ui/components/App.js.map +1 -1
  55. package/dist/ui/components/ContextWindowIndicator.d.ts.map +1 -1
  56. package/dist/ui/components/ContextWindowIndicator.js +43 -22
  57. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  58. package/dist/ui/components/InputBox.d.ts.map +1 -1
  59. package/dist/ui/components/InputBox.js +198 -199
  60. package/dist/ui/components/InputBox.js.map +1 -1
  61. package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
  62. package/dist/ui/components/MessageDisplay.js +8 -15
  63. package/dist/ui/components/MessageDisplay.js.map +1 -1
  64. package/dist/ui/components/SlashCommandAutocomplete.d.ts +2 -0
  65. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +1 -1
  66. package/dist/ui/components/SlashCommandAutocomplete.js +19 -10
  67. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  68. package/dist/ui/components/StatusBar.d.ts.map +1 -1
  69. package/dist/ui/components/StatusBar.js +4 -0
  70. package/dist/ui/components/StatusBar.js.map +1 -1
  71. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  72. package/dist/ui/components/ToolExecutionMessage.js +153 -39
  73. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  74. package/dist/ui/components/ToolExecutionStatus.d.ts.map +1 -1
  75. package/dist/ui/components/ToolExecutionStatus.js +1 -0
  76. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  77. package/dist/utils/chat-formatter.d.ts +12 -0
  78. package/dist/utils/chat-formatter.d.ts.map +1 -0
  79. package/dist/utils/chat-formatter.js +326 -0
  80. package/dist/utils/chat-formatter.js.map +1 -0
  81. package/dist/utils/input-classifier.d.ts.map +1 -1
  82. package/dist/utils/input-classifier.js +139 -20
  83. package/dist/utils/input-classifier.js.map +1 -1
  84. package/dist/utils/text-clipboard.d.ts +12 -0
  85. package/dist/utils/text-clipboard.d.ts.map +1 -0
  86. package/dist/utils/text-clipboard.js +63 -0
  87. package/dist/utils/text-clipboard.js.map +1 -0
  88. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-image.js","sourceRoot":"","sources":["../../src/tools/create-image.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,7 @@ interface AppProps {
49
49
  onPlanModeChange: (callback: (planMode: boolean) => void) => void;
50
50
  onPlanApprovalRequest: (callback: (plan: Plan) => Promise<boolean>) => void;
51
51
  onPlanCreated: (callback: (plan: Plan) => void) => void;
52
- onTaskCompleted: (callback: (task: PlanStep, taskNumber: number, totalTasks: number, completionNote?: string) => void) => void;
52
+ onTaskCompleted: (callback: (task: PlanStep, taskNumber: number, totalTasks: number, completionNote?: string, taskDescription?: string) => void) => void;
53
53
  onCommandModeChange: (callback: (commandMode: boolean) => void) => void;
54
54
  onToggleCommandMode: () => void;
55
55
  onBackgroundModeChange: (callback: (backgroundMode: boolean) => void) => void;
@@ -57,7 +57,7 @@ interface AppProps {
57
57
  onBackgroundTaskCountChange: (callback: (count: number) => void) => void;
58
58
  onSetAutoModeSetup: (callback: (enabled: boolean) => void) => void;
59
59
  onCwdChange: (callback: (cwd: string) => void) => void;
60
- onModelChange: (callback: (modelName: string) => void) => void;
60
+ onModelChange: (callback: (modelName: string, contextWindow: number) => void) => void;
61
61
  onSubshellContextChange: (callback: (context: SubshellContext) => void) => void;
62
62
  onPasswordRequest: (callback: (message: string) => Promise<string>) => void;
63
63
  onShellInput: (input: string) => void;
@@ -65,6 +65,7 @@ interface AppProps {
65
65
  onKillProcess: () => void;
66
66
  onInteractiveEditorMode: (callback: (active: boolean, command?: string, cwd?: string, remoteContext?: SubshellContext) => void) => void;
67
67
  onConnectionStatusUpdate: (callback: (status: ConnectionStatus) => void) => void;
68
+ onTokenCountUpdate: (callback: (tokens: number) => void) => void;
68
69
  onChatPickerSetup: (callback: (chats: Array<{
69
70
  id: string;
70
71
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/ui/components/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/ui/components/App.tsx"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import { TaskCompletedMessage } from './TaskCompletedMessage.js';
24
24
  import { PlanAcceptedMessage } from './PlanAcceptedMessage.js';
25
25
  import { processTerminalOutput } from '../../utils/terminal-output.js';
26
26
  import { BackgroundTaskManager } from '../../services/background-task-manager.js';
27
+ import { useConnectivity } from '../../hooks/useConnectivity.js';
27
28
  import { apiClient } from '../../services/api-client.js';
28
29
  import { conversationManager } from '../../services/conversation-manager.js';
29
30
  import { logDebug, logError } from '../../utils/logger.js';
@@ -136,30 +137,30 @@ const RenameInputScreen = ({ currentTitle, onRename, onCancel }) => {
136
137
  React.createElement(Box, { marginTop: 1 },
137
138
  React.createElement(Text, { dimColor: true }, "Press Enter to save, ESC to cancel"))));
138
139
  };
139
- export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode, onResponseReceived, onDirectMessage, onResponseStream, onThoughtStream, onThoughtComplete, onPickerSetup, onPickerSelection, onToolExecutionUpdate, onToolApprovalRequest, onToolStreamingOutput, onPlanModeChange, onPlanApprovalRequest, onPlanCreated, onTaskCompleted, onCommandModeChange, onToggleCommandMode, onBackgroundModeChange, onToggleBackgroundMode, onBackgroundTaskCountChange, onSetAutoModeSetup, onCwdChange, onModelChange, onSubshellContextChange, onPasswordRequest, onShellInput, onShellSignal, onKillProcess, onInteractiveEditorMode, onConnectionStatusUpdate, onChatPickerSetup, onChatPickerSelection, onChatDeletePickerSetup, onChatDeletePickerSelection, onChatListSetup, onChatRenamePickerSetup, onChatRename, onRestoreMessagesSetup, onUIMessageHistoryUpdate, onBackgroundTaskListSetup, onBackgroundTaskSelection, onBackgroundTaskCancelSetup, onBackgroundTaskCancel, onBackgroundTaskViewSetup }) => {
140
+ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode, onResponseReceived, onDirectMessage, onResponseStream, onThoughtStream, onThoughtComplete, onPickerSetup, onPickerSelection, onToolExecutionUpdate, onToolApprovalRequest, onToolStreamingOutput, onPlanModeChange, onPlanApprovalRequest, onPlanCreated, onTaskCompleted, onCommandModeChange, onToggleCommandMode, onBackgroundModeChange, onToggleBackgroundMode, onBackgroundTaskCountChange, onSetAutoModeSetup, onCwdChange, onModelChange, onSubshellContextChange, onPasswordRequest, onShellInput, onShellSignal, onKillProcess, onInteractiveEditorMode, onConnectionStatusUpdate, onTokenCountUpdate, onChatPickerSetup, onChatPickerSelection, onChatDeletePickerSetup, onChatDeletePickerSelection, onChatListSetup, onChatRenamePickerSetup, onChatRename, onRestoreMessagesSetup, onUIMessageHistoryUpdate, onBackgroundTaskListSetup, onBackgroundTaskSelection, onBackgroundTaskCancelSetup, onBackgroundTaskCancel, onBackgroundTaskViewSetup }) => {
140
141
  const { exit } = useApp();
141
142
  const autoAcceptRef = React.useRef(false);
142
143
  const setAutoModeCallbackRef = React.useRef(null);
144
+ // Connectivity State
145
+ const isConnected = useConnectivity();
143
146
  // Helper to clear screen
144
147
  const clearScreen = useCallback(() => {
145
148
  process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
146
149
  }, []);
147
- // Helper to get max tokens for a model
150
+ // Helper to get max tokens for a model (reads from cached backend config if available)
148
151
  const getMaxTokensForModel = useCallback((model) => {
149
- // Import dynamically to avoid circular dependencies
150
152
  try {
151
- const { getModelContextWindow } = require('../../config/models.js');
152
- return getModelContextWindow(model);
153
+ // Use sync function that reads from cached backend config
154
+ const { getModelContextWindowSync } = require('../../config/models.js');
155
+ return getModelContextWindowSync(model);
153
156
  }
154
157
  catch (error) {
155
- // Fallback to defaults if config loading fails
156
- if (model.includes('gemini-3'))
157
- return 2000000;
158
- if (model.includes('gemini-2.5'))
159
- return 2000000;
160
- if (model.includes('kimi'))
158
+ // Fallback defaults if import fails
159
+ if (model.toLowerCase().includes('kimi'))
161
160
  return 128000;
162
- return 2000000;
161
+ if (model.toLowerCase().includes('gemini'))
162
+ return 1000000;
163
+ return 1000000;
163
164
  }
164
165
  }, []);
165
166
  // Helper to estimate tokens (rough approximation: 1 token ≈ 4 characters)
@@ -284,24 +285,45 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
284
285
  }));
285
286
  });
286
287
  }, []);
288
+ // Fetch models config async and update maxTokens once loaded
289
+ // This ensures correct context window even on initial load
290
+ React.useEffect(() => {
291
+ const loadModelsConfig = async () => {
292
+ try {
293
+ // Import quickLog for debugging
294
+ const { quickLog } = await import('../../utils/conversation-logger.js');
295
+ quickLog(`[${new Date().toISOString()}] [App] loadModelsConfig effect starting, currentModel: ${initialModel}\n`);
296
+ const { fetchModelsConfig, getModelContextWindowSync } = await import('../../config/models.js');
297
+ quickLog(`[${new Date().toISOString()}] [App] fetchModelsConfig imported, calling...\n`);
298
+ const config = await fetchModelsConfig(); // This populates the cache
299
+ quickLog(`[${new Date().toISOString()}] [App] fetchModelsConfig returned, models count: ${config?.models?.length || 0}\n`);
300
+ // Now get maxTokens with the cached config
301
+ const newMaxTokens = getModelContextWindowSync(initialModel || 'gemini-2.5-flash');
302
+ quickLog(`[${new Date().toISOString()}] [App] Got newMaxTokens: ${newMaxTokens} for model "${initialModel}"\n`);
303
+ setState(prev => ({
304
+ ...prev,
305
+ maxTokens: newMaxTokens
306
+ }));
307
+ quickLog(`[${new Date().toISOString()}] [App] Updated state.maxTokens to ${newMaxTokens}\n`);
308
+ }
309
+ catch (error) {
310
+ // Log errors to file
311
+ try {
312
+ const { quickLog } = await import('../../utils/conversation-logger.js');
313
+ quickLog(`[${new Date().toISOString()}] [App] loadModelsConfig ERROR: ${error?.message || error}\n`);
314
+ }
315
+ catch { }
316
+ }
317
+ };
318
+ loadModelsConfig();
319
+ }, [initialModel]);
287
320
  // Keep ref in sync with state
288
321
  React.useEffect(() => {
289
322
  autoAcceptRef.current = state.autoAcceptMode;
290
323
  }, [state.autoAcceptMode]);
291
- // Update token count whenever messages change
292
- React.useEffect(() => {
293
- const allMessages = [...state.messageHistory];
294
- if (state.currentMessage) {
295
- allMessages.push(state.currentMessage);
296
- }
297
- const totalTokens = calculateTotalTokens(allMessages);
298
- if (totalTokens !== state.currentTokens) {
299
- setState(prev => ({
300
- ...prev,
301
- currentTokens: totalTokens
302
- }));
303
- }
304
- }, [state.messageHistory, state.currentMessage, calculateTotalTokens]);
324
+ // NOTE: Token count is now updated via onTokenCountUpdate callback from cli-adapter
325
+ // which tracks the actual AI conversation history including system prompt.
326
+ // The old UI-based calculation has been removed to avoid overwriting correct values.
305
327
  // Track if we're currently streaming
306
328
  const isStreamingRef = React.useRef(false);
307
329
  // Buffer content when terminal is too small for streaming display
@@ -1371,10 +1393,13 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1371
1393
  }, [onCwdChange]);
1372
1394
  // Set up callback to receive model changes
1373
1395
  React.useEffect(() => {
1374
- onModelChange((modelName) => {
1396
+ onModelChange((modelName, contextWindow) => {
1397
+ // Update both currentModel AND maxTokens when model changes
1398
+ // contextWindow is passed directly from cli-adapter, no lookup needed
1375
1399
  setState(prev => ({
1376
1400
  ...prev,
1377
- currentModel: modelName
1401
+ currentModel: modelName,
1402
+ maxTokens: contextWindow
1378
1403
  }));
1379
1404
  });
1380
1405
  }, [onModelChange]);
@@ -1387,6 +1412,15 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1387
1412
  }));
1388
1413
  });
1389
1414
  }, [onSubshellContextChange]);
1415
+ // Set up callback to receive actual AI context token count from cli-adapter
1416
+ React.useEffect(() => {
1417
+ onTokenCountUpdate((tokens) => {
1418
+ setState(prev => ({
1419
+ ...prev,
1420
+ currentTokens: tokens
1421
+ }));
1422
+ });
1423
+ }, [onTokenCountUpdate]);
1390
1424
  // Set up callback for plan approval requests
1391
1425
  React.useEffect(() => {
1392
1426
  onPlanApprovalRequest(async (plan) => {
@@ -1418,7 +1452,7 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1418
1452
  }, [onPlanCreated]);
1419
1453
  // Set up callback for task completion
1420
1454
  React.useEffect(() => {
1421
- onTaskCompleted((task, taskNumber, totalTasks, completionNote) => {
1455
+ onTaskCompleted((task, taskNumber, totalTasks, completionNote, taskDescription) => {
1422
1456
  // Add task completion message to history
1423
1457
  setState(prev => {
1424
1458
  const taskCompletedMessage = {
@@ -1429,7 +1463,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1429
1463
  taskCompletion: {
1430
1464
  taskNumber,
1431
1465
  totalTasks,
1432
- taskDescription: task.description,
1466
+ // Use the passed taskDescription if available (for subtasks), otherwise fall back to task.description
1467
+ taskDescription: taskDescription || task.description,
1433
1468
  completionNote
1434
1469
  }
1435
1470
  };
@@ -1761,16 +1796,30 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1761
1796
  }
1762
1797
  else if (!isSlashCommand) {
1763
1798
  // Only add user message to display if it's not a slash command
1764
- // (slash commands will show their response only)
1799
+ // Show user message IMMEDIATELY with image breadcrumbs (uploading state)
1800
+ // Images will be uploaded in background, then AI will be called
1801
+ const hasImagesToUpload = clipboardImages && clipboardImages.length > 0;
1802
+ // Build initial content with placeholder image markers for immediate display
1803
+ let initialDisplayContent = trimmedValue;
1804
+ if (hasImagesToUpload) {
1805
+ // Add placeholder markers that will be shown immediately
1806
+ for (let i = 0; i < clipboardImages.length; i++) {
1807
+ const image = clipboardImages[i];
1808
+ // Use a placeholder format that MessageDisplay can render as breadcrumb
1809
+ // Format: [IMAGE: filename (uploading...)] - will be updated after upload
1810
+ initialDisplayContent = `${initialDisplayContent} [IMAGE: ${image.displayName} (gs://uploading)]`;
1811
+ }
1812
+ }
1813
+ // Generate a stable message ID that we can use to update the message later
1814
+ const userMessageId = `user-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
1765
1815
  setState(prev => {
1766
- // Move current message to history if exists
1767
1816
  const newHistory = prev.currentMessage
1768
1817
  ? [...prev.messageHistory, prev.currentMessage]
1769
1818
  : prev.messageHistory;
1770
1819
  const userMessage = {
1771
- id: `user-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
1820
+ id: userMessageId,
1772
1821
  role: 'user',
1773
- content: trimmedValue,
1822
+ content: initialDisplayContent,
1774
1823
  timestamp: new Date()
1775
1824
  };
1776
1825
  return {
@@ -1778,8 +1827,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1778
1827
  messageHistory: [...newHistory, userMessage],
1779
1828
  currentMessage: null,
1780
1829
  isLoading: true,
1781
- loadingMessage: 'Processing your request...',
1782
- isAiWorking: true // AI is starting to work
1830
+ loadingMessage: hasImagesToUpload ? 'Uploading image(s)...' : 'Processing your request...',
1831
+ isAiWorking: true
1783
1832
  };
1784
1833
  });
1785
1834
  }
@@ -1840,7 +1889,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1840
1889
  // Only attempt upload if we have a valid conversation ID
1841
1890
  if (conversationId && !conversationId.startsWith('temp_')) {
1842
1891
  logDebug(`[CLIPBOARD] Starting upload for ${clipboardImages.length} images with conversationId: ${conversationId}`);
1843
- // Upload each clipboard image
1892
+ // Upload each clipboard image and build the final message content
1893
+ const uploadedImageMarkers = [];
1844
1894
  for (const image of clipboardImages) {
1845
1895
  try {
1846
1896
  logDebug(`[CLIPBOARD] Uploading image: ${image.displayName}, size: ${image.sizeBytes} bytes`);
@@ -1849,19 +1899,50 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1849
1899
  // Append image reference info to message (for AI to know an image was attached)
1850
1900
  // The backend will use gcsUri for Vertex AI multimodal input
1851
1901
  if (uploadResult.gcsUri) {
1852
- // Replace #image with the actual gcsUri marker
1853
- // Case insensitive, first occurrence only
1854
- messageWithImages = messageWithImages.replace(/#image\b/i, `[IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
1855
- logDebug(`[CLIPBOARD] Replaced #image with: [IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
1902
+ // Build the real image marker with actual GCS URI
1903
+ messageWithImages = `${messageWithImages} [IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`;
1904
+ uploadedImageMarkers.push(`[IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
1905
+ logDebug(`[CLIPBOARD] Appended image marker: [IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
1856
1906
  }
1857
1907
  }
1858
1908
  catch (uploadError) {
1859
1909
  // Log error but continue - image upload is optional
1860
1910
  logError('Failed to upload clipboard image', uploadError instanceof Error ? uploadError : undefined);
1861
- // Remove the #image placeholder if upload failed
1862
- messageWithImages = messageWithImages.replace(/#image\b/i, '[IMAGE UPLOAD FAILED]');
1911
+ // Add a failed marker so user knows upload failed
1912
+ uploadedImageMarkers.push(`[IMAGE: ${image.displayName} (upload failed)]`);
1863
1913
  }
1864
1914
  }
1915
+ // Update the user message in history with actual GCS URIs
1916
+ // Replace placeholder markers (gs://uploading) with real ones
1917
+ setState(prev => {
1918
+ const updatedHistory = prev.messageHistory.map(msg => {
1919
+ // Find the user message we just added (it has placeholder markers)
1920
+ if (msg.role === 'user' && msg.content.includes('(gs://uploading)')) {
1921
+ // Build new content: original text + real image markers
1922
+ let newContent = trimmedValue;
1923
+ for (const marker of uploadedImageMarkers) {
1924
+ newContent = `${newContent} ${marker}`;
1925
+ }
1926
+ return { ...msg, content: newContent };
1927
+ }
1928
+ return msg;
1929
+ });
1930
+ return { ...prev, messageHistory: updatedHistory };
1931
+ });
1932
+ }
1933
+ else {
1934
+ // No valid conversation ID - update message to show upload failed
1935
+ setState(prev => {
1936
+ const updatedHistory = prev.messageHistory.map(msg => {
1937
+ if (msg.role === 'user' && msg.content.includes('(gs://uploading)')) {
1938
+ // Replace uploading placeholders with failed markers
1939
+ const newContent = msg.content.replace(/\(gs:\/\/uploading\)/g, '(upload failed - no conversation)');
1940
+ return { ...msg, content: newContent };
1941
+ }
1942
+ return msg;
1943
+ });
1944
+ return { ...prev, messageHistory: updatedHistory };
1945
+ });
1865
1946
  } // End: if (conversationId && !startsWith temp_)
1866
1947
  } // End: if (clipboardImages && clipboardImages.length > 0)
1867
1948
  await onMessage(messageWithImages);
@@ -1979,7 +2060,9 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
1979
2060
  setAutoModeCallbackRef.current = callback;
1980
2061
  } }))),
1981
2062
  state.showExitWarning && (React.createElement(Box, { marginTop: 1 },
1982
- React.createElement(Text, { color: "#ffaa00", bold: true }, "\u26A0\uFE0F Press Ctrl+C again to exit"))))),
2063
+ React.createElement(Text, { color: "#ffaa00", bold: true }, "\u26A0\uFE0F Press Ctrl+C again to exit"))),
2064
+ !isConnected && (React.createElement(Box, { marginTop: 0, marginLeft: state.showExitWarning ? 2 : 0 },
2065
+ React.createElement(Text, { color: "red", bold: true }, "\u26A0\uFE0F No internet connection"))))),
1983
2066
  state.screen === 'approval' && state.approvalRequest && (React.createElement(ApprovalSection, { key: `approval-${state.approvalRequest.message}`, approvalRequest: state.approvalRequest, onApprove: (approved) => {
1984
2067
  const resolve = state.approvalRequest?.resolve;
1985
2068
  if (resolve) {