ai-agent 0.88.0

Idiomatic agent sdk inspired by the claude code source leak
Documentation
use crate::components::messages::{AssistantTextMessage, UserTextMessage};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReplScreen {
    pub messages: Vec<ReplMessage>,
    pub input_value: String,
    pub is_processing: bool,
    pub cursor_position: usize,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum ReplMessage {
    User(UserTextMessage),
    Assistant(AssistantTextMessage),
    System(String),
}

impl Default for ReplScreen {
    fn default() -> Self {
        Self {
            messages: Vec::new(),
            input_value: String::new(),
            is_processing: false,
            cursor_position: 0,
        }
    }
}

impl ReplScreen {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn add_message(&mut self, message: ReplMessage) {
        self.messages.push(message);
    }

    pub fn set_input(&mut self, value: String) {
        self.input_value = value;
        self.cursor_position = value.len();
    }

    pub fn clear_input(&mut self) {
        self.input_value.clear();
        self.cursor_position = 0;
    }

    pub fn set_processing(&mut self, processing: bool) {
        self.is_processing = processing;
    }

    pub fn clear_messages(&mut self) {
        self.messages.clear();
    }
}