roder-core 0.3.2

Agentic software development tools and SDKs for Roder.
Documentation
use super::*;

pub(super) async fn persisted_mailbox_messages(
    runtime: &Arc<Runtime>,
    team_id: &str,
    thread_id: &str,
    turn_id: &str,
    payloads: &[&str],
) -> Vec<String> {
    tokio::time::timeout(std::time::Duration::from_secs(3), async {
        loop {
            let team = runtime.read_team(team_id).await.unwrap();
            if payloads.iter().all(|payload| {
                team.mailbox
                    .iter()
                    .any(|message| message.text == *payload && message.delivered)
            }) {
                break;
            }
            tokio::task::yield_now().await;
        }
    })
    .await
    .expect("mailbox input reaches sampling promptly");
    let snapshot = runtime
        .load_thread(&thread_id.to_string())
        .await
        .unwrap()
        .unwrap();
    snapshot
        .turns
        .iter()
        .find(|turn| turn.turn_id == turn_id)
        .unwrap()
        .items
        .iter()
        .filter_map(|item| match item {
            TranscriptItem::UserMessage(message) => Some(message.text.clone()),
            _ => None,
        })
        .collect()
}