From 3ee1aa69b08d3ff35d108430ed51a2aa57f254d0 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 5 Apr 2026 03:54:01 -0400 Subject: [PATCH] mind: zero UiMessages from Mind's run loop MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UserInput display moved to UI diff — when MindState.input goes from populated to empty (consumed by a turn), the UI displays it. Mind no longer sends any UiMessage from its event loop. Remaining UiMessages are only in the startup function (one-time init info). Co-Authored-By: Kent Overstreet --- src/mind/mod.rs | 3 --- src/user/event_loop.rs | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mind/mod.rs b/src/mind/mod.rs index 032b4cb..c2c79ca 100644 --- a/src/mind/mod.rs +++ b/src/mind/mod.rs @@ -246,9 +246,6 @@ impl Mind { ); } MindCommand::Turn(input, target) => { - if target == StreamTarget::Conversation { - let _ = self.ui_tx.send(UiMessage::UserInput(input.clone())); - } self.shared.lock().unwrap().turn_active = true; let _ = self.turn_watch.send(true); let agent = self.agent.clone(); diff --git a/src/user/event_loop.rs b/src/user/event_loop.rs index e7b2805..ccd5a36 100644 --- a/src/user/event_loop.rs +++ b/src/user/event_loop.rs @@ -263,6 +263,11 @@ pub async fn run( })); dirty = true; } + if cur.turn_active && !prev_mind.turn_active && !prev_mind.input.is_empty() { + let text = prev_mind.input.join("\n"); + let _ = ui_tx.send(UiMessage::UserInput(text)); + dirty = true; + } if cur.turn_active != prev_mind.turn_active { dirty = true; }