Like [`execute_from_messages`](Self::execute_from_messages) but seeds the loop's cumulative metrics (token usage, tool-call count, verification reports) from a checkpoint. Used by `AgentSession::resume_run` so a resumed run continues accounting from where the crashed/migrated run left off instead of re-starting at zero.
(
&self,
messages: Vec<Message>,
session_id: Option<&str>,
event_tx: Option<mpsc::Sender<AgentEvent>>,
cancel_token: Option<&tokio_util::sync::CancellationToken
| 42 | /// from where the crashed/migrated run left off instead of |
| 43 | /// re-starting at zero. |
| 44 | pub async fn execute_from_messages_seeded( |
| 45 | &self, |
| 46 | messages: Vec<Message>, |
| 47 | session_id: Option<&str>, |
| 48 | event_tx: Option<mpsc::Sender<AgentEvent>>, |
| 49 | cancel_token: Option<&tokio_util::sync::CancellationToken>, |
| 50 | seed: Option<super::execution_state::ExecutionSeed>, |
| 51 | ) -> Result<AgentResult> { |
| 52 | let default_token = tokio_util::sync::CancellationToken::new(); |
| 53 | let token = cancel_token.unwrap_or(&default_token); |
| 54 | tracing::info!( |
| 55 | a3s.session.id = session_id.unwrap_or("none"), |
| 56 | a3s.agent.max_turns = self.config.max_tool_rounds, |
| 57 | "a3s.agent.execute_from_messages started" |
| 58 | ); |
| 59 | |
| 60 | // Extract the last user message text for hooks, memory recall, and events. |
| 61 | // Pass empty prompt so execute_loop skips adding a duplicate user message, |
| 62 | // but provide effective_prompt for hook/memory/event purposes. |
| 63 | let effective_prompt = messages |
| 64 | .iter() |
| 65 | .rev() |
| 66 | .find(|m| m.role == "user") |
| 67 | .map(|m| m.text()) |
| 68 | .unwrap_or_default(); |
| 69 | |
| 70 | let result = self |
| 71 | .execute_loop_inner( |
| 72 | &messages, |
| 73 | "", |
| 74 | &effective_prompt, |
| 75 | None, // no pre-computed style; resolve inside the loop |
| 76 | session_id, |
| 77 | event_tx, |
| 78 | token, |
| 79 | true, // emit_end: this is a standalone execution |
| 80 | seed, |
| 81 | ) |
| 82 | .await; |
| 83 | |
| 84 | match &result { |
| 85 | Ok(r) => tracing::info!( |
| 86 | a3s.agent.tool_calls_count = r.tool_calls_count, |
| 87 | a3s.llm.total_tokens = r.usage.total_tokens, |
| 88 | "a3s.agent.execute_from_messages completed" |
| 89 | ), |
| 90 | Err(e) => tracing::warn!( |
| 91 | error = %e, |
| 92 | "a3s.agent.execute_from_messages failed" |
| 93 | ), |
| 94 | } |
| 95 | |
| 96 | result |
| 97 | } |
| 98 | } |
no test coverage detected