centaurus-cli 2.8.9 → 2.9.1
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/cli-adapter.d.ts +29 -2
- package/dist/cli-adapter.d.ts.map +1 -1
- package/dist/cli-adapter.js +526 -84
- package/dist/cli-adapter.js.map +1 -1
- package/dist/config/build-config.d.ts +1 -1
- package/dist/config/build-config.js +1 -1
- package/dist/config/models.d.ts +8 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +29 -0
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.d.ts +1 -0
- package/dist/config/slash-commands.d.ts.map +1 -1
- package/dist/config/slash-commands.js +14 -1
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/hooks/useConnectivity.d.ts +2 -0
- package/dist/hooks/useConnectivity.d.ts.map +1 -0
- package/dist/hooks/useConnectivity.js +12 -0
- package/dist/hooks/useConnectivity.js.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.d.ts.map +1 -1
- package/dist/mcp/mcp-command-handler.js +0 -3
- package/dist/mcp/mcp-command-handler.js.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.d.ts.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.js +8 -0
- package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
- package/dist/services/ai-service-client.d.ts +7 -1
- package/dist/services/ai-service-client.d.ts.map +1 -1
- package/dist/services/ai-service-client.js +6 -6
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.d.ts +35 -38
- package/dist/services/api-client.d.ts.map +1 -1
- package/dist/services/api-client.js +38 -30
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/connectivity-manager.d.ts +18 -0
- package/dist/services/connectivity-manager.d.ts.map +1 -0
- package/dist/services/connectivity-manager.js +72 -0
- package/dist/services/connectivity-manager.js.map +1 -0
- package/dist/services/local-chat-storage.d.ts +5 -0
- package/dist/services/local-chat-storage.d.ts.map +1 -1
- package/dist/services/local-chat-storage.js +33 -0
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/session-quota-manager.d.ts +101 -0
- package/dist/services/session-quota-manager.d.ts.map +1 -0
- package/dist/services/session-quota-manager.js +242 -0
- package/dist/services/session-quota-manager.js.map +1 -0
- package/dist/tools/background-command.d.ts +11 -0
- package/dist/tools/background-command.d.ts.map +1 -0
- package/dist/tools/background-command.js +162 -0
- package/dist/tools/background-command.js.map +1 -0
- package/dist/tools/command.d.ts.map +1 -1
- package/dist/tools/command.js +20 -6
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/create-image.d.ts +10 -0
- package/dist/tools/create-image.d.ts.map +1 -0
- package/dist/tools/create-image.js +189 -0
- package/dist/tools/create-image.js.map +1 -0
- package/dist/tools/get-diff.d.ts.map +1 -1
- package/dist/tools/get-diff.js +4 -1
- package/dist/tools/get-diff.js.map +1 -1
- package/dist/tools/task-complete.d.ts.map +1 -1
- package/dist/tools/task-complete.js +8 -14
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/ui/components/App.d.ts +5 -2
- package/dist/ui/components/App.d.ts.map +1 -1
- package/dist/ui/components/App.js +165 -45
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.js +43 -22
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
- package/dist/ui/components/InputBox.d.ts +2 -0
- package/dist/ui/components/InputBox.d.ts.map +1 -1
- package/dist/ui/components/InputBox.js +217 -200
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.d.ts.map +1 -1
- package/dist/ui/components/MessageDisplay.js +8 -15
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/SlashCommandAutocomplete.d.ts +2 -0
- package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +1 -1
- package/dist/ui/components/SlashCommandAutocomplete.js +19 -10
- package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
- package/dist/ui/components/StatusBar.d.ts.map +1 -1
- package/dist/ui/components/StatusBar.js +4 -0
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +198 -39
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.d.ts.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.js +1 -0
- package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
- package/dist/utils/chat-formatter.d.ts +12 -0
- package/dist/utils/chat-formatter.d.ts.map +1 -0
- package/dist/utils/chat-formatter.js +326 -0
- package/dist/utils/chat-formatter.js.map +1 -0
- package/dist/utils/editor-utils.d.ts +3 -3
- package/dist/utils/editor-utils.d.ts.map +1 -1
- package/dist/utils/editor-utils.js +15 -12
- package/dist/utils/editor-utils.js.map +1 -1
- package/dist/utils/input-classifier.d.ts.map +1 -1
- package/dist/utils/input-classifier.js +140 -20
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/terminal-output.d.ts.map +1 -1
- package/dist/utils/terminal-output.js +198 -171
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/text-clipboard.d.ts +12 -0
- package/dist/utils/text-clipboard.d.ts.map +1 -0
- package/dist/utils/text-clipboard.js +63 -0
- package/dist/utils/text-clipboard.js.map +1 -0
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ interface AppProps {
|
|
|
11
11
|
onResponseReceived: (callback: (message: string) => void) => void;
|
|
12
12
|
onDirectMessage: (callback: (message: string) => void) => void;
|
|
13
13
|
onResponseStream: (callback: (chunk: string) => void) => void;
|
|
14
|
+
onClearStreamedResponse: (callback: () => void) => void;
|
|
14
15
|
onThoughtStream: (callback: (thought: string) => void) => void;
|
|
15
16
|
onThoughtComplete: (callback: (durationSeconds: number) => void) => void;
|
|
16
17
|
onPickerSetup: (callback: (options: {
|
|
@@ -49,7 +50,7 @@ interface AppProps {
|
|
|
49
50
|
onPlanModeChange: (callback: (planMode: boolean) => void) => void;
|
|
50
51
|
onPlanApprovalRequest: (callback: (plan: Plan) => Promise<boolean>) => void;
|
|
51
52
|
onPlanCreated: (callback: (plan: Plan) => void) => void;
|
|
52
|
-
onTaskCompleted: (callback: (task: PlanStep, taskNumber: number, totalTasks: number, completionNote?: string) => void) => void;
|
|
53
|
+
onTaskCompleted: (callback: (task: PlanStep, taskNumber: number, totalTasks: number, completionNote?: string, taskDescription?: string) => void) => void;
|
|
53
54
|
onCommandModeChange: (callback: (commandMode: boolean) => void) => void;
|
|
54
55
|
onToggleCommandMode: () => void;
|
|
55
56
|
onBackgroundModeChange: (callback: (backgroundMode: boolean) => void) => void;
|
|
@@ -57,7 +58,7 @@ interface AppProps {
|
|
|
57
58
|
onBackgroundTaskCountChange: (callback: (count: number) => void) => void;
|
|
58
59
|
onSetAutoModeSetup: (callback: (enabled: boolean) => void) => void;
|
|
59
60
|
onCwdChange: (callback: (cwd: string) => void) => void;
|
|
60
|
-
onModelChange: (callback: (modelName: string) => void) => void;
|
|
61
|
+
onModelChange: (callback: (modelName: string, contextWindow: number) => void) => void;
|
|
61
62
|
onSubshellContextChange: (callback: (context: SubshellContext) => void) => void;
|
|
62
63
|
onPasswordRequest: (callback: (message: string) => Promise<string>) => void;
|
|
63
64
|
onShellInput: (input: string) => void;
|
|
@@ -65,6 +66,7 @@ interface AppProps {
|
|
|
65
66
|
onKillProcess: () => void;
|
|
66
67
|
onInteractiveEditorMode: (callback: (active: boolean, command?: string, cwd?: string, remoteContext?: SubshellContext) => void) => void;
|
|
67
68
|
onConnectionStatusUpdate: (callback: (status: ConnectionStatus) => void) => void;
|
|
69
|
+
onTokenCountUpdate: (callback: (tokens: number) => void) => void;
|
|
68
70
|
onChatPickerSetup: (callback: (chats: Array<{
|
|
69
71
|
id: string;
|
|
70
72
|
title: string;
|
|
@@ -126,6 +128,7 @@ interface AppProps {
|
|
|
126
128
|
onOutput: (handler: (chunk: string) => void) => void;
|
|
127
129
|
onComplete: (handler: (exitCode: number) => void) => void;
|
|
128
130
|
}) => void) => void;
|
|
131
|
+
onSessionQuotaUpdate: (callback: (remaining: number, canSend: boolean, timeRemaining: string) => void) => void;
|
|
129
132
|
}
|
|
130
133
|
export declare const App: React.FC<AppProps>;
|
|
131
134
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/ui/components/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAsBrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAO1D,OAAO,EAA2B,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;
|
|
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, onClearStreamedResponse, 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, onSessionQuotaUpdate }) => {
|
|
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
|
-
|
|
152
|
-
|
|
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
|
|
156
|
-
if (model.includes('
|
|
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
|
-
|
|
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)
|
|
@@ -202,6 +203,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
202
203
|
passwordRequest: undefined,
|
|
203
204
|
connectionStatus: undefined,
|
|
204
205
|
backgroundTaskCount: 0,
|
|
206
|
+
sessionQuotaExhausted: false,
|
|
207
|
+
sessionQuotaTimeRemaining: '',
|
|
205
208
|
});
|
|
206
209
|
// Track last terminal width to detect actual width changes
|
|
207
210
|
const lastTerminalWidthRef = React.useRef(process.stdout.columns || 80);
|
|
@@ -284,24 +287,45 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
284
287
|
}));
|
|
285
288
|
});
|
|
286
289
|
}, []);
|
|
290
|
+
// Fetch models config async and update maxTokens once loaded
|
|
291
|
+
// This ensures correct context window even on initial load
|
|
292
|
+
React.useEffect(() => {
|
|
293
|
+
const loadModelsConfig = async () => {
|
|
294
|
+
try {
|
|
295
|
+
// Import quickLog for debugging
|
|
296
|
+
const { quickLog } = await import('../../utils/conversation-logger.js');
|
|
297
|
+
quickLog(`[${new Date().toISOString()}] [App] loadModelsConfig effect starting, currentModel: ${initialModel}\n`);
|
|
298
|
+
const { fetchModelsConfig, getModelContextWindowSync } = await import('../../config/models.js');
|
|
299
|
+
quickLog(`[${new Date().toISOString()}] [App] fetchModelsConfig imported, calling...\n`);
|
|
300
|
+
const config = await fetchModelsConfig(); // This populates the cache
|
|
301
|
+
quickLog(`[${new Date().toISOString()}] [App] fetchModelsConfig returned, models count: ${config?.models?.length || 0}\n`);
|
|
302
|
+
// Now get maxTokens with the cached config
|
|
303
|
+
const newMaxTokens = getModelContextWindowSync(initialModel || 'gemini-2.5-flash');
|
|
304
|
+
quickLog(`[${new Date().toISOString()}] [App] Got newMaxTokens: ${newMaxTokens} for model "${initialModel}"\n`);
|
|
305
|
+
setState(prev => ({
|
|
306
|
+
...prev,
|
|
307
|
+
maxTokens: newMaxTokens
|
|
308
|
+
}));
|
|
309
|
+
quickLog(`[${new Date().toISOString()}] [App] Updated state.maxTokens to ${newMaxTokens}\n`);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
// Log errors to file
|
|
313
|
+
try {
|
|
314
|
+
const { quickLog } = await import('../../utils/conversation-logger.js');
|
|
315
|
+
quickLog(`[${new Date().toISOString()}] [App] loadModelsConfig ERROR: ${error?.message || error}\n`);
|
|
316
|
+
}
|
|
317
|
+
catch { }
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
loadModelsConfig();
|
|
321
|
+
}, [initialModel]);
|
|
287
322
|
// Keep ref in sync with state
|
|
288
323
|
React.useEffect(() => {
|
|
289
324
|
autoAcceptRef.current = state.autoAcceptMode;
|
|
290
325
|
}, [state.autoAcceptMode]);
|
|
291
|
-
//
|
|
292
|
-
|
|
293
|
-
|
|
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]);
|
|
326
|
+
// NOTE: Token count is now updated via onTokenCountUpdate callback from cli-adapter
|
|
327
|
+
// which tracks the actual AI conversation history including system prompt.
|
|
328
|
+
// The old UI-based calculation has been removed to avoid overwriting correct values.
|
|
305
329
|
// Track if we're currently streaming
|
|
306
330
|
const isStreamingRef = React.useRef(false);
|
|
307
331
|
// Buffer content when terminal is too small for streaming display
|
|
@@ -384,6 +408,31 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
384
408
|
});
|
|
385
409
|
});
|
|
386
410
|
}, [onResponseStream]);
|
|
411
|
+
// Set up callback to clear streamed response when task_complete has a summary
|
|
412
|
+
// This prevents showing both the streamed text AND the task_complete summary
|
|
413
|
+
React.useEffect(() => {
|
|
414
|
+
onClearStreamedResponse(() => {
|
|
415
|
+
try {
|
|
416
|
+
quickLog(`[${new Date().toISOString()}] [App] onClearStreamedResponse called - clearing current message content\n`);
|
|
417
|
+
}
|
|
418
|
+
catch (e) {
|
|
419
|
+
// Ignore logging errors
|
|
420
|
+
}
|
|
421
|
+
setState(prev => {
|
|
422
|
+
// Clear the current message's content (not the whole message, so thoughts and thinking are preserved)
|
|
423
|
+
if (prev.currentMessage && prev.currentMessage.role === 'assistant') {
|
|
424
|
+
return {
|
|
425
|
+
...prev,
|
|
426
|
+
currentMessage: {
|
|
427
|
+
...prev.currentMessage,
|
|
428
|
+
content: '' // Clear the content - task_complete will stream the summary next
|
|
429
|
+
}
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
return prev;
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
}, [onClearStreamedResponse]);
|
|
387
436
|
// Ref to accumulate all thought text across multiple chunks
|
|
388
437
|
const thoughtAccumulatorRef = React.useRef('');
|
|
389
438
|
// Set up callback to receive thought chunks
|
|
@@ -1371,10 +1420,13 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1371
1420
|
}, [onCwdChange]);
|
|
1372
1421
|
// Set up callback to receive model changes
|
|
1373
1422
|
React.useEffect(() => {
|
|
1374
|
-
onModelChange((modelName) => {
|
|
1423
|
+
onModelChange((modelName, contextWindow) => {
|
|
1424
|
+
// Update both currentModel AND maxTokens when model changes
|
|
1425
|
+
// contextWindow is passed directly from cli-adapter, no lookup needed
|
|
1375
1426
|
setState(prev => ({
|
|
1376
1427
|
...prev,
|
|
1377
|
-
currentModel: modelName
|
|
1428
|
+
currentModel: modelName,
|
|
1429
|
+
maxTokens: contextWindow
|
|
1378
1430
|
}));
|
|
1379
1431
|
});
|
|
1380
1432
|
}, [onModelChange]);
|
|
@@ -1387,6 +1439,25 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1387
1439
|
}));
|
|
1388
1440
|
});
|
|
1389
1441
|
}, [onSubshellContextChange]);
|
|
1442
|
+
// Set up callback to receive actual AI context token count from cli-adapter
|
|
1443
|
+
React.useEffect(() => {
|
|
1444
|
+
onTokenCountUpdate((tokens) => {
|
|
1445
|
+
setState(prev => ({
|
|
1446
|
+
...prev,
|
|
1447
|
+
currentTokens: tokens
|
|
1448
|
+
}));
|
|
1449
|
+
});
|
|
1450
|
+
}, [onTokenCountUpdate]);
|
|
1451
|
+
// Set up callback to receive session quota updates from cli-adapter
|
|
1452
|
+
React.useEffect(() => {
|
|
1453
|
+
onSessionQuotaUpdate((remaining, canSend, timeRemaining) => {
|
|
1454
|
+
setState(prev => ({
|
|
1455
|
+
...prev,
|
|
1456
|
+
sessionQuotaExhausted: !canSend,
|
|
1457
|
+
sessionQuotaTimeRemaining: timeRemaining
|
|
1458
|
+
}));
|
|
1459
|
+
});
|
|
1460
|
+
}, [onSessionQuotaUpdate]);
|
|
1390
1461
|
// Set up callback for plan approval requests
|
|
1391
1462
|
React.useEffect(() => {
|
|
1392
1463
|
onPlanApprovalRequest(async (plan) => {
|
|
@@ -1418,7 +1489,7 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1418
1489
|
}, [onPlanCreated]);
|
|
1419
1490
|
// Set up callback for task completion
|
|
1420
1491
|
React.useEffect(() => {
|
|
1421
|
-
onTaskCompleted((task, taskNumber, totalTasks, completionNote) => {
|
|
1492
|
+
onTaskCompleted((task, taskNumber, totalTasks, completionNote, taskDescription) => {
|
|
1422
1493
|
// Add task completion message to history
|
|
1423
1494
|
setState(prev => {
|
|
1424
1495
|
const taskCompletedMessage = {
|
|
@@ -1429,7 +1500,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1429
1500
|
taskCompletion: {
|
|
1430
1501
|
taskNumber,
|
|
1431
1502
|
totalTasks,
|
|
1432
|
-
taskDescription
|
|
1503
|
+
// Use the passed taskDescription if available (for subtasks), otherwise fall back to task.description
|
|
1504
|
+
taskDescription: taskDescription || task.description,
|
|
1433
1505
|
completionNote
|
|
1434
1506
|
}
|
|
1435
1507
|
};
|
|
@@ -1761,16 +1833,30 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1761
1833
|
}
|
|
1762
1834
|
else if (!isSlashCommand) {
|
|
1763
1835
|
// Only add user message to display if it's not a slash command
|
|
1764
|
-
//
|
|
1836
|
+
// Show user message IMMEDIATELY with image breadcrumbs (uploading state)
|
|
1837
|
+
// Images will be uploaded in background, then AI will be called
|
|
1838
|
+
const hasImagesToUpload = clipboardImages && clipboardImages.length > 0;
|
|
1839
|
+
// Build initial content with placeholder image markers for immediate display
|
|
1840
|
+
let initialDisplayContent = trimmedValue;
|
|
1841
|
+
if (hasImagesToUpload) {
|
|
1842
|
+
// Add placeholder markers that will be shown immediately
|
|
1843
|
+
for (let i = 0; i < clipboardImages.length; i++) {
|
|
1844
|
+
const image = clipboardImages[i];
|
|
1845
|
+
// Use a placeholder format that MessageDisplay can render as breadcrumb
|
|
1846
|
+
// Format: [IMAGE: filename (uploading...)] - will be updated after upload
|
|
1847
|
+
initialDisplayContent = `${initialDisplayContent} [IMAGE: ${image.displayName} (gs://uploading)]`;
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
// Generate a stable message ID that we can use to update the message later
|
|
1851
|
+
const userMessageId = `user-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
1765
1852
|
setState(prev => {
|
|
1766
|
-
// Move current message to history if exists
|
|
1767
1853
|
const newHistory = prev.currentMessage
|
|
1768
1854
|
? [...prev.messageHistory, prev.currentMessage]
|
|
1769
1855
|
: prev.messageHistory;
|
|
1770
1856
|
const userMessage = {
|
|
1771
|
-
id:
|
|
1857
|
+
id: userMessageId,
|
|
1772
1858
|
role: 'user',
|
|
1773
|
-
content:
|
|
1859
|
+
content: initialDisplayContent,
|
|
1774
1860
|
timestamp: new Date()
|
|
1775
1861
|
};
|
|
1776
1862
|
return {
|
|
@@ -1778,8 +1864,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1778
1864
|
messageHistory: [...newHistory, userMessage],
|
|
1779
1865
|
currentMessage: null,
|
|
1780
1866
|
isLoading: true,
|
|
1781
|
-
loadingMessage: 'Processing your request...',
|
|
1782
|
-
isAiWorking: true
|
|
1867
|
+
loadingMessage: hasImagesToUpload ? 'Uploading image(s)...' : 'Processing your request...',
|
|
1868
|
+
isAiWorking: true
|
|
1783
1869
|
};
|
|
1784
1870
|
});
|
|
1785
1871
|
}
|
|
@@ -1840,7 +1926,8 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1840
1926
|
// Only attempt upload if we have a valid conversation ID
|
|
1841
1927
|
if (conversationId && !conversationId.startsWith('temp_')) {
|
|
1842
1928
|
logDebug(`[CLIPBOARD] Starting upload for ${clipboardImages.length} images with conversationId: ${conversationId}`);
|
|
1843
|
-
// Upload each clipboard image
|
|
1929
|
+
// Upload each clipboard image and build the final message content
|
|
1930
|
+
const uploadedImageMarkers = [];
|
|
1844
1931
|
for (const image of clipboardImages) {
|
|
1845
1932
|
try {
|
|
1846
1933
|
logDebug(`[CLIPBOARD] Uploading image: ${image.displayName}, size: ${image.sizeBytes} bytes`);
|
|
@@ -1849,19 +1936,50 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1849
1936
|
// Append image reference info to message (for AI to know an image was attached)
|
|
1850
1937
|
// The backend will use gcsUri for Vertex AI multimodal input
|
|
1851
1938
|
if (uploadResult.gcsUri) {
|
|
1852
|
-
//
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
logDebug(`[CLIPBOARD]
|
|
1939
|
+
// Build the real image marker with actual GCS URI
|
|
1940
|
+
messageWithImages = `${messageWithImages} [IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`;
|
|
1941
|
+
uploadedImageMarkers.push(`[IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
|
|
1942
|
+
logDebug(`[CLIPBOARD] Appended image marker: [IMAGE: ${uploadResult.fileName} (${uploadResult.gcsUri})]`);
|
|
1856
1943
|
}
|
|
1857
1944
|
}
|
|
1858
1945
|
catch (uploadError) {
|
|
1859
1946
|
// Log error but continue - image upload is optional
|
|
1860
1947
|
logError('Failed to upload clipboard image', uploadError instanceof Error ? uploadError : undefined);
|
|
1861
|
-
//
|
|
1862
|
-
|
|
1948
|
+
// Add a failed marker so user knows upload failed
|
|
1949
|
+
uploadedImageMarkers.push(`[IMAGE: ${image.displayName} (upload failed)]`);
|
|
1863
1950
|
}
|
|
1864
1951
|
}
|
|
1952
|
+
// Update the user message in history with actual GCS URIs
|
|
1953
|
+
// Replace placeholder markers (gs://uploading) with real ones
|
|
1954
|
+
setState(prev => {
|
|
1955
|
+
const updatedHistory = prev.messageHistory.map(msg => {
|
|
1956
|
+
// Find the user message we just added (it has placeholder markers)
|
|
1957
|
+
if (msg.role === 'user' && msg.content.includes('(gs://uploading)')) {
|
|
1958
|
+
// Build new content: original text + real image markers
|
|
1959
|
+
let newContent = trimmedValue;
|
|
1960
|
+
for (const marker of uploadedImageMarkers) {
|
|
1961
|
+
newContent = `${newContent} ${marker}`;
|
|
1962
|
+
}
|
|
1963
|
+
return { ...msg, content: newContent };
|
|
1964
|
+
}
|
|
1965
|
+
return msg;
|
|
1966
|
+
});
|
|
1967
|
+
return { ...prev, messageHistory: updatedHistory };
|
|
1968
|
+
});
|
|
1969
|
+
}
|
|
1970
|
+
else {
|
|
1971
|
+
// No valid conversation ID - update message to show upload failed
|
|
1972
|
+
setState(prev => {
|
|
1973
|
+
const updatedHistory = prev.messageHistory.map(msg => {
|
|
1974
|
+
if (msg.role === 'user' && msg.content.includes('(gs://uploading)')) {
|
|
1975
|
+
// Replace uploading placeholders with failed markers
|
|
1976
|
+
const newContent = msg.content.replace(/\(gs:\/\/uploading\)/g, '(upload failed - no conversation)');
|
|
1977
|
+
return { ...msg, content: newContent };
|
|
1978
|
+
}
|
|
1979
|
+
return msg;
|
|
1980
|
+
});
|
|
1981
|
+
return { ...prev, messageHistory: updatedHistory };
|
|
1982
|
+
});
|
|
1865
1983
|
} // End: if (conversationId && !startsWith temp_)
|
|
1866
1984
|
} // End: if (clipboardImages && clipboardImages.length > 0)
|
|
1867
1985
|
await onMessage(messageWithImages);
|
|
@@ -1977,9 +2095,11 @@ export const App = ({ onMessage, onCancelRequest, initialModel, initialPlanMode,
|
|
|
1977
2095
|
handleSubmit(value, clipboardImages);
|
|
1978
2096
|
}, autoAcceptMode: state.autoAcceptMode, model: state.currentModel, planMode: state.planMode, commandMode: state.commandMode, backgroundMode: state.backgroundMode, currentWorkingDirectory: state.currentWorkingDirectory, commandHistory: state.commandHistory, onToggleAutoAccept: handleToggleAutoAccept, onToggleCommandMode: onToggleCommandMode, onToggleBackgroundMode: onToggleBackgroundMode, isActive: true, subshellContext: state.subshellContext, currentTokens: state.currentTokens, maxTokens: state.maxTokens, isShellRunning: state.shellState?.isRunning, backgroundTaskCount: state.backgroundTaskCount, initialValue: preservedInputTextRef.current, onValueChange: handleInputValueChange, onSetAutoModeSetup: (callback) => {
|
|
1979
2097
|
setAutoModeCallbackRef.current = callback;
|
|
1980
|
-
} }))),
|
|
2098
|
+
}, sessionQuotaExhausted: state.sessionQuotaExhausted, sessionQuotaTimeRemaining: state.sessionQuotaTimeRemaining }))),
|
|
1981
2099
|
state.showExitWarning && (React.createElement(Box, { marginTop: 1 },
|
|
1982
|
-
React.createElement(Text, { color: "#ffaa00", bold: true }, "\u26A0\uFE0F Press Ctrl+C again to exit")))
|
|
2100
|
+
React.createElement(Text, { color: "#ffaa00", bold: true }, "\u26A0\uFE0F Press Ctrl+C again to exit"))),
|
|
2101
|
+
!isConnected && (React.createElement(Box, { marginTop: 0, marginLeft: state.showExitWarning ? 2 : 0 },
|
|
2102
|
+
React.createElement(Text, { color: "red", bold: true }, "\u26A0\uFE0F No internet connection"))))),
|
|
1983
2103
|
state.screen === 'approval' && state.approvalRequest && (React.createElement(ApprovalSection, { key: `approval-${state.approvalRequest.message}`, approvalRequest: state.approvalRequest, onApprove: (approved) => {
|
|
1984
2104
|
const resolve = state.approvalRequest?.resolve;
|
|
1985
2105
|
if (resolve) {
|