import type { ReactElement } from "react"; import type { ChatMessage } from "../../types/domain"; import { formatBeijingTime, formatDuration, shortToken, toneClass } from "../../utils"; interface MessagePendingContextProps { message: ChatMessage; codeAgentTimeoutMs: number; } export function MessagePendingContext({ message, codeAgentTimeoutMs }: MessagePendingContextProps): ReactElement | null { if (message.status !== "running") return null; const fields: Array<[string, string | null | undefined, boolean]> = [ ["状态", "处理中", false], ["traceId", typeof message.traceId === "string" ? message.traceId : null, true], ["conversation", typeof message.conversationId === "string" ? message.conversationId : null, true], ["session", message.sessionId ?? message.runnerTrace?.sessionId ?? "等待后端分配", true], ["thread", message.threadId ?? message.runnerTrace?.threadId ?? "等待后端分配", false], ["sessionStatus", typeof message.runnerTrace?.sessionStatus === "string" ? message.runnerTrace.sessionStatus : null, false], ["lifecycle", typeof message.runnerTrace?.sessionLifecycleStatus === "string" ? message.runnerTrace.sessionLifecycleStatus : null, false], ["activityTimeout", `${formatDuration(codeAgentTimeoutMs)} 无新事件`, false] ]; return (
处理中 {message.runnerTrace?.waitingFor ? `等待 ${message.runnerTrace.waitingFor}` : "等待后端事件"}
{fields.map(([label, value, copyable]) => { if (value === undefined || value === null || value === "") return null; return (
{label} {copyable ? shortToken(value, 32) : value} {formatBeijingTime(message.updatedAt ?? message.createdAt, { withSeconds: true })}
); })}
); }