(&mut self)
| 2202 | } |
| 2203 | |
| 2204 | fn submit_prompt(&mut self) -> anyhow::Result<()> { |
| 2205 | let shell_mode = self.prompt.is_shell_mode(); |
| 2206 | let input = self.prompt.take_input(); |
| 2207 | if input.trim().is_empty() { |
| 2208 | return Ok(()); |
| 2209 | } |
| 2210 | |
| 2211 | if shell_mode { |
| 2212 | return self.submit_shell_command(input); |
| 2213 | } |
| 2214 | |
| 2215 | let Some(client) = self.context.get_api_client() else { |
| 2216 | eprintln!("API client not initialized"); |
| 2217 | return Ok(()); |
| 2218 | }; |
| 2219 | |
| 2220 | let agent = selected_agent(&self.context); |
| 2221 | let model = self.selected_model_for_prompt(); |
| 2222 | let variant = self.context.current_model_variant(); |
| 2223 | |
| 2224 | match self.context.current_route() { |
| 2225 | Route::Home => { |
| 2226 | let optimistic_session_id = self.create_optimistic_session(); |
| 2227 | let opt_id = self.append_optimistic_user_message( |
| 2228 | &optimistic_session_id, |
| 2229 | &input, |
| 2230 | agent.clone(), |
| 2231 | model.clone(), |
| 2232 | variant.clone(), |
| 2233 | ); |
| 2234 | self.context.navigate(Route::Session { |
| 2235 | session_id: optimistic_session_id.clone(), |
| 2236 | }); |
| 2237 | self.ensure_session_view(&optimistic_session_id); |
| 2238 | self.set_session_status(&optimistic_session_id, SessionStatus::Running); |
| 2239 | self.prompt.set_spinner_task_kind(TaskKind::LlmRequest); |
| 2240 | self.prompt.set_spinner_active(true); |
| 2241 | // Render immediately so the user sees their message before network I/O. |
| 2242 | let _ = self.draw(); |
| 2243 | |
| 2244 | let session = match client.create_session(None) { |
| 2245 | Ok(session) => session, |
| 2246 | Err(err) => { |
| 2247 | self.remove_optimistic_session(&optimistic_session_id); |
| 2248 | self.context.navigate(Route::Home); |
| 2249 | self.active_session_id = None; |
| 2250 | self.session_view = None; |
| 2251 | self.prompt.set_spinner_active(false); |
| 2252 | self.alert_dialog |
| 2253 | .set_message(&format!("Failed to create session:\n{}", err)); |
| 2254 | self.alert_dialog.open(); |
| 2255 | return Ok(()); |
| 2256 | } |
| 2257 | }; |
| 2258 | self.promote_optimistic_session(&optimistic_session_id, &session); |
| 2259 | self.context.navigate(Route::Session { |
| 2260 | session_id: session.id.clone(), |
| 2261 | }); |
no test coverage detected