sr_ai/commands/
explain.rs1use crate::ai::{AiRequest, BackendConfig, resolve_backend};
2use crate::git::GitRepo;
3use crate::ui;
4use anyhow::Result;
5
6#[derive(Debug, clap::Args)]
7pub struct ExplainArgs {
8 #[arg(default_value = "HEAD")]
10 pub rev: String,
11}
12
13pub async fn run(args: &ExplainArgs, backend_config: &BackendConfig) -> Result<()> {
14 let repo = GitRepo::discover()?;
15 let backend = resolve_backend(backend_config).await?;
16
17 let show = repo.show(&args.rev)?;
18
19 let spinner = ui::spinner(&format!("Explaining commit with {}...", backend.name()));
20
21 let request = AiRequest {
22 system_prompt: crate::prompts::explain::SYSTEM_PROMPT.to_string(),
23 user_prompt: format!("Explain this commit:\n\n{show}"),
24 json_schema: None,
25 working_dir: repo.root().to_string_lossy().to_string(),
26 };
27
28 let response = backend.request(&request, None).await?;
29 spinner.finish_and_clear();
30
31 println!("{}", response.text);
32
33 Ok(())
34}