MCPcopy Create free account
hub / github.com/c4pt0r/pie / event_loop

Method event_loop

crates/coding-agent/src/ui/mod.rs:368–455  ·  view source on GitHub ↗
(
        &mut self,
        terminal: &mut Terminal<CrosstermBackend<std::io::Stdout>>,
    )

Source from the content-addressed store, hash-verified

366 }
367
368 async fn event_loop(
369 &mut self,
370 terminal: &mut Terminal<CrosstermBackend<std::io::Stdout>>,
371 ) -> Result<()> {
372 let mut reader = EventStream::new();
373 let mut tick = tokio::time::interval(Duration::from_millis(100));
374 let mut feed_rx = self.feed_rx.take().expect("feed_rx taken once");
375 let mut main_run_rx = self.main_run_rx.take().expect("main_run_rx taken once");
376 let mut control_plane_prompt_rx = self.control_plane_prompt_rx.take();
377 let mut relay_prompt_rx = self
378 .relay_prompt_rx
379 .take()
380 .expect("relay_prompt_rx taken once");
381 let mut relay_abort_rx = self
382 .relay_abort_rx
383 .take()
384 .expect("relay_abort_rx taken once");
385 let mut relay_resolve_rx = self
386 .relay_resolve_rx
387 .take()
388 .expect("relay_resolve_rx taken once");
389 let mut relay_model_rx = self
390 .relay_model_rx
391 .take()
392 .expect("relay_model_rx taken once");
393 let mut turn = TurnState::default();
394 self.refresh_goal_state().await;
395
396 loop {
397 terminal.draw(|f| self.render(f))?;
398 self.push_relay_snapshot();
399 if self.quit {
400 break;
401 }
402 tokio::select! {
403 biased;
404 result = poll_turn(&mut turn.fut), if turn.fut.is_some() => {
405 self.finish_turn(&mut turn, result).await;
406 }
407 maybe_event = reader.next() => {
408 match maybe_event {
409 Some(Ok(event)) => self.handle_event(event, &mut turn, terminal).await?,
410 Some(Err(_)) => {}
411 None => self.quit = true,
412 }
413 }
414 Some(update) = feed_rx.recv() => {
415 self.apply_feed_update(update);
416 while let Ok(update) = feed_rx.try_recv() {
417 self.apply_feed_update(update);
418 }
419 }
420 Some(trace_id) = main_run_rx.recv(), if turn.fut.is_none() => {
421 self.start_triggered_turn(trace_id, &mut turn);
422 }
423 Some(text) = relay_prompt_rx.recv() => {
424 self.submit_remote_text(text, &mut turn);
425 }

Callers 1

runMethod · 0.80

Calls 3

refresh_goal_stateMethod · 0.80
renderMethod · 0.80
push_relay_snapshotMethod · 0.80

Tested by

no test coverage detected