use std::collections::VecDeque;
use super::QueuedUserBlock;
use super::renderer_state::WatchActivityState;
use crate::renderer_handle::RendererHandle;
pub(super) fn user_front_matches(
queued_user_blocks: &VecDeque<QueuedUserBlock>,
text: &str,
) -> bool {
queued_user_blocks.front().is_some_and(|queued| {
queued.text == text && queued.message_class == tau_proto::PromptMessageClass::User
})
}
pub(super) fn reconcile(
cancel: &tau_proto::UiCancelPrompt,
watches: &WatchActivityState,
queued_user_blocks: &mut VecDeque<QueuedUserBlock>,
handle: &RendererHandle,
) {
let Some(prompt_id) = cancel.agent_prompt_id.as_ref() else {
return;
};
let terminated = watches.terminated_agent_prompts.contains(prompt_id);
if terminated
&& watches
.provider_finished_before_termination
.contains(prompt_id)
{
return;
}
let mut removed_block_ids = Vec::new();
queued_user_blocks.retain(|queued| {
if queued.message_class.is_internal() && !terminated {
return true;
}
removed_block_ids.extend(queued.id);
false
});
let removed_visible_block = !removed_block_ids.is_empty();
for block_id in removed_block_ids {
handle.remove_block(block_id);
}
if removed_visible_block {
handle.redraw();
}
}