file_search.rs

 1use anyhow::Result;
 2use assistant_settings::AgentProfileId;
 3use assistant_tools::FindPathToolInput;
 4use async_trait::async_trait;
 5use regex::Regex;
 6
 7use crate::example::{Example, ExampleContext, ExampleMetadata};
 8
 9pub struct FileSearchExample;
10
11#[async_trait(?Send)]
12impl Example for FileSearchExample {
13    fn meta(&self) -> ExampleMetadata {
14        ExampleMetadata {
15            name: "file_search".to_string(),
16            url: "https://github.com/zed-industries/zed.git".to_string(),
17            revision: "03ecb88fe30794873f191ddb728f597935b3101c".to_string(),
18            language_server: None,
19            max_assertions: Some(3),
20            profile_id: AgentProfileId::default(),
21        }
22    }
23
24    async fn conversation(&self, cx: &mut ExampleContext) -> Result<()> {
25        const FILENAME: &str = "find_replace_file_tool.rs";
26        cx.push_user_message(format!(
27                r#"
28        Look at the `{FILENAME}`. I want to implement a card for it. The card should implement the `Render` trait.
29
30        The card should show a diff. It should be a beautifully presented diff. The card "box" should look like what we show for
31        markdown codeblocks (look at `MarkdownElement`). I want to see a red background for lines that were deleted and a green
32        background for lines that were added. We should have a div per diff line.
33        "#
34        ));
35
36        let response = cx.run_turn().await?;
37        let tool_use = response.expect_tool("find_path", cx)?;
38        let input = tool_use.parse_input::<FindPathToolInput>()?;
39
40        let glob = input.glob;
41        cx.assert(glob.ends_with(FILENAME), "glob ends with file name")?;
42
43        let without_filename = glob.replace(FILENAME, "");
44        let matches = Regex::new("(\\*\\*|zed)/(\\*\\*?/)?")
45            .unwrap()
46            .is_match(&without_filename);
47
48        cx.assert(matches, "glob starts with `**` or project")?;
49
50        Ok(())
51    }
52}