From fecc200614270051ddc63b2b92959c22a100b72c Mon Sep 17 00:00:00 2001 From: syui Date: Tue, 24 Mar 2026 15:28:41 +0900 Subject: [PATCH] feat(headless): add review command with auto-commit on pass --- src/headless.rs | 28 ++++++++++++++++++++++++++++ src/main.rs | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/src/headless.rs b/src/headless.rs index 05f8d1c..00ef5a2 100644 --- a/src/headless.rs +++ b/src/headless.rs @@ -147,6 +147,34 @@ pub fn run(config_or_task: &str, cwd_override: Option<&str>, name_override: Opti Ok(()) } +/// Review changes, auto-commit if no issues found. +pub fn review() { + let configs = config::preset("review").unwrap(); + match execute_once(configs) { + Ok(()) => { + // Check if decision says "no issues" / "問題なし" / "コミット可能" + if let Ok(content) = std::fs::read_to_string(format!("{STATE_DIR}/decision.json")) { + if let Ok(d) = serde_json::from_str::(&content) { + let text = d["decision"].as_str().unwrap_or("").to_lowercase(); + if text.contains("コミット可能") || text.contains("no issues") || text.contains("問題なし") || text.contains("commit") { + eprintln!("\n review passed → running commit..."); + commit(); + } + } + } + } + Err(e) => eprintln!(" review failed: {e}"), + } +} + +/// Run daily health check. +pub fn daily() { + match run_preset("daily") { + Ok(()) => {} + Err(e) => eprintln!(" daily failed: {e}"), + } +} + pub fn run_preset(preset_name: &str) -> Result<(), String> { let configs = config::preset(preset_name) .ok_or_else(|| format!("unknown preset: {preset_name}"))?; diff --git a/src/main.rs b/src/main.rs index 14c0fa4..3d64d52 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,6 +93,8 @@ fn main() { aishell::headless::log(&id); } Some("decision") => aishell::headless::decision(), + Some("review") => aishell::headless::review(), + Some("daily") => aishell::headless::daily(), Some("plan") => { let preset = parse_flag("-p"); let config = parse_flag("-f"); @@ -140,6 +142,8 @@ fn print_help() { println!("aishell v{}\n", env!("CARGO_PKG_VERSION")); println!("USAGE:"); println!(" aishell TUI (AI + Agents + Shell)"); + println!(" aishell review Review changes + auto-commit if clean"); + println!(" aishell daily Health + quality + idea check"); println!(" aishell run Run single agent"); println!(" aishell run -p Preset: daily, review, improve, report"); println!(" aishell run -f Custom config file");