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
#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic, missing_docs)]

mod common;

use common::CliWorkspace;

#[test]
fn exit_2_on_unrecognised_storage_uri() {
    let ws = CliWorkspace::new();
    let mut cmd = ws.cmd();
    cmd.env("KIROMI_AI_STORAGE", "s3://nope").args(["init"]);
    let out = cmd.output().unwrap();
    assert_eq!(out.status.code(), Some(2));
}

#[test]
fn exit_3_on_unknown_memory() {
    let ws = CliWorkspace::new();
    assert!(ws.init().status.success());
    let out = ws
        .cmd()
        .args(["get", "01ARZ3NDEKTSV4RRFFQ69G5FAV"])
        .output()
        .unwrap();
    assert_eq!(out.status.code(), Some(3));
}

#[test]
fn exit_4_on_tombstoned_memory() {
    let ws = CliWorkspace::new();
    assert!(ws.init().status.success());
    let out = ws
        .cmd()
        .args([
            "append",
            "--partition",
            "user=alex,year=2026,month=05,topic=meetings",
            "--message",
            "rip",
        ])
        .output()
        .unwrap();
    let id = String::from_utf8(out.stdout).unwrap().trim().to_string();
    let _ = ws.cmd().args(["delete", &id]).output().unwrap();
    let get = ws.cmd().args(["get", &id]).output().unwrap();
    assert_eq!(get.status.code(), Some(4));
}

#[test]
fn exit_7_on_scheme_mismatch_reopen() {
    let ws = CliWorkspace::new();
    // First init with one scheme.
    assert!(ws.init().status.success());
    // Reopen with a different scheme.
    let mut cmd = ws.cmd();
    cmd.env("KIROMI_AI_SCHEME", "different={different}")
        .arg("init");
    let out = cmd.output().unwrap();
    assert_eq!(out.status.code(), Some(7));
}