use kiromi_ai_memory::ListOpts;
use crate::cli::{GlobalArgs, ListArgs};
use crate::cmd::append::parse_partitions;
use crate::error::CliError;
use crate::output;
use crate::runtime::Runtime;
pub(crate) async fn run(args: ListArgs, globals: &GlobalArgs) -> Result<(), CliError> {
let rt = Runtime::open(globals).await?;
let partitions = parse_partitions(&args.partition)?;
let mut opts = ListOpts::default();
opts.limit = args.limit;
opts.cursor = args.cursor;
opts.include_tombstoned = args.include_tombstoned;
let page = rt.mem.list(partitions, opts).await?;
if globals.json {
let wire = serde_json::json!({
"items": page.items.iter().map(|r| serde_json::json!({
"id": r.id.to_string(),
"partition": r.partition.as_str(),
})).collect::<Vec<_>>(),
"next_cursor": page.next_cursor,
});
println!("{}", output::to_json(&wire));
} else {
println!("{}", output::refs_table(&page.items));
if let Some(c) = page.next_cursor {
eprintln!("next-cursor: {c}");
}
}
rt.mem.close().await?;
Ok(())
}