recall_cli/providers/
mod.rs1pub mod claude;
2pub mod copilot;
3
4use crate::session::Session;
5
6pub trait Provider {
7 fn name(&self) -> &str;
8 fn discover_sessions(&self) -> Vec<Session>;
9}
10
11pub fn load_all_sessions() -> Vec<Session> {
12 let providers: Vec<Box<dyn Provider>> = vec![
13 Box::new(copilot::CopilotProvider),
14 Box::new(claude::ClaudeCodeProvider),
15 ];
16
17 let mut sessions: Vec<Session> = providers
18 .iter()
19 .flat_map(|p| {
20 let name = p.name().to_string();
21 p.discover_sessions().into_iter().map(move |mut s| {
22 s.provider = name.clone();
23 s
24 })
25 })
26 .collect();
27
28 sessions.sort_by(|a, b| b.updated_at.cmp(&a.updated_at));
29 sessions
30}