auto mode report
This commit is contained in:
@@ -876,26 +876,38 @@ async fn run_autonomous(
|
|||||||
" {}/requirements.md",
|
" {}/requirements.md",
|
||||||
project.workspace().display()
|
project.workspace().display()
|
||||||
));
|
));
|
||||||
|
|
||||||
// Generate final report even for early exit
|
// Generate final report even for early exit
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
let context_window = agent.get_context_window();
|
let context_window = agent.get_context_window();
|
||||||
|
|
||||||
output.print(&format!("\n{}", "=".repeat(60)));
|
output.print(&format!("\n{}", "=".repeat(60)));
|
||||||
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
output.print(&format!("⏱️ Total Duration: {:.2}s", elapsed.as_secs_f64()));
|
output.print(&format!(
|
||||||
|
"⏱️ Total Duration: {:.2}s",
|
||||||
|
elapsed.as_secs_f64()
|
||||||
|
));
|
||||||
output.print(&format!("🔄 Turns Taken: 0/{}", max_turns));
|
output.print(&format!("🔄 Turns Taken: 0/{}", max_turns));
|
||||||
output.print(&format!("📝 Final Status: ⚠️ NO REQUIREMENTS FILE"));
|
output.print(&format!("📝 Final Status: ⚠️ NO REQUIREMENTS FILE"));
|
||||||
|
|
||||||
output.print("\n📈 Token Usage Statistics:");
|
output.print("\n📈 Token Usage Statistics:");
|
||||||
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
||||||
output.print(&format!(" • Total Available: {}", context_window.total_tokens));
|
output.print(&format!(
|
||||||
output.print(&format!(" • Cumulative Tokens: {}", context_window.cumulative_tokens));
|
" • Total Available: {}",
|
||||||
output.print(&format!(" • Usage Percentage: {:.1}%", context_window.percentage_used()));
|
context_window.total_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Cumulative Tokens: {}",
|
||||||
|
context_window.cumulative_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Usage Percentage: {:.1}%",
|
||||||
|
context_window.percentage_used()
|
||||||
|
));
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -904,26 +916,38 @@ async fn run_autonomous(
|
|||||||
Some(content) => content,
|
Some(content) => content,
|
||||||
None => {
|
None => {
|
||||||
output.print("❌ Error: Could not read requirements.md");
|
output.print("❌ Error: Could not read requirements.md");
|
||||||
|
|
||||||
// Generate final report even for early exit
|
// Generate final report even for early exit
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
let context_window = agent.get_context_window();
|
let context_window = agent.get_context_window();
|
||||||
|
|
||||||
output.print(&format!("\n{}", "=".repeat(60)));
|
output.print(&format!("\n{}", "=".repeat(60)));
|
||||||
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
output.print(&format!("⏱️ Total Duration: {:.2}s", elapsed.as_secs_f64()));
|
output.print(&format!(
|
||||||
|
"⏱️ Total Duration: {:.2}s",
|
||||||
|
elapsed.as_secs_f64()
|
||||||
|
));
|
||||||
output.print(&format!("🔄 Turns Taken: 0/{}", max_turns));
|
output.print(&format!("🔄 Turns Taken: 0/{}", max_turns));
|
||||||
output.print(&format!("📝 Final Status: ⚠️ CANNOT READ REQUIREMENTS"));
|
output.print(&format!("📝 Final Status: ⚠️ CANNOT READ REQUIREMENTS"));
|
||||||
|
|
||||||
output.print("\n📈 Token Usage Statistics:");
|
output.print("\n📈 Token Usage Statistics:");
|
||||||
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
||||||
output.print(&format!(" • Total Available: {}", context_window.total_tokens));
|
output.print(&format!(
|
||||||
output.print(&format!(" • Cumulative Tokens: {}", context_window.cumulative_tokens));
|
" • Total Available: {}",
|
||||||
output.print(&format!(" • Usage Percentage: {:.1}%", context_window.percentage_used()));
|
context_window.total_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Cumulative Tokens: {}",
|
||||||
|
context_window.cumulative_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Usage Percentage: {:.1}%",
|
||||||
|
context_window.percentage_used()
|
||||||
|
));
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -972,10 +996,17 @@ async fn run_autonomous(
|
|||||||
let mut player_retry_count = 0;
|
let mut player_retry_count = 0;
|
||||||
const MAX_PLAYER_RETRIES: u32 = 3;
|
const MAX_PLAYER_RETRIES: u32 = 3;
|
||||||
let mut player_failed = false;
|
let mut player_failed = false;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match agent
|
match agent
|
||||||
.execute_task_with_timing(&player_prompt, None, false, show_prompt, show_code, true)
|
.execute_task_with_timing(
|
||||||
|
&player_prompt,
|
||||||
|
None,
|
||||||
|
false,
|
||||||
|
show_prompt,
|
||||||
|
show_code,
|
||||||
|
true,
|
||||||
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
@@ -988,34 +1019,54 @@ async fn run_autonomous(
|
|||||||
// Check if this is a panic (unrecoverable)
|
// Check if this is a panic (unrecoverable)
|
||||||
if e.to_string().contains("panic") {
|
if e.to_string().contains("panic") {
|
||||||
output.print(&format!("💥 Player panic detected: {}", e));
|
output.print(&format!("💥 Player panic detected: {}", e));
|
||||||
|
|
||||||
// Generate final report even for panic
|
// Generate final report even for panic
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
let context_window = agent.get_context_window();
|
let context_window = agent.get_context_window();
|
||||||
|
|
||||||
output.print(&format!("\n{}", "=".repeat(60)));
|
output.print(&format!("\n{}", "=".repeat(60)));
|
||||||
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
output.print(&format!("⏱️ Total Duration: {:.2}s", elapsed.as_secs_f64()));
|
output.print(&format!(
|
||||||
|
"⏱️ Total Duration: {:.2}s",
|
||||||
|
elapsed.as_secs_f64()
|
||||||
|
));
|
||||||
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
||||||
output.print(&format!("📝 Final Status: 💥 PLAYER PANIC"));
|
output.print(&format!("📝 Final Status: 💥 PLAYER PANIC"));
|
||||||
|
|
||||||
output.print("\n📈 Token Usage Statistics:");
|
output.print("\n📈 Token Usage Statistics:");
|
||||||
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
output.print(&format!(
|
||||||
output.print(&format!(" • Total Available: {}", context_window.total_tokens));
|
" • Used Tokens: {}",
|
||||||
output.print(&format!(" • Cumulative Tokens: {}", context_window.cumulative_tokens));
|
context_window.used_tokens
|
||||||
output.print(&format!(" • Usage Percentage: {:.1}%", context_window.percentage_used()));
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Total Available: {}",
|
||||||
|
context_window.total_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Cumulative Tokens: {}",
|
||||||
|
context_window.cumulative_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Usage Percentage: {:.1}%",
|
||||||
|
context_window.percentage_used()
|
||||||
|
));
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
player_retry_count += 1;
|
player_retry_count += 1;
|
||||||
output.print(&format!("⚠️ Player error (attempt {}/{}): {}", player_retry_count, MAX_PLAYER_RETRIES, e));
|
output.print(&format!(
|
||||||
|
"⚠️ Player error (attempt {}/{}): {}",
|
||||||
|
player_retry_count, MAX_PLAYER_RETRIES, e
|
||||||
|
));
|
||||||
|
|
||||||
if player_retry_count >= MAX_PLAYER_RETRIES {
|
if player_retry_count >= MAX_PLAYER_RETRIES {
|
||||||
output.print("🔄 Max retries reached for player, marking turn as failed...");
|
output.print(
|
||||||
|
"🔄 Max retries reached for player, marking turn as failed...",
|
||||||
|
);
|
||||||
player_failed = true;
|
player_failed = true;
|
||||||
break; // Exit retry loop
|
break; // Exit retry loop
|
||||||
}
|
}
|
||||||
@@ -1023,19 +1074,22 @@ async fn run_autonomous(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If player failed after max retries, increment turn and continue
|
// If player failed after max retries, increment turn and continue
|
||||||
if player_failed {
|
if player_failed {
|
||||||
output.print(&format!("⚠️ Player turn {} failed after max retries. Moving to next turn.", turn));
|
output.print(&format!(
|
||||||
|
"⚠️ Player turn {} failed after max retries. Moving to next turn.",
|
||||||
|
turn
|
||||||
|
));
|
||||||
turn += 1;
|
turn += 1;
|
||||||
|
|
||||||
// Check if we've reached max turns
|
// Check if we've reached max turns
|
||||||
if turn > max_turns {
|
if turn > max_turns {
|
||||||
output.print("\n=== SESSION COMPLETED - MAX TURNS REACHED ===");
|
output.print("\n=== SESSION COMPLETED - MAX TURNS REACHED ===");
|
||||||
output.print(&format!("⏰ Maximum turns ({}) reached", max_turns));
|
output.print(&format!("⏰ Maximum turns ({}) reached", max_turns));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Continue to next iteration with empty feedback (restart from scratch)
|
// Continue to next iteration with empty feedback (restart from scratch)
|
||||||
coach_feedback = String::new();
|
coach_feedback = String::new();
|
||||||
continue;
|
continue;
|
||||||
@@ -1089,13 +1143,13 @@ Remember: Be thorough in your review but concise in your feedback. APPROVE if th
|
|||||||
);
|
);
|
||||||
|
|
||||||
output.print("🎓 Starting coach review...");
|
output.print("🎓 Starting coach review...");
|
||||||
|
|
||||||
// Execute coach task with retry on error
|
// Execute coach task with retry on error
|
||||||
let mut coach_retry_count = 0;
|
let mut coach_retry_count = 0;
|
||||||
const MAX_COACH_RETRIES: u32 = 3;
|
const MAX_COACH_RETRIES: u32 = 3;
|
||||||
let mut coach_failed = false;
|
let mut coach_failed = false;
|
||||||
let coach_result_opt;
|
let coach_result_opt;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match coach_agent
|
match coach_agent
|
||||||
.execute_task_with_timing(&coach_prompt, None, false, show_prompt, show_code, true)
|
.execute_task_with_timing(&coach_prompt, None, false, show_prompt, show_code, true)
|
||||||
@@ -1109,32 +1163,47 @@ Remember: Be thorough in your review but concise in your feedback. APPROVE if th
|
|||||||
// Check if this is a panic (unrecoverable)
|
// Check if this is a panic (unrecoverable)
|
||||||
if e.to_string().contains("panic") {
|
if e.to_string().contains("panic") {
|
||||||
output.print(&format!("💥 Coach panic detected: {}", e));
|
output.print(&format!("💥 Coach panic detected: {}", e));
|
||||||
|
|
||||||
// Generate final report even for panic
|
// Generate final report even for panic
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
let context_window = agent.get_context_window();
|
let context_window = agent.get_context_window();
|
||||||
|
|
||||||
output.print(&format!("\n{}", "=".repeat(60)));
|
output.print(&format!("\n{}", "=".repeat(60)));
|
||||||
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
output.print(&format!("⏱️ Total Duration: {:.2}s", elapsed.as_secs_f64()));
|
output.print(&format!(
|
||||||
|
"⏱️ Total Duration: {:.2}s",
|
||||||
|
elapsed.as_secs_f64()
|
||||||
|
));
|
||||||
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
||||||
output.print(&format!("📝 Final Status: 💥 COACH PANIC"));
|
output.print(&format!("📝 Final Status: 💥 COACH PANIC"));
|
||||||
|
|
||||||
output.print("\n📈 Token Usage Statistics:");
|
output.print("\n📈 Token Usage Statistics:");
|
||||||
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
||||||
output.print(&format!(" • Total Available: {}", context_window.total_tokens));
|
output.print(&format!(
|
||||||
output.print(&format!(" • Cumulative Tokens: {}", context_window.cumulative_tokens));
|
" • Total Available: {}",
|
||||||
output.print(&format!(" • Usage Percentage: {:.1}%", context_window.percentage_used()));
|
context_window.total_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Cumulative Tokens: {}",
|
||||||
|
context_window.cumulative_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Usage Percentage: {:.1}%",
|
||||||
|
context_window.percentage_used()
|
||||||
|
));
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
coach_retry_count += 1;
|
coach_retry_count += 1;
|
||||||
output.print(&format!("⚠️ Coach error (attempt {}/{}): {}", coach_retry_count, MAX_COACH_RETRIES, e));
|
output.print(&format!(
|
||||||
|
"⚠️ Coach error (attempt {}/{}): {}",
|
||||||
|
coach_retry_count, MAX_COACH_RETRIES, e
|
||||||
|
));
|
||||||
|
|
||||||
if coach_retry_count >= MAX_COACH_RETRIES {
|
if coach_retry_count >= MAX_COACH_RETRIES {
|
||||||
output.print("🔄 Max retries reached for coach, using default feedback...");
|
output.print("🔄 Max retries reached for coach, using default feedback...");
|
||||||
// Provide default feedback and break out of retry loop
|
// Provide default feedback and break out of retry loop
|
||||||
@@ -1146,15 +1215,18 @@ Remember: Be thorough in your review but concise in your feedback. APPROVE if th
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
output.print("🎓 Coach review completed");
|
output.print("🎓 Coach review completed");
|
||||||
|
|
||||||
// If coach failed after max retries, increment turn and continue with default feedback
|
// If coach failed after max retries, increment turn and continue with default feedback
|
||||||
if coach_failed {
|
if coach_failed {
|
||||||
output.print(&format!("⚠️ Coach turn {} failed after max retries. Using default feedback.", turn));
|
output.print(&format!(
|
||||||
|
"⚠️ Coach turn {} failed after max retries. Using default feedback.",
|
||||||
|
turn
|
||||||
|
));
|
||||||
coach_feedback = "The implementation needs review. Please ensure all requirements are met and the code compiles without errors.".to_string();
|
coach_feedback = "The implementation needs review. Please ensure all requirements are met and the code compiles without errors.".to_string();
|
||||||
turn += 1;
|
turn += 1;
|
||||||
|
|
||||||
if turn > max_turns {
|
if turn > max_turns {
|
||||||
output.print("\n=== SESSION COMPLETED - MAX TURNS REACHED ===");
|
output.print("\n=== SESSION COMPLETED - MAX TURNS REACHED ===");
|
||||||
output.print(&format!("⏰ Maximum turns ({}) reached", max_turns));
|
output.print(&format!("⏰ Maximum turns ({}) reached", max_turns));
|
||||||
@@ -1211,34 +1283,47 @@ Remember: Be thorough in your review but concise in your feedback. APPROVE if th
|
|||||||
// Generate final report
|
// Generate final report
|
||||||
let elapsed = start_time.elapsed();
|
let elapsed = start_time.elapsed();
|
||||||
let context_window = agent.get_context_window();
|
let context_window = agent.get_context_window();
|
||||||
|
|
||||||
output.print(&format!("\n{}", "=".repeat(60)));
|
output.print(&format!("\n{}", "=".repeat(60)));
|
||||||
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
output.print("📊 AUTONOMOUS MODE SESSION REPORT");
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
output.print(&format!("⏱️ Total Duration: {:.2}s", elapsed.as_secs_f64()));
|
output.print(&format!(
|
||||||
|
"⏱️ Total Duration: {:.2}s",
|
||||||
|
elapsed.as_secs_f64()
|
||||||
|
));
|
||||||
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
output.print(&format!("🔄 Turns Taken: {}/{}", turn, max_turns));
|
||||||
output.print(&format!("📝 Final Status: {}",
|
output.print(&format!(
|
||||||
if implementation_approved {
|
"📝 Final Status: {}",
|
||||||
"✅ APPROVED"
|
if implementation_approved {
|
||||||
} else if turn >= max_turns {
|
"✅ APPROVED"
|
||||||
"⏰ MAX TURNS REACHED"
|
} else if turn >= max_turns {
|
||||||
} else {
|
"⏰ MAX TURNS REACHED"
|
||||||
"⚠️ INCOMPLETE"
|
} else {
|
||||||
|
"⚠️ INCOMPLETE"
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
output.print("\n📈 Token Usage Statistics:");
|
output.print("\n📈 Token Usage Statistics:");
|
||||||
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
output.print(&format!(" • Used Tokens: {}", context_window.used_tokens));
|
||||||
output.print(&format!(" • Total Available: {}", context_window.total_tokens));
|
output.print(&format!(
|
||||||
output.print(&format!(" • Cumulative Tokens: {}", context_window.cumulative_tokens));
|
" • Total Available: {}",
|
||||||
output.print(&format!(" • Usage Percentage: {:.1}%", context_window.percentage_used()));
|
context_window.total_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Cumulative Tokens: {}",
|
||||||
|
context_window.cumulative_tokens
|
||||||
|
));
|
||||||
|
output.print(&format!(
|
||||||
|
" • Usage Percentage: {:.1}%",
|
||||||
|
context_window.percentage_used()
|
||||||
|
));
|
||||||
output.print(&"=".repeat(60));
|
output.print(&"=".repeat(60));
|
||||||
|
|
||||||
if implementation_approved {
|
if implementation_approved {
|
||||||
output.print("\n🎉 Autonomous mode completed successfully");
|
output.print("\n🎉 Autonomous mode completed successfully");
|
||||||
} else {
|
} else {
|
||||||
output.print("\n🔄 Autonomous mode completed (max iterations)");
|
output.print("\n🔄 Autonomous mode terminated (max iterations)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user