fix: prevent canvas agent requests without preset
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-03-25 13:35:06 +08:00
parent 50d487dbcb
commit 1269e5f562
2 changed files with 13 additions and 2 deletions

View File

@ -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}
/>

View File

@ -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;