Add template expansion to interactive prompts

Apply {{today}} and other template variables to user input in:
- Interactive mode (single and multiline)
- Accumulative mode requirements
This commit is contained in:
Dhanji R. Prasanna
2026-01-26 15:43:39 +11:00
parent 7806897f00
commit 57f04a77aa
2 changed files with 10 additions and 5 deletions

View File

@@ -17,6 +17,7 @@ use crate::simple_output::SimpleOutput;
use crate::ui_writer_impl::ConsoleUiWriter; use crate::ui_writer_impl::ConsoleUiWriter;
use g3_core::ui_writer::UiWriter; use g3_core::ui_writer::UiWriter;
use crate::utils::load_config_with_cli_overrides; use crate::utils::load_config_with_cli_overrides;
use crate::template::process_template;
/// Run accumulative autonomous mode - accumulates requirements from user input /// Run accumulative autonomous mode - accumulates requirements from user input
/// and runs autonomous mode after each input. /// and runs autonomous mode after each input.
@@ -75,7 +76,8 @@ pub async fn run_accumulative_mode(
let readline = rl.readline("requirement> "); let readline = rl.readline("requirement> ");
match readline { match readline {
Ok(line) => { 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() { if input.is_empty() {
continue; continue;

View File

@@ -17,6 +17,7 @@ use crate::g3_status::{G3Status, Status};
use crate::project::Project; use crate::project::Project;
use crate::project_files::extract_readme_heading; use crate::project_files::extract_readme_heading;
use crate::simple_output::SimpleOutput; use crate::simple_output::SimpleOutput;
use crate::template::process_template;
use crate::task_execution::execute_task_with_retry; use crate::task_execution::execute_task_with_retry;
use crate::utils::display_context_progress; use crate::utils::display_context_progress;
@@ -209,10 +210,11 @@ pub async fn run_interactive<W: UiWriter>(
break; break;
} }
// Process the multiline input // Process the multiline input (with template expansion)
let processed_input = process_template(&input);
execute_task_with_retry( execute_task_with_retry(
&mut agent, &mut agent,
&input, &processed_input,
show_prompt, show_prompt,
show_code, show_code,
&output, &output,
@@ -248,10 +250,11 @@ pub async fn run_interactive<W: UiWriter>(
} }
} }
// Process the single line input // Process the single line input (with template expansion)
let processed_input = process_template(&input);
execute_task_with_retry( execute_task_with_retry(
&mut agent, &mut agent,
&input, &processed_input,
show_prompt, show_prompt,
show_code, show_code,
&output, &output,