From 57f04a77aa165bd11ab7cc1704df4bf5a80d8b6f Mon Sep 17 00:00:00 2001 From: "Dhanji R. Prasanna" Date: Mon, 26 Jan 2026 15:43:39 +1100 Subject: [PATCH] Add template expansion to interactive prompts Apply {{today}} and other template variables to user input in: - Interactive mode (single and multiline) - Accumulative mode requirements --- crates/g3-cli/src/accumulative.rs | 4 +++- crates/g3-cli/src/interactive.rs | 11 +++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/g3-cli/src/accumulative.rs b/crates/g3-cli/src/accumulative.rs index 679e435..414b077 100644 --- a/crates/g3-cli/src/accumulative.rs +++ b/crates/g3-cli/src/accumulative.rs @@ -17,6 +17,7 @@ use crate::simple_output::SimpleOutput; use crate::ui_writer_impl::ConsoleUiWriter; use g3_core::ui_writer::UiWriter; use crate::utils::load_config_with_cli_overrides; +use crate::template::process_template; /// Run accumulative autonomous mode - accumulates requirements from user input /// and runs autonomous mode after each input. @@ -75,7 +76,8 @@ pub async fn run_accumulative_mode( let readline = rl.readline("requirement> "); match readline { Ok(line) => { - let input = line.trim().to_string(); + // Apply template expansion (e.g., {{today}} -> 2026-01-26 (Monday)) + let input = process_template(line.trim()); if input.is_empty() { continue; diff --git a/crates/g3-cli/src/interactive.rs b/crates/g3-cli/src/interactive.rs index 6feb226..6411533 100644 --- a/crates/g3-cli/src/interactive.rs +++ b/crates/g3-cli/src/interactive.rs @@ -17,6 +17,7 @@ use crate::g3_status::{G3Status, Status}; use crate::project::Project; use crate::project_files::extract_readme_heading; use crate::simple_output::SimpleOutput; +use crate::template::process_template; use crate::task_execution::execute_task_with_retry; use crate::utils::display_context_progress; @@ -209,10 +210,11 @@ pub async fn run_interactive( break; } - // Process the multiline input + // Process the multiline input (with template expansion) + let processed_input = process_template(&input); execute_task_with_retry( &mut agent, - &input, + &processed_input, show_prompt, show_code, &output, @@ -248,10 +250,11 @@ pub async fn run_interactive( } } - // Process the single line input + // Process the single line input (with template expansion) + let processed_input = process_template(&input); execute_task_with_retry( &mut agent, - &input, + &processed_input, show_prompt, show_code, &output,