From a4abda497c19e51c93acf43d4edb3b6c4e459d81 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 19 Mar 2026 00:30:41 +0800 Subject: [PATCH] fix: persist composer mode during send --- components/canvas/CanvasChatPanel.tsx | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index af899c922..478b9fd40 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -2999,6 +2999,7 @@ export function CanvasChatPanel({ return [] as string[]; }, [isVideoModel, videoParams]); const activeComposerMode = composerModeOverride || computedComposerMode; + const activeComposerModeRef = useRef(activeComposerMode); const agentUploadSlots = useMemo(() => { if ( activeComposerMode !== "agent" || @@ -3240,6 +3241,10 @@ export function CanvasChatPanel({ ); // 默认选择模型(根据系统设置) + useEffect(() => { + activeComposerModeRef.current = activeComposerMode; + }, [activeComposerMode]); + useEffect(() => { if (!selectedModelId && siteSettings) { currentModelIdRef.current = "auto"; @@ -3456,6 +3461,7 @@ export function CanvasChatPanel({ (mode: "agent" | "image" | "video" | "detail") => { hiddenPromptRef.current = null; autoContextRef.current = null; + activeComposerModeRef.current = mode; setComposerModeOverride(mode); if (mode === "agent") { @@ -3891,10 +3897,12 @@ export function CanvasChatPanel({ console.log("[CanvasChat] Preparing request:", { id: rawId, modelId: currentModelIdRef.current, + composerMode: activeComposerModeRef.current, imageParams: imageParamsRef.current, contextPayload: buildContextPayload(), lastMessage: request.messages.at(-1), }); + const effectiveComposerMode = activeComposerModeRef.current || activeComposerMode; const hiddenPrompt = hiddenPromptRef.current || undefined; const autoContext = autoContextRef.current || undefined; const contextPayload = buildContextPayload(); @@ -3915,11 +3923,11 @@ export function CanvasChatPanel({ id: rawId, message: request.messages.at(-1), agentPresetId: - activeComposerMode === "agent" && selectedAgentPreset?.id + effectiveComposerMode === "agent" && selectedAgentPreset?.id ? selectedAgentPreset.id : undefined, selectedChatModel: currentModelIdRef.current, - composerMode: activeComposerMode, + composerMode: effectiveComposerMode, selectedVisibilityType: "private", deepThinkingEnabled: requestIsConversationModel ? false @@ -4936,7 +4944,8 @@ export function CanvasChatPanel({ if (imageNodes.length === 0) return undefined; - const shouldIsolateDirectModeContext = activeComposerMode !== "agent"; + const effectiveComposerMode = activeComposerModeRef.current || activeComposerMode; + const shouldIsolateDirectModeContext = effectiveComposerMode !== "agent"; if (shouldIsolateDirectModeContext && selectedImageNodes.length === 0) { return undefined; } @@ -7084,6 +7093,8 @@ export function CanvasChatPanel({ if (!textContent && hasWorkflowContext && workflowContext?.summaryText) { textContent = `请基于当前工作流设定生成方案:${workflowContext.summaryText}`; } + const effectiveComposerMode = activeComposerModeRef.current || activeComposerMode; + if (!textContent && hasAgentUploadSlots && selectedAgentPreset) { textContent = `请按「${selectedAgentPreset.name}」智能体配置顺序处理产品图1、产品图2和模特图。`; } @@ -7104,7 +7115,7 @@ export function CanvasChatPanel({ ); } if ( - activeComposerMode === "agent" && + effectiveComposerMode === "agent" && selectedAgentPreset?.type === "text" && selectedAgentPreset.slots?.length ) { @@ -7166,7 +7177,7 @@ export function CanvasChatPanel({ text: textContent, attachments: normalizedAttachmentKeys, skillTagId: selectedSkillTag?.id || null, - mode: activeComposerMode, + mode: effectiveComposerMode, }); if (shouldBlockDuplicateSend(activeChatId, sendSignature)) {