diff --git a/frontend-web/src/pages/AgentChatPage.tsx b/frontend-web/src/pages/AgentChatPage.tsx index 9761cede..b8da2890 100644 --- a/frontend-web/src/pages/AgentChatPage.tsx +++ b/frontend-web/src/pages/AgentChatPage.tsx @@ -2,6 +2,7 @@ import { BotIcon, PlusSquare } from "lucide-react"; import { useParams, useRouter } from "next/navigation"; +import { useLocation } from "react-router-dom"; import { useRouteBase } from "@/core/route-base"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; @@ -92,6 +93,11 @@ export default function AgentChatPage({ taskBind && !taskGate && taskContext && taskContext.agentId === agent_id ? (taskContext.openingText?.trim() ?? "") : ""; + // 「首次进入且该任务无历史」信号:由 TaskFxIndexResolver 在「无聊天对话 → /new」时注入 + // (用户主动点「新建对话」不带)。3qfx/xdfx 据此自动发出开场词、跳过「开始回答」按钮; + // rwfx 据此决定目的树为空时是否自动开始(仍由 TaskPurposePanel 在有数据时弹覆盖确认)。 + const location = useLocation(); + const taskAutoStart = !!(location.state as { taskAutoStart?: boolean } | null)?.taskAutoStart; // If ChatPage stashed an opening message for this agent, skip the landing // screen on first render so the user doesn't see a flash of the welcome UI @@ -230,12 +236,24 @@ export default function AgentChatPage({ handleSubmit({ text: pending.text, files: [] }); }, [agent_id, threadId, isNewThread, handleSubmit]); - // 纯绑定任务深链(3qfx/xdfx):新建对话进问答页 landing 后,由 header 右上角「开始回答」按钮 - // 手动触发发出开场信息(见下方 header)。不再自动发,从根上避免新建对话竞态导致的重复发送。 + // 纯绑定任务深链(3qfx/xdfx):用户主动「新建对话」进 landing 后,由 header 右上角「开始回答」 + // 按钮手动触发发出开场信息(见下方 header)。手动场景不自动发,避免新建对话竞态导致的重复发送。 const handleTaskStart = useCallback(() => { if (taskStartText) handleSubmit({ text: taskStartText, files: [] }); }, [handleSubmit, taskStartText]); + // 首次进入且该任务无历史(taskAutoStart):3qfx/xdfx 直接自动发出开场信息,无需手动点「开始回答」。 + // autoStartedRef 一次性、不随 threadId 抖动重置,故只发一次(首次进入是干净 mount,无上一会话之忧)。 + const autoStartedRef = useRef(false); + useEffect(() => { + if (!taskAutoStart) return; + if (!taskStartText) return; + if (!isNewThread) return; + if (autoStartedRef.current) return; + autoStartedRef.current = true; + handleSubmit({ text: taskStartText, files: [] }); + }, [taskAutoStart, taskStartText, isNewThread, handleSubmit]); + const handleClarificationSubmit = useCallback( (answer: string) => { setHasStartedConversation(true); @@ -292,8 +310,9 @@ export default function AgentChatPage({