(&mut self, command: String)
| 2317 | } |
| 2318 | |
| 2319 | fn submit_shell_command(&mut self, command: String) -> anyhow::Result<()> { |
| 2320 | let command = command.trim().to_string(); |
| 2321 | if command.is_empty() { |
| 2322 | return Ok(()); |
| 2323 | } |
| 2324 | |
| 2325 | let Some(client) = self.context.get_api_client() else { |
| 2326 | eprintln!("API client not initialized"); |
| 2327 | return Ok(()); |
| 2328 | }; |
| 2329 | |
| 2330 | let user_line = format!("$ {}", command); |
| 2331 | let agent = selected_agent(&self.context); |
| 2332 | let model = self.selected_model_for_prompt(); |
| 2333 | let variant = self.context.current_model_variant(); |
| 2334 | |
| 2335 | match self.context.current_route() { |
| 2336 | Route::Home => { |
| 2337 | let optimistic_session_id = self.create_optimistic_session(); |
| 2338 | let _opt_id = self.append_optimistic_user_message( |
| 2339 | &optimistic_session_id, |
| 2340 | &user_line, |
| 2341 | agent.clone(), |
| 2342 | model.clone(), |
| 2343 | variant.clone(), |
| 2344 | ); |
| 2345 | self.context.navigate(Route::Session { |
| 2346 | session_id: optimistic_session_id.clone(), |
| 2347 | }); |
| 2348 | self.ensure_session_view(&optimistic_session_id); |
| 2349 | let _ = self.draw(); |
| 2350 | |
| 2351 | let session = match client.create_session(None) { |
| 2352 | Ok(session) => session, |
| 2353 | Err(err) => { |
| 2354 | self.remove_optimistic_session(&optimistic_session_id); |
| 2355 | self.context.navigate(Route::Home); |
| 2356 | self.active_session_id = None; |
| 2357 | self.session_view = None; |
| 2358 | self.alert_dialog |
| 2359 | .set_message(&format!("Failed to create session:\n{}", err)); |
| 2360 | self.alert_dialog.open(); |
| 2361 | return Ok(()); |
| 2362 | } |
| 2363 | }; |
| 2364 | self.promote_optimistic_session(&optimistic_session_id, &session); |
| 2365 | self.context.navigate(Route::Session { |
| 2366 | session_id: session.id.clone(), |
| 2367 | }); |
| 2368 | self.ensure_session_view(&session.id); |
| 2369 | |
| 2370 | if let Err(err) = client.execute_shell(&session.id, command.clone(), None) { |
| 2371 | self.alert_dialog |
| 2372 | .set_message(&format!("Failed to execute shell command:\n{}", err)); |
| 2373 | self.alert_dialog.open(); |
| 2374 | return Ok(()); |
| 2375 | } |
| 2376 |
no test coverage detected