abortRef.current?.abort(); const fresh = { sessionId: makeId("sess"), userId: makeId("user") }; dispatch({ type: "reset", ...fresh }); setFiles([]); }; return (
{/* ─── Sidebar Overlay ─── */} {isHistoryOpen && (
setIsHistoryOpen(false)} /> )}

历史对话

{state.historySessions.length === 0 ? (
暂无历史记录
) : (
{state.historySessions.map((session) => (
loadHistorySession(session.sessionId)} className={`p-4 rounded-xl border border-border cursor-pointer transition-all hover:bg-surface-muted hover:border-magenta group ${ state.sessionId === session.sessionId ? 'bg-magenta/5 border-magenta ring-1 ring-magenta' : 'bg-white' }`} >
ID: {session.sessionId.slice(0, 8)}... {new Date(session.ts).toLocaleDateString()}

{session.summary}

))}
)} {loadingHistory && (
)}
{/* ─── Main Chat ─── */}
{/* History Toggle Button */}
{state.messages.length === 0 && (

规划委员会代理

提供一个高层 Epic,代理将从产品、架构与 RTE 视角进行规划。

)} {state.messages.map((msg) => (
{msg.role === "assistant" && ( 系统 / 迭代闭环 )} {msg.role === "assistant" && state.reasoning[msg.id] && (
查看思考过程
{state.reasoning[msg.id]}
)} {msg.role === "assistant" ? (
{msg.content || (state.chatting ? "思考中..." : "")}
) : ( msg.content || "Thinking..." )} {msg.status === "failed" && ( 发送失败 )}
))}
{/* Error */} {state.error && (
{state.error}
)} {/* Input area */}
{/* File upload row */}
{files.map((f) => ( {f.name} ))}