diff --git a/src/agent/agent_loop.rs b/src/agent/agent_loop.rs index 21cd5a4..c89b29e 100644 --- a/src/agent/agent_loop.rs +++ b/src/agent/agent_loop.rs @@ -1097,15 +1097,29 @@ impl AgentLoop { .zip(tool_results.iter()) .find(|(_, result)| result.state == ToolExecutionState::PendingUserAction) { + // 从工具输出中提取有意义的终端内容 + // 跳过:标记行、session_id 元数据、空行、以及提示行(取提示行之后的实际内容) + let content: String = pending_result + .output + .lines() + .map(|l| l.trim()) + .filter(|line| { + !line.is_empty() + && !line.starts_with("__PICOBOT_") + && !line.starts_with("[session_id:") + }) + .skip(1) // 跳过第一行(提示行,如"进程正在等待输入...") + .take(20) // 最多取 20 行避免过长 + .collect::>() + .join("\n"); + let display_content = if content.is_empty() { + DEFAULT_PENDING_ASSISTANT_MESSAGE + } else { + &content + }; let assistant_message = ChatMessage::assistant(format!( "{}\n\n当前等待中的工具: {}", - pending_result - .output - .lines() - .next() - .filter(|line| !line.trim().is_empty()) - .unwrap_or(DEFAULT_PENDING_ASSISTANT_MESSAGE), - tool_call.name, + display_content, tool_call.name, )); emitted_messages.push(assistant_message.clone()); self.emit_live_tool_call_message(assistant_message.clone()).await;