diff --git a/services/pascal-editor/apps/editor/components/ai-design-agent-panel.tsx b/services/pascal-editor/apps/editor/components/ai-design-agent-panel.tsx index 9c1ce2c8c..ea7a3371f 100644 --- a/services/pascal-editor/apps/editor/components/ai-design-agent-panel.tsx +++ b/services/pascal-editor/apps/editor/components/ai-design-agent-panel.tsx @@ -140,6 +140,28 @@ function ToolActivity({ part }: { part: DisplayPart }) { ) } +function processingStatusText(messages: UIMessage[], status: string): string { + if (status === 'submitted') return '正在分析当前场景' + + for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex--) { + const message = messages[messageIndex] + if (message?.role !== 'assistant') continue + + for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex--) { + const part = displayPartFrom(message.parts[partIndex]) + const toolName = toolNameFromPart(part) + if (toolName) { + if (part.state === 'output-available') return '正在校验并保存建模结果' + if (part.state === 'output-error') return '正在调整执行方案' + return `正在${TOOL_LABELS[toolName] ?? toolName.replaceAll('_', ' ')}` + } + if (part.type === 'text' && part.text) return '正在继续处理建模任务' + } + } + + return '正在生成建模方案' +} + export function AiDesignAgentPanel({ sceneId }: AiDesignAgentPanelProps) { const activeConversationKey = `pascal-agent-active-conversation:${sceneId}` const [input, setInput] = useState('') @@ -174,6 +196,10 @@ export function AiDesignAgentPanel({ sceneId }: AiDesignAgentPanelProps) { transport, }) const isRunning = status === 'submitted' || status === 'streaming' + const runningStatusText = useMemo( + () => processingStatusText(messages, status), + [messages, status], + ) const latestMessageRenderKey = useMemo(() => { const latest = messages.at(-1) if (!latest) return '' @@ -538,15 +564,19 @@ export function AiDesignAgentPanel({ sceneId }: AiDesignAgentPanelProps) { ))} - {status === 'submitted' ? ( -
- - 正在分析当前场景 -
- ) : null} -
)} + {isRunning ? ( +
+ + {runningStatusText} +
+ ) : null} +