fix(home): force agent launch and ensure canvas auto-send trigger
This commit is contained in:
parent
d6637135f1
commit
fb7b9a2009
@ -1181,6 +1181,7 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
||||
const hiddenPromptRef = useRef<string | null>(null);
|
||||
const autoContextRef = useRef<string | null>(null);
|
||||
const pendingLaunchRef = useRef<CanvasLaunchPayload | null>(null);
|
||||
const [launchAutoSendTick, setLaunchAutoSendTick] = useState(0);
|
||||
const sessionMenuRef = useRef<HTMLDivElement>(null);
|
||||
const historyScrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
||||
|
||||
@ -1679,6 +1680,7 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
||||
selectedModelId: parsed.selectedModelId,
|
||||
imageParams: parsed.imageParams,
|
||||
};
|
||||
setLaunchAutoSendTick((value) => value + 1);
|
||||
}
|
||||
|
||||
normalizedAttachments.forEach(async (attachment, index) => {
|
||||
@ -2614,7 +2616,7 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
|
||||
if (editableDiv) {
|
||||
editableDiv.innerHTML = "";
|
||||
}
|
||||
}, [selectedModelId, status, sendMessage, clearSelection]);
|
||||
}, [selectedModelId, status, sendMessage, clearSelection, launchAutoSendTick]);
|
||||
|
||||
// 当历史消息加载完成后,更新消息列表(支持同一会话的增量刷新)
|
||||
const loadedHistorySignatureRef = useRef<string>("");
|
||||
|
||||
@ -343,7 +343,6 @@ export function LovartHome({
|
||||
const [usageFilter, setUsageFilter] = useState<"all" | "consumed" | "earned">("all");
|
||||
const [billingCycle, setBillingCycle] = useState<"monthly" | "annual">("monthly");
|
||||
const [creatingPaymentPackageId, setCreatingPaymentPackageId] = useState<string | null>(null);
|
||||
const [selectedModelId, setSelectedModelId] = useState<string>("");
|
||||
const [imageParams, setImageParams] = useState<ImageGenerationParams>({
|
||||
aspectRatio: "auto",
|
||||
imageSize: "2K",
|
||||
@ -457,11 +456,6 @@ export function LovartHome({
|
||||
const membershipPlans = membershipConfig?.plans || [];
|
||||
const currentPlan = membershipData?.currentPlan;
|
||||
|
||||
const imageModels = useMemo(
|
||||
() => (modelsData?.models || []).filter((model) => model.supportsImageGen),
|
||||
[modelsData?.models]
|
||||
);
|
||||
|
||||
const autoComposerModel = useMemo<ModelOption>(
|
||||
() => ({
|
||||
id: "auto",
|
||||
@ -475,24 +469,8 @@ export function LovartHome({
|
||||
[modelsData?.agentModel?.avatarUrl, modelsData?.agentModel?.imageGenConfig]
|
||||
);
|
||||
|
||||
const allComposerModels = useMemo<ModelOption[]>(
|
||||
() => [autoComposerModel, ...imageModels],
|
||||
[autoComposerModel, imageModels]
|
||||
);
|
||||
|
||||
const composerModelValue = useMemo(() => {
|
||||
if (!selectedModelId) return "auto";
|
||||
if (allComposerModels.some((model) => model.id === selectedModelId)) {
|
||||
return selectedModelId;
|
||||
}
|
||||
return "auto";
|
||||
}, [allComposerModels, selectedModelId]);
|
||||
const triggerComposerModel = useMemo(
|
||||
() =>
|
||||
allComposerModels.find((model) => model.id === composerModelValue) ||
|
||||
allComposerModels.find((model) => model.id === "auto"),
|
||||
[allComposerModels, composerModelValue]
|
||||
);
|
||||
const composerModelValue = "auto";
|
||||
const triggerComposerModel = autoComposerModel;
|
||||
const isMembershipEnabled = siteSettingsData?.membershipConfig?.enabled !== false;
|
||||
|
||||
const discoveryTabs = useMemo(() => {
|
||||
@ -682,19 +660,6 @@ export function LovartHome({
|
||||
window.location.replace("/");
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (selectedModelId) return;
|
||||
const defaultModelId = siteSettingsData?.canvasDefaultModelId || "auto";
|
||||
setSelectedModelId(defaultModelId);
|
||||
}, [selectedModelId, siteSettingsData?.canvasDefaultModelId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!selectedModelId) return;
|
||||
if (allComposerModels.length === 0) return;
|
||||
if (allComposerModels.some((model) => model.id === selectedModelId)) return;
|
||||
setSelectedModelId("auto");
|
||||
}, [allComposerModels, selectedModelId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isAuthenticated) return;
|
||||
setLoginDialogOpen(false);
|
||||
@ -1078,7 +1043,7 @@ export function LovartHome({
|
||||
attachments: uploadedAttachments,
|
||||
autoSend: true,
|
||||
createdAt: Date.now(),
|
||||
selectedModelId: composerModelValue,
|
||||
selectedModelId: "auto",
|
||||
imageParams,
|
||||
})
|
||||
);
|
||||
@ -1665,57 +1630,24 @@ export function LovartHome({
|
||||
/>
|
||||
</label>
|
||||
|
||||
<Select value={composerModelValue} onValueChange={setSelectedModelId}>
|
||||
<SelectTrigger className="h-8 w-auto min-w-[130px] rounded-full border border-blue-100 bg-blue-50 px-2 text-xs text-blue-600">
|
||||
<div className="flex min-w-0 items-center gap-1.5">
|
||||
<span className="h-5 w-5 overflow-hidden rounded-full border border-blue-200 bg-white">
|
||||
{triggerComposerModel?.avatarUrl ? (
|
||||
<img
|
||||
src={triggerComposerModel.avatarUrl}
|
||||
alt={triggerComposerModel.displayName || "模型头像"}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
) : (
|
||||
<span className="flex h-full w-full items-center justify-center text-[10px] font-medium text-blue-500">
|
||||
{(triggerComposerModel?.displayName || "A").slice(0, 1)}
|
||||
</span>
|
||||
)}
|
||||
<div className="inline-flex h-8 min-w-[130px] items-center gap-1.5 rounded-full border border-blue-100 bg-blue-50 px-2 text-xs text-blue-600">
|
||||
<span className="h-5 w-5 overflow-hidden rounded-full border border-blue-200 bg-white">
|
||||
{triggerComposerModel?.avatarUrl ? (
|
||||
<img
|
||||
src={triggerComposerModel.avatarUrl}
|
||||
alt={triggerComposerModel.displayName || "模型头像"}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
) : (
|
||||
<span className="flex h-full w-full items-center justify-center text-[10px] font-medium text-blue-500">
|
||||
{(triggerComposerModel?.displayName || "A").slice(0, 1)}
|
||||
</span>
|
||||
<span className="max-w-[95px] truncate">
|
||||
{triggerComposerModel?.displayName || "Agent模式"}
|
||||
</span>
|
||||
</div>
|
||||
</SelectTrigger>
|
||||
<SelectContent className="w-[238px] max-h-[340px] overflow-hidden rounded-[18px] border border-[#cfd4dc] bg-[#f3f4f6]/90 p-1.5 shadow-[0_8px_20px_rgba(15,23,42,0.13)]">
|
||||
<div className="max-h-[312px] space-y-0.5 overflow-y-auto pr-1">
|
||||
{allComposerModels.map((model) => (
|
||||
<SelectItem
|
||||
key={model.id}
|
||||
value={model.id}
|
||||
className="h-[34px] rounded-xl px-2.5 text-[#2f3640] [&>span:first-child]:hidden [&>span:last-child]:block [&>span:last-child]:w-full focus:bg-[#e7ebf0] focus:text-[#1f2937] data-[state=checked]:bg-[#e7ebf0] data-[state=checked]:text-[#1f2937]"
|
||||
>
|
||||
<span className="flex w-full items-center justify-between gap-2">
|
||||
<span className="flex min-w-0 items-center gap-2">
|
||||
<span className="h-5 w-5 overflow-hidden rounded-full border border-[#d4d9df] bg-white">
|
||||
{model.avatarUrl ? (
|
||||
<img src={model.avatarUrl} alt={model.displayName} className="h-full w-full object-cover" />
|
||||
) : (
|
||||
<span className="flex h-full w-full items-center justify-center text-[9px] font-medium text-[#6b7280]">
|
||||
{model.id === "auto" ? "A" : model.displayName.slice(0, 1)}
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
<span className="truncate text-[12px] font-medium leading-none">{model.displayName}</span>
|
||||
</span>
|
||||
{composerModelValue === model.id ? (
|
||||
<span className="text-sm font-semibold text-[#1f2937]">✓</span>
|
||||
) : null}
|
||||
</span>
|
||||
</SelectItem>
|
||||
))}
|
||||
</div>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
)}
|
||||
</span>
|
||||
<span className="max-w-[95px] truncate">
|
||||
{triggerComposerModel?.displayName || "Agent模式"}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className="min-w-0 flex-1 overflow-hidden">
|
||||
<ImageParamsBar
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user