From c19127f8096f82bbadbe95c056d486d8fe8bb4e7 Mon Sep 17 00:00:00 2001 From: Jochen Date: Wed, 26 Nov 2025 08:16:54 +1100 Subject: [PATCH] make sure user requirements are included --- crates/g3-cli/src/lib.rs | 2 +- crates/g3-planner/src/lib.rs | 19 +++++++++++++++---- crates/g3-planner/src/prompts.rs | 15 +++++++++++---- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/crates/g3-cli/src/lib.rs b/crates/g3-cli/src/lib.rs index 39cd251..586c442 100644 --- a/crates/g3-cli/src/lib.rs +++ b/crates/g3-cli/src/lib.rs @@ -1728,7 +1728,7 @@ async fn run_autonomous( let status_callback: g3_planner::StatusCallback = Box::new(move |msg: &str| { output_clone.print(msg); }); - match g3_planner::get_initial_discovery_messages(&path_str, provider, Some(&status_callback)).await { + match g3_planner::get_initial_discovery_messages(&path_str, Some(&requirements), provider, Some(&status_callback)).await { Ok(messages) => (messages, Some(path_str.to_string())), Err(e) => { output.print(&format!("⚠️ LLM discovery failed: {}, skipping fast-start", e)); diff --git a/crates/g3-planner/src/lib.rs b/crates/g3-planner/src/lib.rs index aaa4757..2d11afe 100644 --- a/crates/g3-planner/src/lib.rs +++ b/crates/g3-planner/src/lib.rs @@ -27,6 +27,7 @@ pub type StatusCallback = Box; /// /// * `codebase_path` - The path to the codebase to explore /// * `provider` - An LLM provider to query for exploration commands +/// * `requirements_text` - Optional requirements text to include in the discovery prompt /// * `status_callback` - Optional callback for status updates /// /// # Returns @@ -34,6 +35,7 @@ pub type StatusCallback = Box; /// A `Result>` containing Assistant messages with JSON tool call strings. pub async fn get_initial_discovery_messages( codebase_path: &str, + requirements_text: Option<&str>, provider: &dyn LLMProvider, status_callback: Option<&StatusCallback>, ) -> Result> { @@ -50,10 +52,19 @@ pub async fn get_initial_discovery_messages( let codebase_report = explore_codebase(codebase_path); // Step 2: Build the prompt with the codebase report appended - let user_prompt = format!( - "{}\n\n=== CODEBASE REPORT ===\n\n{}", - DISCOVERY_REQUIREMENTS_PROMPT, codebase_report - ); + let user_prompt = if let Some(requirements) = requirements_text { + format!( + "{}\n\n + === REQUIREMENTS ===\n\n{}\n\n + === CODEBASE REPORT ===\n\n{}", + DISCOVERY_REQUIREMENTS_PROMPT, requirements, codebase_report + ) + } else { + format!( + "{}\n\n=== CODEBASE REPORT ===\n\n{}", + DISCOVERY_REQUIREMENTS_PROMPT, codebase_report + ) + }; // Step 3: Create messages for the LLM let messages = vec![ diff --git a/crates/g3-planner/src/prompts.rs b/crates/g3-planner/src/prompts.rs index cd1a62d..ede6241 100644 --- a/crates/g3-planner/src/prompts.rs +++ b/crates/g3-planner/src/prompts.rs @@ -19,13 +19,20 @@ pub const DISCOVERY_REQUIREMENTS_PROMPT: &str = r#"**CRITICAL**: DO ABSOLUTELY N UNDERSTAND WHICH PARTS OF THE CODE YOU MIGHT BE INTERESTED IN, AND WHAT SEARCH/GREP EXPRESSIONS YOU MIGHT WANT TO USE TO GET A BETTER UNDERSTANDING OF THE CODEBASE. -Your task is to analyze the codebase structure provided below and generate shell commands to explore it further. +Your task is to analyze the codebase overview provided below and generate shell commands to explore it further - in particular, those +you deem most relevant to the requirements given below. Your output MUST include: -1. A section with heading {{SUMMARY BASED ON INITIAL INFO}} containing a brief summary of what you understand about the codebase structure (max 10000 tokens). -2. A section with heading {{CODE EXPLORATION COMMANDS}} containing shell commands to explore the codebase further. +1. retain as much information of that as you consider relevant to the request and your next job (not to be attempted yet) +for planning the main tasks for what you will implement. Ideally that should not be more than 10000 tokens. Write a section +that you will later use in your next phase, which is detailed implementation plan. Use the heading {{SUMMARY BASED ON INITIAL +INFO}}. +2. Based on the initial summary, try plan ahead for what you need for a deep dive into the code. Do pay attention that +the information should be sparing. - Use tools like `ls`, `rg` (ripgrep), `grep`, `sed`, `cat`, `head`, `tail` etc. - - Focus on commands that will help understand the code structure without dumping entire files. + - Focus on commands that will help understand the code STRUCTURE without dumping large sections of file. + - e.g. for Rust you might try `rg --no-heading --line-number --with-filename --max-filesize 500K -g '*.rs' '^(pub )?(struct|enum|type|union)` - Mark the beginning and end of the commands with "```". + - Carefully consider which commands give you the most relevant information, make it a maximum of 20. DO NOT ADD ANY COMMENTS OR OTHER EXPLANATION IN THE COMMANDS SECTION, JUST INCLUDE THE SHELL COMMANDS."#;