mcp_servers/coding/
tools_trait.rs1use std::fmt::Debug;
2use std::future::Future;
3use std::path::PathBuf;
4
5use super::error::CodingError;
6use super::tools::ast_grep::{AstGrepInput, AstGrepOutput, perform_ast_grep};
7use super::tools::bash::{BackgroundProcessHandle, BashInput, BashResult, ReadBackgroundBashOutput};
8use super::tools::edit_file::{EditFileArgs, EditFileResponse};
9use super::tools::find::{FindInput, FindOutput, find_files_by_name};
10use super::tools::grep::{GrepInput, GrepOutput, perform_grep};
11use super::tools::list_files::{ListFilesArgs, ListFilesResult};
12use super::tools::read_file::{ReadFileArgs, ReadFileResult};
13use super::tools::write_file::{WriteFileArgs, WriteFileResponse};
14
15#[doc = include_str!("../docs/coding_tools.md")]
16pub trait CodingTools: Send + Sync + Debug {
17 fn read_file(&self, args: ReadFileArgs) -> impl Future<Output = Result<ReadFileResult, CodingError>> + Send;
19
20 fn write_file(&self, args: WriteFileArgs) -> impl Future<Output = Result<WriteFileResponse, CodingError>> + Send;
22
23 fn edit_file(&self, args: EditFileArgs) -> impl Future<Output = Result<EditFileResponse, CodingError>> + Send;
25
26 fn list_files(&self, args: ListFilesArgs) -> impl Future<Output = Result<ListFilesResult, CodingError>> + Send;
28
29 fn bash(
31 &self,
32 args: BashInput,
33 cwd: Option<PathBuf>,
34 ) -> impl Future<Output = Result<BashResult, CodingError>> + Send;
35
36 fn read_background_bash(
38 &self,
39 handle: BackgroundProcessHandle,
40 filter: Option<String>,
41 ) -> impl Future<Output = Result<(ReadBackgroundBashOutput, Option<BackgroundProcessHandle>), CodingError>> + Send;
42
43 fn grep(&self, args: GrepInput) -> impl Future<Output = Result<GrepOutput, CodingError>> + Send {
45 async move { perform_grep(args).await.map_err(CodingError::from) }
46 }
47
48 fn ast_grep(&self, args: AstGrepInput) -> impl Future<Output = Result<AstGrepOutput, CodingError>> + Send {
49 async move { perform_ast_grep(args).await.map_err(CodingError::from) }
50 }
51
52 fn find(&self, args: FindInput) -> impl Future<Output = Result<FindOutput, CodingError>> + Send {
54 async move { find_files_by_name(args).await.map_err(CodingError::from) }
55 }
56}