Keep realtime mirror outside turn handler

This commit is contained in:
Ahmed Ibrahim
2026-04-12 12:37:48 -07:00
parent 649a5f722e
commit 70c065ae25
+11 -18
View File
@@ -4960,8 +4960,10 @@ mod handlers {
}
pub async fn user_input_or_turn(sess: &Arc<Session>, sub_id: String, op: Op) {
let mirror_to_realtime = true;
user_input_or_turn_inner(sess, sub_id, op, mirror_to_realtime).await;
let accepted_items = user_input_or_turn_inner(sess, sub_id, op).await;
if let Some(items) = accepted_items {
mirror_user_text_to_realtime(sess, &items).await;
}
}
pub(super) async fn user_input_or_turn_without_realtime_text_mirror(
@@ -4969,16 +4971,14 @@ mod handlers {
sub_id: String,
op: Op,
) {
let mirror_to_realtime = false;
user_input_or_turn_inner(sess, sub_id, op, mirror_to_realtime).await;
let _ = user_input_or_turn_inner(sess, sub_id, op).await;
}
async fn user_input_or_turn_inner(
sess: &Arc<Session>,
sub_id: String,
op: Op,
mirror_to_realtime: bool,
) {
) -> Option<Vec<UserInput>> {
let (items, updates, responsesapi_client_metadata) = match op {
Op::UserTurn {
cwd,
@@ -5040,7 +5040,7 @@ mod handlers {
let Ok(current_context) = sess.new_turn_with_sub_id(sub_id.clone(), updates).await else {
// new_turn_with_sub_id already emits the error event.
return;
return None;
};
sess.maybe_emit_unknown_model_warning_for_turn(current_context.as_ref())
.await;
@@ -5054,9 +5054,7 @@ mod handlers {
{
Ok(_) => {
current_context.session_telemetry.user_prompt(&items);
if mirror_to_realtime {
mirror_user_text_to_realtime(sess, &items).await;
}
Some(items)
}
Err(SteerInputError::NoActiveTurn(items)) => {
if let Some(responsesapi_client_metadata) = responsesapi_client_metadata {
@@ -5067,20 +5065,14 @@ mod handlers {
current_context.session_telemetry.user_prompt(&items);
sess.refresh_mcp_servers_if_requested(&current_context)
.await;
let realtime_items = if mirror_to_realtime {
Some(items.clone())
} else {
None
};
let accepted_items = items.clone();
sess.spawn_task(
Arc::clone(&current_context),
items,
crate::tasks::RegularTask::new(),
)
.await;
if let Some(items) = realtime_items {
mirror_user_text_to_realtime(sess, &items).await;
}
Some(accepted_items)
}
Err(err) => {
sess.send_event_raw(Event {
@@ -5088,6 +5080,7 @@ mod handlers {
msg: EventMsg::Error(err.to_error_event()),
})
.await;
None
}
}
}