use gradatum_admin::{
api_key_cmd, init, jobs_cmd, token, BackfillArgs, BackfillTitlesArgs, DowngradeFromTrashArgs,
};
use clap::{Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(version, about = "gradatum-admin — CLI opérateur Gradatum")]
struct Cli {
#[command(subcommand)]
command: Cmd,
}
#[derive(Debug, Subcommand)]
enum Cmd {
Init(init::InitArgs),
Token {
#[command(subcommand)]
cmd: token::TokenCmd,
},
#[command(name = "api-key")]
ApiKey {
#[command(subcommand)]
cmd: api_key_cmd::ApiKeyCmd,
},
#[command(name = "backfill-embeddings")]
BackfillEmbeddings {
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long)]
tenant: Option<String>,
#[arg(long)]
limit: Option<usize>,
},
#[command(name = "backfill-titles")]
BackfillTitles {
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long, default_value = "main")]
tenant: String,
#[arg(long)]
dry_run: bool,
#[arg(long)]
limit: Option<usize>,
},
Jobs {
#[command(subcommand)]
cmd: jobs_cmd::JobsCmd,
},
#[command(name = "downgrade-from-legacy-vault-trash")]
DowngradeFromLegacyVaultTrash {
#[arg(long, default_value = "/home/maintainer-user/.memory-vault")]
legacy_vault_path: std::path::PathBuf,
#[arg(long, default_value = "/var/lib/gradatum")]
root: std::path::PathBuf,
#[arg(long)]
dry_run: bool,
#[arg(long)]
limit: Option<usize>,
},
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::fmt::try_init().ok();
let cli = Cli::parse();
match cli.command {
Cmd::Init(args) => init::run(args),
Cmd::Token { cmd } => token::run(cmd),
Cmd::ApiKey { cmd } => api_key_cmd::run(cmd).await,
Cmd::Jobs { cmd } => jobs_cmd::run(cmd).await,
Cmd::BackfillEmbeddings {
root,
tenant,
limit,
} => {
let args = BackfillArgs {
root,
tenant,
limit,
};
let n = gradatum_admin::backfill(args).await?;
println!("backfill-embeddings: {n} job(s) enqueued");
Ok(())
}
Cmd::BackfillTitles {
root,
tenant,
dry_run,
limit,
} => {
let args = BackfillTitlesArgs {
root,
tenant,
dry_run,
limit,
};
let report = gradatum_admin::backfill_titles(args).await?;
if dry_run {
println!(
"backfill-titles [DRY-RUN]: notes_scanned={} titles_extracted={} titles_updated={} titles_no_h1={}",
report.notes_scanned,
report.titles_extracted,
report.titles_updated,
report.titles_no_h1,
);
} else {
println!(
"backfill-titles: notes_scanned={} titles_extracted={} titles_updated={} titles_no_h1={}",
report.notes_scanned,
report.titles_extracted,
report.titles_updated,
report.titles_no_h1,
);
}
Ok(())
}
Cmd::DowngradeFromLegacyVaultTrash {
legacy_vault_path,
root,
dry_run,
limit,
} => {
let args = DowngradeFromTrashArgs {
legacy_vault_path,
gradatum_root: root,
dry_run,
limit,
};
let stats = gradatum_admin::downgrade_from_vault_trash(args).await?;
println!("downgrade-from-legacy-vault-trash complete: {stats:?}");
Ok(())
}
}
}
#[cfg(test)]
mod tests {
#[test]
fn version_is_set() {
assert!(!env!("CARGO_PKG_VERSION").is_empty());
}
}