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 inspect --memory <id> | --partition <path>`.
//!
//! Slice 1 dumps the row + recent audit-log entries. The lookup is read-only
//! over the metadata store; storage is not touched.

use std::str::FromStr;

use kiromi_ai_memory::{MemoryId, PartitionPath};

use crate::cli::{GlobalArgs, InspectArgs};
use crate::error::{CliError, ExitCode};
use crate::output;
use crate::runtime::Runtime;

pub(crate) async fn run(args: InspectArgs, globals: &GlobalArgs) -> Result<(), CliError> {
    let rt = Runtime::open(globals).await?;
    let payload = match (args.memory, args.partition) {
        (Some(id_s), None) => {
            let id = MemoryId::from_str(&id_s).map_err(|e| CliError {
                kind: ExitCode::Config,
                source: anyhow::anyhow!("bad id: {e}"),
            })?;
            let row = rt
                .mem
                .metadata_inspect_memory(&id)
                .await
                .map_err(CliError::from)?;
            serde_json::json!({"memory": row})
        }
        (None, Some(p_s)) => {
            let p = PartitionPath::from_str(&p_s).map_err(|e| CliError {
                kind: ExitCode::Config,
                source: anyhow::anyhow!("bad partition: {e}"),
            })?;
            let rows = rt
                .mem
                .metadata_inspect_partition(&p)
                .await
                .map_err(CliError::from)?;
            serde_json::json!({"partition": p_s, "memories": rows})
        }
        _ => {
            return Err(CliError {
                kind: ExitCode::Config,
                source: anyhow::anyhow!("exactly one of --memory or --partition is required"),
            });
        }
    };
    println!("{}", output::to_json(&payload));
    rt.mem.close().await?;
    Ok(())
}