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