MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / show_recent_sessions

Function show_recent_sessions

atomic-cli/src/commands/session.rs:116–206  ·  view source on GitHub ↗
(repo: &Repository, limit: usize, json: bool)

Source from the content-addressed store, hash-verified

114}
115
116fn show_recent_sessions(repo: &Repository, limit: usize, json: bool) -> CliResult<()> {
117 let ledgers = repo
118 .list_session_ledgers(limit)
119 .map_err(CliError::Repository)?;
120 if json {
121 println!(
122 "{}",
123 serde_json::to_string_pretty(&ledgers).map_err(|e| {
124 CliError::Internal(anyhow::anyhow!("failed to encode session list: {}", e))
125 })?
126 );
127 return Ok(());
128 }
129 if ledgers.is_empty() {
130 println!("No sessions recorded.");
131 return Ok(());
132 }
133
134 let intent_map = build_session_intent_map(repo);
135
136 // Compute column width for SESSION: at least the header width, but wide enough
137 // to show full session IDs so they can be copied for `atomic session show <id>`.
138 let ses_width = ledgers
139 .iter()
140 .map(|(r, _)| r.session_id.len())
141 .max()
142 .unwrap_or(0)
143 .max("SESSION".len());
144
145 // Count intents per session.
146 let intent_counts: Vec<usize> = ledgers
147 .iter()
148 .map(|(record, turns)| {
149 // Prefer plan_id from turns (managed-run).
150 let from_turns: std::collections::HashSet<&str> =
151 turns.iter().filter_map(|t| t.plan_id.as_deref()).collect();
152 if !from_turns.is_empty() {
153 return from_turns.len();
154 }
155 intent_map
156 .get(&record.session_id)
157 .map(|ids| ids.len())
158 .unwrap_or(0)
159 })
160 .collect();
161
162 println!("Recent sessions ({}):", ledgers.len());
163 println!(
164 " {:<sw$} {:<22} {:<8} {:>5} {:>7} LAST ACTIVITY",
165 "SESSION",
166 "VIEW",
167 "STATUS",
168 "TURNS",
169 "INTENTS",
170 sw = ses_width,
171 );
172 for ((record, turns), intent_count) in ledgers.into_iter().zip(intent_counts) {
173 let status = if record.ended_at.is_some() {

Callers 1

runMethod · 0.85

Calls 9

build_session_intent_mapFunction · 0.85
list_session_ledgersMethod · 0.80
lastMethod · 0.80
getMethod · 0.65
is_emptyMethod · 0.45
iterMethod · 0.45
lenMethod · 0.45
into_iterMethod · 0.45
formatMethod · 0.45

Tested by

no test coverage detected