Optimize message handling to prevent UI freezing

This commit is contained in:
Gemini AI
2025-12-24 23:24:22 +04:00
Unverified
parent fb33e2ebe0
commit 8dddf4d0cf

View File

@@ -279,31 +279,31 @@ export default function MultiTaskChat(props: MultiTaskChatProps) {
if (!message || isSending()) return; if (!message || isSending()) return;
setIsSending(true); setIsSending(true);
log.info("handleSendMessage started", {
instanceId: props.instanceId, // Yield to let UI update "Is Sending" state before heavy operations
sessionId: props.sessionId, await new Promise(resolve => setTimeout(resolve, 0));
selectedTaskId: selectedTaskId(),
messageLength: message.length // Reduced logging to prevent IPC overload
}); // log.info("handleSendMessage started", { ... });
try { try {
let taskId = selectedTaskId(); let taskId = selectedTaskId();
let targetSessionId = props.sessionId; let targetSessionId = props.sessionId;
// If no task selected, create one automatically // If no task selected, create one automatically
if (!taskId) { if (!taskId) {
log.info("No task selected, creating new task"); // log.info("No task selected, creating new task");
const title = message.length > 30 ? message.substring(0, 27) + "..." : message; const title = message.length > 30 ? message.substring(0, 27) + "..." : message;
const result = await addTask(props.instanceId, props.sessionId, title); const result = await addTask(props.instanceId, props.sessionId, title);
taskId = result.id; taskId = result.id;
targetSessionId = result.taskSessionId || props.sessionId; targetSessionId = result.taskSessionId || props.sessionId;
log.info("New task created", { taskId, targetSessionId }); // log.info("New task created", { taskId, targetSessionId });
setSelectedTaskId(taskId); setSelectedTaskId(taskId);
// If autonomous mode is on, we might want to queue it or set it as active // If autonomous mode is on, we might want to queue it or set it as active
const s = solo(); const s = solo();
if (s.isAutonomous) { if (s.isAutonomous) {
log.info("Autonomous mode active, setting active task or queuing"); // log.info("Autonomous mode active, setting active task or queuing");
if (!s.activeTaskId) { if (!s.activeTaskId) {
setActiveTaskId(props.instanceId, taskId); setActiveTaskId(props.instanceId, taskId);
} else { } else {
@@ -315,14 +315,14 @@ export default function MultiTaskChat(props: MultiTaskChatProps) {
targetSessionId = task?.taskSessionId || props.sessionId; targetSessionId = task?.taskSessionId || props.sessionId;
} }
log.info("Target session identified", { targetSessionId, taskId }); // log.info("Target session identified", { targetSessionId, taskId });
const store = messageStore(); const store = messageStore();
log.info("Message store check before sending", { /* log.info("Message store check before sending", {
instanceId: props.instanceId, instanceId: props.instanceId,
storeExists: !!store, storeExists: !!store,
messageCount: store?.getSessionMessageIds(targetSessionId).length messageCount: store?.getSessionMessageIds(targetSessionId).length
}); }); */
await sendMessage( await sendMessage(
props.instanceId, props.instanceId,
@@ -332,18 +332,18 @@ export default function MultiTaskChat(props: MultiTaskChatProps) {
taskId || undefined taskId || undefined
); );
log.info("sendMessage call completed"); // log.info("sendMessage call completed");
setChatInput(""); setChatInput("");
setAttachments([]); setAttachments([]);
// Auto-scroll to bottom after sending // Auto-scroll to bottom after sending
setTimeout(scrollToBottom, 100); setTimeout(scrollToBottom, 100);
} catch (error) { } catch (error) {
log.error("handleSendMessage failed", error); // log.error("handleSendMessage failed", error);
console.error("[MultiTaskChat] Send failed:", error); console.error("[MultiTaskChat] Send failed:", error);
} finally { } finally {
setIsSending(false); setIsSending(false);
log.info("handleSendMessage finished"); // log.info("handleSendMessage finished");
} }
}; };