Skip to main content

recall_cli/providers/
mod.rs

1pub 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}