kiromi-ai-cli 0.2.2

Operator and developer CLI for the kiromi-ai-memory store: append, search, snapshot, regenerate, migrate-scheme, gc, audit-tail.
// SPDX-License-Identifier: Apache-2.0 OR MIT
//! `kiromi-ai-memory list` — page memories under a partition.

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(())
}