From 1269e5f562b1435c65f1469e18d5c9f0cccffd4e Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 25 Mar 2026 13:35:06 +0800 Subject: [PATCH] fix: prevent canvas agent requests without preset --- app/canvas/[id]/page.tsx | 2 +- components/canvas/CanvasChatPanel.tsx | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/canvas/[id]/page.tsx b/app/canvas/[id]/page.tsx index f8a65b5c0..bcc896437 100644 --- a/app/canvas/[id]/page.tsx +++ b/app/canvas/[id]/page.tsx @@ -1983,7 +1983,7 @@ export default function CanvasEditorPage({ params }: PageProps) { chatId={`canvas-${id}`} onClose={() => setIsPanelOpen(false)} onOpenFileList={() => setPanelMode('fileList')} - selectedAgentPresetId={null} + selectedAgentPresetId={isCanvasAgentModeEnabled ? selectedAgentPresetId : null} chatScope="canvas" agentEnabled={isCanvasAgentModeEnabled} /> diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index 8d86c7dc9..a7a36e271 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -3116,8 +3116,10 @@ export function CanvasChatPanel({ const isConversationModel = Boolean( currentModel && isCanvasConversationOnlyModel(currentModel) ); + const hasSelectedAgentPreset = Boolean(String(selectedAgentPresetId || "").trim()); const isAgentModel = agentEnabled && + hasSelectedAgentPreset && !isDetailGenerationMode && (!selectedModelId || selectedModelId === "auto" || isConversationModel); const computedComposerMode = useMemo<"agent" | "image" | "video" | "detail">(() => { @@ -3660,6 +3662,11 @@ export function CanvasChatPanel({ if (!agentEnabled) { return; } + if (!hasSelectedAgentPreset) { + toast.error("请先选择生图模式后再使用 Agent 模式"); + activeComposerModeRef.current = computedComposerMode; + return; + } const preferredAgentModelId = allModels.find( (model) => @@ -3721,8 +3728,10 @@ export function CanvasChatPanel({ aiDetailGenerationEnabled, agentEnabled, allModels, + computedComposerMode, firstImageModelId, firstVideoModelId, + hasSelectedAgentPreset, lastConversationModelId, lastImageModelId, isCanvasConversationOnlyModel, @@ -8176,7 +8185,9 @@ export function CanvasChatPanel({ : 0; const canSend = isDetailGenerationMode ? detailValidationIssues.length === 0 && !isDetailGenerating - : hasInputOrAttachments && hasEnoughAgentUploads; + : hasInputOrAttachments && + hasEnoughAgentUploads && + (activeComposerMode !== "agent" || hasSelectedAgentPreset); const currentVideoImageLimit = isVideoModel ? getVideoImageLimit(videoParams, currentModel?.providerType, currentModel?.videoToolCapability) : null;