codetether-agent 4.7.0-a-002.4

A2A-native AI coding agent for the CodeTether ecosystem
Documentation
use crate::provider::{ContentPart, Message, Role};

pub(crate) fn from_messages(messages: &[Message]) -> Vec<String> {
    messages
        .iter()
        .rev()
        .find(|msg| matches!(msg.role, Role::User))
        .map(text_parts)
        .map(|text| from_text(&text))
        .unwrap_or_default()
}

fn text_parts(msg: &Message) -> String {
    msg.content
        .iter()
        .filter_map(|part| match part {
            ContentPart::Text { text } => Some(text.as_str()),
            _ => None,
        })
        .collect::<Vec<_>>()
        .join("\n")
}

fn from_text(text: &str) -> Vec<String> {
    text.lines()
        .map(str::trim)
        .filter(|line| line.starts_with("- ") || line.starts_with("* "))
        .map(|line| line[2..].trim().to_string())
        .filter(|line| !line.is_empty())
        .take(12)
        .collect()
}