use std::path::Path;
use crate::snapshot::{AgentCli, ChatMessage};
pub mod claude;
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(StubReader),
AgentCli::Gemini => Box::new(StubReader),
}
}
struct StubReader;
impl HistoryReader for StubReader {
fn list_sessions(&self, _: &Path) -> Vec<SessionMeta> { Vec::new() }
fn load_session(&self, _: &Path, _: &str) -> Vec<ChatMessage> { Vec::new() }
}