pleiades_agent_git/
review.rs1use std::path::PathBuf;
2use std::sync::Arc;
3
4use pleiades_agent_core::error::Error;
5use pleiades_agent_core::provider::Provider;
6use pleiades_agent_prompts::BuiltinPrompts;
7
8use crate::common::{generate_from_diff, git_diff};
9
10pub struct ReviewGenerator {
12 provider: Arc<dyn Provider>,
13 model: String,
14 repository: PathBuf,
15 staged: bool,
16}
17
18impl ReviewGenerator {
19 pub fn new(provider: Arc<dyn Provider>, model: impl Into<String>) -> Self {
20 Self {
21 provider,
22 model: model.into(),
23 repository: PathBuf::from("."),
24 staged: false,
25 }
26 }
27
28 pub fn with_repository(mut self, repository: impl Into<PathBuf>) -> Self {
29 self.repository = repository.into();
30 self
31 }
32
33 pub fn staged(mut self, staged: bool) -> Self {
34 self.staged = staged;
35 self
36 }
37
38 pub async fn generate(&self) -> Result<String, Error> {
39 let arguments: &[&str] = if self.staged {
40 &["diff", "--staged", "--no-ext-diff"]
41 } else {
42 &["diff", "--no-ext-diff"]
43 };
44 let diff = git_diff(&self.repository, arguments).await?;
45 generate_from_diff(
46 self.provider.as_ref(),
47 &self.model,
48 BuiltinPrompts::code_reviewer(),
49 &diff,
50 None,
51 )
52 .await
53 }
54}