From fc79a46c7a7a8dbd9f399898ce5a8486bab1805a Mon Sep 17 00:00:00 2001 From: jif-oai Date: Thu, 16 Oct 2025 14:44:50 +0100 Subject: [PATCH] Better UI 2 --- codex-rs/cli/src/infty/progress.rs | 5 +--- codex-rs/codex-infty/src/orchestrator.rs | 29 ++++++++++++++++-------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/codex-rs/cli/src/infty/progress.rs b/codex-rs/cli/src/infty/progress.rs index ae7a31f961..cbeacdb803 100644 --- a/codex-rs/cli/src/infty/progress.rs +++ b/codex-rs/cli/src/infty/progress.rs @@ -77,10 +77,7 @@ impl TerminalProgressReporter { impl ProgressReporter for TerminalProgressReporter { fn objective_posted(&self, objective: &str) { - let objective_line = format!( - "{}", - format!("→ objective: {objective}") - ); + let objective_line = format!("{}", format!("→ objective: {objective}")); self.print_exchange("user", "solver", vec![objective_line], true); } diff --git a/codex-rs/codex-infty/src/orchestrator.rs b/codex-rs/codex-infty/src/orchestrator.rs index 8aeeb479d6..287134a74c 100644 --- a/codex-rs/codex-infty/src/orchestrator.rs +++ b/codex-rs/codex-infty/src/orchestrator.rs @@ -1,4 +1,5 @@ use std::fs; +use std::io::Write; use std::path::Path; use std::path::PathBuf; use std::sync::Arc; @@ -225,6 +226,7 @@ impl InftyOrchestrator { if let Some(p) = self.progress_ref() { p.solver_event(&event.event.msg); } match &event.event.msg { EventMsg::AgentMessage(agent_msg) => { + println!(); // TODO drop if let Some(p) = self.progress_ref() { p.solver_agent_message(agent_msg); } if let Some(signal) = parse_solver_signal(&agent_msg.message) { state.waiting_for_signal = false; @@ -275,13 +277,16 @@ impl InftyOrchestrator { deliverable_path, "solver final_delivery missing deliverable_path", )?; - if deliverable_path.is_empty() { - bail!("solver final_delivery provided empty path"); - } + if deliverable_path.is_empty() { bail!("solver final_delivery provided empty path"); } + + // Minimal behavior: if the provided path cannot be resolved, + // send a placeholder claim so verifiers can fail it. let resolved = crate::utils::resolve_deliverable_path( sessions.store.path(), &deliverable_path, - )?; + ) + .unwrap_or_else(|_| std::path::PathBuf::from("file not existing")); + let summary_clean = crate::utils::trim_to_non_empty(summary); let summary_ref = summary_clean.as_deref(); if let Some(p) = self.progress_ref() { p.final_delivery(&resolved, summary_ref); } @@ -295,10 +300,7 @@ impl InftyOrchestrator { &solver_role, ) .await?; - if !verified { - state.pending_solver_turn_completion = true; - continue; - } + if !verified { state.pending_solver_turn_completion = true; continue; } sessions.store.touch()?; return Ok(RunOutcome { run_id: sessions.run_id.clone(), @@ -319,7 +321,16 @@ impl InftyOrchestrator { state.pending_solver_turn_completion = false; } } - _ => {} + EventMsg::Error(error) => { + println!("Error: {:?}", error); + } + EventMsg::StreamError(error) => { + println!("Stream error: {:?}", error); + } + _ => { + print!("."); + let _ = std::io::stdout().flush(); + } } } _ = &mut ctrl_c => {