fix: keep agent status with replies

This commit is contained in:
Jesse_Chen
2026-07-23 15:57:39 +08:00
parent 73cafeb6e0
commit 4a9b1dc0be
5 changed files with 45 additions and 14 deletions
@@ -1,3 +1,4 @@
import { CircleCheck } from "lucide-react";
import { ThinkingOrb, type OrbState } from "thinking-orbs";
const labels = {
@@ -7,18 +8,23 @@ const labels = {
listening: "正在聆听…",
composing: "正在组织回答…",
shaping: "正在生成结果…",
} as const satisfies Record<OrbState, string>;
completed: "回答已完成",
} as const satisfies Record<OrbState | "completed", string>;
export type AgentActivityState = OrbState | "completed";
export function AgentActivityStatus({
state,
label = labels[state],
}: Readonly<{
state: OrbState;
state: AgentActivityState;
label?: string;
}>) {
return (
<div className="agent-activity-status" role="status">
<ThinkingOrb aria-hidden="true" state={state} size={20} />
<div className="agent-activity-status" role={state === "completed" ? undefined : "status"}>
{state === "completed"
? <CircleCheck aria-hidden="true" size={20} strokeWidth={1.8} />
: <ThinkingOrb aria-hidden="true" state={state} size={20} />}
<span>{label}</span>
</div>
);
+11 -6
View File
@@ -50,12 +50,17 @@ export function ChatMessageRow({ message }: { readonly message: ChatMessageView
<div className="message-content">
<div className="message-bubble">
{message.role === "assistant" ? (
message.state === "thinking"
? <AgentActivityStatus state="working" label="正在核对星盘信息…" />
: <>
{message.state === "streaming" && <AgentActivityStatus state="composing" />}
<ChatMessageContent text={message.text} />
</>
<>
<AgentActivityStatus
state={message.state === "thinking"
? "working"
: message.state === "streaming"
? "composing"
: "completed"}
label={message.state === "thinking" ? "正在核对星盘信息…" : undefined}
/>
{message.text && <ChatMessageContent text={message.text} />}
</>
) : <p>{message.text}</p>}
</div>
</div>