remem-ai 0.6.71

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use clap::Parser;

use super::types::{Cli, Commands, PendingAction};

#[test]
fn pending_archived_range_requires_dual_exact_dry_run() {
    let valid = Cli::parse_from([
        "remem",
        "pending",
        "retry-extraction-ranges",
        "--id",
        "308",
        "--acknowledge-quarantine",
        "--include-archived",
        "--dry-run",
    ]);
    match valid.command {
        Commands::Pending {
            action:
                PendingAction::RetryExtractionRanges {
                    id,
                    acknowledge_quarantine,
                    include_archived,
                    dry_run,
                    ..
                },
        } => {
            assert_eq!(id, Some(308));
            assert!(acknowledge_quarantine);
            assert!(include_archived);
            assert!(dry_run);
        }
        _ => panic!("expected archived exact dry-run"),
    }

    for invalid in [
        vec!["--include-archived"],
        vec!["--id", "308", "--include-archived", "--dry-run"],
        vec![
            "--id",
            "308",
            "--acknowledge-quarantine",
            "--include-archived",
        ],
    ] {
        let mut args = vec!["remem", "pending", "retry-extraction-ranges"];
        args.extend(invalid);
        assert!(Cli::try_parse_from(args).is_err());
    }
}

#[test]
fn worker_exact_replay_requires_complete_argument_set() {
    let cli = Cli::parse_from([
        "remem",
        "worker",
        "--once",
        "--replay-range-id",
        "308",
        "--acknowledge-quarantine",
        "--include-archived",
        "--profile",
        "claude",
    ]);
    match cli.command {
        Commands::Worker(args) => {
            assert!(args.once);
            assert_eq!(args.replay_range_id, Some(308));
            assert!(args.acknowledge_quarantine);
            assert!(args.include_archived);
            assert_eq!(args.profile.as_deref(), Some("claude"));
        }
        _ => panic!("expected exact worker command"),
    }

    for incomplete in [
        vec!["--replay-range-id", "308"],
        vec!["--once", "--replay-range-id", "308", "--profile", "claude"],
        vec!["--once", "--profile", "claude"],
    ] {
        let mut args = vec!["remem", "worker"];
        args.extend(incomplete);
        assert!(Cli::try_parse_from(args).is_err());
    }
}