diff --git a/src/renderer/components/chat-area.ts b/src/renderer/components/chat-area.ts index 222458d..f4b8ca9 100644 --- a/src/renderer/components/chat-area.ts +++ b/src/renderer/components/chat-area.ts @@ -495,6 +495,13 @@ export function clearMessages(): void { currentPlaceholder = null; } +/** 清理 currentPlaceholder 引用(当 placeholder 从外部被移除时调用) */ +export function resetCurrentPlaceholder(): void { + if (currentPlaceholder && !currentPlaceholder.isConnected) { + currentPlaceholder = null; + } +} + export function enableAutoScroll(): void { autoScroll = true; if (scrollBtnEl) scrollBtnEl.style.display = 'none'; diff --git a/src/renderer/components/input-area.ts b/src/renderer/components/input-area.ts index 4e17b87..ccb4364 100644 --- a/src/renderer/components/input-area.ts +++ b/src/renderer/components/input-area.ts @@ -9,7 +9,7 @@ import { getSelectedModel, isThinkEnabled, isVisionAvailable, isToolCallingSuppo import { renderMessages, clearMessagesDOM, appendAssistantPlaceholder, appendSystemMessage, updateLastAssistantMessage, clearMessages, safeMarkdown, enableAutoScroll, updateTotalTokens, - appendToolCallCardToPlaceholder, updateToolCallCardInPlaceholder + appendToolCallCardToPlaceholder, updateToolCallCardInPlaceholder, resetCurrentPlaceholder } from './chat-area.js'; import { showToast } from './toast.js'; import { addToolCard, updateToolCard, clearToolCardsExternal, clearTerminalExternal } from './workspace-panel.js'; @@ -1109,8 +1109,10 @@ async function sendMessageWithAgentLoop(text: string, currentSession: ChatSessio placeholder.classList.remove('loading'); placeholder.querySelector('.loading-dots')?.remove(); placeholder.querySelector('.loading-text')?.remove(); - if (!assistantContent) placeholder.remove(); - else { + if (!assistantContent) { + placeholder.remove(); + resetCurrentPlaceholder(); + } else { const contentDiv = placeholder.querySelector('.msg-content'); if (contentDiv) contentDiv.innerHTML = safeMarkdown(assistantContent) + '
[已中断]