diff --git a/lib/crates/fabro-cli/src/commands/resume.rs b/lib/crates/fabro-cli/src/commands/resume.rs index 35e1ef870..bc3835ef0 100644 --- a/lib/crates/fabro-cli/src/commands/resume.rs +++ b/lib/crates/fabro-cli/src/commands/resume.rs @@ -6,7 +6,7 @@ use std::time::{Duration, Instant}; use anyhow::{bail, Context}; use clap::Args; -use fabro_agent::{Sandbox, WorktreeConfig, WorktreeSandbox}; +use fabro_agent::{DockerSandbox, DockerSandboxConfig, Sandbox, WorktreeConfig, WorktreeSandbox}; use fabro_config::run::RunDefaults; use fabro_graphviz::graph::Graph; use fabro_interview::{AutoApproveInterviewer, ConsoleInterviewer, Interviewer}; @@ -37,7 +37,7 @@ pub struct ResumeArgs { pub run: Option, /// Resume from a checkpoint file (requires --workflow) - #[arg(long)] + #[arg(long, conflicts_with = "run", requires = "workflow")] pub checkpoint: Option, /// Override workflow graph (required with --checkpoint) @@ -179,9 +179,22 @@ async fn prepare_from_checkpoint( }; let sandbox: Arc = match sandbox_provider { - SandboxProvider::Local | SandboxProvider::Docker => { + SandboxProvider::Local => { local_sandbox_with_callback(original_cwd.clone(), Arc::clone(&emitter)) } + SandboxProvider::Docker => { + let config = DockerSandboxConfig { + host_working_directory: original_cwd.to_string_lossy().to_string(), + ..DockerSandboxConfig::default() + }; + let mut env = DockerSandbox::new(config) + .map_err(|e| anyhow::anyhow!("Failed to create Docker environment: {e}"))?; + let emitter_cb = Arc::clone(&emitter); + env.set_event_callback(Arc::new(move |event| { + emitter_cb.emit(&fabro_workflows::event::WorkflowRunEvent::Sandbox { event }); + })); + Arc::new(env) + } #[cfg(feature = "exedev")] SandboxProvider::Exe => { let exe_config = super::run::resolve_exe_config(None, run_defaults); diff --git a/lib/crates/fabro-cli/src/main.rs b/lib/crates/fabro-cli/src/main.rs index b6069aadd..858da7588 100644 --- a/lib/crates/fabro-cli/src/main.rs +++ b/lib/crates/fabro-cli/src/main.rs @@ -920,6 +920,8 @@ async fn main_inner() -> (String, Result<()>) { let styles: &'static fabro_util::terminal::Styles = Box::leak(Box::new(fabro_util::terminal::Styles::detect_stderr())); let cli_config = cli_config::load_cli_config(None)?; + #[cfg(feature = "sleep_inhibitor")] + let _sleep_guard = fabro_beastie::guard(cli_config.prevent_idle_sleep); let github_app = build_github_app_credentials(cli_config.app_id()); let git_author = fabro_workflows::git::GitAuthor::from_options( cli_config.git_author().and_then(|a| a.name.clone()),