diff --git a/rust/crates/rusty-claude-cli/src/main.rs b/rust/crates/rusty-claude-cli/src/main.rs index d1b1e18..692fd5d 100644 --- a/rust/crates/rusty-claude-cli/src/main.rs +++ b/rust/crates/rusty-claude-cli/src/main.rs @@ -1096,20 +1096,34 @@ impl LiveCli { ) } - fn run_turn(&mut self, input: &str) -> Result<(), Box> { - let session = self.runtime.session().clone(); + fn prepare_turn_runtime( + &self, + emit_output: bool, + ) -> Result< + ( + ConversationRuntime, + HookAbortMonitor, + ), + Box, + > { let hook_abort_signal = runtime::HookAbortSignal::new(); - let mut runtime = build_runtime( - session, + let runtime = build_runtime( + self.runtime.session().clone(), self.model.clone(), self.system_prompt.clone(), true, - true, + emit_output, self.allowed_tools.clone(), self.permission_mode, )? .with_hook_abort_signal(hook_abort_signal.clone()); let hook_abort_monitor = HookAbortMonitor::spawn(hook_abort_signal); + + Ok((runtime, hook_abort_monitor)) + } + + fn run_turn(&mut self, input: &str) -> Result<(), Box> { + let (mut runtime, hook_abort_monitor) = self.prepare_turn_runtime(true)?; let mut spinner = Spinner::new(); let mut stdout = io::stdout(); spinner.tick( @@ -1155,19 +1169,7 @@ impl LiveCli { } fn run_prompt_json(&mut self, input: &str) -> Result<(), Box> { - let session = self.runtime.session().clone(); - let hook_abort_signal = runtime::HookAbortSignal::new(); - let mut runtime = build_runtime( - session, - self.model.clone(), - self.system_prompt.clone(), - true, - false, - self.allowed_tools.clone(), - self.permission_mode, - )? - .with_hook_abort_signal(hook_abort_signal.clone()); - let hook_abort_monitor = HookAbortMonitor::spawn(hook_abort_signal); + let (mut runtime, hook_abort_monitor) = self.prepare_turn_runtime(false)?; let mut permission_prompter = CliPermissionPrompter::new(self.permission_mode); let result = runtime.run_turn(input, Some(&mut permission_prompter)); hook_abort_monitor.stop();