ai-agent 0.88.0

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

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResumeConversationScreen {
    pub sessions: Vec<ResumeSession>,
    pub selected_index: usize,
    pub search_query: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResumeSession {
    pub session_id: String,
    pub title: String,
    pub preview: String,
    pub created_at: i64,
    pub last_active: i64,
}

impl ResumeConversationScreen {
    pub fn new() -> Self {
        Self {
            sessions: Vec::new(),
            selected_index: 0,
            search_query: None,
        }
    }

    pub fn add_session(&mut self, session: ResumeSession) {
        self.sessions.push(session);
    }

    pub fn select_next(&mut self) {
        if !self.sessions.is_empty() {
            self.selected_index = (self.selected_index + 1) % self.sessions.len();
        }
    }

    pub fn select_previous(&mut self) {
        if !self.sessions.is_empty() {
            self.selected_index = if self.selected_index == 0 {
                self.sessions.len() - 1
            } else {
                self.selected_index - 1
            };
        }
    }

    pub fn set_search(&mut self, query: Option<String>) {
        self.search_query = query;
    }

    pub fn selected_session(&self) -> Option<&ResumeSession> {
        self.sessions.get(self.selected_index)
    }
}

impl Default for ResumeConversationScreen {
    fn default() -> Self {
        Self::new()
    }
}