From 99125fc39ef7970b0d16eaa3a504f06c5d34f66d Mon Sep 17 00:00:00 2001 From: Jochen Date: Thu, 27 Nov 2025 13:21:40 +1100 Subject: [PATCH] completely remove the skipping first player logic --- crates/g3-cli/src/lib.rs | 10 -------- crates/g3-core/src/lib.rs | 5 ---- crates/g3-core/src/project.rs | 47 ----------------------------------- 3 files changed, 62 deletions(-) diff --git a/crates/g3-cli/src/lib.rs b/crates/g3-cli/src/lib.rs index 8c248b5..eef7626 100644 --- a/crates/g3-cli/src/lib.rs +++ b/crates/g3-cli/src/lib.rs @@ -1703,16 +1703,6 @@ async fn run_autonomous( let loop_start = Instant::now(); output.print("🔄 Starting coach-player feedback loop..."); - // Check if implementation files already exist - let skip_first_player = project.has_implementation_files(agent.ui_writer()); - if skip_first_player { - output.print("📂 Detected existing implementation files in workspace"); - output.print("⏭️ Skipping first player turn - proceeding directly to coach review"); - } else { - output.print("📂 No existing implementation files detected"); - output.print("🎯 Starting with player implementation"); - } - // Load fast-discovery messages before the loop starts (if enabled) let (discovery_messages, discovery_working_dir): (Vec, Option) = if let Some(ref codebase_path) = codebase_fast_start { diff --git a/crates/g3-core/src/lib.rs b/crates/g3-core/src/lib.rs index a876654..e13a1fd 100644 --- a/crates/g3-core/src/lib.rs +++ b/crates/g3-core/src/lib.rs @@ -1297,11 +1297,6 @@ impl Agent { self.providers.get(None) } - /// Get a reference to the UI writer - pub fn ui_writer(&self) -> &W { - &self.ui_writer - } - /// Get the current session ID for this agent pub fn get_session_id(&self) -> Option<&str> { self.session_id.as_deref() diff --git a/crates/g3-core/src/project.rs b/crates/g3-core/src/project.rs index 4d0b597..0263b7c 100644 --- a/crates/g3-core/src/project.rs +++ b/crates/g3-core/src/project.rs @@ -1,9 +1,6 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; -use std::process::exit; - -use crate::ui_writer::UiWriter; /// Represents a G3 project with workspace configuration #[derive(Debug, Clone, Serialize, Deserialize)] @@ -101,50 +98,6 @@ impl Project { self.requirements_text.is_some() || self.requirements_path.is_some() } - /// Check if implementation files exist in the workspace - pub fn has_implementation_files(&self, ui_writer: &W) -> bool { - self.check_dir_for_implementation_files(&self.workspace_dir, ui_writer) - } - - /// Recursively check a directory for implementation files - #[allow(clippy::only_used_in_recursion)] - fn check_dir_for_implementation_files(&self, dir: &Path, ui_writer: &W) -> bool { - // Common source file extensions - let extensions = vec![ - "swift", "rs", "py", "js", "ts", "java", "cpp", "c", - "go", "rb", "php", "cs", "kt", "scala", "m", "h" - ]; - - if let Ok(entries) = std::fs::read_dir(dir) { - for entry in entries.flatten() { - let path = entry.path(); - - if path.is_file() { - // Check if it's a source file - if let Some(ext) = path.extension() { - if let Some(ext_str) = ext.to_str() { - if extensions.contains(&ext_str) { - ui_writer.println(&format!("⚠️⚠️Existing implementation file found: {}", path.display())); - return true; - } - } - } - } else if path.is_dir() { - // Skip hidden directories and common non-source directories - if let Some(name) = path.file_name().and_then(|n| n.to_str()) { - if !name.starts_with('.') && name != "logs" && name != "target" && name != "node_modules" { - // Recursively check subdirectories - if self.check_dir_for_implementation_files(&path, ui_writer) { - return true; - } - } - } - } - } - } - false - } - /// Read the requirements file content pub fn read_requirements(&self) -> Result> { // Prioritize requirements text override