use std::path::Path;
use crate::pty::snapshot::{AgentCli, ChatMessage};
pub mod claude;
pub mod codex;
pub mod gemini;
pub mod opencode;
pub use claude::invalidate_projects_dir_cache;
#[derive(Debug, Clone)]
pub struct SessionMeta {
pub id: String,
pub timestamp: i64, pub preview: String, }
pub trait HistoryReader {
fn list_sessions(&self, workdir: &Path) -> Vec<SessionMeta>;
fn load_session(&self, workdir: &Path, session_id: &str) -> Vec<ChatMessage>;
fn latest_session(&self, workdir: &Path) -> Option<String> {
self.list_sessions(workdir).into_iter().next().map(|m| m.id)
}
}
pub fn reader_for(cli: AgentCli) -> Box<dyn HistoryReader> {
match cli {
AgentCli::Claude => Box::new(claude::ClaudeHistoryReader),
AgentCli::Codex => Box::new(codex::CodexHistoryReader),
AgentCli::Gemini => Box::new(gemini::GeminiHistoryReader),
AgentCli::OpenCode => Box::new(opencode::OpenCodeHistoryReader),
}
}