Fix auto-continue bug: don't return early when tools executed but final_output not called

The bug was in the chunk.finished block inside stream_completion_with_tools.
When no tool was executed in the CURRENT iteration (!tool_executed), the code
would return early without checking if tools were executed in PREVIOUS iterations
(any_tool_executed) and final_output was never called.

This caused the agent to terminate prematurely after executing tools like
todo_read when the LLM responded with text instead of calling final_output.

The fix adds a check: if any_tool_executed && !final_output_called, we break
to let the outer loop's auto-continue logic prompt the LLM to continue.

Also fixed missing debug! import in g3-console/src/main.rs.
This commit is contained in:
Dhanji R. Prasanna
2025-12-22 16:45:17 +11:00
parent 923def0ab2
commit da91459e09
3 changed files with 12 additions and 25 deletions

View File

@@ -16,7 +16,7 @@ use std::sync::Arc;
use tokio::sync::Mutex;
use tower_http::cors::CorsLayer;
use tower_http::services::ServeDir;
use tracing::Level;
use tracing::{debug, Level};
use tracing_subscriber;
#[derive(Parser, Debug)]

View File

@@ -4884,6 +4884,17 @@ impl<W: UiWriter> Agent<W> {
));
}
// If tools were executed in previous iterations but final_output wasn't called,
// break to let the outer loop's auto-continue logic handle it
if any_tool_executed && !final_output_called {
debug!("Tools were executed but final_output not called - breaking to auto-continue");
// Add the text response to context before breaking
if has_text_response && !current_response.trim().is_empty() {
full_response = current_response.clone();
}
break;
}
// Set full_response to current_response (don't append)
// current_response already contains everything that was displayed
// Don't set full_response here - it would duplicate the output

View File

@@ -1,24 +0,0 @@
#!/bin/bash
set -e
# Clean logs first
rm -rf ~/RustroverProjects/g3/logs/*.log ~/RustroverProjects/g3/logs/*.txt 2>/dev/null || true
# Create test requirements file
mkdir -p /tmp/g3-test-planning/g3-plan
cat > /tmp/g3-test-planning/g3-plan/new_requirements.md <<'EOF'
Simple test task: List all .rs files in the src directory.
EOF
# Initialize git repo for test (planning mode requires git)
cd /tmp/g3-test-planning
if [ ! -d .git ]; then
git init
git config user.name "Test User"
git config user.email "test@example.com"
git add .
git commit -m "Initial commit" || true
fi
echo "Test environment ready at /tmp/g3-test-planning"
echo "Run: cd /tmp && ~/RustroverProjects/g3/target/release/g3 --planning --codepath /tmp/g3-test-planning --no-git"